For an index of all my stories click this text.
Recently I was building a project in which I needed a water level sensor.
And a water level sensor is obvious the same technique as a rain sensor. The
basic difference between the two is that a rain sensor has a large surface
to catch rain drops while a water level sensor just needs two small
contacts.
A few years ago I build a rain sensor with an ESP8266.
The program was written in LUA and the project used a ready-made sensor. You
can re-read that story here if you like:
https://lucstechblog.blogspot.com/2016/08/rain-sensor-using-esp8266.html
That
version worked but was rather primitive. I have now much more expertise in
sending notifications when it rains. You can send a signal to Domoticz, to
your Phone, to a Blynk app, or to Telegram just to name a few.
But
first you need a sensor. So lets build one.
Water sensor.
Basically what I am going to show you is a water sensor. The
sensor just detects water and that can be rain, a water tank level, or a
leaking washing machine it is all the same.
The sensor consists of an NPN transistor, a resistor and a
capacitor. That's all.
The schematic is made with the free
design program EasyEDA designer which can be found here:
https://easyeda.com/
The output will give normally a 0 until the two probes are
connected. That connection can be made by wet-fingers, or submerged in water
or a damp piece of cloth.
The transistor can be a general NPN
version. I build versions with a 2N222 and a BC547 transistor that worked
equally well.
Above you see how the pins of the 2N222 are arranged.
And the picture above shows the pinout of the BC547 transisitor.
The difference between these two is that the Emiitor and Collector have
switched places.
The resistor should be 1K and the capacitor 100 Nf
or close to that. Using a larger capacitor makes the circuit take longer
switching from 0 to 1 and the reverse.
First thing was doing some
tests. For that I added a current delimiting resistor of 220 Ohm and a led for
monitoring the output.
For convenience I herebye give you the
breadboard setup.
Above is the version with the 2N222 transistor.
And here is the version with a BC547 transistor.
As stated
both work equally wel.
Testing the sensor.
At the left side of the breadboard there are two purple wires. In
reality I just used breadboard (Dupont) wires.
To test the sensor
just connect the wires, wet your fingers and put the wires between them, put
the wires in a glass of water or put them on a piece of cloth and start
dropping water on that cloth. In all cases the led will go ON and as soon as
the wires are seperated or dry again the led will go OFF again.
This
sensor is very sensitive. So putting both ends at one side of a bowl of water
is enough to set the led ON.
Connecting to an ESP
You can use this sensor with an Arduino, AT Tiny85, ESP8266,
ESP32, Raspberry Pico or any other controller you want to use in your
project.
For testing I used an ESP8266.
Here is the breadboard setup for a sensor using the 2N222 with a
Wemos D1 mini.
And here is the setup with a BC547 transistor.
In
both versions the led is omitted and the output is direct connected to D8 of
the Wemos D1.
ESP8266 program
// Rain sensor test // The sensor is connected to D8 void setup() { Serial.begin(9600); delay(1000); Serial.println("ESP8266 rain test"); pinMode(D8, INPUT); } void loop() { Serial.println(digitalRead(D8)); delay(1000); }
This is just a basic program that displays the sensor reading in the Serial Monitor.
In the setup() the serial monitor is initiated at 9600 baud and D8 is defined as input pin. The loop just prints the reading of pin D8 in the serial monitor.
Pin D8 will give LOW (0) till the input detects water. Then D8 will change to HIGH (1). So beware that the input is reversed to what we normally use when connecting a button or some other sensor.
Practical uses.
This is like said above a very sensitive sensor. It can be used for a lot of purposes. Examples are a rain-sensor, water level sensor, soil moisture sensor but also as a contact sensor for doors etc. I am going to use it for a water level sensor in an aquaponics system.
You do not even need a microcontroller for using this sensor. Attach a led or relay and you can make a local alarm or control a pump.
It can be used with any microcontroller you want to use in your project like the Arduino, Attiny, ESP32, ESP8266 and Raspberry Pico. That's it for now.
Have fun
Luc Volders