This shows you the differences between two versions of the page.
pm:prj2025:avaduva:robert_andrei.tache [2025/05/23 08:57] robert_andrei.tache Minor debug mention |
pm:prj2025:avaduva:robert_andrei.tache [2025/05/30 14:34] (current) robert_andrei.tache Add conclusion |
||
---|---|---|---|
Line 76: | Line 76: | ||
**Biblioteci folosite:** | **Biblioteci folosite:** | ||
* **Servo.h** - Folosit initial pentru controlarea servo-urilor | * **Servo.h** - Folosit initial pentru controlarea servo-urilor | ||
- | * **ArduinoLowPower.h** - Folosit pentru a evita busy-waiting | + | * **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:** | **Descriere algorithm:** | ||
Line 85: | Line 87: | ||
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. | 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. | ||
+ | |||
+ | 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). | ||
+ | |||
+ | 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:** | **Elementul de noutate:** | ||
Line 102: | Line 110: | ||
* In functia setup() | * In functia setup() | ||
* - Servo-urile sunt resetate la pozitiile initiale (90 grade) | * - Servo-urile sunt resetate la pozitiile initiale (90 grade) | ||
- | * - Intreruperile sunt activate | + | * - Intreruperile ar trebui activate (sunt deja) |
- | * In solar_cycle_vertical() | + | * In updateServo(bool horizontalUpdate) |
- | * - A0-A3 sunt cititi pentru a determina nivelul de lumina pe fiecare senzor | + | * - Tensiunile de pe pinii A0-A3 sunt citite pentru a afla diferenta de lumina dintre senzori |
- | * - Servo-ul vertical este actionat corespunzator pentru miscarea panoului | + | * - Este calculata media fiecarei fete |
- | + | * - In functie de //horizontalUpdate// urmeaza sa se verifice diferenta pentru servo-ul orizontal sau vertical | |
- | * In solar_cycle_horizontal() | + | * - Daca este diferenta suficient de mare (fata de o toleranta prestabilita) servo-ul respectiv se misca |
- | * - A0-A3 sunt cititi pentru a determina nivelul de lumina pe fiecare senzor | + | |
- | * - Servo-ul orizontal este actionat corespunzator pentru miscarea panoului | + | |
* In loop() | * 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 | * - [Info] Tensiunile citite si pozitiile inregistrate sunt scrise pe terminal | ||
+ | * - Sleep, urmand ca dupa 8 secunde sa reinceapa loop-ul | ||
**Optimizari:** | **Optimizari:** | ||
- | Data fiind perioada de operare, servo-urile ar putea fi restranse sa se miste doar intr-o raza de cateva zeci de grade. | + | 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 ar putea fi impartit in doua sub-cicluri independente (vertical si orizontal) desi nu sunt sigur cat de mult ar ajuta. | + | Ciclul de reglare este impartit in doua sub-cicluri independente (vertical si orizontal) care se alterneaza. |
- | Pasul ar putea de asemenea sa fie reglat dinamic in functie de perioada dintre cicluri si diferenta inregistrata intre senzori. | + | 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. | 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 143: | 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> | ||