Ein großes Dankeschön geht an Marvin, welche den heutigen Beitrag geschrieben hat. Schau doch mal bei seinem Instagram vorbei.
https://instagram.com/bastelmarvin?igshid=YmMyMTA2M2Y=
TürTorial #10 Flowsensoren in VAN PI einbinden
Worum geht es?
Ich habe das VAN PI System im Boot verbaut und anders als die meisten, habe ich keine festen Wassertanks, sondern so genannte Wassersäcke. Deshalb kann ich keine handelsüblichen Füllstandssensoren benutzen und musste mir etwas Neues überlegen. Die Lösung war schnell gefunden: Flowsensoren oder auch Flowmeter genannt, zwei Stück benötigt man dafür. Einer misst wie viel Liter Wasser in den Tank gehen und der andere Zählt mit, wie viel Liter Wasser wieder rausfließen. Die Differenz ist dann der Inhalt.
Der Einbau
Wie oben beschrieben werden zwei Flowsensoren benötig. Ich habe Sensoren vom Typ
YF-S201. Den ersten verbauen wir im Schlauch, durch den ihr Wasser einfüllt. Bei mir ist das vorne im Bug und sieht wie unten im Bild aus. Der Flowsensor hat auf beiden Seiten ein 1/2“ Außengewinde, auf welches ich Schlauchnippel geschraubt habe, dieses Konstrukt habe ich zwischen meine Einfüllleitung geklemmt.
Jetzt wird das Ganze verkabelt und in Richtung VAN PI System gelegt, ihr könnt dafür ein Ethernet Kabel oder eine Telefonleitung benutzen, die gibt es günstig im Baumarkt.
Bei dem Sensor des Typen YF-S201 gilt folgende Belegung:
Anschluß an das VÁN PI Relayboard
Der Anschluss an das VAN PI System wird jetzt etwas komplizierter, also schnappt euch schonmal einen Lötkolben und ein bisschen Zinn.
Auf den beiden Bildern oben seht ihr links einmal das Relayboard von oben, von unten
Bevor es weiter geht, einmal alles Stromlos machen. Denkt daran den Shunt zuerst zu trennen, dann erst den Strom vom Pi!
Fangen wir links an: dort seht ihr einige Lötpads, in der gleichen Anordnung wie vom Pi. Das Lötpad unten links sind die 3,3V vom RaspberryPi, dort lötet ihr euer Plus von den Flowsensoren an. Eine Reihe höher der 3. Pin ist GND. Dort löte ihr euer Minus an. Jetzt geht es in der oberen Reihe zum 8. Pin (Pi Pin 16) dort lötet ihr das Signal von eurem Eingangssensor an. Der Pin vom Ausgang ist leider nicht explizit herausgeführt, daher müsst ihr das Board einmal umdrehen und direkt an der Steckerleiste, wo das RaspberryPi aufgesteckt ist, das Kabel für den Ausgangsensor anlöten. (Achtung: man verzählt sich dort leicht) Wenn der Barcode oben ist, dann ist es in der unteren Reihe der 12 Pin von links (Pi Pin 18). Nachdem alles verlötet und isoliert ist, könnt ihr das VanPi System wieder zusammenbauen und anschließen. Prüft vorher, ob alle Kabel richtig sitzen und kein feiner Draht zum benachbarten Pin absteht. Nachfolgend noch eine Übersicht aller Pins.
NodeRed Backend
Kommen wir nun dazu, unsere neuen Sensoren auch Digital anzuschließen. Dazu gehen wir in das VAN PI - Backend. Ruft dazu im Browser eurer Wahl Folgendes auf:
"IP_Eures_VanPI:1880/#flow/e10bdbef.f84828“.
Dann sind wir im Backend des VanPI Systems. Ihr seht nun viel Bausteine, die miteinander verbunden sind.
Zum Importieren des Quellcodes (unten angezeigt), klickt ihr oben rechts im Menü auf Import.
Jetzt öffnet sich ein kleines PopUp-fenster. Dort fügt ihr den Quellcode ein. Nun habt ihr die die Quellcodes und könnt sie an einer leeren Stelle platzieren, am besten unter den Wassertanks.
Ihr müsst im Quellcode noch euren vorerst ungefähren Tankinhalt anpassen. Dazu müsst ihr im orangfarbenen Kästchen in Zeile 5 die 300 in euren ungefähren Tankinhalt ändern. Da die Menge jetzt in Liter und nicht mehr in Prozent gerechnet wird, müssen wir die Anzeige jetzt noch von % in Liter ändern. Dazu ersetzt ihr in der Bausteinreihe unter „Delete unused watertanks here“ den orangefarbenen „get global“ und türkisfarbenen „Wave“ Baustein durch die beiden neuen. Im Backend sind wir jetzt fertig. Dazu klickt ihr oben rechts auf „Übernahme (deploy)“.
Interface
Ihr werdet kaum einen Unterschied sehen, außer dass Wasserstand 1 jetzt ein „L“ statt einem „%“ Zeichen anzeigt. Jetzt könnt ihr Wasser einfüllen und die Anzeige sollt euch den Inhalt anzeigen. Nach dem ihr das gemacht habt, könnt ihr einen exakteren Wasserinhalt im Backend angeben. Aber denkt daran hier wird nicht auf den kleinsten Milliliter gezählt. Solltet ihr einmal den Inhalt des Tankes beliebig anpassen wollen, dann hab ihr dazu in der Config unter „Sensors“ die Möglichkeit. Hier sind zwei neue Buttons, um Euren Wasserstand 1 zu füllen oder zu leeren.
Quellcode für Import:
[{"id":"fc85e9b3ee2abd18","type":"rpi-gpio in","z":"e10bdbef.f84828","name":"","pin":"16","intype":"tri","debounce":"10","read":false,"x":610,"y":1200,"wires":[["c8d6fb0225660b90"]]},{"id":"c8d6fb0225660b90","type":"function","z":"e10bdbef.f84828","name":"füllen","func":"//einzelzählung\n// Get the current counter value from storage\nvar myCount = flow.get(\"WasserLiter\") || 0;\n\nvar maxvoll = 300;\nglobal.set(\"maxvollglob\", maxvoll);\n\n\nif (msg.payload == \"0\")\n{ \n // Add 1 to the counter\n myCount=myCount+(1/450);//hier 450 einzel schritte\n flow.set(\"WasserLiter\", myCount);\n global.set(\"Level1\", myCount);\n}\n\n\nif (msg.payload == \"resetjvoll\")\n{ \n myCount == maxvoll;\n flow.set(\"WasserLiter\", maxvoll);\n global.set(\"Level1\", maxvoll);\n msg.payload=myCount;\n return msg;\n}\n\n//Max Stand min Stand\nif (myCount > maxvoll) {myCount = maxvoll} else if (myCount < 0) {myCount = 0}\n\n\n\nmsg.payload=myCount\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":730,"y":1220,"wires":[[]]},{"id":"3a0c1a824da2f768","type":"ui_button","z":"e10bdbef.f84828","name":"","group":"1032e8ff.e5a657","order":17,"width":0,"height":0,"passthru":false,"label":"Set Wasser 1 Leer","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"resetjleer","payloadType":"str","topic":"topic","topicType":"msg","x":950,"y":1240,"wires":[["5ad496c4f6821cf1"]]},{"id":"578336c777d09cd0","type":"comment","z":"e10bdbef.f84828","name":"Wasser Flowsensoren","info":"","x":860,"y":1120,"wires":[]},{"id":"53ed7d76e7504e49","type":"rpi-gpio in","z":"e10bdbef.f84828","name":"","pin":"18","intype":"tri","debounce":"10","read":false,"x":990,"y":1200,"wires":[["5ad496c4f6821cf1"]]},{"id":"5ad496c4f6821cf1","type":"function","z":"e10bdbef.f84828","name":"leeren","func":"//einzelzählung\n// Get the current counter value from storage\nvar myCount = flow.get(\"WasserLiter\") || 0;\nvar maxvoll = global.get(\"maxvoll\");\n\nif (msg.payload == \"0\")\n{ \n // Add 1 to the counter\n myCount=myCount-(1/450);//hier 450 einzel schritte\n flow.set(\"WasserLiter\", myCount);\n global.set(\"Level1\", myCount);\n}\n\n\nif (msg.payload == \"resetjleer\")\n{ \n myCount == 0;\n flow.set(\"WasserLiter\", 0);\n global.set(\"Level1\", 0);\n msg.payload=myCount;\n return msg;\n}\n\n\n\n//Max Stand min Stand\nif (myCount > maxvoll) {myCount = maxvoll} else if (myCount < 0) {myCount = 0}\n\n\n\nmsg.payload=myCount\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1110,"y":1220,"wires":[[]]},{"id":"818d0bf8be6ebe5c","type":"comment","z":"e10bdbef.f84828","name":"Eingang","info":"","x":660,"y":1160,"wires":[]},{"id":"af56c6b8740c3262","type":"comment","z":"e10bdbef.f84828","name":"Ausgang","info":"","x":1020,"y":1160,"wires":[]},{"id":"defe58d92fb0f188","type":"ui_button","z":"e10bdbef.f84828","name":"","group":"1032e8ff.e5a657","order":16,"width":0,"height":0,"passthru":false,"label":"Set Wasser 1 Voll","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"resetjvoll","payloadType":"str","topic":"topic","topicType":"msg","x":570,"y":1240,"wires":[["c8d6fb0225660b90"]]},{"id":"c04bf80f.a3bca8","type":"ui_gauge","z":"e10bdbef.f84828","name":"","group":"577bbbad.624d64","order":1,"width":"3","height":"3","gtype":"wave","title":"{{sensorname}}","label":"%","format":"{{value}}","min":0,"max":"99","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","className":"","x":1070,"y":940,"wires":[]},{"id":"7caef129.00c9c","type":"function","z":"e10bdbef.f84828","name":"get global","func":"var check = global.get(\"Level1\");\nvar label = global.get(\"NLevel1\");\n\nvar maxvoll = global.get(\"maxvollglob\");\n\nmsg.sensorname = label;\n\nif (check > maxvoll) {\n check = 100\n}\nelse if (check < 0) {\n check = 0\n}\n\nmsg.payload = check; \nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":880,"y":940,"wires":[["c04bf80f.a3bca8"]]},{"id":"1032e8ff.e5a657","type":"ui_group","name":"WasserLevel Name","tab":"343363652ed7cfb3","order":3,"disp":true,"width":6,"collapse":true},{"id":"577bbbad.624d64","type":"ui_group","name":"Wasser","tab":"c77f413b.09f91","order":3,"disp":true,"width":"6","collapse":false},{"id":"343363652ed7cfb3","type":"ui_tab","name":"Sensors","icon":"dashboard","order":12,"disabled":false,"hidden":true},{"id":"c77f413b.09f91","type":"ui_tab","name":"Info","icon":"mi-info","order":1,"disabled":false,"hidden":false}]
Quellcode zum kopieren:
https://share.12-s.de/s/gYxmtZogHBtiqy3