Bien le bonjour,
Comme la télécommande du vélux de ma copine est à la limite de la mort, j'ai décidé de lui créer une copie.
J'ai utilisé un module arduino nano.
J'ai d'abbord regardé avec Audacity et un petit montage utilisant un capteur infrarouge pour identifier le signal de la télécommande originel, avec une petite représentation sous isis ça donne :
SchemaSequenceTelecommandeDoudou.png
Puis pour l'émetteur, j'ai utilisé :
#Trois boutons :
*ouvrir
*stop
*fermer
#Un détecteur de flamme (la sorte de DEL noir sur la photo) (pour ouvrir le veux en cas de feu... (oui, il me restait ce composant que j'avais envie d'utiliser...))
#Un potentiomètre pour régler sa sensibilité.
#Une LED infrarouge
Et puis c'est tout.
On obtient le schéma suivant (je n'ai pas mis les les des boutons poussoir ni le détecteur de flamme ni le potentiomètre, et j'ai mi une led bleu au lieux d'une led infrarouge, et j'ai mis une résistance de 280 ohm au lieu de 190 ohm pour une led infrarouge) :
Capture d'écran 2016-11-09 22.09.10.png
Voici le code utilisé :
J'ai d'abord utilisé le logiciel ISIS pour vérifier mon code, puis j'ai fait le tout sur une breadboard.Code://telecommande pour le velux de doudou const int button1Pin =2; const int button2Pin =3; const int button3Pin =4; const int UVLedPin=5; const int flameDetectorPin=A1; const int potar1Pin =A0; const int led1Pin =6; const int led2Pin =7; const int led3Pin =8; int button1State; int button2State; int button3State; int flameDetectorValue; int potar1Value; int i; //sequences de cliniotement de la led UV : temps en microseconde //positif : led allumee //negatif : led eteinte int sequenceUp[95]={516, -1156, 533, -1128, 1327, -317, 510, -1151, 533, -1122, 1355, -317, 499, -1156, 505, -1162, 499, -1162, 522, -1139, 505, -1162, 510, -1151, 1338, -323, 1344, -317, 499, -1151, 510, -1156, 1344, -317, 1338, -317, 1338, -323, 1344, -306, 1338, -323, 499, -1156, 505, -1151, 539, -25879, 624, -1128, 505, -1162, 1361, -295, 499, -1162, 510, -1156, 1349, -306, 499, -1168, 522, -1139, 505, -1162, 505, -1156, 510, -1156, 499, -1162, 1338, -317, 1349, -306, 510, -1139, 539, -1139, 1344, -317, 1361, -283, 1344, -317, 1344, -312, 1338, -312, 510, -1151, 539, -1122, 510}; int sequenceStop[95]={1344, -317, 505, -1156, 1349, -306, 505, -1162, 505, -1156, 1349, -306, 505, -1156, 510, -1156, 539, -1122, 510, -1151, 510, -1156, 505, -1162, 1344, -312, 1366, -289, 505, -1156, 499, -1156, 1349, -317, 1372, -283, 1344, -312, 1366, -283, 510, -1151, 539, -1134, 1344, -312, 499, -25998, 1332, -317, 510, -1156, 1349, -312, 499, -1162, 533, -1128, 1349, -312, 499, -1156, 510, -1156, 510, -1139, 516, -1162, 510, -1156, 533, -1128, 1344, -317, 1344, -312, 499, -1151, 516, -1156, 1344, -312, 1338, -323, 1344, -312, 1338, -312, 510, -1156, 533, -1128, 1349, -312, 505}; int sequenceDown[95]={510, -1162, 1344, -312, 1395, -261, 499, -1162, 510, -1156, 1366, -289, 499, -1156, 539, -1128, 533, -1134, 505, -1156, 510, -1156, 505, -1156, 1349, -312, 1372, -283, 499, -1156, 510, -1162, 1338, -323, 1327, -317, 1338, -323, 1338, -317, 1332, -323, 1327, -323, 505, -1156, 1344, -25136, 516, -1145, 1349, -323, 1355, -289, 505, -1156, 505, -1168, 1338, -317, 505, -1156, 505, -1162, 505, -1151, 510, -1156, 527, -1139, 510, -1151, 1349, -312, 1366, -289, 505, -1151, 533, -1134, 1344, -317, 1344, -306, 1372, -289, 1344, -312, 1366, -289, 1338, -317, 499, -1156, 1349}; //test //int sequenceUp[95]={2650, -800, 400, -950, 400, -550, 300, -550, 400, -850, 800, -550, 400, -450, 400, -500, 350, -500, 400, -550, 350, -500, 300, -500, 450, -450, 400, -500, 400, -450, 350, -500, 350, -600, 800, -450, 400, -950, 350, -500, 350}; //int sequenceUp[39]={2750, -750, 550, -750, 550, -350, 550, -300, 1450, -1200, 550, -300, 550, -350, 550, -300, 550, -300, 600, -300, 550, -300, 550, -350, 550, -300, 550, -350, 550, -300, 550, -350, 1000, -300, 550, -750, 550, -350, 550}; void setup() { pinMode(button1Pin, INPUT); pinMode(button2Pin, INPUT); pinMode(button3Pin, INPUT); pinMode(flameDetectorPin, INPUT); pinMode(potar1Pin, INPUT); pinMode(UVLedPin, OUTPUT); pinMode(led1Pin, OUTPUT); pinMode(led2Pin, OUTPUT); pinMode(led3Pin, OUTPUT); digitalWrite(UVLedPin, LOW); //Serial.begin(9600); } void loop() { // on lit l'etat des boutons button1State = digitalRead(button1Pin);//prend 114 microsecondes a s'executer d'apres ISIS button2State = digitalRead(button2Pin); button3State = digitalRead(button3Pin); flameDetectorValue = analogRead(flameDetectorPin); potar1Value = analogRead(potar1Pin); //si on appuie sur le boutton 1 /*Serial.println("\nflameDetectorValue"); Serial.println(flameDetectorValue); Serial.println("potar1Value"); Serial.println(potar1Value);*/ if(((button1State == HIGH || flameDetectorValue >= potar1Value) && button2State == LOW && button3State == LOW)) { //on allume la led1 digitalWrite(led1Pin, HIGH); //on fait clinioter la led UV a la frequence du bouton 1 for(i=0;i<95;i++) { if(sequenceUp[i]>0)//on allume la led le temps voulu { digitalWrite(UVLedPin, HIGH); delayMicroseconds(sequenceUp[i]); } else//on eteint la led le temps voulu { digitalWrite(UVLedPin, LOW); delayMicroseconds(-sequenceUp[i]); } } digitalWrite(UVLedPin, LOW);//on eteint la led quand on a fini le dernier allumage de led } //si on appuie sur le boutton 2 if(button2State == HIGH && button3State == LOW && button1State == LOW) { //on allume la led2 digitalWrite(led2Pin, HIGH); //on fait clinioter la led UV a la fréquence du bouton 2 for(i=0;i<95;i++) { if(sequenceStop[i]>0)//on allume la led le temps voulu { digitalWrite(UVLedPin, HIGH); delayMicroseconds(sequenceStop[i]); } else//on eteint la led le temps voulu { digitalWrite(UVLedPin, LOW); delayMicroseconds(-sequenceStop[i]); } } digitalWrite(UVLedPin, LOW);//on eteint la led quand on a fini le dernier allumage de led } //si on appuie sur le boutton 3 if(button3State == HIGH && button1State == LOW && button2State == LOW) { //on allume la led1 digitalWrite(led3Pin, HIGH); //on fait clinioter la led UV a la fréquence du bouton 3 for(i=0;i<95;i++) { if(sequenceDown[i]>0)//on allume la led le temps voulu { digitalWrite(UVLedPin, HIGH); delayMicroseconds(sequenceDown[i]); } else//on eteint la led le temps voulu { digitalWrite(UVLedPin, LOW); delayMicroseconds(-sequenceDown[i]); } } digitalWrite(UVLedPin, LOW);//on eteint la led quand on a fini le dernier allumage de led } digitalWrite(led1Pin, LOW); digitalWrite(led2Pin, LOW); digitalWrite(led3Pin, LOW); delay(140); }
J'ai fini par passer à une plaque de prototype soudable.
IMG-20161109-WA0008.jpg
IMG-20161109-WA0010.jpg
J'ai vérifié mon montage avec un oscilloscope, qui m'a permis de relever un temps de monté en tension et de descente en tension au niveau de la LED de 40microseconde. Je vais donc devoir modifier mon code en conséquence, mais sinon ça fonctionne.
Et je crains que la lumière émise par la led ne soit pas exactement de la bonne longueur d'onde car le détecteur utilisé précédemment a du mal à detecter le signal... A moins que ce soit à cause du problème de timing... A moins que ce soit la resistance de la led qui soit trop élevée (pourtant calculée pour avoir 20mA)...
Si vous avez des avis je suis preneur...
Si vous refaite mon projet, je suis aussi preneur de vos photos
A+
-----