Differences

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

Link to this comparison view

pm:prj2026:bianca.popa1106:vlad_gabriel.palade [2026/05/08 23:45]
vlad_gabriel.palade created
pm:prj2026:bianca.popa1106:vlad_gabriel.palade [2026/05/18 17:30] (current)
vlad_gabriel.palade
Line 34: Line 34:
  
 ===== Hardware Design ===== ===== Hardware Design =====
-  * Microcontroler ATmega324P +  * [[https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf|ATmega328P Microcontroller]] 
-  * Modul RTC DS3231 ​(Comunicație I2C) +  * [[https://​www.analog.com/​media/​en/​technical-documentation/​data-sheets/​ds3231.pdf|Modul RTC DS3231]] 
-  * Senzor de temperatură și umiditate DHT11 +  * [[https://​www.mouser.com/​datasheet/​2/​758/​DHT11-Technical-Data-Sheet-Translated-Version-1143054.pdf|Senzor de temperatură și umiditate DHT11]] 
-  * Senzor de lumină (Fotorezistor LDR GL5528)+  * [[https://​cdn.sparkfun.com/​datasheets/​Sensors/​LightImaging/​SEN-09088.pdf|Senzor de lumină (Fotorezistor LDR GL5528)]]
   * LED Alb (Sursă pentru bariera optică)   * LED Alb (Sursă pentru bariera optică)
-  * Servomotor SG90 (Mecanism eliberare)+  * [[https://​www.friendlywire.com/​projects/​ne555-servo-safe/​SG90-datasheet.pdf|Servomotor SG90]]
   * Buzzer pasiv (Alarmă sonoră PWM)   * Buzzer pasiv (Alarmă sonoră PWM)
   * 1x LED Roșu (Alertă mediu)   * 1x LED Roșu (Alertă mediu)
   * 1x Buton (Confirmare / Oprire alarmă)   * 1x Buton (Confirmare / Oprire alarmă)
   * Rezistențe (10kΩ pentru LDR, 330Ω pentru LED-uri)   * Rezistențe (10kΩ pentru LDR, 330Ω pentru LED-uri)
 +
 +
 +===== Software Design =====
 +==== Mediul de dezvoltare și arhitectura ====
 +Proiectul a fost dezvoltat folosind mediul PlatformIO, utilizând limbajul C. O caracteristică principală a implementării este controlul tuturor perifericelor (generare semnale PWM, comunicare I2C, conversie Analog-Digitală și Întreruperi Hardware) este realizat exclusiv prin interacțiunea directă cu regiștrii microcontrolerului ATmega328P. Această abordare elimină dependența de biblioteci externe de nivel înalt specifice framework-ului Arduino, asigurând o amprentă minimă de memorie, un control strict al temporizărilor și un timp de răspuns instantaneu al senzorilor.
 +
 +==== Algoritmul principal: Interogare Secvențială ====
 +Logica centrală a dispozitivului este implementată în programul principal printr-o arhitectură de tip loop care verifică și execută secvențial trei blocuri logice independente,​ utilizând variabile de tip "​flag"​ pentru a reține starea sistemului:
 +
 +Inițializarea:​ Sunt configurați pinii GPIO, interfața I2C pentru ceasul RTC, Timerele pentru controlul servomotorului și generarea de milisecunde,​ modulul ADC pentru fotorezistor și se activează întreruperile globale (sei()).
 +
 +Blocul 1 - Timp și Eliberare (RTC & Servo): Sistemul citește continuu ora de la modulul RTC. Când ora curentă coincide cu ora programată,​ se verifică flag-ul pastilaEliberataAzi. Dacă este 0, sistemul comandă servomotorul să execute o rotație precisă pentru a elibera pastila, după care flag-ul devine 1 pentru a preveni eliberări multiple în același minut. Când ora se schimbă, flag-ul este resetat automat.
 +
 +Blocul 2 - Confirmare și Alarmă (ADC & Buzzer): Sistemul interoghează constant convertorul ADC conectat la bariera optică (LDR). Dacă valoarea scade sub pragul prestabilit,​ înseamnă că pastila a căzut prin tub, iar flag-ul global alarmActive este setat pe 1. În baza acestui flag, buzzer-ul este activat continuu.
 +
 +Blocul 3 - Monitorizare Mediu (DHT11): Utilizând logica de temporizare neblocantă (comparând timpul curent cu o citire anterioară),​ senzorul de temperatură este interogat asincron la fiecare 2 secunde. Dacă temperatura depășește pragul de 26°C, pinul aferent LED-ului de alertă este setat pe HIGH.
 +
 +Oprirea Alarmei (Hardware Interrupt): Deși procesarea generală este secvențială,​ oprirea alarmei este realizată asincron printr-o întrerupere hardware (INT0) declanșată de apăsarea butonului fizic. Rutina de tratare a întreruperii (ISR) resetează instantaneu flag-ul alarmActive la 0, forțând blocul 2 să oprească buzzer-ul la următoarea iterație a buclei.
 +
 +==== Implementarea modulelor periferice ====
 +Pentru a asigura o arhitectură curată, funcționalitățile hardware au fost corelate direct cu laboratoarele parcurse în cadrul materiei:
 +
 +Laboratorul 0: GPIO - Reprezintă fundamentul controlului hardware. Manipularea directă a regiștrilor DDRx și PORTx este folosită pentru a stabili direcția pinilor și pentru a controla LED-ul de alertă și Buzzer-ul. Tot prin GPIO a fost implementat protocolul custom 1-Wire necesar citirii senzorului de temperatură DHT11, manipulând la nivel de microsecundă starea pinilor.
 +
 +Laboratorul 2: Întreruperi - Pinul asociat butonului de confirmare este configurat să intercepteze apăsările prin intermediul unei întreruperi externe (INT). Registrul de control (EICRA) este setat pe front căzător (Falling Edge), detectând momentul exact în care butonul face contact cu masa (GND). Rutina ISR aferentă modifică instantaneu flag-ul alarmei, acționând independent de fluxul programului principal.
 +
 +Laboratorul 3: Timere. PWM - Pentru a asigura temporizarea și acționarea mecanică, se utilizează două timere:
 +
 +Timer 1 (16-bit): Este configurat în modul Fast PWM cu ICR1 ca TOP pentru a genera un semnal exact de 50Hz (20ms) necesar Servomotorului SG90. Prin modificarea dinamică a registrului OCR1A, se controlează milimetric lățimea pulsului (între 1ms și 2ms), dictând unghiul de rotație al brațului mecanic.
 +
 +Timer 2 (8-bit): Este configurat în modul CTC (Clear Timer on Compare Match) cu întrerupere la prag, generând un "​systick"​ la fiecare milisecundă. Această variabilă globală stă la baza funcțiilor de temporizare neblocantă din sistem.
 +
 +Laboratorul 4: ADC - Convertorul Analog-Digital este utilizat pentru a citi bariera optică (LDR). Este inițializat folosind referința AVCC și un prescaler optim (128) pentru a garanta o conversie stabilă la frecvența procesorului. Citirea pinului se face prin polling activ pe bitul ADSC, măsurând cu mare acuratețe căderea de tensiune provocată de trecerea pastilei prin tub.
 +
 +Laboratorul 6: I2C - Comunicația cu modulul RTC DS3231 este realizată integral bare-metal folosind interfața Two-Wire (TWI) a microcontrolerului. Au fost implementate manual funcțiile de START, STOP, WRITE și READ (cu și fără ACK) prin manipularea directă a regiștrilor TWCR, TWSR și TWDR. Logica include configurarea vitezei de transfer (100kHz prin TWBR) și transformarea datelor din format BCD (Binary-Coded Decimal) transmis de ceas în numere întregi zecimale utilizabile de logica programului.
pm/prj2026/bianca.popa1106/vlad_gabriel.palade.1778273122.txt.gz · Last modified: 2026/05/08 23:45 by vlad_gabriel.palade
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