Blynk + Node.js + Johnny-Five : piloter un mini kit Pan-Tilt PTZ SG90 sur Orange Pi avec un Arduino/Firmata

Dans le tutoriel précédent, nous avons vu comment remplacer le GPIO de l’Orange Pi par un Arduino (fonctionnant avec le firmware Firmata) puis comment réaliser un script en Javascript pour piloter une Led depuis un smartphone avec la librairie Blynk et Johnny-Five. Dans ce tutoriel, nous allons mettre en oeuvre une nouvelle méthode pour piloter un système articule PTZ à base de servomoteurs.

Rappel des épisodes précédents et présentation du projet

Nous avons déjà vu plusieurs méthodes pour piloter un système articulé Pan-Tilt à base de servomoteurs SG90 :

Dans ce nouveau tutoriel, nous allons utiliser un Arduino/Firmata qui servira à remplacer le GPIO de l’Orange Pi qui pêche par son manque de librairies abouties pour gérer le GPIO. Pour cela nous allons développer un script en Javascript qui sera exécuté par Node.js. Nous utiliserons la librairie Johnny-Five (tous les articles sur Johnny-Five) ainsi que la librairie Blynk pour Node.js. La librairie Blynk permettra de faire le lien entre l’application mobile, le serveur Blynk local (ou officiel) et le script Node.js. La librairie Johnny-Five sera utilisée pour piloter les servomoteurs des axes Pan et Tilt. Voici un petit schéma qui résume l’architecture du projet.

blynk nodejs johnny-five orangepi arduino firmata ptz pan tilt kit layout

Un petit aperçu en vidéo

Matériel nécessaire

Suivez ce guide étape par étape pour le montage de votre kit Pan-Tilt PTZ.

  • Modèle
  • SoC
  • RAM
  • Stockage eMMC
  • Ports USB
  • GPRS (2G)
  • WiFi
  • Bluetooth
  • Certifié CE/FCC
  • Connecteur (!non compatible Raspberry Pi)
  • Accessoires
  • Meilleur prix

Circuit

blynk nodejs johnny-five orangepi arduino firmata servo sg90 ptz pan tilt kit_

Installer le firmware Firmata sur un Arduino

Le firmware Firmata permet d’accéder à toutes les fonctionnalités de l’Arduino via le port série (à l’aide d’un câble USB). Connectez la carte à l’ordinateur et ouvrez l’IDE Arduino. Dans le menu des examples, vous trouverez un sous-menu nommé Firmata. Sélectionnez le firmware qui correspond à votre besoin. Le plus courant est d’utiliser le firmware Standard. Il existe également une version Plus qui permet de communiquer avec des périphériques par liaison série UART, USART ou SoftwareSerial. Téléversez simplement le firmware sur la carte. C’est prêt ! Pour personnaliser le firmware, lisez cet article.

ide arduino install firmata

Installer Node.js sur Armbian ou Raspbian

Node.js est un moteur d’exécution (runtime) qui permet de faire fonctionner des scripts Javascript sur un ordinateur ou un mini-PC (Raspberry Pi, Orange Pi…). C’est un moteur multi-plateforme, c’est à dire que le code écrit sur un environnement pourra fonctionner à l’identique (à condition que les ressources matérielles existent également) sur un autre environnement. Node.js est disponible pour Windows, macOS, Linux (x86 et ARM).

Commencez par vérifier que Node.js n’est pas déjà installé sur votre distribution

Si vous obtenez un message d’erreur, installez Node.js 4.x (suffisant) ainsi que Python et Build

Installation des plugins Node.js nécessaires : Blynk, Johnny-Five

Pour ce projet, nous aurons besoin d’installer les packages Blynk (pour Nodejs) et Johnny-Five. Exécutez cette commande pour les installer. La commande sudo est préférable sur les systèmes Unix. L’option -g permet d’installer glabalement les packages, permettant ainsi de les utiliser dans tous les scripts. Les dépendances nécessaires aux packages seront automatiquement installées en même temps (la magie npm).

Remarque. Ici, nous allons utiliser un Arduino/Firmata en guise de GPIO. Si vous voulez utiliser le GPIO du Raspberry Pi, vous aurez besoin d’installer le package io-plugin. La liste complète est ici.

Projet Blynk sur l’application mobile

Lancez Blynk sur votre smartphone ou tablette. Si vous disposez d’un serveur local, connectez vous à celui-ci en modifiant la source comme indiqué sur la copie d’écran ci-dessous.

Pour bien débuter avec l’application Blynk, suivez ce tutoriel.

blynk create account local server

Ajoutez 2 sliders. Le premier V0 permettra de piloter le servo PAN. Le second V1 permettra de piloter le servo TILT. Pour les deux sliders, cochez Send values on release only si vous voulez que le servo se déplace uniquement lorsque le slider est relâché. Modifiez le niveau de sortie maximum à 180 (pour 180 degrés)

blynk slider pan

Vous pouvez également ajouter 4 boutons

  • V2 (Center) : repositionne les 2 axes au centre (90°, 90°)
  • V3 (Stop) : stop tous les mouvements en cours
  • V4 (Pan Sweep) : balayage horizontal
  • V5 (Tilt Sweep) : balayage Vertical

Voici le projet obtenu

Code Javascript du projet (Node.js)

Votre environnement doit être prêt avant de continuer. Connectez-vous à l’Orange Pi (ou au Raspberry Pi) en SSH (ou en direct). Créez un nouveau répertoire (nodebot) et placez vous à l’intérieur

Créez un nouveau script javascript

En début de script, nous allons appeler les différents librairies nécessaires :

  • Blynk : blynk-library
  • Johnny-Five
  • Events : permet d’envoyer et de recevoir des événements.

Ensuite, nous allons créer plusieurs objets :

  • board : c’est l’objet de base qui permet d’utiliser l’API Johnny-Five, par exemple pour commander les servos, allumer les Led…
  • event : cet objet permet d’émettre et de recevoir des événements Javascripts
  • blynk : permet d’utiliser l’API Blynk
  • connector : objet contenant la connexion HTTP au serveur Blynk local
  • Vx : objets permettant d’échanger des données avec le serveur Blynk

Il est très facile de surveiller l’état de la connexion au serveur Blynk à tout moment et “branchant” une fonction qui est déclenchée lorsqu’un événement est émis par l’objet. On peut par exemple surveiller que l’on est bien connecté (connect) au serveur, ou au contraire que l’on est déconnecté. On pourra par exemple réaliser un traitement en cas de déconnexion. Ici, nous allons simplement afficher un message lorsqu’on sera connecté au serveur, ou si le script est déconnecté.

Il faut attendre que la communication avec la carte Arduino soit établie avant de pouvoir utiliser l’API de Johnny-Five. Pour cela, on va se brancher sur l’événement ready comme ceci. L’événement ready ne renvoi aucune information.

Comment piloter un servomoteur avec Johnny-Five ?

Johnny-Five met à disposition deux classes pour piloter les servomoteurs :

  • servo : on pilote individuellement un servomoteur. La documentation complète se trouve ici
  • servos : on peut piloter simultanément deux servomoteurs. La documentation complète se trouve ici. Cette API est recommandée si vous voulez créer des mouvements parfaitement synchronisés de plusieurs servos. Toutes les méthodes de l’API servo sont disponibles !

L’API servo propose de nombreuses fonctions :

  • to(deg ms, rate) : déplace le servo à la position indiquée (deg). ms permet d’indiquer le temps pour réaliser le déplacement et rate le nombre de pas. Par exemple servo.to(90,500,10) déplacera le servo à l’angle 90° en 500ms en 10 pas.
  • min : déplace le servo à la position mini. Par défaut 0°. Il est possible de modifier la plage de déplacement possible du servo à l’initialisation. Par exemple 30° à 150°.

  • max : idem mais au maximum. Par défaut 180°.
  • center : positionne le servo à la position centrale. Elle est calculée au centre de la plage. Par défaut 0 – 180°, le centre sera à 90°
  • home : renvoi le servo à la position définie par le paramètre startAt

  • sweep : balayage alternatif entre la position min et max
  • sweep([ low, high ]) : balayage alternatif de la position low à la position high
  • sweep(options) : balayage avec options. range : [position début, position fin], interval : durée d’un demi-déplacement (ms), step : pas en degré
  • stop : arrête le mouvement en cours
  • cw(vitesse 0-1) : déplacement continue dans le sens horaire
  • ccw(vitesse 0-1) :  déplacement continue dans le sens anti-horaire

Préparation des fonctions de déplacement des servos Pan et Tilt

Nous allons en profiter pour tester quelques fonctions très rapidement grâce à Johnny-Five. On pourrait par exemple développer un petit système de caméra de surveillance qui ferait régulièrement un balayage horizontal. On va ajouter une fonction pour arrêter tous les mouvements en cours et une dernière pour renvoyer les axes Pan et Tilt à leur position centrale.

Dans la fonction board.on(“ready”), on va déjà attacher les 2 servos

Puis on va brancher des traitements en écoutant des événements. Par exemple, l’événement PAN déclenchera le déplacement du servo Pan à la position passée en paramètre

Il est obligatoire de traiter les mouvements dans la fonction board.on(“ready”). C’est une contrainte du Javascript qui est un langage asynchrone.

Maintenant juste après la fonction board.on(“ready”), on va émettre un message dès qu’on reçoit un ordre de l’application Blynk. En Javascript, il suffit d’appeler l’objet event (créé au début du programme) et d’utiliser la méthode emit. La méthode emit prend deux paramètres. Le premier obligatoire est une chaine qui permet de nommer l’événement. Le second optionnel est un paramètre. Ca peut être une chaine, une valeur numérique, un booléen… ou un objet JSON. Ici, on va envoyer l’angle sous la forme d’un entier. Pour cela, on utilise la fonction parseInt pour convertir la chaine en entier.

Code complet du projet

Collez le code suivant dans le fichier ouvert précédemment sans oublier de modifier l’adresse IP de votre serveur Blynk local et le Token du projet.

Une Led peut être branchée sur la broche 11. Elle clignote durant les mouvements


Enregistrez le fichier avec CTRL + X puis Y. Lancez le script avec la commande node j5PanTilt.js , si vous avez activé le debug, vous pourrez suivre l’arrivée des commandes depuis le serveur Blynk; L’exécution de la commande est précédée d’un ‘>’.

Une petite vidéo de démonstration pour conclure ce tutoriel.

Inscrivez-vous à la newsletter hebdomadaire

Aucun spam et aucun autre usage ne sera fait de votre email. Vous pouvez vous dés inscrire à tout moment.

Comparateur de prix

Bons plans

Les offres suivantes se terminent bientôt. Utilisez le coupon indiqué pour profiter du prix promo

Projets DIY - Domotique et objets connectés à faire soi-même