Capturer des informations et les enregistrer

Voici un petit tutoriel qui va nous permettre de mettre en place des capteurs et d’enregistrer les informations. Bien souvent, dans ces cas, on souhaite miniaturiser l’installation. L’arduino Nano est donc le parfait choix pour ce type d’installation.

A propos du code source :

Vous remarquerez que j’attache la plus grande importance à commenter mon code. Un code bien commenté, c’est un code mieux compris. C’est aussi pour cette raison que je ne m’étale pas trop dans le tutoriel sur le code lui même.

1. Pré requis

a. Librairies utilisées :

SPI.h : référence Arduinoexplications en Français. Pour l’utilisation de la communication du même nom pour le shield Sd card.

DHT.h : Github, pour obtenir les informations de température et d’humidité.

SD.h : Référence Arduinoexplications en français. Pour écrire le fichier sur la carte Micro SD.

b. Connaissance utile :

Le tutoriel n°3 pour la gestion du temps.

2. Objectif

L’objectif est le suivant;  capturer à interval régulier (pas plus de 2s pour le capteur DHT22, ca ne sert à rien), les informations de température, d’humidité et de présence. On souhaite également afficher visuellement la détection de présence. Une led rouge si rien n’est détecté, la led verte si une présence est détecté.

Ensuite, on souhaite consolider toutes ces informations dans un fichier que l’on nommera datalog.txt.

Petite astuce, nous ne disposons pas ici de shield Tiny RTC permettant d’horodater les données. Et bien nous pouvons toujours capturer le temps depuis lequel l’arduino est en fonction : « millis() ». Il suffira de noter la date et heure de démarrage de l’installation, nous pourrons ensuite sous excel reconstruire la temporalité des captures ;).

Allez hop, action.

3. Matériel utilisé

  • 1 Arduino Nano
  • 1 capteur de température et d’humidité DHT22.
  • 1 capteur PIR (permet de détecter la présence d’une personne).
  • 1 shield Micro SD card adapter (Catalex pour moi).
  • 1 carte micro SD.
  • 2 Led : 1 rouge, 1 verte.
  • 2 résistances de 220 Ohms (pour les Led).
  • 1 résistances de 10K Ohms  (Pour le capteur DHT22).
  • Quelques cables

A propos des capteurs

J’ai choisi le capteur de température et d’humidité DHT22. Certes, ce n’est pas le capteur le moins cher, mais il est réputé fiable et assez précis.

Le capteur PIR quand à lui permet de détecter la présence d’une personne dans une pièce par exemple. Il en existe différents mais en général, ils possède deux vis permettant de définir la sensibilité et la durée de détection. Il faut savoir que ces capteurs, utilisent la « lumière » émise par la chaleur de notre corps. Il nécessite à sa mise en fonction d’un temps de calibrage d’environ 20s (Ne faite pas le mariole devant le capteur pendant ce temps ;). Il est préférable de s’éclipser).

Le shield Micro SD catalex communique via le protocole SPI.

4. Schéma

tuto4_schema1

Attention les capteur PIR n’ont pas toujours le même montage.

5. Programme

La méthode de sauvegarde dans le fichier. C’est très simple, le fichier est ouvert en mode append directement. Vous noterez que j’ai choisi le « ; » en séparateur, ce qui permettra une exploitation assez simple sous excel.

SaveTemp
/* Nom : SaveTemp
Description : Permet de sauvegarder les données dans un fichier datalog.txt
Paramètres : Aucun
Retour : Aucun
*/
void SaveTemp()
{
    File dataFile = SD.open("datalog.txt", FILE_WRITE); // Ouverture du fichier, attention, un seul fichier peut être ouvert à la fois.
 
    if (dataFile) // Si le fichier est ouvert. 
    { 
        Debug("Fichier ouvert, on peut ecrire les donnees."); 
        float v_hum = dht.readHumidity(); 
        float v_temp = dht.readTemperature(); 
        int v_present = digitalRead(PIRPIN); 
        long v_time = millis(); 
        dataFile.print(v_time); 
        dataFile.print(";"); 
        dataFile.print(v_temp); 
        dataFile.print(";"); 
        dataFile.print(v_hum); 
        dataFile.print(";"); 
        dataFile.print(v_present); 
        dataFile.println(); 
        dataFile.close(); 
    } 
    else 
    { 
        Debug("Ecriture impossible"); 
    } 
}

vous noterez l’attente de 20s pour la calibration du capteur.

Le Setup
void setup()
{
    Serial.begin(9600);
    dht.begin();
    InitIO();
    Debug("Initialisation du capteur PIR, patientez");
    delay(20000); // Temps de Calibration du capteur PIR.
    m_diffTimeDht = millis();
    m_diffTimeSave = m_diffTimeDht;
    if (!SD.begin(CSPIN))
    {
        Debug("Carte micro SD non presente ou non fonctionnelle");
    }
    else
        Debug("Carte initialisee");
}

Vous retrouverez le reste du code source ci dessous.

c. Source à télécharger

Tutoriel n°4 fichier ino

6. Résultat

Exploitation des données :

On récupère le fichier sur la carte SD. On importe le fichier dans excel en précisant le séparateur « ; ».

Ensuite, on rajoute une ligne tout en haut. On a dans l’ordre, millis(), la température, le taux d’humidité et l’indicateur de présence (0 ou 1).

J’ai pris soin de noter la date et heure de lancement de l’arduino. Ensuite, rajoutons une colonne à droite de millis(). La nommer date.

Sur la seconde ligne (Cellule B2), on peut entre la date est heure enregistré. Puis sur la ligne suivante, on tape la formule suivante : =$B$2+((A3/1000)/(3600*24)). Modifier le format en choisissant un format date + heure à votre guise.

Il suffit de tirer la cellule vers le bas et le tour est joué. On peut ensuite créer un graphique permettant de voir l’évolution de la température, de l’humidité et de la présence.

Voici un exemple de capture réalisé pendant une nuit entre 23h20 et 10h du matin : Les pics d’humidités s’explique par ma présence proche de l’installation le matin. C’est efficace ;).

courbe temp

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.