This shows you the differences between two versions of the page.
pm:prj2024:mdinica:iustina.caramida [2024/05/27 11:00] iustina.caramida [Organizarea Codului] |
pm:prj2024:mdinica:iustina.caramida [2024/05/27 11:14] (current) iustina.caramida [Software Design] |
||
---|---|---|---|
Line 49: | Line 49: | ||
</note> | </note> | ||
+ | Elementul de noutate al acestui proiect constă în integrarea controlului precis al unui panou solar utilizând senzori LDR pentru a maximiza eficiența energetică. Utilizarea întreruperilor pentru a realiza temporizări precise și gestionarea stării panoului printr-un buton de control reprezintă o abordare inovatoare pentru un sistem de urmărire a soarelui simplu și eficient. | ||
+ | |||
+ | În cadrul proiectului au fost utilizate următoarele funcționalități: | ||
+ | |||
+ | * **GPIO (General Purpose Input/Output)**: Utilizat pentru a controla pinul LED-ului și a citi starea butonului, esențial pentru interacțiunea hardware-software. | ||
+ | * **UART (Universal Asynchronous Receiver-Transmitter)**: Utilizat pentru comunicarea serială, permite monitorizarea și debug-ul sistemului prin afișarea mesajelor în Serial Monitor. | ||
+ | * **Interrupții**: Folosite pentru a implementa o temporizare precisă folosind Timer2, necesară pentru funcțiile de întârziere fără a bloca execuția. | ||
+ | * **Timere**: Timer2 a fost utilizat pentru a genera întreruperi la intervale precise de timp, esențiale pentru temporizările exacte în funcția delay_ms(). | ||
+ | * **ADC (Analog-to-Digital Converter)**: Folosit pentru a citi valorile analogice de la senzorii LDR și a le converti în valori digitale utilizabile în algoritmul de control al panoului. | ||
+ | |||
+ | Calibrarea senzorilor LDR a fost realizată prin determinarea valorilor minime și maxime de lumină detectate în diferite condiții de iluminare. Pragul de eroare (error) și valoarea epsilon (eps) au fost ajustate empiric pentru a asigura că panoul se poziționează corect în funcție de diferențele detectate între cei doi senzori. | ||
+ | |||
+ | Optimizările au fost realizate în următoarele moduri: | ||
+ | * **Utilizarea întreruperilor și a Timer2**: Acest lucru a permis implementarea unei funcții de întârziere precise (delay_ms()) fără a bloca execuția altor părți ale codului, optimizând astfel eficiența și responsivitatea sistemului. | ||
===== Mediul de Dezvoltare ===== | ===== Mediul de Dezvoltare ===== | ||
Codul Arduino este dezvoltat utilizând mediul Arduino IDE (Integrated Development Environment), un mediu software folosit pentru a scrie, compila și încărca codul pe plăcile de dezvoltare Arduino. Arduino IDE oferă o interfață simplă și intuitivă, suportând limbajul de programare C/C++ cu adăugiri specifice platformei Arduino. IDE-ul include un editor de cod, un monitor serial pentru debugging și multe alte instrumente utile pentru dezvoltarea de proiecte embedded. | Codul Arduino este dezvoltat utilizând mediul Arduino IDE (Integrated Development Environment), un mediu software folosit pentru a scrie, compila și încărca codul pe plăcile de dezvoltare Arduino. Arduino IDE oferă o interfață simplă și intuitivă, suportând limbajul de programare C/C++ cu adăugiri specifice platformei Arduino. IDE-ul include un editor de cod, un monitor serial pentru debugging și multe alte instrumente utile pentru dezvoltarea de proiecte embedded. | ||
Line 110: | Line 124: | ||
==== Funcția loop() ==== | ==== Funcția loop() ==== | ||
Bucla principală care rulează continuu și care gestionează citirea datelor de la senzori, verificarea stării butonului, mișcarea servomotorului, afișarea mesajelor pentru utilizatori și controlul LED-ului. | Bucla principală care rulează continuu și care gestionează citirea datelor de la senzori, verificarea stării butonului, mișcarea servomotorului, afișarea mesajelor pentru utilizatori și controlul LED-ului. | ||
+ | |||
===== Algoritmi și Structuri Implementate ===== | ===== Algoritmi și Structuri Implementate ===== | ||
- | - **Citirea senzorilor LDR**: Valorile de la doi senzori LDR sunt citite utilizând funcția `analogRead()`. Aceste valori sunt utilizate pentru a determina diferența de intensitate a luminii între cei doi senzori. | + | Codul utilizează mai mulți algoritmi și structuri pentru a controla mișcarea unui panou solar: |
- | - **Controlul servo motorului**: Poziția servo motorului este ajustată pe baza diferenței dintre valorile citite de la senzori. Dacă diferența este semnificativă, poziția motorului este incrementată sau decrementată pentru a orienta sistemul spre sursa de lumină mai puternică. | + | |
- | - **Controlul luminozității LED-ului**: Valorile sumate ale senzorilor LDR sunt mapate la o gamă de luminozitate pentru LED folosind funcția `map()`. LED-ul este apoi controlat utilizând `digitalWrite()`, care setează nivelul de luminozitate în funcție de intensitatea luminii detectate. | + | ==== Controlul Servomotorului ==== |
+ | Utilizând valori de la doi senzori LDR (Light Dependent Resistor), codul calculează diferența dintre citirile acestora pentru a ajusta poziția servomotorului. Algoritmul verifică dacă diferența este în limite acceptabile (epsilon), și ajustează poziția panoului solar în consecință. | ||
+ | |||
+ | ==== Gestionarea întreruperilor ==== | ||
+ | Utilizarea întreruperilor prin Timer2 pentru a crea o funcție de întârziere precisă. Acest lucru este esențial pentru temporizări precise fără a bloca execuția altor părți ale codului. | ||
+ | |||
+ | ==== Funcționalitate pe bază de stare ==== | ||
+ | Codul utilizează o variabilă globală `ifPressed` pentru a determina dacă panoul solar trebuie să se miște sau să rămână într-o poziție fixă, în funcție de starea butonului. | ||
+ | |||
+ | ==== Mesaje informative ==== | ||
+ | Pe baza poziției curente a panoului solar, sunt afișate mesaje informative pentru utilizatori, cum ar fi „Good Morning sunshine!” sau „Good Afternoon!”. | ||
+ | |||
+ | ==== Controlul LED-ului ==== | ||
+ | LED-ul este controlat în funcție de timpul scurs de la ultima mișcare a panoului solar, indicând astfel dacă panoul a găsit o poziție bună pentru a se încărca. | ||
+ | |||
+ | Aceste structuri și algoritmi combină citirea senzorilor, controlul precis al hardware-ului și feedback-ul pentru utilizator într-un mod coerent și eficient pentru a controla un panou solar. | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||