Détecter le bord de la table

Intro

Dans cette leçon, tu vas apprendre à détecter le bord d’une table et à éviter qu’Eliobot ne tombe dans le vide.

É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.IO10

Étape 2

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

import analogio
import digitalio

Ensuite nous définissons chaque capteur.

lineCmd = digitalio.DigitalInOut(board.IO33)
lineCmd.direction = digitalio.Direction.OUTPUT

lineInput = [analogio.AnalogIn(pin) for pin in
               (board.IO10, board.IO11, board.IO12, board.IO13, board.IO14)]

Les capteurs de ligne sont placés en ligne de 0 à 4, 0 étant tout à gauche et 4 tout à droite.

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, LineSensor

Ensuite on définit les moteurs et capteur de lignes.

motors = Motors(AIN1, AIN2, BIN1, BIN2, vBatt_pin)
lineSensor = LineSensor(lineInput, lineCmd, motors)

Étape 3

Dans un premier temps, nous allons reprendre le programme de la dernière leçon, disponible ci-dessous :

while True:
    print(lineSensor.get_line(3))
    time.sleep(1)

Nous allons lancer ce programme et analyser ce qui se passe lorsque nous passons du vide à la table :

On peut voir qu’au début du programme, je suis dans le vide et la valeur renvoyée par le capteur est 0. Au moment où je passe sur la table, la valeur augmente et se stabilise autour de 47000. Je t’invite à reproduire l’expérience par toi-même pour obtenir ta propre valeur personnalisée.

Pour détecter le vide, nous choisirons ici une valeur seuil. Nous dirons que si la valeur du capteur passe en dessous de 40 000, alors nous sommes au bord de la table.

Étape 4

Nous plaçons dans une boucle une condition qui stipule que si la valeur du capteur passe en dessous de 40 000, alors nous reculons pendant une seconde et tournons à droite pendant une seconde pour changer de direction sinon on avance.

while True:
    if lineSensor.get_line(2) < 40000:
        motors.move_backward(100)
        time.sleep(1)
        motors.motor_stop()
        motors.turn_right(100)
        time.sleep(1)
        motors.motor_stop()

    else:
        motors.move_forward(100)

Étape 5

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

from elio import Motors, LineSensor
import board
import time
import analogio
import digitalio
import pwmio

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)

lineCmd = digitalio.DigitalInOut(board.IO33)
lineCmd.direction = digitalio.Direction.OUTPUT

lineInput = [analogio.AnalogIn(pin) for pin in
            (board.IO10, board.IO11, board.IO12, board.IO13, board.IO14)]

motors = Motors(AIN1, AIN2, BIN1, BIN2, vBatt_pin)
lineSensor = LineSensor(lineInput, lineCmd, motors)

while True:
    if lineSensor.get_line(2) < 40000:
        motors.move_backward(100)
        time.sleep(1)
        motors.motor_stop()
        motors.turn_right(100)
        time.sleep(1)
        motors.motor_stop()

    else:
        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