I’m building a robotics board that basically is a WiFi REST interface to a variety of I2C sensors - the I2C side uses an I2C switch driven by an ESP32. My first RBOT board arrived, but alas, I got schooled on surface mount part numbering.
My order of three blank RBOT boards arrived. I set aside this morning to solder all the surface mount parts onto the first one. Alas, I got schooled. Seems to be a theme these days.
This is a learning experience for me. The last board I laid out was 25 years ago and it was all through-hole parts. For RBOT I am using Eagle for schematic capture and board layout. It’s not like space is at a huge premium on my early boards but I did want to build experience with surface mount (SMD). I picked 0603 resistors and caps. I had researched parts using FindChips but actually ordered through Mouser.
What I didn’t know to look for was that there are 0603 sized parts in both inches (in) and millimeters (mm). And, true to the rule of 50-50-90(*) I ordered the mm when Eagle used in. Have you seen 0603 mm parts? I almost CANNOT see them they are so small - way too small for the board I laid out. Cheap lesson though since ordering the right parts was only $16 with shipping. But now I have to wait, and I lose a holiday day that I could have been soldering.
So instead I shifted gears to the other side of the puzzle: the sensor/actuator boards. I basically provide a standard 8-pin pinout over Ethernet that provides board main voltage (which is 6-15VDC, intended to be battery main voltage), 3.3VDC for sensor power, and the SDA and SDC lines for I2C. The idea is to make it super easy to add a motor or a sensor and wire it with a short length of Ethernet cable. I’ll be blogging about my design later, but Ethernet is far better than telephone cable since it can actually support at least 60W of power delivery if you follow the Power-over-Ethernet specs. More importantly the capacitance of the insulation on the wires is far, far lower which makes I2C much more reliable even at many feet of distance. And with Ethernet cables you can make your own - no need to buy proprietary connectors (like Grove).
One of my core product philosophies is that I want folks to be able to hack/extend/make things that extend my system. That’s why I picked Ethernet cables for example. Some good friends have emphasized that even if I provide sensors that are cost-optimized that it would be ideal if I also provided some example devices that were Arduino based. This would make them much more approachable. This fits with my philosophy: I want to make a robotics/sensor platform that makes it easy to solve the painful parts and get to where you can write code sooner. Power and multiple I2C sensors, and multi-threading are severe impediments to really making more complex robotics using affordable off-the-shelf parts. But RBOT devices still need to be affordable and at least relatively small, so mainstream Arduino is out.
So I bought a few Pro Mini boards on Amazon - $16.88 for three with free shipping. It wasn’t until later I found some much cheaper ones for $2.29 each but the shipping from China would be slow or expensive or both. Amazon Prime is your friend!
I think I blew up the DTR input circuit on the first one I connected. Uploading a simple “blink” sketch from the Arduiono IDE didn’t work unless I pressed the reset button. Pulling out my scope probles I proved to myself that DTR was always low when it should have been high. Initially I thought it was my tty port (new Linux install) but some “stty” probing proved me wrong. Trying two other USB programmer units gave the same result. So now I had two different FTDI units and a CP2102 unit both with the same symptoms. Trying a second of the three Pro Mini boards was normal. DTR should have been high and go low but it stayed low all the time. Maybe the input capacitor on DTR shorted to ground? The schematic I have shows no way that could happen, but who knows if my schematic actually matches this Gikfun clone.
Anyway, problem solved and now instead of soldering surface mount things today I’ll instead be writing some Arduinio I2C client side code with this as a starting point. Because now I have to wait for parts. Instant gratification must wait.
- 50-50-90 rule: in any 50-50 chance situation you’ll be wrong 90% of the time. Old saying from my Navy submariner days. Meaning don’t leave things to chance. Know the answer, don’t guess.