arduino data acquisition

Arduinos are not just teaching/hobby tools and can be used in real products. I cut my teeth on 68HC11 using C and the BUFFALO bootloader, which was mostly painful. I got the impression in school that ‘difficult to use’ somehow meant ‘professional grade’, and that the hobby type tools were just for fun and had very little use except for rapid prototyping. this has been incorrect for years now thanks to more open source projects.

I used java for my climbing telemetry system. The TINI microcontroller never caught on, but was one of this first microcontrollers that had ethernet and ran java byte codes. it was a bit underpowered to do any real work but it was great for getting data from sensors into a tcp/ip network. this was back in the days of x10 and home plug, both failures in terms of creating standards for networked appliances.

Lego came out with a great learning/hobby product that got good community support. I used the Lego bricks to teach basic maze finding using the java programming language (no big loop, just event handlers when robots bumped into walls). Still not great for real projects because of it’s limited inputs/outputs, but that changed when the Arduino efforts took off. It had great community support early on and was all free and open source tools. But.. it can be a bit buggy when doing complicated things though. I used to think one should never use it for a serious product, but this isn’t true. not at all.

One small job I did was to acquire analog data at high speed. At first I thought this would require a high speed, dedicated card on a PC.. but, it was do-able with an arduino. The application needed to spin a motor and read in data. In order to get the fastest analog sampling all that was required was to add these following lines into my sketch.

After setting these registers, I was getting analog read times that were more than fast enough to get about 1000 readings in under 800ms. What did limit the speed was the serial port write operations. The way to make this faster is write these values to an array, and then write them out the USB port after reading.

See more on this topic on forums here.