Commande Servomoteur Webcam Raspberry via HTML5

Avec la camera 5MP fixé Après pas mal de recherches sur différents sites j’ai enfin réussi à fabriquer un bras de webcam pour Raspberry commandé via interface web HTML5. Je vais reprendre ici pas à pas les différents points pour vous expliquer comment faire. J’ai réaliser ça avec un Raspberry PI2 mais ça doit fonctionner très bien également sur le modèle B+ voir A.

Menu :

  • Matériel
  • Etape 1 : Assemblage des servomoteurs
  • Etape 2 : Branchement des servomoteurs sur le Raspberry
  • Etape 3 : Installation du serveur web Apache
  • Etape 4 : Installation de ServoBlaster
  • Etape 5 : Interface web HTML5
  • Résultat final
  • Améliorations et Évolutions

 

Matériel :

  • votre Raspberry préféré et une webcam pour raspebby
  • deux servomoteurs par exemple : SG90 9G Micro Motor Servo
  • un pack de piles 3xAAA 1,5v et les piles qui vont avec
  • une équerre 90° 4cm x 4cm (dans tout les magasins de bricolage)

Etape 1 : Assemblage des servomoteurs

Pour l’assemblage du support il suffit de coller 2 à 2 les deux servomoteurs comme sur cette photo :

20160125_184606

Coller 2 à deux les servos en s’assurant que leur axes soient perpendiculaires

Puis sur le servo fixer l’équere  à 90° comme cela à l’aide de deux vis (généralement fourni avec le servo)  :

20160125_185021

servo fixer l’équere à l’aide des vis

Pour finir fixer « le pied » sur le boitier de pile ou directement votre boitier de raspberry avec de la colle :

20160125_184859

Coller le « pied » sur le boitier des piles

Je sais, ce n’est pas les explications les plus détaillées que j’ai fourni mais les photos parlent d’elles mêmes… Au final ça donne ça :

20160125_184747

Au final ça donne ça

Et avec une camera 5MP :

20160207_163443

Et le model nocturne avec 2 led + camera infrarouge :

20160325_105330

 

Etape 2 : Branchement des servomoteurs sur le Raspberry

  • Les fils rouges (+Vcc) des servos doivent être connecter au + du pack de piles.
  • Les fils marron (GND) doivent être relié à la borne – du pack de pile qui lui même est relié au GND sur le Raspberry (borne 39).
  • Pour finir, le fils jaune du servo 1 sur la borne 11 (GPIO 17) et le fils jaune du servo 2 sur la borne 13 (GPIO 27).

GPIO-Raspberry

Etape 3 : Installation du serveur web Apache

Cette étape est facultative si votre serveur apache est déjà installé. Sinon pour l’installer :

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install apache2

Vous trouverez sur le site raspbian-france.fr tous les détails sur l’installation et la configuration avancé d’apache pour Raspberry.

Pour pouvoir executer des commande depuis la page html vous devez ajouter l’utilisateur www-data dans le sudoer. Pour cela tapez :

visudo

et ajouter les lignes suivantes :

# User privilege for Servo CMD from apache
www-data ALL=(ALL:ALL) NOPASSWD:ALL

/!\ C’est pas terrible au niveau sécurité, ça veux dire que l’utilisateur apache peux passer root.

Après vos test, et si vous souhaitez commander vos servo en dehors de votre réseau privé vous devriez ajuster le sudoer pour réduire les autorisations. (si vous êtes intéressé dites le moi dans les commentaires je pourrais faire des test et vous dire ici ce qu’il faut exactement).

 

 

Etape 4 : Installation de ServoBlaster

ServoBlaster (voir la doc ici) est une interface qui va vous permettre de commander simplement plusieurs servo moteur avec un raspberry. Il y a pas mal d’articles sur cette interface, par exemple ici avec des bateaux. Pour l’installer :

sudo apt-get install git
git clone git://github.com/richardghirst/PiBits.git
cd PiBits/ServoBlaster
sudo make

Après l’installation vous devriez voir une nouvelle interface dans /dev/ :

ls -l /dev/servoblaster
prw-rw-rw- 1 root root 0 Jan 25 19:23 /dev/servoblaster

Puis pour tester ServoBlaster  et commander vos servos  tapez :

echo P1-11=120 > /dev/servoblaster
echo P1-13=120 > /dev/servoblaster

Réessayer en faisant varier la valeur 120 pour modifier la position de vos servos. Vous pouvez aussi utiliser les % de 0 ) 100% qui corresponde à a position du servo.

Etape 5 : Interface web HTML5

L’interface est vraiment minimaliste, libre à vous de la modifier et de l’adapter à vos besoins et projets.

Les code php est visible ici : https://github.com/Sirus10/servo

mais pour le récupérer sur votre raspberry faites simplement:

cd /var/www/
git clone git://github.com/Sirus10/servo.git
servo

Page HTML5

Pour finir rendez-vous avec votre navigateur web sur l’adresse ip de votre raspberry et amusez vous !

Ex : http://192.168.1.21/servo/ :

 

 

 

Résultat final :

 

Améliorations et Évolutions :

C’est vraiment la base qu’il y a ici, il y a beaucoup de possibilité pour intégrer ça dans une interface webcam par exemple ou autre. C’est juste un début…

  • [FAIT] utiliser du jquery au lieu d’avoir a chaque fois à recharger la page php
  • utiliser un canva  avec HTML5 (voir ici) ?
  • [FAIT] Inverser la commande du servo vertical

 

 

14 réflexions sur « Commande Servomoteur Webcam Raspberry via HTML5 »

  1. Xmow

    Bonjour,
    Quand je fait sudo make dans le dossier ServoBlaster il me met : « make: *** No targets specified and no makefile found. Stop. »
    Comment je fais??
    Merci d’avence

    Répondre
    1. VaeVictis

      salut
      j’espère que ça peu toujours aides

      tu vas dans ce dossier :

      cd ./PiBits/ServoBlaster/user/

      tu exécutes la commande :

      sudo make servod

      Répondre
    2. dossin

      Bonjour

      Merci pour le tuto j’ai un RPI 3B+ raspbian buster.
      Servoblaster fonctionne mon serveur apache aussi j’y accède avec mon ip ex 192.168.0.8.
      et quand j’essaie 192.168.0.8/servo/ la page est introuvable j’ai bien les fichiers dans /var/www/servo/.
      ne manque t’il pas le fichier index.html ? pour apache2
      merci pour vôtre aide mon email est dossinjohn@gmail.com

      Répondre
  2. gotenash

    Bonjour,

    j’ai le même souci que Xnow

    et malgré la commande que tu proposes ci dessus

    dans le dossier dev je n’ai pas servoblaster

    as tu une idée ?

    Merci d’avance

    Répondre
  3. Robinson128

    Bonjour.
    Apres avoir suivi le tuto et quelques conseils (commentaires et autres car novice chez raspberry)
    J’aimerais faire la meme chose sur un raspberry qui a un l’OS de Motion Eye d’installer dessus.
    Actuellement, je n’arrive pas a controller les servo moteur, j’accede bien a la page 192.168.1.XX/servo, mais aucune action sur les servo lorsque je souhaite les mettre en action.
    Quelqu’un a une idée du pourquoi du comment? Une incompatibilité entre Motion Eye et ServoBlaster?

    Répondre
      1. Robinson128

        Salut salut. Je suivi le tuto que tu as mis en commentaire. Ca fonctionne dans l’ensemble. J’explique : avec un servo moteur de brancher sur le raspberry ca fonctionne. Par contre, des que j’en ajoute un autre, il n’y en a toujours que celui precedement installer sur la pin 11 qui fonctionne.
        J’ai l’impression que seul les pins 2,4 (5v) ; 6 (ground) ; 11(GPIO 17) fonctionne et non le reste. A moins que je n’ai pas fait les chose comme il faut…

        Répondre
        1. gotenash

          Ben oui c’est bizarre, pour ma part ça fonctionne correctement et du coup si ca marche pour un de tes servos soit forcément marcher pour l’autre.

          tu utilises bien les pins 11 et 13 qui sont les GPIO 17 et 27 ?

          tu n’as pas un des servos moteurs de cramé, tu as interverti je suppose ?

          tu as testé en ligne de commande ?

          cette vidéo m’avait bien aidé https://www.youtube.com/watch?v=f5AErQTI9XA

          Sinon tu n’as plus qu’à venir au Gadgetaulab en Normandie ^^

          Répondre
          1. Robinson128

            Grace a la vidéo, j’ai pu brancher plusieurs servo moteur sur une breadbord et voir si il y avait des GPIO qui ne fonctionner plus. Après plusieurs test, J’ai donc mis les GPIO 22 et 23 qui fonctionne.
            Une fois rebrancher au « propre » sur le raspberry pi, ça ne fonctionner plus. Effectivement, j’ai fait l’erreur de brancher un servomoteur sur les PINs n° 2 ; 6 et 15 et l’autre sur les PINs n° 4 ; 9 et 16 alors que sur la breadbord j’avais alimenter tous les servo sur une PIN 5V et sur un GND. Du coup, en branchant les deux servo moteur sur la même alimentation, a savoir les PINs n° 2 et 6, je n’ai plus de souci. les deux servomoteur fonctionne. Merci donc pour tous. 😉 Et surtout bonne continuation. 🙂

          2. gotenash

            Re,

            tu alimentes tes servo direct sur le raspberry ?

            J’avais vu ça : »Selon le nombre et la puissance du servomoteur utilisé, il peut être alimenté par la borne 5V de la carte Raspberry Pi mais il est fortement conseillé d’utiliser une source de puissance extérieur afin de protéger la carte. »

            du coup j’ai toujours alimenté avec des piles ^^

  4. Ping : Caméra raspberry motorisée – GadgetauLab

  5. Robinson128

    Rebonjour Gotenash,
    Pour repondre a ta question, oui j’alimente les servo directement via le raspberry pi.
    Je pense effectivement qu’il peux y avoir un risque mais vue l’utilisation que j’en ai, cela ne doit pas faire beaucoup souffrir le raspberry, en effet, j’actionne les servo qu’une ou deux fois par jour. Si j’avais besoin d’une utilisation beaucoup plus poucer, je passerais sans nul doute sur une alimentation exterieur du raspberry.

    Par contre, j’aurais une petite question en rapport avec la page PHP de serviblaster.
    En effet, je controle les servo depuis n’importe ou via un reseau VPN. Le souci que j’ai c’est que quand j’arrive sur la page 192.168.x.x/servo, les curseurs de deplacement ce trouve etre au centre de leurs axes respectif. J’aimerais que le raspberry garde en memoire la position des curseurs pour que si je deplace les servi, a l’ouverture de la page deux heure apres par exemple, je puisse avoir l’information du positionnement des servo par rapport a leur courses maximum et evité un genre de « reset » de leur position. Je ne sais pas si je me suis bien faot comprendre.
    Merci de m’avoir lu et un grand merci pour ton aide en tout cas.

    Répondre

Répondre à gotenash Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

 

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.