High Speed Data Acquisition System

The Task

A GE manufacturing and assembly facility was just beginning a  factory acceptance test on a large, complex piece of equipment called a BOP stack, or blowout preventer stack. This 4-story tall piece of safety equipment has dozens of hydraulic functions, and engineers wanted to better understand how actuating one function can affect pressures in the other functions. Thus, I was asked to create a data acquisition system that could read up to  48 pressure sensors at 1000 Hz each. The system had to be waterproof to protect against exhaust from the hydraulic functions, and easy enough to use that any technician could use it.


The Hardware

What I came up with was a pelican case containing a National Instruments CompactDAQ system housing several high-speed analog input cards. I generated a BOM (including 5000 ft of instrumentation cable!) for sourcing to procure while I worked on the software, so that by the time the hardware came in, all I had to do was assemble everything, load on the software, and bring the system over to the GE facility.

With so many sensors and wires, it was essential to have good labeling in place so that there was no doubt of which port a sensor connected to. Thus, the ports and both ends of each wire were numbered, and the port numbers were also present in the software to be matched to each sensor's serial number.

The Software

The software I wrote to collect the data was written in LabVIEW. It allowed for simple entry of the necessary calibration information for each sensor, and the user could save and load sensor data to a file. Since many of the technicians were unfamiliar with the concepts of directories and file paths, these were automatically generated based on a few data fields the technician would fill out. There was also a convenient button that would open up the latest data file for verification before moving on to the next test.

Stack DAQ Screenshot

With so many sensors recording at high speed, it was essential to buffer the data to avoid losing any. Thus, I used the concept of queuing the data and reading from this queue when writing to a file.

Since many different technicians would be using the system, I made and released a guide to get up and running with the DAQ hardware and software:

Stack DAQ Guide

System in Action


Above is a photo of the system in action. The large piece of equipment in the background is the BOP, with dozens of pressure sensors attached at various key points.

Overall, the system was a great success, and the engineers were happy to get this type of data for the first time! Here is some feedback that I got from one of the engineers:

"Jeremy, Thanks for all of your hard work getting us set up to test the stacks. With your help we were able to use a lot of new technology to get data that we have never had before in this part of our business. Thanks for being so willing to help and deal with all of the setbacks we had!"

Connector Cycling System

The Task

This was a project for another GE facility that was performing cyclic testing on a piece of equipment called an H4 connector. They were expecting to perform the same series of hydraulic functions over 500 times, with each complete cycle taking around 20-30 minutes. Rather than have a technician manually actuate the various functions of the connector repeatedly (as they have done in the past), I was tasked to automate the process and acquire data from pressure sensors and LVDT position sensors.

The Hardware

I went to the facility to understand the test setup and required connections. I worked with one of my instrumentation technicians to acquire the appropriate sensors while I got to work on the programming and test system wiring. I put a cRIO, data acquisition cards, power supplies, relays, and an E-stop in a Pelican case to protect against any spray from the connector's functions. The end result I hooked into their existing test skid as shown below:


The Software

The LabVIEW program I wrote included data acquisition with sensor information tracking and calibration date verification. The automated testing included safety limits at every step, and the state transitions were determined by the testing procedure. At any time, the technician could pause the system or start cycling at any step in the process. Here is the software in action with the live data feed from a few cycles:


After a day of bug fixes and another day of training, the system performed well and was used to complete hundreds of cycles. The engineer on the project was pleased with the performance and gave me the following feedback:

"Thank you for all the support on the [connector] test. Your knowledge an expertise in Labview has allowed us to go from 20 cycles a day to 50 cycles a day using automation. This is a clear example of the GE Belief Learn and adapt to win by monitoring the test and making improvements along the way to help the test run smoother."

Data Acquisition Cart

A sister lab just began operations in pressure and temperature testing, but they were still using old-fashioned chart recorders to log their data. After I showed their lab manager what the ATO Lab was capable of, he requested a mobile digital data acquisition system for his lab. I went to work creating a user-friendly data acquisition system including easy-to-use software and simple hardware connections.

DAQ Cart Labeled Photo

The resulting system can read 8 4-20 mA sensors and 6 thermocouples. In addition to the system itself, I delivered a user guide and electrical schematics.

DAQ Cart Documentation Photo

Here is the system in use on its first test:


The system ended up being used for all their testing, and I built a second unit for them a couple of months later. Here is the feedback I received from the lab manager:

" I spoke with all the guys and they are happy with what they have now. I just need to get you some more equipment to build us at least another 2 carts. Appreciate all the help you have helped us with. Really do appreciate all the efforts."

Features of the system:

  • Up to 10 Hz data logging from 8 4-20 mA channels and 6 Type J thermocouples
  • Sensor calibration information easily entered and resulting best-fit line is reviewed before committing  to system.
  • UPS battery backup to ensure power loss does not invalidate test data
  • System checks sensor calibration dates before acquiring data
  • Sensor data can be saved/loaded from file
  • System saves all testing parameters on shutdown and loads last parameters on startup

Memory Game Alarm Clock


The Concept

I sometimes have trouble waking up in the morning, so I wanted to make a challenge for myself whenever I try to turn off my alarm clock. I already made a memory game, and I made a simple design for outputting to a 7-segment LED display, so I decided I wanted to integrate those designs into an alarm clock.

The Design

The box

I found an inexpensive aluminum project box online and decided to use it as the body for the alarm clock. I found some buttons with built-in LEDs for the memory game portion, and I decided to strategically drill holes in the front of the box to  allow the time display to shine through. Like I mention in the demo video, I didn't do a great job of this.

The Circuit Board

The main electrical components I have on the PCB are:

  • ATMega328 - system logic and I/O
  • DS1307 - Real Time Clock
  • 3V coin cell for real time clock
  • LED Display
  • MAX7219 for LCD screen
  • Buzzer for alarm
  • Resistors, capacitors, and crystal oscillators


In order to fit everything into the small project box, I went with a stacking PCB design with two 2-layer boards.

The buttons and lights are connected by wires to the circuit board where they are directly soldered on. In future, I would like to modify this to a plug-in connection to make it easier to take the lid off for battery replacement.


  • Requires a memory game to be beaten to turn off alarm
  • All functions of alarm clock are controlled by 4 memory game buttons
  • Buttons light up whenever pressed for feedback
  • Intuitive alarm and time setting
  • Adjustable brightness
  • Adjustable difficulty
  • 12/24 hour time display modes


Making Of

The code and PCB schematics can be found on my GitHub.

ESP8266 and DHT22 – Log room temperature to a Google Sheet

I recently discovered the ESP8266: a low-cost board with a WiFi chip that also has a microcontroller that you can program with the Arduino IDE. For less than $2, this was something I had to try! So I decided that I wanted to use the ESP8266 with a DHT22 temperature and humidity sensor to log the temperature of my room in Google drive.

I wired and set it up using this guide:


But instead of a USB to serial cable, I used a UART TTL module to communicate with the board. Since the 2 x 4 pin design doesn't lend itself to use in a breadboard, I used an adapter board.

The complete circuit is shown below:

IMG_2665 IMG_2666

Once I got the module reading temperature values from the sensor, I added code to send the data to Adafruit IO using the getting started guide:


I then used an IFTTT recipe to add any new Adafruit IO values to a google sheet. This is what the values look like as they come in:

Screenshot 2016-03-10 21.42.11

And here is a plot of the temperatures over time. It looks a bit jagged since the temperature is being sent over as an integer, which is fine for my purposes.

Screenshot 2016-03-10 21.35.01

The Arduino IDE code can be found on my repository: https://github.com/jerwil/ESP8266_DHT_to_Adafruit

Interlocking Laser-cut Pieces – An Experiment in Design

When I was working on my Sleep Sensei project, I designed the housing out of interlocking parts to form the case.


Initial Design

When designing the interlocking portions, I arbitrarily chose that the "notches" would be as wide as twice the material thickness and as tall as the material thickness to provide a good amount of interlocking without being excessive. For example, bamboo from Ponoko is available in 3mm thickness, so the notches are 3mm x 6mm (see diagram below).

Lasercut Notch Size Largetext

Click above image to enlarge.

This worked fairly well when the parts were glued together, but if not the whole thing would just fall apart. Since I was designing this product to be a kit to be assembled by my customers, I wanted to make it as easy as possible with no glue required.

Adding Nodes to the Design

When looking to improve the design, I came across this Ponoko article about adding "nodes" to interlocking laser-cut parts to provide a tighter interface. The concept I came up with was to add nodes to both the "male" and "female" notches to create an interference fit:

Node Diagram

The problem was, I didn't know what dimensions to choose to make the fit tight enough without being too tight to assemble. I also had to make a design that is tolerant of inconsistencies in the laser cutting process. So I did a simple experiment to choose the best node size.

Node Sizing Experiment

I decided to make the width of the nodes 1/2 of the material's thickness, or 1.5 mm in the case of the bamboo I was using. But I didn't know how "tall" to make the nodes.

Node Dimensions Diagram

So I used AutoCAD to create a test piece that would test both the 90 degree connections of the corners as well as inserting into a series of holes (such as on the sides of the Sleep Sensei). The test pieces could be inserted into each other to test different combinations of node sizes. A sample test piece is shown below:

Indiviadual Test Piece

I created a series of test pieces with varying node heights, and I made 4 of each piece to account for variability in manufacturing. I etched each part with its node height so I could keep track:

All Node pieces

For example, the below test piece has a node that is 0.03 mm high:

Node Dimensions

When the parts came in, I tried all the combinations of node sizes, and I found that the fit was best with 0.05 mm nodes on both pieces. So I modified the Sleep Sensei design to include this node size:

New Sensei Design

Notches Up Close

And the design works quite well! If you check out the assembly video, you'll see that the parts snap together quite nicely.

I used the same node size for my valentine's day count-up box, and that also worked out quite well. The parts work like lego pieces: firmly snapped together but easy to take apart if needed.

Heart PCB – A Valentine’s Day Gift

Heart Card Animation Compress

I started dating my girlfriend at a pretty awkward time. Just three weeks into dating her, Valentine's day reared it head, and I wasn't sure what kind of gift I should give her, if any. I mean, it had only been three weeks!

The Idea

At the time, my workplace just got a new circuit board mill, and I was excited to make new boards with it. So I came up with a plan that was low on cost, but would still produce an awesome gift (to those nerdy enough to appreciate it). I had already made a "camera show" device that had a series of LEDs that lit up in a pattern, so the idea was to translate that design into a heart-shaped "card" milled out of a copper board, complete with her name etched on the front.

The Execution

Since the basic board layout and Arduino code were already available, I just had to figure out how to translate it to a heart-shaped design. I followed the Fritzing guide for making a custom board shape and found a .svg heart shape online to use as the board outline. I used Inkscape to make the modifications required to import the file, and moved the LEDs around to follow the outline of the heart. I also swapped the AA battery holder for a coin cell battery holder to make it more "card-like."

Camera show to heart

I etched her name by adding a machining process step in the PCB mill software, CircuitPro. Although I did get her name a bit wrong by only including the first portion of it! Hey, remember that we were only dating for three weeks at the time.

The Gifting

I'm happy to say that she loved the card when I gave it to her, and she even framed it to put on display!

Heart Card in Frame

And as a followup after posting my count up box valentine's day project, 13 months in and she still has it on display!

More Information

You can find the board design Fritzing file and the .svg file used on my GitHub page. The Arduino code was pulled straight from my "camera show" project repository.

View of the back of the board:


MAX7219 7-segment LED Driver Board


When starting to work on my alarm clock project, I decided it would be a good idea to design a little independent display that I could attach to many Arduino projects and integrate into their designs. I started out using the 74HC595 shift register to independently control 4 7-segment displays, but the setup used a lot of chips (74HC595) and a lot of connections, as you can see in the below photo:

Bit Shift Connections

I could barely see the digits under all those wires! So I set out to make a better design and stumbled upon the MAX7219 chip and this very helpful guide. I got the chip working on a breadboard and created a Fritzing design for it.

I started out making a single-sided PCB version that required jumper wires, but I decided that I wanted a cleaner look. I designed and etched my very first dual-sided board, and it worked!

Here is the thing in operation. I made some simple code to cycle through all the numbers from 0-9999:

Here are some photos of the single-sided and dual-sided versions:

As usual, you can get the code and schematics on my github: https://github.com/jerwil/MAX7219_Hello_World

Music Fest Beacon – Field Testing

A few months ago I posted about a music festival beacon that I created to help my friends find me in the crowds. After going to 2 music festivals with it, I am happy to report that it is a success! My friends were able to see me in very large crowds as long as it was dark out. I attached the device onto a tent pole to allow for hands-free use and to make it even higher in the air.

For proof of how visible a simple light-up ping pong ball is, check out this animation I made from a couple of photos I took of the screen at one of the performances. The camera was looking at the crowd from behind. That color changing dot is the beacon!



Birthday Card Instructions

Hey bro,

Happy Birthday! I've made you a birthday card that should hopefully teach you how to solder. I estimate it will take about 1 hour for you to complete. Once you solder it all together and put in your 9V battery, it will play a song. Below is a description of all the parts that I've included:

Parts for Bday Card

  • 10 μF electrolytic capacitors: These go between ground and power for the input power of 9V as well as between the ground and power for the board power of 5V. They help to keep the power smooth to prevent spikes. The white stripes indicate which leg is ground (-). On the board, the ground pin is indicated by two lines on either side of the hole. These are the only components that you'll be dealing with that have a required orientation.
  • Button: It's a button. You push it, and it electrically connects all 4 pins together. By default the left two pins are always connected together, and the same goes for the right two pins.
  • Socket: A 28-pin I soldered on for you already. This allows you to remove the ATMega328 and protects its pins from the heat of soldering.
  • 4.7 kΩ resistors: These are used to reduce the current going to the speaker, which lowers the volume output. There are 3 for the three available channels of audio. For your card as-is you technically only need the right 2, but if you wanted to reprogram the card with a more complex song, you could use all 3 channels.
  • 220 Ω resistor: This is what is known as a pull-down resistor. It ensures that the input pin sees pure ground when the button is not pressed. Without this, the pin would be "floating", and any interference could cause a false HIGH reading. See more info here: http://arduino.cc/en/tutorial/button
  • 5V voltage regulator: Turns an input voltage of 6-24 volts and turns it into 5V, which is what the ATMega likes.
  • 16 mHz crystal: This is used by the ATMega328 to keep precise time. This is important for this application to keep the audio tones consistent. This crystal's resonant frequency is 16 mHz.
  • 22 pF ceramic capacitors: These are used along with the crystal. I don't know why; I just accept it. Unlike the electrolytic capacitors, these capacitors do not have a required orientation (+ and - pins don't matter).
  • Battery pack: Not pictured. Red is positive and black is negative. Stick the appropriate wires through the + and - holes and solder them.

I have already soldered on some of the trickier components, leaving the rest to you. I have prepared a video to attempt to show you how to solder. I say "so" a lot:


This site has some good diagrams to follow:


The finished product should look like this (but with all three resistors):

IMG_6752 IMG_6753

Here is the github page if you'd like to see the code and schematic: https://github.com/jerwil/Birthday_Card

Please DO NOT view the video demo, as it will ruin the surprise and satisfaction of hearing it work for the first time.

You can use miduino.net to convert any midi to arduino code. Just modify the pins to match the three pins attached to the speaker.

I hope that you are successful with this project! Hopefully this is a good intro to get you more excited about the blending of code and physical objects.