Cuprins:

Lampă solară reîncărcabilă alimentată cu XOD: 9 pași (cu imagini)
Lampă solară reîncărcabilă alimentată cu XOD: 9 pași (cu imagini)

Video: Lampă solară reîncărcabilă alimentată cu XOD: 9 pași (cu imagini)

Video: Lampă solară reîncărcabilă alimentată cu XOD: 9 pași (cu imagini)
Video: Lampa Led Solara cu senzor miscare - BlitzWolf BW-OLT8 2024, Iulie
Anonim
Lampă solară reîncărcabilă alimentată cu XOD
Lampă solară reîncărcabilă alimentată cu XOD

Există lămpi solare ieftine de grădină / pasarelă disponibile la majoritatea magazinelor de articole de uz casnic și feronerie. Dar, după cum se spune vechea zicală, obțineți de obicei ceea ce plătiți. Circuitele obișnuite de încărcare și iluminare pe care le folosesc sunt simple și ieftine, dar puterea de lumină pe care o obțineți este oricât de impresionantă (și abia suficientă pentru ca oricine vă folosește pasarela să vadă unde se îndreaptă!)

Aceasta este încercarea mea de a proiecta un modul de iluminare off-grid, care este o îmbunătățire semnificativă, în timp ce este încă relativ ieftin de realizat. Dându-i niște „creiere”. XOD.io este un nou IDE compatibil cu platforma de dezvoltare încorporată Arduino, unde puteți „scrie” cod grafic. Mediul transpune schița grafică în C ++ modern, care este extrem de eficient la generarea codului compact și generează o sursă complet compatibilă cu stocul IDE Arduino, fără a necesita dependențe externe suplimentare. În acest fel, chiar și microcontrolerele mici și ieftine, cu resurse limitate de stocare și programare, pot fi folosite pentru a îndeplini sarcini complexe.

Acest proiect arată cum două microcontrolere ATTiny85 compatibile Arduino care funcționează împreună pot fi utilizate pentru a gestiona cerințele de alimentare ale lămpii. Primul procesor se ocupă de datele de detectare a mediului de pe hardware-ul extern, iar al doilea încearcă să culeagă cea mai mare energie din soare pe care o poate face în timpul zilei și apoi să controleze iluminarea unui LED de mare putere, pe măsură ce bateria de stocare se descarcă noaptea. Al doilea procesor își realizează treaba printr-o implementare compactă a controlului „logică fuzzy”. Software-ul pentru ambele cipuri a fost dezvoltat exclusiv în mediul XOD.

Pasul 1: Materiale necesare

Arduino IDE, ultima versiune, cu extensia ATTinyCore instalată din managerul „Boards”

Programator Sparkfun USBTinyISP ATTiny, 11801 sau pagina produsului echivalent Sparkfun

Convertor de tensiune reglabil de joasă tensiune Pololu cu intrare de închidere, U1V11A sau pagina produsului echivalent Pololu

LED de mare putere alb sau RGB cu radiator, anod comun, Adafruit 2524 sau pagina produsului echivalent Adafruit

Microchip ATTiny85 în pachet DIP cu 8 pini, pagina produsului 2 Mouser

8 prize DIP IC, 2

Condensator de stocare în vrac, 16 v 220 uF

Condensator de ieșire, 6.3v 47uF

Rezistențe cu limitare de curent, 50 ohmi 1/4 wați

Rezistențe de tracțiune i2c, 4.7k, 2

Rezistoare de separare a tensiunii panoului, 1/4 wați, 100k, 470k

Rezistor de detectare a curentului, 10 ohmi ½ watt 1% toleranță

Condensatori de bypass, ceramică 0.1uF, 2

2 Baterie reîncărcabilă litiu-ion de 3,7 v 100mAh, PKCELL LP401 sau echivalent

Mufă de intrare mufă butoi pentru panou, 1

Mini blocuri de borne 3”x3” placă de lipit și tampon subțire cu miez solid pentru realizarea conexiunilor

Un osciloscop, un multimetru și o sursă de alimentare pe bancă vor fi aproape sigur necesare pentru testare

Pasul 2: Configurarea mediului

Configurare mediu
Configurare mediu

Mediul XOD nu acceptă seria de procesoare ATTiny, dar folosind câteva biblioteci terțe din universul Arduino este simplu să adăugați suport pentru această serie de AVR-uri. Primul pas este instalarea bibliotecii „ATTinyCore” din meniul derulant „Tools → Board → Board Manager” al Arduino IDE. Asigurați-vă că setările așa cum se arată în imaginea inclusă sunt corecte - amintiți-vă că trebuie să apăsați „Burn bootloader” pentru a modifica siguranțele de setare a tensiunii și a vitezei de ceas înainte de a încărca orice cod!

Codul sursă pentru această bibliotecă este disponibil la:

O altă bibliotecă utilă pe care o aveți din depozit este „FixedPoints”, care este o implementare în timp de compilare a matematicii cu punct fix pentru procesoarele suportate de Arduino. ATTiny are memorie SRAM și program limitată și ajută foarte mult la micșorarea dimensiunii schiței finale pentru a utiliza un număr întreg de 2 octeți pentru stocarea generală a datelor, mai degrabă decât un tip cu virgulă mobilă, care necesită 4 octeți pe AVR. Viteza de execuție ar trebui, de asemenea, îmbunătățită, deoarece ATTiny nu are o unitate de multiplicare hardware, cu atât mai puțină virgulă hardware!

Codul sursă este disponibil la:

Tutorialul despre cum să creați, transpileți și implementați schițe grafice XOD la: https://github.com/Pharap/FixedPointsArduino vă va ajuta foarte mult la înțelegerea modului în care au fost create fișierele sursă incluse.

Pasul 3: Prezentare generală a proiectului

Prezentare generală a designului
Prezentare generală a designului
Prezentare generală a designului
Prezentare generală a designului

Pe placă, două procesoare ATTiny85 sunt conectate printr-o interfață i2c și sunt utilizate împreună pentru a gestiona detectarea tensiunii panoului solar, curentul care curge în baterie de la convertorul de creștere în timp ce panoul este luminat, tensiunea bateriei și bateria temperatura.

Convertorul de creștere este un modul disponibil bazat pe un Texas Instruments TPS6120 IC, care poate lua o tensiune de intrare de până la 0,5 volți și o poate mări oriunde de la 2 volți la 5 volți. Miezul senzorului cuprinde mai multe blocuri funcționale. Ceasul principal începe să funcționeze de îndată ce este alimentată convertorul de impuls de la intrarea panoului solar. Aceasta începe executarea schiței și primul lucru este să determinați dacă panoul este suficient de luminat pentru a furniza curent de încărcare la baterie.

Tensiunea panoului solar este trecută prin două filtre digitale și, dacă depășește un anumit prag, sistemul determină faptul că panoul este luminat și pornește ceasul principal în monitorul cu sens curent. Acesta este un canal de convertor analogic digital al cipului, configurat diferențial, care detectează tensiunea pe un rezistor de toleranță de 10 ohmi 1% conectat în serie între ieșirea convertorului de impuls și intrarea bateriei. Când panoul nu este luminat, acest ATTiny trimite un semnal către cel de-al doilea ATTiny, spunându-i să monitorizeze puterea LED-ului în loc de încărcare și să oprească convertorul de amplificare și să izoleze intrarea, astfel încât bateria să nu trimită curent înapoi prin panou.

Al doilea nucleu ATTiny este locul în care se execută controlerul LED și sistemul de monitorizare a încărcării bateriei. Datele despre tensiunea panoului, tensiunea bateriei și încărcarea bateriei sunt trimise către acest nucleu pentru procesare printr-o rețea logică fuzzy, care încearcă să genereze un semnal PWM adecvat pentru a se aplica pinului SHTDN, controlând astfel cantitatea de curent trimisă la baterie pentru a-l încărca atunci când este iluminat - o formă de bază de urmărire maximă a punctului de putere (MPPT). De asemenea, primește un semnal de la miezul senzorului care îi spune dacă ar trebui să aprindă sau să stingă LED-ul, în funcție de ieșirea din ziua miezului senzorului / flip flop de noapte.

Când LED-ul este activ noaptea, acest ATTiny monitorizează datele de tensiune ale bateriei trimise de la prietenul său și propriul său senzor de temperatură pe cip, pentru a obține o estimare aproximativă a cantității de energie împinsă în LED (tensiunea bateriei scade și temperatura cipului crește odată cu curentul scos din pinii săi.) Rețeaua de logică fuzzy asociată cu patch-ul LED PWM încearcă să judece cât de multă baterie este încă disponibilă și să scadă intensitatea LED-ului pe măsură ce bateria este epuizată.

Pasul 4: Crearea patch-urilor personalizate din biblioteca de bază XOD

Crearea de patch-uri personalizate din biblioteca de bază XOD
Crearea de patch-uri personalizate din biblioteca de bază XOD
Crearea de patch-uri personalizate din biblioteca de bază XOD
Crearea de patch-uri personalizate din biblioteca de bază XOD

Pentru acest design au fost utilizate mai multe noduri de patch-uri personalizate, dintre care unele pot fi ușor construite în întregime din nodurile XOD incluse, iar altele care au fost implementate în C ++.

Primul dintre cele două noduri de patch-uri personalizate din imagini este o implementare a unui filtru exponențial mediu-mobil. Acesta este un filtru digital low-overhead, utilizat în serie în schiță, o dată pentru a filtra tensiunea panoului solar de intrare pentru nucleul logic și încă o dată pentru a alimenta declanșatorul care determină iluminarea ambientală pe termen lung. Consultați intrarea Wikipedia despre netezirea exponențială.

Structura nodului din imagine este doar o reprezentare grafică directă a funcției de transfer din articol, conectată împreună folosind legături de la intrările corespunzătoare la ieșiri. Există un nod de amânare din bibliotecă care permite crearea unei bucle de feedback (XOD vă va avertiza dacă creați o buclă de feedback fără a introduce o întârziere în buclă, așa cum este descris în modelul de execuție XOD.) Având în vedere acest detaliu patch-ul funcționează bine, este simplu.

Al doilea nod de patch-uri personalizate este o variantă a flip-flop-ului de stoc inclus cu XOD, care este alimentat cu tensiunea panoului filtrat. Se blochează ridicat sau scăzut, în funcție de semnalul de intrare care este peste sau sub un anumit prag. Nodurile turnate sunt folosite pentru a converti valorile de ieșire booleene la tipul de date de impuls pentru a declanșa flip flop-ul, pe măsură ce starea trece de la scăzut la înalt. Proiectarea acestui nod de patch-uri ar trebui să fie oarecum explicabilă de la captura de ecran.

Pasul 5: Crearea patch-urilor personalizate utilizând C ++

Crearea de patch-uri personalizate utilizând C ++
Crearea de patch-uri personalizate utilizând C ++

Pentru cerințe speciale în care funcționalitatea nodului necesară ar fi prea complexă pentru a fi descrisă cu ușurință grafic sau care se bazează pe biblioteci Arduino care nu sunt originare din mediul Arduino stoc, XOD face mai ușor pentru cei cu o anumită cunoștință C / C ++ să scrie bucăți de dimensiuni cod care poate fi apoi integrat într-un patch la fel ca orice alt nod creat sau creat de utilizator. Selectarea „creați un patch nou” din meniul fișier creează o foaie goală cu care să lucrați, iar nodurile de intrare și ieșire pot fi trase în secțiunea „noduri” a bibliotecii de bază. Apoi nodul „neimplementat-în-xod” poate fi tras în interior și, atunci când faceți clic, va apărea un editor de text în care funcționalitatea necesară poate fi implementată în C ++. Cum se gestionează starea internă și accesarea porturilor de intrare și ieșire din codul C ++ este prezentat aici.

Ca exemplu de implementare a patch-urilor personalizate în C ++, sunt utilizate alte două patch-uri personalizate pentru nucleul driverului pentru afișarea unei estimări a tensiunii de alimentare și a temperaturii nucleului conductorului driverului. Împreună cu rețeaua sa fuzzy, aceasta permite o estimare aproximativă a puterii rămase a bateriei disponibile pentru alimentarea LED-urilor când este întuneric.

Patch-ul senzorului de temperatură este alimentat și cu ieșirea senzorului de tensiune de alimentare pentru a obține o estimare mai bună - detectarea temperaturii de bază ne permite să obținem o estimare aproximativă a cantității de energie arsă în LED-uri și combinată cu citirea tensiunii de alimentare atunci când descărcând bateria o estimare aproximativă a cantității de baterie rămasă. Nu trebuie să fie foarte precis; dacă nucleul „știe” că LED-urile consumă mult curent, dar tensiunea bateriei scade rapid, probabil că este sigur să spunem că puterea bateriei nu va dura mult mai mult și este timpul să opriți lampa.

Pasul 6: Construcție

Constructie
Constructie
Constructie
Constructie
Constructie
Constructie

Am construit proiectul pe o bucată mică de placă de prototipare cu plăcuțe de cupru pentru piese prin găuri. Utilizarea soclurilor pentru circuite integrate ajută foarte mult la programare / modificare / testare; ISP-ul USBTiny de la Sparkfun are o priză similară pe placa sa, astfel încât programarea celor două cipuri constă doar în conectarea programatorului la un port USB al PC-ului, încărcarea codului XOD transpilat din fișierele Arduino.ino incluse cu setările corespunzătoare ale plăcii și programatorului și apoi scoateți ușor cipurile din soclul programatorului și introduceți-le în soclurile protoboardului.

Modulul convertor de impuls bazat pe Pololu TPS6120 vine pe o placă ascendentă lipită în protoboard pe anteturile pinilor, astfel încât este posibil să economisiți spațiu prin montarea unor componente dedesubt. Pe prototipul meu am pus cele două rezistențe pullup de 4,7k dedesubt. Acestea sunt necesare pentru ca magistrala i2c dintre cipuri să funcționeze corect - comunicarea nu va funcționa corect fără ele! În partea dreaptă a plăcii se află mufa de intrare pentru mufa panoului solar și condensatorul de stocare a intrării. Cel mai bine este să încercați să conectați mufa și acest capac direct împreună prin „curse” de lipit, nu sârmă de conectare, pentru a obține o cale cât mai mică de rezistență. Rulele de lipire solidă sunt apoi utilizate pentru a conecta terminalul pozitiv al condensatorului de stocare direct la terminalul de tensiune de intrare al modulului boost și pinul de masă al modulului boost direct la pinul de masă al mufei.

În dreapta și în stânga prizelor pentru cele două ATTinys sunt condensatori de despicare / deglitching 0.1uF. Aceste componente sunt, de asemenea, importante pentru a nu le lăsa afară și ar trebui să fie conectate la pinii de alimentare și la masă ai circuitelor IC printr-o cale cât mai scurtă și directă. Rezistorul de detectare a curentului de 10 ohmi este la stânga, acesta este conectat în linie cu ieșirea de la convertorul de amplificare și fiecare parte este conectată la un pin de intrare al miezului senzorului - acești pini sunt configurați pentru a funcționa ca un ADC diferențial pentru a măsura indirect curent în baterie. Conexiunile dintre pinii IC pentru magistrala i2c și pinul de oprire a convertorului de creștere etc. se pot face folosind sârmă de conectare pe partea inferioară a protoboardului, sârmă de conectare foarte subțire cu nucleu solid funcționează excelent pentru acest lucru. Face modificările mai ușoare și, de asemenea, arată mult mai frumos decât alergarea jumperilor între găurile din partea de sus.

Modulul LED pe care l-am folosit era o unitate RGB tricolor, planul meu era să am toate cele trei LED-uri active pentru a produce alb atunci când bateria era aproape complet încărcată și să estompez încet LED-ul albastru în galben pe măsură ce încărcarea se epuiza. Dar această caracteristică nu a fost încă implementată. Un singur LED alb cu un rezistor care limitează curentul va funcționa și el.

Pasul 7: Testare, partea 1

Testare, partea 1
Testare, partea 1

După programarea ambelor IC-uri ATTiny cu fișierele de schiță incluse prin intermediul programatorului USB din mediul Arduino, vă ajută să testați dacă cele două nuclee de pe prototip funcționează corect înainte de a încerca să încărcați bateria de pe panoul solar. În mod ideal, acest lucru necesită un osciloscop de bază, un multimetru și o sursă de alimentare pe bancă.

Primul lucru de verificat este că nu există scurtcircuite nicăieri pe placă înainte de a conecta circuite integrate, baterie și panou în prizele lor pentru a evita posibile daune! Cel mai simplu mod de a face acest lucru este să utilizați o sursă de alimentare pe bancă care poate limita curentul de ieșire la o valoare sigură în cazul acelei situații. Mi-am folosit sursa de alimentare setată la 3 volți și o limită de 100 mA conectată la bornele jack de intrare ale panoului solar la cablurile de alimentare pozitive și negative. Cu nimic altceva decât componentele pasive instalate, nu ar trebui să existe, în esență, nicio extragere de curent înregistrată pe monitorul curent al sursei de alimentare despre care să vorbim. Dacă există un flux semnificativ de curent sau dacă alimentarea intră în limitarea curentului, ceva nu a funcționat corect și placa trebuie verificată pentru a vă asigura că nu există conexiuni cablate greșit sau condensatori cu polaritate inversată.

Următorul pas este să vă asigurați că convertorul boost funcționează corect. Există un șurub-potențiometru pe placă, cu sursa de alimentare încă conectată și patru dintre pinii convertorului conectați în mod corespunzător, potențiometrul ar trebui să fie rotit cu un vârf mic de șurubelniță până când tensiunea de la terminalul de ieșire al modulului citește în jur de 3,8 până la 3,9 volți. Această valoare DC nu se va modifica în timpul funcționării, nucleul driverului va controla tensiunea medie de ieșire prin pulsarea pinului de oprire a modulului.

Pasul 8: Testarea, partea 2

Testare, partea 2
Testare, partea 2
Testare, partea 2
Testare, partea 2

Următorul lucru de verificat este că comunicarea i2c funcționează OK, cu placa care funcționează de pe bancă, poate fi instalat nucleul senzorului IC. Pe un osciloscop ar trebui să existe semnale pulsante atât pe pinul 5, cât și pe pinul 7 al cipului fizic, acest driver i2c de pe cip încercând să trimită date către prietenul său. După oprirea nucleului driverului, poate fi instalată și conexiunea verificată din nou cu un osciloscop, ar trebui să existe o secvență mai mare de impulsuri vizibile pe ambele linii. Aceasta înseamnă că cipurile comunică corect.

Vă ajută să aveți bateria ușor încărcată pentru testul final final. Alimentarea pe bancă poate fi, de asemenea, utilizată pentru a realiza acest lucru, cu limita de curent setată la aproximativ 50 mA și tensiunea încă la 3,8 volți, lăsând bateria LiPo conectată direct timp de câteva minute.

Ultimul pas este testarea întregului sistem - cu totul conectat dacă panoul este acoperit timp de zece sau 15 secunde, lumina ar trebui să se aprindă prin intermediul ieșirii PWM a nucleului driverului. Cu panoul în lumina puternică a soarelui, bateria ar trebui să se încarce din ieșirea convertorului boost. Rețeaua logică fuzzy poate fi inspectată indirect pentru a vedea dacă funcționează corect, uitându-se la linia PWM care acționează pinul de oprire a convertorului boost; pe măsură ce iluminarea crește cu bateria cu o stare de încărcare scăzută, lățimea impulsului ar trebui să crească, arătând că, pe măsură ce devine mai multă energie din lumina soarelui, nucleul șoferului semnalează că ar trebui trimisă mai multă energie în baterie!

Pasul 9: Anexa la Fuzzy Logic

Anexă la Fuzzy Logic
Anexă la Fuzzy Logic

Logica fuzzy este o tehnică de învățare automată care poate fi utilizată în controlul sistemelor hardware în care există incertitudine în mulți dintre parametrii sistemului care sunt controlați, făcând o intrare explicită la soluția de control de ieșire pentru obiectivul greu de notat matematic. Acest lucru se realizează utilizând valori logice care se situează undeva între 0 (fals) și 1 (adevărat), exprimând incertitudinea într-o valoare mai asemănătoare cu modul în care ar face un om („în mare parte adevărat” sau „nu este cu adevărat adevărat”) și permițând o zonă gri între afirmații care sunt 100% adevărate și 100% false. Modul în care se realizează acest lucru este prin prelevarea mai întâi a unor eșantioane ale variabilelor de intrare pe care trebuie să se bazeze o decizie și „fuzzificarea” acestora.

Inima oricărui sistem de logică fuzzy este o „memorie asociativă fuzzy”. Aceasta amintește de o matrice, în cazul în care în cazul circuitului de încărcare a bateriei este stocat un set de valori de 3x3 cuprins între 0 și 1. Valorile din matrice pot fi asociată aproximativ cu modul în care un om ar argumenta despre ce ar trebui să fie factorul PWM care controlează pinul SHTDN al convertorului de creștere, în funcție de modul în care funcția de membru de mai sus califică un set dat de intrări. De exemplu, dacă tensiunea de intrare a panoului este ridicată, dar curentul care este atras în baterie este scăzut, înseamnă probabil că se poate consuma mai multă putere și că setarea PWM nu este optimă și ar trebui mărită. Dimpotrivă, dacă tensiunea panoului scade, dar încărcătorul încearcă să împingă un curent mare în puterea bateriei va fi, de asemenea, irosit, deci cel mai bine ar fi să scădem semnalul PWM la convertorul de impuls. Odată ce semnalele de intrare sunt „fuzzificate” într-un set fuzzy, acestea sunt înmulțite cu aceste valori, similar cu modul în care un vector este înmulțit cu o matrice, pentru a genera un set transformat, care este reprezentativ pentru cât de mult conținea „cunoștințele” celulei. din matrice ar trebui să fie luate în considerare în funcția de combinație finală.

Folosind nodul „neimplementat-în-xod” care permite nodurilor XOD care implementează funcționalități personalizate prea complicate pentru a fi rezonabile de realizat din blocurile de construcție și un pic C ++ în stil Arduino, memoria asociativă, funcția de ponderare și „ fuzzifier similar cu blocurile descrise în această referință: https://www.drdobbs.com/cpp/fuzzy-logic-in-c/184408940 sunt ușor de realizat și mult mai ușor de experimentat.

Recomandat: