Sadržaj:
- Korak 1: Materijali i alati
- Korak 2: Sastavljanje kruga
- Korak 3: Treptanje MCU -a
- Korak 4: Sastavljanje kućišta kruga
- Korak 5: Spajanje vodilica uređaja na upravljač
- Korak 6: Testiranje kontrolera
- Korak 7: Konfiguriranje putem I2C pomoću unosa na konzoli
- Korak 8: Sljedeći koraci
Video: IOT123 - SOLARNI TRAKER - UPRAVLJAČ: 8 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:37
Ovo je proširenje Instructable
IOT123 - SOLARNI TRACKER - TILT/PAN, OKVIR PANELE, LDR MOUNTS RIG. Ovdje se koncentriramo na kontroler servomotora i senzore položaja sunca. Važno je naglasiti da ovaj dizajn pretpostavlja da će se koristiti 2 MCU -a: jedan (3.3V 8mHz Arduino Pro Mini) za solarni tracker i jedan neovisni MCU za vaše senzore/aktere.
Ovo je verzija 0.3
Umjesto da objavljujem sve projekte nakon potpunog zadovoljstva, prakticirat ću kontinuiranu integraciju i isporučivati nešto češće, mijenjajući ono što sam isporučio prema potrebi. Napisat ću još jedno uputstvo za punjač baterija, _kad_ je optimizacija softvera/hardvera kontrolera završena. Istaknut ću gdje su potrebne optimizacije dok koračamo kroz ovo.
Dio razloga za ovaj pristup su povratne informacije klijenata. Dečki, vidite li potrebu ili imate bolji pristup, komentirajte, ali imajte na umu da ne mogu sve isporučiti, a možda ni u vremenskom okviru koji vam odgovara. Kako se ova objašnjenja čine manje relevantnima, bit će izbrisana iz ovog članka.
Što to uključuje:
- Upotrijebite LDR -ove iz izvornog Instructablea da osjetite približnu lokaciju sunca.
- Pomaknite servomotore prema suncu.
- Mogućnosti za osjetljivost pokreta.
- Opcije za veličinu koraka pri kretanju prema suncu.
- Opcije za kutna ograničenja koja se koriste na servo pogonima.
- Mogućnosti odgode kretanja.
- I2C sučelje za postavljanje/dobivanje vrijednosti između MCU -ova.
- Duboki san između pokreta.
Ono što ovo ne uključuje (a bit će riješeno kao vrijeme dopušta):
- Napajanje se koristi samo tijekom dnevnih sati.
- Prisjećajući se zore i odlaska tamo u sumrak.
- Uklanjanje regulatora iz MCU -a.
- Onemogućavanje LED (ova) na MCU -u.
- Preusmjeravanje napajanja putem VCC -a, a ne RAW -a.
- Pružanje zaobilaznih rješenja za bljeskanje bez reguliranog napajanja s USB -a na serijski TTL pretvarač.
- Monitor napona baterije.
POVIJEST
20. prosinca 2017. V0.1 KOD
Početna verzija prati izvor svjetla, uvijek uključen, bez punjenja
7. siječnja 2018. V0.2 KOD
- PROMJENE HARDVERA
- Dodajte I2C igle
- Dodajte prekidač servo GND -ovima
- Tiskana naljepnica na poklopcu kutije upravljača
- PROMJENE SOFTVERA
- Pročitajte konfiguraciju s EEPROM -a
- Podrška sabirnice I2C kao rob drugog MCU -a (3,3 V)
- Postavite konfiguraciju putem I2C
- Postavite Omogućeno putem I2C
- Nabavite konfiguraciju putem I2C
- Nabavite svojstva vremena izvođenja putem I2C (trenutno omogućeno i trenutni intenzitet svjetlosti)
- Ukloni serijsko bilježenje (utjecalo je na I2C vrijednosti)
19. siječnja 2018. V0.3 KOD
-
HARDVER
Oznaka je ažurirana. Prekidač se sada koristi za odabir načina CONFIG ili TRACK
-
SOFTVER
- I2C se koristi samo za konfiguraciju
- Kontroler čeka 5 sekundi prije pokretanja praćenja, što omogućuje pomicanje ruku
- Za korištenje I2C konfiguracije, SPDT mora biti na CONFIG -u kao jedinica za podizanje
- Između praćenja kretanja, jedinica je u načinu dubokog sna za konfiguracijsku vrijednost SLEEP MINUTES (zadano 20 minuta).
Korak 1: Materijali i alati
Sada postoji potpuni popis materijala i izvora.
- 3D ispisani dijelovi.
- Arduino Pro Mini 3.3V 8mHz
- 1 od univerzalne tiskane ploče s dvostrukim bočnim prototipom PCB -a dimenzija 4x6 cm (prerezati na pola)
- 1 off 40P muško zaglavlje (za rezanje po veličini).
- 1 off 40P žensko zaglavlje (za rezanje po veličini).
- 4 off 10K 1/4W otpornika.
- Spojna žica.
- Lemljenje i željezo.
- 20 off samoreznih vijaka od nehrđajuće glave 4G x 6mm.
- 4 isključena samorezna vijka od nehrđajućeg čelika 4G x 6 mm.
- 1 isključeno 3.7V LiPo baterija i držač (završava se 2P dupont konektorima).
- 1 isključeno 2P muško pravokutno zaglavlje
- 1 isključeno SPDT prekidač 3 -polni razmak 2,54 mm
- Jak ljepilo s cijanoakrilatom
- Dupont konektori ženski 1P zaglavlje (1 isključeno plavo, 1 isključeno zeleno).
Korak 2: Sastavljanje kruga
Krug trenutno nema krug razdjelnika napona (voltmetar).
- Prerežite univerzalnu tiskanu pločicu s dvostrukim protokolom PCB -a dimenzija 4x6 cm po dugačkoj osi.
-
Izrežite muško zaglavlje 40P na komade:
- 2 isključeno 12P
- 3 popusta na 3P
- 6 isključeno 2P.
-
Izrežite žensko zaglavlje 40P na komade:
- 2 isključeno 12P
- 1 off 6P
- Lemljenje 2 isključeno 12P žensko zaglavlje kao što je prikazano.
- Zalijepite odstojnik uklonjen sa 3P muškog (dodatnog) zaglavlja na donju stranu SPDT sklopke ljepilom od cijanoakrilata
- Na drugu stranu zatim lemite 6 isključeno 2P, 2 isključeno 3 žensko zaglavlje i SPDT prekidač kao što je prikazano.
- Lemite 4 off 10K otpornika (A, B, C, D crno) preko kabela na GND pin header (#2 crno) i na A0 - A3 pinove zaglavlja (#5, #6, #7, #8) zatim kroz rupu (žuta) kao što je prikazano (3 fotografije + 1 dijagram).
- Pratite 3.3V iz LDR PINS lemljenja PINS #4, #6, #8, #10 i provucite kroz otvor do VCC pina ženskog zaglavlja (zeleno).
- Pratite 3.3V na strani ženskog zaglavlja kao što je prikazano (crveno) lemljenjem prema PINS #1, #12, #15.
- 3.3V kroz otvor lemljen sa strane (crveno) RAW zaglavlje PIN #1.
- Nacrtajte narančasti priključak od PIN -a 11 kroz otvor do lemljenja Ženski zatik s druge strane kao što je prikazano.
- Trag za spajanje i lemljenje plave žice za spajanje od #20 do #30 i od #31 do #13 i #16.
- Lemljenje ženskog PIN -a zaglavlja #11 na PIN -a muškog zaglavlja #11 kroz otvor.
- Pripremite 2 dupont priključka duljine 30 mm sa ženskim 1P zaglavljem (1 isključeno plavo, 1 isključeno zeleno). Očistite i kosite drugi kraj.
- Lemiti plavu žicu Dupont na #28; lemite zelenu žicu Dupont na #29.
- Na gornjoj strani Arduina pričvrstite žensko zaglavlje 6P, a zatim lemite.
- Na gornjoj strani Arduina popravite 2P žensko zaglavlje pod pravim kutom int #29 i #30, a zatim lemite.
- Na donjoj strani Arduina učvrstite 2 od 12P i 1 off 3P muške igle, a zatim lemite.
- Umetnite Arduino muške 12P pinove u PCB 12P ženske zaglavlje.
Korak 3: Treptanje MCU -a
Arduino Pro Mini prikladno je bljeskati pomoću FTDI232 USB u TTL pretvarača pomoću ženskog zaglavlja 6P. Za poravnanje 2 ploče pogledajte gornju fotografiju.
Provjerite je li na vašem FTDI232 odabrana postavka 3,3 V. Slijedite upute ovdje koristeći donji kod (koristite vezu do GIST -a).
Biblioteka niske snage (u prilogu i https://github.com/rocketscream/Low-Power) treba biti instalirana.
Nakon što je Arduino Pro Mini + PCB instaliran u kućište, još uvijek se može bljeskati dok su zaglavlja izložena. Samo odspojite upravljačku jedinicu od okvira ploče otkrivajući zaglavlje.
Solarni tragač sa nagibom sa konfiguracijom I2C/EEPROM i ciklusom spavanja između pokreta. Preciznost trajanja ciklusa spavanja smanjuje se s povećanjem trajanja, ali dovoljna za tu svrhu
/* |
* izmijenjeno iz koda |
* napisao Mathias Leroy |
* |
* V0.2 IZMJENE |
** I2C SET GET |
** EEPROM SET GET |
** UKLONITE SERIJSKI IZLAZ - UTICAJEN I2C |
** Omogući/onemogući praćenje |
** PREMJESTITE USLUGE NA OGRANIČENJA PUTEM I2C |
** PROČITAJTE TRENUTNI AVG INTENZITET KROZ I2C |
* V0.3 IZMJENE |
** PREKIDAČ ZA 2 NAČINA - TRACK (NO I2C) i CONFIGURE (USES I2C) |
** SPAVAJTE U NAČINU TRAKOVANJA (VRLO NISKA TOČNOST ZBOG 8 DRUGIH SKLOPA) |
** ODVAJATI/PRIKLJUČITI USLUGE U SANU/BUĐENJU (TRANZISTOR SE KORISTI DOGOVORNO) |
** UKLONITE KONFIGURIRAJUĆI POČETNI POLOŽAJ (ZATVORNO) |
** UKLONITE KONFIGURIRANE SEKUNDE BUDENJA (ZATVORNO) |
** UKLONITE KONFIGURIRAJNE ENABLE/DISABLE (ZATVORENO) |
** UKLJUČENO UKLONI KONFIGURIRANI TRACKER (KORISTITE HARDVERSKI PREKIDAČ) |
** UKLONITE GOLI NAPON - KORISTIT ĆE ODVOJENU I2C KOMPONENTU |
** DODAJTE SERIJSKO PRIJAVLJIVANJE KADA NE KORISTITE I2C |
*/ |
#uključi |
#uključi |
#uključi |
#uključi |
#uključ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 // prosjek svih LDRS -a |
#defineIDX_DUSK_INTENSITY13 // prosjek svih LDRS -a |
#defineIDX_END_EEPROM_SET14 |
#defineIDX_CURRENT_INTENSITY15 // prosjek svih LDRS - koristi se za izračun IDX_DAWN_INTENSITY ambijentalnog, neizravnog svjetla |
#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 _sporingDelay = 0; |
int _ugaonikH = 90; |
int _ugaoV = 90; |
int _averageTop = 0; |
int _averageRight = 0; |
int _averageBottom = 0; |
int _averageLeft = 0; |
bajt _i2cResponse = 0; |
bool _inConfigMode = netočno; |
voidsetup () |
{ |
Serial.begin (115200); |
getFromEeprom (); |
if (inConfigMode ()) {{100} {101} |
Serial.println ("Način konfiguracije"); |
Serial.print ("I2C adresa:"); |
Serial.println (_i2cVals [IDX_I2C_ADDR]); |
Wire.begin (_i2cVals [IDX_I2C_ADDR]); |
Wire.onReceive (receiveEvent); |
Wire.onRequest (requestEvent); |
}drugo{ |
Serial.println ("Način praćenja"); |
delay (5000); // vrijeme da se sklonite ako spojite bateriju itd. |
} |
} |
voidloop () |
{ |
getLightValues (); |
if (! _inConfigMode) {{100} {101} |
// ToDo: UKLJUČITE Tranzistorski prekidač |
_servoH.prilog (PIN_SERVO_H); |
_servoV.prilog (PIN_SERVO_V); |
za (int i = 0; i <20; i ++) { |
ako (i! = 0) { |
getLightValues (); |
} |
moveServos (); |
} |
kašnjenje (500); |
_servoH.detach (); |
_servoV.detach (); |
// ToDo: ISKLJUČITE TRANSISTORSKI PREKIDAČ |
kašnjenje (500); |
sleepFor ((_ i2cVals [IDX_SLEEP_MINUTES] * 60) / 8); |
} |
} |
// --------------------------------- TRENUTNI NAČIN |
boolinConfigMode () { |
pinMode (PIN_SERVO_H, ULAZ); |
_inConfigMode = digitalRead (PIN_SERVO_H) == 1; |
return _inConfigMode; |
} |
// --------------------------------- EEPROM |
voidgetFromEeprom () { |
ako( |
EEPROM.čitano (IDX_SIGN_1)! = 'S' || |
EEPROM.čitano (IDX_SIGN_2)! = 'T' || |
EEPROM.čitano (IDX_SIGN_3)! = EEPROM_VERZIJA |
) EEPROM_write_default_configuration (); |
EEPROM_čitana_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 ); |
} |
EEPROM.ažuriranje (IDX_SIGN_1, 'S'); |
EEPROM.ažuriranje (IDX_SIGN_2, 'T'); |
EEPROM.ažuriranje (IDX_SIGN_3, EEPROM_VERSION); |
} |
voidEEPROM_read_configuration () { |
Serial.println ("EEPROM_čitana_konfiguracija"); |
za (int i = 0; i <IDX_END_EEPROM_SET; i ++) { |
_i2cVals = EEPROM.čitaj (i); |
//Serial.println(String(i) + "=" + _i2cVals ); |
} |
} |
// --------------------------------- I2C |
voidreceiveEvent (int count) { |
ako (broj == I2C_MSG_IN_SIZE) |
{ |
char cmd = Wire.read (); |
indeks bajtova = Wire.read (); |
vrijednost bajta = Wire.read (); |
prekidač (cmd) { |
slučaj 'G': |
if (indeks <IDX_END_VALUES_GET) { |
_i2cResponse = _i2cVals [indeks]; |
} |
pauza; |
slučaj 'S': |
if (indeks <IDX_END_EEPROM_SET) { |
_i2cVals [indeks] = vrijednost; |
EEPROM.update (indeks, _i2cVals [indeks]); |
} |
pauza; |
zadano: |
povratak; |
} |
} |
} |
voidrequestEvent () |
{ |
Wire.write (_i2cResponse); |
} |
// --------------------------------- LDR-ovi |
voidgetLightValues () { |
int valueTopLeft = analogno čitanje (PIN_LDR_TL); |
int valueTopRight = analogRead (PIN_LDR_TR); |
int valueBottomRight = analogRead (PIN_LDR_BR); |
int valueBottomLeft = analogno čitanje (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] = karta (prosj. Intenzitet, 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]) { |
// ide lijevo |
Serial.println ("moveServos ide lijevo"); |
delay (_slowingDelay); |
za (int i = 0; i <_i2cVals [IDX_H_STEP]; i ++) { |
_servoH.write (_angleH--); |
kašnjenje (_servoLoopDelay); |
} |
} |
elseif ((_averageRight-_averageLeft)> _ i2cVals [IDX_H_SENSITIVITY] && (_angleH+_i2cVals [IDX_H_STEP]) <_ i2cVals [IDX_H_ANGLE_MAX]) { |
// ide desno |
Serial.println ("moveServos ide lijevo"); |
delay (_slowingDelay); |
za (int i = 0; i <_i2cVals [IDX_H_STEP]; i ++) { |
_servoH.write (_angleH ++); |
kašnjenje (_servoLoopDelay); |
} |
} |
drugo { |
// ne radeći ništa |
Serial.println ("moveServos ne radi ništa"); |
delay (_slowingDelay); |
} |
if ((_averageTop-_averageBottom)> _ i2cVals [IDX_V_SENSITIVITY] && (_angleV+_i2cVals [IDX_V_STEP]) <_ i2cVals [IDX_V_ANGLE_MAX]) { |
// ići gore |
Serial.println ("moveServos ide gore"); |
delay (_slowingDelay); |
za (int i = 0; i <_i2cVals [IDX_V_STEP]; i ++) { |
_servoV.write (_angleV ++); |
kašnjenje (_servoLoopDelay); |
} |
} |
elseif ((_averageBottom-_averageTop)> _ i2cVals [IDX_V_SENSITIVITY] && (_angleV-_i2cVals [IDX_V_STEP])> _ i2cVals [IDX_V_ANGLE_MIN]) { |
// ide dolje |
Serial.println ("moveServos ide dolje"); |
delay (_slowingDelay); |
za (int i = 0; i <_i2cVals [IDX_V_STEP]; i ++) { |
_servoV.write (_angleV--); |
kašnjenje (_servoLoopDelay); |
} |
} |
drugo { |
Serial.println ("moveServos ne radi ništa"); |
delay (_slowingDelay); |
} |
} |
//---------------------------------SPAVATI |
voidasleepFor (unsignedint osamsekundiSegmenti) { |
Serial.println ("sleepFor"); |
za (nepotpisani sleepCounter = sevenSecondSegments; sleepCounter> 0; sleepCounter--) |
{ |
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF); |
} |
} |
pogledajte rawtilt_pan_tracker_0.3.ino hostirano sa ❤ od strane GitHub -a
Korak 4: Sastavljanje kućišta kruga
- Provjerite je li Ardiuno Pro Mini umetnut u zaglavlja na PCB -u.
- Umetnite podnožje upravljačke kutije SOLAR TRACKER u zidove upravljačke kutije SOLAR TRACKER i pričvrstite s 2 isključena samorezna vijka od nehrđajućeg čelika 4G x 6 mm.
- Umetnite Ardiuno Pro Mini + PCB sa 6P Header prorezom u prazninu u bazi kontrolera SOLAR TRACKER.
- Umetnite poklopac kutije upravljača SOLAR TRACKER u zidove kutije upravljača SOLAR TRACKER i pričvrstite s 2 isključena samorezna vijka od nehrđajućeg čelika 4G x 6 mm.
- Pričvrstite sklop iznad na podnožje okvira s 4 isključena samorezna vijka od nehrđajućeg čelika 4G x 6 mm.
Korak 5: Spajanje vodilica uređaja na upravljač
Odgovarajuće veze spremne iz prethodnog Instructable -a su 4 isključene 2P LDR veze i 2 isključene 3P veze iz servo pogona. Ono što je privremeno dok punjenje nije spremno je baterija. Za sada upotrijebite 3,7 V LiPo koji završava 2P DuPont vezom.
-
Umetnite LDR veze (bez polariteta) odozgo:
- Gore desno
- Gore lijevo
- Dolje desno
- Dolje lijevo
-
Umetnite servo veze (sa signalnom žicom lijevo) odozgo:
- Vodoravno
- Okomito
- PRIČEKAJTE DO SPREMNOSTI ZA TADA: Umetnite naponski kabel od 3,7 V DC +ve do vrha, -ve do dna.
Korak 6: Testiranje kontrolera
Kao što je već rečeno, softver nije optimiziran za tijek rada solarnog punjenja. Može se testirati i prilagoditi korištenjem prirodnih (sunce) i neprirodnih izvora svjetlosti.
Za testiranje praćenja u kontroliranom okruženju može biti prikladno postaviti MINUTE SLEEPA na nižu vrijednost (vidi sljedeći korak).
Korak 7: Konfiguriranje putem I2C pomoću unosa na konzoli
Ovo objašnjava konfiguraciju kontrolera putem drugog MCU -a, unošenjem postavki u prozor konzole.
- Prenesite sljedeću skriptu na D1M WIFI BLOCK (ili Wemos D1 Mini).
- Odspojite USB s računala
-
PRIKLJUČCI PIN-a: -ve (Kontroler) => GND (D1M)+ve (Kontroler) => 3V3 (D1M) SCL (Kontroler) => D1 (D1M)
SDA (kontroler) => D2 (D1M)
- Okrenite SPDT prekidač na CONFIG
- Spojite USB na računalo
- Iz Arduino IDE -a pokrenite prozor konzole s ispravnim COM portom
- Provjerite jesu li odabrani "Newline" i "9600 baud"
- Naredbe se unose u okvir za slanje teksta nakon čega slijedi tipka Enter
- Naredbe su u formatu Character byte byte
- Ako drugi bajt (treći segment) nije uključen, skripta šalje 0 (nula)
- Budite oprezni pri korištenju serijskog unosa; pregledajte ono što ste unijeli prije nego pritisnete tipku "Enter". Ako ste zaključani (na primjer, promijenite I2C adresu na vrijednost koju ste zaboravili), morat ćete ponovno bljesnuti firmver kontrolera.
Podržane varijacije u prvom znaku naredbe su:
- E (Omogući servo praćenje) korisno za zaustavljanje kretanja tijekom konfiguracije. Ovo se unosi pomoću: E 0
- D (Onemogući servo praćenje) korisno za pokretanje automatskog praćenja ako ne ponovno pokrenete uređaj. Ovo se unosi pomoću: D 0
- G (Dobivanje konfiguracijske vrijednosti) čita vrijednosti iz EEPROM -a i IN -MEMORY: Ovo se unosi pomoću: G (indeks je važeća vrijednost bajta 0 - 13 i 15)
- S (Postavi vrijednost EEPROM -a) postavlja vrijednosti na EEPROM koje su dostupne nakon ponovnog pokretanja. Ovo se unosi pomoću: S (indeks je važeća vrijednost bajta 0 - 13, vrijednost je valjana vrijednost bajta i varira po svojstvu)
Kôd je istinita točka za indekse, ali sljedeće se koristi kao vodič za valjane vrijednosti/komentare:
- I2C ADRESA 0 - adresa pomoćnog regulatora, glavnom je potrebno ovo za komunikaciju s kontrolerom (zadano 10)
- MINIMALNI VERTIKALNI KUT 1 - donja granica okomitog servo servo servera (zadano 10, raspon 0 - 180)
- MAKSIMALNI VERTIKALNI KUT 2 - gornja gornja granica okomitog servo servoa (zadano 170, raspon 0 - 180)
- OSJETLJIVOST VERTICAL LDR 3 - Vertikalna margina čitanja LDR -a (zadano 20, raspon 0 - 1024)
- KORAK VERTIKALNOG KUTA 4 - kutni okomiti servo koraci pri svakom podešavanju (zadano 5, raspon 1 - 20)
- MINIMALNI VORIZONTALNI KUT 5 - kutni vodoravni donji limit servo servera (zadano 10, raspon 0 - 180)
- MAKSIMALNI HORIZONTALNI KUT 6 - gornja gornja granica vodoravnog servo servera (zadano 170, raspon 0 - 180)
- OSJETLJIVOST HORIZONTALNI LDR 7 - Vodoravna margina čitanja LDR -a (zadano 20, raspon 0 - 1024)
- HORIZONTALNI KUTNI KORAK 8 - kutni vodoravni servo koraci pri svakom podešavanju (zadano 5, raspon 1 - 20)
- MINUTE SNA 9 - približni period spavanja između praćenja (zadano 20, raspon 1 - 255)
- VERTIKALNA ZORA KUT 10 - BUDUĆA UPORABA - okomiti kut za povratak na zalazak sunca
- HORIZONTALNA ZORA KUT 11 - BUDUĆA UPOTREBA - vodoravni kut za povratak na zalazak sunca
- DAWN INTENSITY 12 - BUDUĆA KORIŠTENJA - minimalni prosjek svih LDR -ova koji pokreće početak dnevnog praćenja sunca
- INTENZITET SUMRAKA 13 - BUDUĆA KORIŠTENJA - minimalni prosjek svih LDR -ova koji pokreće prekid dnevnog praćenja sunca
- KRAJ EEPROM VRIJEDNOSTI MARKER 14 - VRIJEDNOST SE NE KORISTI
- TRENUTNI INTENZITET 15 - trenutni prosječni postotak intenziteta svjetla
- ZAVRŠETAK MARKERA VRIJEDNOSTI U PAMĆENJU 16 - VRIJEDNOST SE NE KORISTI.
Snima serijski ulaz (unos s tipkovnice u prozoru konzole) i prosljeđuje ga na I2C slave u formatu char, byte, byte
#uključi |
#defineI2C_MSG_IN_SIZE2 |
#defineI2C_MSG_OUT_SIZE3 |
#defineI2C_SLAVE_ADDRESS10 |
boolean _newData = false; |
const bajt _numChars = 32; |
char _receivedChars [_numChars]; // niz za spremanje primljenih podataka |
voidsetup () { |
Serial.begin (9600); |
Žica.početi (D2, D1); |
kašnjenje (5000); |
} |
voidloop () { |
recvWithEndMarker (); |
parseSendCommands (); |
} |
voidrecvWithEndMarker () { |
statički bajt ndx = 0; |
char endMarker = '\ n'; |
char rc; |
while (Serial.available ()> 0 && _newData == false) { |
rc = Serijski.čitaj (); |
if (rc! = endMarker) { |
_receivedChars [ndx] = rc; |
ndx ++; |
if (ndx> = _numChars) {{100} {101} |
ndx = _numChars - 1; |
} |
} else { |
_receivedChars [ndx] = '\ 0'; // završava niz |
ndx = 0; |
_newData = istina; |
} |
} |
} |
voidparseSendCommands () { |
if (_newData == true) { |
constchar delim [2] = ""; |
char *token; |
token = strtok (_receivedChars, delim); |
char cmd = _receivedChars [0]; |
indeks bajtova = 0; |
vrijednost bajta = 0; |
int i = 0; |
while (token! = NULL) { |
//Serial.println(token); |
i ++; |
switch (i) { |
slučaj 1: |
token = strtok (NULL, delim); |
indeks = atoi (žeton); |
pauza; |
slučaj 2: |
token = strtok (NULL, delim); |
if (token! = NULL) { |
vrijednost = atoi (žeton); |
} |
pauza; |
zadano: |
token = NULL; |
} |
} |
sendCmd (cmd, indeks, vrijednost); |
_newData = lažno; |
} |
} |
voidsendCmd (char cmd, indeks bajta, vrijednost bajta) { |
Serial.println ("-----"); |
Serial.println ("Slanje naredbe:"); |
Serial.println ("\ t" + niz (cmd) + "" + niz (indeks) + "" + niz (vrijednost)); |
Serial.println ("-----"); |
Wire.beginTransmission (I2C_SLAVE_ADDRESS); // prijenos na uređaj |
Wire.write (cmd); // šalje char |
Wire.write (indeks); // šalje jedan bajt |
Wire.write (vrijednost); // šalje jedan bajt |
Wire.endTransmission (); |
odgovor bajta = 0; |
bool hadResponse = false; |
if (cmd == 'G') { |
Wire.requestFrom (I2C_SLAVE_ADDRESS, 1); |
while (Wire.available ()) // rob može poslati manje od zahtjeva |
{ |
hadResponse = true; |
odgovor = Wire.read (); |
} |
if (hadResponse == true) { |
Serial.println ("Dobivanje odgovora:"); |
Serial.println (odgovor); |
}drugo{ |
Serial.println ("Nema odgovora, provjerite adresu/vezu"); |
} |
} |
} |
pogledaj rawd1m_serial_input_i2c_char_byte_byte_v0.1.ino hostirano sa ❤ od GitHub -a
Korak 8: Sljedeći koraci
Povremeno se provjeravajte radi izmjena softvera/hardvera.
Izmijenite softver/hardver prema svojim zahtjevima.
Komentirajte sve zahtjeve/optimizacije.
Preporučeni:
SOLARNA PLOČA KAO TRAKER SJENA: 7 koraka (sa slikama)
SOLARNA PLOČA KAO TRAKER SJENA: Temeljna veličina koja se koristi u fizici i drugim znanostima za opis mehaničkog kretanja je brzina. Mjerenje je ponavljajuća aktivnost u eksperimentalnim razredima. Obično koristim video kameru i softver TRACKER za proučavanje kretanja certe
IOT123 - D1M BLOK - 2xAMUX sklop: 7 koraka (sa slikama)
IOT123 - D1M BLOK - 2xAMUX sklop: D1M BLOKOVI dodaju taktilne futrole, naljepnice, vodiče za polaritet i proboje za popularne Wemos D1 Mini SOC/štitove/klonove. Jedan od problema s čipom ESP8266 je to što ima na raspolaganju samo jedan analogni IO pin. Ovo uputstvo pokazuje kako sastaviti 2xA
IOT123 - D1M BLOK - RFTXRX Sklop: 8 koraka
IOT123 - D1M BLOK - RFTXRX sklop: D1M BLOKOVI dodaju taktilne futrole, naljepnice, vodiče za polaritet i proboje za popularne Wemos D1 Mini SOC/štitove/klonove. RF odašiljači/prijamnici omogućuju ESP8266 pristup postojećoj kućnoj/industrijskoj automatizaciji. Ovo kućište omogućuje proboje za 433
IOT123 - D1M BLOK - GY521 Sklop: 8 koraka
IOT123 - D1M BLOK - GY521 Montaža: D1M BLOKOVI dodaju taktilne futrole, naljepnice, vodiče za polaritet i proboje za popularne Wemos D1 Mini SOC/štitove/klonove. Ovaj D1M BLOK omogućuje jednostavno spajanje između Wemos D1 Mini i modula GY-521 (igle za adresu i prekid se mogu spojiti
STARI ANDROID KAO TRAKER: 6 koraka
STARI ANDROID KAO TRAKER: Prvo, trebat će vam radni Android pametni telefon koji ćete možda htjeti pokloniti, trgovati ili prodati. Uvjerite se da: Radi s najmanje Androidom 4.4 Može se povezati s vašom mobilnom podatkovnom mrežom GPS je potpuno funkcionalan Koristim OnePlus 2 2015