Tartalomjegyzék:
- Lépés: Anyagok és eszközök
- 2. lépés: Az áramkör összeszerelése
- 3. lépés: Az MCU villogása
- 4. lépés: Az áramkör burkolatának összeszerelése
- 5. lépés: A szerelvényvezetékek csatlakoztatása a vezérlőhöz
- 6. lépés: A vezérlő tesztelése
- 7. lépés: Konfigurálás az I2C -n keresztül a konzolbemenet használatával
- 8. lépés: Következő lépések
Videó: IOT123 - SOLAR TRACKER - VEZÉRLŐ: 8 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:43
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:
- Használja az eredeti Instructable LDR -jeit a nap hozzávetőleges helyének érzékeléséhez.
- Mozgassa a szervókat a nap felé.
- Lehetőségek a mozgások érzékenységére.
- Lehetőségek a lépésmérethez, amikor a napra költözik.
- A szervóknál használt szögkorlátok beállításai.
- Lehetőségek a mozgások késleltetésére.
- I2C interfész az értékek beállításához/lekéréséhez az MCU -k között.
- Mély alvás a mozdulatok között.
Amit ez nem tartalmaz (és az idő engedik meg):
- Csak nappali időben használja az áramot.
- Emlékezzünk a hajnali helyzetre, és menjünk oda alkonyati leálláskor.
- A szabályozó eltávolítása az MCU -ból.
- A LED (ek) letiltása az MCU -n.
- A teljesítmény átirányítása VCC -n keresztül RAW helyett.
- 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.
- 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
Most már van egy teljes Bill of Materials and Sources lista.
- 3D nyomtatott alkatrészek.
- Arduino Pro Mini 3.3V 8mHz
- 1 db 4x6 cm -es dupla oldalú prototípus -PCB univerzális nyomtatott áramköri lap (félbe kell vágni)
- 1 db 40P hím fejléc (méretre kell vágni).
- 1 db 40P női fejléc (méretre kell vágni).
- 4 db 10K 1/4W ellenállás.
- Csatlakozó vezeték.
- Forrasztás és vas.
- 20 darab 4G x 6 mm -es rozsdamentes serpenyőfej öncsavar.
- 4 db 4G x 6mm rozsdamentes süllyesztett önmetsző csavar.
- 1 db 3,7 V -os LiPo akkumulátor és tartó (2P dupont csatlakozókban végződik).
- 1 db 2P -es férfi derékszögű fejléc
- 1 ki SPDT kapcsoló 3 tűs, 2,54 mm -es osztás
- Erős cianoakrilát ragasztó
- 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örben jelenleg nincs feszültségosztó áramkör (voltmérő).
- Vágja félbe a 4x6 cm -es dupla oldalú prototípus -PCB univerzális nyomtatott áramköri lapot a hosszú tengely mentén.
-
Vágja darabokra a 40P férfi fejlécet:
- 2 kikapcsol 12P
- 3 ki 3P
- 6 kikapcsol 2P.
-
Vágja darabokra a 40P női fejlécet:
- 2 kikapcsol 12P
- 1 ki 6P
- Forrasztás 2 le 12Pfemale fejléc az ábrán látható módon.
- 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
- 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.
- 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).
- 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).
- 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.
- 3.3V átmenő lyuk, az oldalsó (piros) RAW fejléc PIN -kódja #1.
- Kövesse a narancssárga bekötést a 11. számú PIN -től a lyukon át a forrasztásig.
- 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.
- Forrasztó női fejléc PIN #11 - férfi fejléc PIN #11 nyíláson keresztül.
- 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.
- Forrasztás kék Dupont huzal #28; forrasztás zöld Dupont huzal #29 -re.
- Az Arduino tetején rögzítse a 6P női fejlécet, majd forrasztást.
- Az Arduino tetején rögzítse a 2P derékszögű női fejlécet az int #29 és #30 -ban, majd forrasztja.
- Az Arduino alsó oldalán rögzítse a 2 db 12P és 1 db 3P dugót, majd forrasztja.
- Helyezze be az Arduino hím 12P csapokat a PCB 12P hüvelyes fejlécekbe.
3. lépés: 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
- Győződjön meg arról, hogy az Ardiuno Pro Mini be van helyezve a NYÁK fejléceibe.
- 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.
- Helyezze be az Ardiuno Pro Mini + NYÁK -ot 6P fejléccel a SOLAR TRACKER vezérlő doboza üregébe.
- 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.
- 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
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.
-
Helyezze be az LDR csatlakozásokat (polaritás nélkül) felülről:
- Jobb felső
- Bal felső
- Jobb alsó
- Bal alsó
-
Helyezze be a szervocsatlakozásokat (a jelvezetékkel balra) felülről:
- Vízszintes
- Függőleges
- 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
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.
- Töltse fel a következő szkriptet egy D1M WIFI BLOCK -ra (vagy Wemos D1 Mini -re).
- Húzza ki az USB -t a PC -ből
-
PIN-KAPCSOLATOK: -ve (vezérlő) => GND (D1M)+ve (vezérlő) => 3V3 (D1M) SCL (vezérlő) => D1 (D1M)
SDA (vezérlő) => D2 (D1M)
- Fordítsa az SPDT kapcsolót CONFIG állásba
- Csatlakoztassa az USB -t a számítógéphez
- Az Arduino IDE -ből indítson el egy konzol ablakot a megfelelő COM porttal
- Győződjön meg arról, hogy a "Newline" és a "9600 baud" van kiválasztva
- A parancsok bekerülnek a Küldés szövegmezőbe, majd az Enter billentyű
- A parancsok karakter bájt formátumban vannak
- Ha a második bájt (harmadik szegmens) nincs benne, akkor a szkript 0 (nulla) értéket küld
- 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:
LoRa GPS Tracker bemutató - LoRaWAN Dragino és TTN segítségével: 7 lépés
LoRa GPS Tracker bemutató | LoRaWAN Dragino -val és TTN -el: Hé, mi újság, srácok! Akarsh itt a CETech -től. Néhány projekt visszafelé megnéztük a Dragino LoRaWAN átjáróját. Különböző csomópontokat kötöttünk az átjáróhoz, és adatokat továbbítottunk a csomópontokról az átjáróhoz a TheThingsNetwork segítségével
DIY Fitness Tracker intelligens óra oximéterrel és pulzusszámmal - Moduláris elektronikus modulok a TinyCircuits -tól - A legkisebb árkád: 6 lépés
DIY Fitness Tracker intelligens óra oximéterrel és pulzusszámmal | Moduláris elektronikus modulok a TinyCircuits -tól | A legkisebb árkád: Hé, mi újság, srácok! Akarsh itt a CETech -től. Ma velünk van néhány érzékelő modul, amelyek nagyon hasznosak a mindennapi életünkben, de önmaguk apró változata. A mai érzékelők nagyon kicsi méretűek a tra
Asztali COVID19 nyomkövető órával! Raspberry Pi Powered Tracker: 6 lépés
Asztali COVID19 nyomkövető órával! Raspberry Pi Powered Tracker: Tudjuk, hogy bármikor meghalhatunk, még én is meghalhatok a bejegyzés írásakor, elvégre én, én, mindannyian halandók vagyunk. Az egész világ megremegett a COVID19 járvány miatt. Tudjuk, hogyan lehet ezt megakadályozni, de hé! tudjuk, hogyan kell imádkozni, és miért kell imádkozni
Etextil VR kesztyűk a Vive Tracker számára: 13 lépés (képekkel)
Etextíliás VR kesztyűk a Vive Tracker számára: Ez az oktatóanyag bemutatja, hogyan lehet etextil kesztyűt készíteni a VR használatához a Vive trackerrel. Lecserélik a Vive -hoz tervezett joystick -okat, így a VR -interakciók tapinthatóbbak és emberiesebbek lesznek. Ezeket „mudra” kesztyűknek nevezik, mert becsípik az indexet és
Élő Covid19 Tracker ESP8266 és OLED használatával - Valós idejű Covid19 műszerfal: 4 lépés
Élő Covid19 Tracker ESP8266 és OLED használatával | Valós idejű Covid19 irányítópult: Látogassa meg a Techtronic kemény webhelyét: http: //techtronicharsh.com Mindenhol hatalmas koronavírus -járvány (COVID19) kitörése van. Szükségessé vált a COVID-19 jelenlegi forgatókönyvének figyelemmel kísérése a világban. Tehát, mivel otthon volt, ez volt a