Formations à l'informatique et à l'électronique

Auteur : SD
Créé le : 04-01-2017

Arduino - Capteur de température 1-Wire DS18S20

Introduction

Photo de capteurs de température 1-wire de la famille DS18x20 TO92

Cette manipulation utilisera la carte Arduino UNO associée au capteur de température 1-Wire DS18S80.

La photo ci-contre montre le capteur.

La technologie 1-Wire (aussi connu sous le nom de bus Dallas ou OneWire) est un bus conçu par Dallas Semiconductor qui permet de connecter (en série, parallèle ou en étoile) des composants avec seulement deux fils (un fil de données et un fil de masse). De nature similaire à I²C, il présente cependant des vitesses de transmission et un coût inférieurs. Il est généralement utilisé en domotique pour des thermomètres ou autres instruments de mesure météorologiques. Il est également très utilisé dans les circuits de gestion de l'énergie dans les batteries d'équipements électroniques et les chaînes d'onduleurs (circuits DS2438 principalement).

La documentation du capteur est disponible sur le site du fabriquant :

DS18S20.pdf

Une bibliothèque 1-Wire a été développée pour Arduino.

Installation de la bibliothèque

EDI Arduino Ajouter Bibliothèque

Télécharger l’archive : "OneWire-master.zip"

Une fois le fichier téléchargé, ouvrir l’environnement de développement Arduino. Dans le menu "Croquis", cliquer sur "Inclure une bibliothèque", puis sur "Ajouter la bibliothèque .ZIP..."

EDI Arduino Ouvrir Bibliothèque OneWire-master

Sélectionner le Fichier "OneWire-master" et cliquer sur Ouvrir".

Les librairies installées de cette manière sont stockées dans :

%USERPROFILE%Documents\Arduino\libraries

Remarque :

%USERPROFILE% est une variable d’environnement. Elle représente le chemin vers le dossier personnel de l’utilisateur courant (profile utilisateur). Sur un poste Windows 7 ce dossier est en général : C:\Users\NomDeL_Utilisateur\

Il est possible de visualiser toutes les variables d’environnement d’un poste en tapant la commande set dans un invite de commandes.

Câblage

Réaliser le câblage comme indiqué sur le schéma ci-dessous :

Schéma fritzing Arduino DS18S20 Labdec platine expérimentation

Exécution du programme de test

Dans l’environnement de développement Arduino, ouvrir le programme de test fourni avec la bibliothèque : DS18x20_Temperature (dans le dossier « Documents\Arduino\libraries\OneWire-master\examples »).

Modifier le programme à la ligne 10 pour prendre en compte le fait que le capteur est connecté à la patte N°7 de l’Arduino.

Modifier également la ligne 65 :

Remplacer ds.write(0x44,1) par .write(0x44)

Ceci vient du fait que le DS18S20 peut-être alimenté de deux façon : alimentation directe (notre cas) et alimentation « parasite » (cas par défaut du programme de démonstration)

Le téléverser dans la carte Arduino Uno.

Ce programme utilise le moniteur série (console). C’est un outil très pratique pour la mise au point des programmes.

Arduino DS18S20 Moniteur serie serial monitor


Ouvrir le moniteur série (menu « Outils » => « Moniteur série »).

Arduino DS18S20 Moniteur série 9600 baud serial monitor


Vous devez obtenir l’affichage ci-contre.

Modification du programme

Le code donné en exemple est d’un seul bloc dans la fonction loop() ce qui n’est pas très pratique si on veut le réutiliser dans un projet.

Nous allons donc à partir du code d’exemple créer une fonction qui pourra être ensuite réutilisée.

En fait pour s’adapter à un maximum de situations, la fonction aura des paramètres optionnels ce qui fait qu’elle pourra être appelée de plusieurs façons.

Le prototype de cette fonction sera :

bool getTemperature(float * celsius, bool DouzeBits = false, float * fahrenheit = 0)

Déclaré de cette manière, les paramètres DouzeBits et fahrenheit sont optionnels. Si ils sont omis, ils prennent la valeur par défaut indiquée, soit :

La fonction getTempérature ne produira aucun affichage sur la liaison série. Elle renvoie false si la mesure n’a pas pu être faite et true sinon.

Les * mises en évidence indiquent un passage de paramètres par référence. Dans un appel de fonction classique (sans les *), ce sont les valeurs des variables qui sont transmises à la fonction. Ces valeurs sont dupliquées en mémoire. Par conséquent si la fonction (ou la méthode) modifie les variables, elle modifie en réalité la copie et les « vraies » variables ne sont donc pas modifiées.

Avec un passage par référence (avec les *), ce sont les adresses des variables qui sont transmises à la fonction (ou à la méthode). Ainsi la fonction peut modifier les variables car elle connait leur adresse. On parle de pointeur.

Lors de l’appel de la fonction, a mettra un & devant les variables passées par référence pour indiquer qu’on ne transmet pas la valeur mais l’adresse de la variable (voir le programme de test ci-dessous).

A l’intérieur de la fonction, pour modifier la valeur pointée (et non pas le pointeur) on mettra une * devant la variable à modifier.

Exemple de programme principal avec plusieurs appels à la fonction getTemperature :

void loop(void) {
float cels, fahren;

ds.reset_search();
if (getTemperature(&cels)) {
Serial.print(" Temperature (9 bits) = ");
Serial.print(cels);
Serial.println(" Celsius");
}

ds.reset_search();
if (getTemperature(&cels, true)) {
Serial.print(" Temperature (12 bits) = ");
Serial.print(cels);
Serial.println(" Celsius");
}

if (getTemperature(&cels, true, &fahren)) {
Serial.print(" Temperature (12 bits) = ");
Serial.print(cels);
Serial.println(" Celsius");
Serial.print(fahren);
Serial.println(" Fahrenheit");
}

}


Vous avez apprécié cet article ? Partagez le !

Article connexe : Arduino - Ports, CAN et Console