Station météo Arduino

De Wikidebrouillard.

Article incomplet en cours de rédaction
La vidéo "Station météo Arduino"

Sommaire

Présentation du projet Arduino

  • Envie de connaître la température de la pièce ou de celle de l'extérieur ? Avec ce projet, maintenant c'est possible.

Liste du matériel

Réalisation du projet

Explication

Schéma Fritzing

Code

// --- Inclusion des librairies utilisées ---

#include <OneWire.h>                                         // librairie pour capteur OneWire
#include <LiquidCrystal.h>
LiquidCrystal lcd( 7, 8, 9, 10, 11, 12);

byte degre[8] = {                                            // création du caractère "°"
  0b00111,
  0b00101,
  0b00111,
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b00000
};
int tempPin = 0;
// --- Déclaration des constantes ---

//---- code des instructions du capteur
const int modeLecture=0xBE;
const int lancerMesure=0x44;

// --- constantes des broches ---

const int broche_OneWire=2;                               //declaration constante de broche 

// --- Déclaration des variables globales ---
byte data[12];                                           // Tableau de 12 octets pour lecture des 9 registres de RAM et des 3 registres d'EEPROM du capteur One Wire
byte adresse[8];                                         // Tableau de 8 octets pour stockage du code d'adresse 64 bits du composant One Wire

float ma_tempetf=0.0; 

// --- Déclaration des objets utiles pour les fonctionnalités utilisées ---
OneWire  capteur(broche_OneWire);                        // crée un objet One Wire sur la broche voulue


//**************** FONCTION SETUP = Code d'initialisation *****
                                                        // La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme

void setup()   {                                        // debut de la fonction setup()
lcd.createChar(1, degre);                               // déclaration du caractère "°"
lcd.begin(16, 2);

// --- ici instructions à exécuter au démarrage --- 

Serial.begin(115200);                                  // initialise connexion série à 115200 bauds
// IMPORTANT : régler le terminal côté PC avec la même valeur de transmission 


// --- initialisation du capteur DS18B20 ------

capteurInit();                                       // appel de la fonction d'initialisation du capteur - au début seulement 
                                                     // prise en compte du premier capteur trouvé

} // fin de la fonction setup()
// ********************************************************************************


void loop(){                                        // debut de la fonction loop()

ma_tempetf=capteurMesureTemp();                     // appel de la fonction de mesure - renvoie une valeur float

Serial.print ("Temperature = "); 
Serial.print (ma_tempetf,2); 
Serial.println (" Degres Celsius. ");              // 
lcd.setCursor(0, 0);                               // affichage sur l'afficheur lcd 
lcd.print("Temp:       C  ");                      // 
lcd.setCursor(11, 0);                              //
lcd.write(1);                                      //
lcd.setCursor(6, 0);                               //
lcd.print(ma_tempetf);                             //


} 

//*************** Autres Fonctions du programme *************

//************************** fonction d'initialisation du capteur ****************

void capteurInit(void)                                             // fonction qui ne reçoit rien et ne renvoie rien
{
//--------  Détection du capteur présent sur la broche 
Serial.println("**** Detection du capteur **** "); 

while (capteur.search(adresse)== false)                            // tant qu'aucun nouveau capteur est détecté
{

                                                                   // la fonction search renvoie la valeur FAUX si aucun élément 1-wire est trouvé. 

  Serial.println("Aucun capteur 1-wire present sur la broche ! "); // affiche message + saut de ligne
  delay (1000);                                                    // pause 1 seconde
}

                                                                  //la suite est exécutée seulement si un capteur est détecté

                                                                  // la fonction search renvoie la valeur VRAI si un élément 1-wire est trouvé. 
                                                                  // Stocke son code d'adresse 16 bits dans le tableau adresse[8]
                                                                  // adresse envoyé à la fonction correspond à l'adresse de début du tableau adresse[8] déclaré ...   

  Serial.print ("1 capteur 1-wire present avec code adresse 64 bits : ");


  //--- affichage des 64 bits d'adresse au format hexadécimal
   for(int i = 0; i < 8; i++) {                                    // l'adresse renvoyée par la fonction search est stockée sur 8 octets

    if (adresse[i]<16) Serial.print('0');                          // pour affichage des O poids fort au format hexadécimal
    Serial.print(adresse[i], HEX);                                 // affiche 1 à 1 les 8 octets du tableau adresse au format hexadécimal
    Serial.print(" ");
  }

  Serial.println(); 

  //---- test du type de capteur ---- 
  // le type du capteur est donné par le 1er octet du code adresse 64 bits
  // Valeur 0x28 pour capteur type DS18B20, 0x10 pour type DS18S20, 0x22 pour type DS1820
  if (adresse[0]==0x28) 
  { 
    Serial.println ("Type du capteur present : Capteur temperature DS18B20.");
  }
  else
  {
    Serial.println ("Le capteur present n'est pas un capteur de temperature DS18B20.");
  }


  //----- contrôle du code CRC ----
  // le dernier octet de l'adresse 64bits est un code de contrôle CRC 
  // à l'aide de la fonction crc8 on peut vérifier si ce code est valide
  if (capteur.crc8( adresse, 7) == adresse[7])                   // vérification validité code CRC de l'adresse 64 bits
                                                                 // le code CRC de l'adresse 64 bits est le 8ème octet de l'adresse (index 7 du tableau)
  {
    Serial.println ("Verification du code CRC de l'adresse 64 bits de ce capteur : VALIDE !"); 
  }
  else
  {
    Serial.println ("Verification du code CRC de l'adresse 64 bits de ce capteur : NON VALIDE !");     
  }

  //------- message final détection ---- 
  Serial.println("----- fin de la recherche du capteur ----"); 
  Serial.println("");   
}
//----------- fin de la fonction d'initialisation du capteur ---------- 


//-------------- fonction de mesure de la température --------------- 

float capteurMesureTemp(void) { //fonction qui renvoie résultat float et ne reçoit rien

   //-------- variable locale de la fonction ---------- 
  int tempet=0;                                                         // variable pour resultat brute  de la mesure
  float tempetf=0.0;                                                    // variable pour resultat à virgule de la mesure

// XXXXXXXXXXXXXXXXXXXXXX Lancement d'une mesure et lecture du résultat XXXXXXXXXXXXXXXXXXXXXXX 

                                                                       // Serial.println("**** Acquisition d'une mesure de la temperature **** "); 

                                                                       // avant chaque nouvelle instruction, il faut : 
                                                                       //    * initialiser le bus 1-wire
                                                                       //    * sélectionner le capteur détecté
                                                                       //    * envoyer l'instruction 

//--------- lancer une mesure --------
  capteur.reset();                                                    // initialise le bus 1-wire avant la communication avec un capteur donné
  capteur.select(adresse);                                            // sélectionne le capteur ayant l'adresse 64 bits contenue dans le tableau envoyé à la fonction
  capteur.write(lancerMesure,1);                                      // lance la mesure et alimente le capteur par la broche de donnée

//-------- pause d'une seconde ----- 
delay(1000);                                                          // au moins 750 ms
                                                                      // il faudrait mettre une instruction capteur.depower ici, mais le reset va le faire


//---------- passer en mode LECTURE ------------- 
  capteur.reset();                                                    // initialise le bus 1-wire avant la communication avec un capteur donné
  capteur.select(adresse);                                            // sélectionne le capteur ayant l'adresse 64 bits contenue dans le tableau envoyé à la fonction
  capteur.write(modeLecture,1);                                       // passe en mode lecture de la RAM du capteur

// ----------- lire les 9 octets de la RAM (appelé Scratchpad) ----

for ( int i = 0; i < 9; i++) {                                        // 9 octets de RAM stockés dans 9 octets
    data[i] = capteur.read();                                         // lecture de l'octet de rang i stocké dans tableau data
  }


//----- caclul de la température mesurée  ---------

data[1]=data[1] & B10000111;                                          // met à 0 les bits de signes inutiles
tempet=data[1];                                                       // bits de poids fort
tempet=tempet<<8; 
tempet=tempet+data[0];                                                // bits de poids faible

// --- en mode 12 bits, la résolution est de 0.0625°C - cf datasheet DS18B20
tempetf=float(tempet)*6.25;
tempetf=tempetf/100.0;

return (tempetf);

}
// --------------- fin de la fonction de mesure de la température ---------- 

// --- Fin programme ---

http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoExpertCapteursComplexesDS18B20ThermometreSimple

Liens avec d'autres projets arduino

chercher ici : http://wikidebrouillard.org/index.php/Catégorie:Arduino

Pour aller plus loin

Liens avec le quotidien

quelles peuvent être les applications technologiques de ce montage, ou est-ce qu'on retrouve des programme qui y ressemble ?
Portail des ExplorateursWikidébrouillardLéon DitFLOGPhoto mystèreJ'ai FaitPortraitsAnnuaire
AR
CO

Station météo Arduino

Rechercher

Page Discussion Historique
Powered by MediaWiki
Creative Commons - Paternite Partage a l

© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique