The folks at Ivmech recently had a need for some new hardware. They needed a small, cheap device able to sense some analog values, toggle a few digital pins, and log everything to a computer. What they came up with is the IViny, an extremely small data acquisition device built around the ATtiny85, capable of logging data to a computer.
The IViny features two digital channels and two 10 bit analog channels, just like you’d find in any ATtiny85 project. Power is supplied over USB, and a connection to a computer is provided by V-USB. There’s also a pretty cool Python app that goes along with the project able to plot the analog inputs and control the digital I/O on the device.
It’s not exactly a fast device – the firmware only supports 100 samples per second, but an upcoming firmware upgrade will improve that. Still, if you ever need to read some analog values or toggle a few pins on the cheap, it’s a nice little USB Swiss army knife to have.
27 thoughts on “ATtiny85 Data Acquisition”
Nice project. I just love the tiny85 and the tiny84.
So cheap, so simple, and yet able to do so much.
Just a lot of fun to play with :-)
i prefer the tiny84.
my brain doesn’t know how to read at 4am, and failed miserably at an attempt of a joke, sorry. (i reed “tiny84 and the tiny84” )
100 s/s is good enough for a lot of things…
We used to pay $100’s for these to use in our lab at the university. I knew the margins were high, but never had time to build our own.
Good stuff. :)
Maybe the $100’s ones had proper input protection and better accuracy ? Maybe even isolated inputs ?
Of course… but then again there were plenty of projects where it was simply used to measure a thermocouple. Sure the accuracy was good to have, but in some cases we were watching a +- 200*C change in temperature swing.
No need to tie up an expensive instrument for something like that.
Agreed. If you have very sloppy requirements, such as measuring a thermocouple with +/- 5-10 *C error, you can use a device like this. Somebody selling professional equipment needs to do a lot better, otherwise their targeting a very small market.
Currently trying to figure out just how to bootload an ATtiny84 with an arduino mega. Sure having a hard time finding accurate documentation.
What exactly are you trying to do? You can use arduino ISP and the mit attiny cores (to give you some good search terms) to program the 84.
I just want to be able to load arduino code onto the attiny using the arduino isp, but the tiny doesn’t exist in the board options. To create a board I have some information from:
but I am scared about setting the wrong fuses.
Hello-you need to download This thingy from here:
Also, you may need to use an older version of Arduino ISP in case of issues-the Arduino as ISP sketch is using higher speeds now, which doesn’t click well with Tinys.
This worked perfectly in combination with the highlowtech info.
Thank you very much.
also may help anyone if they find this post
No bypass capacitors at all? surprised they can get away with that. Especially taking ADC measurements.
Also the article says “100S/s” but the page linked is already touting “150 S/s”
Forget the bypass caps. There’s not even a good voltage reference.
ATtiny85 has a built in 1.1V reference. This can vary due to manufacturing process from 1.0 to 1.2V, but once known it is pretty stable. Check out my post on calibrating for the reference voltage, storing in EEPROM and doing (reasonably) accurate measurements: http://www.re-innovation.co.uk/web12/index.php/en/information/electronics-information/accurate-voltage-measurement.
Great project – very useful for loads of data monitoring applications where low cost is better than high accuracy.
Reminds me of littlewire.cc and http://yveslebrac.blogspot.com.tr/2008/10/cheapest-dual-trace-scope-in-galaxy.html type of projects.
Really not trying to troll, but how is this any different than an arduino? Digispark or something similar pretty much does exactly this already, except for the headers, no?
Yes, there are many differences like data logging pc program.
Without any gains and using the low res internal ADC, you won’t be able to use thermal couples. Unless you are interest only in resolution of about 120C per LSB and that assuming their noise floor is below that. Riiiiight.
May be they are going for getting extra bits from oversampling and injecting noise!?
It looks like the AVR has a 20x gain buffer, so that’s an option. It requires using the two analog inputs as a differential pair, so you’d only have a single channel. Even so, the performance would be pretty bad, and there wouldn’t be a decent cold junction compensation.
You would want an amplifier for the thermocouple. Even with some of the higher end DAQs we used an external amplifier. In the interest of budget I’m thinking an LM358 ($0.40) would be a good choice. It puts most of my K-Type thermocouples somewhere in the 0-1V/0-4V range, with 10bit ADC that should be sufficient for accuracy.
Then we calibrate it… a 0*C measurement (ice water) and a 100*C measurement (boiling water) are the easiest and ethylene glycol boils right around 200*C. The three measurements give a curve that we can create an equation from and should give a pretty accurate reading… of course if you do 10 measurements you’ll be even closer, but what’s 1-2*C anyway?
Maybe surprisingly, it takes quite a bit of skill to calibrate using ice water and boiling water. For ice water, you want to make sure the water and vessel are really clean. Contaminations can shift the melting point. Also, you need to use a slushy mixture of ice and water, not just water with some ice cubes. The ice water needs to be in a thermos/dewar, and needs to be stirred continuously. For boiling water, you need to measure not in the water, but in the vapor, and compensate for air pressure. In both cases, there will be heat transfer through the stem of the thermocouple, so ideally you’d calibrate it in the same way as you’ll end up using it. It is also important to treat the thermocouple nicely. Moving it from boiling water to ice water with a shock can change the molecular structure, and shift the thermocouple curve. Of course, if you’re happy with a few degrees error, none of this matters very much :) But if you want less than a degree, all of this stuff (and maybe more) becomes critical.
I’ve used the AD7793 chip. It’s got everything inside for direct hookup to a thermocouple, including an amplifier, a small current source for detecting open connections, and very good 50/60 Hz filter. Because it has 3 channels, you can use one for the thermocouple, and the other 2 for ratiometric measurement of cold junction NTC.
IIRC arduino uses an IC onboard for USB interface. This project is essentially just featuring V-USB. I have never heard of any software solution for sending and receiving data over usb without using HID or a dedicated IC. So this project is useful for my super cheap computer controlled robot arm.
The case could use some mounting holes.
Please be kind and respectful to help make the comments section excellent. (Comment Policy)