Water Leveler

Autor: Neagu Gabriel-Andrei
Grupa: 333CD

Introducere

Locuiesti intr-o zona in care nu ai apa curenta sau aceasta nu poate sa fie considerata potabila? Probabil te folosesti de apa din fantana pe care o inmagazinezi intr-un rezervor de apa. Ai patit sa uiti pompa pornita si sa inunzi toata zona in care se afla rezervorul? Daca da sistemul de Water Leveler este pentru tine. Acesta isi propune sa mentina nivel apei din bazinul tau intre doua balori setate de tine.

Descriere generală

Utilizatorul se autentifica folosind o cartela magnetica, urmand sa poata modifica nivelul minim si cel maxim sau sa poata sa porneasca pompa

Senzori masoara continuu nivelul apei si temperatura

Ecranul LCD afiseaza nivelul curent iar cand se intra in modul de setare afiseaza valorile curente pentru ce modificari se fac.

Pompa are rolul sa umple rezervorul

Modulul Arduino va urmarii continuu nivelul apei. In momentul in care acesta scade sub nivelul minim porneste o pompa si o tine pornita pana cand se atinge nivelul maxim (cele 2 nivele fiind definite in prealabil de utilizator in timp ce este in modul privilegiat). In cazul in care temperatura se apropie de 0°C sistemul nu o sa mai porneasca pompa, indiferent de nivelul apei. Cel mult se poate porni de utilizator, tot in modul privilegiat. Utilizatorul poate sa intre in acest mod folosind un tag sau o cartela. Cititorul electromagnetic va urmari ce id are tag-ul sau cartela, iar in cazul in care sunt cele potrivite, sistemul poate sa fie modificat.

Hardware Design

Lista componente:

  • Arduino (atmega328p)
  • Cititor cartela magnetica
  • Senzor ultrasunet
  • Senzor temperatura
  • Ecran LCD
  • Pompa submersibila
  • Butoane

Software Design

Mediul de dezvoltare: ArduinoIDE + vscode(cu extensia de arduino de la Microsoft)

Librarii folosite:

  • LCD_I2C.h
  • dht.h
  • SPI.h
  • MFRC522.h
  • NewPing.h

Functionalitate:

  • Functia setup initializeaza lcd-ul, cititorul de tag-uri si configureaza pinii pentru INPUT si OUTPUT(in cazul pinilor asociati butoanelor s-a folosit INPUT_PULLUP pentru a folosi rezistentele din microcontroller). Pentru a fi siguri ca pompa nu este alimentata, se pune pinul asociat pe low.
  • Functia loop urmareste 6 cicluri principale:
    • Setarea inaltimii rezervorului: In acest pas se intra cand se porneste sistemul. Utilizatorul incrementeaza cu ajutorul butoanelor de up and down inaltimea in cm, primind feedback-ul pe lcd. Daca butoanele sunt tinute apasate mai mult de 3 secunde pasul incrementarii/decrementarii devine 10. Cand se apasa butonul ok se trece la urmatorul pas. Inaltimea nu va trece de pragurile de 2cm si 400cm, acestea fiind limitele senzorului ultrasonic.
    • Setarea nivelului minim: In acest pas se regleaza nivelul minim al apei, nivelul la care ne dorim sa porneasca pompa. Functionalitatea este asemanatoare pasului precedente. Nivelul minim va fi intre valoarea 2 si inaltime.
    • Setarea nivelului maxim: In acest pas se regleaza nivelul maxim al apei, nivelul la care ne dorim sa se opreasca pompa. Functionalitatea este asemanatoare cu pasii precedenti. Nivelul maxim va fi intre valoarea minima si inaltime.
    • Loop-ul sistemului: In momentul in care parametrii sunt setati, incepe loop-ul propriu-zis. Se masoara distanta de la senzor la apa si se foloseste temperatura si umiditate pentru precizie. Nivelul apei este calculat scazand din inaltime distanta, aceste masuratori avand o frecventa de 0.5Hz. In cazul in care unul din praguri este atins, pompa este pornita sau oprita. In cazul in care sistemul nu mai este utilizat 30 de secunde, backlight-ul lcd-ului se opreste. Acesta porneste din nou daca se tine apasat oricare buton. Pe fiecare ciclu se verifica daca cititorul electromagnetic detecteaza tag-ul sau cartela asociata. Daca se detecteaza, sistemul trece in modul autorizat.
    • Modul autorizat: In acest loop se intra dupa citirea cartelei sau a tag-ului asociat dispozitivului. In acest moment utilizatorul are 3 optiuni prin care poate naviga cu butoanele up si down, iar in cazul in care nu primeste input, sistemul iese din acest loop. Optiunile:
      • Schimbarea pragurilor → utilizatorul se intoarce la al 2-lea loop
      • Pornirea pompei → pompa este pornita si nu se mai tine cont de masuratori
      • Iesire mod autorizat → sistemul revine in loop-ul principal
    • Pompa pornita: In acest loop se ajunge in cazul in care din modul autorizat se porneste pompa. In acest moment sistemul tine pompa pornita si se opreste in momentul in care primeste orice input de la butoane

Concluzii

Acest proiect a fost o experienta interesanta in care am reusit sa gasesc o solutie pentru o problema pe care o am acasa. Am inteles cat de important este sa ai o planificare buna, in care sa ai fiecare feature destul de detaliat cat sa nu ajungi in situatii in care iti apar alte idei pe parcursul implementarii. De asemenea am realizat importanta QA, deoarece pompa care am considerat ca este cea mai usoara componenta de adaugat mi-a provocat cele mai mari probleme care ar fi putut fi evitate daca depistam problema mai devreme.

E posibil sa ma folosesc de acest proiect acasa, dar cu urmatoarele modificari:

  • Sistemul sa comande o pompa de fantana la 220
  • Renunt la partea de acces autorizat, mediul fiind unul privat
  • As realiza un suport care sa tina drept senzorul ultrasonic cu 2 cm mai sus de inaltimea bazinului pentru a imbunatatii precizia
  • As trata cu mai multa atentie limitele senzorului ultrasonic pentru a imbunatatii precizia.
  • As renunta la pini in favoare cositoririi pentru a minimiza problemele de conexiune
  • As folosi cabluri mai groase pentru a minimiza pierderea de tensiune pe ele si pentru a avea o rezistenta mai mare

Download

Bibliografie/Resurse

pm/prj2024/iotelea/gabriel.neagu1409.txt · Last modified: 2024/05/27 18:32 by gabriel.neagu1409
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