Differences

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

Link to this comparison view

pm:prj2025:ajipa:stefan.ivanov0604 [2025/05/25 19:22]
stefan.ivanov0604 [Hardware Design]
pm:prj2025:ajipa:stefan.ivanov0604 [2025/05/30 00:58] (current)
stefan.ivanov0604 [Hardware Design]
Line 34: Line 34:
   * Rezistență 10Ω   * Rezistență 10Ω
   * LCD 16x2 cu I2C   * LCD 16x2 cu I2C
-  * Senzor curent ACS712 ​20A+  * Senzor curent ACS712 ​5A
   * Panou solar 6V   * Panou solar 6V
   * Breadboard + fire de conexiune   * Breadboard + fire de conexiune
  
 {{https://​ocw.cs.pub.ro/​courses/​_media/​pm/​prj2025/​ajipa/​schemaelectrica_ivn1.png?​900x400}} {{https://​ocw.cs.pub.ro/​courses/​_media/​pm/​prj2025/​ajipa/​schemaelectrica_ivn1.png?​900x400}}
-Componenta conectata la panoul solar este un senzor de curent ACS712 ​20A.+Componenta conectata la panoul solar este un senzor de curent ACS712 ​5A.
  
 === Interfețe și comunicație cu microcontrollerul === === Interfețe și comunicație cu microcontrollerul ===
Line 52: Line 52:
 | LDR3 | A4 | Analog (ADC) | Citire lumină – senzor analogic | | LDR3 | A4 | Analog (ADC) | Citire lumină – senzor analogic |
 | LDR4 | A5 | Analog (ADC) | Citire lumină – senzor analogic | | LDR4 | A5 | Analog (ADC) | Citire lumină – senzor analogic |
-| Servomotor 1 | D9 | PWM | Control unghi prin semnal PWM | +| Servomotor 1 | D2 | PWM | Control unghi prin semnal PWM | 
-| Servomotor 2 | D10 | PWM | Control unghi prin semnal PWM | +| Servomotor 2 | D3 | PWM | Control unghi prin semnal PWM | 
-| LCD I2C | D2 (SDA), ​D3 (SCL) | I2C software | Emulare I2C cu `SoftwareWire` pentru a elibera A4/A5 |+| LCD I2C | D8 (SDA), ​D9 (SCL) | I2C software | Emulare I2C cu `SoftwareWire` pentru a elibera A4/A5 |
 | Senzor curent ACS712 | A0 | Analog (ADC) | Măsurare curent analogic generat de panoul solar | | Senzor curent ACS712 | A0 | Analog (ADC) | Măsurare curent analogic generat de panoul solar |
 | Alimentare | 5V, GND | Tensiune DC | Alimentare comună pentru toate modulele | | Alimentare | 5V, GND | Tensiune DC | Alimentare comună pentru toate modulele |
Line 60: Line 60:
 === Bill of Materials === === Bill of Materials ===
  
-^ Nr. ^ Componentă ​^ Descriere ^ Datasheet ^+^ Nr. ^ Componenta ​^ Descriere ^ Datasheet ​/ Sursa ^
 | 1 | Arduino UNO | Placă de dezvoltare compatibilă cu ATmega328P | [https://​docs.arduino.cc/​hardware/​uno-rev3] | | 1 | Arduino UNO | Placă de dezvoltare compatibilă cu ATmega328P | [https://​docs.arduino.cc/​hardware/​uno-rev3] |
-| 2 | Servomotor SG90 ×2 | Servomotor micro de 9g, rotație ~180° | [https://datasheet.lcsc.com/lcsc/1811141530_TowerPro-SG90_C145016.pdf | +| 2 | Servomotor SG90 ×2 | Servomotor micro de 9g, rotație ~180° | [http://www.ee.ic.ac.uk/pcheung/teaching/​DE1_EE/​stores/​sg90_datasheet.pdf
-| 3 | Foto-rezistor (LDR) ×4 | Rezistor dependent de lumină | [https://​www.sparkfun.com/datasheets/Sensors/General/Photocell.pdf +| 3 | Foto-rezistor (LDR) ×4 | Rezistor dependent de lumină | [https://​www.alldatasheet.com/html-pdf/1131893/ETC2/GL5528/​110/​1/​GL5528.html] 
-| 4 | Rezistență 10kΩ ×4 | Rezistență fixă pentru divizoare de tensiune | [https://​www.vishay.com/​docs/​28721/​cmfr.pdf | +| 4 | Rezistență 10kΩ ×4 | Rezistență fixă pentru divizoare de tensiune | [https://​www.vishay.com/​docs/​28721/​cmfr.pdf
-| 5 | LCD 16×2 cu I2C | Afișaj alfanumeric 16 caractere × 2 linii, cu interfață I2C | [https://www.waveshare.com/wiki/16x2_LCD_Module ​+| 5 | LCD 16×2 cu I2C | Afișaj alfanumeric 16 caractere × 2 linii, cu interfață I2C | [https://handsontec.com/dataspecs/module/​I2C_1602_LCD.pdf] ​
-| 6 | Senzor curent ACS712 ​20A | Senzor Hall pentru măsurarea curentului continuu și alternativ | [https://​www.allegromicro.com/​-/​media/​files/​datasheets/​acs712-datasheet.ashx | +| 6 | Senzor curent ACS712 ​5A | Senzor Hall pentru măsurarea curentului continuu și alternativ | [https://​www.allegromicro.com/​-/​media/​files/​datasheets/​acs712-datasheet.ashx
-| 7 | Panou solar 6V | Panou fotovoltaic de 6V pentru alimentare sau încărcare | [https://​www.pololu.com/​file/​0J868/solar-cell-5V-100mA-datasheet.pdf ​|+| 7 | Panou solar 6V | Panou fotovoltaic de 6V pentru alimentare sau încărcare | [https://​www.emag.ro/panou-solar-6v-3-5w-ai1407/​pd/​D3TD8GMBM/​] ​|
  
  
Line 77: Line 77:
 ===== Software Design ===== ===== Software Design =====
  
-=== Stadiul actual al implementării === +Logica ​software a fost implementată și testată cu succes pe placa Arduino UNO. Citirea valorilor analogice de la cei patru senzori LDR funcționează corect, iar algoritmul de decizie determină orientarea optimă a panoului solar. Controlul celor două servomotoare SG90 este stabil, permițând mișcarea pe ambele axe. De asemenea, au fost implementate cu succes ​senzorul de curent ACS712, afișajul LCD I2C și panoul solar.
-La acest moment, logica ​software a fost implementată și testată cu succes pe Arduino UNO. Citirea valorilor analogice de la cei patru senzori LDR funcționează corect, iar algoritmul de decizie determină orientarea optimă a panoului solar. Controlul celor două servomotoare SG90 este stabil, permițând mișcarea pe ambele axe. Urmează să implementez ​senzorul de curent ACS712, ​și afișajul LCD I2C.+
  
 === Motivația alegerii bibliotecilor === === Motivația alegerii bibliotecilor ===
-Pentru controlul ecranului LCD I2C, am utilizat librăria **LiquidCrystal_I2C**,​ deoarece oferă o interfață simplă și eficientă pentru afișajele compatibile. ​Având ​nevoie să eliberăm pinii analogici A4 și A5, am optat pentru librăria **SoftwareWire**,​ care permite comunicarea I2C prin alți pini digitali, fără a compromite ​protocolul. Pentru controlul servo, am folosit biblioteca **Servo.h**,​ deoarece este standard în Arduino și oferă un control precis cu consum redus de resurse.+ 
 +Pentru controlul ecranului LCD I2C, am utilizat ​inițial ​librăria **LiquidCrystal_I2C**,​ deoarece oferă o interfață simplă și eficientă pentru afișajele compatibile. ​Totuși, având ​nevoie să eliberăm pinii analogici A4 și A5 pentru alți senzori, am optat pentru librăria **SoftwareWire**,​ care permite comunicarea I2C prin alți pini digitali
 +În acest contextam folosit un fork compatibil, **LiquidCrystal_SoftI2C** ({{https://​github.com/​jim3692/​Arduino-LiquidCrystal-SoftI2C-library}}),​ care integrează suportul pentru SoftwareWire,​ permițând astfel conectarea LCD-ului I2C fără a compromite ​pinii analogici standard. 
 +Pentru controlul servo, am folosit biblioteca **Servo.h**,​ deoarece este standard în Arduino și oferă un control precis cu consum redus de resurse.
  
 === Legătura cu laboratoarele === === Legătura cu laboratoarele ===
-În cadrul proiectului sunt aplicate concepte studiate în laboratoare precum: citirea semnalelor analogice prin ADC (pentru LDR și ACS712), generarea de semnal PWM pentru controlul servomotoarelor,​ utilizarea ​magistralei ​I2C pentru comunicarea cu afișajul LCD și organizarea codului în funcții modulare. Folosirea SoftwareWire demonstrează cum se poate replica protocolul I2C în lipsa pinilor dedicați.+În cadrul proiectului sunt aplicate concepte studiate în laboratoare precum: citirea semnalelor analogice prin **ADC** (pentru LDR și ACS712), generarea de semnal ​**PWM** pentru controlul servomotoarelor,​ utilizarea ​**I2C** pentru comunicarea cu afișajul LCD. Folosirea SoftwareWire demonstrează cum se poate replica protocolul I2C în lipsa pinilor dedicați.
  
 === Structura codului și validarea funcționalităților === === Structura codului și validarea funcționalităților ===
-Codul este organizat modular, cu funcții separate pentru: 
-  * citirea LDR-urilor (readLDRValues()) 
-  * calculul direcției optime (adjustPanelDirection()) 
-  * controlul servomotoarelor (setServoAngles()) 
  
 +Codul este organizat într-o manieră clară și funcțională,​ folosind funcții dedicate pentru principalele componente logice ale sistemului:
 +  * smoothAnalogRead(pin) – efectuează o medie pe 10 citiri analogice pentru fiecare senzor LDR, asigurând stabilitatea valorilor;
 +  * UpDown(avgT,​ avgB) – controlează mișcarea verticală a panoului în funcție de diferența de lumină între senzorii superiori și inferiori;
 +  * LeftRight(avgL,​ avgR) – controlează mișcarea orizontală a panoului în funcție de diferența de lumină între senzorii din stânga și din dreapta.
 +
 +Funcționalitățile au fost validate pe hardware-ul real, panoul urmărind corect lumina solară în ambele axe cu ajutorul celor două servomotoare SG90. Valorile senzorilor sunt afișate prin portul serial, iar afișajul LCD I2C confirmă pornirea corectă a sistemului.
 Funcțiile sunt apelate secvențial în bucla principală (`loop()`), asigurând o actualizare în timp real a poziției panoului și a valorii curentului. Fiecare componentă a fost testată individual și apoi integrată în sistemul complet. Validarea s-a realizat prin teste în condiții de iluminare variabilă. Funcțiile sunt apelate secvențial în bucla principală (`loop()`), asigurând o actualizare în timp real a poziției panoului și a valorii curentului. Fiecare componentă a fost testată individual și apoi integrată în sistemul complet. Validarea s-a realizat prin teste în condiții de iluminare variabilă.
  
Line 97: Line 101:
 Pentru a asigura funcționarea corectă a sistemului, a fost necesară calibrarea senzorilor utilizați în proiect. În cazul celor patru foto-rezistori (LDR), s-a observat că aceștia pot avea valori ușor diferite chiar și în condiții identice de iluminare, din cauza toleranțelor de fabricație. Pentru a compensa aceste diferențe, am efectuat citiri multiple în condiții de lumină uniformă și am salvat valorile medii ale fiecărui LDR ca valori de referință. În cod, diferențele dintre citirile curente și cele de referință sunt normalizate pentru a obține o evaluare mai precisă a direcției luminii. Pentru a asigura funcționarea corectă a sistemului, a fost necesară calibrarea senzorilor utilizați în proiect. În cazul celor patru foto-rezistori (LDR), s-a observat că aceștia pot avea valori ușor diferite chiar și în condiții identice de iluminare, din cauza toleranțelor de fabricație. Pentru a compensa aceste diferențe, am efectuat citiri multiple în condiții de lumină uniformă și am salvat valorile medii ale fiecărui LDR ca valori de referință. În cod, diferențele dintre citirile curente și cele de referință sunt normalizate pentru a obține o evaluare mai precisă a direcției luminii.
  
-=== Demo ===+=== Calibrarea elementelor de senzoristică ​===
  
------------------(https://​youtube.com/​shorts/​mDJu763XBK0?​feature=share)------------------+Pentru a asigura funcționarea corectă a sistemului, a fost necesară calibrarea senzorilor utilizați în proiect. În cazul celor patru foto-rezistori ​(LDR), s-a observat că aceștia pot avea valori ușor diferite chiar și în condiții identice de iluminare, din cauza toleranțelor de fabricație. Pentru a compensa aceste diferențe, am efectuat citiri multiple în condiții de lumină uniformă și am salvat valorile medii ale fiecărui LDR ca valori de referință. În cod, diferențele dintre citirile curente și cele de referință sunt normalizate pentru a obține o evaluare mai precisă a direcției luminii.
  
 +Senzorul de curent ACS712 a necesitat și el calibrare, întrucât semnalul de ieșire are un offset de aproximativ 2.5V (corespunzător la 0A). De asemenea, senzorul are și un factor de sensibilitate de 100 mV/A.
  
-===== Rezultate Obţinute =====+Pentru afișajul LCD I2C, am verificat lizibilitatea textului și poziționarea acestuia pe cele două linii ale ecranului (16x2), pentru a asigura o prezentare clară a valorilor.
  
-<note tip> +=== Implementarea ===
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</​note>​+
  
-===== Concluzii =====+{{https://​ocw.cs.pub.ro/​courses/​_media/​pm/​prj2025/​ajipa/​ivanovstefan1.jpg?​800x500}} 
 +{{https://​ocw.cs.pub.ro/​courses/​_media/​pm/​prj2025/​ajipa/​ivanovstefan2.jpg?​800x500}}
  
-===== Download =====+=== GitHub / Codul sursă ​===
  
-<note warning>​ +--------------(https://github.com/​IvanovStefan/​solar_tracker_ivanov_stefan)--------------- 
-O arhivă ​(sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectuluisurse, scheme, etcUn fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).+ 
 +=== Demo === 
 + 
 +-----------------(https://​youtube.com/​shorts/​mDJu763XBK0?​feature=share)------------------
  
-Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:​pm:​prj20??:​c?​** sau **:​pm:​prj20??:​c?:​nume_student** (dacă este cazul). **Exemplu:​** Dumitru Alin, 331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**. 
-</​note>​ 
  
-===== Jurnal ===== 
  
-<note tip> 
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. 
-</​note>​ 
  
-===== Bibliografie/​Resurse ===== 
  
-<​note>​ 
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. 
-</​note>​ 
  
 <​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>​
  
pm/prj2025/ajipa/stefan.ivanov0604.1748190170.txt.gz · Last modified: 2025/05/25 19:22 by stefan.ivanov0604
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