J’avoue, relier une sonde TMP36 à un Arduino n’est pas forcément original…
Mais il pleuvait… Et puis cela fait l’occasion de faire un petit exemple avec l’écran OLED Grove !
Nous allons donc voir comment récupérer la température ambiante avec une sonde TMP36 et un Arduino, et l’afficher sur un écran.
Coté matos, il nous faut :
- 1 Arduino UNO
- 1 sonde TMP36
- Un condensateur 0.1uF de découplage (optionnel)
- 1 afficheur OLED Grove
- 1 platine Grove
Coté câblage du TMP 36, il n’y a de bien compliqué, il faut juste penser à bien respecter les polarités :
Source : https://boutique.semageek.com/
L’écran se branche sur un port I2C de la platine.
Et c’est tout pour les branchements !
Niveau code Arduino, rien de bien compliqué non plus : on attribue l’entrée, on la lit, on convertit la tension en degrés Celsius et on affiche la valeur sur l’écran.
——————– Code ——————-
#include <Wire.h>
#include <SeeedGrayOLED.h>
#include <avr/pgmspace.h>
int sensorPin = 1;
void setup()
{
Serial.begin(9600);
// setup of the OLED Display
Wire.begin();
SeeedGrayOled.init(); //initialize SEEED OLED display
SeeedGrayOled.clearDisplay(); //Clear Display.
SeeedGrayOled.setNormalDisplay(); //Set Normal Display Mode
SeeedGrayOled.setVerticalMode(); // Set to vertical mode for displaying text
}
void loop()
{
//getting the voltage reading from the temperature sensor
int reading = analogRead(sensorPin);
// converting that reading to voltage, for 3.3v arduino use 3.3
float voltage = reading * 5.0;
voltage /= 1024.0;
// print out the voltage
Serial.print(voltage); Serial.println( » volts »);
// now print out the temperature
float temperatureC = (voltage – 0.5) * 100 ; //converting from 10 mv per degree wit 500 mV offset
//to degrees ((voltage – 500mV) times 100)
Serial.print(temperatureC); Serial.println( » degrees C »);
temperatureC = temperatureC + 5; // a little correction for my Arduino
delay(1000); //waiting a second
// printing on the OLED Display
SeeedGrayOled.setTextXY(5,0); //set Cursor to 5th line, 0th column
SeeedGrayOled.putNumber(temperatureC);
SeeedGrayOled.putString( » Degrees C »); //Print Hello World
}
——————– / Code ——————-
Par contre, j’ai pu constater quelques problèmes
- La valeur de température lue n’est pas stable sur la carte Uno, mais l’est sur un Leonardo, pourquoi ?? Le condensateur présent sur la photo ne change rien.
- L’écran ne fonctionne pas avec une carte Leonardo : différences I2C ?
- La valeur de température doit être corrigée avec le Uno, et non avec le Leonardo.
Si quelqu’un à des réponses à ces questions et / ou des solutions, c’est par ici :