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.


