Piloter vos prises CHACON RF433Mhz avec un Arduino


Niveau:2

Introduction:

Dans ce chapitre nous allons voir comment piloter nos prises CHACON avec un Arduino. Il sera possible de les piloter avec d’autres cartes compatibles avec IDE Arduino.

Descriptif du matériel:

Pour les prises:

Réferences : 54795
Fréquence : 433,92MHz
Alimentation : 230V, 50Hz
Charge Max : 2300W / 10A

Documentation : Documentation Prises CHACON.pdf

Émetteur RF:

Récepteur RF:

Raccordement:

Vérifier que les broches sont bien identique pour votre module.

Récepteur:

VCC =>+5 Volt ou broche 5 ( Mise à niveau haut pour alimenter la carte) de la carte Arduino

GND=>GND ou broche 2 ( Mise à niveau bas pour alimenter la carte) de la carte Arduino.

DATA => broche 2 ou  3 de la carte Arduino.

Emetteur:

DATA émetteur => Broche 13  de la carte Arduino.

VCC =>+5 Volt ou  broche 12 ( Mise à niveau haut pour alimenter la carte) de la carte Arduino

GND=>GND.

Lecture des codes de votre télécommande:

Voici le code pour la lecture des commandes:

/*Décodage des commandes CHACON via carte Arduino
 * Christophe Caron 11/11/2017
 * www.caron.ws
*/

#define VCC_PIN 5 // Alimentation du récepteur en 5 Volt
#define GND_PIN 2 // Broche Masse du récepteur la masse du 
#define DATA_PIN 3 // Broche DATA du récepteur
 
void setup(){
 pinMode(DATA_PIN, INPUT); // Configuration en entrée pour la sortie DATA du module
 pinMode(GND_PIN, OUTPUT); // Configuration en sortie pour la broche GND du module
 digitalWrite(GND_PIN, LOW); // Mise à la masse la broche GND du module
 pinMode(VCC_PIN, OUTPUT); // Configuration en sortie pour la broche VCC du module
 digitalWrite(VCC_PIN, HIGH);// Mise à VCC la broche VCC du module
 Serial.begin(115200); // Initialisation de la liaison série
}
 
void loop()
{
 unsigned long sender = 0;
 
 if((sender = listenSignalDIO()) != 0){ // Si signale recu
 Serial.print("Code reçu: ");
 Serial.println(sender); // Impression du code
 } 
}
 
//listenSignalDIO()
unsigned long listenSignalDIO(){
 
 int i = 0; //Variable du compteur boucle
 unsigned long t = 0; //Variable de temps entre 2 front descendant
 byte prevBit = 0; //avant dernière "bit" 433 reçue
 byte bit = 0; //dernière "bit" 433 reçue
 unsigned long sender = 0; //code DIO au format unsigned long - ne gère pas le bit on-off, donne 2 codes différents
 t = pulseIn(DATA_PIN, LOW, 1000000);//réception des bits 
 if(t > 2550 && t < 2800) { //on lance le déchiffrage quand on reçoit un bit correspondant au deuxième cadenas du signal DIO
 while(i < 64)
 { 
 t = pulseIn(DATA_PIN, LOW, 1000000); //reception des bits 
 if(t > 280 && t < 340) //si environ 310 + ou - 30 c'est un bit à 0
 { bit = 0; 
 }
 else if(t > 1300 && t < 1400) //si environ 1350 + ou moins 50 c'est un bit à 1
 { bit = 1; 
 }
 else //sinon la série est érronnée, on sort de la fonction
 break;
 if(i % 2 == 1) // on ne traite que les deuxièmes bits (codage manchester)
 {
 if((prevBit ^ bit) == 0) //si faux = codage manchester KO, on sort
 break;
 sender <<= 1; //on stock chaque bit dans l'unsigned long
 sender |= prevBit;
 }
 prevBit = bit; //on enregistre le bit précédent
 ++i;
 }
 } 
 if(i == 64){ // si on a 64 bit (i=64) on a un code DIO détecté
 return sender; 
 } 
 return 0; //sinon pas de code DIO
}

Source du programme Lecture_RF_CHACON.zip

Lancer le programme et appuyer sur les touches de la télécommande pour avoir le code de la touche.

Envois d’un code vers une prise:

Voici le code pour envoyer une commande à une de vos prises:

/* Envois d'une commande CHACON via carte Arduino
 * Christophe Caron 11/11/2017
 * www.caron.ws
*/

#define DATA_PIN 13 // Broche DATA de l'émetteur
#define VCC_PIN 12 // Alimentation du récepteur en 5 Volt
void setup()
{
 pinMode(VCC_PIN, OUTPUT); // Configuration en sortie pour la broche VCC du module
 digitalWrite(VCC_PIN, HIGH);// Mise à VCC la broche VCC du module
 Serial.begin(115200);
 pinMode(DATA_PIN, OUTPUT);
}

void loop() {
 unsigned long shiftedCode; // Variable pour le code à envoyer
 const unsigned int THIGH = 220, TSHORT = 350, TLONG=1400; // Temps des états
 int val; // Variable lecture liaison série
 if (Serial.available() > 0) { // Si valeur sur liaison série
 val = Serial.read(); // Lecture de la valeur
 Serial.println("Envois de la commande...");
 for (int i = 0; i < 5; i++) { // Envois 5 fois de la commande
 if(val == '1') {
 Serial.println("Marche"); // Marche
 shiftedCode = 628943249; // Code pour la marche
 } else {
 Serial.println("Arrêt"); // Arrêt
 shiftedCode = 628943233; // Code pour l'arrêt
 }
 //Envois du code à la prise
 digitalWrite(DATA_PIN, HIGH);
 delayMicroseconds(THIGH);
 digitalWrite(DATA_PIN, LOW); 
 delayMicroseconds(2675);
 for (int i = 0; i < 32; i++) {
 if (shiftedCode & 0x80000000L) {
 digitalWrite(DATA_PIN, HIGH);
 delayMicroseconds(THIGH);
 digitalWrite(DATA_PIN, LOW);
 delayMicroseconds(TLONG);
 digitalWrite(DATA_PIN, HIGH);
 delayMicroseconds(THIGH);
 digitalWrite(DATA_PIN, LOW);
 delayMicroseconds(TSHORT);
 } else {
 digitalWrite(DATA_PIN, HIGH);
 delayMicroseconds(THIGH);
 digitalWrite(DATA_PIN, LOW);
 delayMicroseconds(TSHORT);
 digitalWrite(DATA_PIN, HIGH);
 delayMicroseconds(THIGH);
 digitalWrite(DATA_PIN, LOW);
 delayMicroseconds(TLONG);
 }
 shiftedCode <<= 1;
 }
 digitalWrite(DATA_PIN, HIGH);
 delayMicroseconds(THIGH);
 digitalWrite(DATA_PIN, LOW);
 delayMicroseconds(10600);
 digitalWrite(DATA_PIN, HIGH);
 delayMicroseconds(THIGH);
 }
 Serial.println("Commande envoyée"); // Message de fin
 }
}

Source du programme Commande_RF_CHACON.zip

Pour utiliser le programme, vous devez mettre vos codes de touche et via la liaison série taper 1 pour marche et 0 pour arrêt.