En action avec la vidéo :
- On peut fixer les servos de deux manières différentes :
- Il faudra peut-être percer un peu plus grand en fonction des vis dont on dispose, ou utiliser la technique du briquet, pour éviter l'éclatement du plastique lorsque le pas de vis va creuser son sillon.
C'est simple : engager la vis, chauffer la tête, visser doucement dans le plastique qui va ramollir sur le passage de la vis, attendre que ça refroidisse/solidifie pour dévisser, ébavurer l'excédent de plastique fondu remonté au bord du trou, revisser en utilisant la bonne technique !
- L'anneau gris est à coller sur la structure :
C'est un peu plus esthétique, ici en vidéo :
Câblage des servos sur les GPIO du Raspberry :
Avec des servo TowerPro SG90,
- Premier servo
- Fil orange sur le GPIO1 du Raspberry (pin 12 - BCM18).
- Fil rouge sur le +5V d'une alimentation externe (l'USB du Raspi n'est pas assez puissant).
- Fil marron sur la masse de l'alimentation.
- Second servo
- Fil orange sur le GPIO0 du Raspberry (pin 11 - BCM17).
- Fil rouge sur le +5V de l'alimentation.
- Fil marron sur la masse de l'alimentation.
Relier une masse GPIO du Raspberry sur la masse de l'alimentation externe.
Utilisation de la librairie RPIO :
Voici la doc de la librairie : http://pythonhosted.org/RPIO/
- Pour l'installer, c'est facile :
sudo apt-get install python-setuptools sudo easy_install -U RPIO
- Voilà quelques morceaux de code qu'on peut utiliser dans la console python, notamment pour déterminer les valeurs limites de la course du servo (valeurs à tâtonner doucement, pour ne pas trop la dépasser, car sinon on force le micro-mécanisme au risque de l'abîmer).
Valeurs minimale et maximale de la PWM testée pour mes servos : 820µs à 2690µs.
On initialise la libraire :
from RPIO import PWM servo = PWM.Servo()
- Puis on fait bouger le servo connecté au GPIO17 avec 820µs :
servo.set_servo(17, 820)
- On fait bouger le servo connecté au GPIO17 avec 2690µs, dans le sens opposé donc:
servo.set_servo(17, 2690)
- On stoppe les opération pour le GPIO17 :
servo.stop_servo(17)
À ce stade, on sait donc piloter les servos, il suffit de choisir la valeur qui sied à la position dont on a besoin. Avec ces commandes simples, on peut déjà créer un programme…
Piloter les servos via une interface web avec web.py :
- Découvert après quelques recherches, on va utiliser un module http://webpy.org/, qui contient un serveur Web ultra-léger.
Et de me rendre compte de la mention en bas de page :
started by Aaron Swartz (webpy@aaronsw.com)
…
Tomber sur un petit bout du travail d'Aaron Swartz, peu après avoir visionné sa bio en vidéo, ma saisi au tripe… quand on sait le gâchis qu'a été cette histoire, une victime pour l'exemple, du patriot act américain, que l'état Français cherche à faire la même chose au travers de lois sécuritaires, donc liberticides, que beaucoup applaudissent, dont madame pécresse qui déclare publiquement des bêtises (« Il faudra bien entendu un Patriot Act à la française… »), pour déclarer plus tard : « je ne sais même pas ce qu'il y a dans le Patriot Act américain »…
Tout ça me file la nausée… juste, connectez vos cerveaux ou allez faire chier les mygales dans leurs nids, qu'on ait la paix !
Ces lois n'empêcheront pas les poseurs de bombes, ho que non ! Par contre elles permettent de contrôler touuuut le monde, voire d'en pousser certains à bout, jusqu'au suicide…
- Si vous ne l'avez pas vu, allez tout de suite télécharger la vidéo : The Internets Own Boy_The Story of Aaron Swartz, voici les sous-titres en Français.
Hum…
- C'est donc avec émotions qu'on installe le module, à l'aide d'easy install :
sudo easy_install web.py
- Puis on crée une arborescence sur le Raspberry-Pi:
cd / mkdir webpyserver cd /webpyserver mkdir templates mkdir static
Le dossier webpyserver contiendra le fichier Python à exécuter.
Le dossier webpyserver/templates contiendra une page HTML.
Et le dossier webpyserver/static contiendra une feuille de style au format CSS.
- On va écrire un programme qui sera placé dans le dossier /webpyserver/DeuxServo.py :
#!/usr/bin/env python
import web, RPIO
from web import form
from RPIO import PWM
servo = PWM.Servo()
# definit la page de nom index pour le site web
urls = ('/', 'index')
dossier_web = web.template.render('templates')
app = web.application(urls, globals())
# definit les boutons a afficher
ma_forme = form.Form(
form.Button("btn", id = "btn1-0", value = "s1-0", html = "Servo 1 - 0 degre", class_ = "bouton_1-0"),
form.Button("btn", id = "btn1-90", value = "s1-90", html = "Servo 1 - 90 degres", class_ = "bouton_1-90"),
form.Button("btn", id = "btn1-180", value = "s1-180", html = "Servo 1 - 180 degres", class_ = "bouton_1-180"),
form.Button("btn", id = "btn2-0", value = "s2-0", html = "Servo 2 - 0 degre", class_ = "bouton_2-0"),
form.Button("btn", id = "btn2-90", value = "s2-90", html = "Servo 2 - 90 degres", class_ = "bouton_2-90"),
form.Button("btn", id = "btn2-180", value = "s2-180", html = "Servo 2 - 180 degres", class_ = "bouton_2-180")
)
# definit l action a effectuer quand la page index est appele
class index:
def GET(self):
forme = ma_forme()
return dossier_web.index(forme, "Raspberry Pi control Servo")
def POST(self):
userdata = web.input()
if userdata.btn == "s1-0":
servo.set_servo(17, 820)
if userdata.btn == "s1-180":
servo.set_servo(17, 2600)
if userdata.btn == "s1-90":
servo.set_servo(17, 1710)
if userdata.btn == "s2-0":
servo.set_servo(18, 820)
if userdata.btn == "s2-180":
servo.set_servo(18, 2600)
if userdata.btn == "s2-90":
servo.set_servo(18, 1710)
raise web.seeother('/')
# programme
if __name__ == '__main__':
app.run()
- Enfin dans le dossier templates on écrit un fichier index.html :
$def with (form, title)
<!doctype html>
<html>
<head>
<title>$title</title>
</head>
<body>
<br />
<form class="form" method="post">
$:form.render()
</form>
</body>
</html>
- Tout est prêt, on initialise le programme avec la commande :
sudo python DeuxServo.py
- Et on se rend à l'adresse IP du Raspberry en spécifiant le port 8080 :
- C'est tout pour ce programme de test !
Reste à écrire un programme pour piloter les deux servos à l'unisson afin de diriger l'œil de la caméra aux coordonnées désirées. Cela fera peut-être l'objet d'un futur billet, mais il faut déjà que je termine la modélisation3D du boîtier.
À suivre…
Ressources :
http://itechnofrance.wordpress.com/2013/02/04/piloter-les-ports-gpio-partir-dun-navigateur-internet/
http://webpy.org/
https://www.censa.mx/imgs/prods/18022004/docs/doc1-1401817609.pdf
http://www.servodatabase.com/servo/towerpro/sg90
https://www.censa.mx/imgs/prods/18022004/docs/doc1-1401817609.pdf
https://projects.drogon.net/raspberry-pi/wiringpi/pins/
https://groups.google.com/forum/#!topic/raspberrybots/lRfu5ucbjYE
http://papinthierry.free.fr/index.php?option=com_content&view=article&id=32&Itemid=32









1 De Julldozer -
Carrement cool de voir la conception du bidule sous tous ses angles !
Ya surement plein de trucs sympas a faire en timelapse avec...