Eviter un obstacle

Intro

Dans cette leçon tu vas apprendre à utiliser les capteurs de Eliobot pour détecter des obstacles et les éviter.

Étape 1

Nous allons commencer notre code en intégrant quelques bibliothèques. Ce sont des ensembles de codes déjà écrits nous permettant de rajouter des fonctions facilement.

La première s’appelle “board” et est spécifique à CircuitPython. C’est grâce à elle que nous allons pouvoir expliquer à notre programme comment sont connectés les éléments au microcontrôleur (le cerveau de Eliobot)

Pour l’intégrer dans notre programme on utilise la ligne suivante :

import board

Cela nous permet d’appeler les entrée / sorties de la cartes en utilisant le numéro de la broche.

board.IO4

Étape 2

Pour déclarer les capteurs on va utiliser la bibliothèque « analogio ».

import analogio

Ensuite on défini chaque capteur.

obstacleInput = [analogio.AnalogIn(pin) for pin in
                 (board.IO4, board.IO5, board.IO6, board.IO7)]

Les capteurs d’obstacles sont classés dans un tableau et sont numérotés de 0 à 3 : 0 pour la gauche, 1 pour l’avant, 2 pour la droite, et 3 pour l’arrière. Dans la fonction, nous utilisons l’indice 1 pour le capteur de devant.

Pour déclarer les moteurs on va utiliser une bibliothèque qui se nomme « pwmio ».

import pwmio

Ensuite nous définissons chaque moteur, son sens et la batterie.

AIN1 = pwmio.PWMOut(board.IO36)
AIN2 = pwmio.PWMOut(board.IO38)
BIN1 = pwmio.PWMOut(board.IO35)
BIN2 = pwmio.PWMOut(board.IO37)

vBatt_pin = analogio.AnalogIn(board.BATTERY)

Pour nous faciliter la tâche on va utiliser la bibliothèque « elio ».

from elio import Motors, ObstacleSensor

Ensuite on définit les moteurs et capteur d’obstacle.

motors = Motors(AIN1, AIN2, BIN1, BIN2, vBatt_pin)
obstacleSensor = ObstacleSensor(obstacleInput)

Étape 3

Pour commencer, nous allons reprendre le programme créé dans la leçon précédente. On te le remet ci-dessous :

while True:
    if obstacleSensor.get_obstacle(1):
         print("Un obstacle est devant")
         motors.motor_stop()
    else:
         print("Aucun obstacle")
         motors.move_forward(100)

Ici pour éviter l’obstacle on va ajouter une rotation vers la droite pendant 1 seconde :

while True:
    if obstacleSensor.get_obstacle(1):
         print("Un obstacle est devant")
         motors.turn_right(100)
         time.sleep(1)
    else:
         print("Aucun obstacle")
         motors.move_forward(100)

Comme on utilise une pause d’une seconde avec time on n’oublie pas d’importer la bibliothèque.

import time

Étape 4

Voici le programme final que l’on va pouvoir exécuter ▶️ :

import board
from elio import Motors, ObstacleSensor
import pwmio
import analogio
import time

obstacleInput = [analogio.AnalogIn(pin) for pin in
                 (board.IO4, board.IO5, board.IO6, board.IO7)]

AIN1 = pwmio.PWMOut(board.IO36)
AIN2 = pwmio.PWMOut(board.IO38)
BIN1 = pwmio.PWMOut(board.IO35)
BIN2 = pwmio.PWMOut(board.IO37)

motors = Motors(AIN1, AIN2, BIN1, BIN2, vBatt_pin)
obstacleSensor = ObstacleSensor(obstacleInput)

while True:
    if motors.get_obstacle(1):
         print("Un obstacle est devant")
         motors.turn_right(100)
         time.sleep(1)
    else:
         print("Aucun obstacle")
         motors.move_forward(100)

Bravo !

Et voila, ton programme est fini ! Il ne te reste plus qu’à le Téléverser pour admirer le résultat

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut