On nous demande de temps en temps si Yoctopuce n'aurait pas envie de fabriquer un détecteur de mouvement USB basé sur un capteur PIR. Autant tuer le suspense tout de suite, la réponse est: non, pas pour l'instant. En revanche on peut vous expliquer comment en construire un pour à peine plus cher qu'un Yocto-Serial.
On a récemment découvert le ZEPIR0BAS02MODG fabriqué par ZiLOG. Derrière ce nom un peu barbare se cache un module aux caractéristiques assez remarquables:
- Il est minuscule : ~25x16mm
- Il peut être piloté depuis un port série TTL
- Il ne coûte que quelques euros
Le module ZEPIR0BAS02MODG de ZiLOG
Évidement, on s'est dépêché d'en connecter un à un Yocto-Serial.
Connexions
Le module ZEPIR0BAS02MODG peut être directement connecté à un Yocto-Serial, et peut même être alimenté par le Yocto-Serial. Il y a juste une petite subtilité: pour activer le port série du ZEPIR0BAS02MODG il faut placer une résistance de 100KΩ entre les pins VDD et TX du ZEPIR0BAS02MODG.
5 fils et une résistance suffisent à raccorder le module à un Yocto-Serial
Avec un peu d'adresse, on arrive même à faire entrer tout le système dans le boîtier du Yocto-Serial et obtenir ainsi un détecteur de présence USB particulièrement compact.
Un Yocto-Serial suffit pour interfacer le ZEPIR0BAS02MODG.
Configuration
Pour fonctionner avec le capteur PIR, le Yocto-Serial doit être configuré convenablement. Le plus facile consiste à utiliser le VirtualHub. La première chose à faire consiste à configurer la vitesse du port à savoir en 9600bauds, 8N1. Il faut ensuite activer l'alimentation du module en 3.3V.
Configuration du port série du Yocto-Serial
Le ZEPIR0BAS02MODG peut être entièrement configuré et piloté par le port série, il dispose pour cela d'une bonne trentaine de fonctions. Pour la démo, on a choisi d'utiliser la plus triviale: si on envoie le caractère ASCII "a", le capteur répond alors:
- soit "Y", s'il a détecté un mouvement depuis le dernier appel,
- soit "N", s'il n'a rien détecté depuis le dernier appel,
- soit "U", s'il n'est pas prêt.
On a donc configuré le Yocto-Serial pour qu'il fonctionne en mode binaire (generic byte stream) et on a créé une tâche qui, toutes les 500ms, envoie le byte 0x61 (a) au détecteur, puis lit un byte en retour qu'elle mappe sur le genericSensor1. Ainsi en fonction de la réponse du ZEPIR0BAS02MODG, les valeurs 78 (N), 85 (U), 89 (Y) seront mappées sur le genericSensor1.
Configuration de la tâche qui pilote le senseur
Finalement, on a modifié le mapping du senseur pour que 78 corresponde à -7, 85 à 0 et 89 à 4. Ainsi il suffit de tester si la valeur courante du genrericSensor1 est strictement positive pour savoir si quelque chose à bougé devant le capteur. On en a aussi profité pour donner le nom logique "PIR" au genericSensor1.
Configuration de genericSensor1 du YoctoSerial
Une fois que tout est configuré, il ne reste plus qu'à tester.
Exemple d'application
On a écrit un petit programme de test en python qui met en place un callback qui déclenche un relais pendant 5 secondes à chaque fois que le ZEPIR0BAS02MODG détecte quelque chose.
from yocto_relay import *
relay = None
errmsg = YRefParam()
def PIRvalueChanged(sesnor,value):
if int(value)>0 : relay.pulse(5000)
if YAPI.RegisterHub("usb", errmsg) != YAPI.SUCCESS:
sys.exit("init error" + str(errmsg))
sensor = YSensor.FindSensor("PIR")
relay = YRelay.FirstRelay()
if not(sensor.isOnline()):sys.exit("No PIR sensor available")
if relay==None: sys.exit("No relay available")
sensor.registerValueCallback(PIRvalueChanged)
while True:
YAPI.Sleep(100,errmsg)
Et voici une petite vidéo qui montre le système en action.
Ça a l'air un peu magique comme ça, mais sachez que pour que cela fonctionne correctement le détecteur ne peut pas être installé n'importe où: il faut éviter de le placer face à une fenêtre, dans un courant d'air etc... Vous trouverez plus de détails dans le mode d'emploi du ZEPIR0BAS02MODG.
Conclusion
La versatilité du Yocto-Serial nous a permis de construire un détecteur de présence en deux temps trois mouvements. Evidement, l'exemple d'application présenté ici est des plus trivial: c'est l'équivalent de ces lampes automatiques qu'on trouve dans tous les magasins de bricolage, mais les possibilités sont beaucoup plus larges. Si vous branchez le Yocto-Serial qui pilote le détecteur à un YoctoHub-Ethernet ou un YoctoHub-Wireless-g, vous pouvez vous fabriquer un système de détection capable d'interagir avec Internet...