31
Vos projets et Montages d'Électronique / Thermostat STM32 ( avec Hystérèse v1)
« le: Novembre 25, 2020, 02:46:11 pm »
Salut à tous, ![Sourit :)](http://forum.bidouilleur.ca/Smileys/default/smiley.gif)
Je faisais un thermostat qui était très simple en principe, mais finalement qui m'a bien caser la tête pour obtenir quelque chose comme un effet d'hystérésis. Je ne connais que les bases de code sur Arduino, donc toute contribution, simplification, nettoyage etc.. du code sera la bienvenue![Grimace ;D](http://forum.bidouilleur.ca/Smileys/default/grin.gif)
Thermostat qui active un ventilateur à partir d'une température. Une fois activé, il devra descendre de deux degrés pour se désactiver.
![](https://i.ibb.co/NnZNG4b/Test.jpg)
T= 19ºC sur la photo Température Réelle
A= 24ºC sur la photo Temp Activation
B= pasa sur el display Temp Activation avec "hystérésis" à partir de 2eme tour du "for".
for (T >= A ; T>= B ; T=T) {
digitalWrite(Pin_Relay, LOW);
B = (A-2);
}
Liens:
Relais 5v -> 3.3v modif
http://forum.bidouilleur.ca/index.php?topic=907.0
EB_#148 Banc d'Essai: Contrôleur de Température W1209 (Thermostat)
https://youtu.be/j6blCrNm-5s
![Sourit :)](http://forum.bidouilleur.ca/Smileys/default/smiley.gif)
Je faisais un thermostat qui était très simple en principe, mais finalement qui m'a bien caser la tête pour obtenir quelque chose comme un effet d'hystérésis. Je ne connais que les bases de code sur Arduino, donc toute contribution, simplification, nettoyage etc.. du code sera la bienvenue
![Grimace ;D](http://forum.bidouilleur.ca/Smileys/default/grin.gif)
Thermostat qui active un ventilateur à partir d'une température. Une fois activé, il devra descendre de deux degrés pour se désactiver.
![](https://i.ibb.co/NnZNG4b/Test.jpg)
T= 19ºC sur la photo Température Réelle
A= 24ºC sur la photo Temp Activation
B= pasa sur el display Temp Activation avec "hystérésis" à partir de 2eme tour du "for".
for (T >= A ; T>= B ; T=T) {
digitalWrite(Pin_Relay, LOW);
B = (A-2);
}
Code: [Sélectionner]
// http://forum.bidouilleur.ca/
// v1.0 Thermostat STM32
/*
STM32F103C8T6
Relay 5v mod 3.3V
OLED SH1106
DHT22
PA5 input analog voltmeter
PB0 input analo pot for activation adjust
PB6 SCK OLED SH1106
PB7 SDA OLED SH1106
PB8 DHT22
*/
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
#include <DHT.h>
#define DHTPIN PB8
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
int Pin_Relay = PA0;
int Pin_VSalida = PA5;
int Pin_Activ = PB0;
void setup(void) {
Serial.begin(9600);
u8g2.begin();
dht.begin();
pinMode(Pin_Relay, OUTPUT);
pinMode(Pin_VSalida, INPUT);
pinMode(Pin_Activ, INPUT);
digitalWrite(Pin_Relay, HIGH);
delay(500);
}
void loop(void) {
float T = dht.readTemperature(); // Temperature ªC (for ºF -> dht.Temperature(True))
float H = dht.readHumidity(); // Humidity
float V = (analogRead(Pin_VSalida)/71.236); // AnalogRead to Volts (the formula changes according to the voltage divider bridge used)
float A = ((analogRead(Pin_Activ)*1.01)-1001); // AnalogRead to Temp activation (the formula changes according to the potentiometer value and voltage divider bridge used)
float B = A; // Over Temperature ºC = Activation Relay to apply later hysterersis
// Relay ON necessary conditions
for (T >= A ; T>= B ; T=T) { // Step1 Temp > A , Step2 Temp > B , Step3 not necessary but fill Temp = Temp
//Relay ON
u8g2.clearBuffer();
digitalWrite(Pin_Relay, LOW);
u8g2.setFont (u8g2_font_courB12_tf);
u8g2.setCursor(0,18);
u8g2.print("ON");
u8g2.setCursor(52,18);
u8g2.print(V,0);
u8g2.print("V");
u8g2.setFont (u8g2_font_courB12_tf);
u8g2.setCursor(86,18);
u8g2.print(A,0);
u8g2.print((char)176);
u8g2.print("C");
u8g2.setFont(u8g2_font_logisoso16_tr);
u8g2.setCursor(0,40);
u8g2.print("Temp");
u8g2.setCursor(64,40);
u8g2.print(dht.readTemperature(),0);
u8g2.print((char)167);
u8g2.print(" C");
u8g2.setFont(u8g2_font_logisoso16_tr);
u8g2.setCursor(0,63);
u8g2.print("Hum");
u8g2.setCursor(64,63);
u8g2.print(dht.readHumidity(),0);
u8g2.print(" ");
u8g2.print((char)37);
u8g2.sendBuffer();
delay(300);
T = dht.readTemperature();
H = dht.readHumidity();
V = (analogRead(Pin_VSalida)/71.236);
A = ((analogRead(Pin_Activ)*1.01)-1001);
B = (A-2); // for Step2 Temp > B add "Hysteresis"
}
// Relay OFF
u8g2.clearBuffer();
digitalWrite(Pin_Relay, HIGH);
u8g2.setFont (u8g2_font_courB12_tf);
u8g2.setCursor(0,18);
u8g2.print("OFF");
u8g2.setCursor(52,18);
u8g2.print(V,0);
u8g2.print("V");
u8g2.setFont (u8g2_font_courB12_tf);
u8g2.setCursor(86,18);
u8g2.print(A,0);
u8g2.print((char)176);
u8g2.print("C");
u8g2.setFont(u8g2_font_logisoso16_tr);
u8g2.setCursor(0,40);
u8g2.print("Temp");
u8g2.setCursor(64,40);
u8g2.print(dht.readTemperature(),0);
u8g2.print((char)167);
u8g2.print(" C");
u8g2.setFont(u8g2_font_logisoso16_tr);
u8g2.setCursor(0,63);
u8g2.print("Hum");
u8g2.setCursor(64,63);
u8g2.print(dht.readHumidity(),0);
u8g2.print(" ");
u8g2.print((char)37);
u8g2.sendBuffer();
delay(300);
}
Liens:
Relais 5v -> 3.3v modif
http://forum.bidouilleur.ca/index.php?topic=907.0
EB_#148 Banc d'Essai: Contrôleur de Température W1209 (Thermostat)
https://youtu.be/j6blCrNm-5s