Page 4 of 5
Re: plant watering
Posted: Sun Dec 15, 2019 6:01 pm
by johnv
so its working!
didnt need the relay after all, the 2n7000 did the trick!
btw cant upload the mp4 video
Re: plant watering
Posted: Fri Dec 27, 2019 1:59 pm
by johnv
hi, for reading the values and future stuff and controlling, maybe using an app, what is the better way to do it,
learn about mqtt, or a websocket or try building a server???
i'm kinda lost on this subject,
i think there is to much info on this subject,
i end up installing node red on the raspberry, but i would like to learn micropython, so block coding is cool to see things work but not the way i want to go,
also home assistant is a bit overkill, using yaml and implimantations of all kinds,
i like to keep it to python, so i can learn more,
so i would be gratefull, to any help offcourse
i really like to know where to start with this,
kind regards, john!
Re: plant watering
Posted: Tue Jan 07, 2020 9:23 pm
by safetyfactorman
I'm not sure what your requirements are, but you may find the opensprinkler project of interest.
https://opensprinkler.com/product/opensprinkler-pi/
The software has a c/c++ verson and a python version. I am trying to learn the python version, so I can hack it.
https://rayshobby.net/mediawiki/index.p ... Background
The developers sell a card that plugs into the gpio bus on the raspberry pi. It is also possible to have remote stations. The software could be expanded to become a kinda garden scada, using remote embedded micropython devices.
Re: plant watering
Posted: Thu Feb 13, 2020 7:22 pm
by johnv
Code: Select all
import machine
from machine import Pin
from machine import ADC
import time
from time import sleep
moisture = ADC(0) #declare soil sensor
pump = Pin(4, Pin.OUT) #declare pin 4 as output, naming it pump
dry_value = 600 #declare dry_value as 600
while True: #create infinit loop till somthing breaks the true statement
moisture_value = moisture.read() #when there are readings from the soil sensor put them in 'moisture_value'
print(moisture_value) #show readings from soil sensor
sleep(3) #wait for ... seconds
if (moisture_value < dry_value): #when readings from soil sensor is smaller than 600 then ...
pump.on() #pin 4 high
print(pump.value()) #shows pin state 1 (high)
sleep(10) #wait ... seconds
pump.off() #pin 4 (0)low
sleep(10) #wait 10 seconds
hi i'm still struggeling, to grasp how i'm supposed to put the data in to mqtt
do i use the " print(moisture_value)" into the publish topic?
Re: plant watering
Posted: Fri Feb 14, 2020 5:48 pm
by pythoncoder
See the official examples such as
this one. You will need to convert
moisture_value to a bytes instance to publish it, so after connecting to your broker your publication code will look something like
Code: Select all
c.publish(b'moisture', str(moisture).encode())
Re: plant watering
Posted: Sat Feb 15, 2020 6:44 pm
by johnv
i apreciate your help, sir! have a great weekend!
Re: plant watering
Posted: Wed Feb 26, 2020 3:40 pm
by Mikki
torwag wrote: ↑Tue Nov 12, 2019 6:53 am
Also consider the hardware incidents. If you run out of water, the pump will be turned on after each reading. Thus, your sleep command at the end of the pump could be critical to make sure, the pump has time to cool down and does not overheat.
Same is true if the water never reaches the sensor, etc. You could add some emergency protocol, like checking if the pump was turned on 5 times in a row and if this is the case, stop the entire system as you might expect something went wrong.
I am using a small pump, to carry water from a reservoir.
To prevent the pump from running when the reservoir is empty, I am thinking about a simple sensor.
Two cables, with one end glued to the side of the container, with 1cm spacing from each other and in the height of the pump.
The other ends connected to the pyboard, one as Output and one as Input.
Code: Select all
>>> import pyb
>>> from pyb import Pin
>>> import time
>>>
>>> relay_pump=Pin('B12',Pin.OUT)
>>> res_out=Pin('C6',Pin.OUT) # reservoir sensor OUTPUT
>>> res_in=Pin('C7',Pin.IN,Pin.PULL_DOWN) # reservoir sensor INPUT
>>>
>>> def res_empty():
... res_out.on()
... b= not res_in.value()
... res_out.off()
... return b
>>>
>>> def pump(t_in_sec):
... if res_empty():
... return False
... else:
... relay_pump.on()
... time.sleep(t_in_sec)
... relay_pump.off()
... return True
>>>
Would this be safe to use?
I guess, I need a resistor or a diode to prevent a short circuit?
Re: plant watering
Posted: Mon Mar 02, 2020 5:21 am
by MostlyHarmless
Never rely on your program to be fail safe. Always build safety into your circuit.
If there is no water, the whole thing should shut down.
Think like that.
Re: plant watering
Posted: Mon Mar 02, 2020 12:12 pm
by Mikki
Ok, I didn't think this way yet. Thank you.
Do you know how I could implement it in the circuit?
Or which parts I could use, so I can inform myself about these parts.
Re: plant watering
Posted: Sat Mar 07, 2020 5:29 am
by MostlyHarmless
For making sure there is water in the reservoir a simple float switch should do. That switch would be closed if there is water in the reservoir and open where there isn't. Think of the principle of a sump pump or the condensate pump of an air condition system.
The condensate pump of an air condition system activates when there is enough water in the reservoir and shuts down when the water level falls below a certain level. Everything in that thing is mechanical and electrical. Not all circuits need electronics.
If your plant watering control circuit tries to turn such a pump on while there is no water in the reservoir, nothing will happen.
The other danger is that your program or the moisture sensor might fail and leave the pump on, which could lead to flooding. That can be prevented with a similar but inverse float switch. Potted plants are often placed on trays that can prevent a disaster when one waters them a bit too much (water seeping out at the bottom of the pot). A normally closed float switch, that opens if it detects water in that tray, in series with the reservoir float switch ... you get the picture.
Regards, Jan