Differences

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

Link to this comparison view

pm:prj2026:vlad.radulescu2901:claudia.soare [2026/05/16 21:23]
claudia.soare [Hardware Design]
pm:prj2026:vlad.radulescu2901:claudia.soare [2026/05/24 22:37] (current)
claudia.soare [Hardware Design]
Line 22: Line 22:
  
 ===== Hardware Design ===== ===== Hardware Design =====
-{{:​pm:​prj2026:​vlad.radulescu2901:​schema_electrica_modul_solar.png?750|}}+ 
 +{{:​pm:​prj2026:​vlad.radulescu2901:​modulsolar_claudia.png?750}}
  
 **Explicatia schemei electrice:​** **Explicatia schemei electrice:​**
Line 64: Line 65:
 ===== Software Design ===== ===== Software Design =====
  
 +==== Mediu de dezvoltare ====
 +Proiectul a fost dezvoltat folosind mediul **Visual Studio Code**, impreuna cu extensia **PlatformIO**. Aceasta abordare faciliteaza scrierea codului bare-metal in limbajul C, gestionand automat toolchain-ul avr-gcc si procesul de compilare/​incarcare a firmware-ului pe microcontrolerul ATmega328P prin intermediul utilitarului avrdude integrat. Pentru depanare (debugging) in timp real, a fost utilizat Serial Monitor-ul oferit nativ de PlatformIO.
  
-<note tip> +==== Librarii si surse 3rd-party ==== 
-Descrierea codului aplicaţiei (firmware):​ +Pentru a mentine un control strict asupra resurselor limitate ​de memorie ​(RAM si Flash), majoritatea modulelor ​(LCD, ADCcomunicare I2C, actionare motoare, generare semnal PWMau fost scrise de la zero, lucrand direct cu registrii microcontrolerului.
-  * mediu de dezvoltare ​(if any) (e.g. AVR StudioCodeVisionAVR) +
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) +
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi +
-  * (etapa 3) surse şi funcţii implementate +
-</​note>​+
  
-===== Rezultate Obţinute =====+Singura librarie 3rd-party integrata in proiect este: 
 +  * **Petit FAT File System (PetitFS)**:​ A fost utilizata pentru interfatarea cu cardul SD prin intermediul protocolului SPI. Varianta "​Petit"​ a fost aleasa in mod specific deoarece necesita un consum extrem de mic de memorie RAM de lucru (sub 50 de bytes), fiind ideala pentru arhitectura pe 8 biti a microcontrolerului,​ permitand parsarea sistemului de fisiere pentru extragerea si redarea fisierelor audio .wav.
  
-<note tip> +==== Structura fisierelor sursa ==== 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +Proiectul este organizat modular, fiecare componenta hardware sau software avand propriul set de fisiere header (''​.h''​) si sursa (''​.c''​):​
-</​note>​+
  
-===== Concluzii =====+  * **main.c:** Fisierul principal care orchestreaza intreaga logica a tracker-ului. Implementeaza bucla infinita, algoritmul de mediere pentru senzorii ADC (Oversampling),​ masina de stari pentru tranzitia zi/noapte si logica de miscare a panoului pe baza diferentelor de iluminare. 
 +  * **motor.c / motor.h:** Modulul de actionare mecanica. Gestioneaza secventele de biti pentru driverele ULN2003 aferente motoarelor pas cu pas (axa X si axa Y) si realizeaza multiplexarea manuala a pinilor pe porturile D, B si C. Include functia de oprire (''​Motors_Stop''​) pentru conservarea energiei. 
 +  * **lcd.c / lcd.h:** Driver bare-metal pentru controlul ecranului LCD 1602 prin intermediul modulului I2C (PCF8574). Implementeaza protocolul TWI la nivel de registri pentru a trimite comenzi si date in format de 4 biti. 
 +  * **usart.c / usart.h:** Interfata de comunicatie seriala (UART). Initializeaza baud rate-ul si redirecteaza fluxul standard de date (''​stdout''​),​ permitand utilizarea functiei ''​printf()''​ pentru debugging in Serial Monitor. 
 +  * **audio.c / audio.h:** Modulul de procesare si redare audio. Foloseste Timerul 1 pentru a genera semnalul PWM (Fast PWM pe 8-biti) si Timerul 2 pentru a declansa o intrerupere la 8000Hz (rata de esantionare). Tot aici se face parsarea dinamica a header-ului fisierelor .wav. 
 +  * **spi.c / spi.h:** Driver pentru protocolul de comunicatie SPI (Serial Peripheral Interface). Configureaza registrii hardware dedicati pentru a stabili o conexiune rapida cu modulul de card SD. 
 +  * **sd.c / sd.h:** Modul care trimite comenzile fizice catre cardul SD (ex. CMD0, CMD8, ACMD41) pentru initializare si citirea blocurilor de date. 
 +  * **pff.c / pff.h:** Libraria 3rd-party PetitFS. Contine logica sistemului de fisiere FAT16/​FAT32,​ permitand deschiderea,​ cautarea (lseek) si citirea fisierelor intr-un mediu cu memorie RAM extrem de limitata. 
 +  * **integer.h:​** Fisier auxiliar de tipologie inclus de libraria PetitFS. Defineste tipurile standard de date (ex. ''​WORD'',​ ''​DWORD'',​ ''​BYTE''​) pentru a asigura compatibilitatea arhitecturii sistemului de fisiere indiferent de platforma utilizata.
  
-===== Download =====+==== Algoritmi si structuri implementate ​==== 
 +Pentru a asigura o functionare stabila si autonoma a tracker-ului solar, s-au implementat urmatoarele mecanisme software: 
 +  - **Automat de Stari (State Machine):** Sistemul foloseste un automat de stari simplu dictat de tensiunea generata direct de panoul solar. Acesta asigura o tranzitie curata si unicat intre modul de "​ZI(Activ)"​ si modul de "​NOAPTE",​ declansand evenimentele audio specifice. 
 +  - **Oversampling si Filtrare Software (ADC):** Pentru a elimina zgomotul si fluctuatiile fine ale luminii ambientale, citirile de la fotorezistente (LDR) si citirea tensiunii de pe panou trec printr-un algoritm de mediere, esantionand de mai multe ori consecutiv pe acelasi canal. 
 +  - **Zone Moarte (Deadzone):​** Pentru controlul motoarelor pas cu pas s-a implementat o toleranta algoritmica de lumina (o marja de eroare fata de centrul ideal). Aceasta previne oscilatiile mecanice continue atunci cand lumina ambientala este uniforma.
  
-<note warning> +==== Surse si functii implementate ==== 
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ surse, scheme, etc. Un fişier README, un ChangeLog, un script ​de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).+Arhitectura firmware-ului ​este modularizata pentru a decupla logica senzorilor ​de cea a actuatorilor
  
-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**. +**1. Modulul Principal (main.c)** 
-</note>+Aici se face preluarea datelor, afisarea pe ecran si rularea masinii ​de stari pentru tranzitiile audio.  
 +Pentru a stabiliza valorile citite de senzorii optici, a fost implementata functia de ''​Oversampling'',​ care aduna 8 esantioane consecutive si returneaza media lor, ignorand astfel zgomotul electric: 
 +<​code ​c
 +uint16_t ADC_ReadFiltered(uint8_t ch
 +    uint32_t sum = 0; 
 +    for (uint8_t i = 0; i < 8; i++) { 
 +        sum += ADC_Read(ch);​ 
 +        _delay_us(300);​ 
 +    } 
 +    return (uint16_t)(sum / 8); 
 +} 
 +</code>
  
-===== Jurnal =====+Logica de tranzitie Zi/Noapte asigura redarea fisierului WAV corespunzator o singura data la trecerea pragului de tensiune, folosind flag-ul ''​este_zi'':​ 
 +<code c> 
 +if (voltaj_mv >PRAG_ZI && este_zi !1) { 
 +    este_zi ​1;  
 +    printf("​-->​ [EVENIMENT] A rasarit soarele!\n"​);​ 
 +    WAV_Play("​COCOS.WAV"​);​ 
 +
 +else if (voltaj_mv <PRAG_NOAPTE && este_zi !0) { 
 +    este_zi ​0;  
 +    printf("​-->​ [EVENIMENT] S-a intunecat. Trecem pe modul de noapte.\n"​);​ 
 +    WAV_Play("​NOAPTE.WAV"​);​ 
 +
 +</​code>​
  
-<note tip+**2. Modulul de Motoare (motor.h / motor.c)** 
-Puteți avea și o secțiune ​de jurnal în care să poată urmări asistentul de proiect progresul proiectului. +Contine secventele de biti pentru driverul ULN2003 (Half-Step, 8 pasi). Deoarece pinii motorului pe axa Y (Verticala) sunt raspanditi pe porturi fizice diferite (PORTD, PORTB, PORTC) pentru a evita conflictele cu interfetele I2C si PWM, functia ''​MotorY_Move''​ implementeaza multiplexarea manuala a semnalelor catre fiecare pin in parte: 
-</note>+<code c
 +void MotorY_Move(int8_t directie) { 
 +    if (directie > 0) 
 +        step_index_Y = (step_index_Y + 1) & 7; 
 +    else if (directie < 0) 
 +        step_index_Y = (step_index_Y - 1) & 7; 
 + 
 +    uint8_t step = step_sequence[step_index_Y];​ 
 + 
 +    // Curatam pinii specifici ​de pe porturile D, B si C 
 +    PORTD &= ~((1 << PD6) | (1 << PD7)); 
 +    PORTB &= ~(1 << PB0); 
 +    PORTC &= ~(1 << PC3); 
 + 
 +    ​// Mapam fiecare bit din secventa catre pinul hardware corect 
 +    if (step & 0x01) PORTD |= (1 << PD6); 
 +    if (step & 0x02) PORTD |= (1 << PD7); 
 +    if (step & 0x04) PORTB |= (1 << PB0); 
 +    if (step & 0x08) PORTC |= (1 << PC3); 
 +
 +</code> 
 + 
 +===== Rezultat ===== 
 + 
 +https://​drive.google.com/​file/​d/​1DGZJ26SoPe8rLa0h7vX-gNK8Hjuyt_yA/​view?​usp=sharing 
 +===== Concluzii ===== 
 + 
 +Acest proiect a reprezentat o provocare complexa si o sinteza excelenta a conceptelor de programare low-level si hardware design. Dezvoltarea unui Solar Tracker hibrid, folosind o abordare strict bare-metal in C, a demonstrat importanta gestionarii eficiente a resurselor limitate ale unui microcontroler (precum memoria RAM de doar 2KB a cipului ATmega328P) in conditiile rularii unor sarcini simultane. 
 + 
 +Principalele realizari si lectii invatate includ: 
 +  * **Integrarea Hardware-Software:​** Am reusit sa sincronizez componente cu cerinte hardware si de timp complet diferite: citirea senzorilor analogici prin oversampling,​ actionarea fluida a motoarelor pas cu pas, afisarea de date pe I2C si redarea audio in timp real (prin generare de semnal PWM si comunicatie SPI cu un card SD). 
 +  * **Optimizarea Resurselor:​** Integrarea modulului audio (PetitFS) alaturi de restul perifericelor a provocat initial coliziuni in memorie (Stack Overflow) si caderi de tensiune. Aceasta problema critica a fost depasita prin ajustarea atenta a bufferelor de citire la 256 bytes si optimizarea codului de debugging. 
 +  * **Flexibilitate si Control Absolut:** Renuntarea la bibliotecile predefinite abstractizate a oferit un control total asupra registrilor (Timere, ADC, TWI, SPI). Acest lucru a permis implementarea unor solutii personalizate vitale, precum multiplexarea manuala a pinilor pentru motoare pe porturi diferite si scrierea unui driver propriu, eficient, pentru ecranul LCD. 
 + 
 +===== Download =====
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ + 
-Listă cu documentedatasheet-uriresurse Internet folositeeventual grupate pe **Resurse Software** ​şi **Resurse Hardware**. +Acest proiect a fost realizat consultand urmatoarele surse oficiale si documentatii tehnicestructurate pe componente hardware si software: 
-</note>+ 
 +==== Resurse Hardware ==== 
 +  * **[[https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061A.pdf|Datasheet ATmega328P (Microchip)]]:​** Sursa esentiala pentru intelegerea si configurarea la nivel de bit a registrilor pentru Timere (generare PWM si intreruperi)ADC (conversie analog-digitala)SPI si TWI (I2C). 
 +  ​* **[[https://​www.ti.com/​lit/​ds/​symlink/​pcf8574.pdf|Datasheet PCF8574 (Texas Instruments)]]:​** Documentatia pentru modulul "​Remote 8-bit I/O expander for I2C-bus",​ necesara pentru implementarea algoritmului bare-metal de comunicatie intre microcontroler si ecranul LCD 1602. 
 +  * **[[https://​www.makerguides.com/​wp-content/​uploads/​2019/​04/​ULN2003-Datasheet.pdf|Datasheet Driver ULN2003]]:​** Specificatiile tehnice ale array-ului de tranzistori Darlington, folosit impreuna cu motorul stepper 28BYJ-48. A fost esential pentru calculul unghiular al pasilor (reductor intern 1:64) si intelegerea secventei corecte de magnetizare a bobinelor in modul Half-Step si Full-Step. 
 +==== Resurse Software ​==== 
 +* **[[https://​ocw.cs.pub.ro/​courses/​pm|Laboratoarele OCW - Proiectarea Microprocesoarelor]]:​** Suportul teoretic si practic principal pentru fundamentarea cunostintelor despre arhitectura AVR, protocoalele de comunicatie seriala (UART, SPI, I2C) si manipularea la nivel de port. 
 +  ​**[[http://​elm-chan.org/​fsw/​ff/​00index_p.html|Petit FAT File System Module (Elm-Chan)]]:​** Documentatia oficiala si codul sursa pentru libraria PetitFS, utilizata pentru accesarea sistemului de fisiere de pe cardul SD in conditii de memorie RAM extrem de redusa (specific arhitecturilor pe 8 biti)
 +  * **[[https://​www.nongnu.org/​avr-libc/​user-manual/​|AVR Libc Reference Manual]]:** Utilizat pentru detaliile de implementare a bibliotecilor standard C pe mediul AVR (in special headerele ''​<avr/io.h>''​ si ''<​avr/​interrupt.h>''​). 
 +  * **[[http://​soundfile.sapp.org/​doc/​WaveFormat/​|Standardul RIFF WAVE Audio Format]]:** Referinta tehnica folosita pentru structurarea functiei custom de parsare a header-ului fisierelor .wav, necesara pentru extragerea automata a frecventei de esantionare (Sample Rate) si a dimensiunii datelor PCM.
  
 <​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/prj2026/vlad.radulescu2901/claudia.soare.1778955797.txt.gz · Last modified: 2026/05/16 21:23 by claudia.soare
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