[TUTORIEL] Mémoire + Deuligne

Forum spécifique au shield Deuligne

[TUTORIEL] Mémoire + Deuligne

Message non lude Florian » Lun 5 Mai 2014 11:25

Bonjour,

Aujourd'hui, nous allons voir comment utiliser le Shield Deuligne 1.1 monté en mezzanine sur le Shield Mémoire.

deuligne.jpg
deuligne.jpg (45.27 Kio) Vu 1528 fois
memoire.jpg
memoire.jpg (34.42 Kio) Vu 1528 fois


Dans ce tutoriel, nous allons afficher le température sur un Deuligne tout en horodatant les données sur une carte SD grâce au Mémoire.
La température sera mesurée à l'aide de deux thermocouples. Nous afficherons les températures de chacun sur l'écran. Et pour la forme nous afficherons également un compteur.

- MATÉRIEL:


Pour utiliser tout ce matériel, il faut différentes librairies:

- SCHÉMA DU MONTAGE:
Montage.png
Montage.png (52.07 Kio) Vu 1528 fois


Branchement:
    - La pin Vin des thermocouples à la broche 5V du Deuligne.
    - La pin GND des thermocouples à la broche GND du Deuligne.
    - La pin DO des thermocouples respectivement aux broches D4 et D7 du Deuligne.
    - La pin CS des thermocouples respectivement aux broches D5 et D8 du Deuligne.
    - La pin CLK des thermocouples respectivement aux broches D6 et D9 du Deuligne.

Et évidemment, mettre le Shield Mémoire en mezzanine sur l'Arduino Uno et le Deuligne en mezzanine sur le Mémoire.

- CODE
Code: Tout sélectionner
#include "Wire.h"
#include <SD.h>
#include <Deuligne.h>
#include "Adafruit_MAX31855.h"

Deuligne lcd;  // Déclaration de l'écran LCD du deuligne.


const int chipSelect = 10;
File dataFile;

//Thermocouple_1:
  int thermo_1_DO = 4;  // Pin Data.
  int thermo_1_CS = 5;  // Pin Chip Select.
  int thermo_1_CLK = 6;  // Pin Clock.

//Thermocouple_2:
  int thermo_2_DO = 7;  // Pin Data.
  int thermo_2_CS = 8;  // Pin Chip Select.
  int thermo_2_CLK = 9;  // Pin Clock.
 
Adafruit_MAX31855 thermocouple_1(thermo_1_CLK, thermo_1_CS, thermo_1_DO);

Adafruit_MAX31855 thermocouple_2(thermo_2_CLK, thermo_2_CS, thermo_2_DO);
 
 
void setup()
{
  Serial.begin(9600);
 
  lcd.init();        // Lancement de l'écran LCD.
  lcd.begin(16, 2);  // Paramétrage du nombre de colonne et de ligne de l'écran.
 
  Serial.println("Test MAX31855");  // Attendre que le circuit MAX se stabilise.

  Serial.print("Initialisation carte SD...");  // s'assurer que ChipSelect est bien programmé.
  pinMode(SS, OUTPUT);
 
  // Voir si la carte est présente et peut être initialisée.
    if (!SD.begin(chipSelect))
      {
        Serial.println("Erreur carte, ou non presente.");
        while (1) ;
      }
     
  Serial.println("Carte initialisee.");
 
  // Ouvrir le fichier où l'on enregistre
    dataFile = SD.open("datalog.txt", FILE_WRITE);
    if (! dataFile)
      {
        Serial.println("Erreur d'ouverture datalog.txt");
        while (1) ;
      }
}


void loop()
{
  // Utilisation de String pour assembler les données enregistrées.
    String dataString = "";
 
  // Lecture du thermocouple 1 et ajout des données.
    int c_1 = thermocouple_1.readCelsius();
    dataString += String(c_1);
    dataString += String(" ; ");

  // Lecture du thermocouple 2 et ajout des données.
    int c_2 = thermocouple_2.readCelsius();
    dataString += String(c_2);
     
  dataFile.println(dataString);

  Serial.println(dataString);
 
  // Sauvegarde des données à chaque ligne.
    dataFile.flush();
   
  lcd.setCursor(0, 0);  // Place le curseur colonne 1, ligne 1.
  lcd.print("Temp1:");  // Affiche "Temp1:" sur l'écran.
  lcd.print(c_1);       // Affiche la valeur du Thermocouple 1.
  lcd.print((char)223); // Permet d'afficher le caractère spécial "°" à l'écran.
  lcd.print("C");       // Affiche "C".
  lcd.setCursor(0, 1);  // Place le curseur colonne 1, ligne 2.
  lcd.print("Temp2:");  // Affiche "Temp2:" sur l'écran.
  lcd.print(c_2);       // Affiche la valeur du Thermocouple 2.
  lcd.print((char)223); // Permet d'afficher le caractère spécial "°" à l'écran.
  lcd.print("C");       // Affiche "C".
   
  lcd.setCursor(12, 1);      // Place le curseur colonne 12, ligne 2.
  lcd.print(millis()/1000);  // Affichage d'un compteur par pas de 1 toutes les secondes.
  lcd.setCursor(15, 1);      // Place le curseur colonne 15, ligne 2.
  lcd.print("s");            // Affiche "s" après le compteur de secondes.
}

Ce programme permet dans un premier temps, d'enregistrer les données des thermocouples sur la carte SD. Ceci permet donc de récupérer les valeurs des températures enregistrées sur PC afin de les exploiter. Cette partie du code est gérée par le Shield Mémoire.
Dans un deuxième temps, le programme affiche les températures de chacun des deux thermocouples en live sur l'écran LCD. Puis, il affiche un compteur qui indique les nombres de secondes depuis qu'il est en marche. Ceci est fait par le Shield Deuligne 1.1.

Les thermocouples calculent eux-mêmes et directement la température. Ce qui est bien pratique car s'ils nous donnaient les valeurs sous forme de différence de potentiel il nous faudrait recalculer derrière pour mettre sous forme de °C. Heureusement, il suffit d'utiliser la fonction "readCelsius()" est nous obtenons directement les valeurs sous la bonne forme.

Vous pouvez maintenant afficher la température d'une pièce, d'un four, d'une serre en live. Et en simultané, horodater les données sur carte SD pour voir l'évolution dans une journée et les exploiter pour ensuite gérer le taux d'humidité dans une serre par exemple. Une idée parmi tant d'autres.


LANGAGE

Dans cette partie, vous trouverez quelques explications sur les fonctions du Deuligne concernant l'affichage notamment.

Cette première fonction doit être impérativement mise dans le code. Dans la "void setup". C'est elle qui va initialiser toutes les fonctionnalités de l'écran LCD.
Code: Tout sélectionner
lcd.init();

______________________________
Paramétrage du nombre de colonnes et de lignes de l'écran. Dans ce cas précis, on a 16 colonnes et 2 lignes.
Code: Tout sélectionner
lcd.begin(16, 2);

______________________________
Placement du curseur pour savoir où afficher sur l'écran. Toujours la colonne d'abord, puis la ligne. Remarque: lors du paramétrage du nombre de lignes et de colonnes, on compte normalement. Mais pour le placement du curseur, on commence à compter à partir de 0. Exemple: pour un LCD 2 lignes, si je veux afficher mon message sur la ligne 2 dès la première colonne. On aura ceci, "lcd.setCursor(0, 1);" ou si je veux sur la première ligne, sixième colonne ceci. "lcd.setCursor(5, 0);".
Code: Tout sélectionner
lcd.setCursor(0, 0);

______________________________
Affichage à l'écran. Cette fonction permet d'afficher ce que vous souhaitez sur l'écran LCD. Elle fonctionne de la même façon que la fonction print d'Arduino. C'est à dire que si vous voulez afficher le mot Bonjour à l'écran, il faudra le mettre entre guillemet comme ceci "lcd.print("Bonjour");". Si vous souhaitez afficher une valeur résultant d'un calcul, il faut juste mettre le nom de la variable sans guillemet comme ceci "lcd.print(MaVariable);".
Code: Tout sélectionner
lcd.print();

______________________________
Permet d'afficher ou non le curseur sur l'écran du Deuligne. Comme celui dans un traitement de texte.
Code: Tout sélectionner
lcd.cursor();
lcd.noCursor();

______________________________
Permet de faire clignoter ou non le curseur.
Code: Tout sélectionner
lcd.blink();
lcd.noBlink();

______________________________
Permet de justifier l'affichage à droite.
Code: Tout sélectionner
lcd.autoscroll();

______________________________
Permet de justifier à gauche.
Code: Tout sélectionner
lcd.noAutoscroll();

______________________________
Permet de faire défiler l'affichage de la gauche vers la droite.
Code: Tout sélectionner
lcd.leftToRight();

______________________________
Permet de faire défiler l'affichage de la droite vers la gauche.
Code: Tout sélectionner
lcd.rightToLeft();


Et voilà, avec tout cela vous devriez pouvoir bidouiller aisément avec le Deuligne 1.1.

C'est tout pour aujourd'hui, en espérant que ça vous a plu.
Florian
 
Messages: 69
Inscription: Mer 24 Juil 2013 17:36

Retourner vers Deuligne

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité