- Componenti richiesti
- Sensore di flusso d'acqua YFS201
- Schema elettrico
- Codice del sensore di flusso d'acqua Arduino
- Sensore di flusso d'acqua Arduino funzionante
Se hai mai visitato aziende manifatturiere su larga scala, la prima cosa che noterai è che sono tutte automatizzate. Le industrie di bevande analcoliche e chimiche devono misurare e quantificare costantemente i liquidi che stanno manipolando durante questo processo di automazione e il sensore più comune utilizzato per misurare il flusso di un liquido è un sensore di flusso. Utilizzando un sensore di flusso con un microcontrollore come Arduino, possiamo calcolare la portata e controllare il volume di liquido che è passato attraverso un tubo e controllarlo come richiesto. Oltre alle industrie manifatturiere, i sensori di flusso possono essere trovati anche nel settore agricolo, lavorazione alimentare, gestione dell'acqua, industria mineraria, riciclaggio dell'acqua, macchine da caffè, ecc. Inoltre, un sensore di flusso dell'acqua sarà una buona aggiunta a progetti come Distributore automatico d'acqua e sistemi di irrigazione intelligenti in cui è necessario monitorare e controllare il flusso di liquidi.
In questo progetto, costruiremo un sensore di flusso d'acqua usando Arduino. Interfacciamo il sensore di flusso dell'acqua con Arduino e LCD e lo programmeremo per visualizzare il volume d'acqua che è passato attraverso la valvola. Per questo particolare progetto, utilizzeremo il sensore di flusso dell'acqua YF-S201, che utilizza un effetto hall per rilevare la portata del liquido.
Componenti richiesti
- Sensore di flusso d'acqua
- Arduino UNO
- LCD (16x2)
- Connettore con filettatura interna
- Cavi di collegamento
- Tubo
Sensore di flusso d'acqua YFS201
Il sensore ha 3 fili ROSSO, GIALLO e NERO come mostrato nella figura sotto. Il filo rosso viene utilizzato per la tensione di alimentazione che va da 5 V a 18 V e il filo nero è collegato a GND. Il filo giallo viene utilizzato per l'uscita (impulsi), che può essere letto da un MCU. Il sensore di flusso dell'acqua è costituito da un sensore a girandola che misura la quantità di liquido che è passato attraverso di esso.
Il funzionamento del sensore di flusso dell'acqua YFS201 è semplice da capire. Il sensore di flusso dell'acqua funziona secondo il principio dell'effetto hall. L'effetto Hall è la produzione della differenza di potenziale attraverso un conduttore elettrico quando un campo magnetico viene applicato nella direzione perpendicolare a quella del flusso di corrente. Il sensore di flusso d'acqua è integrato con un sensore magnetico ad effetto hall, che genera un impulso elettrico ad ogni giro. Il suo design è in modo tale che il sensore ad effetto hall sia isolato dall'acqua e consente al sensore di rimanere al sicuro e asciutto.
Di seguito è mostrata l'immagine del solo modulo sensore YFS201.
Per il collegamento con il tubo e il sensore di flusso dell'acqua, ho utilizzato due connettori con una filettatura femmina come mostrato di seguito.
Secondo le specifiche YFS201, la corrente massima che assorbe a 5 V è di 15 mA e la portata di lavoro è compresa tra 1 e 30 litri / minuto. Quando il liquido scorre attraverso il sensore, entra in contatto con le alette della girante della turbina, che si trova nel percorso del liquido che scorre. L'albero della ruota della turbina è collegato a un sensore ad effetto hall. Per questo motivo, ogni volta che l'acqua scorre attraverso la valvola, genera impulsi. Ora, tutto ciò che dobbiamo fare è misurare il tempo per i plus o contare il numero di impulsi in 1 secondo e quindi calcolare le portate in litri all'ora (L / Hr) e quindi utilizzare una semplice formula di conversione per trovare il volume dell'acqua che l'aveva attraversata. Per misurare gli impulsi, utilizzeremo Arduino UNO. L'immagine sotto mostra il pinout del sensore di flusso dell'acqua.
Schema elettrico
Lo schema del circuito del sensore di flusso d'acqua è mostrato di seguito per interfacciare un sensore di flusso d'acqua e un LCD (16x2) con Arduino. Se non conosci Arduino e LCD, puoi prendere in considerazione la lettura di questo articolo sull'interfacciamento di Arduino e LCD.
Il collegamento del sensore di flusso dell'acqua e del display LCD (16x2) con Arduino è riportato di seguito in formato tabella. Notare che il potenziometro è collegato tra 5V e GND e il pin 2 del potenziometro è connesso al pin V0 dell'LCD.
S.NO |
Perno del sensore di flusso d'acqua |
Pin Arduino |
1 |
Filo rosso |
5V |
2 |
Nero |
GND |
3 |
Giallo |
A0 |
S.No |
LCD |
Arduino |
1 |
Vss |
GND (binario di terra della breadboard) |
2 |
VDD |
5V (rail positivo della breadboard) |
3 |
Per il collegamento con V0 controllare la nota sopra |
|
4 |
RS |
12 |
5 |
RW |
GND |
6 |
E |
11 |
7 |
D7 |
9 |
8 |
Da D6 a D3 |
Da 3 a 5 |
Ho usato una breadboard e una volta eseguita la connessione secondo lo schema del circuito mostrato sopra, la mia configurazione di test sembrava qualcosa del genere.
Codice del sensore di flusso d'acqua Arduino
Il codice Arduino del sensore di flusso d'acqua completo è riportato in fondo alla pagina. La spiegazione del codice è la seguente.
Stiamo usando il file di intestazione dell'LCD, che facilita l'interfacciamento dell'LCD con Arduino, ei pin 12,11,5,4,3,9 sono assegnati per il trasferimento dei dati tra LCD e Arduino. Il pin di uscita del sensore è collegato al pin 2 di Arduino UNO.
volatile int flow_frequency; // Misura gli impulsi del sensore di flusso // Calcolato litri / ora float vol = 0.0, l_minute; sensore di flusso di caratteri senza segno = 2; // Ingresso sensore unsigned long currentTime; cloopTime lungo non firmato; #includere
Questa funzione è una routine di servizio di interruzione e verrà chiamata ogni volta che c'è un segnale di interruzione sul pin2 di Arduino UNO. Per ogni segnale di interrupt, il conteggio della variabile flow_frequency sarà aumentato di 1. Per maggiori dettagli sugli interrupt e sul loro funzionamento, puoi leggere questo articolo sugli interrupt di Arduino.
void flow () // Funzione di interruzione { flow_frequency ++; }
Nella configurazione void, diciamo all'MCU che il pin 2 di Arduino UNO viene utilizzato come INPUT dando il comando pinMode (pin, OUTPUT). Usando il comando attachInterrupt, ogni volta che c'è un aumento del segnale sul pin 2, viene chiamata la funzione di flusso. Ciò aumenta il conteggio nella variabile flow_frequency di 1. L'ora corrente e cloopTime vengono utilizzati affinché il codice venga eseguito ogni secondo.
void setup () { pinMode (flowensor, INPUT); digitalWrite (sensore di flusso, HIGH); Serial.begin (9600); lcd.begin (16, 2); attachInterrupt (digitalPinToInterrupt (flowensor), flow, RISING); // Setup Interrupt lcd.clear (); lcd.setCursor (0,0); lcd.print ("Water Flow Meter"); lcd.setCursor (0,1); lcd.print ("Circuit Digest"); currentTime = millis (); cloopTime = currentTime; }
La funzione if assicura che per ogni secondo il codice al suo interno venga eseguito. In questo modo possiamo contare il numero di frequenze prodotte dal sensore di flusso d'acqua al secondo. Le caratteristiche dell'impulso di portata dalla scheda tecnica indicano che la frequenza è 7,5 moltiplicata per la portata. Quindi la portata è frequenza / 7,5. Dopo aver trovato la portata che è in litri / minuto, dividerla per 60 per convertirla in litri / sec. Questo valore viene aggiunto alla variabile vol per ogni secondo.
void loop () { currentTime = millis (); // Ogni secondo, calcola e stampa litri / ora if (currentTime> = (cloopTime + 1000)) { cloopTime = currentTime; // Aggiorna cloopTime if (flow_frequency! = 0) { // Pulse frequency (Hz) = 7.5Q, Q è la portata in L / min. l_minute = (flow_frequency / 7.5); // (Frequenza impulsi x 60 min) / 7.5Q = portata in L / ora 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; // Reimposta contatore Serial.print (l_minute, DEC); // Stampa litri / ora Serial.println ("L / Sec"); }
La funzione else funziona quando non c'è uscita dal sensore di flusso dell'acqua entro il periodo di tempo specificato.
altro { 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"); }
Sensore di flusso d'acqua Arduino funzionante
Nel nostro progetto, abbiamo collegato il sensore di flusso dell'acqua a un tubo. Se la valvola di uscita del tubo è chiusa, l'uscita del sensore di flusso dell'acqua è zero (nessun impulso). Non ci sarà alcun segnale di interrupt visto sul pin 2 di Arduino, e il conteggio di flow_frequency sarà zero. In questa condizione, il codice scritto nel ciclo else funzionerà.
Se la valvola di uscita del tubo è aperta. L'acqua scorre attraverso il sensore, che a sua volta fa ruotare la ruota all'interno del sensore. In questa condizione possiamo osservare gli impulsi generati dal sensore. Questi impulsi agiranno come un segnale di interruzione per Arduino UNO. Per ogni segnale di interrupt (fronte di salita), il conteggio della variabile flow_frequency verrà aumentato di uno. La variabile time e cloopTIme correnti assicurano che per ogni secondo venga preso il valore di flow_frequency per il calcolo della portata e del volume. Al termine del calcolo, la variabile flow_frequency viene impostata su zero e l'intera procedura viene avviata dall'inizio.
La lavorazione completa la trovate anche nel video linkato in fondo a questa pagina. Spero che il tutorial ti sia piaciuto e che ti sia piaciuto qualcosa di utile, se hai problemi, lasciali nella sezione commenti o usa i nostri forum per altre domande tecniche.