This shows you the differences between two versions of the page.
pm:prj2025:avaduva:robert_andrei.tache [2025/05/22 19:54] robert_andrei.tache [Hardware Design] |
pm:prj2025:avaduva:robert_andrei.tache [2025/05/30 14:34] (current) robert_andrei.tache Add conclusion |
||
---|---|---|---|
Line 3: | Line 3: | ||
Proiectul presupune crearea unui brat dotat cu un panou solar si baterie, care urmareste cea mai puternica sursa de lumina pentru a genera energie. Ar trebui sa fie complet autonom, si chiar sa produca (ideal) un exces de energie ce este stocata in baterie si poate fi folosita pentru a incarca alte lucruri, spre exemplu un telefon (in cel mai bun caz) sau alti senzori/alte microcontrollere pentru alte scopuri. | Proiectul presupune crearea unui brat dotat cu un panou solar si baterie, care urmareste cea mai puternica sursa de lumina pentru a genera energie. Ar trebui sa fie complet autonom, si chiar sa produca (ideal) un exces de energie ce este stocata in baterie si poate fi folosita pentru a incarca alte lucruri, spre exemplu un telefon (in cel mai bun caz) sau alti senzori/alte microcontrollere pentru alte scopuri. | ||
- | |||
- | <note tip> | ||
- | Prezentarea pe scurt a proiectului vostru: | ||
- | * ce face | ||
- | * care este scopul lui | ||
- | * care a fost ideea de la care aţi pornit | ||
- | * de ce credeţi că este util pentru alţii şi pentru voi | ||
- | </note> | ||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
Line 33: | Line 25: | ||
* 1x Acumulator Li-Polymer 500mAh | * 1x Acumulator Li-Polymer 500mAh | ||
* 1x USB Port | * 1x USB Port | ||
- | {{ :pm:prj2025:avaduva:circuit_solar_tracker_tra.png?1024 |}} | + | {{ :pm:prj2025:avaduva:circuit_solar_tracker_tra.png?768 |}} |
**Pini folositi Arduino UNO:** | **Pini folositi Arduino UNO:** | ||
* PB1 (PWM) - Controleaza servo-ul vertical pentru a asigura prima axa de miscare | * PB1 (PWM) - Controleaza servo-ul vertical pentru a asigura prima axa de miscare | ||
* PB2 (PWM) - Controleaza servo-ul orizontal pentru a asigura a doua axa de miscare | * PB2 (PWM) - Controleaza servo-ul orizontal pentru a asigura a doua axa de miscare | ||
- | * PC0 (Analog) - Primeste semnalul de la LDR-ul Bottom-Left | + | * PC0 (Analog) - Citeste tensiunea de la LDR-ul Bottom-Left |
- | * PC1 (Analog) - Primeste semnalul de la LDR-ul Top-Left | + | * PC1 (Analog) - Citeste tensiunea de la LDR-ul Top-Left |
- | * PC2 (Analog) - Primeste semnalul de la LDR-ul Top-Right | + | * PC2 (Analog) - Citeste tensiunea de la LDR-ul Top-Right |
- | * PC3 (Analog) - Primeste semnalul de la LDR-ul Bottom-Right | + | * PC3 (Analog) - Citeste tensiunea de la LDR-ul Bottom-Right |
* 5V - Asigura alimentarea placii de la si pentru restul sistemului | * 5V - Asigura alimentarea placii de la si pentru restul sistemului | ||
* GND - Asigura un ground comun pentru placa si restul sistemului | * GND - Asigura un ground comun pentru placa si restul sistemului | ||
Line 47: | Line 39: | ||
**Capacitate / Consum:** | **Capacitate / Consum:** | ||
- | Dat fiind faptul ca sistemul ar trebui sa functioneze in mod autonom, preferam ca si consumul sistemului sa fie unul minim. In acest moment, cei mai mari consumatori sunt cele doua servo-uri, care impreuna pot consuma pana la 1.6A la un moment-dat. Pentru a pastra o autonomie maxima si spike-uri reduse, servo-urile vor fi folosite alternativ. Acest comportament va fi descris in partea de software. | + | Dat fiind faptul ca sistemul ar trebui sa functioneze in mod autonom, preferam ca si consumul sistemului sa fie unul minim. In acest moment, cei mai mari consumatori sunt cele doua servo-uri, care impreuna pot consuma pana la 1.6A la un moment-dat. |
- | Ca autonomie presupunem ca dorim aproximativ 8 ore de uz (cam cat e soarele afara). Avand in vedere ca soarele nu se misca atat de rapid, putem limita perioada de reglaj o data la ~10 secunde, unde servo-urile se vor regla cate 1 secunda fiecare. Astfel, am avea un consum de ~800mA (pentru senzori e neglijabil prin comparatie) pentru 2s la fiecare 10s, adica: | + | |
- | 8 ore = 8 × 60 × 60 = 28.800 secunde | + | Pentru a pastra o autonomie maxima si spike-uri reduse, servo-urile vor fi folosite alternativ. Acest comportament va fi descris in partea de software. |
- | 28800s / 10s = 2880 cicluri de reglaj | + | |
- | 1,6 ore × 0,8 A = 1,28 Ah pe zi consumati | + | Presupunem ca dorim o autonomie de aproximativ 8 ore de utilizare (cam cat este soarele afara). Avand in vedere ca soarele nu se misca atat de rapid, putem limita perioada de reglaj o data la aproximativ 10 secunde, unde servo-urile se vor regla cate 1 secunda fiecare. |
+ | |||
+ | \begin{align*} | ||
+ | \text{8 ore} &= 8 \times 60 \times 60 = 28,800 \text{ secunde} \\ | ||
+ | \text{Numar cicluri de reglaj} &= \frac{28,800}{10} = 2,880 \text{ cicluri} \\ | ||
+ | \text{Durata totala activare servo-uri} &= 2,880 \times 2\text{s} = 5,760 \text{ secunde} = 1,6 \text{ ore} \\ | ||
+ | \text{Consum total intr-o zi} &= 1,6 \text{ ore} \times 0,8 \text{ A} = \boxed{1,28 \text{ Ah/zi}} | ||
+ | \end{align*} | ||
Pe partea de generare, panoul solar genereaza 0.6A @ 18V, adica ~2A @ 5V ce acopera consumul sistemului (si reincarca bateria dupa ce se descarca peste noapte) si mentine un exces de energie ce poate fi livrat catre USB si folosit pentru incarcarea altor dispozitive. | Pe partea de generare, panoul solar genereaza 0.6A @ 18V, adica ~2A @ 5V ce acopera consumul sistemului (si reincarca bateria dupa ce se descarca peste noapte) si mentine un exces de energie ce poate fi livrat catre USB si folosit pentru incarcarea altor dispozitive. | ||
Line 57: | Line 56: | ||
**Functionare:** | **Functionare:** | ||
- | Vertical Tracking: https://youtube.com/shorts/u4YX83uTCU | + | Vertical Tracking: https://youtube.com/shorts/u4yYX83uTCU |
Dual Axis Tracking: https://youtube.com/shorts/HjnJQubxL1o | Dual Axis Tracking: https://youtube.com/shorts/HjnJQubxL1o | ||
- | *Low power deoarece Arduino Uno poate trimite doar 400mA prin pinul de 5V si nu alimenteaza corespunzator servo-urile. | + | <note important>Functionarea de mai sus este intr-un mod low-power deoarece Arduino Uno poate trimite doar 400mA prin pinul de 5V si nu alimenteaza corespunzator servo-urile. |
+ | </note> | ||
Din nefericire daca se misca prea repede pe acest suport provizoriu, este posibil sa sara putin. Voi avea un alt suport pentru stabilitate, iar pentru miscarea panoului solar (care e mult mai mare) miscarea orizontala va fii limitata la ~15 grade. | Din nefericire daca se misca prea repede pe acest suport provizoriu, este posibil sa sara putin. Voi avea un alt suport pentru stabilitate, iar pentru miscarea panoului solar (care e mult mai mare) miscarea orizontala va fii limitata la ~15 grade. | ||
Line 68: | Line 68: | ||
{{:pm:prj2025:avaduva:solar_tracker_irl_tra.jpg?512|}} | {{:pm:prj2025:avaduva:solar_tracker_irl_tra.jpg?512|}} | ||
- | |||
- | <note tip> | ||
- | Aici puneţi tot ce ţine de hardware design: | ||
- | * listă de piese | ||
- | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | ||
- | * diagrame de semnal | ||
- | * rezultatele simulării | ||
- | </note> | ||
===== Software Design ===== | ===== Software Design ===== | ||
Line 83: | Line 75: | ||
**Biblioteci folosite:** | **Biblioteci folosite:** | ||
+ | * **Servo.h** - Folosit initial pentru controlarea servo-urilor | ||
+ | * **avr/sleep.h** - Folosit pentru evitarea busy-waiting | ||
+ | * **avr/wdt.h** - Folosit pentru WatchDog Timer | ||
+ | * //**avr/power.h** - Folosit pentru debugging/initial pentru functii high-level de power management// | ||
+ | **Descriere algorithm:** | ||
+ | Partea de software a tracker-ului este relativ simpla. Aceasta este impartita in doua lucruri principale: senzorii de lumina (light-dependent rezistors) si servo-urile ce modifica pozitia senzorilor (si deci a panoului) pe cele doua axe. | ||
- | <note tip> | + | Intr-un ciclu de reglare tensiunile de la senzori sunt masurate cu ADC de catre microcontroller pentru a observa nivelele de lumina detectate de fiecare. In cazul in care vreunul din senzori are o lumina mai puternica, semnalul acestuia creste, indicand faptul ca ar trebui mutat panoul in acea directie. Aceasta mutare se face in doi pasi, mai intai orizontal, apoi vertical (sau invers). |
- | Descrierea codului aplicaţiei (firmware): | + | |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | Dat fiind ca soarele nu se misca foarte rapid, putem regla frecventa acestor cicluri de reglare, sensitivitatea senzorilor (adica cat de mare trebuie sa fie diferenta intre senzori pentru a se face vreo miscare) si pasul servo-urilor, intrucat cu o frecventa mai joasa am dori un pas mai mare. |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | In afara acestor ciclii de reglare nu dorim sa consumam multa electricitate, deci oprim ADC-ul si il repornim abia la trezire (cu un pic de asteptare pentru a se stabiliza). |
- | * (etapa 3) surse şi funcţii implementate | + | |
- | </note> | + | Aditional, am adaugat si un contor ce se ocupa de numararea ciclilor "activi". Intrucat stim in mod aproximativ) ca soarele este cel mai puternic pe o perioada de ~8 ore, putem limita ciclii de reglare la aceasta perioada. Un contor este folosit pentru a tine cont de numarul de activari a soft-ului, iar dupa ce o perioada de **(ACTIVE_HOURS * 3600) / WDT_INTERVAL_SEC** a trecut (unde WDT_INTERVAL_SEC este 8 si ACTIVE_HOURS este 8) putem sari peste ciclurile de reglare. Dupa ce o alta perioada (24h - restul) a trecut, putem reveni la activarea ciclurilor de reglare. |
+ | |||
+ | Acest contor se incrementeaza la fiecare wake-up din sleep. | ||
+ | |||
+ | **Elementul de noutate:** | ||
+ | |||
+ | * Ciclul de reglare infrecvent (si reglabil) ofera autonomie marita, reglabil in functie de nevoi sau locatie | ||
+ | * Consumul este mai departe redus prin folosirea alternanta a servo-urilor | ||
+ | |||
+ | **Justificarea laboratoarelor folosite:** | ||
+ | |||
+ | * **Timer/Intreruperi** - Pentru a nu face busy-waiting (si deci a irosi energie) se folosesc intreruperi pentru activarea ciclurilor | ||
+ | * **PWM** - PWM este folosit pentru controlarea servo-urilor in timpul unui ciclu de reglare | ||
+ | * **ADC** - Tensiunea de pe pinii A0-A3 sunt cititi pentru a observa lumina detectata pe fiecare senzor de lumina | ||
+ | * //**UART** - Folosit doar pentru debugging// | ||
+ | |||
+ | **Descrierea codului aplicatiei:** | ||
+ | |||
+ | * In functia setup() | ||
+ | * - Servo-urile sunt resetate la pozitiile initiale (90 grade) | ||
+ | * - Intreruperile ar trebui activate (sunt deja) | ||
+ | |||
+ | * In updateServo(bool horizontalUpdate) | ||
+ | * - Tensiunile de pe pinii A0-A3 sunt citite pentru a afla diferenta de lumina dintre senzori | ||
+ | * - Este calculata media fiecarei fete | ||
+ | * - In functie de //horizontalUpdate// urmeaza sa se verifice diferenta pentru servo-ul orizontal sau vertical | ||
+ | * - Daca este diferenta suficient de mare (fata de o toleranta prestabilita) servo-ul respectiv se misca | ||
+ | |||
+ | * In loop() | ||
+ | * - Incrementare activeCycleCount | ||
+ | * - Verificare activeCycleCount | ||
+ | * - < ACTIVE_LIMIT => Ciclu de reglare | ||
+ | * - > ACTIVE_LIMIT si < SLEEP_LIMIT => hibernare | ||
+ | * - >= SLEEP_LIMIT => reset la 0 | ||
+ | * - [Info] Tensiunile citite si pozitiile inregistrate sunt scrise pe terminal | ||
+ | * - Sleep, urmand ca dupa 8 secunde sa reinceapa loop-ul | ||
+ | |||
+ | **Optimizari:** | ||
+ | |||
+ | Data fiind perioada de operare, servo-urile pot fi restranse sa se miste doar intr-o raza de cateva zeci de grade daca este necesar. | ||
+ | |||
+ | Ciclul de reglare este impartit in doua sub-cicluri independente (vertical si orizontal) care se alterneaza. | ||
+ | |||
+ | Pasul este de asemenea reglat dinamic in functie de diferenta inregistrata intre senzori. Desi nu am implementat, ar putea fi afectata pe viitor si de catre perioada dintre cicluri. | ||
+ | |||
+ | Pin-ul A4 ar putea fi folosit pentru citirea nivelului bateriei, desi nu ar fi folositor in timp ce aceasta este incarcata deoarece MPPT-ul aduce tensiunea la 4.2V cat timp este in functionare panoul solar. - Acest lucru pica mai mult pe partea de hardware. | ||
+ | |||
+ | **Source Code:** | ||
+ | [[https://github.com/MekalBoy/arduino-solar-tracker|Github]] | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | <note tip> | + | Panoul solar reuseste sa alimenteze porturile USB cu un amperaj corespunzator incarcarii telefoanelor sau bateriilor externe (~2A) intr-un timp relativ scurt. |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | [[https://youtube.com/shorts/vrDePWRJnq4|Powerbank Charging Demo]] |
+ | |||
+ | Miscarea maxima pe verticala a panoului a trebuit reglata si limitata deoarece nu am luat in calcul diferenta in forta supusa servo-ului atunci cand panoul este la un unghi mai extrem. Daca reusesc sa obtin servo-uri mai puternice intre timp le voi inlocui pe cele existente actual. | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | Desi proiectul se descurca bine in mediul "de laborator", ar trebui sa ofer mai multa atentie pachetului din jur pentru a-l face usor de manevrat si protejat impotriva vremii. Marimea panoului face aceasta protectie sa necesite o suprafata destul de mare, ceea ce ma impedica (din motive de cost) sa il incastrez cu materiale mai interesante decat o cutie de carton. | ||
+ | |||
+ | Voi continua sa folosesc panoul pe post de sursa de energie pentru incarcator de baterii/powerbank. Deoarece spatiul este restrictiv si nu este nevoie de miscare in interior, restul de sistem va fi dezbinat si folosit ulterior in alte proiecte. | ||
===== Download ===== | ===== Download ===== | ||
Line 112: | Line 164: | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
- | <note tip> | + | * 22 Mai - Am adunat toate piesele printate 3D pentru structura. |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | * 24 Mai - Avand in vedere prognoza meteo pentru urmatoarea saptamana am procurat un proiector de lumina LED 150W pentru a putea face demo la incarcare live. |
- | </note> | + | |
+ | {{:pm:prj2025:avaduva:prognoza_meteo_24mai.jpg?378|}} | ||
+ | {{:pm:prj2025:avaduva:reflector_24mai.jpg?256|}} | ||
+ | |||
+ | * 25 Mai - Partea software a fost mai mult sau mai putin finalizata. | ||
+ | * 26 Mai - Am observat o mica problema in cadrul structurii, si anume ca servo-urile nu suporta greutatea adunata a tuturor componentelor atunci cand sunt laolalta si la unghiuri >20 grade. Astfel a trebuit sa modific una din piesele de structura, sa o reprintez, si apoi sa pun servo-uri mai puternice [[https://www.optimusdigital.ro/en/servomotors/1520-mg996-digital-metal-servomotor-90.html|MG996]] ([[https://components101.com/sites/default/files/component_datasheet/MG996R%20Datasheet.pdf|Datasheet]]) capabile de a suporta greutatea impreunata chiar si la unghiuri extreme. | ||
+ | |||
+ | {{:pm:prj2025:avaduva:big_leg_servo.png?256|}} | ||
+ | |||
+ | * 28 Mai - Am procurat piesa nou-printata. Din pacate am uitat sa extind si gaurile pentru acces usor la gauri pentru insurubare. I could snap off the leg... nah, I'd tape. | ||
+ | |||
+ | {{:pm:prj2025:avaduva:taped.jpg?256|}} | ||
+ | |||
+ | * 29 Mai - Am modificat codul pentru a lua in calcul raza mai mica de miscare (90 grade in loc de 180) a servo-urilor noi. | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | **Resurse Hardware** |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | |
- | </note> | + | Dat fiind ca nu doresc sa pun multa presiune pe servo-uri am cautat un design de structura care sa limiteze forta ajunsa pe acestea. Am ajuns eventual la design-ul [[https://www.thingiverse.com/thing:53321|Dual Axis Solar Tracker de OpenSourceClassroom]], urmand sa printez o parte din aceste piese 3D. |
+ | |||
+ | **Resurse Software** | ||
+ | |||
+ | Pentru a ma informa mai bine despre cum sa scad consumul placutei (si deci a creste autonomia) am urmat exemplele de aici: | ||
+ | https://www.gammon.com.au/power - in particular "Sketch H" (Waking from sleep with a timer); alaturi de mai multe postari de pe [[https://forum.arduino.cc/|forumul Arduino]]. | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||