This shows you the differences between two versions of the page.
|
pm:prj2026:victor.stoica0203:robert.predeleanu [2026/05/08 16:49] robert.predeleanu [Software Design] |
pm:prj2026:victor.stoica0203:robert.predeleanu [2026/05/24 23:18] (current) robert.predeleanu [Jurnal] |
||
|---|---|---|---|
| Line 27: | Line 27: | ||
| ^ Componentă ^ Cantitate ^Link ^ Preț unitar (RON) ^ | ^ Componentă ^ Cantitate ^Link ^ Preț unitar (RON) ^ | ||
| - | | Placă dezvoltare Arduino UNO ATmega 328P | 1 | [[https://sigmanortec.ro/Placa-dezvoltare-UNO-R3-Arduino-Compatibil-ATmega328p-CH340G-cu-bara-pini-p170362384| Link]]|30.93 | | + | | Placă dezvoltare Arduino UNO | 1 | [[https://sigmanortec.ro/Placa-dezvoltare-UNO-R3-Arduino-Compatibil-ATmega328p-CH340G-cu-bara-pini-p170362384| Link]]|30.93 | |
| | Display LCD SPI | 1 | [[https://www.bitmi.ro/electronica/display-lcd1602-hd44780-albastru-iluminat-10486.html| Link]] |13.99 | | | Display LCD SPI | 1 | [[https://www.bitmi.ro/electronica/display-lcd1602-hd44780-albastru-iluminat-10486.html| Link]] |13.99 | | ||
| | Modul interfață I2C | 1 | [[https://www.bitmi.ro/module-electronice/modul-interfata-i2c-pentru-lcd1602-10456.html| Link]] |9.99 | | | Modul interfață I2C | 1 | [[https://www.bitmi.ro/module-electronice/modul-interfata-i2c-pentru-lcd1602-10456.html| Link]] |9.99 | | ||
| Line 38: | Line 38: | ||
| ^ Preț total ^ ^ ^ 140.02 RON ^ | ^ Preț total ^ ^ ^ 140.02 RON ^ | ||
| - | ===== Software Design ===== | + | ==== Funcționalitatea Componentelor ==== |
| + | ^ Componentă ^ Rol în proiect ^ | ||
| + | | LCD 1602 | Afișează instrucțiunile, feedback-ul pentru cod și rezultatul accesului | | ||
| + | | Butoane push | Îți permit să navighezi prin meniu, să schimbi orele de hrănire sau să dai o porție la cerere | | ||
| + | | Buzzer Pasiv | Scoate un sunet scurt înainte de eliberarea hranei și în timpul setărilor | | ||
| + | | Servomotor MG995 | Învârte axul pentru a împinge bobițele de mâncare afară din rezervor | | ||
| + | | Modul RTC | Ține minte ora exactă (oră, minut, secundă) chiar și când aparatul este scos din priză | | ||
| + | | Condensator | Stochează energie și o eliberează rapid atunci când servomotorul pornește brusc | | ||
| + | | Adaptor Sursă 5V/2A | Transformă curentul de la priză în curent continuu sigur de 5V pentru tot circuitul | | ||
| - | Proiectul va fi implementat folosind limbajul C și va utiliza perifericele hardware ale microcontrolerului pentru gestionarea procesului de automatizare: | + | ==== Schema Electrică ==== |
| + | {{:pm:prj2026:victor.stoica0203:schema_electrica_pet_feeder.png?700|}} | ||
| - | * Interfața I2C pentru sincronizarea cu modulul de ceas (RTC) și transmiterea datelor către afișajul LCD. | + | ==== Pinout ==== |
| - | * PWM (Pulse Width Modulation) pentru controlul precis al servomotorului MG995 și generarea alertelor sonore prin buzzer. | + | ^ Componentă ^ Pin Arduino ^ Tip Pin ^ Utilitate ^ |
| + | | LCD 1602 | A4 (SDA) | Date I2C | Transmite datele text către ecran | | ||
| + | | LCD 1602 | A5 (SCL) | Clock I2C | Sincronizează transmisia datelor între Arduino și LCD | | ||
| + | | Buton UP | 3 | Digital | Crește valoarea orelor/minutelor în meniul de setare | | ||
| + | | Buton DOWN | 4 | Digital | Scade valoarea orelor/minutelor în meniul de setare | | ||
| + | | Buton MENU | 2 | PCINT | Schimbă starea programului (afișare oră / setare mese) | | ||
| + | | Servomotor MG995 | 9 | PWM | Controlează unghiul și mișcarea precisă a spiralei de hrană | | ||
| + | | Modul RTC | A4 (SDA) | Date I2C | Transmite datele de timp (oră, minut) către Arduino| | ||
| + | | Modul RTC | A5 (SCL) | Clock I2C | Sincronizează citirea timpului de la cipul de ceas| | ||
| + | | Buzzer pasiv | 8 | Digital | Trimite semnalul sonor | | ||
| + | | Linie de Tensiune | 5V | Power | Distribuie tensiunea de 5V către magistrala de alimentare pozitivă a componentelor | | ||
| + | | Referință (GND) | GND | Power | Închide circuitul pentru toate componentele | | ||
| + | ===== Software Design ===== | ||
| - | * GPIO (Input) pentru preluarea comenzilor de la butoane și navigarea în meniul de configurare. | + | Codul sursă al acestui proiect, scris în C++ pentru mediul Arduino, acționează ca centrul de comandă al întregului sistem. Nu este doar un simplu temporizator, ci un sistem integrat care gestionează precis timpul, interfața utilizatorului și controlul electromecanic. |
| - | * Memoria EEPROM pentru salvarea non-volatilă a programului de hrănire, prevenind pierderea datelor la căderi de tensiune. | + | Pentru a asigura un timp de răspuns instantaneu și o amprentă redusă în memorie, codul a fost optimizat folosind tehnici de programare la nivel coborât (Direct Port Manipulation). |
| - | * Timere hardware pentru monitorizarea timpului de funcționare a motorului (dozarea porției) și filtrarea semnalului butoanelor (debouncing). | + | **Funcționalități și Tehnici Cheie:** |
| - | + | ||
| - | * USART/Serial pentru calibrarea senzorilor și depanarea logicii de comparare a timpului în faza de testare. | + | |
| + | * **Sincronizare Precisă (I2C & RTC):** Sistemul preia timpul real de la un modul hardware DS3231 prin protocolul I2C. Aceasta garantează că orele de masă sunt respectate la secundă, independent de funcționarea microcontrolerului. | ||
| + | * **Sistem de Meniu tip „State Machine”:** Logica meniului folosește o mașină de stări (modMeniu) pentru a gestiona tranzițiile dintre ecranul principal și ecranele de editare. Utilizatorul poate naviga și salva setări pentru 3 mese distincte, folosind doar 3 butoane tactile. | ||
| + | * **Optimizare Hardware prin Regiștri:** O caracteristică distinctivă a acestui cod este renunțarea la funcțiile standard (precum digitalRead sau pinMode) în favoarea manipulării directe a regiștrilor microcontrolerului ATmega328P (DDRD, PORTD, PIND, DDRB). Această abordare: | ||
| + | * Scade timpul de reacție al butoanelor la nivel de microsecunde. | ||
| + | * Activează rezistențele interne de Pull-Up direct din hardware. | ||
| + | * Oferă un control mult mai curat asupra buzzer-ului pentru feedback-ul acustic. | ||
| + | * **Control Mecanic Temporizat:** Codul generează semnale PWM precise cu ajutorul bibliotecii Servo.h pentru a controla un motor de rotație continuă (360°). Hrănirea este transformată dintr-o mișcare fixă într-una bazată pe un interval de timp customizabil (în prezent, setat la 10 secunde de rotire inversă). | ||
| + | * **Filtrare Software (Debouncing):** Citirea butoanelor este protejată de un algoritm de debouncing bazat pe funcția millis(), eliminând declanșările multiple cauzate de zgomotul mecanic al contactelor. | ||
| ===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
| - | <note tip> | ||
| - | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | ||
| - | </note> | ||
| + | |||
| + | A fost realizat un prototip electromecanic funcțional și autonom al unui dozator de hrană pentru animale de companie, echipat cu o interfață utilizator pe un display LCD 1602. Sistemul permite programarea orelor de masă folosind 3 butoane tactile, care controlează precis un mecanism elicoidal (sfredel Arhimedic) acționat de un servomotor de rotație continuă. | ||
| + | |||
| + | Sistemul include un meniu complex și multiple funcționalități hardware și software, precum: | ||
| + | |||
| + | * **Monitorizare în timp real** a orei exacte cu ajutorul modulului hardware RTC DS3231 (comunicație I2C); | ||
| + | * **Meniu interactiv tip „State Machine”** ce permite navigarea și programarea independentă a 3 mese distincte; | ||
| + | * **Mecanism de dozare DIY complet funcțional**, construit din carton laminat ranforsat, capabil să transporte hrana uscată fără blocaje mecanice; | ||
| + | * **Control temporizat prin semnal PWM** pentru servomotorul MG995, incluzând rotire inversă pentru eliberarea porțiilor și frânare electronică (punct neutru); | ||
| + | * **Feedback acustic (buzzer)** pentru atenționarea animalului în momentul declanșării mesei; | ||
| + | * **Filtrare software (debounce)** bazată pe temporizarea millis() pentru eliminarea citirilor false ale butoanelor; | ||
| + | * **Gestionarea eficientă a memoriei** prin stocarea orelor de masă în vectori de date (arrays). | ||
| + | |||
| + | Implementarea finală a proiectului demonstrează o arhitectură software hibridă: utilizează biblioteci standard pentru comunicația I2C și generarea semnalelor PWM, combinate cu **configurarea directă a registrelor hardware (PORTB, PORTD, DDRB, DDRD, PIND)** pentru citirea rapidă a butoanelor cu rezistențe interne de Pull-Up și controlul pinilor GPIO. | ||
| ===== Concluzii ===== | ===== Concluzii ===== | ||
| - | ===== Download ===== | ||
| - | <note warning> | + | Realizarea acestui proiect a demonstrat cu succes integrarea conceptelor de electronică, programare la nivel coborât și mecanică DIY într-un dispozitiv practic, autonom și util. Dozatorul automat de hrană își îndeplinește cu precizie scopul, oferind un sistem stabil pentru programarea meselor animalelor de companie. |
| - | 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ă ;-). | + | |
| - | 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**. | + | Una dintre cele mai mari provocări, dar și realizări, a fost proiectarea și asamblarea mecanismului de dozare (sfredelul Arhimedic) folosind exclusiv materiale reciclabile (carton laminat). Această etapă a dovedit că limitările de resurse materiale pot fi depășite prin inginerie creativă. Din punct de vedere software, tranziția de la funcțiile Arduino standard la manipularea directă a registrelor ATmega328P a oferit o perspectivă valoroasă asupra arhitecturii hardware și a optimizării performanței. |
| - | </note> | + | |
| - | ===== Jurnal ===== | + | Pe viitor, proiectul poate fi extins prin modelarea și printarea 3D a ansamblului mecanic pentru o rezistență sporită la uzură, sau prin integrarea unui modul Wi-Fi (ex. ESP8266) pentru controlul și monitorizarea hrănirii de la distanță printr-o aplicație mobilă. |
| + | ===== Download ===== | ||
| - | <note tip> | + | Arhiva atașată pe OCW conține codul sursă complet al proiectului realizat pentru Arduino UNO R3. |
| - | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | |
| - | </note> | + | |
| - | ===== Bibliografie/Resurse ===== | + | Fișier: |
| + | * {{:pm:prj2026:victor.stoica0203:pet_feeder.zip|}} | ||
| + | |||
| + | ===== Jurnal ===== | ||
| - | <note> | + | * **29.04.2026** - Alegerea temei: Dozator Automat de Hrană. |
| - | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | * **06.05.2026** - Crearea paginii wiki și definirea structurii proiectului. |
| - | </note> | + | * **06.05.2026** - Adăugarea descrierii generale, a scopului proiectului și a schemei bloc. |
| + | * **11.05.2026** - Stabilirea configurației hardware, identificarea pinilor și conectarea componentelor pe breadboard. | ||
| + | * **16.05.2026** - Integrarea display-ului LCD 1602 prin protocol I2C și a modulului de timp real RTC DS3231. | ||
| + | * **16.05.2026** - Proiectarea și asamblarea mecanismului de dozare DIY (sfredelul Arhimedic din carton laminat și componentele mecanice). | ||
| + | * **19.05.2026** - Dezvoltarea sistemului de meniu (State Machine) pentru programarea celor 3 mese și calibrarea semnalului PWM pentru servomotor. | ||
| + | * **19.05.2026** - Optimizarea finală a codului prin trecerea la manipularea directă a registrelor hardware (PORTB, PORTD) și testarea ansamblului electromecanic. | ||
| - | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||