Afficher la température sur un écran LCD

1. Pré requis

a. Librairies utilisées :

Wire.h : référence Arduinoexplications en Français

TCN75A.h : Github

LiquidCrystal.h : référence Arduino

b. Connaissance utile :

Avoir réalisé quelques tutoriels de base (Allumage d’une led, …). Avoir pris connaissance du protocole I2C.

2. Objectif

Mesurer avec l’Arduino la température provenant du capteur de température et l’afficher sur l’écran LCD.

3. Matériel utilisé

  • Arduino Uno Rev3
  • Capteur de température TCN75A
  • Ecran LCD 16×2.

4. Schéma

Schéma de montage

Programme

a. Extrait de code

Partie déclaration
#include <Wire.h> // librairie utilisant le protocole I2C / TWI (communication série sur 2 fils)
#include <LiquidCrystal.h> // librairie pour l'écran LCD

/* DEFINITION DES CONSTANTES */
#define tcn75address 0x48 // Adresse I2C du capteur de température
#define SERIAL_BAUDRATE 9600 // Vitesse de communication du port série

const byte RSPIN = 12; // Port numérique utilisé pour l'écran LCD
const byte RWPIN = 11; // Port numérique utilisé pour l'écran LCD
const byte EPIN = 13; // Port numérique utilisé pour l'écran LCD

const byte DB4 = 4; // Port numérique utilisé pour l'écran LCD
const byte DB5 = 5; // Port numérique utilisé pour l'écran LCD
const byte DB6 = 6; // Port numérique utilisé pour l'écran LCD
const byte DB7 = 7; // Port numérique utilisé pour l'écran LCD

/* DECLARATION DES VARIABLES GLOBALES */
LiquidCrystal lcd(RSPIN, RWPIN, EPIN, DB4, DB5, DB6, DB7); //liaison 4 bits de données

byte m_seconds; // Déclaration des variables du Timer,
byte m_minutes; // notez le m_ pour définir qu'il s'agit
byte m_hours; // d'une variable membre

float m_Temp; // Variable contenant la température.
char* m_time = (char*)malloc(13); // Stockage de la durée de fonctionnement DDDDD HH:MM:SS.III

// Definition du caractere ° qui n'existe pas de base
byte degrees[8] = {
B00000,
B01000,
B10100,
B01000,
B00000,
B00000,
B00000,
B00000,
};
Méthodes spécifiques
/* Nom : GetTemp
Description : Permet d'obtenir la température.
Retour : Float => Température mesurée.
*/
float GetTemp()
{
	int tempreg = 0;
	float temperature = 0;
	Wire.requestFrom(tcn75address, 2);
	tempreg = Wire.read(); // Récupération de l'information
	tempreg = tempreg << 8; // Conversion et calcul de la valeur en °C
	tempreg |= Wire.read();
	tempreg = tempreg >> 4;
	temperature = (float)tempreg / 16;
	return temperature;
}

/* Nom : GetTime
Description : Permet d'obtenir le délai depuis lequel l'arduino fonctionne.
Retour : char* => Chaine de caractère contenant le délai au format HH:MM:SS.III
*/
char* GetTime()
{
	// Note c'est possible de détecter le passage à zéro de milli. Suffit d'avoir noté que sa valeur est inf. à des valeurs stockées.
	// Déclaration des variables locales
	const byte ASCII_NUM = 48;
	unsigned long v_delay; // Nombre de millisecondes. Notez que les variables locales sont préfixés v_
	byte v_seconds; // Nombre de secondes calculées
	byte v_minutes; // Nombre de minutes calculées
	byte v_hours; // Nombre d'heures calculées
	unsigned int v_days; // Nombre de jours calculés
	unsigned int v_millis;

	// Allons chercher l'info en milliseconde, puis calculons les variables
	v_delay = millis();
	v_millis = v_delay % 1000; // Test de remise à zéro
	v_seconds = (v_delay / 1000) % 60;
	v_minutes = ((v_delay / 1000) / 60) % 60;
	v_hours = (((v_delay / 1000) / 60) / 60) % 60;
	v_days = (((v_delay / 1000) / 60) / 60) / 24; // Si vous voulez rajouter le nombre de jours.

	// Formatage du délai
	m_time[0] = ASCII_NUM + v_hours / 10;
	m_time[1] = ASCII_NUM + v_hours % 10;
	m_time[2] = ':';
	m_time[3] = ASCII_NUM + v_minutes / 10;
	m_time[4] = ASCII_NUM + v_minutes % 10;
	m_time[5] = ':';
	m_time[6] = ASCII_NUM + v_seconds / 10;
	m_time[7] = ASCII_NUM + v_seconds % 10;
	m_time[8] = '.';
	m_time[9] = ASCII_NUM + v_millis / 100;
	m_time[10] = ASCII_NUM + (v_millis % 100) / 10;
	m_time[11] = ASCII_NUM + v_millis % 10;
	m_time[12] = '\0';
	return m_time;
}

 

Le Setup
void setup()
{
	Wire.begin(); // Initialisation de la com I2C
	Wire.beginTransmission(tcn75address); // Initialisation de la mesure de température
	Wire.write(0x01); // Définition de la résolution
	Wire.write(0x60);
	Wire.endTransmission(); // Fin de Commande

	Wire.beginTransmission(tcn75address); // On établi la communication
	Wire.write(0x00);
	Wire.endTransmission(); // Fin de Commande

	lcd.begin(16, 2); // Init de l'écran 16 colonnes et 2 lignes
	lcd.clear(); // Vidage de l'écran.
	lcd.createChar(0, degrees); // initialiser le caractère ° dans le LCD

	m_hours = 0; // Init des variables temporelles
	m_minutes = 0;
	m_seconds = 0;

	Serial.begin(SERIAL_BAUDRATE); // Initialisation de la communication série
}

 

La boucle Loop
void loop()
{
	lcd.setCursor(0, 0);
	lcd.print(GetTime()); // Affichage du temps depuis lequel l'arduino fonctionne
	lcd.setCursor(0, 1); // Positionnement à la seconde ligne
	m_Temp = GetTemp(); // Acquisition de la température
	lcd.print(m_Temp); lcd.write(byte(0)); lcd.print("C"); // Affichage de la température.

	delay(500); // On renouvelera l'opération dans 500 ms.
}

b. Source à télécharger

Tutoriel n°1 le .ino

6. Résultat

En vidéo

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.