Kazalo:
- Korak: Materiali in orodja
- 2. korak: Sestavljanje vezja
- 3. korak: Utripanje MCU
- 4. korak: Sestavljanje ohišja vezja
- 5. korak: Priključitev vodila ploščadi na krmilnik
- 6. korak: Preizkusite krmilnik
- Korak 7: Konfiguriranje prek I2C z vnosom konzole
- 8. korak: Naslednji koraki
Video: IOT123 - SOLARNI Sledilnik - UPRAVLJAČ: 8 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:07
To je razširitev Instructable
IOT123 - SOLARNI Sledilnik - nagib/posoda, okvirni okvir, LDR MOUNTS RIG. Tu se osredotočamo na krmilnik servomotorjev in senzorje položaja sonca. Pomembno je poudariti, da ta zasnova predvideva, da bosta uporabljena 2 MCU -ja: eden (3.3V 8mHz Arduino Pro Mini) za sončni sledilnik in en neodvisen MCU za vaše senzorje/igralce.
To je različica 0.3
Namesto da bi po popolnem zadovoljstvu objavil vse projekte, bom vadil stalno integracijo in nekaj pogosteje ponujal, pri čemer bom spreminjal tisto, kar sem dostavil po potrebi. Za polnilnik baterij bom napisal še eno navodilo, _ ko bo optimizacija programske/strojne opreme krmilnika končana. Ko bom stopil skozi to, bom opozoril, kje so potrebne optimizacije.
Del razloga za ta pristop so povratne informacije strank. Če vidite, da potrebujete ali imate boljši pristop, komentirajte, vendar ne pozabite, da ne morem dostaviti vsega in morda ne v časovnem okviru, ki vam ustreza. Ker se zdijo te razlage manj pomembne, bodo črtane iz tega članka.
Kaj to vključuje:
- Za zaznavanje približne lokacije sonca uporabite LDR iz prvotnega navodila.
- Servomotorje premaknite proti soncu.
- Možnosti za občutljivost gibov.
- Možnosti velikosti koraka pri premikanju na sonce.
- Možnosti kotnih omejitev, ki se uporabljajo na servomotorjih.
- Možnosti za zamude pri premikanju.
- I2C vmesnik za nastavitev/pridobivanje vrednosti med MCU -ji.
- Globok spanec med gibi.
Kaj to ne vključuje (in bo obravnavano kot časovno dovoljenje):
- Napajanje uporabljate le podnevi.
- Spomin na položaj zore in tja v mraku.
- Odstranitev regulatorja iz MCU.
- Onemogočanje LED (-ov) na MCU -ju.
- Preusmeritev napajanja prek VCC in ne RAW.
- Zagotavljanje rešitev za utripanje brez reguliranega napajanja iz pretvornika USB v serijski TTL.
- Nadzor napetosti akumulatorja.
ZGODOVINA
20. december 2017 V0.1 KODA
Začetna različica sledi svetlobnemu viru, vedno vklopljen, brez polnjenja
7. januar 2018 V0.2 KODA
- SPREMEMBE HARDVERA
- Dodajte zatiče I2C
- Dodajte stikalo servo GND
- Natisnjena nalepka na ohišju krmilne omarice
-
SPREMEMBE PROGRAMSKE OPREME
- Preberite konfiguracijo iz EEPROM -a
- Podpora vodila I2C kot suženj drugemu MCU (3,3 V)
- Nastavite konfiguracijo prek I2C
- Nastavite Omogočeno prek I2C
- Pridobite konfiguracijo prek I2C
- Pridobite lastnosti časa izvajanja prek I2C (trenutno omogočeno in trenutna intenzivnost svetlobe)
- Odstrani serijsko beleženje (vplivalo je na vrednosti I2C)
19. januar 2018 V0.3 KODA
-
HARDWARE
Oznaka posodobljena. Stikalo se zdaj uporablja za izbiro načina CONFIG ali TRACK
- PROGRAMSKA OPREMA
- I2C se uporablja samo za konfiguracijo
- Krmilnik počaka 5 sekund, preden inicializira sledenje, kar omogoča premikanje rok
- Za uporabo konfiguracije I2C mora biti SPDT na CONFIG kot zagon enote
- Med sledenjem gibanju je enota v načinu globokega spanja za konfiguracijsko vrednost SLEEP MINUTES (privzeto 20 minut).
Korak: Materiali in orodja
Zdaj je na voljo celoten seznam gradiva in virov.
- 3D tiskani deli.
- Arduino Pro Mini 3.3V 8mHz
- 1 od univerzalnega tiskanega vezja z dvostranskim prototipom PCB z dvojno stranjo (prerezati na pol)
- 1 izklop moške glave 40P (za rezanje po velikosti).
- 1 off 40P ženska glava (za rezanje po velikosti).
- 4 off 10K 1/4 W upori.
- Priključna žica.
- Spajkanje in železo.
- 20 samoreznih vijakov iz nerjaveče glave 4G x 6 mm iz nerjavečega jekla.
- 4 izklopni samorezni vijaki iz nerjavečega jekla 4G x 6 mm.
- 1 izklop 3.7V LiPo baterija in držalo (zaključek v 2P dupont priključkih).
- 1 izklop 2P moškega desnega kota glave
- 1 izklop SPDT stikalo 3 -polni razmik 2,54 mm
- Močno cianoakrilatno lepilo
- Konektorji Dupont ženski 1P priključek (1 izključeno modro, 1 izključeno zeleno).
2. korak: Sestavljanje vezja
Vezje trenutno nima vezja delilnika napetosti (voltmetra).
- Univerzalno tiskano vezje z obojestranskim tiskanim vezjem 4x6 cm prerežite na pol po dolgi osi.
-
Moško glavo 40P narežite na koščke:
- 2 off 12P
- 3 off 3P
- 6 off 2P.
-
Žensko glavo 40P narežite na koščke:
- 2 off 12P
- 1 off 6P
- Spajkanje 2 off 12P ženska glava, kot je prikazano.
- Distančnik, odstranjen s 3P moške (dodatne) glave, nalepite na spodnjo stran stikala SPDT s cianoakrilatnim lepilom
- Na drugi strani nato spajkajte 6 off 2P, 2 off 3Pmale header in stikalo SPDT, kot je prikazano.
- Spajkajte 4 iz 10K uporov (A, B, C, D črno) preko kabla na glavo zatiča GND (#2 črna) in na zatiče glave A0 - A3 (#5, #6, #7, #8) in nato skozi luknjo (rumena), kot je prikazano (3 fotografije + 1 diagram).
- Sledite 3.3V iz LDR PINS spajkanja PINS #4, #6, #8, #10 in navoj skozi luknjo do vtiča VCC v ženski glavi (zelena).
- Sledite 3.3V na ženski strani glave, kot je prikazano (rdeče) spajkanje na PINS #1, #12, #15.
- 3.3V skoznja luknja, spajkana na stranski strani (rdeča) RAW glave PIN #1.
- Sledite oranžnemu priključku iz PIN -a #11 skozi luknjo do spajkanja Ženski zatič na drugi strani, kot je prikazano.
- Sledi in spajkajte modro priključno žico od #20 do #30 in od #31 do #13 in #16.
- Spajkajte žensko glavo PIN #11 na moško PIN številko 11 glave 11 skozi luknjo.
- Pripravite 2 dupont konektorja dolžine 30 mm z žensko 1P glavo (1 off modra, 1 off zelena). Trak in kos drugega konca.
- Spajkajte modro žico Dupont na #28; spajkajte zeleno žico Dupont na #29.
- Na zgornji strani Arduina pritrdite žensko glavo 6P in nato spajkajte.
- Na zgornji strani Arduina pritrdite 2P pravokotno žensko glavo int #29 in #30 in nato spajkajte.
- Na spodnji strani Arduina pritrdite 2 moška zatiča 12P in 1 off 3P, nato pa spajkajte.
- Vstavite moške 12P zatiče Arduino v matične glave PCB 12P.
3. korak: Utripanje MCU
Arduino Pro Mini je priročno utripati s pretvornikom FTDI232 USB v TTL z uporabo ženske glave 6P. Za poravnavo dveh plošč glejte zgornjo fotografijo.
Prepričajte se, da je nastavitev 3,3 V izbrana na vašem FTDI232. Sledite tem navodilom s spodnjo kodo (uporabite povezavo do GIST).
Knjižnico z nizko porabo (priloženo in https://github.com/rocketscream/Low-Power) je treba namestiti.
Ko je Arduino Pro Mini + PCB nameščen v ohišje, ga lahko še vedno utripate, ko so zatiči glave izpostavljeni. Enoto krmilnika samo odklopite od okvirja plošče, tako da odkrijete glavo.
Solarni sledilnik z nagibom s konfiguracijo I2C/EEPROM in ciklom spanja med gibi. Natančnost trajanja cikla spanja se s povečanjem trajanja zmanjšuje, vendar v ta namen zadostuje
/* |
* spremenjeno iz kode |
* avtor Mathias Leroy |
* |
* V0.2 SPREMEMBE |
** I2C SET GET |
** EEPROM SET GET |
** ODSTRANI SERIJSKI IZHOD - VPLIVAN I2C |
** Omogoči/onemogoči sledenje |
** Premaknite storitve do omejitev prek I2C |
** PREBERITE TRENUTNO AVG INTENZITIVO PREKO I2C |
* V0.3 SPREMEMBE |
** PREKLOPITE ZA 2 NAČINA - TRACK (NO I2C) in CONFIGURE (UPORABA I2C) |
** SPAVITE V NAČINU TRACK (ZELO NIZKA TOČNOST zaradi 8 DRUGIH DELOV) |
** ODLOŽITE/PRILOŽITE STORITVE V SPANJEM/BUDENJU (TRANSISTOR, UPORABLJEN POROČNO) |
** ODSTRANI KONFIGURIRANO ZAČETNO POLOŽAJ (NEDOLOŽNO) |
** ODSTRANI KONFIGURIRANE SEKUNDE ZBUDITVE (ZMANJŠAJO) |
** ODSTRANI NASTAVLJIVO Omogoči/onemogoči (ZMANJŠAJO) |
** ODSTRANI KONFIGURIRANI TRACKER Omogočen (UPORABI STIKALO ZA OPREMO) |
** ODSTRANITE VELIKO NAPETOST - UPORABLJA LOČENO KOMPONENTO I2C |
** DODAJTE SERIJSKI DOGOVOR, KO NE UPORABLJATE I2C |
*/ |
#vključi |
#vključi |
#vključi |
#vključi |
#vključi |
#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 // povprečje vseh LDRS |
#defineIDX_DUSK_INTENSITY13 // povprečje vseh LDRS |
#defineIDX_END_EEPROM_SET14 |
#defineIDX_CURRENT_INTENSITY15 // povprečje vseh LDRS - uporablja se za izračun IDX_DAWN_INTENSITY ambientalne, neposredne svetlobe |
#defineIDX_END_VALUES_GET16 |
#defineIDX_SIGN_117 |
#defineIDX_SIGN_218 |
#defineIDX_SIGN_319 |
Servo _servoH; |
Servo _servoV; |
bajt _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 _angleH = 90; |
int _angleV = 90; |
int _averageTop = 0; |
int _averageRight = 0; |
int _averageBottom = 0; |
int _averageLeft = 0; |
bajt _i2cResponse = 0; |
bool _inConfigMode = false; |
voidsetup () |
{ |
Serial.begin (115200); |
getFromEeprom (); |
if (inConfigMode ()) { |
Serial.println ("Način konfiguracije"); |
Serial.print ("Naslov I2C:"); |
Serial.println (_i2cVals [IDX_I2C_ADDR]); |
Wire.begin (_i2cVals [IDX_I2C_ADDR]); |
Wire.onReceive (receiveEvent); |
Wire.onRequest (requestEvent); |
} drugo { |
Serial.println ("Način sledenja"); |
zakasnitev (5000); // čas, da umaknete roke, če priključite baterijo itd. |
} |
} |
voidloop () |
{ |
getLightValues (); |
if (! _inConfigMode) { |
// ToDo: VKLOPITE Tranzistorno stikalo |
_servoH.attach (PIN_SERVO_H); |
_servoV.attach (PIN_SERVO_V); |
za (int i = 0; i <20; i ++) { |
če (i! = 0) { |
getLightValues (); |
} |
moveServos (); |
} |
zamuda (500); |
_servoH.detach (); |
_servoV.detach (); |
// ToDo: IZKLOPITE Tranzistorsko stikalo |
zamuda (500); |
sleepFor ((_ i2cVals [IDX_SLEEP_MINUTES] * 60) / 8); |
} |
} |
// --------------------------------- TRENUTNI NAČIN |
boolinConfigMode () { |
pinMode (PIN_SERVO_H, VHOD); |
_inConfigMode = digitalno branje (PIN_SERVO_H) == 1; |
return _inConfigMode; |
} |
// --------------------------------- EEPROM |
voidgetFromEeprom () { |
če ( |
EEPROM.preberite (IDX_SIGN_1)! = 'S' || |
EEPROM.preberite (IDX_SIGN_2)! = 'T' || |
EEPROM.preberite (IDX_SIGN_3)! = EEPROM_VERSION |
) EEPROM_write_default_configuration (); |
EEPROM_prebrana_konfiguracija (); |
} |
voidEEPROM_write_default_configuration () { |
Serial.println ("EEPROM_write_default_configuration"); |
za (int i = 0; i <IDX_END_EEPROM_SET; i ++) { |
EEPROM.update (i, _i2cVals ); |
} |
Posodobitev EEPROM (IDX_SIGN_1, 'S'); |
Posodobitev EEPROM (IDX_SIGN_2, 'T'); |
Posodobitev EEPROM (IDX_SIGN_3, EEPROM_VERSION); |
} |
voidEEPROM_read_configuration () { |
Serial.println ("EEPROM_prebrana_konfiguracija"); |
za (int i = 0; i <IDX_END_EEPROM_SET; i ++) { |
_i2cVals = EEPROM.preberite (i); |
//Serial.println(String(i) + "=" + _i2cVals ); |
} |
} |
// --------------------------------- I2C |
voidreceiveEvent (int count) { |
če (štetje == I2C_MSG_IN_SIZE) |
{ |
char cmd = Wire.read (); |
bajtni indeks = Wire.read (); |
bajtna vrednost = Wire.read (); |
stikalo (cmd) { |
primer 'G': |
if (indeks <IDX_END_VALUES_GET) { |
_i2cResponse = _i2cVals [indeks]; |
} |
prekiniti; |
primer 'S': |
if (indeks <IDX_END_EEPROM_SET) { |
_i2cVals [indeks] = vrednost; |
EEPROM.update (indeks, _i2cVals [indeks]); |
} |
prekiniti; |
privzeto: |
vrnitev; |
} |
} |
} |
voidrequestEvent () |
{ |
Wire.write (_i2cResponse); |
} |
// --------------------------------- LDR |
voidgetLightValues () { |
int valueTopLeft = analogRead (PIN_LDR_TL); |
int valueTopRight = analogRead (PIN_LDR_TR); |
int valueBottomRight = analogRead (PIN_LDR_BR); |
int valueBottomLeft = analogno branje (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] = zemljevid (avgIntensity, 0, 1024, 0, 255); |
} |
// --------------------------------- STORITVE |
voidmoveServos () { |
Serial.println ("moveServos"); |
if ((_averageLeft-_averageRight)> _ i2cVals [IDX_H_SENSITIVITY] && (_angleH-_i2cVals [IDX_H_STEP])> _ i2cVals [IDX_H_ANGLE_MIN]) { |
// gremo levo |
Serial.println ("moveServos gre levo"); |
zakasnitev (_slowingDelay); |
for (int i = 0; i <_i2cVals [IDX_H_STEP]; i ++) { |
_servoH.write (_angleH--); |
zakasnitev (_servoLoopDelay); |
} |
} |
elseif ((_averageRight-_averageLeft)> _ i2cVals [IDX_H_SENSITIVITY] && (_angleH+_i2cVals [IDX_H_STEP]) <_ i2cVals [IDX_H_ANGLE_MAX]) { |
// gremo desno |
Serial.println ("moveServos gre levo"); |
zakasnitev (_slowingDelay); |
for (int i = 0; i <_i2cVals [IDX_H_STEP]; i ++) { |
_servoH.write (_angleH ++); |
zakasnitev (_servoLoopDelay); |
} |
} |
drugače { |
// ne delam nič |
Serial.println ("moveServos ne dela nič"); |
zakasnitev (_slowingDelay); |
} |
if ((_averageTop-_averageBottom)> _ i2cVals [IDX_V_SENSITIVITY] && (_angleV+_i2cVals [IDX_V_STEP]) <_ i2cVals [IDX_V_ANGLE_MAX]) { |
// iti gor |
Serial.println ("moveServos gre gor"); |
zakasnitev (_slowingDelay); |
for (int i = 0; i <_i2cVals [IDX_V_STEP]; i ++) { |
_servoV.write (_angleV ++); |
zakasnitev (_servoLoopDelay); |
} |
} |
elseif ((_averageBottom-_averageTop)> _ i2cVals [IDX_V_SENSITIVITY] && (_angleV-_i2cVals [IDX_V_STEP])> _ i2cVals [IDX_V_ANGLE_MIN]) { |
// grem dol |
Serial.println ("moveServos down down"); |
zakasnitev (_slowingDelay); |
for (int i = 0; i <_i2cVals [IDX_V_STEP]; i ++) { |
_servoV.write (_angleV--); |
zakasnitev (_servoLoopDelay); |
} |
} |
drugače { |
Serial.println ("moveServos ne dela nič"); |
zakasnitev (_slowingDelay); |
} |
} |
// --------------------------------- SPANJE |
voidasleepFor (unsignedint osemsekundsegmentov) { |
Serial.println ("sleepFor"); |
for (nepodpisan spalni števec = osemsekundsegmentov; spalni števec> 0; spalni števec--) |
{ |
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF); |
} |
} |
oglejte si rawtilt_pan_tracker_0.3.ino, ki ga gosti ❤ GitHub
4. korak: Sestavljanje ohišja vezja
- Prepričajte se, da je Ardiuno Pro Mini vstavljen v glave na tiskanem vezju.
- Podstavek krmilne omarice SOLAR TRACKER vstavite v stene krmilne omarice SOLAR TRACKER in jo pritrdite z 2 izvrtinama iz nerjavečega nerjavnega vijaka 4G x 6 mm.
- Vstavite Ardiuno Pro Mini + PCB s 6P glavo v režo v ohišju krmilnika SOLAR TRACKER.
- Vstavite pokrov krmilne omarice SOLAR TRACKER v stene krmilne omarice SOLAR TRACKER in jo pritrdite z 2 odklopljenimi samoreznimi vijaki iz nerjavečega jekla 4G x 6 mm.
- Pritrdite sklop zgoraj na dno okvirja plošče s 4 izklopljenimi samoreznimi vijaki iz nerjavečega jekla 4G x 6 mm.
5. korak: Priključitev vodila ploščadi na krmilnik
Ustrezne povezave, pripravljene iz prejšnjih navodil, so 4 izključene povezave 2P LDR in 2 izključene povezave 3P iz servomotorjev. Kar je začasno, dokler ni polnjenje pripravljeno, je baterija. Uporabite 3.7V LiPo, ki se zaenkrat konča v 2P DuPont povezavi.
-
Vstavite povezave LDR (brez polarnosti) od zgoraj:
- Zgoraj desno
- Zgoraj levo
- Spodaj desno
- Spodaj levo
-
Servo priključke (s signalno žico na levi strani) vstavite od zgoraj:
- Vodoravno
- Navpično
- POČAKAJTE DO PRIPRAVLJENOSTI ZA TESTA: Vstavite 3.7V DC napajalni kabel +ve na vrh, -ve na dno.
6. korak: Preizkusite krmilnik
Kot smo že omenili, programska oprema ni optimizirana za potek dela Solar Charging. Lahko pa ga preizkusimo in prilagodimo z uporabo naravnih (sončnih) in nenaravnih virov svetlobe.
Če želite preizkusiti sledenje v nadzorovanem okolju, je morda priročno, da nastavite SLEEP MINUTES na nižjo vrednost (glejte naslednji korak).
Korak 7: Konfiguriranje prek I2C z vnosom konzole
To pojasnjuje konfiguracijo krmilnika prek drugega MCU -ja in vnos nastavitev v okno konzole.
- Naložite naslednji skript v D1M WIFI BLOCK (ali Wemos D1 Mini).
- Odklopite USB iz računalnika
-
POVEZAVE PIN: -ve (krmilnik) => GND (D1M)+ve (krmilnik) => 3V3 (D1M) SCL (krmilnik) => D1 (D1M)
SDA (krmilnik) => D2 (D1M)
- Stikalo SPDT obrnite na CONFIG
- USB priključite na računalnik
- Iz Arduino IDE zaženite okno konzole s pravilnimi vrati COM
- Prepričajte se, da sta izbrana »Newline« in »9600 baud«
- Ukazi se vnesejo v polje za pošiljanje besedila, nato pa tipka Enter
- Ukazi so v obliki bajt znakov bajt
- Če drugi bajt (tretji segment) ni vključen, skript pošlje 0 (nič)
- Bodite previdni pri uporabi serijskega vhoda; preglejte, kaj ste vnesli, preden pritisnete tipko "Enter". Če ste zaklenjeni (na primer spremenite naslov I2C na vrednost, ki ste jo pozabili), boste morali znova utripati vdelano programsko opremo krmilnika.
Podprte različice prvega znaka ukaza so:
- E (Omogoči servo sledenje), uporabno za ustavitev gibanja med konfiguracijo. To se vnese z: E 0
- D (Onemogoči sledenje servo) uporabno za zagon samodejnega sledenja, če ne znova zaženete naprave. To se vnese z: D 0
- G (Pridobi konfiguracijsko vrednost) bere vrednosti iz EEPROM -a in IN -MEMORY: To se vnese z: G (indeks je veljavna bajtna vrednost 0 - 13 in 15)
- S (Nastavi vrednost EEPROM) nastavi vrednosti na EEPROM, ki so na voljo po ponovnem zagonu. To se vnese z: S (indeks je veljavna bajtna vrednost 0 - 13, vrednost veljavna bajtna vrednost in se razlikuje glede na lastnost)
Koda je resnica za indekse, vendar se za vodilo do veljavnih vrednosti/komentarjev uporablja naslednje:
- I2C ADDRESS 0 - podrejeni naslov krmilnika, glavni to potrebuje za komunikacijo s krmilnikom (privzeto 10)
- MINIMALNI VERTIKALNI KOT 1 - kotna navpična servo spodnja meja (privzeto 10, razpon 0 - 180)
- MAKSIMALNI VERTIKALNI KOT 2 - kotna navpična servo zgornja meja (privzeto 170, razpon 0 - 180)
- OBČUTLJIVOST VERTICAL LDR 3 - navpični odčitni rob LDR (privzeto 20, razpon 0 - 1024)
- KORAK VERTIKALNEGA KOTA 4 - kotni navpični servo koraki pri vsaki nastavitvi (privzeto 5, razpon 1 - 20)
- MINIMALNI VORIZONTALNI KOT 5 - kotna vodoravna spodnja meja servomotorja (privzeto 10, razpon 0 - 180)
- MAKSIMALNI VORIZONTALNI KOT 6 - kotna vodoravna servo zgornja meja (privzeto 170, razpon 0 - 180)
- OBČUTLJIVOST HORIZONTAL LDR 7 - Vodoravni odčitni rob LDR (privzeto 20, razpon 0 - 1024)
- VODIČNI KOTNI KORAK 8 - kotni vodoravni servo koraki pri vsaki nastavitvi (privzeto 5, razpon 1 - 20)
- SLEEP MINUTE 9 - približen čas spanja med sledenjem (privzeto 20, razpon 1 - 255)
- VERTIKALNI ZOR KOT 10 - PRIHODNA UPORABA - navpični kot, na katerega se lahko vrnete, ko sonce zaide
- VODIČNI ZOR KOT 11 - PRIHODNA UPORABA - vodoravni kot, na katerega se lahko vrnete, ko sonce zaide
- DAWN INTENSITY 12 - FUTURE UPE - najmanjše povprečje vseh LDR, ki sproži začetek dnevnega sledenja soncu
- INTENSITY DUSK 13 - FUTURE UPE - najmanjše povprečje vseh LDR, ki sproži konec dnevnega sledenja soncu
- KONEC ZNAKOV VREDNOSTI EEPROMA 14 - VREDNOST NI UPORABLJENA
- TRENUTNA INTENZITETA 15 - trenutni povprečni odstotek jakosti svetlobe
- KONEC MARKERJA VARNOSTI V SPOMINU 16 - VREDNOST NI UPORABLJENA.
Zajame serijski vnos (vnos s tipkovnice v oknu konzole) in ga posreduje pomožnemu I2C v obliki char, byte, byte
#vključi |
#defineI2C_MSG_IN_SIZE2 |
#defineI2C_MSG_OUT_SIZE3 |
#defineI2C_SLAVE_ADDRESS10 |
boolean _newData = false; |
const byte _numChars = 32; |
char _receivedChars [_numChars]; // polje za shranjevanje prejetih podatkov |
voidsetup () { |
Serial.begin (9600); |
Wire.begin (D2, D1); |
zamuda (5000); |
} |
voidloop () { |
recvWithEndMarker (); |
parseSendCommands (); |
} |
voidrecvWithEndMarker () { |
statični bajt ndx = 0; |
char endMarker = '\ n'; |
char rc; |
medtem ko (Serial.available ()> 0 && _newData == false) { |
rc = Serial.read (); |
if (rc! = endMarker) { |
_receivedChars [ndx] = rc; |
ndx ++; |
if (ndx> = _numChars) { |
ndx = _numChars - 1; |
} |
} drugo { |
_receivedChars [ndx] = '\ 0'; // prekinimo niz |
ndx = 0; |
_newData = res; |
} |
} |
} |
voidparseSendCommands () { |
if (_newData == true) { |
constchar delim [2] = ""; |
char *žeton; |
žeton = strtok (_prejetiChars, delim); |
char cmd = _receivedChars [0]; |
bajtni indeks = 0; |
bajtna vrednost = 0; |
int i = 0; |
while (žeton! = NULL) { |
//Serial.println(token); |
i ++; |
switch (i) { |
primer 1: |
žeton = strtok (NULL, delim); |
indeks = atoi (žeton); |
prekiniti; |
primer 2: |
žeton = strtok (NULL, delim); |
if (žeton! = NULL) { |
vrednost = atoi (žeton); |
} |
prekiniti; |
privzeto: |
žeton = NULL; |
} |
} |
sendCmd (cmd, indeks, vrednost); |
_newData = napačno; |
} |
} |
voidsendCmd (char cmd, indeks bajtov, vrednost bajtov) { |
Serial.println ("-----"); |
Serial.println ("Pošiljanje ukaza:"); |
Serial.println ("\ t" + niz (cmd) + "" + niz (indeks) + "" + niz (vrednost)); |
Serial.println ("-----"); |
Wire.beginTransmission (I2C_SLAVE_ADDRESS); // prenesite na napravo |
Wire.write (cmd); // pošlje znak |
Wire.write (indeks); // pošlje en bajt |
Wire.write (vrednost); // pošlje en bajt |
Wire.endTransmission (); |
bajtni odziv = 0; |
bool hadResponse = false; |
if (cmd == 'G') { |
Wire.requestFrom (I2C_SLAVE_ADDRESS, 1); |
while (Wire.available ()) // podrejen lahko pošlje manj, kot je zahtevano |
{ |
hadResponse = res; |
odziv = Wire.read (); |
} |
if (hadResponse == true) { |
Serial.println ("Pridobivanje odgovora:"); |
Serial.println (odgovor); |
} drugo { |
Serial.println ("Ni odziva, preverite naslov/povezavo"); |
} |
} |
} |
oglejte si rawd1m_serial_input_i2c_char_byte_byte_v0.1.ino, ki ga gosti ❤ GitHub
8. korak: Naslednji koraki
Občasno preverite, ali so v programski/strojni opremi spremembe.
Prilagodite programsko/strojno opremo vašim zahtevam.
Komentirajte vse zahteve/optimizacije.
Priporočena:
GPS sledilnik: 6 korakov
GPS sledilnik: Hej fantje, v tem videoposnetku bomo naredili GPS sledilnik z uporabo Esp 8266 (nodemcu) in neo 6m modulom GPS, zato začnimo
LoRa GPS sledilnik Vadnica - LoRaWAN z Draginom in TTN: 7 korakov
LoRa GPS sledilnik Vadnica | LoRaWAN z Draginom in TTN: Hej, kaj je, fantje! Akarsh tukaj iz CETech -a. Nekaj projektov nazaj smo si ogledali vrata LoRaWAN iz Dragina. Na Gateway smo povezali različna vozlišča in prenašali podatke iz vozlišč na Gateway z uporabo TheThingsNetwork kot s
DIY GPS sledilnik --- aplikacija Python: 5 korakov (s slikami)
DIY GPS Tracker --- aplikacija Python: Pred dvema tednoma sem sodeloval na kolesarskem dogodku. Ko sem končal, sem želel preveriti pot in hitrost, ki sem jo takrat vozil. Na žalost ni bilo doseženo. Zdaj uporabljam ESP32 za izdelavo GPS sledilnika in ga bom uporabil za snemanje svoje kolesarske poti
Kako sestaviti sledilnik časa sedenja: 7 korakov
Kako sestaviti sledilnik časa sedenja: Ta projekt bo za odkrivanje in sledenje osebi uporabil ultrazvočni senzor razdalje Zio Qwiic. Naprava bo strateško nameščena na vrhu zaslona/monitorja, obrnjena proti osebi, ki sedi, pred njenim računalnikom
Namizni sledilnik COVID19 s uro! Sledilnik z napajanjem Raspberry Pi: 6 korakov
Namizni sledilnik COVID19 s uro! Raspberry Pi Powered Tracker: Vemo, da lahko kadar koli umremo, tudi jaz lahko umrem med pisanjem te objave, navsezadnje smo jaz, ti, vsi smo smrtniki. Zaradi pandemije COVID19 se je ves svet tresel. Vemo, kako to preprečiti, ampak hej! vemo, kako moliti in zakaj moliti, ali to počnemo