15.- SD i MicroSDHC
A la imatge tens el component/Shield utilitzat per connectar una targeta SD o MicroSDHC a Arduino, i els ports que no podem utilitzar a Arduino per que els ocupa el shield SD:
La terminologia abreujada és la següent:
- CS vol dir Chip select or slave select
- SPI vol dir Serial Peripheral Interface Bus
- MOSI vol dir Master Output, Slave Input (output from master).
- MISO vol dir Master Input, Slave Output (output from slave).
- SCK vol dir Serial Clock
Primer de tot cal posar una targeta SD de la mida que vulgués formatejada amb Gparted a fat32, i després caldrà carregar la llibreria SD a la carpeta libraries d'Arduino de la teua home, en el meu cas l'he posada a «/home/tecnologia/Arduino/libraries/SD» però segons la teua versió de Arduino també podria anar a «/home/tecnologia/sketchbook/libraries» . La llibreria SD la pots baixar des de la web del fabricant ecrow.
Ara ja pots provar el programa CardInfo.ino que trobaràs a la llibreria SD que acabes de carregar.
Canvia la linea «const int chipSelect = 4;» per aquesta altra «const int chipSelect = 10;» El motiu és que la selecció de chip CS és fa pel port 10 d'Arduino per a aquest shield.
El resultat d'executar aquest programa al monitor sèrie d'Arduino és aquesta captura. A tu et variarà depenent de la mida de la teua SD i dels fitxers que hi hagen.
Ara ja pots provar el següent programa que fa servir la targeta SD per emmagatzemar la temperatura en ºC i la humitat relativa en % des de la data que li poses fins que l'atures. Una vegada carregat el programa si retires el cable USB i deixes el cable que alimenta Arduino amb 5 V pots posar-lo a una estació meteorològica i retirar-lo quan vulgues, com que el fitxer de la targeta SD s'obre cada vegada que es van a enregistrar els valors «Data, Humitat , Temperatura» en una fila nova i despres es tanca i espera 10 segons fins el següent valor, no tindràs cap problema a aturar el programa o traure-li la pila a Arduino per retirar la SD o MicroSDHC per llegir el fitxer de text sense errors.
Et calen a més a més de la llibreria SD les llibreries DHT i Time que tens ací: SD-Time-dht11-dht.zip (zip - 87657 B).
El programa també el pots baixar des d'ací: TiH-File_DFRobot.ino.zip (zip - 1874 B).
// TiH-File_DFRobot.ino Programa per enregistrar Temperatura en ºC ,Humitat en % i la data en format (day,month,yr,hr,min,sec) a una tergeta SD o microSDHC
// Per fer aquest programa s'han gastat les fonts 1 i 2 que segueixen
// Font1: http://playground.arduino.cc/Main/DHT11Lib
// Font2: https://www.arduino.cc/en/Tutorial/Files
// created Nov 2010 by David A. Mellis
// modified 9 Apr 2012 by Tom Igoe
// Modificat 3 gener 2017 per Carles Ferrando
// Llicència: GNU GPL v3: https://www.gnu.org/licenses/gpl.html
#include <SD.h>
File myFile;
#include <dht11.h>
dht11 DHT;
#define DHT11_PIN 7
#include <Time.h>
//Definim temperatura i humitat relativa reals mesurades pel sensor DHT11 de DFRobot
float temperatura; // T en ºC
float humitat; // Humitat relativa %
//Definim la data i hora per configurar el rellotge
int hora;
int minut;
int segon;
int dia;
int mes;
int any;
void setup()
{
// Obre el port serie de comunicacions i espera per connectar al port
Serial.begin(9600);
while (!Serial) {
; // espera per connectar al port. Necessari sols per Leonardo
}
//setTime(hr,min,sec,day,month,yr); // CAL POSAR L-HORA REAL I LA DATA AL COMENÇAR LA CLASSE A LA RATLLA DE SOTA
setTime(13,15,00,3,01,2017); // CAL POSAR L-HORA REAL I LA DATA AL COMENÇAR LA CLASSE
Serial.println("IES Gabriel Ciscar Aula Tecnologia 3");
Serial.print("Initializing SD card...");
// On the Ethernet Shield, CS is pin 4. It's set as an output by default.
// Note that even if it's not used as the CS pin, the hardware SS pin
// (10 on most Arduino boards, 53 on the Mega) must be left as an output
// or the SD library functions will not work.
pinMode(10, OUTPUT);
if (!SD.begin(10)) {
Serial.println("Initcializacio feta!");
return;
}
Serial.println("initcializacio feta.");
if (SD.exists("dades.txt")) {
Serial.println("dades.txt existeix.");
}
else {
Serial.println("dades.txt no existeix.");
}
// Obre un fitxer nou i tanca'l de forma immediata:
Serial.println("Creant dades.txt...");
myFile = SD.open("dades.txt", FILE_WRITE);
myFile.close();
// Comprova si el fitxer existeix:
if (SD.exists("dades.txt")) {
Serial.println("dades.txt existeix.");
}
else {
Serial.println("dades.txt no existeix.");
}
}
void loop()
{
// Actualitza l_hora a partir de l_hora configurada al setTime
time_t t = now();
hora = hour(t);
minut= minute(t);
segon= second(t);
dia = day(t);
mes= month(t);
any= year(t);
File dataFile = SD.open("dades.txt", FILE_WRITE);
// Llegeix les dades
int chk = DHT.read(DHT11_PIN);
// Mostra les dades pel terminal serie
humitat=DHT.humidity ;
temperatura= DHT.temperature;
Serial.print(dia);
Serial.print("/");
Serial.print(mes);
Serial.print("/");
Serial.print(any);
Serial.print(" ");
Serial.print(hora);
Serial.print(":");
Serial.print(minut);
Serial.print(":");
Serial.print(segon);
Serial.print(" ");
Serial.print(";");
Serial.print(" ");
Serial.print(humitat);
Serial.print(" ");
Serial.print(";");
Serial.print(" ");
Serial.println(temperatura);
//Guarda les dades a la targeta SD
if (dataFile) {
dataFile.print(dia);
dataFile.print("/");
dataFile.print(mes);
dataFile.print("/");
dataFile.print(any);
dataFile.print(" ");
dataFile.print(hora);
dataFile.print(":");
dataFile.print(minut);
dataFile.print(":");
dataFile.print(segon);
dataFile.print(" ");
dataFile.print(";");
dataFile.print(" ");
dataFile.print(humitat);
dataFile.print(" ");
dataFile.print(";");
dataFile.print(" ");
dataFile.println(temperatura);
dataFile.close();
}
else {
Serial.println("Error en obrir el fitxer");
// if the file didn't open, do something here
}
delay (10000); // Espera 10 segons entre cada mesura
}
|
El resultat d'executar aquest programa és semblant a aquesta captura.
Llicenciat sota la Llicència Creative Commons Reconeixement NoComercial CompartirIgual 3.0