Deux servomoteurs à rotation continue serviront au déplacement, une bille appelée ball-caster servira à la stabilité de l'ensemble.
Un ou deux servomoteurs à rotation fixes, c'est à dire capables de garder une position fixe, serviront au contrôle de la caméra montée sur une tourelle.
Le contrôle du servomoteur se fait par un câble à trois fils, un pour la masse, un pour l'alimentation 5V et un pour le contrôle. Celui-ci se fait à l'aide d'un signal PWM, Modulation de Largeur d'Impulsion en français.
On génère un signal rectangulaire à fréquence fixe mais dont on modifie le rapport cyclique (duty cycle), c'est à dire le temps pendant lequel le signal reste à l'état haut.
Il n'existe qu'une sortie PWM implantée dans le GPIO du Raspberry Pi.
Pour avoir plus de sorties PWM, il est possible de générer ces signaux de manière logicielle avec le raspberry pi en contrôlant le temps pendant lequel une sortie reste à l'état haut. C'est une solution de dépannage mais elle n'est pas idéale car elle manque de précision du fait que l'on n'a pas un contrôle précis du timing, en effet un OS multitache tourne derrière et peut modifier le déroulement du programme.
Il vaut donc mieux un circuit externe qui génère ces impulsions. On peut utiliser un arduino par exemple. La solution que j'ai retenue est un contrôleur développé par Adafruit (http://www.adafruit.com/products/815) piloté par l'interface I2C (http://fr.wikipedia.org/wiki/I2C) et permettant de contrôler jusqu'à 16 sorties PWM.
Adafruit fournit une documentation complète ainsi qu'une library python rendant l'utilisation très simple.(http://learn.adafruit.com/adafruit-16-channel-servo-driver-with-raspberry-pi). (Si un jour j'ai le temps, je ferai une documentation en français).
Voici un exemple:
from Adafruit_PWM_Servo_Driver import PWM
import time
pwm = PWM(0x40, debug=True)
def avance():
pwm.setPWM(0, 0, 500)
pwm.setPWM(1, 0, 300)
def stop():
pwm.setPWM(0, 0, 410)
pwm.setPWM(1, 0, 410)
def gauche():
pwm.setPWM(0, 0, 500)
pwm.setPWM(1, 0, 500)
def droite():
pwm.setPWM(0, 0, 300)
pwm.setPWM(1, 0, 300)
def recule():
pwm.setPWM(0, 0, 300)
pwm.setPWM(1, 0, 500)
def tourelle_gauche():
pwm.setPWM(3, 0, 500)
def tourelle_droite():
pwm.setPWM(3,0,300)
def tourelle_haut():
pwm.setPWM(2,0,500)
def tourelle_bas():
pwm.setPWM(2,0,300)
pwm.setPWMFreq(60)
stop()
tourelle_gauche()
tourelle_bas()
time.sleep(1)
tourelle_droite()
tourelle_haut()
time.sleep(1)
tourelle_bas()
tourelle_gauche()
avance()
time.sleep(5)
stop()
jeudi 26 septembre 2013
samedi 21 septembre 2013
Objectif
L'objectif est de développer un drone roulant comportant une caméra et pilotable à distance via une interface web avec retour vidéo.
Les choix suivants ont été faits:
- raspberry pi
- connexion par wifi via un dongle
- caméra raspberry pi
- Servomoteurs
- alimentation externe USB pour le raspberry pi
- piles pour les moteurs
- circuit de commande PWM pour piloter les servomoteurs (http://www.adafruit.com/products/815).
Les choix suivants ont été faits:
- raspberry pi
- connexion par wifi via un dongle
- caméra raspberry pi
- Servomoteurs
- alimentation externe USB pour le raspberry pi
- piles pour les moteurs
- circuit de commande PWM pour piloter les servomoteurs (http://www.adafruit.com/products/815).
Inscription à :
Articles (Atom)