Table des matières:

UChip - Serial Over IR ! : 4 étapes
UChip - Serial Over IR ! : 4 étapes

Vidéo: UChip - Serial Over IR ! : 4 étapes

Vidéo: UChip - Serial Over IR ! : 4 étapes
Vidéo: How to bypass 2 step verification on ps4 2024, Juillet
Anonim
UChip - Série sur IR !
UChip - Série sur IR !
UChip - Série sur IR !
UChip - Série sur IR !

La communication sans fil est devenue une caractéristique clé de nos projets de nos jours et en parlant de sans fil, la première chose qui me vient à l'esprit est le Wi-Fi ou BT, mais la gestion des protocoles de communication Wi-Fi ou BT n'est pas une tâche facile et consomme beaucoup des ressources MCU, laissant peu d'espace pour coder mon application. Par conséquent, j'opte généralement pour un module Wi-Fi/BT externe connecté en série au microcontrôleur afin de répartir les rôles et d'obtenir une plus grande liberté.

Cependant, le Wi-Fi et le BT sont parfois « exagérés » pour certaines applications nécessitant un faible débit et une courte distance de communication. De plus, l'utilisation du Wi-Fi ou du BT implique la nécessité de connecter votre Smartphone ou appareil avec une authentification appropriée.

Imaginez que vous ayez simplement besoin d'allumer/éteindre une lumière extérieure, ou de changer l'intensité de la lampe, ou d'ouvrir un portail électrique. Cela vaudrait-il la peine d'utiliser le Wi-Fi ou le BT ?

Selon l'environnement et les applications, la communication sans fil sur la longueur d'onde IR (infrarouge) peut s'avérer utile. Un Serial over IR, implémenté avec peu de composants externes (3 composants discrets !), et uChip (une très petite carte compatible Arduino) peut être la solution que vous recherchiez !

Nomenclature (pour un appareil Tx-Rx):

1 x puce électronique

1 x LED IR: ayant le pic d'émission à 950nm

1 x TSOP-38238 (d'équivalent)

1 résistance de 1 KOhm

Matériel

1 x planche à pain/planche proto

1 x tube en plastique noir: diamètre intérieur de la même taille que la LED IR, le tube est nécessaire pour éviter la diaphonie avec le récepteur TSOP.

1 x papier d'aluminium (3 cm x 3 cm)

1 x bande

ASTUCE: vous pouvez créer un périphérique uniquement TX ou uniquement RX au cas où vous auriez besoin d'une communication unidirectionnelle en supprimant le matériel RX/TX inutile du circuit ou en activant/désactivant le code associé dans le croquis.

Étape 1: Câblage

Câblage
Câblage
Câblage
Câblage
Câblage
Câblage

Câblez les composants ensemble en fonction du schéma.

Quelques notes sur le schéma simple. Puisque le TSOP-38238 permet une alimentation de 2,5V à 5V et absorbe au maximum 0,45mA (vous trouvez la fiche technique ICI), j'alimenterai le récepteur à l'aide de deux broches, qui fourniront respectivement la masse et l'alimentation. Cela permet d'allumer/éteindre le récepteur à la demande et une configuration de câblage matériel très simple. De plus, si vous avez besoin d'une communication unidirectionnelle, vous pouvez choisir de créer un périphérique (Tx/Rx) uniquement en désactivant/activant simplement le TSOP-38238.

Comment fonctionne le circuit ?

C'est assez simple. La broche de sortie TSOP est tirée vers le bas lorsque le capteur détecte un train de 6 impulsions ou plus à 38 KHz, par contre elle est tirée vers le haut lorsqu'il n'y a pas un tel signal. Par conséquent, afin de transmettre les données série via IR, le circuit alimente l'anode LED avec un PWM 38KHz modulé avec le signal série TX qui abaisse la cathode LED.

Par conséquent, à un niveau haut du TX0 série, la LED n'est pas polarisée ou polarisée en sens inverse (pas d'impulsions) et la broche de sortie TSOP est tirée vers le haut. Transmettant un niveau bas sur la série, la LED est alimentée et génère des impulsions IR en fonction du signal PWM appliqué; par conséquent, la sortie TSOP est tirée vers le bas.

Étant donné que la transmission est directe (0->0 et 1->1), il n'y a pas besoin d'onduleurs ou d'autres logiques du côté du récepteur.

Je régule la puissance de sortie optique des LED en sélectionnant le rapport cyclique PWM en fonction de l'application. Plus le rapport cyclique est élevé, plus la puissance de sortie optique est élevée et donc, plus vous transmettrez votre message.

Gardez à l'esprit que nous avons encore besoin de générer des impulsions ! Ainsi, vous ne devriez pas dépasser 90 % du cycle de service, sinon le TSOP ne détectera pas le signal sous forme d'impulsions.

Avez-vous besoin de plus de puissance ?

Pour augmenter le courant, peut-on simplement diminuer la valeur de la résistance de 1kOhm ?

Peut-être, ne soyez pas trop exigeant ! Le courant maximum que vous obtenez d'une broche du MCU est limité à 7 mA lorsque la broche du port est plus forte que la normale (PINCFG. DRVSTR = 1 et VDD > 3 V) comme indiqué dans la fiche technique SAMD21.

Cependant, la configuration standard (qui est celle adoptée par les bibliothèques IDE Arduino par défaut) limite le courant à 2mA. Par conséquent, l'utilisation de 1kOhm donne déjà la limite de courant avec les paramètres par défaut !

L'augmentation du courant n'est pas seulement une question de composants électriques. Brièvement:

  • Changez la résistance (dont la valeur minimale est limitée à environ 470Ohm -> VDD/470~7mA);
  • Réglez le PORT->PINCFG->DRVSTR correspondant sur 1;

Je fournirai le code incluant cette fonctionnalité dans une future mise à jour.

Mais rappelez-vous, faire couler et drainer le courant des broches MCU proches de ses limites n'est pas une si bonne approche. En effet, cela diminue la durée de vie et la fiabilité du MCU. Par conséquent, je suggère de conserver la force d'entraînement normale pour une utilisation à long terme.

Étape 2: Programmation

Chargez le croquis "IRSerial.ino" dans uChip (ou la carte compatible Arduino que vous utilisez).

Au cas où vous auriez besoin de changer la broche générant le PWM, assurez-vous que vous utilisez une broche connectée à une minuterie TCC, car cette version du code ne fonctionne qu'avec les minuteries TCC (vérifiez la "variant.c" de votre carte pour cette information). J'ajouterai le code pour utiliser également les minuteries TC dans les futures mises à jour.

Le code est assez simple. Après avoir réglé le PIN_5 bas (fournit le TSOP GND) et le PIN_6 haut (alimentant le TSOP), le MCU démarre le PWM sur PIN_1, définissant la période de minuterie et la capture en fonction de la modulation de fréquence nécessaire (dans mon cas, c'est 38KHz) et du devoir cycle (12,5% par défaut). Ceci est fait en exploitant la fonction standard analogWrite() sur les broches PWM et en modifiant uniquement le registre PER_REG (registre de période) et le registre CC (comparaison de capture) (le code écrit est simplement un copier-coller de la bibliothèque wire_analog). Vous pouvez définir la fréquence nécessaire en fonction du changement du capteur TSOP PER_REG (qui est la limite supérieure réinitialisant le compteur de la minuterie), tout en définissant CC proportionnellement à la valeur de la période au pourcentage de cycle de service souhaité.

Ensuite, le code définit le port série en utilisant le débit en bauds correct qui est de 2400 bps. Pourquoi un débit en bauds si bas ?! La réponse se trouve dans la fiche technique TSOP que vous pouvez trouver ICI. Étant donné que le TSOP est doté de filtres à haute réjection de bruit pour éviter les commutations indésirables, il est nécessaire d'envoyer un train de plusieurs impulsions afin d'abaisser la broche de sortie du TSOP (le nombre d'impulsions dépend de la version du TSOP, 6 est la valeur typique). De même, la sortie TSOP est élevée après un laps de temps minimum équivalent à 10 impulsions ou plus. Par conséquent, afin de définir la sortie TSOP comme signal modulant TX0, il est nécessaire de définir le débit en bauds en tenant compte de l'équation suivante:

Baud série < PWM_fréquence/10

En utilisant 38KHz, cela se traduit par un débit en bauds inférieur à 3800bps, ce qui signifie que le débit en bauds « standard » le plus élevé autorisé est de 2400pbs, comme prévu précédemment.

Voulez-vous augmenter le débit en bauds ? Il y a deux options.

L'option la plus simple consiste à changer le TSOP en une version à fréquence plus élevée (comme le TSOP38256), ce qui vous permettrait de doubler le débit en bauds (4800bps)

Pas assez?! Ensuite, vous devez créer votre propre lien optique à l'aide d'une simple LED IR + photodiode et d'un circuit d'amplification. Cependant, cette solution nécessite beaucoup d'expertise en codage et en électronique pour éviter que le bruit n'affecte les données transmises et donc sa mise en œuvre n'est pas du tout facile ! Cependant, si vous vous sentez suffisamment en confiance, vous êtes plus que bienvenu pour essayer de créer votre propre système TSOP !:)

Enfin, j'ai configuré le port SerialUSB (2400bps) que j'utilise pour envoyer et recevoir des données sur le moniteur série.

La fonction loop() inclut le code nécessaire pour transmettre les données sur les deux séries et est copiée directement à partir de l'exemple d'esquisse SerialPassthrough en ne modifiant que les noms des séries.

Étape 3: Blindage de la LED IR

LED IR de blindage
LED IR de blindage
LED IR de blindage
LED IR de blindage

Si vous allumez les circuits ci-dessus après avoir chargé le code " IRSerial.ino ", vérifiez le moniteur série sur Arduino IDE et essayez d'envoyer une chaîne. Vous verrez probablement que uChip reçoit exactement ce qu'il transmet ! Il y a une diaphonie dans les circuits en raison de la communication optique entre la LED IR et le TSOP du même appareil !

Voici la partie difficile de ce projet, empêcher la diaphonie ! La boucle doit être rompue pour établir une communication série bidirectionnelle sur IR.

Comment rompre la boucle ?

Première option, vous réduisez le rapport cyclique PWM, diminuant ainsi la puissance optique de sortie de la LED. Cependant, cette approche réduit également la distance sur laquelle vous obtenez un canal IR série fiable. La deuxième option consiste à protéger la LED IR, créant ainsi un « faisceau » IR directionnel. C'est une question d'essais et d'erreurs; enfin, en utilisant un morceau de tuyau d'air pneumatique noir enveloppé dans du papier d'aluminium et du ruban adhésif (fournissant une isolation électrique), j'ai réussi à briser la diaphonie. Mettre la LED IR émettrice à l'intérieur du tube empêche la communication entre le TX et le RX du même appareil.

Regardez l'image pour voir ma solution, mais n'hésitez pas à essayer d'autres méthodes et/ou à suggérer la vôtre ! Il n'y a pas de solution absolue à ce problème (sauf si vous avez besoin d'un simple canal unidirectionnel) et vous devez probablement régler la disposition des circuits, le cycle d'utilisation PWM et le blindage IR en fonction de vos besoins.

Une fois que vous avez rompu la diaphonie, vous pouvez vérifier que votre appareil fonctionne toujours en créant une boucle sur l'appareil Tx-Rx exploitant la réflexion de la longueur d'onde IR sur les surfaces réfléchissantes IR.

Étape 4: Communiquez

Communiquer!
Communiquer!
Communiquer!
Communiquer!

C'est tout

Votre appareil série sur IR est prêt à communiquer, utilisez-le pour envoyer des données sur IR, allumez/éteignez tout ce que vous voulez ou vérifiez l'état d'un capteur que vous cachez secrètement !

La distance sur laquelle la communication est fiable ne l'est pas autant que pour un appareil WiFi ou BT. Cependant, il est directionnel (selon l'ouverture de la LED et le système de blindage IR mis en œuvre), ce qui peut être très utile dans certaines applications !

Bientôt, je mettrai en ligne une vidéo où vous pourrez voir quelques exemples des applications que j'ai faites. Prendre plaisir!

Conseillé: