5.7 Système de contrôle de la température
5.7.1 Capteur de température et d’humidité DHT11

Le capteur de température et d’humidité DHT11 émet des signaux numériques. Il applique les principes d’acquisition et de conversion de signaux analogiques ainsi que la technologie de détection de température et d’humidité, ce qui lui confère une stabilité à long terme et une grande fiabilité. De plus, le capteur intègre un capteur d’humidité résistif de haute précision et un capteur de température thermo-sensible résistif, et est connecté à un microcontrôleur 8 bits haute performance.
Ouvrez le code 5.7.4Temperature-Control-System avec Arduino IDE
#include <dht11.h>
#define DHT11PIN 17
dht11 DHT11;
void setup()
{
Serial.begin(9600);
Serial.println("DHT11 TEST PROGRAM ");
Serial.print("LIBRARY VERSION: ");
Serial.println(DHT11LIB_VERSION);
Serial.println();
}
void loop()
{
Serial.println("\n");
int chk = DHT11.read(DHT11PIN);
Serial.print("Read sensor: ");
switch (chk)
{
case DHTLIB_OK:
Serial.println("OK");
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.println("Checksum error");
break;
case DHTLIB_ERROR_TIMEOUT:
Serial.println("Time out error");
break;
default:
Serial.println("Unknown error");
break;
}
Serial.print("Humidity (%): ");
Serial.println((float)DHT11.humidity, 2);
Serial.print("Temperature (oC): ");
Serial.println((float)DHT11.temperature, 2);
Serial.print("Temperature (oF): ");
Serial.println(Fahrenheit(DHT11.temperature), 2);
Serial.print("Temperature (K): ");
Serial.println(Kelvin(DHT11.temperature), 2);
Serial.print("Dew Point (oC): ");
Serial.println(dewPoint(DHT11.temperature, DHT11.humidity));
Serial.print("Dew PointFast (oC): ");
Serial.println(dewPointFast(DHT11.temperature, DHT11.humidity));
delay(2000);
}
double Fahrenheit(double celsius)
{
return 1.8 * celsius + 32;
} //Convert Celsius degree to Fahrenheit degree
double Kelvin(double celsius)
{
return celsius + 273.15;
} //Convert Celsius degree to Kelvins
//Dew Point. The air is saturated and dews are produced under this temperature.
//Reference: http://wahiduddin.net/calc/density_algorithms.htm
double dewPoint(double celsius, double humidity)
{
double A0= 373.15/(273.15 + celsius);
double SUM = -7.90298 * (A0-1);
SUM += 5.02808 * log10(A0);
SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;
SUM += log10(1013.246);
double VP = pow(10, SUM-3) * humidity;
double T = log(VP/0.61078); // temp var
return (241.88 * T) / (17.558-T);
}
// Fast calculate the Dew Point, its speed is 5 times of dewPoint()
// Reference: http://en.wikipedia.org/wiki/Dew_point
double dewPointFast(double celsius, double humidity)
{
double a = 17.271;
double b = 237.7;
double temp = (a * celsius) / (b + celsius) + log(humidity/100);
double Td = (b * temp) / (a - temp);
return Td;
}
Choisissez la carte ESP32 Dev Module et le port COM, puis téléchargez le code.

Résultat du test :
Ouvrez le moniteur série et réglez le débit en bauds sur 9600, le moniteur série affichera la valeur actuelle de la température et de l’humidité.

5.7.2 Module LCD 1602
Le LCD 1602 possède une interface standard à 14 broches (sans rétroéclairage) ou 16 broches (avec rétroéclairage), ce qui économise les broches du microcontrôleur. Son circuit intégré de commande d’affichage permet un contrôle I2C.

Ouvrez le code 5.7.2LCD1602 avec Arduino IDE.
#include <LiquidCrystal_I2C.h>
//Initialize LCD 1602, 0x27 is I2C address
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
//Initialize LCD
lcd.init();
// Turn the (optional) backlight off/on
lcd.backlight();
//lcd.noBacklight();
//Set the position o dcursor
lcd.setCursor(0, 0);
//LCD prints
lcd.print("HELLO WORLD 0");
lcd.setCursor(0, 1);
lcd.print("HELLO WORLD 1");
//Clear displays
// lcd.clear();
}
void loop() {
// Turn the display on/off (quickly)
//lcd.noDisplay();
//lcd.display();
// Turns the underline cursor on/off
//lcd.noCursor();
//lcd.cursor();
// Turn on and off the blinking cursor
// lcd.noBlink();
// lcd.blink();
// These commands scroll the display without changing the RAM
//lcd.scrollDisplayLeft();
//lcd.scrollDisplayRight();
// This is for text that flows Left to Right
//lcd.leftToRight();
//lcd.rightToLeft();
// This will 'right justify' text from the cursor
//lcd.autoscroll();
//lcd.noAutoscroll();
}
Choisissez la carte ESP32 Dev Module et le port COM, puis téléchargez le code.

Résultat du test :
Le LCD1602 allume son rétroéclairage et affiche “HELLO WORLD 0” et “HELLO WORLD 1”.

5.7.3 Moteur et ventilateur
Le moteur 130 peut ajuster sa vitesse via PWM. Pour ce faire, deux broches doivent être connectées pour le contrôle.

Ouvrez le code 5.7.3Motor avec Arduino IDE.
#define MotorPin1 19 //(IN+)
#define MotorPin2 18 //(IN-)
void setup() {
pinMode(MotorPin1, OUTPUT);
pinMode(MotorPin2, OUTPUT);
}
void loop() {
//corotation
analogWrite(MotorPin1, 255); //Ajustez la vitesse du moteur en modifiant la plage de sortie de la valeur analogique de 0 à 255
analogWrite(MotorPin2, 0);
delay(2000);
//Transition d'arrêt
delay(200);
analogWrite(MotorPin1, 0);
analogWrite(MotorPin2, 0);
delay(200);
//inversion
analogWrite(MotorPin1, 0);
analogWrite(MotorPin2, 255);
delay(2000);
//Arrêt
analogWrite(MotorPin1, 0);
analogWrite(MotorPin2, 0);
delay(2000);
}
Choisissez la carte ESP32 Dev Module et le port COM, puis téléchargez le code.

Résultat du test :
Lorsque la température atteint 29°C, le ventilateur s’allume pour dissiper la chaleur. Lorsqu’elle est inférieure à 29°C, le ventilateur s’éteint (le ventilateur ne fait que simuler la dissipation de chaleur, donc l’effet n’est pas optimal), ce qui permet d’économiser de l’énergie pour la ferme.
