Archives mensuelles : août 2016

image_pdfimage_print

Affichage de la température sur un afficheur LCD et sur un appareil Android

Composants

  • Une carte Arduino Nano
  • Un module bluetooth HC-06
  • Un afficheur LCD 2 lignes de 16 caractères chacune
  • Un capteur de température ds18b20
  • Un potentiomètre 10 kO
  • Une résistance 4.7 kO
  • Une plaque à insertion rapide
  • Des fils
  • Un ordinateur avec l’environnement de développement Arduino

Schéma de câblage

temp_america_bb

Enlever le module bluetooth avant de charger le programme dans la carte Arduino et le remettre juste après sinon il y a des problèmes de communication entre l’ordinateur et la carte arduino.

Pour récupérer la température sur son portable Android, installer l’application Bluetooth Terminal (de Qwerty il me semble). Une fois connecté, l’envoi de la lettre A permet de récupérer la température sur le téléphone.

Code

#include <LiquidCrystal.h>
#include <OneWire.h> // Inclusion de la librairie OneWire

#define DS18B20 0x28     // Adresse 1-Wire du DS18B20
#define BROCHE_ONEWIRE 10 // Broche utilisée pour le bus 1-Wire

OneWire ds(BROCHE_ONEWIRE); // Création de l’objet OneWire ds

// Fonction récupérant la température depuis le DS18B20
// Retourne true si tout va bien, ou false en cas d’erreur
boolean getTemperature(float *temp){
byte data[9], addr[8];
// data : Données lues depuis le scratchpad
// addr : adresse du module 1-Wire détecté

if (!ds.search(addr)) { // Recherche un module 1-Wire
ds.reset_search();    // Réinitialise la recherche de module
return false;         // Retourne une erreur
}

if (OneWire::crc8(addr, 7) != addr[7]) // Vérifie que l’adresse a été correctement reçue
return false;                        // Si le message est corrompu on retourne une erreur

if (addr[0] != DS18B20) // Vérifie qu’il s’agit bien d’un DS18B20
return false;         // Si ce n’est pas le cas on retourne une erreur

ds.reset();             // On reset le bus 1-Wire
ds.select(addr);        // On sélectionne le DS18B20

ds.write(0x44, 1);      // On lance une prise de mesure de température
delay(800);             // Et on attend la fin de la mesure

ds.reset();             // On reset le bus 1-Wire
ds.select(addr);        // On sélectionne le DS18B20
ds.write(0xBE);         // On envoie une demande de lecture du scratchpad

for (byte i = 0; i < 9; i++) // On lit le scratchpad
data[i] = ds.read();       // Et on stock les octets reçus

// Calcul de la température en degré Celsius
*temp = ((data[1] << 8) | data[0]) * 0.0625;

// Pas d’erreur
return true;
}

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
Serial.begin(9600); // Initialisation du port série
// set up the LCD’s number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print(« Temperature : »);
}

void loop()
{
float temp;
char c;
lcd.setCursor(0, 1);

if(getTemperature(&temp)) {
lcd.print(temp);
}

if(Serial.available()){
c = Serial.read();
}

if(c ==’A’) {
Serial.print(temp);
}
delay(500);

}