Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2024:mdinica:iustina.caramida [2024/05/27 10:49]
iustina.caramida [Hardware Design]
pm:prj2024:mdinica:iustina.caramida [2024/05/27 11:14] (current)
iustina.caramida [Software Design]
Line 37: Line 37:
  
 Schema electrică este următoarea:​ Schema electrică este următoarea:​
-{{ pm:​prj2024:​mdinica:​iustina.caramida:​schema_electrica.png?​nolink&​600 }}+{{ pm:​prj2024:​mdinica:​iustina.caramida:​schema_electrica2.png?​nolink&​600 }}
  
 Design-ul montări este umrătorul: Design-ul montări este umrătorul:
-{{ pm:​prj2024:​mdinica:​iustina.caramida:​schema_montare.png?​nolink&​600 }}+{{ pm:​prj2024:​mdinica:​iustina.caramida:​schema_montare2.png?​nolink&​600 }}
  
  
Line 49: Line 49:
 </​note>​ </​note>​
  
-===== Mediul ​de Dezvoltare ===== +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.
-Codul este destinat a fi rulat pe o platformă Arduino, ​utilizând ​mediul de dezvoltare Arduino IDE. Arduino IDE oferă suport ​pentru ​scrierea, compilarea și încărcarea codului pe plăcile de dezvoltare ArduinoMediul de dezvoltare este ales pentru ​simplitatea sa și pentru suportul extins al comunității pentru ​proiecte ​de automatizare ​și robotică.+
  
 +Î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 =====
 +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.
 ===== Librării și Surse Terțe ===== ===== Librării și Surse Terțe =====
-Codul utilizează librăria `Servo.h` furnizată de Arduino, care simplifică controlul servo motorului. Această librărie gestionează generarea semnalelor PWM necesare pentru a controla un servo motor standard. Utilizarea librăriei reduce complexitatea codului și permite dezvoltatorului să se concentreze pe logica aplicației în loc să se ocupe de detalii de nivel jos.+În codul prezentat sunt utilizate două librării esențiale:
  
 +    * **Servo.h**:​ Aceasta este o librărie standard în Arduino pentru controlul servomotoarelor. Permite utilizatorilor să controleze poziția unui servomotor folosind funcția write().
 +    * **avr/​interrupt.h**:​ Aceasta este o librărie specifică microcontrolerelor AVR utilizate de multe plăci Arduino. Permite gestionarea întreruperilor,​ esențiale pentru implementarea unor funcții precum temporizări precise și reacții rapide la evenimente externe.
 ===== Organizarea Codului ===== ===== Organizarea Codului =====
-Codul este structurat ​în două secțiuni ​principale`setup()` ​și `loop()`Secțiunea `setup()` este destinată ​inițializării componentelor ​hardware și configurării ​inițiale a sistemului, în timp ce `loop()` conține logica ​principală care se repetă continuu ​în timpul funcționării dispozitivuluiCodul include următoarele elemente:+Codul este organizat logic în mai multe secțiuni: 
 + 
 +==== Importul librăriilor ==== 
 +Importă librăriile necesare pentru funcționalitatea codului. 
 +<​code>​ 
 +// ------------------- Import libraries -------------------- 
 +// Include the servo motor library 
 +#include <​Servo.h>​ 
 +// Include the interruption library 
 +#include <​avr/​interrupt.h>​  
 +</​code>​ 
 + 
 +==== Definirea pinilor ​și a erorilor ==== 
 +Definirea pinilor pentru senzori și alte componente hardware, precum și valorile de eroare utilizate în algoritmi. 
 +<​code>​ 
 +// ---------------- Define pins and errors ----------------- 
 +// Define the LDR sensor pins 
 +#define LDR1 A0 
 +#define LDR2 A1 
 +// Set epsilon value 
 +#define eps 10 
 +// Set error code 
 +#define error 1000 
 +// Starting point of the servo motor 
 +int Spoint =  0; 
 +// Create an object for the servo motor 
 +Servo servo; 
 +// Select the pin for the LED 
 +const int ledPin = 12; 
 +// Select the pin for the button 
 +const int buttonPin = 13; 
 +</​code>​ 
 + 
 +==== Variabile globale ==== 
 +Definirea variabilelor globale necesare pentru stocarea stării sistemului și a temporizărilor. 
 +<​code>​ 
 +// ---------------- Define global variables ---------------- 
 +// Global variable to count milliseconds 
 +volatile unsigned int timer2_millis = 0; 
 +// Global variable to count the time since last position has moved 
 +volatile unsigned int lastPositionChange = 0; 
 +// Global variable to check the button 
 +volatile bool ifPressed = false; 
 +</​code>​ 
 + 
 +==== Funcții utile ==== 
 +Implementarea funcțiilor esențiale pentru funcționarea programului,​ cum ar fi funcția de întrerupere pentru Timer2, funcția personalizată de întârziere,​ funcția de mișcare a servomotorului,​ mesaje pentru utilizatori și funcția de iluminare a LED-ului. 
 + 
 +==== Funcția ​setup() ​==== 
 +Configurarea ​inițială hardware-ului, inclusiv atașarea servomotorului,​ configurarea pinilor ​și inițializarea temporizărilor. 
 + 
 +==== 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.
  
-  - **Include librării**:​ La început, codul include librăria Servo pentru a permite controlul unui servo motor. 
-  - **Definește constante**:​ Utilizează directive `#define` pentru a denumi pinii senzorilor LDR și pentru a seta o valoare de eroare. 
-  - **Inițializează variabile**:​ Declara variabile pentru a păstra starea inițială a servo motorului și pinii pentru LED. 
-  - **Configurare inițială (`setup()`)**:​ Inițializează comunicația serială, configurează pinul PWM pentru servo motor și setările inițiale pentru LED. 
-  - **Logica de control (`loop()`)**:​ Citirea valorilor de la senzorii LDR, compararea lor, ajustarea poziției servo motorului și controlul luminozității unui LED bazat pe intensitatea luminii detectate. 
  
 ===== 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 ​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 senzoriDacă 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 ​ajusta poziția servomotoruluiAlgoritmul 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 =====
  
pm/prj2024/mdinica/iustina.caramida.1716796146.txt.gz · Last modified: 2024/05/27 10:49 by iustina.caramida
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0