System for Testing RFID Tags' Ability to Sense Humidity

For the past few weeks, I've been further examining the RFID Dogbone Tags. This time I'm testing their capability as capacitive humidity sensors. This article describes the system I built to test them out.

Shield Sandwich for Dogbone Tags

Shield Sandwich for Dogbone Tags

One problem that I've been having with burying the Smartrac Dogbone tags is that soil is that they break after some use. After taking a close look at some of the broken tags it appears that this is caused by the abrasive soil eventually cutting through the outer lamination of the Dogbone tags and then damaging the IC that controls the tag, causing them to become unresponsive. To counter this, I designed a two part protective enclosure for the tag that will hopefully protect them from damage. The design is outlined below:

Developing an altitude hold algorithm for a quadcopter

Currently, the user is responsible for throttle, pitch, roll and yaw - in theory, altitude hold would remove the need for the user to moderate throttle while GPS navigation would remove the need for the other three. The user would just need to flip a switch on the remote control, and the drone would use a sonar sensor to determine the altitude from the ground. The sonar is mounted on a gimbal so that regardless of the drone's orientation, it is always pointing at the ground.

System for Calibrating Dogbone RFID Moisture Sensors using Decagon 5TM Conductivity Sensor and I2C Communication

This blog post describes a system to log data that I will use to calibrate the Smartrac Dogbone RFID moisture sensing tags in soil using a Decagon 5TM moisture sensor. The goal of this system is to log both 5TM’s electric permittivity readings (ε) alongside Dogbone’s moisture sensor levels over a long period of time to make a relationship and eventually properly calibrate the Dogbone tags to the current industry standard, dielectric permittivity. 

Toward Comparing RFID Moisture Performance with Industry Standards: Decagon

Our previous experiments have shown the RFID moisture sensor tags are in-fact reading gradual changes in soil moisture content. The next step is to compare the performance, consistency, and resolution of these tags to industry standard equipment to see how it measures up using Decagon Devices soil moisture sensors. In this post, Chet gets a 5TM Soil Moisture and Temperature Sensor chatting directly with an Arduino to deploy in experiments, and eventually integrate into the battery of available Internet of Ag sensors.

Moisture Reader Update 3

Hi everyone, it's been a while since the last update with the moisture sensor and a lot of progress has been made in that time. Progress has been made with confirming moisture readings and on the code side of things.

After a few more rounds of testing I have confirmed that the tags, for sure, can be used to measure a range of moisture levels. The test involved dropping different volumes of water onto the edge of a tag's tail. The tail would soak some of that water up and onto the moisture sensitive part of the tag. The tails were about an inch long and increments of 25mL of water was dripped onto them using a precision eyedropper. The data (TABLE 1) showed a definite positive correlation which is good news. I also did a few trials on really wet and really dry soil and the tags were able to tell the difference between a desert and a swamp, although a more accurate of testing tags in soil was needed--which is where the next development comes into play.

TABLE 1. Table of tag measurements given a certian amount of water on the edge of the tail of a tag and a certian amount of time for the water to work its way up the tag.

TABLE 1. Table of tag measurements given a certian amount of water on the edge of the tail of a tag and a certian amount of time for the water to work its way up the tag.

Since the last post, I have gotten the RFID reader shield and the GPS logger shield to work together. I have added a polished example code bit onto the GitHub library. Available here, it records the average value of the RFID tag after 100 measurements then records measurement from a YL-69+YL-38 moisture sensor. The plan with this reader is to eventually use it to calibrate the values that we're currently receiving off of the RFID tags (0 for wet, 20 for dry). This will involve setting the YL probe and RFID tag onto the same soil sample and letting it sit there for a few days and take measurements periodically as the soil drys. After we get this data we will be able to tell how well the RFID tags will work for measuring soil moisture.

I have also gone through and updated a little bit of the other example codes to make them work better.

Cheers, Brett Stoddard

Drone build completed

It's been a while since we updated this blog on the drone build progress, but today the last part came in and the drone is officially flying! We still have to mount the RFID/GPS stack, so it's not autonomous, but it's flying very smoothly.

For the drone, we used:

CC3D Flight Controller

750kv 28-30 motors

30A SimonK ESCs

11" propellors

5000mAh 4s 25c battery

Flysky T6 transmitter/receiver

S500 frame

Here is a short video showing part of its maiden flight:

Also, you may recall in the last drone update, we documented an issue where the Arduino Uno microcontroller would shut off mid-flight - this was because of a faulty UBEC that wasn't supplying a steady 5v, forcing the Arduino's internal regulator to work overtime and thus overheating. Replacing the UBEC solved the issue. 

Now, we just have to program the autonomous navigation portion of the drone and mount the Arduino/RFID/GPS stack. 

RFID Sensor Update 2

Hi everyone, this week has been an exciting one for the world of OPEnS RFID moisture sensing. Since the update, we have found ways to make the sensors even more reliable and sensitive. Two updates have allowed for this development.

The first major modification came when "tails" were added to the RFID tag. These tails are made out of a paperlike material that's designed to suck up and hold and moisture it comes into contact with. The more moisture it touches, the more water it sucks up thanks to capillary action. Tails can be positioned on the sensor to hold the liquid in the most moisture sensitive area of the tag to maximize the accuracy of readings. Sure enough, as soon as we started gathering data with the tails attached the reliability of our measurements improved by a lot. An image from one of Smart Trac's technical documents showcases the tail below. All future testing will be done using these tags.

Image of a tail attached to an RFID tag

Image of a tail attached to an RFID tag

The second change was implemented on the software side of things. Before this week the sensor value was only read once and then outputted. The new code took 100 readings and then outputted the mean value. By using this method, more reliable and accurate readings were made. These new readings improved consistency across all of the tags for sensing extremely wet, extremely dry, and moist tail conditions. In the future, we will examine the exact distribution of the readings to determine the minimum number of readings that are needed to get a value with 80-90% certainty. The example code can be seen in this folder of the RFID library. This code is not yet optimized.

RFID Sensor Update

Hello all, it's been a while since the last sensor status but from now on I'll be working to increase my posting frequency.

Since the last update, many things have been happening on the sensor end. First, the OPEnS lab bought a new RFID module to interface with the Arduino UNO and have semi-officially scrapped the LinkSprite LSID-0702 reader. From here on out, we will be using the SparkFun Simultaneous RFID Reader - M6E Nano shield. I was really excited to get working with this reader because it's documentation is a lot more readable and through than the other modules I've worked with.

That documentation included a SparkFun proprietary library especially made for use with the Arduino UNO. I forked this library on GitHub and have been adding to it a few functions specifically geared towards reading the moisture information from Smart Trac RFID tags. For the most part, these functions seem to work! The original SparkFun library is available by clicking here. The OPEnS lab version of it that I have and will be adding to can be found by clicking here.

The rest of this blog post will be dedicated to the results of tests run to prove that the retrieved values are dependent on the actual moisture of the chips. "Wet" tags were held under a stream of moving water in the sink for five to ten seconds. "Dry" tags are either tags that were never wet or ones that were set out to dry for a few days. 

FIGURE 1. Raw, unprepared data from the serial port of the Arduino UNO when example code from the library is run.

FIGURE 1. Raw, unprepared data from the serial port of the Arduino UNO when example code from the library is run.

This data was gathered by modifying a read EPC byte command to read a different registry. What that means is that the data is unparced and looks gross. The important thing from this data is that the sensor code was reading a different number when it was wetted. When dry the tag had a value of either 12 or 14 HEX (18 or 20 decimal). Then when that same tag was run under the sink it read a value of 0C or 0C HEX (12 or 13 decimal). Being able to tell the difference between really wet and completely dry is a large step forward for this project and this data, if consistent, will allow us to do just that. However, as always, more testing will be needed to make this process robust enough for use in the field. 

--Brett Stoddard

Asynchronously Reading a Sonar Distance Sensor

To get the quadcopter to fly at a set altitude above crops, we need to use a distance sensor (or more likely, a combination of distance sensors). We're going to use a sonar distance sensor for at least part of the altitude calculation. However, the speed of sound is pretty slow. In the time it takes the sensor to send a ping and receive the echo, dozens of milliseconds could have passed. So we need to read it asynchronously. This turned out to be a little trickier than I first thought, so I made an instructable on it. You can read it here:


Getting in the air

A few weeks ago, I started putting together various different quadcopter builds and comparing cost, efficiency, and lifting power. I've come up with a few builds that I think are pretty solid:

I also had two drones laying around in my dorm that I'd built the previous year, and I figured I could use those to do some tests on how long they could stay in the air with a payload of a given weight, since that would give us concrete data on what specs might or might not work.

However, to do that I needed to rewrite the flight controller I'd written previously, because the old version used rate mode - which means that the quad didn't know which way was up, and it was up to the user to make sure it stayed pointing in the right direction. To carry a payload (and eventually navigate autonomously) I needed to make the quadcopter autolevel - meaning the flight controller needs to know which way is up, and can stay pointing up (instead of say, pitched 30 degrees forward). 

So for the last few days, I've been putting together a new flight controller paired with an IMU (instead of a standalone gyroscope) and trying to get that working. I had an issue that kept me grounded for about half a week where the MPU6050 (the IMU I'm using) wouldn't start up unless the Arduino Uno was plugged in through USB - I'm still not sure what exactly was causing that, but I wired it up to a UBEC and it worked fine.

Today, I flew the drone with a payload roughly the same weight as the RFID reader we'll be using - about 750 grams. The drone flew surprisingly well with the extra weight, although it was still very difficult to manage - the PID values are tuned for a drone about 750 grams lighter. Here's a picture of me trying my best to keep it in one spot (hence the facial expression):

However, I encountered an issue where it seems like the Arduino Uno shuts off randomly, while leaving the motors spinning - usually resulting in the drone flying into a wall or nearby bush. This isn't a very desirable outcome when carrying a sensor package worth almost $500, so I need to figure out what's causing that before we do any testing with it. I have a feeling it's due to a crappy solder connection on my part, so over spring break I think I'll just rebuild the whole thing and see if it keeps happening.

-Jonah Siekmann, URSA researcher

Tutorial Online!

Hello all, I just completed and published a how-to guide that walks you through how to use an Arduino to send an RSSI inventory command from the Cottonwood and published it to Instructables. It is available here so check it out!

Building a Drone

For this project, we'll need to construct a drone that will carry the RFID reader around a crop field. It'll need to remember the locations of every new RFID 'Dogbones' moisture sensor it encounters, and store the GPS coordinates so that it can return to the sensor later. We're not sure yet how much weight it'll need to carry, which leaves a lot of the the specs of the drone up in the air. We've come up with a general parts list, however, which includes the following:

CC3D Flight Controller

750KV Motor (x4)

30A ESC (x4)

4000mah 3s battery

12x4.5" propellors

650mm frame

Arduino Uno

GPS module

RC Transmitter/Receiver

Our idea for flying the drone autonomously involves hooking up the Arduino to the CC3D flight controller's RC receiver pins, and simulating the 1000-2000us pulses that the flight controller would expect from a receiver with the Arduino. This way, the CC3D flight controller does all the low-level attitude hold and hovering work, while the Arduino is free to read the GPS sensor and control the position of the quad by pretending to be an RC receiver.

We Broke It

Today the RFID team fried the Cottonwood when we supplied it with 12V instead of 5V. 

A new, better system was purchased and should be getting to us soon.

RSSI Moisture Test 1

Hello all, today the RFID team figured out how to use the Cottonwood to communicate with the Dogbone tags. To celebrate, we measured the Dogbone tag’s RSSI value in wet and dry conditions. This was done to see if RSSI value could be used as an indicator of moist conditions.

RSSI value is a measurement of received signal strength. It's an acronym for "received signal strength indicator". It's often used in WIFI signals. Here is a good article from MetaGeek that explains it further:

For this test, we read multiple RSSI values when the tag was dry first. We then wet a piece of paper behind the tag and recorded the RSSI values again. The picture below shows our setup. It should be noted that while wetting the tag we might have disturbed the system which would mean that our results will need to be backed up with further, more precise testing.



To receive the RSSI data, we sent an "Inventory Command with RSSI" command from the Arduino to the Cottonwood. The command was sent as a character array { 0x44 , 0x03 , 0x01 } and was taken from the Cottonwood's datasheet. We got back a message that contained the RSSI value in the third byte of the response. Below is a table with the RSSI values measured in wet and dry conditions.

This is the table of the data. As you can see the Q value average was higher than the Q value average in dry conditions. A higher RSSI in wet conditions could be attributed to the presence of water tuning the signal.

This is the table of the data. As you can see the Q value average was higher than the Q value average in dry conditions. A higher RSSI in wet conditions could be attributed to the presence of water tuning the signal.

In conclusion, there might be a slight correlation with moisture, but further testing is needed. Also, the distance between the antenna and tag is a large factor in the RSSI value and should be taken into consideration before implementation.

Powering up!

We received our Cottonwood UHF RFID reader today and are powering it up as we wait on our moisture RFID tags to arrive from SMARTEC.