By Alex Esber, Lisa Goldman
Advisor: Dr. Robert Morley
Washington University in St. Louis Department of Electrical and Systems Engineering

Abstract:

Home gardening is still largely more art than science. While sensor solutions exist for professional farmers, few cheap and convenient devices exist for the home gardener. The competition that does exist is either not robust enough or too expensive. Our project aims to create a cheap, robust, and wireless sensor platform that can be run on battery power for multiple years. This platform will remain outside in the field, communicating with a base station. Our prototype demonstrates the viability of such a platform while also demonstrating the ability to use cheap sensors and create a relatively disposable and simple platform.

Overview:

We chose sensors based on two criteria: price and user desirability. Relevant metrics for plants include ambient light, humidity, soil moisture, soil pH, temperature, and soil composition. Price is an extremely important issue, as this product will be considered a toy or gadget and not a necessity (as a professional product would be). Sensors for certain environmental attributes were simply too expensive to implement in our consumer product (the soil composition and soil pH sensors). Our product also does not require a high degree of measurement accuracy. This has the benefit of allowing us to use cheaper, lower accuracy, lower power sensors. We do not require much processing power for the sensor array as we are simply taking measurements and pushing them over RF. This allows us to use cheap, low power, slow processors. RF was also selected over Wi-Fi and other wireless technologies for its simplicity and cost effectiveness.

Prototype:

Sensor Assembly: The five sensors indicated above are queried by the Arduino Uno prototyping board, which then sends brief messages with the readings via the transmitter.


Receiver Assembly: The receiver translates the message for the sister Arduino Uno platform and prints them for the user.


Power Considerations:





Data Acquisition:

Our prototype contains five sensors; two temperature sensors (surface and ground), one humidity sensor, one light sensor, and one soil moisture sensor. Our two temperature sensors are both DS18B20 one wire digital sensors. While these sensors are convenient and digital (highly accurate), in a shipping commercial product we would most likely use simple thermistors because they draw less power (the settling time for the current temperature sensors is ~750ms), are cheaper, and can run at lower voltages. The accuracy of the current sensors is not required for our application. The humidity sensor we used was an analog HIH-4030 sensor. This sensor would be replaced by a cheaper, less accurate sensor capable of operating at a lower voltage in our final design. Our light sensor is a cheap generic photoresistor, and something similar would likely remain in the final design. Finally, our soil moisture sensor is a simple resistive soil moisture sensor. This type of sensor would likely be built in-house/aesthetically designed as it is exposed, but we would most likely continue using a resistivity type sensor because of cost and design reasons.

We use an Arduino based processor to acquire data. We go through each sensor, turn it on (they are powered by the processors digital output pins), take the measurement, and then turn it off again. Overall, this procedure lasts approximately 3.5 seconds. Once the raw data is acquired it is stored along with the previous four readings, and sent via the transmitter. In our final product we plan to acquire and send data once per hour.

Data Processing and Transmission:

Left: A single transmission packet, sending the 36 bit preamble, 12 bit start symbol, 1 byte message length, the message itself, and 2 bytes for the check sum.

Right: The transmitter data is depicted in white, with the receiver data in red, shown in real time.


We send raw sensor data over RF to a base station. We chose RF because it was cheap, on unlicensed spectrum, and is simple to implement. In future revisions we may choose to use Wi-Fi or a similar technology negating the need for a base station. We transmit raw values because they are small (integer read values are smaller than the float values that are the result of calculations). We also transmit a history of values as a way to ensure that missed data is eventually received (we only use one way communication). For transmission we use an Arduino protocol which sends data out using OOK. The protocol starts with “training bits” of alternating 1’s and 0’s followed by a known start sequence, the length of the transmission, the data itself, and then a checksum. The data packages split bytes into two 6 bit symbols sent high to low. The 4 bit sequences are mapped to 6 bit symbols that have a balance of 1’s and 0’s, which helps ensure that the averaging of the signal (i.e. distinguishing high from low) happens properly.

The raw data is received and decoded at the base station. The raw sensor data is then turned into meaningful outputs (e.g. temperature, lux, moisture level, % humidity). Some values are temperature dependent (specifically % humidity), and therefore this is processed first. An added value of transmitting raw values is that changes in calculation can be made even after the sensors are already in the field, meaning accuracy, speed, and bug fixes can continue without purchasing a new sensor array. The calculations necessary for these conversions is relatively low, meaning a similarly cheap/low power processor can be used at the base station. In the future, we would like to connect the base station (or sensor array itself) to the internet, allowing for data storage, processing, and analysis beyond what the capabilities of the microprocessors.

Results:

Our working prototype has confirmed that our idea is viable. Going forward, we would continue our search for cheap, low-power sensors, work on industrial design, potentially change wireless protocols, implement internet connectivity and a lower power processor such as the ATmega328 utilized by the Arduino board (running at 32 kHz as opposed to the current 16 MHz), and implement more data processing to recommend plants, and alert users to adverse conditions.