Table of Contents

Monitor de Hidratare

Introducere

Monitor de Hidratare este un dispozitiv compact de monitorizare a consumului zilnic de apa.

Descriere generală

Schema Bloc

Module si interactiuni:

Laboratoare utilizate

Hardware Design

Lista de piese

Nr. Componenta Cantitate Rol in proiect
1 Load Cell 5kg 1 buc. Senzorul care simte cat cantareste sticla in fiecare moment
2 Modul HX711 1 buc. Preia semnalul slab de la load cell si il face utilizabil pentru microcontroller
3 Ecran OLED SSD1306 0.96” 1 buc. Afiseaza progresul de hidratare in timp real
4 ATmega328P Xplained Mini 1 buc. Creierul intregului sistem, coordoneaza toate celelalte componente
5 Modul Buzzer Pasiv 5V 1 buc. Reaminteste utilizatorului sa bea apa daca trece prea mult timp fara consum
6 Butoane PCB Mini 6x6x5mm 3 buc. Permit setarea obiectivului zilnic si resetarea cantarului
7 Kit rezistente 1 set Rezistente de pull-up pentru butoane
8 Fire Dupont M-F 1 set Leaga modulele externe la placa fara lipire
9 Fire breadboard M-M 1 set Conexiuni rapide intre componente pe breadboard
10 Breadboard 830 pini 1 buc. Permite testarea circuitului fara lipire permanenta
11 Cablu Micro-USB 1 buc. Alimentare si programare placa de la laptop sau power bank

Schema electrica

Pini folositi

Componenta Pin componenta Pin ATmega328P Xplained Mini Explicatie
HX711 VCC 5V Modulul este alimentat la 5V de la placa
HX711 GND GND Toate componentele trebuie sa aiba masa comuna
HX711 DAT / DOUT PD2 Pin digital folosit pentru citirea datelor de la HX711
HX711 CLK / SCK PD3 Pin digital folosit pentru semnalul de clock catre HX711
OLED SSD1306 VDD / VCC 5V Display-ul este alimentat de la placa
OLED SSD1306 GND GND Masa comuna
OLED SSD1306 SDA PC4 / SDA Pinul standard pentru date I2C
OLED SSD1306 SCL PC5 / SCL Pinul standard pentru clock I2C
Buton UP semnal PD4 Buton pentru navigare in meniu
Buton DOWN semnal PD5 Buton pentru navigare in meniu
Buton OK/TARE semnal PD6 Buton pentru confirmare si resetarea cantarului
Buzzer pasiv semnal / + PB1 / OC1A Pin potrivit pentru PWM, folosit pentru generarea sunetului
Buzzer pasiv GND / - GND Masa comuna

Schema


Butoanele vor fi citite folosind rezistentele interne de pull-up ale microcontrollerului. Asta inseamna ca un pin al butonului merge la pinul digital, iar celalalt merge la GND. Cand butonul este apasat, pinul este tras la 0 logic.

Am ales pinii PC4 si PC5 pentru OLED deoarece acestia sunt pinii dedicati pentru I2C. Pentru buzzer am ales PB1, deoarece poate fi folosit cu PWM. Pentru HX711 am folosit PD2 si PD3 pentru ca modulul are nevoie doar de doua linii digitale: una pentru date si una pentru clock.

Software Design

In stadiul actual, partea software a proiectului este functionala si integreaza toate componentele principale ale sistemului.

Functionalitatile implementate pana acum sunt:

La pornire, utilizatorul alege un goal de apa din 3 variante predefinite. Dupa confirmarea cu butonul OK, sistemul face tare pe platforma goala, apoi asteapta ca utilizatorul sa puna sticla pe cantar. Dupa ce greutatea se stabilizeaza, sistemul salveaza greutatea curenta ca referinta si permite inceperea consumului.

Structura codului

Codul este impartit in mai multe zone logice:

Interactiunea dintre functionalitati

Fluxul principal al aplicatiei este urmatorul:

  1. utilizatorul porneste sistemul
  2. pe OLED apare meniul de alegere a goal-ului
  3. butoanele UP si DOWN schimba valoarea selectata
  4. butonul OK confirma goal-ul
  5. sistemul face tare pe platforma goala
  6. utilizatorul pune sticla pe platforma
  7. dupa ce greutatea este stabila, buzzerul da semnal ca sistemul este pregatit
  8. utilizatorul bea apa sau reumple sticla
  9. sistemul asteapta din nou stabilizarea greutatii
  10. daca greutatea a scazut, diferenta este adaugata la progres
  11. daca greutatea a crescut, sistemul considera ca este refill si actualizeaza noua referinta

Prin aceasta logica, sistemul evita sa adauge apa consumata in timp ce sticla este miscata, in timp ce se toarna apa sau in timp ce se bea direct din ea.

Calibrarea senzorului de greutate

Pentru calibrarea load cell-ului am folosit o greutate cunoscuta. Mai intai am facut tare cu platforma goala, pentru a salva offset-ul sistemului. Apoi am pus pe cantar o greutate masurata separat si am citit valoarea raw de la HX711.

Factorul de calibrare este calculat cu formula:

unde:

calibration_factor = net_raw / greutate_cunoscuta

Dupa calibrare, am testat sistemul cu o sticla cantarita separat. Valorile afisate de sistem au fost apropiate de cele de pe cantarul de bucatarie, deci calibrarea a fost considerata corecta pentru scopul proiectului.

Pentru logica de hidratare, am masurat si greutatea sticlei goale. Sticla goala folosita in teste are 140 g. Aceasta valoare este folosita pentru a estima cata apa se afla in sticla:

apa_din_sticla = greutate_totala - greutate_sticla_goala

Validarea functionalitatilor

Am testat fiecare componenta separat inainte de integrarea finala:

Pentru debug am folosit UART, unde se afiseaza greutatea totala, apa estimata din sticla, cantitatea consumata, cantitatea ramasa si goal-ul ales.

Optimizari realizate

O prima optimizare a fost sa nu actualizez OLED-ul continuu daca valorile afisate nu s-au schimbat. Display-ul este rescris doar cand se modifica progresul sau goal-ul. Astfel, se reduce timpul petrecut in comunicarea I2C si ecranul nu mai pare ca face refresh inutil.

A doua optimizare a fost introducerea unei logici de stabilizare a greutatii. In loc sa actualizez progresul la fiecare citire, sistemul asteapta ca greutatea sa ramana aproximativ constanta timp de cateva secunde. Aceasta optimizare este importanta pentru ca evita masuratori gresite atunci cand utilizatorul misca sticla sau toarna apa.

A treia optimizare a fost folosirea Timer2 pentru debounce-ul butoanelor, in loc sa folosesc delay-uri mari in bucla principala. Astfel, apasarile sunt detectate mai stabil, iar codul ramane mai usor de controlat.

Element de noutate

Elementul de noutate al proiectului este faptul ca sistemul nu este doar un cantar care afiseaza greutatea, ci interpreteaza schimbarile de greutate pentru a estima consumul de apa. Sistemul diferentiaza intre trei situatii:

In plus, progresul se actualizeaza doar dupa ce greutatea este stabila. Astfel, sistemul nu adauga progres fals in timp ce sticla este miscata sau in timp ce se toarna apa.

Rezultate Obţinute

Demo Video Youtube https://youtu.be/LuOfukAbKBs?si=kPDH6Ot64mTcDpZE

Download

monitor_hidratare_final_cristiana_tabacaru.zip

Jurnal

Etapa 1 de Hardware

Bibliografie/Resurse

Resurse hardware

https://ww1.microchip.com/downloads/en/devicedoc/50002659a.pdf

https://www.drot.ro/platforma-arduino/1119-senzor-de-greutate-5-kg.html

https://sigmanortec.ro/en/weight-reading-module-hx711-24ad-2-channels-3-5v

https://www.drot.ro/platforma-arduino/1569-ecran-oled-iic-i2c-0-96-alb-128-x-64.html

https://sigmanortec.ro/en/passive-buzzer-mode

Resurse software / scheme

Export to PDF