Differences

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

Link to this comparison view

pm:prj2025:atoader:raluca_aida.preda [2025/05/18 23:34]
raluca_aida.preda
pm:prj2025:atoader:raluca_aida.preda [2025/05/25 18:43] (current)
raluca_aida.preda
Line 57: Line 57:
 ^  Prețul total: 136.82 lei  ^^^^ ^  Prețul total: 136.82 lei  ^^^^
  
-{{:​pm:​prj2025:​atoader:​schema.png?​200|}}+{{:​pm:​prj2025:​atoader:​schema.png?​700|}}
  
   - Arduino UNO   - Arduino UNO
Line 69: Line 69:
       *GPIO → citirea stării butoanelor pe D7 și D8 cu pull-down extern       *GPIO → citirea stării butoanelor pe D7 și D8 cu pull-down extern
     -Motivație:​ UNO oferă toate interfețele necesare (I2C, SPI, PWM, GPIO), are suport extins de biblioteci pentru HX711, SD-card și LCD, și e ideal pentru prototipare rapidă.     -Motivație:​ UNO oferă toate interfețele necesare (I2C, SPI, PWM, GPIO), are suport extins de biblioteci pentru HX711, SD-card și LCD, și e ideal pentru prototipare rapidă.
- 
   - HX711 Load Cell Amplifier + Celulă de sarcină   - HX711 Load Cell Amplifier + Celulă de sarcină
     - Modulul HX711 convertește semnalul analogic de la celula de sarcină într-un stream digital, permițând măsurarea greutății.     - Modulul HX711 convertește semnalul analogic de la celula de sarcină într-un stream digital, permițând măsurarea greutății.
Line 78: Line 77:
       *GND → GND       *GND → GND
     - Motivație: HX711 oferă o rezoluție înaltă (24 biți) și comunică ușor prin doi pini digitali, ideal pentru măsurători precise de greutate.     - Motivație: HX711 oferă o rezoluție înaltă (24 biți) și comunică ușor prin doi pini digitali, ideal pentru măsurători precise de greutate.
- 
   - Modul SD-Card (microSD)   - Modul SD-Card (microSD)
     - Permite stocarea locală a datelor (greutate, timpi, evenimente).     - Permite stocarea locală a datelor (greutate, timpi, evenimente).
Line 90: Line 88:
       *GND → GND       *GND → GND
     - Motivație: SD-card-urile sunt ieftine, ușor de integrat și permit logarea pe termen lung fără a încărca memoria internă a Arduino.     - Motivație: SD-card-urile sunt ieftine, ușor de integrat și permit logarea pe termen lung fără a încărca memoria internă a Arduino.
- 
   - LCD 1602 cu interfață I2C   - LCD 1602 cu interfață I2C
     - Afișează valorile măsurate şi mesaje de stare.     - Afișează valorile măsurate şi mesaje de stare.
Line 99: Line 96:
       *GND → GND       *GND → GND
     - Motivație: Interfața I2C reduce numărul de fire la doar 2 (plus VCC/GND), eliberând pini digitali și simplificând cablajul.     - Motivație: Interfața I2C reduce numărul de fire la doar 2 (plus VCC/GND), eliberând pini digitali și simplificând cablajul.
- 
   - Buzzer pasiv   - Buzzer pasiv
     - Emite semnale sonore de alertă.     - Emite semnale sonore de alertă.
Line 105: Line 101:
     - GND → GND     - GND → GND
     - Motivație: Pinul D9 suportă tone(), permițând generarea de tonuri la diferite frecvențe pentru semnalizare acustică.     - Motivație: Pinul D9 suportă tone(), permițând generarea de tonuri la diferite frecvențe pentru semnalizare acustică.
- 
   - Butoane tactile (×2)   - Butoane tactile (×2)
     - Permit utilizatorului să interacționeze cu sistemul (pornire/​oprire,​ reset, navigare meniu etc.).     - Permit utilizatorului să interacționeze cu sistemul (pornire/​oprire,​ reset, navigare meniu etc.).
Line 112: Line 107:
     - Configurare software: pinMode(pin,​ INPUT); digitalRead(pin);​     - Configurare software: pinMode(pin,​ INPUT); digitalRead(pin);​
     - Motivație: folosirea rezistențelor de pull-down externe asigură stabilitate a citirii și pini digitali liberi pentru butoane.     - Motivație: folosirea rezistențelor de pull-down externe asigură stabilitate a citirii și pini digitali liberi pentru butoane.
- 
   - Breadboard + cabluri jumper   - Breadboard + cabluri jumper
     - Asigură interconectarea rapidă și flexibilă a componentelor.     - Asigură interconectarea rapidă și flexibilă a componentelor.
Line 118: Line 112:
     - Motivație: prototipare fără lipire, posibilitate de reconfigurare rapidă.     - Motivație: prototipare fără lipire, posibilitate de reconfigurare rapidă.
  
-===== Software Design =====+{{:​pm:​prj2025:​atoader:​cantar_2025-05-18.png?​800|}}
  
 +===== Software Design =====
 +**Mediu de dezvoltare:​** ​
 +  * Arduino IDE
 +**Librării:​** ​
 +  * SPI.h – pentru comunicaţia SPI cu modulul SD.
 +  * SD.h – pentru citirea de fişiere de pe cardul SD (findFirstWav,​ parseWavHeader).
 +  * HX711.h – driverul standard pentru conversia celulei de sarcină (tare, get_units).
 +  * avr/​interrupt.h – pentru definirea şi folosirea ISR-ului Timer1_COMPA_vect.
 +  * În plus, nu folosim nicio librărie I²C: am implementat “bit-banged” direct pe D2/D4.
 +**Structuri și algoritmi:​**
 +  * Structuri:
 +    * Enumerare enum Unit { KG, G, ML, DL, OZ } — facilitează ciclarea între unităţi de măsură.
 +    * Arrays pentru debounce (lastDebounceTime[3],​ lastBtnState[3]).
 +  * Algoritmi
 +    * Debounce simplu: compară starea curentă a fiecărui buton cu ultima, cu o întârziere minimă (debounceDelay).
 +    * State-machine PWM-WAV:
 +      * playing = false/true → ISR sau buclă principală porneşte/​opreşte redarea.
 +      * Logica threshold (dacă greutatea > 4.5 kg → porneşte WAV, altfel → opreşte).
 +    * Bit-banged I²C: secvenţă de start, byte-by-byte,​ ACK/NACK, stop – implementată manual pentru LCD.
 +    * Header parsing WAV:
 +      * Sari peste „RIFF” + „fmt” (12 octeți), apoi citești câte 8 bytes per chunk până găsești „data”.
 +** Funcții implementate:​**
 +  * setup() – inițializări (SD, PWM, Timer ISR, LCD, HX711, butoane).
 +  * loop() –
 +    * Debounce & acțiuni butoane (tare, lock, schimb unitate).
 +    * Citire greutate și aplicare offset/​tare.
 +    * Control redare WAV după pragul de 4.5 kg.
 +    * Conversie greutate în unități și afișare pe LCD.
 +  * ISR(TIMER1_COMPA_vect) – citește octet cu octet şi scrie în registrele PWM.
 +  * findFirstWav(),​ parseWavHeader(File &f) – căutare şi poziționare pentru fișierul WAV.
 +  * I²C bit-banged routines: i2c_start(),​ i2c_write_bit(),​ i2c_read_ack(),​ pcf_write(),​ lcd_cmd(), lcd_data() etc.
 +  * Debounce logic – în loop compararea stărilor şi actualizarea timpurilor.
  
-<note tip> +Codul sursă{{:​pm:​prj2025:​atoader:​cod-cantar.zip|}}
-Descrierea codului aplicaţiei (firmware): +
-  * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) +
-  * 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 ===== ===== Rezultate Obţinute =====
pm/prj2025/atoader/raluca_aida.preda.1747600469.txt.gz · Last modified: 2025/05/18 23:34 by raluca_aida.preda
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