Librairie IRremote pour Arduino
Cette librairie permet d’émettre et de recevoir via l’infrarouge; elle permet de gérer les protocoles NEC, Sony, Philips RC5/RC6 et le traitement de données brutes. Nous allons voir comment la mettre en œuvre.
Les informations concernant l’utilisation de cette librairie se trouvent à l’adresse http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html
La librairie peut être téléchargée à l’adresse https://github.com/shirriff/Arduino-IRremote
Il faut décompresser le fichier ZIP et copier le contenu dans le dossier Arduino ‘libraries\IRremote’.
Pour tester l’utilisation de celle-ci, il faut utiliser un récepteur infrarouge 38 KHz, une résistance de 100 Ohms et une LED émettrice infrarouge. Le câblage sera le suivant sur l’Arduino :
Pour la partie récepteur, il est possible d’indiquer la broche utilisée mais pour la partie émetteur la broche 3 est codée en dur dans la librairie.
La librairie comporte 2 fonctions essentielles, IRsend pour émettre un code et IRrecv pour recevoir un code.
Le programme de test pour la réception sera le suivant :
/* #include <IRremote.h> int broche_reception = 11; // broche 11 utilisée void setup() void loop() |
Télécharger le programme dans l’Arduino puis ouvrir le moniteur série; ensuite prenez une télécommande et appuyez sur une touche quelconque. Si le protocole est reconnu, l’affichage d’un code Hexadécimal devrait apparaitre :
J’ai essayé avec une télécommande ‘CGV’ (décodeur TNT) et une télécommande ‘SFR’, les 2 sont bien reconnues. Lorsque le code FFFFFFFF apparait, cela veut dire que vous êtes resté appuyer trop longtemps sur le bouton de la télécommande.
Maintenant que l’on peut obtenir les codes correspondant à chaque touche, on va s’intéresser à la partie émission.
Afin de pouvoir envoyer un code, il faut connaitre le protocole utilisé, pour cela il faut charger le programme d’exemple de la librairie IRremote ‘IRrecvDump’; télécharger le programme dans l’Arduino puis ouvrir le moniteur série. Taper la touche on/off de la télécommande :
on récupère le code en Hexadécimal, le protocole utilisé (NEC) et le codage effectué en 32 bits. Noter ces informations.
Le code sera le suivant qui permettra d’allumer et d’éteindre le décodeur TNT toutes les 10 secondes :
/* #include <IRremote.h> IRsend emission_ir; // crée une instance void setup() void loop() |
La fonction qui gère le protocole NEC est sendNEC(0xaaaaaa, b) où aaaaaa correspond au code Hexadécimal et b le nombre de bits.
Les fonctions disponibles pour les différents protocoles sont :
void sendNEC(unsigned long data, int nbits);
void sendSony(unsigned long data, int nbits);
void sendRaw(unsigned int buf[], int len, int hz);
void sendRC5(unsigned long data, int nbits);
void sendRC6(unsigned long data, int nbits);
void sendDISH(unsigned long data, int nbits);
void sendSharp(unsigned long data, int nbits);
void sendPanasonic(unsigned int address, unsigned long data);
void sendJVC(unsigned long data, int nbits, int repeat);
A vous de jouer
Qui peu m aider pour ma T/C handicapée ?
Bonjour,
Pouvez-vous approfondir ?
Bonjour merci d avoir répondu, si vous voulez bien je envois sur le forum suivant :
http://forum.snootlab.com/viewtopic.php?f=36&t=996&start=20
lisez le dernier message, je suis michel5650 sur ce forum
si vous préférer je transmet les éléments ici
Ok je regarde cela demain et vous tiens au courant si je peux vous aider
Merci l’objectif est de simplifier une T/C IR d’un WC japonais pour handicapée qui est pas simple pour une personne en difficulté, sur la nouvelle tc elle doit appuyer sur un seul bouton et tout le cycle se fait en auto qui est loin d’être le cas aujourd’hui hui, et je ne suis pas suffisamment qualifier
Pour simplifier je récupère ce protocole le voici :
FFFFFFFF
FFFFFFFF (0 bits)
Raw (82): -8000 500 -600 400 -1500 500 -1500 550 -400 550 -1450 500 -500 550 -1450 500 -1500 550 -450 500 -500 550 -450 500 -600 400 -500 500 -500 500 -1450 650 -350 550 -450 600 -1400 550 -550 450 -1450 500 -1500 500 -500 500 -1550 450 -1500 550 -450 500 -1450 500 -1600 450 -450 500 -1500 550 -450 550 -1450 500 -1500 500 -500 450 -550 500 -500 550 -400 500 -1500 550 -450 550 -450 500 -1550 400
Que je n’arrive pas transmette
Merci de m’aider
Pour récupérer les données transmises, utilisez vous la librairie iremote ?
Ensuite si c’est le cas, il faut que votre télécommande utilise un protocole supporté par la librairie (NEC…)
Bonjour, j ai pas encore fait le teste, je pense que la TC va générer beaucoup de lignes quand il faudra les transmettes mon prog risque d être très long, surtout que je vais appel plusieurs fois au même protocole
Question: sera t il possible de les mettre dans un fonction Void?
Bonne journée
oui j utilise iremtote , je récupère le code avec IRrecvDump vous voyez le resultat plus haut
je poste mon programme teste pour l émission ir
int buzzer=6; // Sonnerie debut fin cycle
// Del infarouge en dur sur IRremote cabler sur pin 3
int alim=12; // Sortie 12 maintient l alimentation le temps du cycle
int entree1 = 1; //Bouton lavage + bidet + sechage
void setup() {
pinMode(entree1, INPUT);
pinMode(6,OUTPUT); // Met la pin 6 sur sortie qui est le buzzer
pinMode(alim,OUTPUT); // Met la pin 12 sur sortie qui est l auto alimentation
}
#include
IRsend irsend;
unsigned int lavage[82]={500,600,400,1500,500,1500,550,400,550,1450,500,500,550,1450,500,1500,550,450,500,500,550,450,500,600,400,500,500,500,500,1450,650,350,550,450,600,1400,550,550,450,1450,500,1500,500,500,500,1550,450,1500,550,450,500,1450,500,1600,450,450,500,1500,550,450,550,1450,500,1500,500,500,450,550,500,500,550,400,500,1500,550,450,550,450,500,1550,400};
void loop(){
// ************************************* Cycle de nettoyage complet ****************
if (digitalRead(entree1) == HIGH) { //Auto alimentation bouton sur l entrée 1 pour lavage complet sortie 12 pour l alime
digitalWrite(alim, HIGH); // Met la pin 12 a 1 pour s auto-alimenter a travers le relais reed
digitalWrite(buzzer, HIGH); // Sonne le buzzer pour prevenir le lavage
delay(100);
digitalWrite(buzzer, LOW);
Serial.begin(9600);
irsend.sendRaw(lavage,82,38);
delay(6*1000); // Temps que la buse arrive en position
}
digitalWrite(alim, LOW); // coupe l alimentation
delay(1000);
}
J’insiste sur le fait de la capture des données de la télécommande. Car je n’ai pas pu utiliser librairie irremote pour capturer une télécommande d’appareil photo canon et émettre ces même signaux par exemple
oui c est possible il faut trouver un moyens pour la capture, peut etre un oscilo
si tu as une autre idée
J’ai écrit un article pour décoder la télécommande canon : Utiliser un capteur infrarouge pour décoder une télécommande IR | iTechnoFrance
Sinon effectivement c’est l’utilisation d’un oscilloscope qui est le meilleur moyen
Merci je vais tester
Bonjour, j ai pas fait le teste, mais je pense que ma TC va générer beaucoup de lignes
pour simplifier mon prog d émission est il possible t utiliser la fonction Void pour chaque protocole?
Bonne journée
Bonjour un petit mot pour dire que ca marche
Merci
bonjour
Je suis débutant en Arduino et il me faut un code pour mesurer le temps entre deux obstacles franchi l’un après l’autre et l’affiché sur l’afficheur de l’arduino. Si quelqu’un peut m’aider ces très important je suis en DUT informatique et je suis loin de trouver ce que je cherche.
Merci
Bonjour, vous pouvez en dire plus car je ne comprends pas votre besoin
Bonjour, j’aurais besoin d’aide. Quand je test ma télécommande, je reçoit ce code :
68733A46
Unknown encoding: 68733A46 (32 bits)
Raw (68): -31068 4450 -4500 550 -1650 650 -1600 550 -1650 550 -600 600 -550 500 -600 600 -500 500 -600 550 -1650 550 -1700 550 -1650 550 -600 600 -500 600 -550 500 -600 500 -600 550 -1650 550 -1700 550 -1650 550 -600 550 -600 500 -600 500 -600 600 -500 550 -550 550 -550 550 -600 500 -1700 550 -1650 550 -1750 550 -1650 550 -1650 550
Que dois-je faire pour pouvoir le reproduire ?
faut-il mettre » void sendRaw » ou autre chose ? Merci
c-a-d tu veux envoyé le code ou tu veux le convertitr en 0 et 1 et s’avoir qu’elle protocole tu utilise ?
Salut svp , est ce que ce programme la peut générer le protocole philips rc6 (36bits )!! car j’ai essayer de le faire en utilisant la librairie IRremote https://github.com/shirriff/Arduino-IRremote/blob/master/IRremote.cpp , le module « décode » fonctionne mais le problème est dans le module « send » ne marche pas , j’ai essayer de chmager le code comme de changer le type de « resutls->value » de long (32 bits)vers long long(64 bits ) pour que je puisse stocké la trame , en plus je suis pas vraiment satisfait par la parti de « HEADER » dans le module « send » , qui as déjà essayer de tester ce protocole la !!?
Bon journée
Bonjour,
Bien que la réception de données fonctionne, l’envoie ne marche pas. Je reçois un message d’erreur:
Arduino : 1.6.3 (Windows 7), Carte : « Arduino Uno »
sketch_apr11a.ino: In function ‘void loop()’:
sketch_apr11a.ino:15:16: error: ‘class IRsend’ has no member named ‘sendNEC’
Erreur lors de la compilation.
Je n’arrive pas à solutionner ce problème, quelqu’un aurait il une piste?
Merci d’avance
Il faut prendre la dernière version de cette librairie:
https://github.com/shirriff/Arduino-IRremote/releases/tag/MAJOR
Je suis dans le même cas que vous, une solution serait la bien venu
voici le module de transmission qui fonctionne :
/*
* The RC6 protocol also phase encodes databits although the phasing is opposite of RC5.
*/
#define RC6_HDR_MARK 2666
#define RC6_HDR_SPACE 889
#define RC6_T1 444
void IRsendRC6::send(unsigned long data, unsigned char nbits)
{
enableIROut(36);
data = data << (32 – nbits);
Extent=0;
mark(RC6_HDR_MARK); space(RC6_HDR_SPACE);
mark(RC6_T1); space(RC6_T1);// start bit "1"
int t;
for (int i = 0; i < nbits; i++) {
if (i == 3) {
t = 2 * RC6_T1; // double-wide trailer bit
}
else {
t = RC6_T1;
}
if (data & TOPBIT) {
mark(t); space(t);//"1" is a Mark/space
}
else {
space(t); mark(t);//"0" is a space/Mark
}
data <<= 1;
}
space(107000-Extent); // Turn off at end
}
Je débute et bute avec ce programme ; )
Je viens de transférer le croquis dans mon arduino. Lorsque je test une télécommande, la led « L » de la carte clignote donc quelque chose se passe mais rien n’est jamais afficher dans le moniteur série. Où est donc le problème.
NB : j’ai le même problème avec d’autre croquis IR/télécommande trouvés sur le net
Merci de votre aide avisée 🙂
Thierry
bonjour j’ai réussi a faire fonctionner le système avec plusieurs télécommandes mais je bute sur la télécommande du décodeur de canal sat y a t il une particularité avec la télécommande de canal sat
bonjour, j ai fait ce code pour faire une deuxième télécommande :
#include
IRsend irsend;
int power = 0;
int source = 0;
void setup()
{
Serial.begin(9600);
pinMode(6,INPUT);
pinMode(7,INPUT);
}
void loop() {
power = digitalRead(6);
source = digitalRead(7);
if (power == HIGH) {
irsend.sendRC5(2A, 12);
delay(40);
}
}
mais la ligne
irsend.sendRC5(2A, 12);
me fait une erreur car le A n existe pas alors que j ai bien fait toutes les instructions et le code de la télécommande est bon
mais sinon le programme fonctionne avec une autre tv
merci pour ces infos cela fonctionne mais j’ai un 2ème infrarouge
et je n’arrive pas à le déclarer
merci de votre aide
je découvre arduino alors !! pas facile
c’est lui
Obstacle infrarouge IR Avoidance Sensor Module pour Arduino Smart Car Robot 3 fils
does not name a type Message d,erreur apres verification .J ai deja telecharger le IRremote.h et deja recopie dans la librairie Le programe s,arrete au niveau du code IRsend irsend; QUE ferais je pour corriger erreur .Le montage me semble correct. un diode IR et un module recepteur infra rouge trois broches .
Bonjour je n’arrive pas a détecter le protocole d’un fusil laserX , la réponse donnée est :
Encoding : UNKNOWN
Code : 33EBDD7A (32 bits)
Timing[17]:
+6250, – 550 + 450, – 600 +1500, – 550 + 500, – 550
+1550, – 550 + 450, – 600 + 450, – 650 +1500, – 550
+1500
unsigned int rawData[17] = {6250,550, 450,600, 1500,550, 500,550, 1550,550, 450,600, 450,650, 1500,550, 1500}; // UNKNOWN 33EBDD7A
Comment savoir quel protocole est utilisé et comment l’ajouter ?
bonsoir,
2 solutions, soit le protocole est inconnu comme dans votre cas et dans ce cas notez les valeurs brut (raw) à envoyer en émission et effectuer un test; soit votre fusil n’utilise pas la modulation à 38 Khz des télécommandes standards.
J’ai déjà était confronté à ce genre de problème avec une télécommande d’appareil photo Nikon, et dans ce cas il faut brancher sur votre Led Infrarouge un analyseur logique pour étudier le signal
Merci de cette réponse très rapide 😉 Comment tester avec les valeurs brut ?
La librairie le permet
bonsoir, comment peut-on réutiliser les données réceptionnées? merci d’avance
bonsoir, regardez mes différents articles qui parlent de la réception infrarouge et notemment de la modification d’une lampe de bureau où j’utilise simplement cette librairie
bonsoir , je compte commander un climatiseur via une carte nodemcu esp8266 j’ai trop essayé mais pas de résultat , en fait je peux lire la trame mais cela ne fonctionne pas avec le irsend sachant que la trame est de type unkown et j’ai trouvé une autre SAMSUNG , y a t il une solution svp ?? c urgent . merci
Bonjour je suis élève en 1er et je débute actuellement mon projet comporte une partie récepteur j’aimerai savoir comment peut on faire pour télécharger irrevdump dans l’arduino je n’ai pas compris cette partie merci d’avance de m’accorder un peu de votre temps pour me répondre. Bonne continuation
Bonsoir
Il suffit de sélectionner le programme irrevdump fournie par la librairie dans l’ide arduino