Un remplacement télécommande climatiseur (2 / 4 étapes)

Étape 2: Programmation - Arduino côté

Nous avons besoin de communiquer via l’interface série et d’envoyer des commandes infrarouges.
Pour la partie distante de l’IR, nous allons utiliser la bibliothèque IRremote Arduino (https://github.com/shirriff/Arduino-IRremote). Cette bibliothèque peut être utilisée pour envoyer des données prédéfinies sur IR, comme le fait de LIRC. Mais nous utiliserons uniquement pour ses fonctions d’assistance (pour définir la fréquence de 38KHz pour IR et de gérer des horaires tout en envoyant des messages).

Lors de la précédente instructable nous avons constaté que nous avions besoin pour communiquer des commandes pour le conditionneur d’air envoyer une séquence de serrure, une introduction constante, la séquence de blocage encore une fois, puis la charge réelle. Bien l’Arduino peut très bien avoir l’introduction dans son code et attendez simplement que la charge utile. Nous pourrions juste envoyer les valeurs d’options et de faire l’Arduino à modifier un modèle avec ces valeurs, mais pour faire simple, nous allons juste fournir la charge entière et il permet d’envoyer un tel quel. Pour envoyer les bits il va allumer le LED IR et OFF selon le les timings trouvés précédemment.

Ici, l’Arduino agit comme un « esclave », jamais initier une communication elle-même. Comme j’ai l’intention de faire des usages multiples de cette unité, que j’ai commencer les communications d’un seul caractère « I » qui signifie « envoyer par IR », suivie de 19 octets de charge utile. L’Arduino puis envoie le message à l’air conditionné.
Du côté de l’Arduino, le code peut ressembler un peu trop compliqué, mais c’est parce qu’il est censé pour servir de relais radio aussi bien, alors la communication entre la Pi et l’Arduino sur l’interface série ne sera pas toujours juste d’envoyer le message de l’IR.
Voici la source arduino qui sera utilisée pour envoyer des commandes à l’Air conditionné.

Un peu d’explication :
-> le code de boucle juste vérifie si une commande est prête. Dans ce cas, il exécute la commande (pour maintenant juste "Envoyer un message de IR").
-> la SerialEvent() est appelée après un loop(), s’il y a des données série dans la mémoire tampon. Dans cette fonction que la commande est lu, la charge utile est préparée, puis un indicateur est défini pour indiquer la fonction loop() qu’une commande est prête

serialEvent recevra des caractères ASCII qui représentent les valeurs HEXADÉCIMALES. Pour le convertir, nous utilisons la fonction sscanf avec "%x" (hexadécimal) format option. Nous allons stocker les caractères reçus dans un tableau de 5 char et remplissez-le avec: « 0 x » + les caractères 2 + « \0 » (à la fin de la chaîne).

char hexConvert [5] = « 0 x » ;
ASCII est reçu
pour (int i = 0; i < 19; i ++) {}
hexConvert [2] = Serial.read() ;
hexConvert [3] = Serial.read() ;
hexConvert [4] = « \0 » ;
convertir les caractères reçus en une valeur numérique en charge utile [i]
sscanf (hexConvert, « %x » et (payload[i])) ;
}
À ce stade, charge utile [i] contient la valeur binaire représentée par les caractères reçus.

Dans leEnvoyer timings bon de commande servent à envoyer des serrures, introduction et charge utile. Pour envoyer des données, le code doit envoyer chaque bit séparément avec la fonction irsend.mark(duration) et irsend.space(duration). Comme il est expliqué dans le précédent instructable la durée est de tout 400us (devrait être en réalité plus proche 420 je pense) pour la marque (d’État) et 400us ou 1300us pour l’espace (état éteint) pour envoyer un 0 ou un 1, respectivement.
D’envoyer chaque bits de chaque octet le code suivant est utilisé :

pour (int s = 0; s < payloadSize; s + +) {}
pour (int i = 7; j’ai > = 0; i--) {/ / le Bit le plus significatif vient en premier
irsend.Mark(irSpace) ;
irsend.Space ((charge utile [s] >> i) & 1 == 1? irOne : irZero) ;
}
}

Si vous n’êtes pas familiarisé avec les opérations au niveau du bit il y a beaucoup de tutoriels disponibles sur le net.
Ce qui se passe ici est :
Pour chaque octet de la charge utile (fonctionne de la même manière avec l’intro) :
Pour i allant de 7 à 0
décalage de l’octet car j’ai rangs vers la droite
Regardez le dernier morceau
Si ce bit est 1, envoyez-nous un signal de « irOne » (1300us), sinon envoyez-nous un signal de « irZero » (400us)

Ce que nous obtenons en déplaçant l’octet droit de rang N (en ajoutant des zéros à gauche) est essentiellement la Nth mordu sur le côté à droite. Lorsque masquant avec une opération de bits AND (&) 1 nous prenons seulement le bit la plus à droite, donc dans le monde nous obtenons la valeur du nième binaire.

Exemple avec 5 b en hexa = 0101 1011 en binaire. Les parenthèses sont là pour mettre l’accent sur les bits décalés, pour une meilleure lisibilité...

J’ai = 7 = > Maj (0) 101 1011 pour 7 rangs = > 0000 000(0)
masque avec 1 = > 0000 0000 & 0000 0001 = 0 = > Envoyer irZero

J’ai = 6 = > Maj (01) 01 1011 pour 6 rangs = > 0000 00(01)
masque avec 1 = > 0000 0001 & 0000 0001 = 1 = > Envoyer irOne

J’ai = 5 = > Maj (010) 1011 1 pendant 5 rangs = > 0000 0(010)
masque avec 1 = > 0000 0010 & 0000 0001 = 0 = > Envoyer irZero

J’ai = 4 = > shift (0101) 1011 pour 4 rangs = > 0000 (0101)
masque avec 1 = > 0000 0101 & 0000 0001 = 1 = > Envoyer irOne

J’ai = 3 = > Maj (0101 1) 011 pour 3 rangs = > 000 (0 1011)
masque avec 1 = > 0000 1011 & 0000 0001 = 1 = > Envoyer irOne

J’ai = 2 = > Maj (0101 10) 11 pour 2 rangs = > 00 (0110 01)
masque avec 1 = > 0001 0110 & 0000 0001 = 0 = > Envoyer irZero

J’ai = 1 = > Maj (0101 101) 1 pour 1 grade = > 0(010 1101)
masque avec 1 = > 0010 1101 & 0000 0001 = 1 = > Envoyer irOne

J’ai = 0 = > shift (0101 1011) pour grade 0 = > (0101 1011)
masque avec 1 = > 0101 1011 & 0000 0001 = 1 = > Envoyer irOne

Nous les avons envoyés bits à gauche pour le bon ordre.

Notez que la bibliothèque IRremote utilise pin3 pour envoyer des messages. Je suppose qu’il pourrait être possible d’utiliser la broche 11 (même minuterie pour PWM) en modifiant l’axe de la cible dans le code de la bibliothèque, mais je n’ai pas testé.

Articles Liés

(Concept) 275 $1440p projecteur (ou 225 $ pour 1080p)

(Concept) 275 $1440p projecteur (ou 225 $ pour 1080p)

Veuillez noter que ceci est tout écrit comme si j'avais déjà créé ce projecteur. Je n'ai pas le cas. Il s'agit d'un modèle de projecteur que j'ai l'intention d'apporter à la vie quand j'ai rassembler les ressources pour le faire. Pièces acheté en lig
Apache SSL serveur de WebDav

Apache SSL serveur de WebDav

tandis que DropBox et autre solotuoin de stockage en ligne sont bonnes, je trouve que je suis toujours à court d'espace et ne pas vouloir choisir quels fichiers j'ai dégivré pour construire une DropBox comme Cloud storage server.La solution qui se so
CO2 de vidange nettoyeur Hack

CO2 de vidange nettoyeur Hack

tout à l'heure, nous avons eu un drain en cours d'exécution lent qui semble être permanente.  Je suis tombé sur un produit appelé « Kleer des cerveaux » qui utilise des cartouches de CO2 pour faire sauter à travers des sabots.  J'ai pensé qu'il valai
Ressusciter une vieille brouette

Ressusciter une vieille brouette

Une vieille brouette a été mis dehors pour la poubelle... la peinture avait pour la plupart en flocons et le pneu a été complètement à plat, mais c'était charpentée, alors j'ai traîné pour une seconde chance à vie.J'ai corrigé celui-ci chez TechShop.
Audio stéréo avec Arduino

Audio stéréo avec Arduino

Récemment j'ai été annonce beaucoup de projets qui utilisent un 8 bits échelle de résistanceconvertisseur numérique analogique (DAC) et un Arduino à faire sonner. (voir la boîte d'effets vocaux Arduino, l'échantillonneur de tambour Arduino et mon tut
L’exécution conditionnelle dans lot

L’exécution conditionnelle dans lot

l'exécution conditionnelle signifie qu'une commande peut seulement être émise sous une certaine condition. Vous apprendrez également dans ce instructable comment faire un fichier batch de ligne unique et comment organiser et classer un fichier de com
Comment contrôler dynamiquement un servo ou le moteur par l’intermédiaire de votre ordinateur

Comment contrôler dynamiquement un servo ou le moteur par l’intermédiaire de votre ordinateur

je travaille sur la création du robot que je détaillerai dans ce instructable. Pour construire ce la nécessité se présente pour être en mesure de contrôler de manière dynamique un servo ou un moteur de l'ordinateur.Ceci est mon entrée pour le défi de
Saab 9-5 & remplacement de pile de la télécommande clé 9-3

Saab 9-5 & remplacement de pile de la télécommande clé 9-3

Vous avez reçu le message :« Télécommande batterie faible, remplacer la batterie »dans votre SID ? Ce tutoriel vous explique comment remplacer la batterie de votre Saab 9-5 (1998-2010) et Saab 9-3 (2000-2002) clé à distance.Pour ce faire, vous aurez
Remplacement de télécommandes infrarouge avec un iPhone

Remplacement de télécommandes infrarouge avec un iPhone

Dans tout le monde vie, tout le monde rencontre beaucoup de différentes télécommandes IR, mais il parfois obtenir frustrant de pointer la télécommande dans la bonne direction, ou le DVR ne joue pas quand vous le souhaitez. Je suis venu avec l'idée de
Comment faire pour remplacer un mécanisme de commande puissance porte serrure sur un camion de 1999-2010 Ford Ranger

Comment faire pour remplacer un mécanisme de commande puissance porte serrure sur un camion de 1999-2010 Ford Ranger

1 a Auto vous montre comment réparer, de difficulté, de modifier ou de remplacer un actionneur de verrouillage de porte cassé ou cassé la puissance sur 1999-2010 Ford Ranger modèles de camions. Le véhicule réel montré est un 2004 Ford Ranger. Tout d'
Protocole de contrôle de climatiseur télécommande ingénierie inverse

Protocole de contrôle de climatiseur télécommande ingénierie inverse

Salut, ceci est mon premier espoir instructable, vous l'aimez.Pour entrer dans l'électronique, j'ai choisi un projet domotique : un système me permettant de programme et contrôle les deux unités de climatisation dans mon appartement. Dans ce instruct
Comment faire pour remplacer le moteur de commande d’Air de ralenti (IAC) dans une Mustang de Ford 1999

Comment faire pour remplacer le moteur de commande d’Air de ralenti (IAC) dans une Mustang de Ford 1999

vous rencontrez des problèmes avec t/mn votre véhicule, fluctuant de haute et basse ? Survient-elle plus souvent pendant l'exécution de votre a/c et/ou autres éléments haute tension auxiliaires ? Votre moteur même parfois s'arrêtera ? Il peut-être en
Construire un circuit transistor pour contrôle télécommande de climatiseur avec Arduino

Construire un circuit transistor pour contrôle télécommande de climatiseur avec Arduino

je soutenais un groupe d'étudiants sur leur projet de remise des diplômes. Une des difficultés qu'ils rencontrent est sur le contrôle d'une unité de climatisation avec microcontrôleur Arduino.La première expérience, que nous avons essayé de s'en sort
Comment faire pour remplacer une carte de commande électronique du four

Comment faire pour remplacer une carte de commande électronique du four

si votre horloge ne répondre pas à l'entrée, ou de ne pas régler la température, vous aurez probablement à remplacer votre tableau de commande électronique du four. Vous pouvez suivre les étapes décrites dans cette vidéo pour vous aider à faire cette