Étape 22 : Arduino Software
Il y avait beaucoup de débats sur comment faire exactement pour partitionner le logiciel entre l’Arduino et l’application iPhone. Mais, tout d’abord je vais vous donner quelques informations sur le schéma que nous utilisons.L’Arduino se connecte à notre réseau wifi à la maison et met en place un serveur sans fil. L’iPhone se connecte à ce serveur et enverra une sorte d’information à l’Arduino selon l’entrée d’utilisateur.
Je dis « une sorte d’information » est parce qu’il y a vraiment deux types de commandes que nous pouvons envoyer, haut niveau et bas niveau. Les commandes de niveau faibles serait différent sur les touches sur une télécommande, comme « mettre le téléviseur sous tension » ou « augmentez le volume en un seul clic sur l’amplificateur ». Les commandes de niveau élevés sont des faisceaux de ces fonctions de bas niveau, comme « Regarder un DVD ». Cette commande doit allumez le lecteur DVD, ampli et TV, puis ouvrez le lecteur de DVD, puis réglez l’ampli à la droite d’entrée, puis le téléviseur pour le bon réglage d’entrée, il doit également vérifier pour vous assurer que le volume de l’ampli est à un niveau raisonnable, etc.. Il y a beaucoup d’informations et de commandes entassés dans « Regarder un DVD ». Et donc, la question est : nous envoyer des commandes de haut niveau à l’Arduino, et ensuite le logiciel Arduino décompose ces commandes dans toutes les commandes de bas niveau séparés ? Ou d’autre part, nous faire tout ce qui de la ventilation dans les commandes de bas niveau sur l’iPhone et envoyer ces commandes individuelles de bas niveau vers le bas pour l’Arduino, qui les exécute juste ?
Une autre question est-ce. Chaque commande bas niveau dispose d’une liste de ~ 200 chiffres des numéros correspondant à un code PWM pour l’IR LED qui est en fait chargé de transmettre ces informations à quelque dispositif média nous parlons à. Nous ranger cette liste sur l’Arduino ou l’application iPhone ? (plus dit au sujet de ce type de signal plus loin dans cette étape).
La chose la plus facile et plus efficace à faire serait de tout stocker sur l’Arduino. De cette façon, nous avons seulement besoin d’envoyer une petite quantité d’informations sans fil, et puisque l’Arduino ne tout le traitement, il serait facile de contrôler tout depuis une page web, à l’instar de l’App iPhone (si l’iPhone a été envoyer des commandes de niveau bas plus sans fil, puis la page web devront faire la même chose et ce serait encombrant à utiliser).
Toutefois, l’Arduino Uno a seulement environ 32 Ko de mémoire à bord (nous utilisions initialement un Uno avant de passer au méga). Il y a un lecteur de carte micro SD sur le bouclier wifi et nous avons planifié sur en les utilisant pour stocker certaines données de dépassement de capacité, mais nous ne pouvions pas le faire fonctionner.
L’Arduino Mega a beaucoup plus de mémoire, d’environ 128 kb, mais nous avons essayé de l’utiliser pour contrôler les LEDs IR et il ne fonctionnait pas. Nous avons traqué le problème à la boucle dans le code qui génère la fréquence porteuse du signal IR. Laissez-moi vous expliquer comment le signal est en fait généré et transmis :
Il se comporte beaucoup comme une radio AM. L’IR LED clignote à une certaine fréquence de la porteuse (32 kHz) et puis il y a une onde carrée superposée sur celle qui porte réellement les informations. Les listes que nous utilisons pour stocker les informations de commande ressemblent à quelque chose comme [50, 200, 300, 60]. Cela signifie tourner sur la fréquence de la porteuse pour 300 millisecondes, puis éteignez-le pendant 50, puis rallumez-le pour 200 off pour 60. Chaque signal de commande est en fait environ 50 de ces commandes « on-off ».
Maintenant, pour réellement générer un signal comme ceci avec Arduino, vous avez besoin une fonction qui affiche la fréquence de la porteuse et ensuite une autre fonction qui appelle la fonction de transporteur au bon moment et pour la durée correcte. Étant donné que tous ces problèmes de synchronisation ont telle résolution élevée, il est également nécessaire d’appeler une fonction qui indique l’Arduino ne pas pour faire autre chose en tout au cours de ce processus, en veillant à ce que le timing est très précis. Dans le cas contraire, le signal ne serait pas reconnu par quelque appareil que vous êtes a braqué à, comme un lecteur DVD par exemple.
Comme je le disais, le problème que nous avons trouvé dans le passage de la Uno à Mega a été dans la fonction de fréquence porteuse. Cette fonction possède quelques commandes d’écriture numérique qui effectivement génèrent le signal, mais il a aussi quelques retards afin que dans l’ensemble, la fonction s’exécute à la bonne fréquence. Maintenant, une commande d’écriture numérique sur un Uno prend effectivement environ 3 millisecondes pour exécuter, donc vous devez tenir compte de cela en alors devrait être de déterminer combien de temps les retards. Toutefois, une commande d’écriture numérique sur un méga prend un peu plus de temps, et donc, lorsque nous avons mis le code Uno sur le méga, nous étions générant une fréquence porteuse incorrect ! Grâce à mon père qui compris tout cela.
Donc, avec cet correction d’un problème, nous avons pu passer à l’utilisation d’un méga. C’était grand, car il nous a donné non seulement toute la mémoire que nous avions besoin (nous espérons) pour stocker tout le faible niveau commande décomposent et autre logique sur l’Arduino, mais aussi nous a donné plusieurs broches pour travailler avec.