Une fois que notre robot a déjà appris à conduire et à suivre une ligne, nous voulons maintenant le laisser contrôler à distance. Pour cela, nous utiliserons d’abord une télécommande infrarouge et plus tard éventuellement une manette Xbox 360. En plus de contrôler la capacité de conduite, les modes (suivi de ligne, pilote automatique, etc.) doivent également être définis.
Dans cette partie des tutoriels sur le robot Raspberry Pi, nous programmons le récepteur IR et créons les commandes pour la télécommande. La télécommande est également montrée dans la vidéo.
Pièces matérielles requises
En plus des composants précédents, nous avons également besoin d’une télécommande IR et d’une diode infrarouge pour ce tutoriel (disponible ici en kit). Habituellement, le câbles de démarrage sont déjà inclus et la diode peut être connectée directement. Si vous achetez les diodes individuellement (ou si vous les avez encore disponibles), veuillez consulter la fiche technique pour être du bon côté avec le câblage suivant.
Vous pouvez également utiliser la diode IR avec télécommande pour la télécommande générale de votre Raspberry Pi, que ce soit dans un système multimédia tel que KODI ou simplement pour démarrer des scripts.
Connexion du récepteur IR
La connexion du récepteur infrarouge au Raspberry Pi est très simple, car le module n’a que trois broches. Si vous utilisez un récepteur comprenant un PCB (voir ci-dessus), les connexions seront nommées. Sinon, vous devrez rechercher dans la fiche technique l’affectation correcte, car cela peut différer.
En principe, la broche VCC est connectée à une broche 5V libre du Raspberry Pi, la broche GND à la masse / GND du Pi et la broche étiquetée IN / DATA va à GPIO 26.
Préparation
Pour utiliser le récepteur infrarouge, nous avons besoin du programme Lirc. J’ai déjà montré l’installation et le paramétrage de Lirc dans un tutoriel précédent. Je suppose que cela a été mis en œuvre car nous avons besoin d’un Lirc dans ce qui suit. La partie inférieure (télécommande universelle infrarouge Raspberry Pi – programmes de démarrage) concerne la création du fichier lircrc. Afin de contrôler le robot et de reconnaître les commandes plus tard dans notre script, nous devons créer un tel fichier.
Dès que vous avez installé et testé Lirc, nous créons ce fichier dans le dossier dans lequel se trouvent les autres scripts du robot:
cd robot/ sudo nano lircrc
Le contenu suivant est écrit dans le fichier. Vous pouvez bien sûr également choisir une affectation différente, j’ai choisi celle-ci:
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 |
commencer bouton = KEY_1 programme = robot_ir config = LEFT_FORWARD fin commencer bouton = KEY_2 programme = robot_ir config = VERS L’AVANT fin commencer bouton = KEY_3 programme = robot_ir config = RIGHT_FORWARD fin commencer bouton = KEY_4 programme = robot_ir config = LA GAUCHE fin commencer bouton = KEY_5 programme = robot_ir config = ARRÊTEZ fin commencer bouton = KEY_6 programme = robot_ir config = DROITE fin commencer bouton = KEY_7 programme = robot_ir config = LEFT_BACKWARD fin commencer bouton = KEY_8 programme = robot_ir config = ARRIÈRE fin commencer bouton = KEY_9 programme = robot_ir config = RIGHT_BACKWARD fin commencer bouton = KEY_PAUSE programme = robot_ir config = LINE_FOLLOW_ON fin |
Dans un instant, nous attendrons les codes de la télécommande. Pour ce faire, la chaîne de caractères est transférée dans le programme sous «config». Vous pouvez également attribuer d’autres clés ici plus tard, par exemple pour rendre d’autres actions disponibles ultérieurement. Dans mon cas, le mode de suivi d’une ligne est démarré avec le bouton Lecture / Pause.
Afin de pouvoir utiliser Lirc via Python, nous installons ensuite une bibliothèque correspondante:
sudo apt-get install python-lirc
Si vous utilisez Python 3, le package est python3-lirc
.
Code pour recevoir des signaux infrarouges
Nous élargissons notre classe de robots créée précédemment. Pour ce faire, nous créons le IRControl()
fonction après la fin de la lineFollowModeOn(self)
une fonction.
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 |
def IRControl(soi): sockid = lirc.init(« robot_ir », « lircrc ») dist_per_leypress = 30,0 #cm tandis que Vrai: # self.motor.stop () code = lirc.code suivant()[0] impression(code) si code == « VERS L’AVANT »: soi.moteur.vers l’avant() temps.dormir(dist_per_leypress / soi.moteur.DIST_PER_SEC) soi.moteur.Arrêtez() elif code == « LEFT_FORWARD »: # 30 degrés tourner à gauche, puis arrêter soi.moteur.avantDroite() temps.dormir(soi.moteur.SEC_PER_TURN / 360,0 * 30,0) soi.moteur.Arrêtez() elif code == «RIGHT_FORWARD»: # 30 degrés tourner à droite, puis arrêter soi.moteur.avantGauche() temps.dormir(soi.moteur.SEC_PER_TURN / 360,0 * 30,0) soi.moteur.Arrêtez() elif code == « LA GAUCHE »: soi.moteur.avantDroite() temps.dormir(soi.moteur.SEC_PER_TURN / 360,0 * 90,0) soi.moteur.Arrêtez() elif code == « DROITE »: soi.moteur.avantGauche() temps.dormir(soi.moteur.SEC_PER_TURN / 360,0 * 90,0) soi.moteur.Arrêtez() elif code == « ARRIÈRE »: soi.moteur.en arrière() temps.dormir(dist_per_leypress / soi.moteur.DIST_PER_SEC) soi.moteur.Arrêtez() elif code == « LEFT_BACKWARD »: # 30 degrés tourner à gauche en arrière, puis arrêter soi.moteur.arrièreDroite() temps.dormir(soi.moteur.SEC_PER_TURN / 360,0 * 30,0) soi.moteur.Arrêtez() elif code == «RIGHT_BACKWARD»: # 30 degrés tournez à droite, puis arrêtez soi.moteur.arrièreGauche() temps.dormir(soi.moteur.SEC_PER_TURN / 360,0 * 30,0) soi.moteur.Arrêtez() elif code == « ARRÊTEZ »: soi.moteur.Arrêtez() elif code == « LINE_FOLLOW_ON »: soi.lineFollowModeOn() |
Vous pouvez également voir le code complet (précédent) ici. Dans l’éditeur Nano, vous enregistrez avec CTRL + O et fermez avec CTRL + X.
Processus d’arrière-plan pour contrôler le robot
Nous voulons maintenant tester la fonctionnalité. Nous avons deux options pour cela. Le plus simple est que nous entrons simplement le code Python suivant dans la console (après sudo python
). L’autre variante consiste à créer un script avec le code approprié et à le démarrer en arrière-plan après le démarrage. Ceci est par exemple particulièrement important sur Raspberry Pi Zero si vous n’avez pas d’adaptateur WLAN connecté. Conseil: si vous avez également un « gros » Raspberry Pi 3/ 2B, vous pouvez d’abord lire le code sur le Pi via SSH ou FTP, puis insérer simplement la carte Micro SD dans le Zero.
Le code du fichier de test est assez simple (sudo nano test.py
):
de robot importer Robot importer temps essayer: r=Robot() r.IRControl() # r.lineFollowModeOn () # while True: # time.sleep (0,1) sauf: r.moteur.Arrêtez() |
Soit on démarre juste le fichier (sudo nano test.py
) ou nous le laissons s’ouvrir automatiquement lorsque vous redémarrez.
Le moyen le plus simple de le faire est d’utiliser crontab:
crontab -e
À la fin, nous écrivons la ligne suivante:
@reboot ~/robot/test.py
Désormais, le fichier sera appelé au redémarrage et vous pourrez contrôler le robot Raspberry Pi à distance via une télécommande infrarouge.
Dans le prochain tutoriel, nous donnerons au robot un «pilote automatique» pour qu’il se déplace automatiquement là où il n’y a pas d’objet sur le chemin. La partie 6 de la série montre également le contrôler via le contrôleur Xbox 360.