En plus de nombreux autres projets intéressants avec le Pi, un robot self-made est un petit point fort car il rassemble de nombreux composants. Dans les parties suivantes, nous allons créer un robot avec de nombreuses fonctions (indépendantes) étape par étape.
Dans la première partie des tutoriels sur le robot Raspberry Pi, nous assemblerons le kit et créerons des fonctions de contrôle des moteurs, avec lesquelles le robot peut déjà conduire dans toutes les directions. Celles-ci sont nécessaires dans les parties suivantes lorsque nous utilisons notre robot, par exemple la télécommande, ou que nous voulons qu’il suive une ligne.
Kit et pièces de quincaillerie requises
Il est conseillé de prendre un kit qui contient déjà les choses les plus nécessaires. J’ai utilisé un kit avec deux roues contrôlables, mais il y en a aussi avec 4 roues. Je recommanderais aux débutants, si vous voulez suivre exactement le tutoriel, d’utiliser le même kit – mais il ne devrait pas être trop d’effort d’adapter le code pour les corps à quatre roues.
Dans ce tutoriel, j’ai utilisé ce qui suit, car en plus du kit lui-même, un CI de pilote de moteur est requis:
Lequel Raspberry PI le modèle est utilisé n’a pas d’importance. Un Raspberry Pi Zero est pratique car il est léger et prend peu de place, mais les extensions (comme les caméras USB) sont difficiles à attacher plus tard.
Construisez le kit de robot Raspberry Pi
En plus des roues et des moteurs, le kit est livré avec des vis et des plaques que nous assemblerons. Les pièces incluses du kit deux roues sont les suivantes:
Nous allons d’abord visser les moteurs. Pour ce faire, nous prenons les deux moteurs et y attachons les rouages:
Avec l’aide du 4 longues vis et le 4 petites assiettes, les moteurs sont fixés sur la grande plaque. À cet effet, une plaque est poussée à travers le trou approprié des deux côtés au milieu. Le moteur est placé à côté. Il faut veiller à ce que les connexions des deux moteurs soient orientées vers l’intérieur.
Les deux plaques restantes sont placées sur les côtés extérieurs et les longues vis (de l’extérieur) sont insérées. Les petits écrous sont fixés à l’intérieur et ainsi les moteurs sont fixés.
Si vous souhaitez utiliser les piles au lieu d’une banque d’alimentation, vous pouvez toujours insérer l’interrupteur dans le trou central.
Ensuite, la roue avant est fixée. Nous prenons le roue tournante, les 4 entretoises et 8 vis. Je recommande d’huiler un peu le vélo avant de le fixer car il est parfois difficile de se déplacer.
Les quatre entretoises sont d’abord vissées sur la roue. Ensuite, ils sont fixés à l’avant de la plaque avec les vis restantes. Vous pouvez également attacher les roues arrière aux moteurs.
Il ne reste plus que deux câbles à souder aux «languettes» (voir la 2ème photo et la 3ème photo, côté gauche) du moteur, ce qui nécessite un peu de sensibilité. Si vous souhaitez tester les moteurs, vous pouvez ensuite attacher un câble à 3,3 V (broche 1) du Raspberry Pi et un à GND (broche 6). Le moteur doit maintenant bouger (que ce soit vers l’avant ou vers l’arrière n’a pas d’importance au début).
La dernière étape n’est pas réservée à ceux qui souhaitent utiliser des batteries, car les moteurs ont besoin de plus de puissance que le Raspberry Pi ne peut en fournir. Pour ce faire, le support de batterie doit être fixé sur le dessus avant de la plaque avec les deux vis et écrous restants. Les câbles peuvent être posés à travers le petit trou rond au milieu:
Afin d’utiliser les batteries comme source de tension pour le Pi, vous avez besoin du convertisseur de tension LM2596. Ceci ajuste la tension à 5V (pour le tutoriel). Vous pouvez connecter le commutateur entre le port USB et le convertisseur de tension afin de pouvoir interrompre l’alimentation électrique si nécessaire. Par souci de simplicité, cependant, j’utilise une banque d’alimentation pour alimenter le Pi. Dans la structure schématique, le convertisseur de tension est toujours disponible par souci d’exhaustivité. La tension des moteurs provient des batteries.
Connexion des moteurs
Afin de pouvoir faire fonctionner les deux moteurs à courant continu en avant et en arrière, nous avons besoin du circuit intégré de pilote de moteur (L293D). Cela peut contrôler 4 canaux, il est donc parfait pour nos deux moteurs CC. Dans la structure schématique suivante, vous pouvez voir les connexions:
Le fonctionnement exact et le câblage sont également décrits dans ce tutoriel, donc je ne vais pas y entrer ici. En tant que broches GPIO pour le moteur gauche, j’utilise 17 et 27 et 23 et 24 pour le moteur droit. Assurez-vous que l’alimentation externe (batteries) est utilisée car la broche 5V du Pi n’est pas suffisante (les moteurs ne feront que cliqueter).
Code pour déplacer le robot
Enfin, avant que le robot ne fasse ses premiers pas, le code correspondant est toujours manquant. Pour cela, j’ai écrit une classe qui est également utilisée dans les parties suivantes.
Nous créons un dossier dans lequel tous les fichiers du robot entrent et créons le fichier dans lequel vient le code du moteur:
sudo mkdir RaspberryPi-Robot cd RaspberryPi-Robot sudo nano l293d.py
Le fichier obtient le contenu suivant:
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
importer RPi.GPIO comme GPIO importer temps importer filetage # GPIO.setmode (GPIO.BCM) # GPIO.setwarnings (Faux) classe L293D(): DIST_PER_SEC = 35,0 # cm / s SEC_PER_TURN = 2,087 # secondes par tour complet (selon le matériau de base, utilisez forwardLeft (), stop () et time.time () pour mesurer le temps) def __init__(soi, left_pin1, left_pin2, right_pin1, right_pin2): soi.MOTOR_LEFT_PIN1 = left_pin1 soi.MOTOR_LEFT_PIN2 = left_pin2 soi.MOTOR_RIGHT_PIN1 = right_pin1 soi.MOTOR_RIGHT_PIN2 = right_pin2 GPIO.installer(soi.MOTOR_LEFT_PIN1, GPIO.EN DEHORS) GPIO.installer(soi.MOTOR_LEFT_PIN2, GPIO.EN DEHORS) GPIO.installer(soi.MOTOR_RIGHT_PIN1, GPIO.EN DEHORS) GPIO.installer(soi.MOTOR_RIGHT_PIN2, GPIO.EN DEHORS) def avantGauche(soi): GPIO.production(soi.MOTOR_LEFT_PIN1, GPIO.FAIBLE) GPIO.production(soi.MOTOR_LEFT_PIN2, GPIO.HAUTE) GPIO.production(soi.MOTOR_RIGHT_PIN1, GPIO.FAIBLE) GPIO.production(soi.MOTOR_RIGHT_PIN2, GPIO.FAIBLE) revenir temps.temps() def avantDroite(soi): GPIO.production(soi.MOTOR_RIGHT_PIN1, GPIO.FAIBLE) GPIO.production(soi.MOTOR_RIGHT_PIN2, GPIO.HAUTE) GPIO.production(soi.MOTOR_LEFT_PIN1, GPIO.FAIBLE) GPIO.production(soi.MOTOR_LEFT_PIN2, GPIO.FAIBLE) revenir temps.temps() def vers l’avant(soi): GPIO.production(soi.MOTOR_LEFT_PIN1, GPIO.FAIBLE) GPIO.production(soi.MOTOR_LEFT_PIN2, GPIO.HAUTE) GPIO.production(soi.MOTOR_RIGHT_PIN1, GPIO.FAIBLE) GPIO.production(soi.MOTOR_RIGHT_PIN2, GPIO.HAUTE) revenir temps.temps() def arrièreGauche(soi): GPIO.production(soi.MOTOR_RIGHT_PIN1, GPIO.HAUTE) GPIO.production(soi.MOTOR_RIGHT_PIN2, GPIO.FAIBLE) GPIO.production(soi.MOTOR_LEFT_PIN1, GPIO.FAIBLE) GPIO.production(soi.MOTOR_LEFT_PIN2, GPIO.FAIBLE) revenir temps.temps() def arrièreDroite(soi): GPIO.production(soi.MOTOR_RIGHT_PIN1, GPIO.HAUTE) GPIO.production(soi.MOTOR_RIGHT_PIN2, GPIO.FAIBLE) GPIO.production(soi.MOTOR_LEFT_PIN1, GPIO.FAIBLE) GPIO.production(soi.MOTOR_LEFT_PIN2, GPIO.FAIBLE) revenir temps.temps() def en arrière(soi): GPIO.production(soi.MOTOR_LEFT_PIN1, GPIO.HAUTE) GPIO.production(soi.MOTOR_LEFT_PIN2, GPIO.FAIBLE) GPIO.production(soi.MOTOR_RIGHT_PIN1, GPIO.HAUTE) GPIO.production(soi.MOTOR_RIGHT_PIN2, GPIO.FAIBLE) revenir temps.temps() def Arrêtez(soi): GPIO.production(soi.MOTOR_LEFT_PIN1, GPIO.FAIBLE) GPIO.production(soi.MOTOR_LEFT_PIN2, GPIO.FAIBLE) GPIO.production(soi.MOTOR_RIGHT_PIN1, GPIO.FAIBLE) GPIO.production(soi.MOTOR_RIGHT_PIN2, GPIO.FAIBLE) def forwardDistance(soi, dist): soi.vers l’avant() filetage.Minuteur(dist/soi.DIST_PER_SEC, soi.Arrêtez) def backwardDistance(soi, dist): soi.en arrière() filetage.Minuteur(dist/soi.DIST_PER_SEC, soi.Arrêtez) |
Avec CTRL + O, CTRL + X nous sauvegardons et fermons l’éditeur. Nous commençons un premier test dans lequel le robot se déplace de quelques centimètres et tourne en cercle:
sudo python
importer RPi.GPIO comme GPIO importer temps de l293d importer L293D GPIO.mode réglages(GPIO.BCM) GPIO.setwarnings(Faux) l = L293D(17,27,23,24) l.Arrêtez() pour je dans gamme(20): l.vers l’avant() temps.dormir(0,5) l.avantDroite() temps.dormir(0,5) l.Arrêtez() |
Si les fonctions ne fonctionnent pas comme elles le devraient (marche en arrière plutôt qu’en avant, etc.), il suffit de permuter les deux câbles du moteur et de tester à nouveau. L’affectation GPIO doit, bien entendu, être ajustée si elle diffère de l’affectation utilisée ici.
Ajuster les paramètres du moteur
Pour les autres parties, il est important que les deux paramètres DIST_PER_SEC
et SEC_PER_TURN
sont spécifiés correctement. Cependant, ceux-ci dépendent de la surface (moquette, parquet, carrelage, etc.) et doivent donc être mesurés individuellement. Mesurer DIST_PER_SEC
la commande suivante suffit:
l.forward();time.sleep(1.0);l.stop()
Ensuite, vous pouvez simplement mesurer la distance parcourue et saisir la valeur (en centimètres).
Un peu de compétence est nécessaire pour mesurer SEC_PER_TURN
. Pour cela, nous démarrons l’un des moteurs et nous nous arrêtons dès qu’un virage à 360 ° est terminé. Ici, vous devez jouer avec la période d’attente jusqu’à ce que vous trouviez une bonne valeur:
waiting period = 2.08 l.forwardLeft();time.sleep(wartezeit);l.stop()
Ensuite, les deux valeurs doivent être ajustées dans le fichier.
Dans la partie suivante, nous laisserons le robot suivre une ligne.