J’ai réussi à connecter et lire un capteur de température DS18B20 ainsi qu’un capteur de distance ultrasons SR06. Je parviens à lire les informations sur la console de l’arduino.

J’explique ici comment.

Nota : Cet article fait partie d’une série intitulée

J’ai fait les branchements et la programmation en trois temps :

  1. le capteur de distance ultrason seul ;
  2. le thermomètre seul ;
  3. les deux ensemble.

Il y a eu un quatrième temps, dans lequel j’ai tenté de faire passer la communication par bluetooth et non USB mais mon dongle bluetooth pas cher ne fonctionne que par intermittence…

Capteur à ultrason HC SR-06 seul

Je me suis inspirée de http://tiptopboards.free.fr/arduino_forum/viewtopic.php?f=2&t=54

Les connexions (cf schéma grossier) : VCC sur 5V, GND sur ground, « trig » sur pin 9 et« echo » sur pin 8.

Arduino + SR06 + DS18B20 + SR06

 

Le schéma ci-dessous montre le branchement avec les trois composants. Attention, lorsqu’on communique via USB avec l’arduino, les pins 0 et 1 connectés au capteur bluetooth doivent être déconnectés.

Le sketch de Tiptop boards fonctionne parfaitement.

//**********************************************************
//  Capteur de distance à ultrasons HC-SR04 avec Arduino Uno
//  TipTopBoards.com  06 01 2014  Rolland
//  Càabler +5V et GND du détecteur sur l'arduino
//
// Trig -> pin 9
// Echo -> pin 8
//**********************************************************
#define trigPin 9  //Trig Ultrasons (sortie)
#define echoPin 8  //Echo Ultrasons (entrée)

void setup() {
  Serial.begin (9600);  
  pinMode(trigPin, OUTPUT);  //Trig est une sortie
  pinMode(echoPin, INPUT);   //Echo est le retour, en entrée
}

void loop() {
  long duration, distance;
  digitalWrite(trigPin, LOW);  
  delayMicroseconds(10); 
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); //Trig déclenché 10ms sur HIGH
  digitalWrite(trigPin, LOW);
  
  // Calcul de l'écho
  duration = pulseIn(echoPin, HIGH);
  // Distance proportionnelle à la durée de sortie
  distance = duration*340/(2*10000);  //Vitesse du son théorique
   
  //Hors de portée (duration)
  if ( distance <= 0){  
    //Serial.print(duration);
    Serial.println("Hors de portee");
  }
  else {
    Serial.print(distance);
    Serial.print(" cm ");
    Serial.print(duration);
    Serial.println(" ms");
  }
  delay(1000);  //0.1 sec entre deux mesures
}

Et voici ce qu’on obtient sur la console :

ultrason-HC-SR04--sur-console

Le thermomètre DS18B20 seul

C’était déjà un peu plus compliqué car je n’ai pas trouvé de sketch arduino tout fait. Il a fallu que je réfléchisse et que je comprenne ce que je faisais 🙂 !

Les sources d’information utilisées

Lorsqu’on veut connecter plusieurs capteurs de température :

Pour un seul capteur comme ici, voir

Pour le branchement du thermomètre, schéma sur http://bildr.org/2011/07/ds18b20-arduino/

Charger une librairie dans l’arduino

Pour pouvoir convertir les mesures en températures, il faut des calculs assez complexes. Il est donc infiniment plus simple d’utiliser des librairies adaptées, qui contiennent les fonctions qu’on utilisera sans même savoir comment elles sont codées.

La librairie principale pour les capteurs de température du type DS18B20 (presque un standard sur arduino) est la librairie Dallas temperature.

Comme je ne voulais connecter qu’un seul thermomètre, je n’avais pas besoin de la librairie one wire. Elle est cependant installée dans le croquis suivant et je n’ai pas vérifié ce qui se passerait si je l’enlevais.

charger une librairie ArduinoUne fois la librairie téléchargée, il faut aller dans l’éditeur arduino et choisir Croquis / Importer bibliothèque / add library. Il suffit ensuite de choisir le fichier zip ou le répertoire contenant la librairie.

La première fois qu’on téléverse un programme dans l’arduino, ça prend du temps de lui ajouter la librairie. Ensuite, c’est déjà chargé.

le croquis de relevé de température

La source est http://www.milesburton.com/?title=Dallas_Temperature_Control_Library#The_Library, le croquis a été écrit par l’auteur de la librairie Dallas.

La principale modification faite est le delai passé à 2000 dans la dernière ligne de code.

//**********************************************************
//  Sonde de température DS18B20 avec Arduino Uno
//  
//  for multiple sensors, see http://playground.arduino.cc/Learning/OneWire and 
// http://www.strangeparty.com/2010/12/13/arduino-1-wire-temperature-sensors/
//
// here, for only one temperature sensor
// source http://www.milesburton.com/?title=Dallas_Temperature_Control_Library#The_Library


// blue wire connected to pin 2 
//**********************************************************
#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into pin 2 on the Arduino
#define ONE_WIRE_BUS 2

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);

void setup(void)
{
  // start serial port
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library Demo");

  // Start up the library
  sensors.begin(); // IC Default 9 bit. If you have troubles consider upping it 12. Ups the delay giving the IC more time to process the temperature measurement
}


void loop(void)
{ 
  // call sensors.requestTemperatures() to issue a global temperature 
  // request to all devices on the bus
  Serial.print("Requesting temperatures...");
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.println("DONE");
  
  Serial.print("Temperature for Device 1 is: ");
  Serial.print(sensors.getTempCByIndex(0)); // Why "byIndex"? You can have more than one IC on the same bus. 0 refers to the first IC on the wire
  delay(2000);
}

Ce croquis produit le résultat suivant :

DS18B20-sur-console

Associer radar ultrason et thermomètre

J’ai associé des éléments des deux croquis précédents :

//**********************************************************
// Arduino Uno avec  
// Capteur de distance à ultrasons HC-SR04 avec Arduino Uno
// et thermomètre DS18B20 
//  
//
// ultrasons : Trig ->   pin 9
// ultrasons : Echo ->   pin 8
// température : data :  pin 2
//**********************************************************

// librairies pour le thermomètre
#include <OneWire.h>
#include <DallasTemperature.h>

// Définir les entrées / sorties
// Data wire is plugged into pin 2 on the Arduino
#define ONE_WIRE_BUS 2

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);

#define trigPin 9  //Trig Ultrasons (sortie)
#define echoPin 8  //Echo Ultrasons (entrée)

void setup() {
  Serial.begin (9600);  
  pinMode(trigPin, OUTPUT);  //Trig est une sortie
  pinMode(echoPin, INPUT);   //Echo est le retour, en entrée
  
  Serial.println("thermomètre DS18B20 et capteur ultrasons HC-SR04 connectés");
  Serial.println("----------- ###### ----------");
  // Start up the library
  sensors.begin(); // IC Default 9 bit. If you have troubles consider upping it 12. Ups the delay giving the IC more time to process the temperature measurement
}

void loop() {
  // ultrasons
  long duration, distance;
  digitalWrite(trigPin, LOW);  
  delayMicroseconds(10); 
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); //Trig déclenché 10ms sur HIGH
  digitalWrite(trigPin, LOW);
  
  // Calcul de l'écho
  duration = pulseIn(echoPin, HIGH);
  // Distance proportionnelle à la durée de sortie
  distance = duration*340/(2*10000);  //Vitesse du son théorique
   
  //Hors de portée (duration)
  if ( distance <= 0){  
    //Serial.print(duration);
    Serial.println("Hors de portee");
  }
  else {
    Serial.print("Capteur ultrasons HC-SR06 : ");
    Serial.print(distance);
    Serial.print(" cm ");
    Serial.print(duration);
    Serial.println(" ms");
  }
  delay(1000);  //0.1 sec entre deux mesures
  
  // maintenant mesure la température
  // call sensors.requestTemperatures() to issue a global temperature 
  // request to all devices on the bus
  Serial.print("Requesting temperatures...");
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.print("DONE, ");
  
  Serial.print("Thermometre 1 : ");
  Serial.println(sensors.getTempCByIndex(0)); // Why "byIndex"? You can have more than one IC on the same bus. 0 refers to the first IC on the wire
  delay(2000);
}

Ce croquis communique bien la distance à un objet ainsi que la température ambiante :

HC06-et-DS18B20-sur-console

Ce qu’il me reste à faire

Je veux maintenant que la communication entre PC (et ensuite raspberry Pi) et Arduino soit réalisée par bluetooth et non pas via USB.

Ce sera l’objet du prochain article de cette série 

A bientôt.

 

 

 

Print Friendly, PDF & Email
0 0 votes
Évaluation de l'article
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x