- Componente necesare
- Senzor de curgere a apei YFS201
- Diagrama circuitului
- Codul senzorului de debit Arduino
- Senzorul de debit Arduino funcționează
Dacă ați vizitat vreodată companii producătoare de mari dimensiuni, primul lucru pe care îl veți observa este că toate sunt automatizate. Industriile băuturilor răcoritoare și industriile chimice trebuie să măsoare și să cuantifice în mod constant lichidele pe care le manipulează în timpul acestui proces de automatizare, iar cel mai comun senzor utilizat pentru măsurarea fluxului unui lichid este un senzor de debit. Folosind un senzor de debit cu un microcontroler precum Arduino, putem calcula debitul și putem verifica volumul de lichid care a trecut printr-o conductă și îl putem controla după cum este necesar. În afară de industriile de fabricație, senzorii de debit pot fi găsiți și în sectorul agricol, prelucrarea alimentelor, gestionarea apei, industria minieră, reciclarea apei, mașini de cafea etc. și sisteme inteligente de irigare în care trebuie să monitorizăm și să controlăm fluxul de lichide.
În acest proiect, vom construi un senzor de debit de apă folosind Arduino. Vom interfața senzorul de debit de apă cu Arduino și LCD și îl vom programa pentru a afișa volumul de apă, care a trecut prin supapă. Pentru acest proiect anume, vom folosi senzorul de curgere a apei YF-S201, care utilizează un efect hol pentru a detecta debitul lichidului.
Componente necesare
- Senzor de debit de apă
- Arduino UNO
- LCD (16x2)
- Conector cu filetare internă
- Conectarea firelor
- Țeavă
Senzor de curgere a apei YFS201
Senzorul are 3 fire ROȘU, GALBEN și NEGRU așa cum se arată în figura de mai jos. Firul roșu este utilizat pentru tensiunea de alimentare care variază de la 5V la 18V, iar firul negru este conectat la GND. Firul galben este utilizat pentru ieșire (impulsuri), care poate fi citit de un MCU. Senzorul de curgere a apei constă dintr-un senzor cu rotiță care măsoară cantitatea de lichid care a trecut prin el.
Funcționarea senzorului de debit YFS201 este ușor de înțeles. Senzorul de debit de apă funcționează pe principiul efectului de hală. Efectul Hall este producerea diferenței de potențial pe un conductor electric atunci când un câmp magnetic este aplicat în direcția perpendiculară pe cea a fluxului de curent. Senzorul de debit de apă este integrat cu un senzor magnetic cu efect de hală, care generează un impuls electric la fiecare revoluție. Designul său este în așa fel încât senzorul de efect de hol este etanșat de apă și permite senzorului să rămână în siguranță și uscat.
Imaginea modulului senzor YFS201 singur este prezentată mai jos.
Pentru a mă conecta cu senzorul de debit al conductei și al apei, am folosit doi conectori cu filet feminin așa cum se arată mai jos.
Conform specificațiilor YFS201, curentul maxim pe care îl atrage la 5V este de 15mA, iar debitul de lucru este de 1 până la 30 de litri / minut. Când lichidul curge prin senzor, acesta intră în contact cu aripioarele roții turbinei, care este plasată în calea lichidului care curge. Arborele roții turbinei este conectat la un senzor de efect hol. Datorită acestui fapt, ori de câte ori apa curge prin supapă generează impulsuri. Acum, tot ce trebuie să facem este să măsurăm timpul pentru plusuri sau să numărăm numărul de impulsuri în 1 secundă și apoi să calculăm debitele în litri pe oră (L / Hr) și apoi să folosim o formulă simplă de conversie pentru a găsi volumul a apei care trecuse prin ea. Pentru a măsura impulsurile, vom folosi Arduino UNO. Imaginea de mai jos vă arată pinout-ul senzorului de debit de apă.
Diagrama circuitului
Diagrama circuitului senzorului de curgere a apei este prezentat mai jos pentru a interfață un senzor de debit de apă și LCD (16x2) cu Arduino. Dacă sunteți nou în Arduino și LCD-uri, puteți lua în considerare acest articol de interfață Arduino și LCD.
Conexiunea senzorului de debit de apă și a ecranului LCD (16x2) cu Arduino este dată mai jos în format tabel. Rețineți că potul este conectat între 5V și GND și pinul potului 2 este conectat cu pinul V0 al LCD-ului.
S.NO |
Pinul senzorului de debit de apă |
Pinii Arduino |
1 |
Sârmă roșie |
5V |
2 |
Negru |
GND |
3 |
Galben |
A0 |
S. Nu |
LCD |
Arduino |
1 |
Vss |
GND (șină de masă) |
2 |
VDD |
5V (șină pozitivă a panoului) |
3 |
Pentru conexiunea cu V0 verificați nota de mai sus |
|
4 |
RS |
12 |
5 |
RW |
GND |
6 |
E |
11 |
7 |
D7 |
9 |
8 |
D6 până la D3 |
3 la 5 |
Am folosit un panou de calcul și, odată ce conexiunea a fost realizată conform schemei de circuite prezentate mai sus, configurarea mea de testare arăta cam așa.
Codul senzorului de debit Arduino
Codul Arduino al senzorului de debit complet este dat în partea de jos a paginii. Explicația codului este următoarea.
Folosim fișierul antet al LCD-ului, care ne ușurează interfața LCD cu Arduino, iar pinii 12,11,5,4,3,9 sunt alocați pentru transferul de date între LCD și Arduino. Pinul de ieșire al senzorului este conectat la pinul 2 al Arduino UNO.
volatile int flow_frequency; // Măsoară impulsurile senzorului de debit // Calculat litri / oră plutitor vol = 0,0, l_minut; senzor de flux de caractere nesemnat = 2; // Senzor de intrare nesemnat lung currentTime; nesemnat lung cloopTime; #include
Această funcție este o rutină de serviciu de întrerupere și aceasta va fi apelată ori de câte ori există un semnal de întrerupere la pinul 2 al Arduino UNO. Pentru fiecare semnal de întrerupere, numărul variabilei flow_frequency va fi mărit cu 1. Pentru mai multe detalii despre întreruperi și funcționarea acestora, puteți citi acest articol despre întreruperile Arduino.
void flow () // Funcția de întrerupere { flow_frequency ++; }
În configurația nulă, îi spunem MCU că pinul 2 al Arduino UNO este utilizat ca INPUT prin comanda pinMode (pin, OUTPUT). Prin utilizarea comenzii attachInterrupt, ori de câte ori există o creștere a semnalului la pinul 2, se apelează funcția de flux. Acest lucru mărește numărul în variabila flow_frequency cu 1. Ora curentă și cloopTime sunt utilizate pentru ca codul să ruleze în fiecare 1 secundă.
void setup () { pinMode (flux senzor, INPUT); digitalWrite (senzor de flux, HIGH); Serial.begin (9600); lcd.inceput (16, 2); attachInterrupt (digitalPinToInterrupt (flowensor), flow, RISING); // Setup Interrupt lcd.clear (); lcd.setCursor (0,0); lcd.print ("Debitmetru de apă"); lcd.setCursor (0,1); lcd.print ("Circuit Digest"); currentTime = milis (); cloopTime = Ora curentă; }
Funcția if asigură faptul că pentru fiecare secundă rulează codul din interior. În acest fel, putem număra numărul de frecvențe produse de senzorul de debit de apă pe secundă. Caracteristicile impulsului debitului din foaia tehnică sunt date că frecvența este de 7,5 înmulțită cu debitul. Deci debitul este frecvența / 7,5. După ce ați găsit debitul în litri / minut, împărțiți-l la 60 pentru al converti în litri / sec. Această valoare se adaugă variabilei vol pentru fiecare secundă.
bucla void () { currentTime = millis (); // În fiecare secundă, calculați și tipăriți litri / oră dacă (currentTime> = (cloopTime + 1000)) { cloopTime = currentTime; // Actualizează cloopTime if (flow_frequency! = 0) { // Frecvența impulsurilor (Hz) = 7.5Q, Q este debitul în L / min. l_minute = (frecvență_flux / 7.5); // (Frecvența impulsului x 60 min) / 7,5 Q = debit în L / oră lcd.clear (); lcd.setCursor (0,0); lcd.print ("Rate:"); lcd.print (l_minute); lcd.print ("L / M"); l_minute = l_minute / 60; lcd.setCursor (0,1); vol = vol + l_minute; lcd.print ("Vol:"); lcd.print (vol); lcd.print ("L"); flow_frequency = 0; // Resetați contorul Serial.print (l_minute, DEC); // Imprimați litri / oră Serial.println ("L / Sec"); }
Funcția else funcționează atunci când nu există ieșire de la senzorul de debit de apă în intervalul de timp dat.
else { lcd.clear (); lcd.setCursor (0,0); lcd.print ("Rate:"); lcd.print (flow_frequency); lcd.print ("L / M"); lcd.setCursor (0,1); lcd.print ("Vol:"); lcd.print (vol); lcd.print ("L"); }
Senzorul de debit Arduino funcționează
În proiectul nostru, am conectat senzorul de debit de apă la o conductă. Dacă supapa de ieșire a conductei este închisă, ieșirea senzorului de debit de apă este zero (fără impulsuri). Nu va fi semnal de întrerupere văzut la pinul 2 al Arduino, iar numărul de flow_frequency va fi zero. În această condiție, codul care este scris în bucla else va funcționa.
Dacă supapa de ieșire a conductei este deschisă. Apa curge prin senzor, care la rândul său rotește roata în interiorul senzorului. În această stare, putem observa impulsuri, care sunt generate de senzor. Aceste impulsuri vor acționa ca un semnal de întrerupere către Arduino UNO. Pentru fiecare semnal de întrerupere (margine ascendentă), numărul variabilei flow_frequency va fi mărit cu unul. Timpul curent și variabila cloopTIme asigură că pentru fiecare secundă se ia valoarea fluxului_frecvență pentru calcularea debitului și a volumului. După terminarea calculului, variabila flow_frequency este setată la zero și întreaga procedură este pornită de la început.
Funcționarea completă poate fi găsită și în videoclipul legat în partea de jos a acestei pagini. Sper că v-a plăcut tutorialul și v-a plăcut ceva util, dacă aveți probleme, vă rugăm să le lăsați în secțiunea de comentarii sau să folosiți forumurile noastre pentru alte întrebări tehnice.