Bonjour,
Je suis totalement novice en matière d'arduino. Après plusieurs jours de recherches sur internet j'ai réussi a faire les exercices de base. Maintenant j'aimerai réaliser le capteur qui m'intéresse. Pour cela dans un premier temps j'aimerai enregistrer les mesures de température et d'humidité de mon capteur sur un fichier csv dans une carte SD. A écrire comme ça ça parait simple... Mais malheureusement pour moi c'est la première de mon instrumentation et elle ne fonctionne pas...
Alors voilà le matériel que j'ai acheté : capteur de température et humidité DHT11 (dont j'ai trouvé sur un tutorial comment le paramétrer), un schield avec carte SD et une carte arduino Uno.
Je connecte le tout ensemble et ensuite j'ai injecté le code suivant. Au final quand je souhaite lire ma carte SD j'ai un fichier csv qui a été créé mais il n'y a rien dedans...
J'aurai donc aimé avoir quelques conseils pour comprendre pourquoi cela ne fonctionne pas.
En vous remerciant.
#include <SPI.h> // Inclusion de la librairie SPI (communications bas niveau)
#include <SD.h> // Inclusion de la librairie SD (carte SD en format FAT)
#define DHT11_PIN 0 // Capteur temperature et humidite sur le AO
//definition du capteur
byte read_dht11_dat()
{
byte i = 0;
byte result=0;
for(i=0; i< 8; i++)
{
while(!(PINC & _BV(DHT11_PIN))); // wait for 50us
delayMicroseconds(30);
if(PINC & _BV(DHT11_PIN))
result |=(1<<(7-i));
while((PINC & _BV(DHT11_PIN))); // wait '1' finish
}
return result;
}
//definition du fichier ou on enregistre les donnees
File logFile; // Fichier de log
const unsigned long pauseBetweenReadings = 900000UL; // 90 000 ms = 90 secondes = 1.5 minutes
void setup()
{
//pour le capteur de temperature et humidite
DDRC |= _BV(DHT11_PIN);
PORTC |= _BV(DHT11_PIN);
//pour initialiser le port serie pour les communications
Serial.begin(9600);// Initialisation du port série
Serial.println("Iniciando lectura de datos...");
pinMode(10, OUTPUT); // SS SPI en OUTPUT
/* Initialisation de la carte SD (SS = 4) */
if (!SD.begin(4)) {
Serial.println(F("Initialisation de la carte SD : echec !"));
for(;;); // Boucle infini
}
Serial.println(F("Initialisation de la carte SD : succes !"));
/* Ouverture du fichier de log */
logFile = SD.open("log.csv", FILE_WRITE);
if (logFile)
Serial.print(F("Ouverture du fichier de log : succes !"));
else {
Serial.println(F("Ouverture du fichier de log : echec !"));
for(;;); // Boucle infini
logFile.println("NumeroMesure;humidite; temperature;Millis");
}
}
void loop()
{
byte dht11_dat[5];
byte dht11_in;
byte i;
// start condition
// 1. pull-down i/o pin from 18ms
PORTC &= ~_BV(DHT11_PIN);
delay(18);
PORTC |= _BV(DHT11_PIN);
delayMicroseconds(40);
DDRC &= ~_BV(DHT11_PIN);
delayMicroseconds(40);
dht11_in = PINC & _BV(DHT11_PIN);
if(dht11_in)
{
Serial.println("dht11 start condition 1 not met");
return;
}
delayMicroseconds(80);
dht11_in = PINC & _BV(DHT11_PIN);
if(!dht11_in)
{
Serial.println("dht11 start condition 2 not met");
return;
}
delayMicroseconds(80);
// now ready for data reception
for (i=0; i<5; i++)
dht11_dat[i] = read_dht11_dat();
DDRC |= _BV(DHT11_PIN);
PORTC |= _BV(DHT11_PIN);
byte dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3];
// check check_sum
if(dht11_dat[4]!= dht11_check_sum)
{
Serial.println("DHT11 checksum error");
}
{
logFile.print(millis() / 1000); // NOTE un affiche de la date/heure via un DS1307 serait plus approprié
logFile.print(';');
logFile.print(dht11_dat[0],DEC);
logFile.print(';');
logFile.print(dht11_dat[2],DEC);
logFile.println();
// Attente avant la prochaine mesure
delay(pauseBetweenReadings);
}
}