Simulare Baraj Automat

Student

  • Nume: Bordincel Andra-Maria
  • Grupa: 335CC

Introducere

Proiectul meu consta intr-un dispozitiv automat ce verifica nivelul apei dintr-un anumit spatiu (in cazul de fata simuland un baraj), si permite utilizatorului sa intervina in cazul in care apar diferite situatii critice precum o crestere la un nivel critic ce poate conduce spre o inundatie.

Scopul este de a verifica nivelul de apa permis intr-o regiune si a transmite anumite semnale de alarma in cazul in care apar anomalii, dar si de a putea regla acest nivel prin interventia umana.

Consider ca proiectul este unul util deoarece pornind de la aceasta idee de baraj, se poate extinde la crearea unui centru de cercetari subacvatic ce poate include o camera special destinata scafandrilor ce se intorc din expeditie, in care acestia sa se intoarca din apa, iar apa sa fie evacuata si sa poata fi introdus oxigen. O alta utilitate a proiectului ar fi posibilitatea de a-l adapta la un sistem de alarma in caz de inundatii atunci cand sunt preconizate ploi sau alte fenomene atmosferice destul de grave. Cu acest sistem de alarma se pot colecta astfel date din momentul in care apa incepe sa creasca la un nivel alarmant si pot fi luate masuri de interventie mai devreme.

Descriere generală

Descrierea logica a proiectului:

Proiectul consta intr-un dispozitiv ce verifica initial nivelul apei dintr-un spatiu folosind un senzor de nivel apa ce il citeste constant. Daca totul este in regula cu nivelul curent, exista un led RGB ce este setat pe culoarea verde pentru a sugera acest lucru.

Daca un nivel critic al apei este atins (o valoare primita de la senzor), se porneste imediat led-ul pe culoarea rosu intermitent, porneste un semnal sonor de la un buzzer si pe un ecran LCD se afiseaza mesajele “NIVEL APA CRITIC” si se cere apasarea butonului de evacuare a apei.

Daca butonul este apasat in timp util, este activat un servo-motor ce deschide un orificiu de evacuare pentru apa. Concomitent cu senzorul de nivel de apa, un senzor ultrasonic verifica si el dupa apasarea butonului daca apa scade la un nivel sigur. Am ales aceasta optiune deoarece in cazul in care apar diferite probleme cu senzorul intial (poate nu fir nu sta fix sau acesta are o defectiune), sa am o optiune de rezerva. Cand se ajunge la nivelul de siguranta, servo motorul va inchide orificiul mentionat.

Daca totusi butonul nu este apasat in timp util, modulul de WI-FI va trimite catre un device conectat la WI-FI un mesaj (fie pe numarul de telefon, fie e-mail) in care anunta ca este neaparat necesara o interventie in cadrul barajului.

Schema bloc proiect:

Hardware Design

Lista de piese si componente:

  • Placa Arduino Uno
  • Breadboard
  • Senzor de nivel apa (HW-038)
  • Led RGB
  • 3x rezistente 330ohm
  • Buzzer
  • 1x rezistenta 100ohm
  • Modul LCD1602
  • Modul I2C PCF8574T
  • Buton
  • Servo motor
  • Senzor ultrasonic HC-SR04
  • Modul WI-FI ESP2866
  • Fire mama-mama
  • Fire mama-tata
  • Fire tata-tata
  • Materiale de bricolaj

Initial optasem pentru o banda de led-uri RGB in loc de unul singur, doar ca cea pe care o aveam eu nu era cea mai ok si era mult mai multa munca si nevoie de piese in plus, o alta sursa externa de energie(12V) cel putin, pentru a o putea face sa functioneze macar pentru cateva led-uri. Daca as fi comandat una noua nu stiam daca as fi avut timp suficient in care sa si ajunga, sa o si asamblez si sa modific implementarea, la fel si in cazul in care as fi comandat piesele necesare pentru cea pe care o am deja.

Schema electrica:

In schema electrica senzorul de nivel de apa si modulul I2C pentru LCD sunt desenate deoarece nu am gasit in Eagle biblioteci care sa le contina pe cele folosite de mine. De asemenea, aceasta contine toate componentele folosite de mine, desi mai departe in aceasta pagina vom afla ca implementarea nu este inca integrala. m(

Software Design

Mediu de dezvoltare: Arduino IDE

Librarii si surse 3rd-party:

Workflow program actual:

  • In setup() partea de definire a pinilor, modurilor componentelor si configurare pentru diverse elemente din cod precum intreruperea externa generata la apasarea butonului
  • In loop() este implementata descrierea de mai jos
  • Functii auxiliare pentru colorarea led-ului, producerea sunetului, afisarea pe LCD, trimiterea E-mail-ului de alerta.

De implementat mai departe: :-(

  • Sper ca nu mi-a mai ramas nimic

Implementare momentan:

  • Functionalitatea senzorului de nivel de apa
  • Functionalitatea ecranului LCD folosind modulul I2C pentru LCD
  • Functionalitatea buzzer-ului
  • Functionalitatea led-ului RGB
  • Functionalitatea si activarea intreruperii la apasarea butonului
  • Functionalitatea servo motorului
  • Functionalitatea senzorului ultrasonic
  • Functionalitatea modulului de wifi Esp8266

Descrierea programului: La inceputul programului includ bibliotecile necesare pentru utilizarea anumitor componente, acestea momentan fiind “Wire.h”, “LiquidCrystal_I2C.h” si “Servo.h”. Imi creez apoi 2 obiecte, unul fiind pentru servoMotor si celalalt pentru ecranul LCD. De asemenea, am adaugat si “WiFiEsp.h”, “SoftwareSerial.h” si am declarat si obiectele necesare pt acesta.

Definesc pinii pentru fiecare din componentele utilizate pana acum in ordinea urmatoare:

  • SenzorNivelApa(A3)
  • Buton(2)
  • Buzzer(3)
  • ServoMotor(4)
  • Led(R-11, G-10, B-9)
  • Pinii RX, TX pentru modulul ESP8266(7, 6)
  • Pinii trig(12) si echo(13) pentru senzorul ultrasonic.

Mai departe declar variabile globale pe care le voi folosi pe parcursul programului, in principal flag-uri pentru diferite actiuni.

In setup(): Setez baud rate-ul pentru serial fiind 115200. Configurez apoi LCD-ul, definesc modurile (INPUT/OUTPUT) pentru pinii digitali, atasez obiectului pentru servo motor pinul asignat mai sus si configurez intreruperea externa ce va aparea la apasarea butonului. Mai departe configurez conectarea la reteaua WiFi si pinii pentru senzorul ultrasonic.

In ISR fac debounce pentru buton, revin la culoarea verde a led-ului, opresc sunetul buzzer-ului si modific falg-urile pentru afisarea pe LCD si pentru servo motor, si restez timer-ul pentru cererea HTTP.

In functia toggleLed() verific un flag pentru led pentru a putea oscila intre culoarea rosie si inactivitatea led-ului pentru a creea efectul de lumina intermimtenta.

Functia makeBipBip() este creata analog cu cea pentru led, dand acelasi efect de sunet intermitent.

In functia printLCD() se verifica flag-ul mentionat mai sus. In caz ca acesta are valoarea 1 se afiseaza cele 2 mesaje de atentionare pe LCD, iar daca este 0, se face clear si se printeaza un string null.

In functia makeHttpRequest() ma opresc la clientul curent si ma conectez la server. Daca clientul este conectat fac cererea HTTPP la host-ul asociat.

Ajungand la functia principala, loop(), aici se incepe cu aprinderea led-ului de siguranta pe verde si citirea de la senzor si afisarea pe serial a nivelului apei. Daca nivelul critic prestabilit al apei este depasit se apeleaza functiile de alerta “toggleLed()”, “makeBipBip() si “printLCD” si se porneste timer-ul pentru cererea HTTP. Daca butonul este apasat se intra in intreruperea unde efectul acestora este anulat si se revine la normal, dupa care in loop se verifica flag-ul modificat in intrerupere si de ationeaza miscarea servo motorului la o anumita pozitie pentru deschiderea usii. Daca timer-ul pentru HTTP a depasit 10 secunde, se apeleazaz functia “makeHttpRequest()” si se trimite e-mail-ul de alerta. Senzorul ultrasonic calculeaza o distanta pana la un obiect atunci cand usa de evacuare este deschisa, iar daca distanta este mai mica de 4cm atunci usa se va inchide.

Schema bloc setup:

Schema bloc loop:

Schemele bloc pentru setup() si loop() contin doar implementarea de la momentul actual, fara logica ulterioarelor completari pe care imi propun sa le aduc.

Rezultate Obţinute

Link Youtube: https://youtu.be/nzGHj96vH6U

Poze:

Concluzii

Drept concluzie, a fost un proiect la care mi-a fost foarte drag sa lucrez tocmai pentru ca am avut ocazia sa fac si ceva creativ.

Nu stiu daca e un proiect de 10, dar cum am mai spus, eu sunt fericita ca am avut ocazia sa lucrez cu atatea lucruri noi si sa construiesc ceva propriu.

Consider ca cea mai dificila parte a fost utilizarea modulului ESP8266.

Download

Jurnal

  • 6.05.2022: Creare pagina proiect
  • 10.05.2022: Update lista componente hardware
  • 29.05.2022: Update sectiuni si scheme bloc + schema electrica
  • 06.02.2022: Update cod + sectiuni [FINAL]

https://github.com/bportaluri/WiFiEsp/tree/master/examples/WebClient

https://create.arduino.cc/projecthub/abdularbi17/ultrasonic-sensor-hc-sr04-with-arduino-tutorial-327ff6

pm/prj2022/ndrogeanu/simularebarajautomat.txt · Last modified: 2022/06/02 17:24 by andra.bordincel
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