Rpi-pi_EYE -2-
Par makoto doushite le mardi, 20 octobre 2015, 20:40 - Raspberry Pi - Lien permanent
Voici la suite du projet commencé ici :
Les fichiers 3D sont disponibles ici et en annexe de ce billet.
- Depuis la dernière fois, j'ai modélisé l'arrière du boîtier qui accueille le Raspberry, revu le boitier de face pour que l'anneau soit facile à mettre en position, et tranché en deux les pièces d'engrenages.
J'ai donc imprimé tout ça en bleu et conservé l'œil blanc pour le moment.
- Voici le kit de composants nécessaires à l'œil caméléon :
- Un Raspberry pi Model B.
- Un module Camera Pi.
- Deux Servos TowerPro SG90.
- Une carte SD d'au moins 4Go.
- Un écrou de 1/4" BSW (TPI 20) (1/4 pouce British Standard Whitworth, Threads Per Inch de 20).
- Une tige métallique de 2,1 cm coupée dans un gros trombone.
- Deux très petites vis de récup.
- Le kit de pièces imprimées.
Le montage :
- L'écrou servira à permettre l'utilisation d'un trépied.
Il suffit de le glisser dans la fente prévue à cet effet !
- Ensuite on peut mettre en place le Raspberry avec sa carte SD dans le logement du boitier arrière.
En jouant sur l'élasticité du plastique ça passe sans problème, il se clipse au fond pour ne plus bouger.
- Les pièces d'engrenages existent en deux versions au choix.
En un morceau, qu'il faudra imprimer verticalement, en activant les supports, où en deux morceaux qu'il faudra coller avec de la cyanoacrylate.
- La caméra est fixée dans l'œil avec les vis de récup.
N'oubliez pas la technique du briquet pour ne pas éclater le plastique[1] !
On utilise la tige métallique pour assembler les engrenages et on joue une nouvelle fois sur l'élasticité du plastique pour les loger dans l'œil.
- Maintenant que l'anneau a des ergots, il est facile de le mettre en place sur le boîtier avant, et avec un peu de chance il se clipse et tiens tout seul, sinon suffit de le coller.
- Les servos et le mécanisme de l'œil sont en places, il reste à les visser sur le boîtier :
- Le boitier se referme et tient tout seul grâce au système de clips que j'ai conçu :
- On branche l'alimentation sur le côté, et on peut visser le trépied.
Si besoin, il sera possible de connecter un cordon HDMI.
- Voilà !
Les branchements :
J'ai dessiné ce petit crobar avec Fritzing ! (source en annexe)
Ces branchements sont très simples, les voici pour rappel en texte :
- Fil orange du servo N°1 sur le GPIO1 du Raspberry (pin 12 - BCM18).
- Fil orange du servo N°2 sur le GPIO0 du Raspberry (pin 11 - BCM17).
- Fils rouge sur le +5V.
- Fils marron sur la masse de l'alimentation.
- J'ai donc bricolé ce raccord avec une plaque à trou et des pinoches mâle et femelles :
Le Code :
Je rappelle que j'utilise ici le serveur web.py pour faire fonctionner les servo à travers une interface web.
Référez-vous au billet précédent pour plus de précisions !
Pour l'exemple qui suit, j'ai déterminé au préalable les valeurs max pour les quatre positions cardinales et le centre.
- On va écrire un programme qui sera placé dans le dossier /webpyserver/cameleon01.py :
#!/usr/bin/env python import web, RPIO, time 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 = "btn2", value = "s2", html = "Droite", class_ = "bouton_2"), form.Button("btn", id = "btn3", value = "s3", html = "Gauche", class_ = "bouton_3"), form.Button("btn", id = "btn4", value = "s4", html = "Centre", class_ = "bouton_4"), form.Button("btn", id = "btn5", value = "s5", html = "Haut", class_ = "bouton_5"), form.Button("btn", id = "btn6", value = "s6", html = "Bas", class_ = "bouton_6") ) # 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() # Droite if userdata.btn == "s2": # Si le bouton 2 est appuye servo.set_servo(17, 1350) # Alors bouger le servo 17 servo.set_servo(18, 1350) # Alors bouger le servo 18 time.sleep(0.5) # Attendre une demi seconde que le servo ait le temps de bouger servo.stop_servo(17) # Par securite, stopper le servo 17 servo.stop_servo(18) # Par securite, stopper le servo 18 # Gauche if userdata.btn == "s3": servo.set_servo(17, 2150) servo.set_servo(18, 2150) time.sleep(0.5) servo.stop_servo(17) servo.stop_servo(18) # Centre if userdata.btn == "s4": servo.set_servo(17, 1750) servo.set_servo(18, 1750) time.sleep(0.5) servo.stop_servo(17) servo.stop_servo(18) # Haut if userdata.btn == "s5": servo.set_servo(17, 1350) servo.set_servo(18, 2150) time.sleep(0.5) servo.stop_servo(17) servo.stop_servo(18) # Bas if userdata.btn == "s6": servo.set_servo(17, 2150) servo.set_servo(18, 1350) time.sleep(0.5) servo.stop_servo(17) servo.stop_servo(18) raise web.seeother('/') # programme if __name__ == '__main__': app.run()
- Tout est prêt, on démarre le serveur web avec la commande :
sudo python cameleon01.py
Et on se rend avec son navigateur à l'adresse IP du Raspberry en spécifiant le port 8080…
Apparaissent alors 5 boutons d'actions, enjoy ^__^
À suivre…
Note
[1] Les trous de vis seront peut-être un peu étroit en fonction des vis à disposition; dans ce cas, pour éviter d'éclater le plastique en vissant, il suffit d'engager la vis puis de chauffer la tête de vis quelques secondes avec une flame, et enfin de visser doucement et d'attendre que le plastique durcisse. Le pas de vis aura donc été creusé sans danger.
Commentaires
Toujours aussi fan de tes projets et friands de tes tutos. Merci pour celui-ci, ça fait envie