KKM: MODUL ZA SD KARTICU

microSD čitač kartica breakout-Communication

Početnik si s Dasduinom. Ili s elektronikom? Za oko ti je zapeo određeni modul, ali ne znaš kako ga koristiti? Bez brige, tu je KKM! Kako Koristiti Module (KKM) je serija blog tutorijala tvrtke soldered na kojoj ćeš pronaći sve što ti treba kako bi započeo rad sa svojim omiljenim modulom. Tutorijali obuhvaćaju: tehničke karakteristike, princip rada, upute kako povezati modul s Dasduinom te osnovni kod. Sve ostalo prepuštamo tebi na maštu.

UVOD

U ovom tutorijalu naučit ćemo kako sa Dasduina spremati podatke na SD karticu pomoću modula za SD karticu. Modul za SD karticu nam omogućuje spajanje SD kartice do 32GB na Dasduino te na nju možemo spremati razne podatke koji su nam bitni i kasnije ih obrađivati na računalu ili ponovno koristiti na Dasduinu. S ovim modulom možemo i čitati podatke sa SD kartice te ih ispisivati na LCD display ili koristiti za neku drugu funkciju.

PRIPREMA SD KARTICE

Modul za rad koristi SD karticu na koju sprema podatke, ali da bi mogao raditi s karticom potrebno je karticu formatirati na FAT16 ili FAT32 format. Za mikro SD karticu je potrebno koristiti adapter te ako nam s njim kartica ne radi potrebno je prekidač koji je označen s Lock (prikazano na slici) postaviti u gornji položaj kako bi mogli raditi s karticom(ako je dolje nećete moći formatirati karticu). Kada formatirate karticu na FAT16 ili FAT32 format spremni ste za rad. Na kartici nije potrebno imati nikakvu datoteku ako želimo pisati na karticu jer će Dasduino sam stvoriti datoteku s nazivom koji mu mi zadamo u kodu.

KAKO POVEZATI?

Modul koristi SPI komunikaciju tako da trebamo povezati pinove s modula na pinove Dasduina koji služe za SPI komunikaciju. Pin CS možemo spojiti na bilo koji pin Dasduina samo onda u kodu moramo promjeniti na koji smo pin spojili.
SD-Modul >>>>>>>>>>Dasduino
MOSI >>>>>>>>>>>>>>>> D11
MISO >>>>>>>>>>>>>>>> D12
SCK >>>>>>>>>>>>>>>>> D13
CS >>>>>>>>>>>>>>>>>> D10
+5V >>>>>>>>>>>>>>>> +5V
GND >>>>>>>>>>>>>>>> GND
Kada povežemo Dasduino i SD modul spremni smo za programiranje Dasduina kako bi nam spremao podatke na SD karticu ili čitao sa SD kartice.

ARDUINO KOD

U sljedećem primjeru očitavamo vrijednosti s analognog pina i spremamo ih na karticu. Na analogni pin možemo spojiti potenciometar(jedan kraj potenciometra na +5V drugi na GND, a klizač na analogni pin) ili ako ništa ne spojimo dobivat ćemo slučajne vrijednosti između 0 i 1024.
Podatke spremamo u Podaci.csv datoteku, te iz nje kasnije podatke možemo uvesti u Excel i obrađivati ih te su zbog toga podaci odvajani zarezom i svaki podatak ima svoj redni broj koji se postavlja varijablom ocitanje. Ako nam nije potrebna obrada podataka možemo promijeniti da podatke spremamo u .txt datoteku(samo csv zamijenimo sa txt). Naziv datoteke ne smije biti duži od 8 znakova jer nam program neće raditi.
Za rad sa SD modulom nije potrebno preuzimati biblioteku jer se ona nalazi u Arduino IDE kao i biblioteka za SPI komunikaciju.

#include "SPI.h" //uključujemo SPI biblioteku koja nam omogućuje SPI komunikaciju
#include "SD.h"  //uključujemo SD biblioteku koja nam služi za rad sa SD karticom
const int CS = 10;  //definiramo CS pin
int ocitanje=1;   //definiramo varijablu ocitanje i postavljamo njenu vrijednosti na 1
void setup() {
  Serial.begin(9600);  //započinjemo serijsku komunikaciju
  pinMode(CS,OUTPUT);  //postavljamo CS kao izlazni pin
  //inicijaliziramo SD karticu i odmah provjeravamo dali je inicijalizacija uspješna
  if (!SD.begin(CS)) {
    //ako inicijalizacija nije uspješna ispisujemo poruku o grešci
    Serial.println("Kartica nije ispravno spojena.");
    return;
  }
  //ako je kartica ispravno spojena i inicijalizacija je uspjela ispisujemo poruku da je kartica spremna za rad
  Serial.println("Kartica je ispravno spojena i spremna je za rad.");
  //provjeravamo dali postoji datoteka Podaci.csv te ako postoji preskačemo dio koda u vitičastim zagradama
  if(!SD.exists("Podaci.csv"))
  {
  String prvi= "Ocitanje,AnalogniPin"; //U String prvi spremamo riječi Ocitanje i Analogni pin koje su odvojene zarezom
  File ocitanja = SD.open("Podaci.csv", FILE_WRITE); // otvaramo datoteku Podaci.csv za pisanje i čitanje iz datoteke koje izvršavamo preko
                                                     //objekta ocitanja s kojim pristupamo datoteci
  if (ocitanja) { //provjeravamo dali je datoteka otvorena i ako je izvršava se kod u vitičastim zagradama, ako nije onda se ide na else
                  //funkciju
   ocitanja.println(prvi); //spremamo String prvi u datoteku pomoću objekta ocitanja s funkcijom println
   ocitanja.close(); //zatvaramo objekt ocitanja odnosno preko objekta zatvaramo datoteku Podaci.csv
   Serial.println(prvi); //na Serial monitor ispisujemo String prvi
  }
  //ako nije uspjelo otvaranje datoteke ispisuje se poruka o grešci
  else{
   Serial.println("Nisam uspio otvoriti Podaci.csv");
    }}}
void loop() {
   int senzor = analogRead(A0); //u varijablu senzor spremamo očitanja s analognog pina A0
   String podaci = String(ocitanje)+','+String(senzor); //u String podaci spremamo vrijednosti  ocitanje i senzor, ali ih pretvaramo u String i spremamo kao jednu rečenicu
   //varijabla ocitanje nam je pomoćna varijabla koja označuje redoslijed podataka i ona ide od 1 i za svako sljedeće spremanje se povećava
   File ocitanja = SD.open("Podaci.csv", FILE_WRITE); //otvaramo datoteku podaci.csv
   //sljedeći kod je isti kao i kada spremamo String prvi, samo što sada spremamo String podaci i to radimo svaku sekundu.
  if (ocitanja) {
    ocitanja.println(podaci);
    ocitanja.close();
    Serial.println(podaci);
  }
  else {
    Serial.println("Nisam uspio otvoriti Podaci.csv");
  }
  ocitanje++; //povećavamo varijablu ocitanje za 1
  delay(1000); //pauza od 1 s
}
Drugi primjer nam prikazuje kako možemo čitati podatke sa SD kartice, ali prije toga moramo spremiti neke podatke na karticu(ili sa Dasduinom ili na računalu).
#include "SPI.h" //uključujemo SPI biblioteku koja nam omogućuje SPI komunikaciju
#include "SD.h"  //uključujemo SD biblioteku koja nam služi za rad sa SD karticom
const int CS = 10;  //definiramo CS pin
void setup() {
  Serial.begin(9600);  //započinjemo serijsku komunikaciju
  pinMode(CS,OUTPUT);  //postavljamo CS kao izlazni pin
  //inicijaliziramo SD karticu i odmah provjeravamo dali je inicijalizacija uspješna
  if (!SD.begin(CS)) {
    //ako inicijalizacija nije uspješna ispisujemo poruku o grešci
    Serial.println("Kartica nije ispravno spojena.");
    return;
  }
  //ako je kartica ispravno spojena i inicijalizacija je uspjela ispisujemo poruku da je kartica spremna za rad
  Serial.println("Kartica je ispravno spojena i spremna je za rad.");
  File podaci = SD.open("Podaci.txt", FILE_READ); // otvaramo datoteku Podaci.txt za čitanje iz datoteke
  if (podaci) { //provjeravamo dali je datoteka otvorena i ako je izvršava se kod u vitičastim zagradama, ako nije onda se ide na else funkciju
      while (podaci.available()) {//u petlji provjeravamo dali su dostupni podaci za čitanje i sve dok jesu ispisujemo ih na Serial monitor
      Serial.write(podaci.read()); //čitanje podataka sa SD kartice s funkcijom read() i ispis na Serial monitor
    }
  podaci.close(); //zatvaramo objekt podaci odnosno preko objekta zatvaramo datoteku Podaci.txt
  }
  //ako nije uspjelo otvaranje datoteke ispisuje se poruka o grešci
  else{
   Serial.println("Nisam uspio otvoriti Podaci.txt");
    }
}
void loop() {
//u void loop ne čitamo podatke je l' bi se stalno ponavljali isti podaci, ali u vašem kodu ako trebate nešto pročitati sa SD kartice možete
}