Plant Watering Kit
DISCLAIMER: PLANT POT USED FOR DEMONSTRATION PURPOSES ONLY!
So you’ve gotten bored of watering your plants? You do it every morning and it puts you back to sleep, or maybe you’ve forgotten to do it so often that your plant died, or maybe you just love the BBC micro:bit?
Well this plant watering kit for bbc microbit then lets combine your favourite two hobbies: forgetting to water the plant and the BBC micro:bit and let electronics and a bit of engineering do that job for you. All you’re going to need is one plant watering kit and one neglected plant.
What The Kit Contains
You will also need:
A USB to micro USB cable,
a computer with an internet connection,
a pen or pencil, a piece of paper and some water,
a medium to large plant pot,
a medium to large size container to hold water…
and finally a plant.
Now that you have everything you need, let’s begin!
How the BBC micro:bit works
The BBC micro:bit is a miniature computer that can be used to control other electronics connected to it’s external pins. The BBC micro:bit runs on code written on the computer on the BBC micro:bit website, you can code in python or as we’re going to do code in the makecode microbit editor. The BBC micro:bit has 5 big pins and 20 small pins. They’re used as shown in the diagram. We will only be using the big pins, when connecting the pins to a crocodile clip make sure that the crocodile clip isn’t overlapping with any of the small pins as this can cause issues.
Step 1 Moisture Sensor
Step 1.1 The hardware
- Attach one end of one of the wires to the GND pin (GrouND) of the BBC micro:bit.
- Attach the other end of that wire to the GND of the moisture sensor (if you don’t see GND flip the moisture sensor over on to its other side).
- Get another wire and attach one end to the 3V pin of the BBC micro:bit (it’s called 3V because it outputs 3 volts).
- Attach the other end of that wire to the VCC pin (Voltage Common Collector) of the moisture sensor (the VCC is the power input for the moisture sensor).
- Get the final wire and attach it to the 0 pin of the BBC micro:bit.
- Finally attach the other end of that wire to the SIG (SIGnal) of the moisture sensor (this is going to send a signal to the BBC micro:bit to tell it how moist the soil is).
The BBC micro:bit is powering the moisture sensor (via a lead from the 3V pin on the micro:bit into the VCC on the Moisture Sensor), this power then travels out one prong of the moisture sensor, then through whatever material you place it in then arrives at the other prong. The moisture sensor checks how much voltage gets between both prongs and sends a voltage back through the SIG into the BBC micro:bit’s Pin 0. The soil is acting as a resistor and drains some of the voltage as it travels between prongs. The voltage drop that we see on Pin 0 tells us how moist the soil is. This is because moist soil makes a much better conductor of electricity than dry soil, so the more moist the soil is the more electricity can travel between both prongs so the more voltage gets sent back to Pin 0.
Step 1.2 The code
- Attach the BBC micro:bit to your computer with a USB cable (you should see an orange LED light up on the BBC micro:bit).
- In your second favourite browser go to the https://makecode.microbit.org/ website.
- Click on New Project.
- Inside the ‘Basic’ tab you should find the ‘show string’ block drag it inside the ‘forever’ block.
- Inside Advanced you’ll find the ‘Pins’ tab inside that you want to drag out the ‘analog read pin’ block.
- Then drag the ‘analog read pin’ block inside the ‘show string’ block where it says “Hello!”.
- Make sure that P0 is set as the pin for the ‘analog read pin’ block.
- Click Download, this will compile and download a hex file containing the code you just made.
- Place the hex file inside the Drive labelled “MICROBIT”.
The ‘forever’ block is a loop that goes on endlessly. The ‘show string’ block will make the BBC micro:bit show a series of characters on screen, it will scroll through each character one by one until the entire word/phrase/number has been displayed. The ‘analog read pin’ block asks to read the voltage of pin 0, analog read means it will be outputting as a number between 0 and 1023 depending on how high the voltage is.
So this code will read the voltage of pin 0, display a number between 0 and 1023 on the screen and after it has displayed this number it will repeat, forever.
The moisture sensor gives off a voltage based on how wet the area is between the two prongs, this code takes in that data and feeds us back numbers between 0 and 1023. The low numbers mean drier and the high numbers mean wetter. This allows us to see what numbers the BBC micro:bit is working with.
Step 1.3 The data
Let’s gather some data to be used for deciding the threshold number, that is the number at which we would like to start watering the plant, since lower numbers mean drier soil, we want to pick a number, that below which, we would like to start watering the plant.
- First unplug the BBC micro:bit from the computer and plug the AAA battery pack into it.
- You should be seeing a small single digit number on the BBC micro:bit screen (because the two prongs of the moisture sensor are not inside any material).
- Now place the two prongs of the moisture sensor in some water, you should see the number be a three digit number roughly around in the high 800 and 900 range.
- Wait until the plant pot soil is dry.
- With pencil and paper nearby, insert the two prongs into the plant pot soil.
- Write down the heading “dry” and the number for dry soil reinsert the two prongs elsewhere in the plant pot and repeat this for 5 measurements.
- Water the plant, and write down the heading “wet” and the numbers for wet soil reinsert the two prongs elsewhere and repeat this for 5 more measurements.
We need this data, because the BBC micro:bit code will be using the numbers fed into it by the moisture sensor to decide when to water the plant. We don’t know what the numbers the BBC micro:bit outputs mean in relation to the wetness of the soil until we have gathered some data.
Step 2 Pump
Step 2.1 The code
- Plug the BBC micro:bit back into the computer (it’s alright if you have to unplug the moisture sensor) and get on the https://makecode.microbit.org/ website.
- Click on New Project.
- There are a lot of blocks involved in this code so lets start by getting them all out, under the basic tab, take out two ‘pause (ms)’ blocks and take out a ‘show string’ block.
- Under the logic tab take out one ‘if true then’ block and then take out a ‘<‘ comparison block.
- Lastly under advanced in the pins tab take out two ‘analog read pin’ blocks and two ‘digital write pin’ blocks.
- Place the ‘show string’ block inside the ‘forever’ block and take one of the ‘analog read pin’ blocks (make sure it’s set to pin P0) and place it inside of the ‘show string’ block.
- Take the ‘if true then’ block and place it underneath the ‘show string’ block take the ‘<‘ comparison block and place it inside the ‘true’ part of ‘if true then’ block then take the ‘analog read pin’ block (again make sure it’s set to pin P0) and place it on the left hand side of the ‘<‘ comparison block.
- Place a ‘digital write pin’ block inside the ‘if true then’ block then put a ‘pause (ms)’ block underneath that, and then another ‘digital write pin’ block.
- Set the first ‘digital write pin’ block so that it’s changing P1 to 1, then set the second so that it’s changing P1 to 0.
- Finally underneath the ‘if true then’ block place the final ‘pause (ms)’ block.
The ‘show string’ block is reading the moisture sensor from pin 0 and outputting it to the screen just like before. The ‘if true then’ block will only run the code inside it if the if statement is true, the ‘<‘ comparison block is checking to see if the ‘analog read pin’ block is below a threshold value if it’s then the if statement is true and the code inside the ‘if true then’ block runs. Then pin one is digitally written as a 1 which means that roughly 3.3V is being outputted by the BBC micro:bit through that pin. Then the ‘pause (ms)’ block pauses because as pin 1 is on, the water will be pumping into the plant pot, then we turn it off again by digitally writing it as a 0. Then we pause again to allow the water to soak in and to conserve power. Finally the ‘forever’ block loops.
In short pin 0 is read and displayed on screen, if pin 0 is below a threshold value then we turn on pin 1, pause for a bit, and then turn pin 1 off again, finally we pause again before we loop, forever.
Step 2.2 The data meets the code
You have your data and your code before you can upload it to the BBC micro:bit we need to use our data, to adjust the code for your situation. You know the numbers for when your plant pot’s soil is wet, and you know the numbers for when your plant pot’s soil is dry. So let’s adjust the code for our plants.
- Pick a number between your wet numbers and dry numbers as your threshold number, this is the number at which we will water the plant (pick a number between them but definitely closer to the dry side).
- Input this number on the right side of the ‘<‘ condition block.
- Now decide for how many seconds you want to be pumping water into this plant pot (if you have a bigger plant pot maybe 3-5 seconds of water, for a smaller plant perhaps 1-3 seconds of water) then input this number into the ‘pause (ms)’ block below the first ‘digital write pin’ block, notice that the ms part stands for milliseconds because the BBC micro:bit doesn’t accept seconds in it’s ‘pause (ms)’ blocks the numbers have to be in milliseconds. To do this multiply the number of seconds by 1000 e.g. 3 seconds = 3000 milliseconds.
- Finally decide how often you would want this program to check if your plant needs water, (the less it checks the less power it consumes), you have to input the time in milliseconds (e.g. 30 minutes = 1800 seconds = 1800000 milliseconds or 1 hour = 60 minutes = 3600 seconds = 3600000 milliseconds or 2 hours = 120 minutes = 7200 seconds = 7200000 milliseconds).
- Enter that number into the ‘pause (ms)’ block below the ‘while true do’ block.
- Finally click Download and move that hex file into the drive labelled MICROBIT.
Step 2.3 The hardware
- Unplug the BBC micro:bit from the computer (reattach the moisture sensor if you had to take it off before).
- Attach one end of the wires to the GND of the BBC micro:bit (you can attach it onto the side if you don’t have enough space, because all those extra pins are also ground pins).
- Attach the other end of that wire to the GND of the Proto-Pic Transistor.
- Attach the final wire to pin 1 of the BBC micro:bit.
- Attach the other end to the SIG part of the Proto-Pic Transistor.
- Plug the transistor into the AA battery pack.
- Place the pump in a container full of water and direct the pipe into the pot of your plant.
- Plug the BBC micro:bit into the AAA battery pack and remember to turn on the AA battery pack.
The moisture sensor works as before. When the code detects that the moisture reading is too low, the BBC micro:bit will send a voltage through pin 1 into the SIG pin of the Proto-Pic transistor this will flip the transistor on, allowing the current to flow through the AA battery pack into the pump which will pump water into the plant pot. then the BBC micro:bit will stop sending the voltage which will flip the transistor off, stopping current flow from the AA battery pack, stopping the pump.
If you’ve done everything correct then your plant pot should have water pumped into it every so often. Don’t be afraid to mess around with the timings and threshold number if you think your plant is drowning or not getting enough water. This is what the final product will look like:
Congratulations you’ve learnt a lot about the BBC micro:bit, our transistor and our moisture sensor. Now you no longer have to water the plant, but don’t forget to water the container.
Check to see if you’re threshold is too high or low, maybe you’re pumping water for too long. Maybe you should wait longer between checking to see if you should water your plant.
You might have one of those pots with a saucer that keeps excess water and slowly feeds it back to the plant, have a think about whether the moisture sensor could hang in there instead of in the soil, think about if you would have to change the threshold value if you did do that.
Try coding in an extra bit of text that says “checking soil moisture” before the initial reading so that you can catch when it’s checking the soil moisture.
You could try and see if you can code it in such a way that you will always be seeing what the sensor is reading while at the same time doing the regular code.
Maybe you could code it so that when it pumps water it is also recording how much water has been pumped and stops running once a certain water pumping threshold has been reached.