Table des matières:

Récupérer Les Codes Infra-Rouge Et 433mhz : 4 Étapes
Récupérer Les Codes Infra-Rouge Et 433mhz : 4 Étapes

Vidéo: Récupérer Les Codes Infra-Rouge Et 433mhz : 4 Étapes

Vidéo: Récupérer Les Codes Infra-Rouge Et 433mhz : 4 Étapes
Vidéo: Télécommande universelle, pour portail ou garage automatique. 2024, Novembre
Anonim
Récupérer Les Codes Infra-Rouge Et 433mhz
Récupérer Les Codes Infra-Rouge Et 433mhz

Le but est d'afficher les codes des télécommandes du style commande de lampe, porte de garage et autre fonctionnant sous 433 mhz (RX433) mais aussi celles des télécommandes infra-rouge de la télévision au autre.

On pourra donc ensuite, grâce à un autre montage, envoyer ces codes et piloter n'importe quoi !

Étape 1: Le Montage

Le montage
Le montage

Simple, un Arduino Nano, une diode réceptrice infra-rouge et un récepteur 433 mhz.

Étape 2: Le Code Arduino

//InfraRouge

#comprendre

int recvPin = 11; //pin Arduino pour récepteur InfraRouge (TOSP4838)

IRrecv irrecv(recvPin);

//RX433

#comprendre

RCSwitch monSwitch = RCSwitch();

decode_results résultats;

void setup ()

{

Serial.begin(9600);

irrecv.enableIRIn();

irrecv.blink13(true);//allume la LED interne lors de l'envoie InfraRouge

mySwitch.enableReceive(0); // Récepteur RX433 (XY-MK-5V) sur pin 2 de Arduino Uno et Nano

}

// affichage des codes InfraRouge

annuler l'ircode (decode_results *results)

{

// Panasonic

if (results->decode_type == PANASONIC) {

Serial.print(résultats->adresse, HEX);

Serial.print(":");

}

Serial.print(résultats->valeur, HEX);

}//annuler

// afficahge des codes encodés

encodage vide (decode_results *results)

{

switch (results->decode_type) {

défaut:

case INCONNU: Serial.print("Inconnu"); Pause;

case NEC: Serial.print("NEC"); Pause;

case SONY: Serial.print("SONY"); Pause;

case RC5: Serial.print("RC5"); Pause;

case RC6: Serial.print("RC6"); Pause;

case DISH: Serial.print("DISH"); Pause;

case SHARP: Serial.print("SHARP"); Pause;

case JVC: Serial.print("JVC"); Pause;

case SANYO: Serial.print("SANYO"); Pause;

case MITSUBISHI: Serial.print("MITSUBISHI"); Pause;

case SAMSUNG: Serial.print("SAMSUNG"); Pause;

cas LG: Serial.print("LG"); Pause;

case POURQUOI: Serial.print("WHYNTER"); Pause;

case AIWA_RC_T501: Serial.print("AIWA_RC_T501"); Pause;

case PANASONIC: Serial.print("PANASONIC"); Pause;

case DENON: Serial.print("Denon"); Pause;

}

}

// vidage des résultats

void dumpInfo (decode_results *results)

{

// Vérifie si le buffer a débordé

if (résultats-> débordement) {

Serial.println("Code IR trop long. Modifiez IRremoteInt.h et augmentez RAWBUF");

revenir;

}

// Afficher la norme d'encodage

Serial.print("Encodage: ");

encodage(résultats);

Serial.println("");

// Afficher le code et la longueur

Serial.print("Code: ");

ircode(résultats);

Serial.print(" (");

Serial.print(results->bits, DEC);

Serial.println(" bits)");

}

//structure

void dumpRaw (decode_results *results)

{

// Imprimer les données brutes

Serial.print("Timing[");

Serial.print(results-> rawlen-1, DEC);

Serial.println("]: ");

pour (int i = 1; i rawlen; i++) {

non signé long x = résultats->rawbuf * USECPERTICK;

if (!(i & 1)) { // pair

Serial.print("-");

if (x < 1000) Serial.print(" ");

if (x < 100) Serial.print(" ");

Serial.print(x, DEC);

} else { // impair

Serial.print(" ");

Serial.print("+");

if (x < 1000) Serial.print(" ");

if (x < 100) Serial.print(" ");

Serial.print(x, DEC);

if (i rawlen-1) Serial.print(", "); //', ' pas nécessaire pour le dernier

}

if (!(i % 8)) Serial.println("");

}

Serial.println(""); // Nouvelle ligne

}

//+=============================================================================

// Videz la structure decode_results.

//

void dumpCode (decode_results *results)

{

// Début de la déclaration

Serial.print("unsigned int "); // type de variable

Serial.print("rawData["); // nom du tableau

Serial.print(results-> rawlen - 1, DEC); // taille du tableau

Serial.print("] = {"); // Début de la déclaration

// Vider les données

pour (int i = 1; i rawlen; i++) {

Serial.print(results->rawbuf * USECPERTICK, DEC);

if (i rawlen-1) Serial.print(", "); // ', ' pas nécessaire sur le dernier

if (!(i & 1)) Serial.print(" ");

}

// Fin de la déclaration

Serial.print("};"); //

// Commenter

Serial.print(" // ");

encodage(résultats);

Serial.print(" ");

ircode(résultats);

// Nouvelle ligne

Serial.println("");

// Maintenant, videz les codes "connus"

if (results->decode_type != UNKNOWN) {

// Certains protocoles ont une adresse

if (results->decode_type == PANASONIC) {

Serial.print("unsigned int addr = 0x");

Serial.print(résultats->adresse, HEX);

Serial.println(";");

}

// Tous les protocoles ont des données

Serial.print("données entières non signées = 0x");

Serial.print(résultats->valeur, HEX);

Serial.println(";");

}

}

boucle vide ()

/****************************************************** * InfraRouge ******************************************/

{

decode_results résultats; // Quelque part pour stocker les résultats

if (irrecv.decode(&results)) { // Saisir un code IR

dumpInfo(&results); // Sortir les résultats

dumpRaw(&results); // Sortir les résultats au format RAW

dumpCode(&results); // Sortir les résultats sous forme de code source

Serial.println(""); // Ligne vide entre les entrées

irrecv.resume(); // Préparer la prochaine valeur

}

/****************************************************** *** RX433 **************************************************/

if (mySwitch.available())

{

valeur int = mySwitch.getReceivedValue();

Serial.println("RX433");

si (valeur == 0) {

Serial.print("Code inconnu");

} autre

{

Serial.print("Reçu ");

Serial.print(mySwitch.getReceivedValue());

Serial.print(" / ");

Serial.print(mySwitch.getReceivedBitlength());

Serial.print("bit ");

Serial.print("Protocole: ");

Serial.println(mySwitch.getReceivedProtocol());

}

mySwitch.resetAvailable();

}//RX433

}//boucle

Étape 3: Infos Sur Les Codes Infra-Rouge

Il y a plusieurs protocoles:

NEC: 32 bits (détails du protocole)

Sony: 12 ou 20 bits (détails du protocole) (Comprendre les codes des télécommandes IR Sony.)

RC5: 12 bits (détails du protocole)

RC6: 20 ou 36 bits (détails du protocole)

Pour Sony et RC5/6, chaque transmission doit être répétée 3 fois !

ATTENTION: la librairie IRremote.h ne semble pas pouvoir envoyer des codes codés sur plus de 32bits. Les RC6, 36 doivent donc être envoyés en raw, qui prennent plus de taille mémoire.

L'envoie des codes se fera avec la librairie IRremote.h

Exemple: (0x devant le code) et le nombre de bits irsend.sendNEC(0xA55A38C7, 32);

Etape 4: Infos Sur Codes RX433

L'envoie se fera avec la librairie RCSwitch.h

Exemple mySwitch.send(1975778, 24);

On peut facilement piloter avec cela des prises commandées.

Conseillé: