Today we are going to look at a micro SD card Arduino shield. The reason to use such a thing is to have a storage dump for any data that you generate with your Arduino project that can accept a very large amount of data – up to several gigabytes if you have a large enough micro SD card. With the appropriate sketch it is also possible to read from the card, navigate file directories and so on, but to keep it simple I am just going to examine the most popular aspect – writing our data to the card. However if enough people ask me I will spend the time to figure out the rest.
Initially I imagined this project would be quite difficult, but after some research it was fine. You’re lucky to not have to do the work completed by myself 🙂
Anyhow, moving on. The shield is shipped in the usual minimalist packaging, a plastic bag and the shield:
You will need to supply your own header sockets or pins and fit them yourself. Then solder away. Before you know it, your shield is complete:
The red board colour is a nice contrast with the blue of my Eleven. Now of course you will need a micro SD card to write your data to. Contrary to popular belief you can use SDHC micro SD cards that are larger than two gigabytes in size. First of all, you will need to format your micro SD card. Check the instructions or help system of your computer’s operating system to determine how to do this. However ensure that the format type is either FAT32 or FAT 16, not MacOS or ext3 or NTFS, etc. Next we need to prepare the Arduino IDE to work with the shield. There is a library of functions that needs to be installed for the project to work. Bill Greman has written an excellent library to use, download it from here.
On the software side of things, please note that the shield requires exclusive use of digital pins 10, 11, 12 and 13 for the SPI interface to the card reader. The next thing to do is test our new shield. Plug the shield into your Arduino Duemilanove or compatible board, then the micro SD card into the slot. It will need a small amount of pressure, as it “clicks” in. Also note that in order to remove the card, you push it and it pops out a little. Don’t try to just pull it out with your thumbnail. It is also wise to only insert and remove the card when the power is off.
Assuming you have installed your library correctly, fire up the Arduino IDE and select File menu > examples > SDFat > SDFatinfo. Plug in your shield, upload the sketch, then hit the serial monitor button. Enter a character and press enter – you should be presented with something like:
This display shows various data about the card, the formatting type and so on. If it did not work, check your soldering on the shield, re-format the card with FAT16 or FAT32, reseat the shield into the Arduino, reconnect to the PC and try again.
Next it is time to write something to the card, to get a feel for how things work. Run the “SDFatwrite” example, open the serial monitor box, enter a character and press enter. Now open the resulting text file found on your micro SD on your computer. You should have something that looks like:
There really is a lot of code in the demonstration sketch, but to make things easier to adapt, have a look at line 90 to 94 of the sketch.
The writeString() function writes text to the file, just like Serial.write() would to the screen. The writeNumber() function writes integers, or unsigned integers to the file. And the writeCRLF() function starts a new line in the file. You can basically copy and paste the code into your own sketch and use these functions, as long as your variable types are suitable for the functions.
In saying that, I have made a demonstration sketch to prove this. Using the real time clock shield from a previous article, an Analog Devices TMP36, and a 560 ohm resistor/LED on digital pin 2, we can make a temperature logger with time and date. This involves a nice stack of Arduino goodness:
and a solderless breadboard with the temperature sensor and the LED setup. If you had a really small breadboard, you could plonk it into the micro SD shield and save space. Alas, mine did not fit.
But it worked. Now for the sketch – you can download it here: demonstationsketch.pdf. If you examine the sketch I have filled it with comments and points of interest. If you are unsure of how the real time clock code works, please visit here. Fore more information about the temperature sensor, please visit here. There was no need to compute Fahnrenheit in the sketch, as this can be done later on in a spreadsheet, saving you sketch memory and storage space.
The purpose of the LED is to let you know when the sketch is about to start, and when it has finished. Once the blinking starts at the end of the sketch, you can power off and remove the micro SD card as the program has written and closed the file. If you do this before the sketch has finished, you may corrupt the file and lose your data. Here is an example of the file from the demonstration sketch:
Notice how there are distinct columns between the data. This is important as later you may want to import the text file into a spreadsheet to analyse your data. For example, if you use the Insert > Sheet from file… command in the Openoffice.org spreadsheet, you can select which columns of data to import, like this:
Which will leave you with nicely delimited data that you can twist around to your heart’s content:
In this spreadsheet I have calculated the minimum, maximum and average temperature – and in Fahrenheit as well. By just capturing the raw data using the micro SD shield you can offload a lot of processing work from the Arduino and onto your personal computer – a much more efficient solution. The spreadsheet has been placed in the files section of our Google Group.
So there you have it. You now have the tool and an understanding of how to capture data from the real world, and bring it home to analyse and make decisions from it. The possibilities are almost limitless, using a wide range of sensors, user inputs, even GPS modules, you can get a better understanding of the world around you. High resolution photos are available on flickr.
So have fun and keep checking into tronixstuff.com. Why not follow things on twitter, Google+, subscribe for email updates or RSS using the links on the right-hand column, or join our Google Group – dedicated to the projects and related items on this website. Sign up – it’s free, helpful to each other – and we can all learn something.