Détecter et filmer le passage d'un vélo

Détecter et filmer le passage d'un vélo

Lorsque l'on fait des sauts en VTT et que l'on désire progresser, il est pratique de se filmer pour se rendre compte des erreurs que l'on fait. Si on est plusieurs, il suffit de passer son smartphone à un ami et de lui demander de nous filmer. Mais pour les cas où on est seul, il faut déclencher la camera, remonter sur le vélo, faire le saut et arrêter la caméra. C'est fastidieux, et on se retrouve avec de longues minutes de vidéo à couper. Cette semaine nous allons réaliser un bricolage qui permet d'automatiser ça.


Le but est d'avoir un système qui soit capable de détecter le passage d'un vélo et déclencher l'enregistrement pour une durée déterminée. Ce système doit être facilement transportable et robuste afin de pouvoir être installé en forêt ou dans un champ.

La solution que nous avons retenue pour réaliser ce système est d'utiliser un Raspberry Pi 3, auquel on connecte un Yocto-3D-V2 pour détecter le passage du vélo, et un Yocto-Buzzer pour émettre un bip de confirmation lorsque le vélo est détecté. Pour filmer le saut, nous avons utilisé une caméra Garmin Virb Ultra 30 qui communique avec le Raspberry Pi par WiFi. Le tout est alimenté par un grosse batterie USB.

Le système est composé d'un Yocto-3D-V2, d'un Yocto-Buzzer, d'un Raspberry Pi et d'une caméra Garmin
Le système est composé d'un Yocto-3D-V2, d'un Yocto-Buzzer, d'un Raspberry Pi et d'une caméra Garmin



Regardons maintenant plus en détails les choix que nous avons fait...

Détecter le passage du VTT


Notre première idée a été d'utiliser un système basé sur un Yocto-RangeFinder qui détecterait le passage du vélo. Mais nous avons rapidement abandonné cette solution car pour que le Yocto-RangeFinder fonctionne correctement en plein air, il faut aligner une mire face à lui. Ce qui n'est pas forcément très pratique en pleine forêt. De plus, la terre et la poussière ne font pas bon ménage avec le capteur optique du Yocto-RangeFinder.

A la place, nous avons utilisé un Yocto-3D-V2 que nous avons fixé à une réglette en alu. La réglette est posée à même le sol un peu avant le saut. Le Yocto-3D-V2 est suffisamment sensible pour détecter les vibrations de la réglette lorsque le vélo passe dessus.

Le Yocto-3D-V2 avec son boîtier est simplement collé à une réglette alu de 2mm
Le Yocto-3D-V2 avec son boîtier est simplement collé à une réglette alu de 2mm



Nous avons enfermé le Yocto-3D-V2 dans son boîtier YoctoBox-3D-Black. Le boîtier est ensuite collé à l'aide du double face fourni au bout d'une réglette alu de 2mm d'épaisseur. Cette solution est à la fois simple à fabriquer, peu chère, portable, et compatible avec un environnement poussiéreux.

Il suffit de poser la baguette sur la trajectoire du saut
Il suffit de poser la baguette sur la trajectoire du saut



Le Yocto-3D-V2 est connecté au Raspberry Pi avec un câble USB d'1.5 mètre.

D'un point de vue logiciel, notre application doit enregistrer un callback pour la fonction "accelerometer" du module. Ce callback est appelé dès que des vibrations sont perçues par le Yocto-3D-V2. Dans ce callback, nous avons ajouté un petit délai pour filtrer le passage de la roue arrière du vélo.

def configure(self, hwid):
    self._accel = YAccelerometer.FindAccelerometer(hwid)
    self._accel.registerValueCallback(self.valueCb)

def valueCb(self, accel, str_val):
    value = float(str_val)
    now = datetime.datetime.now()
    print("Accel: %f" % value)
    if (now - self._last_time) > self._vibration_duration:
        self.trigger()
    self._last_time = now



Configurer le Raspberry Pi 3


La pièce centrale de ce bricolage est le Raspberry Pi 3 qui exécute notre application écrite en Python. Pour l'alimenter, nous avons simplement utilisé une grosse batterie USB. L'avantage de cette solution est qu'elle n'est pas trop chère et relativement solide.

L'application est écrite en Python 3, qui n'est pas installé par défaut. Il faut donc installer Python 3 mais aussi le gestionnaire de package PyPI à l'aide de la commande suivante:

sudo apt-get install python3-pip



Ensuite, il faut installer deux packages PyPI qui sont utilisés par l'application. Le premier est notre librairie Python, le deuxième est une implémentation du protocole "Zero-configuration" qui permet de retrouver automatiquement l'adresse IP de la caméra quand elle est connectée au réseau WiFi.

sudo pip3 install yoctopuce sudo pip3 install zeroconf



Le Raspberry doit aussi servir de point d'accès WiFi pour la caméra. Nous n'allons pas détailler les fichiers de configuration à modifier car la procédure est déjà documentée sur le site web de la fondation Raspberry Pi:
https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md

Pour notre système, nous avons créé un réseau nommé "BIKE_CAM" avec le comme mot de passe "aaabbbccc". L'adresse IP du Rapberry Pi est 192.168.88.1.

Pour vous faciliter la vie, nous avons inclus les fichiers de configuration que nous avons utilisé dans le sous-répertoire "pi_config" du projet GitHub (cf. plus bas).

La caméra


Nous avons utilisé une caméra Garmin Virb Ultra 30 qui possède de nombreux avantages:

  • Elle permet de filmer en 120 fps
  • Elle est solide et étanche
  • Elle a une API REST qui permet de la contrôler par WiFi


La caméra est un Garmin Virb Ultra 30
La caméra est un Garmin Virb Ultra 30



Lors de la première utilisation, il faut simplement configurer la caméra pour qu'elle utilise notre réseau WiFi "BIKE_CAM".

L'application


L'application est un script python dont l'interface web est accessible sur le port 8000. Cela permet d’accéder à l'interface
depuis n'importe quel smartphone.

Le code source de l'application, y compris les fichiers de configuration de l'interface Wifi, sont disponibles sur GitHub:

https://github.com/yoctopuce-examples/bike_cam

Pour installer l'application, il suffit de la cloner dans votre home dir:

$ git clone https://github.com/yoctopuce-examples/bike_cam



Ensuite, il faut copier le fichier bike_cam.service dans le répertoire /etc/systemd/system/ et activer le service. De cette manière, l'application sera automatiquement lancée au démarrage du Raspberry Pi. Pour plus d'information à ce sujet, vous pouvez relire notre précédent article.

$ sudo cp bike_cam.service /etc/systemd/system/ $ sudo systemctl enable bike_cam.service $ sudo systemctl start bike_cam.service




Maintenant que l'application est installée et démarrée, il est possible d’accéder à son interface Web avec n'importe quel smartphone qui est connecté sur le réseau "BIKE_CAM". Il suffit d'utiliser l'URL: http://192.168.88.10:8000.

L'interface web de l'application
L'interface web de l'application



L'interface est très basique. Elle affiche l'état du système et permet de changer la durée d'enregistrement, qui par défaut est de 10 secondes.

Quelques remarques


Il y a un léger lag d'environ 1.5 secondes, entre le passage du vélo et le début de l'enregistrement. Il s'agit du temps entre le moment où la caméra reçoit la commande et le moment où l'enregistrement est effectivement démarré.
Il est malheureusement incompressible. En fonction de la vitesse du vélo, il faut donc placer la réglette entre 2 et 3 mètre avant le saut.

Pour le confort d'utilisation, nous avons ajouté un Raspberry Pi Touch Display qui permet d'afficher interface web de l'application. Cela permet de se passer complètement d'un smartphone.

Nous avons utilisé une caméra Garmin mais il est théoriquement possible de modifier le code pour qu'il fonctionne avec les caméra GoPro qui se connectent à un réseau WiFi. GoPro ne publie pas officiellement l'API mais certaines personnes maintiennent une documentation officieuse: https://github.com/konradit/goprowifihack

Nous avons utilisé un Yocto-3D-V2 mais vous pouvez aussi utiliser un Yocto-3D. Les deux produits sont compatibles.

Le résultat


Voici quelques photos du système en utilisation.


   





Et voici quelques vidéos qui ont été prises automatiquement avec ce système.

  


  


  



Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.