Arduino Controlled Seedling Germination Incubator With Spectral LED Light Manipulation
This is a repository that holds all the relevant libraries and files needed to make an Autonomous Plant Incubator using an Arduino Nano 33 IoT, a Moisture sensor, a Temperature & Humidity sensor, Water pump, Full spectrum LED strip and an E-Ink Display.
The autoplant.cpp file holds all of the code that is run by the Arduino. It contains a setup and loop function.
The setup function is ran when the Arduino is first turned on. From then onwards, whatever is in the loop is executed recursively.
Display is a function written by Rogier Fransen, which is called at the start of the loop to update the E-Ink display with the relevant information. This shows useful information like the time, temperature, battery level, moisture level, water tank level, humidity, and if the device is connected to the internet.
BatteryLevel, WeightCheck, TempCheck, LEDCheck, WaterPump and wifiConnection all run continuous checks to see if they respectively call their own conditions to trigger a change. For example, wifiConnection will continuously look for a wifi signal and once it is found it will report it is connected. Another example, If the lighting hours are met then LEDCheck will turn on the LED strip for a number of ticks.
We have also used a ticker function that allows us to create 'delays' without interupting the flow of the program. An alternative to this would be to use Millis but in some cases that would require more lines of code, although potentially less variables to store tickers. This is an adaptation we might include in the future.
We present an arduino-controlled growth chamber, that allows the control of different environmental parameters (temperature, humidity, ligh)
Growth chambers for plants are becoming an attractive solution for enhancing food production. They can be used in a wide range of applications, including speed breeding, of plant growth within reduced spaces. Nowadays, there is a wide range of commercially available growth chambers. However, they tend to be expensive, and not suitable for certain customers. Within this project, we developed a low-cost growth chamber, by using off-the-shelf components, allowing a control of the temperature, humidity and light/dark cycles.
The design of this growth chamber consisted of a plastic container, where all the necessary devices had been incorporated. The monitoring of environmental data was carried out by a BME680 sensing device, and the full system was controlled by a Wio Terminal device, which could continuously display the environmental information from the sensors as shown below. In addition, this Wio Terminal could be used to select the desired environmental parameters, including light/dark cycles, humidity and temperature. A more detailed description of how these parameters are controlled is provided below.
One of the main parameters that have to be controlled within the growth chamber is the humidity. This parameter plays a key role in plant growth, and values higher or smaller than the optimal humidity for the plant can lead to a stress response from the plant. As such, it to be controlled inside the chamber to allow an optimal growth.
To increase the chamber humidity, a low-cost humidifier based on a ultrasonic sonicator combined with an air pump was designed. The ultrasonic sonicator consists of a piezoelectric materials that can provide mechanical energy to the water through vibrations. This vibration generates a water aerosol that can be directed inside the growth chamber by using an air pump, increasing the humidity. The pump we employed, could be powered with 5 V. As such, it could directly be controlled using the Wio Terminal, by setting the controlling pin output to 5 or 0 V. A schematical representation of the working principle of this method is schematised below.
The increase in humidity was recorded using a BME680 as previously described, and displayed on a Wio Terminal device, allowing the monitoring of this parameter by the user. The interface we designed allowed the user to select the humidity values during the day and night times. Unfortunately the humidity could only be controlled by increasing its value using water aerosols, but the system could not decrease its value in the presence of an excess of humidity. Although this could be accomplished by incorporating desiccants, we have not explored this approach within this project.
The temperature in the chamber were controlled using a low-cost fan heater. This heater was placed at one of the sides of the chamber, and allowed the generation of a hot airflow, that could be controlled using the BME680 to measure the temperature in the chamber. As in the previous case with the humidity setup, this system allowed a control of the temperature only by increasing it, and could not be used to actively reduce its value. However, in this case, the heater and the fan could be controlled individually, allowing a faster cooling when the heater was switched off by increasing the heat exchange.
As mentioned, the system could be fully controlled by using an arduino microcontroller. In this case, the employed fan heater required 12 V, and both the fan and the heating elements could be controlled separately. Due to the relatively high voltage required, a relay was employed to automatically switch the heating element on and off, by using a relay, whilst the fan was continuously switched on. A 12 W power supply was connected to this relay, and controlled by the Wio Terminal. This system allowed a control of the temperature during the day and night cycles.
To control the light cycles, a specialised LED for horticultural applications was incorporated on the growth chamber. To prevent the overheating of the components, specially during long-term operations, two heatsinks were incorporated, alongside a fan, as shown below. The light/dark cycles were controlled by using a relay as indicated before. Unfortunately, this system did not allow a control of the light intensity, or light spectrum. However, it could be used to simulate day and night conditions by switching on and off the LED. The amount of hours for each cycle could be indicated using a Wio Terminal device.
The code employed for the control of the growth chamber is displayed below. This programme allows the user to input the length of day and night cycles, as well as the magnitudes of temperature and humidity. The measured gas values from the BME680 were additionally displayed, allowing the user to evaluate the conditions inside the chamber in real-time. This system could potentially be used to send the data wirelessly to online servers for remote controlling of the chamber. However, this application has not been explored in this work.
The system could be used successfully to grow tomato plants, at least for the first wee. In this case, 10 the plant seeds were placed in a compost substrate, and watered periodically. Plants grew as expected at 24 C and 80 RH% as shown below, demonstrating the performance of this growth chamber.
A low-cost growth chamber has been designed, using simple and low-cost parts. This growth chamber allowed the user to select the desired environmental conditions for plant growth, including humidity, light period and temperature. This growth chamber could be used to grow tomato plants for at least 1 week, and have potential to be used for the growth of other plants of interest.
Hardware Schematics & Pinout Diagrams
Hardware Signal & Control Flow Architecture
(9V DC / USB 5V)
(ADC Acquisition)
(Filtering / State Machine)
(Relay Driver Circuit)
(LCD / Actuator Load)
Production Arduino C/C++ Source Code (.ino)
[*] Initializing Hardware Core for Arduino Controlled Seedling Germination Incubator With Spectral LED Light Manipulation... [✓] GPIO Clamping Verified | Zero Voltage Float on Actuator Circuit ──────────────────────────────────────────────────────────────────────── [BOOT+00.02s] ADC_INIT Calibrated zero-offset = 12 mV (Clean noise floor) [RUN +01.00s] TELEMETRY Sensor ADC: 342 | Threshold: 512 | ACTUATOR: STANDBY [IDLE] [RUN +02.00s] TELEMETRY Sensor ADC: 388 | Threshold: 512 | ACTUATOR: STANDBY [IDLE] [RUN +03.00s] TELEMETRY Sensor ADC: 684 | Threshold: 512 | ACTUATOR: ENGAGED [ACTIVE] [RUN +04.00s] INTERRUPT Optocoupler PC817 saturated | Actuator Active in 4.2 ms [RUN +05.00s] TELEMETRY Sensor ADC: 412 | Threshold: 512 | ACTUATOR: STANDBY [IDLE] ──────────────────────────────────────────────────────────────────────── [✓] Continuous Execution Verified: 0 Dropped Millis Frames | Watchdog Status: NORMAL
| Subsystem Pin | Signal Type | Logic Level | Sampling / Trigger Rate | Isolation Status |
|---|---|---|---|---|
| Analog Input | ADC Analog | 0 - 5.0V / 3.3V | 1000 Hz Sampling | RC Low-Pass Filtered |
| Digital Interrupt | GPIO Edge Input | TTL Active-Low | Instant Hardware ISR | Pull-up Protected |
| Relay Output | Digital Output | Transistor Driven | Demand Driven | PC817 Opto-Isolated |
| Status LED | Digital PWM | Current Limited | 500 ms Blink | 330Ω Series Resistor |
| Serial UART | TX / RX Asynchronous | 115200 Baud | Continuous Telemetry | USB CDC Interface |