For my final dissertation on my Automotive Engineering degree I built a modular data acquisition system. Its fully functional but still lacks a lot of the more powerful features I want to build in (see the roadmap and issues on the github repo). It normally uses Arduino boards for the low level GPIO stuff and a comprehensive Arduino library has also been released as open source.
A DAQ server is used for processing data and a client for displaying it. The server and client can be on the same computer or different ones, and can even run on devices like the Raspberry Pi. It can currently sample up to 100Hz but could potentially go faster once a few bugs have been ironed out.
I've used it in the wind tunnel at uni to control a moveable diffuser on a car model and capture the underbody pressures. You can see the results in the Desktop client screenshot attached.
Components
1×
Arduino Due
Used as an Expansion Board to get MAXIMUM LOGGING POWER
1×
Raspberry Pi
Used to run the server, I used a PC as a client
I've spent a bit of time in the past few weeks optimising and improving performance. For the Arduino expansion boards I've been able to increase the maximum sampling rate by around 40%. I'm slowly doing more work to reduce the amount of serial traffic required as this appears to be the major bottleneck.
On the hardware front, my prototype RaspberryPi DAQ boards arrived from OSHPark as did all my components, however... DISASTER! Somehow I've got the wrong footprint on the RaspberryPi header. The pin pitch is too small.
I'd normally consider building one anyway for testing purposes and just using wires to connect the board to the Pi but given the ADC is fairly expensive I don't think I'll do this just yet. In the meantime I'm going to have to do a bit of investigation into why my footprint was wrong.
I was pretty excited to see Blitz go up on the Hackaday front page, that was pretty cool! Thanks to those of you who followed and skulled.
I've been distracted this week preparing my dissertation for printing (tomorrow!), as a result there hasn't been a lot of progress. The main changes I made to the software were related to the way the "server" acquires data. Originally I envisaged just a USART connection, however for my dissertation I needed to add support for a custom ethernet pressure sensing device and now I'm looking at SPI for higher data acquisition rates.
These bits of software all do the same task of tasking data from a sensor (expansion board) and writing it to the server's database in the correct format, yet they are all written in separate classes with no common inheritance. As a result, I'm really not happy with the state of it at the moment. I've started to pull out common functionality into a "ServerPlugin" class that will allow different adapters (ethernet, USART, SPI, etc) to be loaded when the program is run. These will work in a similar way to the expansion board plugins on the client side which autoload when the program starts. That way you can connect all sorts of devices and Blitz should automatically find them for you as it currently does for USART devices. There is still a way to go here but the first steps have been made on the dev branch.
I also implemented a basic Raspberry Pi digital GPIO acquisition system although I haven't got around to testing this yet.
Finally I've started to work on the project documentation. I'm using a custom Python static site builder I wrote to create the documentation from Markdown. You can see the WIP documentation on the project links on the left hand side. My supervisor needs this so he can operate the DAQ in the wind tunnel after I graduate :)
How its been used so far
Here is what my set up looked like in the wind tunnel at uni:
My laptop top right was acting as client and server, and the little car shaped "bluff body" you can see in the wind tunnel working section had a moveable aerodynamic diffuser which I can actuate from the software. The little silver boxes you can see in the top middle are the ethernet pressure sensor I'm using to read from pressure tappings on the bottom of the bluff body.
This weekend I decided to have a break from study and spent a couple of days designing a SMT Raspberry Pi Shield for the Blitz DAQ. The board uses the Raspberry Pi GPIO pins and provides a 4 channel 15-bit ADC as well as 5 digital inputs (the Blitz DAQ message format allows five digital flags).
With this shield you could remove the need for a separate Arduino and avoid the issues with Raspberry Pi GPIO on a non-realtime operation system. By using SPI for the Raspberry Pi to shield communications I'll also be able to bump the sample rate up from the Arduino / USART based configuration I've mostly been testing with.
I've got some input protection on the analogue pins - basically Zeners and PTC fuses and I'm trying to work out if I should put a buffer/follower in as well. I don't know any hard and fast rules about when this might be a good or bad idea.
I'm comfortable enough with the design that I feel I could build a prototype, however I'm just heading into my last six weeks of Uni so it will probably be a little while before get around to it!
P.S. like the Blitz DAQ software, this and the firmware will be released as open hardware when I'm happy.
I always planned to release the software as open source, but wanted to wait until it was minimally functional. I reached this point a couple of weeks ago so now the project is released into the wild! There isn't much documentation yet but I'm currently writing the manual that should provide enough information to get going. Its about 80% done so the plan is to finish it over the Easter break and upload it to Github.
Future Plans
Even though my dissertation is all written up and only a few weeks away from handing in, I plan to keep working on the software. I want to implement a lot of the interesting features that weren't needed by the University but I think would really make the data acquisition system awesome for hackers and makers. You can see some of the plans in the github issues list as well as in the README.
Hey Eric,
At the moment only Arduino ADCs are supported. I'm currently working on setting it up to support Raspberry Pi GPIO as well so you can run the whole thing on a single device. I chose Arduino boards because for my dissertation I didn't need a decent ADC - a lab grade external pressure measurement hardware was used.
I do eventually plan to build some custom hardware expansion boards with better ADCs and potentially higher sample rates. (Current realistic maximum is around 100Hz). I have already built a schematic for a PIC expansion with a standalone ADC and support for CANbus. I may redesign for an ATMEL chip as its likely to require less modifications to the BlitzExpansion Arduino firmware linked above.
In theory as the BlitzExpansion code is a C++ library you could use it as a base for most microcontrollers - you would just have to cut out the USART communications part.
So... to summarise :)
a) yes,
b) yes, but the hardware will come a bit later, probably once the software nears "v1.0".
Cool. It could be a nice add on to the RPi header. Commercial DAQs tend to be very expensive, and I've never liked the software. My only real experience with those is NI's overpriced USB DAQs and LabView.
CANbus? Nice to see another automotive person on HaD Projects :)
Yeah it was originally envisaged as a wireless telemetry system for our Uni's electric race car... then they decided we were a fossil fuels university :/ Anyways, thanks for commenting :)