- Componenten vereist
- YFS201 Waterstroomsensor
- Schakelschema
- Arduino Waterstroom Sensor Code
- Arduino waterstroomsensor werkt
Als je ooit grootschalige productiebedrijven hebt bezocht, is het eerste dat opvalt dat ze allemaal geautomatiseerd zijn. Soft Drink Industries en de chemische industrie moet constant meten en kwantificeren van de vloeistoffen die ze hanteren tijdens deze automatisering proces, en de meest voorkomende sensor gebruikt om de stroom van een vloeistof te meten, is een Flow Sensor. Door een stromingssensor te gebruiken met een microcontroller zoals Arduino, kunnen we het debiet berekenen en het vloeistofvolume dat door een buis is gepasseerd controleren en deze naar behoefte regelen. Afgezien van de maakindustrie, zijn stromingssensoren ook te vinden in de landbouwsector, voedselverwerking, waterbeheer, mijnbouw, waterrecycling, koffiemachines, enz. Verder zal een waterstroomsensor een goede aanvulling zijn op projecten zoals Automatic Water Dispenser en slimme irrigatiesystemen waar we de vloeistofstroom moeten bewaken en regelen.
In dit project gaan we met Arduino een waterstroomsensor bouwen. We zullen de waterstroomsensor verbinden met Arduino en LCD, en deze programmeren om het watervolume weer te geven dat door de klep is gepasseerd. Voor dit specifieke project gaan we de YF-S201 waterstroomsensor gebruiken, die een hall-effect gebruikt om de stroomsnelheid van de vloeistof te detecteren.
Componenten vereist
- Waterstroomsensor
- Arduino UNO
- LCD (16x2)
- Connector met binnendraad
- Draden aansluiten
- Pijp
YFS201 Waterstroomsensor
De sensor heeft 3 draden ROOD, GEEL en ZWART, zoals weergegeven in de onderstaande afbeelding. De rode draad wordt gebruikt voor voedingsspanning die varieert van 5V tot 18V en de zwarte draad is verbonden met GND. De gele draad wordt gebruikt voor uitvoer (pulsen), die kunnen worden gelezen door een MCU. De waterstroomsensor bestaat uit een pinwielsensor die de hoeveelheid vloeistof meet die er doorheen is gegaan.
De werking van de YFS201 waterstroomsensor is eenvoudig te begrijpen. De waterstroomsensor werkt volgens het principe van het hall-effect. Hall-effect is de productie van het potentiaalverschil over een elektrische geleider wanneer een magnetisch veld wordt aangelegd in de richting loodrecht op die van de stroom. De waterstroomsensor is geïntegreerd met een magnetische hall-effectsensor, die bij elke omwenteling een elektrische puls genereert. Het ontwerp is zo dat de hall-effectsensor is afgesloten van het water en de sensor veilig en droog blijft.
De afbeelding van alleen de YFS201-sensormodule wordt hieronder weergegeven.
Om verbinding te maken met de buis en waterstroomsensor, heb ik twee connectoren met een binnendraad gebruikt, zoals hieronder weergegeven.
Volgens de YFS201-specificaties is de maximale stroom die het trekt bij 5V 15mA, en het werkdebiet is 1 tot 30 liter / minuut. Wanneer de vloeistof door de sensor stroomt, maakt deze contact met de vinnen van het turbinewiel, dat in de baan van de stromende vloeistof wordt geplaatst. De as van het turbinewiel is verbonden met een hall-effectsensor. Hierdoor worden pulsen gegenereerd wanneer er water door de klep stroomt. Nu hoeven we alleen nog maar de tijd voor de plussen te meten of het aantal pulsen in 1 seconde te tellen en vervolgens de stroomsnelheden in liter per uur (L / uur) te berekenen en vervolgens een eenvoudige conversieformule te gebruiken om het volume te vinden van het water dat er doorheen was gegaan. Om de pulsen te meten gaan we Arduino UNO gebruiken. Op de onderstaande foto ziet u de pinout van de waterstroomsensor.
Schakelschema
Het schakelschema van de waterstroomsensor wordt hieronder getoond om een waterstroomsensor en LCD (16x2) met Arduino te verbinden. Als je nieuw bent bij Arduino en LCD's, kun je overwegen om dit artikel over Interfacing Arduino en LCD te lezen.
De aansluiting van de waterstroomsensor en LCD (16x2) met de Arduino wordt hieronder in tabelformaat weergegeven. Merk op dat de pot tussen 5V en GND is aangesloten en dat pin 2 van pot is verbonden met de V0-pin van het LCD-scherm.
S.NO |
Waterstroomsensor pin |
Arduino-pinnen |
1 |
Rode draad |
5V |
2 |
Zwart |
GND |
3 |
Geel |
A0 |
S.No |
LCD |
Arduino |
1 |
VSS |
GND (grondrail van breadboard) |
2 |
VDD |
5V (positieve rail van het breadboard) |
3 |
Raadpleeg de bovenstaande opmerking voor verbinding met V0 |
|
4 |
RS |
12 |
5 |
RW |
GND |
6 |
E. |
11 |
7 |
D7 |
9 |
8 |
D6 tot D3 |
3 tot 5 |
Ik gebruikte een breadboard, en toen de verbinding eenmaal tot stand was gebracht volgens het hierboven getoonde schakelschema, zag mijn testopstelling er ongeveer zo uit.
Arduino Waterstroom Sensor Code
De volledige Arduino-code van de waterstroomsensor staat onderaan de pagina. De uitleg van de code is als volgt.
We gebruiken het header-bestand van het LCD-scherm, wat ons gemakkelijker maakt om het LCD-scherm met Arduino te verbinden, en de pinnen 12,11,5,4,3,9 zijn toegewezen voor gegevensoverdracht tussen LCD en Arduino. De outputpin van de sensor is verbonden met pin 2 van Arduino UNO.
vluchtige int flow_frequency; // Meet pulsen debietsensor // Berekend liter / uur vlottervolume = 0,0, l_minuut; unsigned char flowsensor = 2; // Sensor Input unsigned lange currentTime; unsigned lange cloopTime; # omvatten
Deze functie is een interruptserviceroutine en deze wordt aangeroepen wanneer er een interruptsignaal is op pin2 van Arduino UNO. Voor elk interruptsignaal wordt het aantal variabele flow_frequency met 1 verhoogd. Voor meer details over de interrupts en hun werking kun je dit artikel over Arduino-interrupts lezen.
void flow () // Interrupt-functie { flow_frequency ++; }
In de ongeldige setup vertellen we de MCU dat de pin 2 van de Arduino UNO wordt gebruikt als INPUT door het commando pinMode (pin, OUTPUT) te geven. Door het commando attachInterrupt te gebruiken, wordt de stroomfunctie aangeroepen wanneer het signaal op pin 2 stijgt. Dit verhoogt het aantal in de variabele flow_frequency met 1. De huidige tijd en cloopTime worden gebruikt om de code elke seconde te laten draaien.
void setup () { pinMode (flowsensor, INPUT); digitalWrite (flowsensor, HIGH); Serial.begin (9600); lcd.begin (16, 2); attachInterrupt (digitalPinToInterrupt (flowsensor), flow, RISING); // Setup onderbreken lcd.clear (); lcd.setCursor (0,0); lcd.print ("Waterstroommeter"); lcd.setCursor (0,1); lcd.print ("Circuit Digest"); currentTime = millis (); cloopTime = currentTime; }
De if-functie zorgt ervoor dat voor elke seconde de code erin wordt uitgevoerd. Op deze manier kunnen we het aantal frequenties tellen dat de waterstroomsensor per seconde produceert. De pulskarakteristieken van het debiet uit het gegevensblad worden gegeven dat de frequentie 7,5 vermenigvuldigd met het debiet. Het debiet is dus frequentie / 7,5. Nadat u de stroomsnelheid in liter / minuut hebt gevonden, deelt u deze door 60 om deze om te rekenen in liter / sec. Deze waarde wordt elke seconde aan de variabele vol toegevoegd.
void loop () { currentTime = millis (); // Bereken en print elke seconde liters / uur if (currentTime> = (cloopTime + 1000)) { cloopTime = currentTime; // Updates cloopTime if (flow_frequency! = 0) { // Pulsfrequentie (Hz) = 7.5Q, Q is de stroomsnelheid in l / min. l_minute = (stroomfrequentie / 7.5); // (Pulsfrequentie x 60 min) / 7.5Q = stroomsnelheid in L / uur lcd.clear (); lcd.setCursor (0,0); lcd.print ("Tarief:"); lcd.print (l_minute); lcd.print ("L / M"); l_minute = l_minute / 60; lcd.setCursor (0,1); vol = vol + l_minuut; lcd.print ("Vol:"); lcd.print (vol); lcd.print ("L"); flow_frequency = 0; // Reset teller Serial.print (l_minute, DEC); // Print liters / uur Serial.println ("L / Sec"); }
De else-functie werkt als er binnen de gegeven tijd geen output is van de waterstroomsensor.
anders { lcd.clear (); lcd.setCursor (0,0); lcd.print ("Tarief:"); lcd.print (flow_frequency); lcd.print ("L / M"); lcd.setCursor (0,1); lcd.print ("Vol:"); lcd.print (vol); lcd.print ("L"); }
Arduino waterstroomsensor werkt
In ons project hebben we de waterstroomsensor op een buis aangesloten. Als de uitgangsklep van de buis gesloten is, is de uitgang van de waterstroomsensor nul (geen pulsen). Er zal geen interruptsignaal te zien zijn op pin 2 van de Arduino, en de telling van de flow_frequency zal nul zijn. In deze toestand werkt de code die in de else-lus is geschreven.
Als de uitlaatklep van de buis wordt geopend. Het water stroomt door de sensor, die op zijn beurt het wiel in de sensor laat draaien. In deze toestand kunnen we pulsen waarnemen, die worden gegenereerd door de sensor. Deze pulsen werken als een interruptsignaal naar de Arduino UNO. Voor elk interruptsignaal (stijgende flank) wordt de telling van de variabele flow_frequency met één verhoogd. De huidige time en cloopTIme variabele zorgen ervoor dat voor elke seconde de waarde van de flow_frequency wordt genomen voor de berekening van flow rate en volume. Nadat de berekening is voltooid, wordt de variabele flow_frequency op nul gezet en wordt de hele procedure vanaf het begin gestart.
De volledige werking is ook te vinden in de video die onderaan deze pagina is gelinkt. Ik hoop dat je genoten hebt van de tutorial en iets nuttigs hebt genoten, als je problemen hebt, laat ze dan achter in het commentaargedeelte of gebruik onze forums voor andere technische vragen.