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.