NEWS
Balkonbewässerung Wemos Mini ADS1115 zwei Sensoren
-
Hallo
Es sollen zwei Pumpen gesteuert werden, die sich in einem Wasserfaß befinden.
Die Werte werden jeweils von einem Sensor erfasst, der Wert des Sensors wenn nass ist bei ca. 10000 und wenn furztrocken bei ca. 23000.
Das Script soll die Pumpen nur zwischen 9 Uhr Morgens und 20 Uhr Abends anschalten bzw. wenn nötig die Blumen mit Wasser versorgen.
Da der Wemos Mini mit 3,3 Volt arbeitet kann man dort eigentlich auch nur einen Sensor anschließen der ebenfalls mit diesem Pegel arbeitet, richtig?
Da man selbst wenn man einen Sensor dieses Typ's mit TL555 bestellt, meist nur den mit NE555 geliefert bekommt, führen mehrere Wege nach Rom.
Entweder man tauscht den NE555 gegen den TL555 aus und muss schauen das der 5v->3,3V on Board ist, oder man entfernt (wenn vorhanden) den Spannungsregler auf der Platine und brückt dort die Versorgungsspannung damit der NE555 mit 5 Volt arbeiten kann.
Ein Messfühler mit der Bestückung NE555 und 5 Volt zu 3,3 Volt Konverter wird nicht funktionieren! da der NE555 erst ab 4,5 Volt arbeitet!Da ich sowieso zwei Sensoren verwenden wollte, habe ich den ADS1115 dazwischen geschaltet, dieser kann mit 3,3 oder 5 Volt betrieben werden.
Es werden also alle Bauteile mit 5 Volt betrieben Wemos,ADS1115,Sensor (der Wemos hat ja eh seinen eigenen 5 Volt zu 3,3 Volt IC an Board)Firmware auf dem Wemos Mini (NodeMCU) ist die tasmota-Firmware.bin
Habe ich etwas vergessen ...?
Anbei zwei Blocklys zur Auswahl ...
Das eine schaltet bei erreichen eines voreinstellbaren Wertes bei „trocken“ ein und schaltet die Pumpe dann nach x Zeit wieder aus (quasi wie beim gießen, nur offenes Schlauchende)
Das andere schaltet bei erreichen eines voreinstellbaren Wertes bei "trocken" ein und beim erreichen des Wertes für "feucht" die Pumpe wieder aus (zum Betrieb mit Tropfern/Sprühern)NACHTRAG: sollte man die Pumpen (Ventile) explizit nach ende der Timerzeit ausschalten ??? weil es ja sein könnte das die Pumpen um 19:59:59 Uhr gerade erst eingeschalten wurden und die dann weiterlaufen obwohl der Timer beendet wurde ?
anbei die zwei Blocklyscripte in txt Form
Blockly_Balkonbewässerung_tropfer.txt
Blockly_Balkonbewässerung_gießen.txt -
@snupy Ich würde die Sensoren erstmal ein par Tage ohne Pumpe testen. Bei mir haben sie im realen Einsatz keine sinnvollen oder reproduzierbaren Ergebnisse geliefert. Eine Lösung habe ich noch nicht gefunden, daher aktiviere ich die Bewässerung halt bei starker Trockenheit von Hand.
Zum Thema Abschalten. Ich hatte dies in den Code des ESP einprogrammiert, damit die Bewässerung stoppt, auch wenn die Verbindung abbricht oder irgendwas auf der iobroker Seite nicht stimmt. Im Prinzip liefert iobroker nur die Zeitdauer die bewässert werden soll an den ESP, danach läuft der Timer / Counter runter. Der ESP berichtet nur noch den Zustand an iobroker.
-
Danke für den tipp, an den Timer im Tasmota hatte ich gar nicht gedacht um die Pumpen/Ventile expliziet über Nacht / zur bestimmten Zeit abzuschalten.
mhhh ... ich hatte schon vorab gelesen das die Sensoren nicht so gut wegkommen, habe mich aber denoch dafür entschieden. Bis jetzt kann ich nichts negatives darüber sagen. Was verstehst du unter "keine reproduzierbaren Ergebnisse" ? bei mir liefern die seit Tagen fast identisch Werte für nass und trocken .
einer hat nass 9180 und trocken 20352 der
andere hat nass 9408 und trocken 20354ich schiebe das Augenblicklich (noch stecken die nicht in der Erde) einfach darauf das viele Fühler mit NE555 und 3,3Volt Konverter verkauft werden ... der funktioniert weder mit 3,3Volt noch 5Volt am Wemos (NodeMCU, ESP8266)
also nochmals kurz, welche Version dieses Sensor wann mit wem funtioniert ;]- TL555 und 3,3Volt Konverter -> geht direkt am Wemos Mini, funktioniert mit 3,3-5Volt
- NE555 mit 3,3V Konverter -> funktioniert weder mit 3,3V noch mit 5,5V (NE555 benötigt mind.4,2Volt)
- NE555 mit Brücke für Konverter (0 ohm Widerstand) -> funktioniert nur mit 5Volt also nicht direkt am Wemos, dafür aber am ADS1115 wenn mit 5Volt betrieben.
Anbei lade ich mal eine kleine Doc hoch um es den ein oder anderen zu erleichtern die ebenfalls so ein Projekt vorhaben. Ebenfalls lade ich nochmal alle Scripte mit hoch (mein dank nochmal an den User @Paul53)
Balkonbewässerung mit Wemos Mini.docx
Blockly zum "Gießen" ... keine Tröpfler oder Sprüher (nicht sinnvoll außer man stellt die Zeit auf 30min oder länger)
<xml xmlns="https://developers.google.com/blockly/xml"> <block type="comment" id="j8C{mKDTF;`?p]C5Te%/" x="-112" y="-262"> <field name="COMMENT">schalte Funktion von 9-20 Uhr an</field> <next> <block type="schedule" id="8pB#=gm_!BOi.g*mB0?,"> <field name="SCHEDULE">{"time":{"start":"09:00","end":"20:00"},"period":{"days":1}}</field> <statement name="STATEMENT"> <block type="on_ext" id="X`~iY:[p/t!4H=/oumn^"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id=":Hcl*7|Ogb!7%/wse3(#"> <field name="oid">sonoff.0.DVES_D3C424.ADS1115_A0</field> </shadow> </value> <statement name="STATEMENT"> <block type="comment" id="WBQb74=YUB-m~8O!@uK:"> <field name="COMMENT">schalte Pumpe 1 an wenn trocken, Wert über x</field> <next> <block type="controls_if" id="DnrA7#P9BWpAK,3YUR!h"> <value name="IF0"> <block type="logic_compare" id="94YycpD_(e~lzOv|XUEg"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="TpGf`VoF[bM|`o8@%tMX"> <field name="ATTR">val</field> <field name="OID">sonoff.0.DVES_D3C424.ADS1115_A0</field> </block> </value> <value name="B"> <block type="math_number" id="n?8.rn0dSK1J!PT9l+XA"> <field name="NUM">18000</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="un*I*J!);9M$zF4lP(^3"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">sonoff.0.DVES_D3C424.POWER1</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="B6@=:@w^,u:|;ZwhM=0,"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="comment" id="IS_2i|Qk4UMtS#X!3#~c"> <field name="COMMENT">schalte Pumpe 1 nach x Sekunden ab</field> <next> <block type="control" id="y;[mtJmfq/ZZ)a7o,F$F"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">sonoff.0.DVES_D3C424.POWER1</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">5</field> <field name="UNIT">sec</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="$A9K(wmhm%7YIfFWF]@6"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </statement> <next> <block type="on_ext" id="}QY}L1{]N.gatu]t8S(7"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="*03x5c))a3]dQc]T0V[H"> <field name="oid">sonoff.0.DVES_D3C424.ADS1115_A1</field> </shadow> </value> <statement name="STATEMENT"> <block type="comment" id="e1-`hd-T#-lf+5AA|J#n"> <field name="COMMENT">schalte Pumpe 2 an wenn trocken, Wert über x</field> <next> <block type="controls_if" id="FI?1}~1Y]c.xN7oYHe~L"> <value name="IF0"> <block type="logic_compare" id="_hY`8+Bkj|y{JdU#wWy^"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="506n}PvGlLlJeTx~XzVE"> <field name="ATTR">val</field> <field name="OID">sonoff.0.DVES_D3C424.ADS1115_A1</field> </block> </value> <value name="B"> <block type="math_number" id="*pd:n+Ew]/w.@n;(mF%i"> <field name="NUM">18000</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="iyXq//vjlF%9HT_Z9,/s"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">sonoff.0.DVES_D3C424.POWER2</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id=":,Wq1JmEb3V-:YSSt/L1"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="comment" id="i71[S#T]::LncVeR{9%k"> <field name="COMMENT">schalte Pumpe 2 nach x Sekunden ab</field> <next> <block type="control" id="ww4u]L05t=MwVp4Obu1-"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">sonoff.0.DVES_D3C424.POWER2</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">7</field> <field name="UNIT">sec</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="Z@{Pf=gs3;|wpkNGsSc~"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </statement> </block> </next> </block> </statement> </block> </next> </block> <block type="comment" id="L4/7n{mePj~QO`.swgJy" x="-112" y="463"> <field name="COMMENT">schalte Pumpen nach Timerende explizit aus</field> <next> <block type="schedule" id="Ea+?=-,xI_vM*q/naBz$"> <field name="SCHEDULE">1 20 * * *</field> <statement name="STATEMENT"> <block type="control" id="/lXm1hK)G}n;ci!Q`Q6m"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">sonoff.0.DVES_D3C424.POWER1</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="dvNVqZN.aXh.SYcbI3%X"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="control" id="Sp8gIy@Be@kKYwoXB4E^"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">sonoff.0.DVES_D3C424.POWER2</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="a,BC#j${Dc?MxIS]_+fy"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </statement> </block> </next> </block> </xml>
Blockly für Tropfer oder Sprüher
<xml xmlns="https://developers.google.com/blockly/xml"> <block type="comment" id=")1iD:cEaKh*AcYA4l#dw" x="-208" y="-55"> <field name="COMMENT">schalte Funktion von 9 -20 Uhr an</field> <next> <block type="schedule" id="8pB#=gm_!BOi.g*mB0?,"> <field name="SCHEDULE">{"time":{"start":"09:00","end":"20:00"},"period":{"days":1}}</field> <statement name="STATEMENT"> <block type="on_ext" id="hHenK(788rHSg6gn87.u"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="3,C.w|h*CG{D9i9N$Ebz"> <field name="oid">sonoff.0.DVES_D3C424.ADS1115_A0</field> </shadow> </value> <statement name="STATEMENT"> <block type="comment" id="kT.#*)s*C}wF8P:L;]0%"> <field name="COMMENT">schalte Pumpe 1 an wenn Erde trocken, Wert über x</field> <next> <block type="controls_if" id="DnrA7#P9BWpAK,3YUR!h"> <value name="IF0"> <block type="logic_compare" id="94YycpD_(e~lzOv|XUEg"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="TpGf`VoF[bM|`o8@%tMX"> <field name="ATTR">val</field> <field name="OID">sonoff.0.DVES_D3C424.ADS1115_A0</field> </block> </value> <value name="B"> <block type="math_number" id="n?8.rn0dSK1J!PT9l+XA"> <field name="NUM">18000</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="un*I*J!);9M$zF4lP(^3"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">sonoff.0.DVES_D3C424.POWER1</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="B6@=:@w^,u:|;ZwhM=0,"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> <next> <block type="comment" id="O_%VwYS1L(%aJIQbiezG"> <field name="COMMENT">schalte Pumpe 1 aus wenn Erde feucht genug ist, Wert unter x</field> <next> <block type="controls_if" id="Q:xms+pv9g).^}jweuD:"> <value name="IF0"> <block type="logic_compare" id="w6knL^,b*s6eFKa=e)K|"> <field name="OP">LT</field> <value name="A"> <block type="get_value" id="EJ5bh;DoY[-aWW`91xH-"> <field name="ATTR">val</field> <field name="OID">sonoff.0.DVES_D3C424.ADS1115_A0</field> </block> </value> <value name="B"> <block type="math_number" id="US(T!Yyx`4h_kZ*`m2p4"> <field name="NUM">12000</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="y;[mtJmfq/ZZ)a7o,F$F"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">sonoff.0.DVES_D3C424.POWER1</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="$A9K(wmhm%7YIfFWF]@6"> <field name="BOOL">FALSE</field> </block> </value> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </statement> <next> <block type="on_ext" id="dF[YG_qLsssbSK}8@K?`"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="f:%9[9)9E14$QDQ@}*ls"> <field name="oid">sonoff.0.DVES_D3C424.ADS1115_A1</field> </shadow> </value> <statement name="STATEMENT"> <block type="comment" id="8Ma}uxI.]zuL4.+%;/!;"> <field name="COMMENT">schalte Pumpe 2 an wenn Erde trocken, Wert über x</field> <next> <block type="controls_if" id="RS;F02|2SC.cGhI.JmK;"> <value name="IF0"> <block type="logic_compare" id="QU2%U$Oj[[QJH4p``jGP"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="o}c@bp!n*PCER@Q1yF!]"> <field name="ATTR">val</field> <field name="OID">sonoff.0.DVES_D3C424.ADS1115_A1</field> </block> </value> <value name="B"> <block type="math_number" id="0Wh4EH$6/^_mFJK:LuIt"> <field name="NUM">18000</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="qMk@/r?s/Lnx:MWbU.T!"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">sonoff.0.DVES_D3C424.POWER2</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="4J1QhZYHUn-(,_)BGgRB"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> <next> <block type="comment" id="8F9oox$e[{hjB.qj9^KH"> <field name="COMMENT">schalte Pumpe 2 aus wenn Erde feucht genug ist, Wert unter x</field> <next> <block type="controls_if" id="t)wc5$EibXqQceL-C)f="> <value name="IF0"> <block type="logic_compare" id="/.lET:moYJ@EYCks8fCF"> <field name="OP">LT</field> <value name="A"> <block type="get_value" id="$M.dG0(=c+LHhhXn/q#."> <field name="ATTR">val</field> <field name="OID">sonoff.0.DVES_D3C424.ADS1115_A1</field> </block> </value> <value name="B"> <block type="math_number" id="JT/j]:|bw]qv}~Q?3^@D"> <field name="NUM">12000</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="PRcV6d;jB*^W)5EQ_UER"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">sonoff.0.DVES_D3C424.POWER2</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="kU)zJa[3C!SlqvCW{?/#"> <field name="BOOL">FALSE</field> </block> </value> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </statement> </block> </next> </block> <block type="comment" id="F2A=H;C0tFU%~ZKKM~LI" x="-175" y="755"> <field name="COMMENT">schalte Pumpen nach Timerende explizit aus</field> <next> <block type="schedule" id="Ea+?=-,xI_vM*q/naBz$"> <field name="SCHEDULE">1 20 * * *</field> <statement name="STATEMENT"> <block type="control" id="/lXm1hK)G}n;ci!Q`Q6m"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">sonoff.0.DVES_D3C424.POWER1</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="dvNVqZN.aXh.SYcbI3%X"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="control" id="Sp8gIy@Be@kKYwoXB4E^"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">sonoff.0.DVES_D3C424.POWER2</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="a,BC#j${Dc?MxIS]_+fy"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </statement> </block> </next> </block> </xml>
Will man die erzeugten analogwerte für Feucht =100% , Trocken = 0% in Prozent umgerechnet haben geht das mit folgender Formel : Prozent = 100 - ((value - 9500) / (20400 - 9500)*100)
für die Zahlen 9500 und 20400 bitte die eigenen Werte eintragenJavaScript für analog Werte in Prozent umrechnen für zusätzliche Datenpunkte. Im Ergebniss der Rechnung entsprechen 100% dem niedrigeren und 0% dem höheren Wert, hier das javascript zum direkt Import in der JavaScript Engine.
Sensor_feuchte_nach_Prozent.zip
var Prozent, value; on({id: "sonoff.0.DVES_D3C424.ADS1115_A0"/*DVES_D3C424 ADS1115 A0*/, change: "any"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; Prozent = 100 - ((value - 9500) / (20300 - 9500)*100); setState("0_userdata.0.Balkonbewässerung.Bewaesserung_eins"/*Bewaesserung_eins*/, Math.round(Prozent*10)/10, true); }); on({id: "sonoff.0.DVES_D3C424.ADS1115_A1"/*DVES_D3C424 ADS1115 A1*/, change: "any"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; Prozent = 100 - ((value - 9500) / (20300 - 9500)*100); setState("0_userdata.0.Balkonbewässerung.Bewaesserung_zwei"/*Bewaesserung_zwei*/, Math.round(Prozent*10)/10, true); });
-
@snupy said in Balkonbewässerung Wemos Mini ADS1115 zwei Sensoren:
mhhh ... ich hatte schon vorab gelesen das die Sensoren nicht so gut wegkommen, habe mich aber denoch dafür entschieden. Bis jetzt kann ich nichts negatives darüber sagen. Was verstehst du unter "keine reproduzierbaren Ergebnisse" ? bei mir liefern die seit Tagen fast identisch Werte für nass und trocken .
einer hat nass 9180 und trocken 20352 der
andere hat nass 9408 und trocken 20354Ich hatte die Sensoren draußen in der Erde und die Werte schwankten, vermutlich bedingt durch Temperatur, Luftfeuchte etc. so erheblich, dass sinnvolle Schwellwerte nicht ermittelt werden konnten. Insbesondere bei Trockenheit, also dann wenn es drauf ankommt. Das ist aber auch schon wieder fast 2 Jahre her. Mag sein die Dinger sind besser geworden.
-
ok danke ... ich werde es testen
und berichten
besser sind die "Dinger" bestimmt nicht geworden... den 555 gibt es schon ewig ... schaun wir mal ...