-
Long-range off-the-grid communications
-
Meshtastic
- LoRa sub-GHz radio band, e.g. 915MHz in the US
- mesh, broadcast, forwarding, max 7 hops
- normal use case – short text messages
-
MeshCore
- LoRa sub-GHz radio band, e.g. 915MHz in the US
- mesh, using path learning
- AES encryption
- devices have fixed roles: companion radio, repeater, room server, stand-alone device
- Reticulum
- LoRa and/or HAM
- APRS – Automatic Packet Reporting System “Packet Radio”
- Digipeaters
- aprs.fi
- APRS – Automatic Packet Reporting System “Packet Radio”
-
-
Wireless Personal-Area Networks
-
BSR X-10
- power line transmission
-
XBee
-
Zigbee
- 6LoWPAN/IEEE 802.15.4
- 2.4GHz, sub-GHz, e.g. 915MHz radio bands
- 10-100 meters, line-of-sight
- star, tree, mesh
- Zigbee coordinator (ZC), router (ZR), end device (ZED)
- encryption
- optimized for battery-operated devices
- network layer, application layer, Zigbee device objects (ZDO), manufacturer-specified application objects
-
Z-Wave
- sub-GHz radio band, e.g. 915MHz in the US
-
painlessMesh
-
Thread
- 6LoWPAN/IEEE 802.15.4
- 2.4GHz radio band
- can be run on ESP32, perhaps on ESP8266
- IP-addressable
- cloud access
- AES encryption
- optimized for low-power and battery-operated devices
- open-source implementation OpenThread via Google
- OpenThread network simulator
-
Tasmota
- Protocol for ESP devices
- Supports Matter, but only (so far) over WiFi
-
Matter
- Lives atop Thread; can also live atop WiFi
-
Category: Data Collection
Chuck’s SDP Links
Articles especially pertinent to Senior Design Projects
“In theory, there’s no difference between theory and practice. In practice, however…”
Please share the problems you encounter! Participation builds a stronger community.
A must-watch video: Mistakes to avoid when designing a PCB I have seen most of these bite SDP teams where it hurts…
More board design points: ESD Protection for Your Board
Design Patterns — Useful schematics in KiCad — Really excellent presentation about making your schematics readable!
More design patterns, this time from TI
And yet more copy-paste sub-circuits culled from Github
Long-term waterproofing for submerged projects (much more at the Cave Perl Project)
Detecting hidden cameras post from Hackaday
And more on detecting hidden electronic devices
Designing circuitry for BLDC motor control, including ADCs, FET choice, gate drivers, and big high-current motors in industrial robots
U.Illinois Robotic Systems book – work in progress. In particular, this book already has nice sections on forward and reverse kinematics.
Switching Mains Power – not fully investigated yet. A place to start your investigation.
Sonoff S31 Mains Power Switches
Surface-mount soldering tutorial
Soldering the Tektronix Way – Training Videos
“Ideal Diodes”: Protect Your Project from Reversed Polarity Power
Overcoming the parasitic capacitance of a photodiode
Decoupling Capacitors – 0.1µF is suboptimal
Don’t use Nyquist as your only criterion for choosing a sampling rate
RP2040 resources from Cornell from their microprocessor design course ECE 4760
Wearable sensor for continuous analysis of sweat
Astrophotography and the new HD Raspberry Pi Camera
Raspberry Pi HD Camera for astrophotography
AstroPitography | Dr Adam Luke Baskerville
My DIY 8″ Telescope & Raspberry Pi HQ Camera
Astrophotography with Raspberry Pi HQ Camera and Celestron Astromaster 130 EQ
I2CWrapper – Using microcontrollers to translate I2C for non-I2C devices
System for digital signing of photographs
… and breaking the system for digital signing of photographs
Forest-deployed wildfire sensing and reporting system
New series of ATtiny µP eliminates requirement for dedicated pins
And also for JDP
Some insight into the design process for audio pedals (note: using STM32!)
Blogs and Vlogs
Engineering, specifically EE, CompE
Eric Bogatin – Practical EE/CompE fundamentals and practical skills
Andreas Spiess – LoRa, low-power, sensor networks, ESP8266, ESP32
Jay Bowles – The Plasma Channel – Plasma physics experiments (usually involving high voltage)
e.g. Using High Voltage to Obtain Water from Coastal Fog in the Desert
David Jones – EEVblog; instrumentation, troubleshooting, repair
Bil Herd – electrical engineer, designer at Commodore; CPLD, PLL
Moritz Klein – Audio electronics
Fran Blanche – FranLab; Apollo flight computer, DSKY, FranTone audio pedals
Big Clive – tear-downs
Ben Krasnow – Applied Science; including electronics; how he built his own electron microscope
Alan [w2aew] – tutorials on components; ham radio; RF
Security
Steve Gibson – Security Now podcast – a MUST for computer security folks; good episodes on internet components
Science & Math
Michael Stevens – Vsauce, The Mind Field
Grant Sanderson – 3Blue1Brown; math concepts, including a good visualization of Fourier analysis
Ben Sparks, Holly Krieger – Numberphile; math concepts, including large numbers and number theory
Matt Parker – Stand-Up Maths, lectures at Royal Institution
Brady Heywood – Understanding Complexity, complexity theory
Grady Hillhouse – Practical Engineering, particularly civil engineering
Steve Mould – Science vlogs, how things work
Collin Cunningham – “Lab Notes”, quick videos about electrical components and Adafruit products
Making, Robots, and Machinery
Adam Savage – amazing maker, MythBusters
Simone Giertz – general making, silly projects
Jeremy Fielding – general EE topics; built a cool robot arm
Tim Hunkin – very fun arcade game maker – machining tips
Other Sites of Topical Interest
The Cave Pearl Project – remote underwater sensing; excellent documentation of battery systems, sensors, builds
Cornell’s ECE Department posts some interesting projects
Interesting circuit uses only two wires for power and status (not TWI)
Comparison of manufacturers of PCBs in small quantities (incl. PCBWay, OSHPark, and JLCPCB)
How to use a thermal camera to troubleshoot electronics projects
Failures are important, and sharing them is more so
An interesting cascade of failures
Mechanical analog fire-control computers
FloodNet – distributed flood sensing system for NYC
Acoustic detection of water leaks
Circuit board for a differential oscilloscope probe
Three designs for bidirectional voltage level shifting
Introduction to Kalman Filters, useful for combining data from multiple sources
(Mis)using LoRa nodes to sense soil moisture
Microphone array to isolate individual voices
Using the Matter protocol on ESP32
Building or buying contact piezo microphones
Internet Black Hole – Danger!
Destin Sandlin – SmarterEveryDay; how stuff works, including helicopters, nuclear subs, the James Webb space telescope
Derek Muller (PhD Physics) – Veritasium
Mark Rober – e.g. squirrel obstacle course, glitter bomb, world’s smallest Nerf gun
Markus Voelter – Omega Tau podcast; aviation, gliders, rides in fighters. Half of his podcasts are in English; the other half in German. Sadly, not being updated since a few years ago…
Scary (but interesting) stuff – Don’t do this at home (nor at M5, nor for SDP)!!!
Mehdi Sadaghdar – ElectroBOOM; high-voltage stuff; fun to watch
Colin Furze – crazy powerful builds
Plasma Channel – plasma thrusters, very high voltage projects
Styro Pyro – big scary lasers
Apparatus to monitor the cycling of the hot tub pump
It’s working.
I may be having a problem with my hot tub pump – it’s running with shorter cycles than I remember it. That’s better for close temperature control, but worse for stress on the motor.
I had a problem with the pump’s computer unit once before – it was overheating and cycling more and more rapidly. So now I want to monitor it to see if its cycling is getting faster.
I can’t monitor it using a current sensor, since those ones I have are rated for 10A at 120V, while the motor unit uses 15A at 120V.
So I built a monitoring system – weather sealed a 1″ piezo disk, breadboarded a JFET amplifier for it, connected it to an ESP8266 microcontroller which I programmed to take readings at 480Hz, dot-product out the components at 60Hz and 120Hz (which for some reason is stronger) and send them via WiFi to my MQTT server, from which I scoop them with a Perl script to a log file (for now). I’ve determined the best discriminant between non-running and running with a z-score of 6.6+ from each, so I know it’s pretty good.
Now I can relax for a while while the data accumulates…
Data from the 60Hz and 120Hz dot-products:
7-Dec-2021 14:02:18: home/hot_tub_motor/a02/value/couplet -> 32.839 16.014 7-Dec-2021 14:02:24: home/hot_tub_motor/a02/value/couplet -> 29.103 16.061 7-Dec-2021 14:02:29: home/hot_tub_motor/a02/value/couplet -> 29.301 16.638 7-Dec-2021 14:02:35: home/hot_tub_motor/a02/value/couplet -> 32.062 17.769 7-Dec-2021 14:02:40: home/hot_tub_motor/a02/value/couplet -> 28.854 16.440 7-Dec-2021 14:02:45: home/hot_tub_motor/a02/value/couplet -> 33.069 16.328 7-Dec-2021 14:02:51: home/hot_tub_motor/a02/value/couplet -> 28.665 17.092 7-Dec-2021 14:02:56: home/hot_tub_motor/a02/value/couplet -> 28.019 18.892 7-Dec-2021 14:03:03: home/hot_tub_motor/a02/value/couplet -> 32.541 17.647 7-Dec-2021 14:03:07: home/hot_tub_motor/a02/value/couplet -> 29.323 16.411 7-Dec-2021 14:03:12: home/hot_tub_motor/a02/value/couplet -> 69.411 58.708 7-Dec-2021 14:03:17: home/hot_tub_motor/a02/value/couplet -> 38.942 56.288 7-Dec-2021 14:03:24: home/hot_tub_motor/a02/value/couplet -> 16.419 50.588 7-Dec-2021 14:03:32: home/hot_tub_motor/a02/value/couplet -> 25.903 59.193 7-Dec-2021 14:03:33: home/hot_tub_motor/a02/value/couplet -> 70.220 61.097 7-Dec-2021 14:03:40: home/hot_tub_motor/a02/value/couplet -> 60.011 61.728 7-Dec-2021 14:03:44: home/hot_tub_motor/a02/value/couplet -> 17.743 51.550 7-Dec-2021 14:03:49: home/hot_tub_motor/a02/value/couplet -> 37.571 57.612 7-Dec-2021 14:03:55: home/hot_tub_motor/a02/value/couplet -> 72.898 57.997 7-Dec-2021 14:04:00: home/hot_tub_motor/a02/value/couplet -> 23.630 55.861 7-Dec-2021 14:04:06: home/hot_tub_motor/a02/value/couplet -> 41.698 62.395 7-Dec-2021 14:04:11: home/hot_tub_motor/a02/value/couplet -> 56.960 59.568 7-Dec-2021 14:04:18: home/hot_tub_motor/a02/value/couplet -> 15.589 50.445 7-Dec-2021 14:04:22: home/hot_tub_motor/a02/value/couplet -> 71.046 62.314 7-Dec-2021 14:04:27: home/hot_tub_motor/a02/value/couplet -> 16.098 46.108 7-Dec-2021 14:04:32: home/hot_tub_motor/a02/value/couplet -> 70.857 61.175 7-Dec-2021 14:04:39: home/hot_tub_motor/a02/value/couplet -> 16.661 53.204 7-Dec-2021 14:04:45: home/hot_tub_motor/a02/value/couplet -> 73.267 63.262 7-Dec-2021 14:04:48: home/hot_tub_motor/a02/value/couplet -> 14.290 54.907 7-Dec-2021 14:04:54: home/hot_tub_motor/a02/value/couplet -> 70.185 61.067 7-Dec-2021 14:05:01: home/hot_tub_motor/a02/value/couplet -> 22.880 57.029 7-Dec-2021 14:05:06: home/hot_tub_motor/a02/value/couplet -> 51.657 55.721 7-Dec-2021 14:05:10: home/hot_tub_motor/a02/value/couplet -> 47.116 61.623
The hot tub motor started up at 14:03:12.
Data discriminated into “off” and “on”:
About to subscribe to topic 'home/hot_tub_motor/a02/status' 7-Dec-2021 14:42:21: home/hot_tub_motor/a02/status -> 0 7-Dec-2021 14:52:23: home/hot_tub_motor/a02/status -> 1 7-Dec-2021 15:03:02: home/hot_tub_motor/a02/status -> 0
I’m not sure why the vibration is at 120Hz and not at 60Hz. I’ll have to think about AC motors and how they operate now.
Yay! Another investigation!
Watchdog watchdog
Well. It’s been a while. Here’s what’s new:
I monitor my heating system (temperatures, zone activation) with an Arduino, and relay the values to my home monitoring system through an ESP-01 / ESP8266. The Arduino occasionally hangs up.
I have tried to fix this by checking the power supply for good clean power; by making it reboot itself every 24 hours; by enabling the ATmega328’s watchdog timer. It still hangs up.
When it is running, it flashes an LED connected to the standard pin 13 of the Arduino. I recalled seeing that a 555 timer could be used as a missing-pulse detector. This would trigger if the 1Hz flashing stops. Cool. The missing pulse detector takes its output low during pulse starvation, and takes it high during the happy times when the pulses continue. I needed to take that prolonged low value and turn it into a one-shot pulse to drop and resume the power to the Arduino, and a second 555 could be configured as a one-shot to create this pulse. I had to add a capacitor in between to prevent continuous retriggering of the second 555, which would keep the power off to the Arduino.
The circuit “1” in the schematic illustrates this setup.
I happened to have a 556 handy, which comprises the functionality of two 555 timers. The equivalent simpler circuit is “2” in the schematic.
But, duh. I’m really more of a programmer at heart. And I had some ATtiny85 chips around. So I created an Arduino program to embody all the above functionality in a much simpler circuit – “3” in the schematic.
Note: in the code and the schematic the name ATmega refers to the (processor on the) Arduino board.
And I put it all onto a very small solderless breadboard. Since I needed regulated 5V to feed all the components, I put standard voltage regulation onto the breadboard as well.

The Arduino program was very simple:
/*
Watchdog_watchdog
One of my Arduinos, the one that monitors temperatures and zone activations
in my heating system, occasionally hangs up. This despite the fact that I'm
using the ATmega watchdog to automatically reset it if it hangs. Dunno why.
The power seems good and stable. I've tried replacing the ATmega chip.
I've decided to kill a flea with a cannon. The ATmega blinks an LED at 1Hz
to indicate that it's still alive - I call this a throbber. The ATtiny will
monitor the throbber and if it stops, it will power-cycle the ATmega.
Hah.
The MOSFET in question will be a p-channel MOSFET configured on the high side
of the power to the ATmega; when its gate is pulled low, it allows power to
flow to the ATmega. The specific MOSFET I'm using is a 5LP01SP, which is a
p-channel device whose pins are 1=source, 2=drain, 3=gate.
*/
#define pdThrobber_in 3
#define pdMOSFET 4
const unsigned long resetAfter_ms = 2000UL;
unsigned long lastThrobAt_ms = 0UL;
void setup() {
pinMode ( pdThrobber_in, INPUT );
pinMode ( pdMOSFET, OUTPUT );
}
void loop() {
static int throbberStatePrevious = 0;
int throbberState = digitalRead ( pdThrobber_in );
if ( throbberState != throbberStatePrevious ) {
lastThrobAt_ms = millis();
throbberStatePrevious = throbberState;
}
if ( ( millis() - lastThrobAt_ms ) > resetAfter_ms ) {
// BOOM. Cause a reset
digitalWrite ( pdMOSFET, 1 ); // turns off ATmega
delay ( 500 );
digitalWrite ( pdMOSFET, 0 );
delay ( 5000 ); // time enough to let the ATmega boot up
lastThrobAt_ms = millis(); // reset the watchdog
}
}
EBD-USB+ Electronic Load – Testing Power Supplies and Batteries
I watched a video from Andreas Speiss reviewing electronic loads, and identifying one in particular called EBD-USB+ from zketech.com and purchased through Amazon or Banggood or wherever. The software is a little hard to find, but it’s available through this link. It comes as a .rar file, which you might need to unpack with 7-zip or Winzip. You will also need the driver.
[Read More...]Teensy, touch sensing, and ESP8266 – via MQTT and Raspberry Pi
Whee!
I have a demo/development setup on a small breadboard which powers an ESP-01 ( the small, cheap, 8-pin breakout board for an ESP8266 chip ). In addition to being a programming board, it has 3v3 voltage regulation, a pot, a temperature sensor, a simple LED, and a WS2812 3-color LED. I have the installed ESP8266 running a program to subscribe to an MQTT broker and light the LEDs according to publications on a certain topic.
[Read More...]Calculating the Axis of Nutation of my Solar Tracker
Following on the cluster analysis of the last post, I pairwise crossed (as in cross-multiply) the resulting cluster centers, and got three reasonably-close vectors after normalization. These were:
0 x 1: (-0.36, 0.93, -0.10) 0 x 2: (-0.23, 0.97, -0.06) 1 x 2: (-0.20, 0.97, -0.14)
While satisfyingly close, I wanted to do better.
[Read More...]Instrumenting and Analyzing My Solar Tracker
I’m an instrumentation and data collection geek. I love the challenge of developing ways to monitor the systems of my house and making sure they’re working properly. I’ve had a couple bad experiences where systems failed and not knowing it soon enough caused problems.
[Read More...]