Si ce n’est pas encore fait, je vous propose de commencer par lire la présentation générale de ce projet ici
Maintenant que la température est mesurée, et que nous sommes aptes à ajouter facilement de nouveaux modules, nous allons connecter notre chauffage!
L’idée est simple: Une température de consigne est définie. S’il fait plus chaud, on coupe, s’il fait plus froid, on allume!
Attention! Ce module va être connecté au secteur! Prenez les précautions nécessaires!
Par ailleurs, avant de connecter le module, testez le en basse tension à l’aide de LEDs qui permettront de visualiser si tout fonctionne comme attendu.
Matériel nécessaire
Si vous avez décidé d’utiliser un module de communication autre que le HC12 précédemment, pensez à prendre quelque-chose de compatible avec ce que vous avez choisi ici!
Pour les tests:
- Un arduino UNO (ou équivalent)
- Un module HC12
- Une platine d’essai
- Des fils
- Deux MOC3041
- Deux résistances 550 Ohms
- Deux diodes
En utilisation nominale:
- J’utilise un arduino Pro Micro. Vous devrez adapter le code si vous n’utilisez pas ce dernier
- Un fusible 1A
- Un porte fusible
- Des connecteurs type Wago
- Un bornier
- Un transformateur 230V – 5V si vous souhaitez connecter le module directement sur la connectique du chauffage (J’ai démonté un chargeur de téléphone)
- Un chauffage avec fil pilote!
Présentation générale
Comme les autres modules, l’arduino va recevoir des commandes à partir de la liaison radio:
- Allume le chauffage
- Éteint le chauffage
- Quel est l’état du chauffage ?
Des signaux vont alors être envoyés sur les 2 MOC3041 afin de modifier le signal secteur relié au fil pilote. Soit le signal sera complètement coupé, soit nous conserverons les demi alternance positive. Le chauffage va alors interpréter le signal obtenu sur le fil pilote, et s’allumera ou s’éteindra automatiquement.
Le fil pilote
Sur la majorité des chauffages électriques, en plus du fil de phase et du fil neutre, un troisième fil, appelé fil pilote, permet de commander automatiquement le chauffage.
Vous pouvez trouver plus d’informations sur cette technologie ici.
Notre montage permet de gérer les quatre premiers ordres:
- Pas de signal
- Signal 220V
- Alternance positive 220V
- Alternance négative 220V
Dans la pratique nous ne gérerons que l’ordre confort et l’ordre arrêt
Le montage
Voici le schéma du montage
A droite, la partie reliée à l’arduino, à gauche la partie reliée au secteur
Voici ce qu’il faut en retenir:
- Les deux composants noirs au milieu sont les MOC3041
- Ils sont reliés à l’arduino via deux résistances afin de limiter le courant de commande.
- Les MOC3041 vont laisser passer le courant si +5V est appliqué sur leur commande. Ils bloqueront le courant si +0V est appliqué.
- En sortie des MOC3041, deux diodes, qui laisseront passer, soit les alternances positives, soit les alternances négatives
- Un fusible permet de protéger le circuit: Les MOC3041 supportent 1A en pic.
Le code
Voilà le code utilisé sur l’arduino:
#include <SoftwareSerial.h>
int pin1 = 3;
int pin2 = 15;
int pinrx = 16;
int pintx = 10;
int setPin = 9;
boolean isOn = true;
boolean firstRun = true;
SoftwareSerial hc12(pintx, pinrx);
char EOT[1];
char EOL[1];
void setup() {
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
/* Initialisation du port s?rie */
Serial.begin(2400);
pinMode(setPin,OUTPUT);
digitalWrite(setPin,LOW);
delay(300);
hc12.begin(2400);
hc12.print("AT+B2400");
delay(200);
hc12.print("AT+C093");
delay(200);
hc12.print("AT+P8");
delay(200);
digitalWrite(setPin,HIGH);// enter transparent mode
EOT[0] = 4;
EOL[0] = '\n';
}
void readSerial(unsigned int MAXBUF, char* buffer){
buffer[0] = 0;
int i = 0;
while(hc12.available() && i < MAXBUF){
buffer[i++] = hc12.read();
delay(10);
}
}
void reinitBuf(char* buf, int bufsize)
{
for(int i = 0 ; i < bufsize; i++){
buf[i] = 0;
}
}
// the loop routine runs over and over again forever:
void loop() {
if(firstRun){
firstRun = false;
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
}
char messageRx[8];
byte taille_messageRx = 8;
readSerial(taille_messageRx, messageRx);
if (messageRx[0] != 0) {
Serial.println((char*)messageRx);
if(strncmp((char*)messageRx, "CALL C", 6) == 0){
Serial.println((char*) "Appel recu"); // Affiche le message
if(messageRx[7] == '1'){
Serial.println("ON");
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
isOn = true;
}else if(messageRx[7] == '0'){
Serial.println("OFF");
digitalWrite(pin1, LOW);
digitalWrite(pin2, HIGH);
isOn = false;
}
delay(1500);
int length = 7;
char message[100] = "";
reinitBuf(message, 100);
strcat(message, "RECE C");
//strcat(message, EOT);
strcat(message, EOL);
hc12.flush();
for(int i = 0; i < 10; i++){
hc12.write(message);
}
hc12.write(EOT);
}else if(strncmp((char*)messageRx, "CALL D", 6) == 0){
Serial.println((char*) "Envoyer mode"); // Affiche le message
char message[100] = "";
reinitBuf(message, 100);
if(isOn){
strcat(message, "RECE D 1");
}else{
strcat(message, "RECE D 0");
}
delay(1500);
//strcat(message, EOT);
strcat(message, EOL);
Serial.print(message);
hc12.flush();
for(int i = 0; i < 10; i++){
hc12.write(message);
}
hc12.write(EOT);
}
}
}
Il faut importer la librairie SoftwareSerial pour le HC12.
Les différents pins à configurer sont:
- Réception HC12: Ligne 5
- Émission HC12: Ligne 6
- Set HC12: Ligne 7
- Commandes des MOC3041: Lignes 3 et 4
Adaptez la configuration du HC12 pour qu’elle soit en phase avec les autres modules.
Dans la fonction loop:
- Si le message reçu est “CALL C”, alors l’arduino va commander le MOC3041 correspondant au paramètre
- CALL C 0 : Eteindre le chauffage
- CALL C 1: Allumer le chaufage
- Si le message reçu est “CALL D”, alors l’arduino va communiquer l’état actuel du chauffage
Conclusion
Il ne reste plus qu’à activer la fonctionnalité chauffage dans le programme Java qui orchestre tout ça! Votre chauffage devrait maintenant être commandé automatiquement.
Notre logement se connecte de plus en plus! Peut être ajouterons nous plus tard des interrupteurs connectés!
Commentaires