Intro: Ambient Flower
The Ambient Flower is a new device, which supports hobby gardeners in monitoring plant health conditions and controlling water supply. It has been developed as part of a Physical Computing Course at Saarland University, taught by Prof. Steimle (Chair for Human Computer Interaction). Our device uses an artificial flower to visualise plant health and their surrounding conditions by taking real time readings from sensors placed around the plants. These readings are transferred to the Arduino remotely. Different colors of light are used to present this information on the Ambient Flower, such that users can perceive it intuitively.
Specifically, we use three sets of leds to display temperature, humidity and soil moisture around the plant. We have also integrated a water pump to support irrigation.
For measuring, we make use a number of sensors: A moisture sensor is buried in the earth to sample the moisture level of soil. A temperature as well as a humidity sensor (and optionally other sensors) will be installed near the area being cultivated. The readings of these sensors can be transmitted with cables or via Bluetooth to the Arduinos embedded in the “Ambient Flower”.
The basic look of our ambient flower is inspired by the rose dome from a disney classic, “Beauty And The Beast” and it can represent all the information retrieved by above mentioned sensors. It follows the analogy of a flower in a flower pot, with the atmosphere around it.
The "flower pot" of the ambient flower is built from two---a large and a smaller one---transparent plastic cylinders, which are usually used for blank CDs. The cylinders are covered with butter paper from the inner side; in the larger one this provides a projection surface for the moisture level display. Inside this larger cylinder, a breadboard with blue leds for the different levels is located. The blue leds are separated with pieces of thick paper, to direct the light. We found it crucial to add these separators and the butter paper to achieve a uniform illumination.
The smaller cylinder is put on top of the larger cylinder and contains the humidity display. The humidity display consists of blue leds arranged on a breadboard in a circular form. Unlike the moisture display, the light is directed to the top. The top side is not covered with butter paper, but with a circle of thick paper, having holes for the single leds of the humidity display.
An artificial flower is inserted into the "flower pot" and illuminated with a white led.
The "atmosphere" behind the flower is a larger surface of butter paper; the butter paper is hold by thick paper and illuminated from behind by white, blue and red leds displaying the temperature.
Still interested? - Let's build it!
Step 1: Electronics
Two Arduino Uno are used to control the system. Using two microcontrollers allows us to separate independent system functionality, providing modularity. One Arduino controls functionality related to water, i.e. moisture sensing, moisture display, warning sound and pump control. The second is related to air, measuring and displaying temperature as well as humidity.
For measuring temperature as well as humidity, we use a Sensirion SHT31, which provides both values via I2C interface. Moisture values we get from a Grove moisture sensor as an analog signal. The pump is an Adafruit peristaltic liquid pump. For sound output, a simple buzzer is used. Standard leds of different colors provide the light source for the display parts.
The pump control works with the help of a transistor, which switches the 12V power source. The diode across the pump prevents the circuit from damages that can arise from currents flowing against the circuit direction when a motor is turned off (Transistor to Control High Current Loads, Transistor as a Switch).
You can find circuit diagrams in the images section which will guide you while building the circuits. Our circuits are inspired by examples from the references of the different components (SHT31, Grove moisture sensor, Sidekick basic kit). Furthermore, tutorials on motor control with transistors (Transistor to Control High Current Loads, Transistor as a Switch) had an influence on the final circuit design. Finally, the ADC Touch library allows touch sensing without any external components by exploiting Arduino internals (ADCTouch).
We encourage you to try own enhancements - you could for example replace the longer cables with another Arduino together with Bluetooth modules, as the length of the cables is limited. There are many possibilities!
Warning 1: We are no electronics experts. There may be mistakes in our contents. We expect that you know what you are doing and check the circuits yourself.
Warning 2: The Arduinos have to drive many components in this instructable. Make sure that you do not exceed the current limitations of the Arduino. This is absolutely crucial; otherwise you may cause permanent damage! To our knowledge the Arduino recommends 20mA per digital IO pin and allows a maximum of 200mA for all IO pins together. See Arduino Pin Current Limitations for more information.
Besides many cables, you will need the following components:
For the measurements & irrigation control:
- 1x breadboard
- 1x Grove moisture sensor
- 1x SHT31 temperature/humdity sensor
- 1x peristaltic pump
- 1x 12V power supply (for the pump)
- 1x diode (usable for 12V)
- 1x transistor PN2222A
- 1x resistor 330 ohms
For the moisture display:
- 1x Arduino plus power supply (referred to as "Water-Arduino")
- 1x breadboard
- 6x led blue
- 6x resistors 470 ohms (for the leds, may vary depending on led type)
- 1x buzzer (for alarm sound)
- 1x touch electrode
For the temperature/humidity display:
- 1x Arduino plus power supply (referred to as "Air-Arduino")
- 2x breadboard
- 9x led blue
- 2x led white
- 1x led red
- 12x resistors 470 ohms (for the leds, may vary depending on led type)
- 1x artificial flower
Recipe to build
Steps to build the measurements & irrigation control:
- Connect the temperature/humidity sensor, moisture sensor and peristaltic pump to one breadboard. This breadboard will become our "remote station" located near the plant.
- Put the transistor, diode and 330 ohms resistor on the same breadboard to implement the pump control circuit. Pay great care to the direction of the transistor and diode; otherwise you may damage your Arduino!
- Use 4 longer cables to connect the temperature/humidity sensor on the board to the Air-Arduino (5V, GND, SCL, SDA).
- Use 3 longer cables to connect the moisture sensor on the board to the Water-Arduino (5V, GND, SIG). Also use the GND line as ground in the pump control circuit.
- Use 1 longer cable to build up a connection between the Water-Arduino and the pump control circuit. Double-check that the Arduino does not get into contact with the 12V power supply.
Steps to build the moisture display:
- Put 6 blue leds together with one resitor each on the moisture display breadboard. In this context, maximize the distance between the leds to light up a larger surface later on.
- Put the buzzer on the same board.
- Connect the leds as well as the buzzer to the Water-Arduino.
Steps to build the humidity/temperature displays:
- Building the humidity display is a little cumbersome. Put 8 blue leds together with the obligatory resistors in a circular form on the humidity display breadboard. You may need to play a little until it looks like a circle.
- For the temperature display, place a red, blue and white led together with one resistor each on a separate breadboard.
- Finally, put one white led with resistor into the artificial flower.
- Connect all the leds to the Air-Arduino. Note that the temperature display leds will need PWM pins.
That's it for the electronics! In the following steps, we will have a look on how to build a beautifully looking display.
Step 2: Soil Moisture
The water level/soil moisture can simply be visualized by rising and falling levels, lit by blue leds beneath of the flower intuitively representing the amount of water in the flower pot.
For creating the water level display around the rose you need:
- A transparent plastic cylinder covered
- Butter paper.
- Cardboard sheets
- Add butter paper along circumference of the plastic cylinder.
- Cut cardboard sheets into semi circles using radius of the cylinder.
- Attach these semicircles to the soil moisture breadboard circuit via tape, such that there is a cardboard semicircle between every two leds. These cardboard semicircle act as delimiters of water level.
- Insert the soil moisture breadboard circuit and the "water" arduino into the cylinder vertically, such that delimiters as well as the leds are directed to the intended front of the display and arduino is placed in the empty half at the back.
- Insert extra cardboard to the cylinder's intended back, such that the structure is stabilised and the delimiters don't move.
Step 3: Humidity
The air humidity can be displayed as a circle of blue leds on the ground, symbolising condensation of water on the surface. Depending on the humidity percentage, only a certain arc of the circle is lighted up.
For creating the humidity display around the rose you need:
- A short transparent plastic cylinder (with the same radius as cylinder used for soil moisture display).
- Butter paper
- A Thin white Cardboard sheet.
- An artificial flower
- Add butter paper to the circumference of the cylinder leaving only the base transparent.
- Cut a hole at the centre of the base of the cylinder, to add the artificial flower later.
- Cut a circle from white cardboard sheet with radius of the cylinder.
- Cut holes in the circle to insert the humidity display leds in a circular manner.
- Add the circular cardboard on the top of the humidity display breadboard, such that the leds fit into the holes.
- Insert this humidity display breadboard into the cylinder such that the leds face the base of the cylinder
- Place this cylinder on top of the soil moisture cylinder with humidity leds to the top.
Let the connecting wires out from the back of the cylinders and tape the cylinders together (may require cutting the cylinder).
Add the artificial flower with the led into the the hole created at the top of the cylinders
Step 4: Temperature
Temperature analysis readings obtained via the Thermostat will set the ambience around the rose with different white, blue and red leds located at the background of the rose. These colors represent low (<0°C), moderate (15°C) and high (>30°C) temperature around the plant/crop respectively. In between these temperatures, the light is mixed to intermediate colors. These limits can be edited according to user requirements.
For creating the backdrop of the rose you need:
- A rectangular box to give your display the desired height.
- A thick white glossy sheet
- A sheet of translucent paper (eg: butterpaper)
- A roll of Tape
- Tape the glossy sheet horizontally to the top edge of back of the box.
- Tape one horizontal edge of the translucent sheet to the top egde of the glossy sheet and the other edge to the front of the box, making a cave-like structure.
- Insert your breadboard with temperature led circuit into the cave and let the light reflect the temperature around your plant.
Step 5: Water Control
The irrigation is controlled by a touch button on the ground surface of the plant.
For creating the irrigation control you need:
- A marker
- Transparent tape
- Draw a water drop on the back of the touch control.
- Attach it to the ground of the artificial plant, next to the humidity led display with tape.
Step 6: Software
We have developed one Arduino program each for the water-related circuit and the air-related circuit. You can find the code in the downloads. The water-related program uses the ADCTouch library (ADCTouch) to detect button presses of the user. For the air-related circuit, we have made use of the cactus.io SHT31 library (SHT31 library) and integrated the example code in our project. You will have to install these libraries in order to use our code.
Probably the most interesting algorithm regarding the air-related program is our mapping of temperatures to colors: By slowly decreasing the brightness of one color and increasing the brightness of another color we provide a fluent transition between colors. This helps to not distract in the case of temperature changes.
The water-related program takes care of activating the pump in the case the button is pressed. If the moisture level reported by the sensor (retrieved via analogRead) is above a threshold, the pump is deactivated again. In the case of a critically low moisture, we play repeated sounds with the tone function. You may have to adjust the thresholds depending on your plants' needs. While the pump is running, an animation is displayed on the moisture display.
The Arduino reference has helped us in developing our code.
Now, sit back and enjoy all the colors reflecting your plant conditions!