Eureka Manta +35 water sensor tested

One of the users of my adapters informed me that they have successfully tested the adapter with this sensor. This is a water sensor that does a lot: “turbidity, temperature, pH, conductivity, and dissolved oxygen sensors, with the option to add ORP and depth sensors” and quite a bit more, according to the manufacturer’s webpage:

Q/A UART version adapters

Q: I plan to integrate your adapters to my own controller, not a PC or raspberry pi USB port. Does your UART version adapter have all necessary resistors and no USB chip to interfere with the UART port? How do you make connection between the UART adapter and my own controller?

A: Yes, all necessary resistors are in place for the UART version of the adapter and the USB chip is not on the chip to interfere.
Here are some of the points:

  1. The adapter has a 6-pin header that is soldered underneath the adapter to avoid making jumper wires from being vertical, which takes extra space, or from going over the optional A/D header.
  2. The adapter requires 5V and GND to be supplied to it since it doesn’t have the 5V and GND from the USB connector. SDI-12 has 5V logic levels so the 5V supply.
  3. The 6-pin header has GND, TX_3V (back of board), 5V, RX, TX_5V, RST from left to right. This is where you power the adapter and connect to its serial port. RST is reset. Unless you want the option to reset the adapter, you can leave it disconnected. Reset is 5V logic.
  4. If your controller is 3.3V logic (ESP32, raspberry pi serial pins, rp2040 etc), connect your controller TX to adapter RX, then your controller RX to adapter TX_3V.
  5. If your controller is 5V logic (Arduino UNO, MEGA2560 etc), connect your controller TX to adapter RX, then your controller RX to adapter TX_5V.

The current states and brief history the SDI-12 USB adapters

Despite the ongoing chip shortage, I’ve secured a batch of processors for more adapters. At the moment I’ve also built enough stock to last for a little while.

So currently I have about 50 qty adapters including a few with analog inputs. I have more boards and ICs but want to conserve my parts. From what I saw, there won’t be a relief of chip shortage until a year from now, i.e. May 2023. I’ve maintained the price of $49 (sometimes $45) for the last decade by absorbing the cost of parts etc. I might be able to continue to do so if I get some help with assembly, such as getting a pick-and-place machine to place surface parts for me. But it’s an expensive machine.

Here is a brief history of my adapters:

In the summer of 2015, I came up with the idea to make a USB adapter that can make reading SDI-12 sensors easier, after having to deal with this protocol in a number of projects. This purple board was the first batch made at It is a small PCB fab business (they only collect orders and send to actual fab houses) on the west coast. They used to be called dorkbot PDX, a small group of electronics hobbists on the west coast trying to make affordable boards by banding together in their group orders.

First SDI-12 USB adapter prototype in November 2015

This board has the same general layout as the current version, with the miniUSB (maybe my obsession or did I just purchase too many of these connectors?!), USB-UART chip from FTDI, an atmega328p-au, and a programming header. Back then I only had a single terminal for an SDI-12 sensor and had no option to supply external power, well, not easily:

Connecting to external power 2016

Back in the days, I was using a terminal program to talk to the adapter and wrote a macro based of the terminal program to automate data collection. In 2016, I started learning Python more seriously, maybe it’s from raspberry pi, or maybe it was trying to teach physics with some computing elements, or just having to learn it to do projects. So here comes the logging script, in its primitive form in early 2016:

Python script running on Raspberry pi in Feb. 2016

I also started marketing the adapter as compatible with WIN/NIX/MACOS/RPI because back then Python 3.x was able to bring a more consistent programming experience across these systems that Python 2.x was never able to.

Back then, IoT (Internet of Things) was in its very primitive stage and not many places allowed data to be uploaded and presented online. I started with Sparkfun’s Phant server and, not sure which one first.

Logging data to the internet in April 2016

Later in 2016, I realized there were some need for high precision analog inputs and added the SDI-12 USB + Analog adapter to the lineup. This is the first prototype, in purple as purple. Placing the tiny analog-to-digital adapter used to be nerve wracking. I have since mastered it.

SDI-12 + Analog USB adapter in November 2016

I had a number of interesting projects in 2016-17 and didn’t do a lot on the SDI-12 USB adapters until later in 2017, when I had a project that required collecting GPS data with the sensor so I designed this for the project and general use.

SDI-12 + GPS USB adapter in July 2017

Back then, the basic adapter was still a small half-sized green board with a single SDI-12 terminal. That was able to change:

Full-sized (since then) SDI-12 USB adapter in March 2018

I didn’t market this as a separate adapter because I had high hope that this will replace the more expensive GPS adapter but the hardware didn’t support GPS. So, I started marketing this as a full-sized adapter at the same price point, $49, and gradually retired the half-sized green boards with single terminals. Starting with this version, I added external power connection and a jumper to select between 5V from USB, where most sensors work fine, and the external power terminal, where you can supply your own DC voltage such as 12V. This feature came from the Analog and GPS adapters.

Later in 2018, I redesigned the basic adapter to mostly today’s look and feel. It now has the 4 terminals, power input and selector on the left and right sides, optional basic analog and digital inputs on top, and an extension port in the middle, with an option of UART instead of USB as well.

Very recognizable look of SDI-12 USB adapter in May 2018

Here is a look at two high resolution analog extension boards on top of the basic adapter. I completed updating the code to take inputs and auto scale the inputs, for up to 4 such extension boards:

High resolution analog input extension boards May 2018

I also added extra SDI-12 terminals extension board to help manage the many wires you may have to manage if you want to connect more sensors.

I have also started customizing my adapters to connect to other sensors, such as the following with accelerometers, from special requests.

Customized adapter with accelerometers June 2018

Later that summer, I designed my own data logger! This was based on the idea of having an embedded SDI-12 processing unit, an analog input, and then an ESP32 processor running a new thing called microPython, new and getting traction back then, both the processor and software, now they’ve become major hardware and software players, if not dominating the IoT. This logger is very promising, with WiFi, Xbee, possibility of 4G LTE-M, sd card, real-time clock, and lots of expension!

My own complete WiFi Xbee GSM etc. data logger July 2018

Lots of things have been happening back then and I did a few rounds of firmware development but didn’t end up releasing this logger! Some of you may know that the spirit of this logger lives on and is thriving in a different sector of the industry! The following look may be familiar?

My logger in an SK-16 enclosure August 2018

In early 2019, I added the UART interface adapter to the lineup, based off the same board as USB interfaced adapter, due to an increase of demand to interface with Arduino, ESP32 etc.

UART adapter March 2019

In June, I contemplated using larger terminals based on user feedback. I decided, in order to maintain the same size and look, I can use 0.175″ pitch terminals instead of 0.1″. This makes the terminals accept thicker wires and separate the wires further for installation and prevent short circuits.

Comparison of 0.1″ and 0.175″ pitch terminals July 2019

Now this looks really really like what I’m selling today:

SDI-12 USB Adapter July 2019

I have also been logging data from my own back yard to demonstrate and test my logging scripts:

My backyard sensor run in the summer of 2019

I was even able to determine that after heavy rainfalls I always had power outage on my logger (see long flat blue lines after spikes). It turned out to be a faulty outdoor outlet in my house tripping up the circuit breaker after heavy rain water seeped into it causing short circuit. I later fixed it:

Bad outdoor outlet I replaced in 2019
Good one I installed in 2019

Lots of things were happening later in 2019, besides what you all know, so I didn’t touch my designs until MUCH later, in early 2021. I added a protection diode to fight 12V accidentally damaging the adapter by operators’ errors.

Adapter with protection diode February 2021

As many of use know, IC shortage soon hit the main street manufacturing. Here was a screen grab of the long way, from 2021:

Chip shortage starting showing long lead times, over 1 year, June 2021

Luckily I was well stocked at the year end of 2020! Now it has become a constant thing in the back of my mind, find parts and stock up!

Showing my stock of parts in 2021 to weather the “temporary” shortage in 2021

Over the years, I got a lot of good suggestions from users. Here is one suggestion to try and read data from a phone. This only works on an android and requires a wire between the adapter and the phone, but it’s a good start.

I started experimenting with android phone and my adapter July 2021

Here is another request from users to handle more sensors with easier terminals and combat the environments. I designed this to fit inside a specific enclosure, the same one I used for my own logger, which was now 3-4 yr old and didn’t get an update (I did update it but didn’t build a prototype). I started selling this to a research group for their projects but held back because I didn’t have many chips left (and it may be a lookalike to something else too)!

SDI-12 USB SK-16 adapter February 2022

I was literally counting my chips at this point! Fortunately I found a small batch of the processor in a smaller form factor and decided to take a risk with the supplier. So now we have a new revision. The protection diode has been replaced by a surface mount version but I’ve kept the thruhole part footprint because I bought a batch of the thruhole diodes, just in case. So if you see your board has an orange diode, or no such diode but a small black box on the top right, both are fine!

New design with smaller processor April 2022

The smaller processor takes quite a bit more time to place and I always place it before all other parts so I can turn the board around to see if I placed it perfectly or not. There aren’t any pins on the chip so it’s harder to check. Hopefully when I get a pick and place machine, I don’t have to worry about it.

Size comparison between the two processors April 2022

So there you have it! I forgot I was planning for a brief history. As a closing remark, I’ve seen the gradual shift of users of this adapter from almost entirely academic research to an increasing percentage of applications to more individual users. What’s not changed is that people love simple and inexpensive solutions to their data logging needs and I’m proud that my adapters have met their needs so far! Thanks for your time!

SDI-12 USB adapter family portrait May 2022

SDI-12 USB adapter Apr 2022 revision is out

So the new revision is finally out! The processor is so small it took me extra time to make sure it’s in the right spot. The pitch between the small processor’s pads is 0.45mm or 0.018 inches so I can’t miss by half of that, usually 1/4 of the pitch, thus 0.0044 inches of tolerance, so less than 5 mils. The following shows how small the processor is. Overall it is 4mm (0.16 inches) wide (see E).

Another change is the protection diode. To deal with constant shortage of various parts, I’ve added a surface-mount diode of the same type near the top right terminal block, the little black box. This way if I run out of the big orange diode I can use the surface mount ones. The two diodes are literally the same, just packaged differently, same for the processors. I have about a dozen or less of the current revision (Oct 2021) and will start making the new revisions since I literally will run out of both Oct 2021 revision boards and processors this week. I will have plenty of the new revision boards, enough for this year and maybe even part of next year!

Here is a close-up:

New bulk SDI-12 USB order packaging

The above is an order of 9 adapters. So if you have received your order of SDI-12 USB adapters in a stack of boards, hope you will make good use of the M3 standoffs! I’ve been shipping bulk quantities of the adapters lately due to an increase of quantities per order. I thought, the anti-static bags are cheap but are waste once the adapter has been received. So if I could pack the adapters better, I may be able to ship more adapters with a more compact box. Also the standoffs are nice to have for anyone who will mount the adapters in boxes. If there has been any problems with this bulk packaging, please let me know!

Here is another order of 6 adapters.

Availability of SDI-12 USB adapters

Due to the chip shortage, I was unable to make more batches of USB adapters lately and the stock has gone down to zero for some time. Lately I’ve found a small batch of chips to make two small batches to fill out recent orders and have some extra to sell on my square store again. This small batch of chips will not last very long. There’s about a dozen of SDI-12 USB adapters and a few SDI-12 + Analog USB adapters that are in stock. Meanwhile, I’ve sourced a different processor package and am in the process of making updates to my designs to use these new processors. Here is a comparison between the existing processor package (TQFP-32) on the left and the new processor package (QFN-28) on the right.

As you can see, the new package is quite a bit smaller and you can’t even see any pins as there aren’t any. There are metal pads under the processor. The only difference between the processors is how the processor is packaged. The existing adapters use the thin-quad-flat-pack with 32 pins while the new adapters will be using the quad-flat-pack-no-pin with 28 pins. The 4 missing pins are not used by the adapter so there’s no difference. Since the new design is still under development/prototype stage, I’ll still be selling remaining adapters based on the existing design until I completely run out of parts to make them, which is very soon. Here is a comparison of the existing and new designs. The one on the right with a smaller processor at the bottom is the new design:

So not too much has changed. I do, on the other hand, have a new variant that I want to float here: Remove the 12-pole connector at the top. Replace it with a 5V->12V boost converter. This will also remove the power selection jumper and external power terminal because the adapter will provide 12V with the boost converter. Having a 12V is more desirable than the default 5V from USB because some sensors require 12V or minimal 7.5V to operate and you must attach an AC adapter. If you see the benefit of such a variant (my main design remains unchanged), please respond so I can gauge the level of interest. Once my prototyping is done and I’m certain my design works fine, I can make a small batch of the variants that have the boost converter if there’s enough interest. Here is what it looks like:

I have added a 5th terminal for SDI-12 sensors where the external power terminal was. The tentative price is $59. It saves you from having to purchase a separate 12V adapter for each USB adapter and the hassle to wire the adapter. Since I removed the 12-pole terminal and the associated 4 analog pins, it makes routing easier and I used a double footprint of the processor so the board can be assembled with either processor.

How I am programming and testing an SDI-12 USB adapter

In case you wonder how I managed to program and test all the adapters I sell, here is a video for that:

So I made a programming jig and put it in a box. I then have two terminal programs open, one for the programming jig’s control and the other for sending test commands to the SDI-12 adapter. I plan to write a Python script to further automate this process.

Sentek SDI-12 soil probe troubleshooting

A number of years ago, I had an opportunity to use a Sentek SDI-12 soil probe with 16 sensor nodes in the probe. It was quite something! Lots of data to extract and lots of measurement and data commands to issue. I think that my experience with the probe helped me better understand SDI-12 protocol and ultimately helped me develop and test my SDI-12 USB adapter’s firmware. Recently one of my customers reached out to me regarding troubleshooting tips with this sensor. I felt quite interested to help and refresh my memory on how to properly use the sensor. Here are the troubleshooting tips in case you need them.

First of all, the sensor probe has multiple sensor nodes, making it require longer delays before data can be extracted from it. According to the manual, if you have 16 sensor nodes, the complete moisture measurement M! could take up to 13 seconds (first 9 sensors in the probe), then M1! could take up to 11 seconds (next 7 sensors in the probe). Salinity takes up to 23 seconds with M2! (first 9 sensors in the probe), then M3! could take up to 18 seconds (next 7 sensors in the probe). Temperature and humidity measurements are faster so they only take up to 5 seconds for all 16 sensors.

So if you have more than 9 sensor nodes, you need all measurement commands M! (AKA M0!) thru M7!. If you have 9 sensor nodes or less, you only need M!, M2!, M4!, and M6!.

What this means to you is, you must use my logging script version 1.6.x, which allows you to enter multiple measurement commands per sensor address. For instance, you have 16 sensor nodes, you want all measurements, you can enter 01234567 when asked what measurement commands to use. The ‘0’ means the M! command, which is also known as M0!. Then ‘1’ means M1! command. If you only have 9 or less sensors and you want all data, you need to enter 0246 for all measurements. But if you only want moisture and temperature nothing else, you would use 04.

Next, you want your delay between data points to be longer than these values. If you wish to save ALL data every minute, and you have 16 sensor nodes, this may be too little delay. You can try out delay between data yourself. If you see -999.999, then you need to increase your delay.

Finally, because more sensor nodes require more time before data become available, you may have to increase the serial port timeout value from 10 to a larger value, if you’re not able to obtain data from your sensor.

ser.append(serial.Serial(port=port_device, baudrate=9600, timeout=10))

This is the line you need to change the timeout. The script only waits this long after issuing a measurement command before it times out. Increasing this value will NOT slow down your data collection. The time your sensor requires to get data determines how much time is need to get your data.

Want USB AND UART/Serial both?

While it is impossible to have both USB and UART/Serial interfaces simultaneously, you CAN switch between them with the UART-version of the SDI-12 adapter and the help of an extra adapter (for USB interface).

SDI-12 USB adapters on a map

[UPDATED] I’ve been thinking about making a map of where the SDI-12 USB adapters have gone to. Now it’s finally taking shape, thanks to my son. It includes locations I shipped SDI-12 USB adapters to between 2019 and March of 2022. I’ll get more locations added to it for later this year but too bad PayPal doesn’t keep records older than 2019. I am only putting the city and country for each package, without postal code or any details of where. In case you wish something removed or corrected, please drop me a message. If you want to leave a message for others to see, you are very welcome to do so! The map may not work on some devices but I’ll migrate it to google map sometime soon.