Tartalomjegyzék:

IOT123 - SOLAR TRACKER - VEZÉRLŐ: 8 lépés
IOT123 - SOLAR TRACKER - VEZÉRLŐ: 8 lépés

Videó: IOT123 - SOLAR TRACKER - VEZÉRLŐ: 8 lépés

Videó: IOT123 - SOLAR TRACKER - VEZÉRLŐ: 8 lépés
Videó: IOT123 - SOLAR TRACKER CONTROLLER TEST 0 3 2024, Július
Anonim
Image
Image
IOT123 - SOLAR TRACKER - VEZÉRLŐ
IOT123 - SOLAR TRACKER - VEZÉRLŐ
IOT123 - SOLAR TRACKER - VEZÉRLŐ
IOT123 - SOLAR TRACKER - VEZÉRLŐ

Ez az Instructable kiterjesztése

IOT123 - SOLAR TRACKER - TILT/PAN, PANEL FRAME, LDR MOUNTS RIG. Itt a szervók vezérlőjére és a nap helyzetének érzékelőire koncentrálunk. Fontos megjegyezni, hogy ez a kialakítás feltételezi, hogy 2 MCU -t fog használni: egyet (3.3V 8mHz Arduino Pro Mini) a napelemes nyomkövető számára, és egy független MCU -t az érzékelők/szereplők számára.

Ez a 0.3 verzió

Ahelyett, hogy a teljes elégedettség után közzétenném az összes projektet, inkább a folyamatos integrációt fogom gyakorolni, és gyakrabban fogok valamit szolgáltatni, szükség szerint módosítva azt, amit elértem. Írok még egy utasítást az akkumulátortöltőhöz, _mikor_ befejeződik a vezérlőszoftver/hardver optimalizálása. Rámutatok arra, hogy hol van szükség az optimalizálásokra, amint ezen lépünk.

Ennek a megközelítésnek az egyik oka az ügyfelek visszajelzése. Ha úgy látja, hogy szükség van rá, vagy van egy jobb megközelítése, kérjük, írjon megjegyzést, de ne feledje, hogy nem tudok mindent teljesíteni, és esetleg nem az Önnek megfelelő időkeretben. Mivel ezek a magyarázatok kevésbé relevánsnak tűnnek, törlődnek ebből a cikkből.

Mit tartalmaz ez:

  1. Használja az eredeti Instructable LDR -jeit a nap hozzávetőleges helyének érzékeléséhez.
  2. Mozgassa a szervókat a nap felé.
  3. Lehetőségek a mozgások érzékenységére.
  4. Lehetőségek a lépésmérethez, amikor a napra költözik.
  5. A szervóknál használt szögkorlátok beállításai.
  6. Lehetőségek a mozgások késleltetésére.
  7. I2C interfész az értékek beállításához/lekéréséhez az MCU -k között.
  8. Mély alvás a mozdulatok között.

Amit ez nem tartalmaz (és az idő engedik meg):

  1. Csak nappali időben használja az áramot.
  2. Emlékezzünk a hajnali helyzetre, és menjünk oda alkonyati leálláskor.
  3. A szabályozó eltávolítása az MCU -ból.
  4. A LED (ek) letiltása az MCU -n.
  5. A teljesítmény átirányítása VCC -n keresztül RAW helyett.
  6. Megkerülő megoldásokat kínál a villogáshoz szabályozott áramellátás nélkül az USB -soros TTL átalakítóból.
  7. Akkumulátor feszültségfigyelő.

TÖRTÉNELEM

2017. december 20. V0.1 KÓD

Az első verzió követi a fényforrást, mindig be van kapcsolva, nincs töltés

2018. január 7. V0.2 KÓD

  • HARDVERVÁLTOZÁSOK

    • Adjon hozzá I2C csapokat
    • Adja hozzá a kapcsolót a szervo GND -khez
    • Nyomtatott címke a vezérlődoboz homlokzatán
  • SZOFTVERVÁLTOZÁSOK

    • Konfiguráció olvasása az EEPROM -ból
    • I2C busztámogatás egy másik MCU rabszolgájaként (3.3V)
    • Állítsa be a konfigurációt az I2C -n keresztül
    • Engedélyezve az I2C -n keresztül
    • Konfiguráció beszerzése az I2C -n keresztül
    • Szerezzen futási idejű tulajdonságokat az I2C (jelenleg engedélyezett és jelenlegi fényintenzitás) segítségével
    • Távolítsa el a soros naplózást (az I2C értékeket érintette)

2018. január 19. V0.3 KÓD

  • HARDVER

    A címke frissítve. A kapcsoló most a CONFIG vagy a TRACK mód kiválasztására szolgál

  • SZOFTVER

    • Az I2C csak konfigurálásra szolgál
    • A vezérlő 5 másodpercet vár a követés inicializálása előtt, lehetővé teszi a kezek mozgatását
    • Az I2C konfiguráció használatához az SPDT -nek egységindításként be kell kapcsolnia a CONFIG beállítást
    • A mozgáskövetés között az egység mély alvó üzemmódban van a SLEEP MINUTES konfigurációs értékhez (alapértelmezett 20 perc).

Lépés: Anyagok és eszközök

Anyagok és eszközök
Anyagok és eszközök
Anyagok és eszközök
Anyagok és eszközök
Anyagok és eszközök
Anyagok és eszközök

Most már van egy teljes Bill of Materials and Sources lista.

  1. 3D nyomtatott alkatrészek.
  2. Arduino Pro Mini 3.3V 8mHz
  3. 1 db 4x6 cm -es dupla oldalú prototípus -PCB univerzális nyomtatott áramköri lap (félbe kell vágni)
  4. 1 db 40P hím fejléc (méretre kell vágni).
  5. 1 db 40P női fejléc (méretre kell vágni).
  6. 4 db 10K 1/4W ellenállás.
  7. Csatlakozó vezeték.
  8. Forrasztás és vas.
  9. 20 darab 4G x 6 mm -es rozsdamentes serpenyőfej öncsavar.
  10. 4 db 4G x 6mm rozsdamentes süllyesztett önmetsző csavar.
  11. 1 db 3,7 V -os LiPo akkumulátor és tartó (2P dupont csatlakozókban végződik).
  12. 1 db 2P -es férfi derékszögű fejléc
  13. 1 ki SPDT kapcsoló 3 tűs, 2,54 mm -es osztás
  14. Erős cianoakrilát ragasztó
  15. Dupont csatlakozók anya 1P fejléc (1 ki kék, 1 zöld).

2. lépés: Az áramkör összeszerelése

Az áramkör összeszerelése
Az áramkör összeszerelése
Az áramkör összeszerelése
Az áramkör összeszerelése
Az áramkör összeszerelése
Az áramkör összeszerelése

Az áramkörben jelenleg nincs feszültségosztó áramkör (voltmérő).

  1. Vágja félbe a 4x6 cm -es dupla oldalú prototípus -PCB univerzális nyomtatott áramköri lapot a hosszú tengely mentén.
  2. Vágja darabokra a 40P férfi fejlécet:

    1. 2 kikapcsol 12P
    2. 3 ki 3P
    3. 6 kikapcsol 2P.
  3. Vágja darabokra a 40P női fejlécet:

    1. 2 kikapcsol 12P
    2. 1 ki 6P
  4. Forrasztás 2 le 12Pfemale fejléc az ábrán látható módon.
  5. Ragasztja a 3P -es (kiegészítő) fejrészből eltávolított távtartót az SPDT -kapcsoló alsó oldalára cianoakrilát ragasztóval
  6. A másik oldalon helyezze el a 6 forrasztást a 2P, 2 ki a 3Pmale fejlécet és az SPDT kapcsolót az ábrán látható módon.
  7. Forrasztjon le 4 darab 10K ellenállást (A, B, C, D fekete) a vezetékkel a GND tüskefejhez (#2 fekete) és az A0 - A3 fejlécekhez (#5, #6, #7, #8), majd a lyukon keresztül (sárga) az ábrán látható módon (3 fotó + 1 diagram).
  8. Nyomon kövesse a 3.3V -ot az LDR PINS forrasztó PINS #4, #6, #8, #10 -ből és menjen keresztül a lyukon keresztül a feamale header VCC csaphoz (zöld).
  9. Nyomtasson 3.3V -ot a női fejrész oldalán, az ábrán látható módon (piros) forrasztva az 1., 12., 15. PINS -hez.
  10. 3.3V átmenő lyuk, az oldalsó (piros) RAW fejléc PIN -kódja #1.
  11. Kövesse a narancssárga bekötést a 11. számú PIN -től a lyukon át a forrasztásig.
  12. Nyomja meg és forrasztja be a kék csatlakozóvezetéket #20 -tól #30 -ig és #31 -től #13 -ig és #16 -ig.
  13. Forrasztó női fejléc PIN #11 - férfi fejléc PIN #11 nyíláson keresztül.
  14. Készítsen elő 2 db 30 mm hosszú dupont csatlakozót 1P hüvelyes hüvelykel (1 nem kék, 1 zöld). Csík és ón másik vége.
  15. Forrasztás kék Dupont huzal #28; forrasztás zöld Dupont huzal #29 -re.
  16. Az Arduino tetején rögzítse a 6P női fejlécet, majd forrasztást.
  17. Az Arduino tetején rögzítse a 2P derékszögű női fejlécet az int #29 és #30 -ban, majd forrasztja.
  18. Az Arduino alsó oldalán rögzítse a 2 db 12P és 1 db 3P dugót, majd forrasztja.
  19. Helyezze be az Arduino hím 12P csapokat a PCB 12P hüvelyes fejlécekbe.

3. lépés: Az MCU villogása

Az MCU villogása
Az MCU villogása
Az MCU villogása
Az MCU villogása
Az MCU villogása
Az MCU villogása

Az Arduino Pro Mini kényelmesen villog egy FTDI232 USB -TTL átalakító segítségével a 6P női fejléc segítségével. Lásd a fenti fotót a 2 tábla beállításához.

Győződjön meg arról, hogy a 3.3V beállítás van kiválasztva az FTDI232 készüléken. Kövesse az utasításokat az alábbi kód használatával (használja a GIST linket).

Telepíteni kell az alacsony energiafogyasztású könyvtárat (mellékelve és

Miután az Arduino Pro Mini + PCB -t a burkolatba telepítette, továbbra is villoghat, mivel a fejlécek ki vannak téve. Csak válassza le a vezérlőegységet a panel keretéről, és tegye láthatóvá a fejlécet.

Dönthető napelemes nyomkövető I2C/EEPROM konfigurációval és alvásciklus a mozgások között. Az alvási ciklus időtartamának pontossága az időtartam növekedésével csökken, de elegendő erre a célra

/*
* kódból módosítva
* Mathias Leroy
*
* V0.2 MÓDOSÍTÁSOK
** I2C SET GET
** EEPROM SET GET
** SOROZATI KIMENET ELTÁVOLÍTÁSA - ÉRINTETT I2C
** A KÖVETÉS BE- ÉS TILTÁSA
** SZERVOZÁSOK KORLÁTOZÁSA I2C
** OLVASSA EL A JELENLEGI ÁTLAGOS INTENZITÁST I2C
* V0.3 MÓDOSÍTÁSOK
** VÁLTÁS 2 ÜZEMMÓDRA - PÁLYA (NO I2C) és KONFIGURÁLÁS (I2C HASZNÁLAT)
** ALVÁS PÁLYÁZATI ÜZEMMÓDBAN (NAGYON ALACSONY PONTOSSÁG 8 MÁSODIK ELLENŐRZÉS miatt)
** SZERVIZEK ELTÁVOLÍTÁSA/TELEPÍTÉSE ALVÁNYON/ÉBREDÉSBEN (TÁVOLSÁGOSAN HASZNÁLT TRANZISZTOR)
** Konfigurálható kezdeti pozíció eltávolítása (redundáns)
** Konfigurálható ébresztési másodpercek eltávolítása (redundáns)
** Távolítsa el a konfigurálható engedélyezést/letiltást (REDUNDANT)
** Távolítsa el a konfigurálható követőt, amely engedélyezve van (a hardverkapcsoló használata)
** FESZÜLTSÉG ELTÁVOLÍTÁSA - KÜLÖN I2C ALKATRÉSZT HASZNÁL
** Sorozatnaplózás hozzáadása, ha nem használja az I2C -t
*/
#befoglalni
#befoglalni
#befoglalni
#befoglalni
#befoglalni
#defineEEPROM_VERSION1
#defineI2C_MSG_IN_SIZE3
#definePIN_LDR_TL A0
#definePIN_LDR_TR A1
#definePIN_LDR_BR A3
#definePIN_LDR_BL A2
#definePIN_SERVO_V11
#definePIN_SERVO_H5
#defineIDX_I2C_ADDR0
#defineIDX_V_ANGLE_MIN1
#defineIDX_V_ANGLE_MAX2
#defineIDX_V_SENSITIVITY3
#defineIDX_V_STEP4
#defineIDX_H_ANGLE_MIN5
#defineIDX_H_ANGLE_MAX6
#defineIDX_H_SENSITIVITY7
#defineIDX_H_STEP8
#defineIDX_SLEEP_MINUTES9
#defineIDX_V_DAWN_ANGLE10
#defineIDX_H_DAWN_ANGLE11
#defineIDX_DAWN_INTENSITY12 // az összes LDRS átlaga
#defineIDX_DUSK_INTENSITY13 // az összes LDRS átlaga
#defineIDX_END_EEPROM_SET14
#defineIDX_CURRENT_INTENSITY15 // az összes LDRS átlaga - az IDX_DAWN_INTENSITY környezeti nem közvetlen fény kiszámításához használt
#defineIDX_END_VALUES_GET16
#defineIDX_SIGN_117
#defineIDX_SIGN_218
#defineIDX_SIGN_319
Szervó _szervoH;
Szervó _szervoV;
bájt _i2cVals [20] = {10, 10, 170, 20, 5, 10, 170, 20, 5, 20, 40, 10, 30, 40, 0, 0, 0, 0, 0, 0};
int _servoLoopDelay = 10;
int _slowingDelay = 0;
int _szögH = 90;
int _szögV = 90;
int _averageTop = 0;
int _averageRight = 0;
int _averageBottom = 0;
int _averageLeft = 0;
bájt _i2cResponse = 0;
bool _inConfigMode = hamis;
voidsetup ()
{
Sorozat.kezdet (115200);
getFromEeprom ();
if (inConfigMode ()) {
Serial.println ("Konfigurációs mód");
Serial.print ("I2C cím:");
Serial.println (_i2cVals [IDX_I2C_ADDR]);
Wire.begin (_i2cVals [IDX_I2C_ADDR]);
Wire.onRecept (ReceiveEvent);
Wire.onRequest (requestEvent);
}más{
Serial.println ("Követési mód");
késleltetés (5000); // az idő, amikor el kell kerülni a kezeket, ha csatlakoztatja az akkumulátort stb.
}
}
voidloop ()
{
getLightValues ();
if (! _inConfigMode) {
// Teendők: BEkapcsolni a tranzisztoros kapcsolót
_servoH.attach (PIN_SERVO_H);
_servoV.attach (PIN_SERVO_V);
for (int i = 0; i <20; i ++) {
ha (i! = 0) {
getLightValues ();
}
moveServos ();
}
késleltetés (500);
_servoH.detach ();
_servoV.detach ();
// Teendő: KAPCSOLJA KI A TRANZISZTOR KAPCSOLÓT
késleltetés (500);
SleepFor ((_ i2cVals [IDX_SLEEP_MINUTES] * 60) / 8);
}
}
// --------------------------------- AKTUÁLIS MÓD
boolinConfigMode () {
pinMode (PIN_SERVO_H, INPUT);
_inConfigMode = digitalRead (PIN_SERVO_H) == 1;
return _inConfigMode;
}
// --------------------------------- EEPROM
voidgetFromEeprom () {
ha(
EEPROM.read (IDX_SIGN_1)! = 'S' ||
EEPROM.read (IDX_SIGN_2)! = 'T' ||
EEPROM.read (IDX_SIGN_3)! = EEPROM_VERSION
) EEPROM_write_default_configuration ();
EEPROM_read_configuration ();
}
voidEEPROM_write_default_configuration () {
Serial.println ("EEPROM_write_default_configuration");
for (int i = 0; i <IDX_END_EEPROM_SET; i ++) {
EEPROM.update (i, _i2cVals );
}
EEPROM.update (IDX_SIGN_1, 'S');
EEPROM.update (IDX_SIGN_2, 'T');
EEPROM.update (IDX_SIGN_3, EEPROM_VERSION);
}
voidEEPROM_read_configuration () {
Serial.println ("EEPROM_read_configuration");
for (int i = 0; i <IDX_END_EEPROM_SET; i ++) {
_i2cVals = EEPROM.read (i);
//Serial.println(String(i) + "=" + _i2cVals );
}
}
// --------------------------------- I2C
voidreceptEvent (int count) {
ha (szám == I2C_MSG_IN_SIZE)
{
char cmd = Drót.olvasás ();
bájt index = Wire.read ();
bájt értéke = Wire.read ();
kapcsoló (cmd) {
„G” eset:
if (index <IDX_END_VALUES_GET) {
_i2cResponse = _i2cVals [index];
}
szünet;
eset:
if (index <IDX_END_EEPROM_SET) {
_i2cVals [index] = érték;
EEPROM.update (index, _i2cVals [index]);
}
szünet;
alapértelmezett:
Visszatérés;
}
}
}
voidrequestEvent ()
{
Wire.write (_i2cResponse);
}
// --------------------------------- LDR-ek
voidgetLightValues () {
int valueTopLeft = analógRead (PIN_LDR_TL);
int valueTopRight = analógRead (PIN_LDR_TR);
int valueBottomRight = analógRead (PIN_LDR_BR);
int valueBottomLeft = analógRead (PIN_LDR_BL);
_averageTop = (valueTopLeft + valueTopRight) / 2;
_averageRight = (valueTopRight + valueBottomRight) / 2;
_averageBottom = (valueBottomRight + valueBottomLeft) / 2;
_averageLeft = (valueBottomLeft + valueTopLeft) / 2;
int avgIntensity = (valueTopLeft + valueTopRight + valueBottomRight + valueBottomLeft) / 4;
_i2cVals [IDX_CURRENT_INTENSITY] = térkép (avgIntensity, 0, 1024, 0, 255);
}
// --------------------------------- SERVOS
voidmoveServos () {
Serial.println ("moveServos");
if ((_averageLeft-_averageRight)> _ i2cVals [IDX_H_SENSITIVITY] && (_angleH-_i2cVals [IDX_H_STEP])> _ i2cVals [IDX_H_ANGLE_MIN]) {
// balra megy
Serial.println ("moveServos balra megy");
delay (_slowingDelay);
for (int i = 0; i <_i2cVals [IDX_H_STEP]; i ++) {
_servoH.write (_angleH--);
delay (_servoLoopDelay);
}
}
elseif ((_averageRight-_averageLeft)> _ i2cVals [IDX_H_SENSITIVITY] && (_angleH+_i2cVals [IDX_H_STEP]) <_ i2cVals [IDX_H_ANGLE_MAX]) {
// jól megy
Serial.println ("moveServos balra megy");
delay (_slowingDelay);
for (int i = 0; i <_i2cVals [IDX_H_STEP]; i ++) {
_servoH.write (_angleH ++);
delay (_servoLoopDelay);
}
}
más {
// semmittevés
Serial.println ("moveServos nem csinál semmit");
delay (_slowingDelay);
}
if ((_averageTop-_averageBottom)> _ i2cVals [IDX_V_SENSITIVITY] && (_angleV+_i2cVals [IDX_V_STEP]) <_ i2cVals [IDX_V_ANGLE_MAX]) {
// megy fel
Serial.println ("moveServos up up");
delay (_slowingDelay);
for (int i = 0; i <_i2cVals [IDX_V_STEP]; i ++) {
_servoV.write (_angleV ++);
delay (_servoLoopDelay);
}
}
elseif ((_averageBottom-_averageTop)> _ i2cVals [IDX_V_SENSITIVITY] && (_angleV-_i2cVals [IDX_V_STEP])> _ i2cVals [IDX_V_ANGLE_MIN]) {
// lemenni
Serial.println ("moveServos down");
delay (_slowingDelay);
for (int i = 0; i <_i2cVals [IDX_V_STEP]; i ++) {
_servoV.write (_angleV--);
delay (_servoLoopDelay);
}
}
más {
Serial.println ("moveServos nem csinál semmit");
delay (_slowingDelay);
}
}
//---------------------------------ALVÁS
voidasleepFor (unsignedint eightSecondSegments) {
Serial.println ("sleepFor");
for (unsignedint sleepCounter = eightSecondSegments; sleepCounter> 0; sleepCounter--)
{
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
}
}

Tekintse meg a rawtilt_pan_tracker_0.3.ino webhelyet, amelyet a GitHub ❤ üzemeltet

4. lépés: Az áramkör burkolatának összeszerelése

Az áramkör burkolatának összeszerelése
Az áramkör burkolatának összeszerelése
Az áramkör burkolatának összeszerelése
Az áramkör burkolatának összeszerelése
Az áramkör burkolatának összeszerelése
Az áramkör burkolatának összeszerelése
  1. Győződjön meg arról, hogy az Ardiuno Pro Mini be van helyezve a NYÁK fejléceibe.
  2. Helyezze a SOLAR TRACKER vezérlő dobozalapot a SOLAR TRACKER vezérlő doboz falába, és rögzítse 2 db 4G x 6mm rozsdamentes süllyesztett önmetsző csavarral.
  3. Helyezze be az Ardiuno Pro Mini + NYÁK -ot 6P fejléccel a SOLAR TRACKER vezérlő doboza üregébe.
  4. Helyezze a SOLAR TRACKER vezérlő doboz fedelét a SOLAR TRACKER vezérlő doboz falába, és rögzítse 2 db 4G x 6mm rozsdamentes süllyesztett önmetsző csavarral.
  5. Rögzítse a szerelvényt a panel keretéhez 4 db 4G x 6mm rozsdamentes süllyesztett önmetsző csavarral.

5. lépés: A szerelvényvezetékek csatlakoztatása a vezérlőhöz

A berendezés csatlakoztatása a vezérlőhöz
A berendezés csatlakoztatása a vezérlőhöz
A szerelvényvezetékek csatlakoztatása a vezérlőhöz
A szerelvényvezetékek csatlakoztatása a vezérlőhöz
A szerelvényvezetékek csatlakoztatása a vezérlőhöz
A szerelvényvezetékek csatlakoztatása a vezérlőhöz

Az előző Instructable -ből kész megfelelő kapcsolatok: 4 db 2P LDR csatlakozás és 2 db 3P csatlakozás a szervókból. Az ideiglenes az újratöltésig az akkumulátor. Egyelőre használjon 3,7 V -os LiPo -t, amely 2P DuPont -kapcsolaton végződik.

  1. Helyezze be az LDR csatlakozásokat (polaritás nélkül) felülről:

    1. Jobb felső
    2. Bal felső
    3. Jobb alsó
    4. Bal alsó
  2. Helyezze be a szervocsatlakozásokat (a jelvezetékkel balra) felülről:

    1. Vízszintes
    2. Függőleges
  3. VÁRJON, HOGY KÉSZEN VAN TESZTRE: Ezután helyezze be a 3,7 V egyenáramú tápkábelt +ve a tetejére, -ve az aljára.

6. lépés: A vezérlő tesztelése

Image
Image

Amint azt korábban említettük, a szoftvert nem a Solar Charging munkafolyamatra optimalizálták. Bár tesztelhető és módosítható természetes (nap) és természetellenes fényforrások használatával.

A követés ellenőrzött környezetben történő teszteléséhez kényelmes lehet a SLEEP MINUTES értéket alacsonyabbra állítani (lásd a következő lépést).

7. lépés: Konfigurálás az I2C -n keresztül a konzolbemenet használatával

Ez megmagyarázza a vezérlő konfigurálását egy második MCU -n keresztül, a beállítások bevitelét a konzol ablakába.

  1. Töltse fel a következő szkriptet egy D1M WIFI BLOCK -ra (vagy Wemos D1 Mini -re).
  2. Húzza ki az USB -t a PC -ből
  3. PIN-KAPCSOLATOK: -ve (vezérlő) => GND (D1M)+ve (vezérlő) => 3V3 (D1M) SCL (vezérlő) => D1 (D1M)

    SDA (vezérlő) => D2 (D1M)

  4. Fordítsa az SPDT kapcsolót CONFIG állásba
  5. Csatlakoztassa az USB -t a számítógéphez
  6. Az Arduino IDE -ből indítson el egy konzol ablakot a megfelelő COM porttal
  7. Győződjön meg arról, hogy a "Newline" és a "9600 baud" van kiválasztva
  8. A parancsok bekerülnek a Küldés szövegmezőbe, majd az Enter billentyű
  9. A parancsok karakter bájt formátumban vannak
  10. Ha a második bájt (harmadik szegmens) nincs benne, akkor a szkript 0 (nulla) értéket küld
  11. Legyen óvatos a soros bemenet használatával; Mielőtt megnyomná az "Enter" gombot, nézze át, mit adott meg. Ha le van zárva (például az I2C cím megváltoztatása olyan értékre, amelyet elfelejtett), akkor újra fel kell villannia a vezérlő firmware -jét.

A parancs első karakterének támogatott változatai a következők:

  • E (Szervokövetés engedélyezése) hasznos a mozgás leállításához a konfiguráció során. Ez a bemenet használatával használható: E 0
  • D (Szervokövetés letiltása) hasznos az automatikus követés elindításához, ha nem indítja újra az eszközt. Ez a bemenet használatával: D 0
  • A G (Konfigurációs érték lekérése) értékeket olvas be az EEPROM és az IN -MEMORY memóriából: Ezt a következő módon adja meg: G (az index érvényes bájtértékek 0 - 13 és 15)
  • Az S (EEPROM érték beállítása) értékeket állít be EEPROM értékre, amelyek az újraindítás után állnak rendelkezésre. Ezt a következőképpen kell megadni: S (az index érvényes bájtértékek 0 - 13, az érték érvényes bájtértékek, és tulajdonságonként változnak)

A kód az igazság pontja az indexeknél, de az alábbiak útmutatóként szolgálnak az érvényes értékekhez/megjegyzésekhez:

  • I2C CÍM 0 - vezérlő szolga címe, a mesternek szüksége van erre a vezérlővel való kommunikációhoz (alapértelmezett 10)
  • MINIMÁLIS FÜGGŐLEGES SZÖG 1 - szög függőleges szervo alsó határ (alapértelmezett 10, tartomány 0 - 180)
  • MAXIMÁLIS FÜGGŐLEGES SZÖG 2 - szög függőleges szervo felső határ (alapértelmezett 170, tartomány 0 - 180)
  • ÉRZÉKENYSÉG VERTICAL LDR 3 - Függőleges LDR olvasási margó (alapértelmezett 20, 0-1024 tartomány)
  • FÜGGŐLEGES SZÖG 4. LÉPÉS - szög függőleges szervo lépések minden beállításnál (alapértelmezett 5, 1-20 tartomány)
  • MINIMÁLIS VÍZSZINTES SZÖG 5 - vízszintes szervo alsó határ (alapértelmezett 10, tartomány 0 - 180)
  • MAXIMÁLIS VÍZSZINTES SZÖG 6 - szögletes vízszintes szervo felső határ (alapértelmezett 170, tartomány 0 - 180)
  • ÉRZÉKENYSÉG HORIZONTÁLIS LDR 7 - Vízszintes LDR olvasási margó (alapértelmezett 20, 0-1024 tartomány)
  • VÍZSZINTES SZÖG 8. LÉPÉS - szögletes vízszintes szervo lépések minden beállításnál (alapértelmezett 5, 1-20 tartomány)
  • SLEEP MINUTES 9 - a nyomkövetés közötti hozzávetőleges alvási időszak (alapértelmezett 20, tartomány 1–255)
  • FÜGGŐLEGES HAJNAK 10. SZÖG - JÖVŐ HASZNÁLAT - a függőleges szög, amelyhez vissza kell térni, amikor lemegy a nap
  • VÍZSZINTES HAJNAK 11. SZÖG - JÖVŐ HASZNÁLAT - a vízszintes szög, amelyhez vissza kell térni, amikor lemegy a nap
  • DAWN INTENSITY 12 - JÖVŐ HASZNÁLAT - az összes LDR minimális átlaga, amely elindítja a napi napkövetést
  • DUSK INTENSITY 13 - JÖVŐ HASZNÁLAT - az összes LDR minimális átlaga, amely kiváltja a napi napkövetés befejezését
  • EEPROM ÉRTÉKEK VÉGE MARKER 14 - AZ ÉRTÉK NEM HASZNÁLT
  • CURRENT INTENSITY 15 - a fényintenzitás jelenlegi átlagos százaléka
  • A MEMÓRIAÉRTÉK VÉGE VÉGE MARKER 16 - AZ ÉRTÉK NEM HASZNÁLT.

Rögzíti a soros bemenetet (billentyűzet bemenet a konzol ablakában), és továbbítja azt egy I2C slave -nek char, byte, byte formátumban

#befoglalni
#defineI2C_MSG_IN_SIZE2
#defineI2C_MSG_OUT_SIZE3
#defineI2C_SLAVE_ADDRESS10
boolean _newData = hamis;
const bájt _numChars = 32;
char _receivedChars [_numChars]; // tömb a fogadott adatok tárolására
voidsetup () {
Sorozat.kezdet (9600);
Wire.begin (D2, D1);
késleltetés (5000);
}
voidloop () {
recvWithEndMarker ();
parseSendCommands ();
}
voidrecvWithEndMarker () {
statikus bájt ndx = 0;
char endMarker = '\ n';
char rc;
while (Serial.available ()> 0 && _newData == false) {
rc = Sorozat.olvasás ();
if (rc! = endMarker) {
_receivedChars [ndx] = rc;
ndx ++;
if (ndx> = _számChars) {
ndx = _számChars - 1;
}
} más {
_receivedChars [ndx] = '\ 0'; // fejezze be a karakterláncot
ndx = 0;
_newData = igaz;
}
}
}
voidparseSendCommands () {
if (_newData == igaz) {
constchar delim [2] = "";
char *token;
token = strtok (_receivedChars, delim);
char cmd = _receivedChars [0];
bájt index = 0;
bájt értéke = 0;
int i = 0;
while (token! = NULL) {
//Serial.println(token);
i ++;
kapcsoló (i) {
1. eset:
token = strtok (NULL, delim);
index = atoi (token);
szünet;
2. eset:
token = strtok (NULL, delim);
if (token! = NULL) {
érték = atoi (token);
}
szünet;
alapértelmezett:
token = NULL;
}
}
sendCmd (cmd, index, érték);
_newData = hamis;
}
}
voidsendCmd (char cmd, bájt index, bájtérték) {
Soros.println ("-----");
Serial.println ("Küldési parancs:");
Serial.println ("\ t" + String (cmd) + "" + String (index) + "" + String (érték));
Soros.println ("-----");
Wire.beginTransmission (I2C_SLAVE_ADDRESS); // továbbítás az eszközre
Wire.write (cmd); // karaktert küld
Wire.write (index); // egy bájtot küld
Wire.write (érték); // egy bájtot küld
Wire.endTransmission ();
bájt válasz = 0;
bool hadResponse = hamis;
ha (cmd == 'G') {
Wire.requestFrom (I2C_SLAVE_ADDRESS, 1);
míg a (Wire.available ()) // a slave kevesebbet küldhet a kértnél
{
hadResponse = igaz;
válasz = Wire.read ();
}
if (hadResponse == igaz) {
Serial.println ("Válasz lekérése:");
Serial.println (válasz);
}más{
Serial.println ("Nincs válasz, ellenőrizze a címet/kapcsolatot");
}
}
}

Nézd meg a rawd1m_serial_input_i2c_char_byte_byte_v0.1.ino -t, amelyet a GitHub üzemeltet

8. lépés: Következő lépések

Nézzen vissza rendszeresen, hogy ellenőrizze a szoftver/hardver változásait.

Módosítsa a szoftvert/hardvert igényei szerint.

Szóljon hozzá bármilyen kéréshez/optimalizáláshoz.

Ajánlott: