This shows you the differences between two versions of the page.
pm:prj2025:atoader:raluca_aida.preda [2025/05/09 18:30] raluca_aida.preda [Introducere] |
pm:prj2025:atoader:raluca_aida.preda [2025/05/25 18:43] (current) raluca_aida.preda |
||
---|---|---|---|
Line 2: | Line 2: | ||
===== Introducere ===== | ===== Introducere ===== | ||
Proiect realizat de Preda Raluca-Aida, 334CA | Proiect realizat de Preda Raluca-Aida, 334CA | ||
- | asaa [aa] | ||
- | <note tip> | + | **Despre ce este proiectul?** \\ |
- | Prezentarea pe scurt a proiectului vostru: | + | Proiectul constă într-un cântar de bucătărie bazat pe o Placă de Dezvoltare compatibilă cu Arduino UNO. Dispozitivul măsoară greutatea ingredientelor și afișează valoarea pe un ecran LCD. |
- | * ce face | + | |
- | * care este scopul lui | + | **Care este scopul proiectului?** \\ |
- | * care a fost ideea de la care aţi pornit | + | Scopul acestui proiect este de a oferi o soluţie precisă şi accesibilă pentru cântărirea ingredientelor în bucătărie, astfel încât utilizatorul să poată prepara reţete cu doze exacte şi rapiditate. |
- | * de ce credeţi că este util pentru alţii şi pentru voi | + | |
- | </note> | + | **Ce a inspirat ideea?** \\ |
+ | Inspiraţia a venit din nevoia de precizie în gătit şi cofetărie, unde diferenţa de câteva grame poate afecta reuşita unei reţete. Fascinaţia pentru proiecte embedded şi senzori de forţă m-a motivat să explorez modul în care un load cell şi un microcontroller simplu precum ATmega328p pot lucra împreună pentru un dispozitiv practic şi educaţional. | ||
+ | |||
+ | **De ce este util acest proiect?** \\ | ||
+ | Acest cântar de bucătăriedemonstrează cum componente electronice low-cost pot fi combinate pentru a crea un aparat util în viaţa de zi cu zi. Pe lângă beneficiile practice ale cântăririi precise, proiectul are valoare educaţională, întrucât învaţă interfeţarea senzorilor, protocolul HX711, gestionarea afișajelor. | ||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | <note tip> | + | {{:pm:prj2025:atoader:d3.png?|}} |
- | O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează. | + | |
- | Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html | + | ==== Descrierarea componentelor ==== |
- | </note> | + | **Arduino UNO R3 (ATmega328P + ATmega16U2)** |
+ | * Primește datele de greutate de la HX711. | ||
+ | * Procesează intrările de la butoane. | ||
+ | * Gestionează afișajul și redarea audio. | ||
+ | * Comunică cu toate celelalte componente prin GPIO, I2C, PWM și SPI. | ||
+ | **Load Cell + Amplificator HX711** | ||
+ | *Transformă forța mecanică (greutatea ingredientelor) în semnal digital. | ||
+ | *Load cell-ul generează un semnal analog proporțional cu greutatea, iar modulul HX711 realizeazăconversia A/D. | ||
+ | *Comunică cu Arduino prin două linii digitale. | ||
+ | **Butoane (Tare și Selectare Unitate)** | ||
+ | *Tare: resetează greutatea afișată la zero. | ||
+ | *Selectare Unitate: comută între grame și uncii. | ||
+ | *Fiecare buton este conectat la un pin GPIO al plăcii Arduino UNO R3. | ||
+ | **LCD Display** | ||
+ | *Afișează greutatea măsurată și unitatea selectată. | ||
+ | *Conectat la Arduino pe magistrala I2C, folosind doar două fire pentru date și ceas. | ||
+ | **Modul SD (Card Reader)** | ||
+ | *Stochează fișiere audio. | ||
+ | *Arduino citește aceste fișiere WAV/RAW de pe card prin SPI și le trimite către buzzer pentru redare. | ||
+ | **Buzzer** | ||
+ | *Redă audio-ul citit de pe cardul SD. | ||
+ | *Este controlat de Arduino printr-un pin PWM, care produce semnalul necesar decodării și redării pe buzzer. | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
- | <note tip> | + | ==== Lista Componentelor ==== |
- | Aici puneţi tot ce ţine de hardware design: | + | |
- | * listă de piese | + | |
- | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | + | |
- | * diagrame de semnal | + | |
- | * rezultatele simulării | + | |
- | </note> | + | |
- | ===== Software Design ===== | + | ^ Nume ^ Cantitate ^ Preț per unitate (lei) ^ |
+ | |Placa de Dezvoltare Compatibila cu Arduino UNO R3 (ATmega328p + ATmega16u2) + cablu|1|54.37| | ||
+ | |LCD Display|1|16.34| | ||
+ | |Buzzer|1|1.40| | ||
+ | |Button|2|0.36| | ||
+ | |Breadboard|1|9.98| | ||
+ | |Celula de Sarcina de 5 kg cu Amplificator HX711|1|25.85| | ||
+ | |Cititor de card SD|1|28.16| | ||
+ | ^ Prețul total: 136.82 lei ^^^^ | ||
+ | {{:pm:prj2025:atoader:schema.png?700|}} | ||
+ | |||
+ | - Arduino UNO | ||
+ | - Microcontroller principal care orchestrează întregul sistem. | ||
+ | - Tensiune de lucru: 5 V | ||
+ | - Interfețe utilizate: | ||
+ | *I2C → comunicație cu LCD-ul 1602 (SDA pe A4, SCL pe A5) | ||
+ | *SPI → comunicație cu modulul SD-card (CS → D10, MOSI → D11, MISO → D12, SCK → D13) | ||
+ | *Digital I/O → legături cu HX711 (DT → D3, SCK → D2) | ||
+ | *PWM → generare de tonuri cu buzzerul pasiv (tone()) pe D9 | ||
+ | *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ă. | ||
+ | - 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. | ||
+ | - Pini utilizați: | ||
+ | *DT (Data) → D3 (digital input) | ||
+ | *SCK (Clock) → D2 (digital output) | ||
+ | *VCC → 5 V | ||
+ | *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. | ||
+ | - Modul SD-Card (microSD) | ||
+ | - Permite stocarea locală a datelor (greutate, timpi, evenimente). | ||
+ | - Interfață: SPI | ||
+ | - Pini utilizați: | ||
+ | *CS → D10 | ||
+ | *DI (MOSI) → D11 | ||
+ | *DO (MISO) → D12 | ||
+ | *SCK → D13 | ||
+ | *VCC → 5 V | ||
+ | *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. | ||
+ | - LCD 1602 cu interfață I2C | ||
+ | - Afișează valorile măsurate şi mesaje de stare. | ||
+ | - Pini utilizați: | ||
+ | *SDA → A4 | ||
+ | *SCL → A5 | ||
+ | *VCC → 5 V | ||
+ | *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. | ||
+ | - Buzzer pasiv | ||
+ | - Emite semnale sonore de alertă. | ||
+ | - Pin semnal → D9 (PWM-capable) | ||
+ | - GND → GND | ||
+ | - Motivație: Pinul D9 suportă tone(), permițând generarea de tonuri la diferite frecvențe pentru semnalizare acustică. | ||
+ | - Butoane tactile (×2) | ||
+ | - Permit utilizatorului să interacționeze cu sistemul (pornire/oprire, reset, navigare meniu etc.). | ||
+ | - Pini semnal → D7 și D8 (GPIO) | ||
+ | - Pull-down extern → rezistențe de 10 kΩ către GND | ||
+ | - 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. | ||
+ | - Breadboard + cabluri jumper | ||
+ | - Asigură interconectarea rapidă și flexibilă a componentelor. | ||
+ | - Tipuri de fire: mamă-mamă pentru module, tată-mamă pentru legături la Arduino. | ||
+ | - Motivație: prototipare fără lipire, posibilitate de reconfigurare rapidă. | ||
+ | |||
+ | {{: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 ===== |