Instructables

Under $8 Arduino Serial Data Logger - Record to SD Card

Disclosure: This project operates the ATmega328-P-PU outside the published ATmel specifications: According to ATmel, the 328P requires slightly over 3.3V to reliably start the oscillator at 16MHz and to otherwise perform acceptably.  Lab testing here at SofKinetics has shown that the 'board-duino' 328P-PU can withstand below freezing and above 130F temperatures and that the 16MHz crystal oscillator will start reliably at the 3.3V this project uses for the SD card and the microcontroller.  However, your experience may be a miserable failure.


THIS IS AN ADVANCED PROJECT - NO HANDHOLDING
You will need access to an AVR programmer, either a dedicated one such as USB-AVR or an Arduino programming shield such as sold by AdaFruit or a home-made programming interface.  This will be necessary for programming the naked 328P-PU which will be used in this project.  The assumption is that you will be using the Arduino 1.0.1 or higher environment to program the uC.  There are several decent Instructables on how to program the ATmel ATmega328P-PU.  Please read and research.


Summary of operation:
The sketch makes use of the SD Arduino library.  There are 3 physical connections: Gnd, +5V, and RS232 ASCII signaling at 9600 BAUD.  The 328P will buffer incoming characters until the buffer is full (512 characters) or until the datastream has a Carriage Return (CR) at which time the data in the buffer is written to the SD Card.  I have tested 1G and 2G inexpensive cards formatted FAT with no issues noted.  That is all this project does... just records serial data onto SD. 

Parts you will likely need to purchase:
  • ATmel328P-PU blank chip - approx $4
  • SD Card holder such as LC Studio for approx $3.50 from eBay
  • 16MHz (20ppm or 30ppm) crystal for approx $0.50 from any Internet seller
Parts you will likely have in your junk-box (or will have to purchase otherwise):
  • Small load capacitors, 2x, of approx 18-22 pF to match crystal requirements
  • 10uF to 100uF bulk capacitor rating 10V or greater
  • 10K resistor / 22K resistor / 150 Ohm resistor all 1/4W
  • 100pF, 2x, ceramic bypass capacitors for power lines
  • Tri-color LED or separate Red, Green, Blue LEDs  (Optional but useful)
  • Screw-down lead connector (optional)
  • 28 pin IC socket (optional, but highly recommended)
  • Small prototype board - shown is from Radio Shack
  • Misc. lengths of hook-up insulated 24G wire
  • Soldering iron, solder, hand tools, and other things I forgot to list
Now, go back to the top and re-read the disclosure!

Why you may want to build this project:
Because this self-contained project will simply log anything that is thrown to it at 9600BAUD from a serial output of another device.  In software, you can lower the serial speed to 4800 BAUD or lower if necessary.  You may have success with serial rates above 9600 BAUD - but I have not tested this as my need is strictly selfish and centered around 9600.

Yes, this device can read and log PC terminal output.
 
Remove these adsRemove these ads by Signing Up
rifakungen10 months ago
Hrm, this doesn't work for me. It just refuses to detect the SD card. I was even lazy to buy the identical SD card socket module as yours. I have checked it all several times, tried different cards and stuff.. But it just wont work :/
RayBurne (author)  rifakungen10 months ago
rifakungen:
The 328P uC... how did you flash it? That is, ArduinoISP, AVRISP, etc. Before the flash via ISP, did you remember to use the Arduino GUI environment to set the fuses?
I have done many of these so it is not a matter of working, just trying to figure out what went wrong...

Ray
Oh, and i also tried a DIY Arduino compatible board i got, it's the same problem. I tried it on both 5 and 3.3V. Though, it's made with preburned µC's.
RayBurne (author)  rifakungen10 months ago
WARNING: SD cards are 3.3V only. IF you must use 5V on the Arduino side, say with a UNO, then you will need to use voltage buffering; read about it here:
https://www.sparkfun.com/tutorials/65
Adafruit also sells a pre-made 5V SD breakout:
http://www.ladyada.net/products/microsd/

There are many circuits implemented for data/control line buffering, BUT I avoided the whole problem by running both the ATmel328P-PU and the SD card at 3.3V.

To ensure that you have not damaged the SD card, I suggest placing it in a device (camera, PC) and formatting it... it MUST be formatted FAT or FAT32 only. Then use a PC to copy some files and verify the card is good. You must not format a card NTFS or the uC will not be able to detect the partition.

Since your next comment suggests that "... I got it to work a little" then the program is mounting the SD card, building a directory entry, and writing the buffer. The problem sounds like hardware to me (or a problematic, incompatible card.) I have used Lexar 1G cards and MicroCenter 2GB cards without fail. The length of the SPI wiring can definitely be an issue, even the use of a solderless breadboard is problematic. AC hum pickup from fluorescent lighting is a big issue as is (any) hum in your 3.3V power supply. 3 "AA" cells and a LDO 3.3V regulator can be your friend.

I have never tried to run my 16MHz UNO (official) at 3.3V, but I have run Nano (clone) and Mini Pro (clone0 cards at 3.3V using the VCC input (not RAW).

This I'ble was intended to be constructed as a "unit" all running at 3.3V. Running with existing Arduino or construction deviation is simply a very complex area for diagnosis.

Ray
Theere we go! With the Arduino clone board (FreaDuino) which can properly run on 3.3V, it works a treat! Thank you for your help :)

cheers
RayBurne (author)  rifakungen10 months ago
Philip:
Fantastic!

This data logger works great using my FLAT-duino:
http://www.instructables.com/id/Build-A-FLAT-duino/

Have fun,
Ray
Yeah! :D
Here is a video of my finished little unit :)
(The box was reused, hence the hole next to the charging jack)
http://www.youtube.com/watch?v=7vnFeG3RjNs
Yeah i know the cards are 3.3V. but i tried to make a resistor divider for the card, with no more luck. all the cards work fine on a PC. and i have tried both FAT and FAT32. No difference..
I'm gonna try to solder a short adapter together, so i can basically plug the SD card module straight onto the Arduino and try that. I'm also going to try an Arduino clone that i got which can be set to properly run on 3.3V. I did try different power supplies too.. Both linear (lab bench PSUs) batteries and DC/DC converters, but it made no difference. I also tried to add a few really low ESR Wima caps straight on the SD card module. But that didn't help either.

I'm gonna fiddle around a little and see if i can get it to spin.. Thank you SO much for your help. It's just really nice to be able to contact the actual builder of the project... Thank you.

Best regards
Philip
I just used a standard off the shelf Arduino. And i got it to work a little.. If i plug the card in not write protected, it can make the file, but not write, and when i flip it over to write protected, it manages to write to the card. But most of the time it just blatantly ignores the card, for some reason..
Pro

Get More Out of Instructables

Already have an Account?

close

PDF Downloads
As a Pro member, you will gain access to download any Instructable in the PDF format. You also have the ability to customize your PDF download.

Upgrade to Pro today!