Rezultate proračuna ili mjerenja je poželjno sačuvati u neki file tako da ih je moguće po želji i potrebi pročitati.
Arduino može, rezultate proračuna ili vrijednosti pročitane sa raznih senzora snimati na SD (ili microSD) karticu.
Na slici ispod je spoj Arduino Uno i SD Card module koji je zaseban modul sa SD slotom za korištenje SD kartica ili microSD kartice u SD adapteru..
Budući da je na slici iznad korišten zasebani SD card modul koji se spaja preko breadboard-a, posebnu pažnju treba obratiti na spajanje pojedinih pinova SD card modula. Naglašavam da se radi o SD card modulu, jer postoje i microSD slotovi koji dolaze zajedno sa LAN shield-om (mrežna kartica sa RJ45 konektorom). Takav shield se postavi direktno na Arduino zbog čega postoji vrlo mala vjerovatnoća greške pri spajanju.
Na slici lijevo je SD card module (pogled odozgo) na kome su označeni pinovi.
Za pristup podacima na SD kartici je, u sketch, potrebno uključiti biblioteke SPI.h i SD.h
U tabeli ispod je raspored spajanja pinova samostalnog SD card modula na Arduino Uno ploču.
SD card pin |
Arduino pin |
GND |
GND |
5V |
5V |
SDCS |
pin4 |
MOSI |
pin11 |
MISO |
pin12 |
SCK |
pin13 |
Ispod je kôd sketch-a koji, u svakom ciklusu, vrši upis varijable (dadavanje na postojeće podatke) u file tmp.log na SD kartici te čitanje svih do sada upisanih podataka i prikaz na Serial Monitor (kopirajte kompletan kôd ispod u Arduino IDE prozor i upload-ujte ga na Arduino) :
/*
* TEST UPISA I ČITANJA PODATAKA
* NA SD KARTICU U SD CARD MODULU
*
* Autor: Samir Gutić
* URL: http://amicus.ba
* Datum: 15. II 2017.
*
* GND GND
* 5V 5V
* SDCS pin 4
* MOSI pin 11
* MISO pin 12
* SCK pin 13
*
*/
#include <SPI.h>
#include <SD.h>
//Deklaracija dokumenta
File sdDokument;
//Deklaracija varijable za upis u dokument na SD kartici
int intUpis=0;
//Deklaracija varijable za čitanje iz dokumenta na SD kartici
int intCitanje=0;
void setup()
{
//Otvaranje serijske komunikacije i čekanje na otvaranje porta
Serial.begin(9600);
while (!Serial)
{
; //Čekanje na konekciju na serijski port. Potrebno samo za native USB port.
}
//Prikaz informacija na serijski port
Serial.println("Inicijalizacija SD kartice.");
if (!SD.begin(4))
{
Serial.println("Inicijalizacija SD kartice nije uspjela!");
return;
}
Serial.println("Izvrsena je inicijalizacija SD kartice.");
//Brisanje file-a ako postoji
if(SD.exists("temp.log"))
{
SD.remove("temp.log");
}
else
{
Serial.println("Nema dokumenta za brisanje");
}
}
void loop()
{
//Generisanje testnih podataka za upis (10, 20, 30,...)
intUpis=intUpis+10;
//Otvaranje dokumenta.
//Dozvoljeno je imati samo jedan otvoren dokument
//Prije otvaranja drugog dokumenta treba zatvoriti prethodno otvoreni
sdDokument = SD.open("temp.log", FILE_WRITE);
//Ako je otvaranje uspjelo, upisati podatke
if (sdDokument)
{
//Prikaz informacija na serijski port
Serial.println("Upis u temp.log");
//Upis vrijednosti varijable intUpis u file temp.log na SD kartici
sdDokument.print(intUpis);
sdDokument.print(",");
//Zatvoriti otvoreni file
sdDokument.close();
//Prikaz informacija na serijski port
Serial.println("Uspjesno upisano.");
}
else
{
//Ako nije uspjelo otvaranje file-a na SD kartici
Serial.println("Greska pri otvaranju temp.log");
}
//Otvaranje istog dokumenta zbog čitanja upisanih podataka
sdDokument = SD.open("temp.log");
if (sdDokument)
{
Serial.println("Citanje iz dokumenta temp.log");
//Citanje cijelog sadržaja dokumenta temp.log
while (sdDokument.available())
{
//intCitanje=sdDokument.read();
//Prikaz pročitanih podataka u prozoru serial monitora
Serial.write(sdDokument.read());
}
Serial.println("");
//Zatvaranje dokumenta temp.log
sdDokument.close();
}
else
{
//Ako nije uspjelo otvaranje dokumenta temp.log, ispisati grešku
Serial.println("Greska pri otvaranju temp.log");
}
//Odogoda od 3 sekunde i ponavljanje upisa nove stavke i čitanja svih stavki
delay(3000);
}
Sketch-u iznad, pri prvom pokretanju provjeri da li na SD kartici postoji file sa imenom temp.log i izbriše ga ako postoji. Nakon toga, u svakom ciklusu otvara file temp.log i to u modusu za upis, u njega upiše vrijednost varijable intUpis i zatvori file. Varijabla se u ovom primjeru kreira tako da se jednostavno prethodnoj vrijednosti doda vrijednost 10 (primjer nekog računanja u stvarnom programu).
Nakon upisa nove vrijednosti (dodavanja na postojeće podatke), sketch otvara isti file u modusu za čtanje te pročita sve upisane i ispiše ih na Serial Monitor. Nakon 3 sekunde pauze, proces računanja nove vrijednosti, upisa i čitanja se ponavlja.
Šema spoja elemenata kreirana u Fritzing programu je na slici ispod.
Na šemi iznad su pinovi SD modula označeni svojim imenima (sa donje strane pločice modula).
Kao što se vidi sa šeme iznad, pin GND SD modula je povezan na Arduino GND, 5V pin SD modula je povezan na 5V Arduino pin, SDCS pin SD modula je povezan na Arduino pin4, MOSI modula SD modula j epovezan na Arduino pin11, MISO pin SD modula je povezan na Arduino pin12 i SCK pin SD modula je povezan na Arduino pin13..
Električna šema spoja je na sljedećoj slici.
Ispod je prikaz Serial Monitora koji prikazuje kako funkcioniše upis i čitanje podataka sa SD kartice.
Potrebne komponente:
1 x Arduino UNO
1 x Breadboard (mala)
1 x SD card module
1 x SD kartica (ili μSD kartica u adapteru formatirana u FAT file sistemu)
Žice za spajanje
9V napajanje