Design Progress | Week 6
- Oct 1, 2025
- 3 min read
Dates: 09/24/25 - 09/30/25
This week I wanted to move toward designing systems that are close to ready for implementation into the final product. There are four of note:
The IR Sensor System
The Haptic Response System
The User Interface (button controls) system
The Power System (charging, battery level, etc...)
Without the ADC multiplexer or Momentary/Latch buttons (currently in transit), I am limited in how much I can complete for the IR Sensor system and User Interface System. However aside from creating functional prototypes in all four categories, I have made strong advancements recently for both the Haptic Response System and Power System, with some minor advancements to the IR Sensor System.
Starting with the IR Sensor System, I have finished converting each of the 8 pin ribbon connectors to 5 pin ribbon connectors, and connected 5 sensors to the previous wearable prototype setup along with an early iteration of the face shield:
Next, for the power system, I finished designing a battery level detection system to offer a percentage value referring to the remaining capacity of a battery. I used a standard 9V block battery for this, and will have to change the voltage divider setup once I switch over to our production battery (needed to determine voltage output of battery and protect ADC pin for 3.3V conversion).

A video demo of this system in action can be found below:
On the software side, we start by setting up some parameters for the program:

I used two voltage dividers in series in order to bring down the voltage to around 3.3V max (I was limited to 10k and 20k ohm resistors), so after defining my reference voltage and ADC maximum 16 bit value, I perform the following arithmetic to convert the ADC node voltage back to the original voltage value from the battery:

I had to directly solder the leads from the barrell jack connector to drive the battery straight into the node, rather than using the HM Buck converter (needed the raw voltage from the battery not a dimmed down one).
Also in the above code I denote the battery's full and empty status (according to online datasheets for energizer 9V block battery), and assigned piecewise calibration points (I was getting wonky readings compared to multimeter likely due to tolerance of components, so I calibrated measurements). Below is where I applied that calibration (basic linear interpolation):

We have two functions here, one (read_batt) which obtains the raw ADC reading from the Pico pin and returns some important values (including calibrated voltage), and one (batt_percent) which converts this value from a voltage to a percentage capacity.

The mail loop reads all values, calculates percent, and prints everything to the terminal.

Finally, for the Haptic Response system, I finally introduced the Toshiba ULN2803APG Darlingtron Transistor Array which is being used as the system's motor driver. Each input pin from the Pico controls a transistor, which sinks current to ground for a single motor, receiving 3.3V logic from the Pico with fly-back diodes present to protect the pico from voltage spikes inherent to PWM motor control (especially with more than one at a time). I also finished soldering the remainder of the connectors to each individual motor PCB:

This new device can be found below, along with all other affected systems from this week.

A video demo for this system can be found below:
In terms of software for this system, we start by assigning parameters. Motor GPIO pins, PWM frequency, Duty value, motor mapping array, all things we've done previously in earlier prototypes.

The same goes for assigning PWM intensity:

The a shut off valve for program reset:

Now, we can practice controlling each of the motors individually through the Darlington array as follows:

I perform two types of control tests, one 400ms pulse for each of the 8 motors sequentially, then a looping "gentle chase" with 200ms sequential pulses infinitely.







Comments