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.
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:
Lista de piese si componente:
Schema electrica:
Mediu de dezvoltare: Arduino IDE
Librarii si surse 3rd-party:
Workflow program actual:
De implementat mai departe:
Implementare momentan:
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:
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:
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.
https://github.com/bportaluri/WiFiEsp/tree/master/examples/WebClient