This shows you the differences between two versions of the page.
|
pm:prj2026:atoader:aureliu.antonie [2026/05/21 00:14] aureliu.antonie [Software Design] |
pm:prj2026:atoader:aureliu.antonie [2026/05/22 23:33] (current) aureliu.antonie [Jurnal] |
||
|---|---|---|---|
| Line 113: | Line 113: | ||
| Am folosit bibliotecile: | Am folosit bibliotecile: | ||
| - | * HX711 pentru a putea conecta senzorul de greutate la breadboard, cât și pentru a putea interpreta datele primite | + | - HX711 pentru a putea conecta senzorul de greutate la breadboard, cât și pentru a putea interpreta datele primite |
| - | * LiquidCrystal_I2C pentru a afișa diferite mesaje pe ecranul LCD | + | - LiquidCrystal_I2C pentru a afișa diferite mesaje pe ecranul LCD |
| - | * RTClib pentru a putea realiza statisticile menționate, spre exemplu câtă apă am băut în ziua respectivă | + | - RTClib pentru a putea realiza statisticile menționate, spre exemplu câtă apă am băut în ziua respectivă |
| - | * EEPROM pentru a putea salva statisticile chiar și dacă dozatorul nu mai este alimentat | + | - SoftPWM pentru a varia intensitatea ledurilor |
| - | * Wire pentru comunicarea I2C | + | - EEPROM pentru a putea salva statisticile chiar și dacă dozatorul nu mai este alimentat |
| + | |||
| + | - Wire pentru comunicarea I2C | ||
| Elementele de noutate ale proiectului sunt reprezentate de funcționalitățile diverse: | Elementele de noutate ale proiectului sunt reprezentate de funcționalitățile diverse: | ||
| - | * utilizatorul poate seta la început volumul sticlei folosite (de la 50 ml la 1000 ml, increment de 50 ml) | + | - utilizatorul poate seta la început volumul sticlei folosite (de la 50 ml la 1000 ml, increment de 50 ml) |
| - | * după ce se așază sticla cu apa inițială, senzorul detectează exact masa, luând în calcul masa sticlei goale și a furtunului | + | - după ce se așază sticla cu apa inițială, senzorul detectează exact masa, luând în calcul masa sticlei goale |
| - | * la pornirea dozatorului, progresul este afișat atât pe baza LED-urilor (acestea se aprind alternativ, variind intensitatea pe măsura trecerii timpului), cât și prin intermediul ecranului LCD (afișează volumul rămas) | + | - la pornirea dozatorului, progresul este afișat atât pe baza LED-urilor (acestea se aprind alternativ, variind intensitatea pe baza volumului rămas), cât și prin intermediul ecranului LCD (afișează volumul rămas) |
| - | * există mai multe moduri de afișaj (timpul rămas sau cantitatea de apă consumată în ziua respectivă, acest lucru fiind foarte important în nutriție) | + | - există mai multe moduri de afișaj (volumul rămas sau cantitatea de apă consumată în ziua respectivă, acest lucru fiind foarte important în nutriție) |
| - | * după ce sticla se umple, se poate pune o nouă sticlă, fără a fi necesară repornirea aparatului | + | - dozatorul se poate pune pe pauză în orice moment, respectiv se poate relua activitatea rămasă |
| - | Codul propriu zis se bazeaza pe un automat de stari, astfel: | + | - după ce sticla se umple, se poate pune o nouă sticlă, fără a fi necesară repornirea aparatului |
| - | * starea 0 ( | + | Codul propriu-zis se bazează pe un automat de stări circular, astfel: |
| + | |||
| + | - starea 0 (selecția) - se citește starea butoanelor. În această etapă, butoanele sunt utilizate pentru selectarea volumului sticlei | ||
| + | |||
| + | - starea 1 (așteptare) - se așteaptă punerea sticlei pe cântar și calcularea masei | ||
| + | |||
| + | - starea 2 (umplere) - microcontrolerul acționează releul, pornind pompa | ||
| + | |||
| + | - starea 3 (pauză) - pompa este oprită, iar totul (LCD, releul etc.) este pus pe pauză, în standby | ||
| + | |||
| + | - starea 4 (finalizarea) - pompa s-a oprit, se salvează statisticile în EEPROM și se așteaptă ca sticla să fie ridicată. După ce se ridică sticla, se pornește din nou din starea 0 | ||
| Senzorul de greutate a fost calibrat pe baza unui cod software. Acesta poate fi vizualizat pe [[https://github.com/AntonieValentin/Dozator-de-apa-inteligent/commit/44f2458279bb0449c95a98473be8f0663289ac63|git]]. Am pus pe cântar o sticlă cu masă cunoscută (250 ml), iar apoi am reglat, prin UART, factorul de calibrare din software. | Senzorul de greutate a fost calibrat pe baza unui cod software. Acesta poate fi vizualizat pe [[https://github.com/AntonieValentin/Dozator-de-apa-inteligent/commit/44f2458279bb0449c95a98473be8f0663289ac63|git]]. Am pus pe cântar o sticlă cu masă cunoscută (250 ml), iar apoi am reglat, prin UART, factorul de calibrare din software. | ||
| Line 143: | Line 155: | ||
| Optimizări: | Optimizări: | ||
| - | * întreruperi externe (ca să nu facem polling) - proiectul este destul de complex. Fără întreruperi nu puteam detecta simultan și masa sticlei, și starea butonului etc. | + | - întreruperi externe (ca să nu facem polling) - proiectul este destul de complex. Fără întreruperi nu puteam detecta simultan și masa sticlei, și starea butonului etc. |
| - | * debouncing (software) - pentru a se înregistra o singură apăsare | + | - debouncing (software) - pentru a se înregistra o singură apăsare |
| - | * variabile volatile - pentru a nu fi optimizat accesul de către compilator | + | - variabile volatile - pentru a nu fi optimizat accesul de către compilator |
| - | * timere în loc de delay - pentru a nu bloca execuția inutil | + | - timere în loc de delay - pentru a nu bloca execuția inutil |
| - | * accesul EEPROM - modificăm cantitatea de apă băută numai după ce sticla s-a umplut complet, pentru a proteja memoria sensibilă EEPROM | + | - accesul EEPROM - modificăm cantitatea de apă băută numai după ce sticla s-a umplut complet, pentru a proteja memoria sensibilă EEPROM |
| Ca mediu de dezvoltare am folosit VS Code cu extensia PlatformIO, framework Arduino. | Ca mediu de dezvoltare am folosit VS Code cu extensia PlatformIO, framework Arduino. | ||
| ===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
| - | [[https://www.youtube.com/shorts/JMbjXX_uIwk|Demonstrație Video]] | + | [[https://www.youtube.com/shorts/JMbjXX_uIwk|Demonstrație Video Prima Versiune]] |
| + | |||
| + | [[https://youtube.com/shorts/HjKurvxfl2s|Demonstrație Video A Doua Versiune]] | ||
| [[https://github.com/AntonieValentin/Dozator-de-ap-inteligent|Link github]] | [[https://github.com/AntonieValentin/Dozator-de-ap-inteligent|Link github]] | ||
| Line 170: | Line 184: | ||
| ===== Jurnal ===== | ===== Jurnal ===== | ||
| - | Am terminat montajul hardware, iar partea de software este aproape finalizată. | + | Am terminat proiectul |
| ===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
| Line 205: | Line 219: | ||
| [[https://github.com/adafruit/RTClib|RTClib]] | [[https://github.com/adafruit/RTClib|RTClib]] | ||
| + | |||
| + | [[https://github.com/bhagman/SoftPWM|SoftPWM]] | ||
| [[https://docs.arduino.cc/learn/built-in-libraries/eeprom/|EEPROM]] | [[https://docs.arduino.cc/learn/built-in-libraries/eeprom/|EEPROM]] | ||