Sensores de línea
Les capteurs de ligne d'Eliobot sont des capteurs infrarouges qui permettent de détecter les lignes.
Usar con Elioblocs
Para utilizar sensores de línea Eliobot en Elioblocs, utilizamos bloques de la categoría .
Usando con Python
Con Python, debes definir cada sensor de línea como un objeto. Disponemos de 5 sensores en el sensor de línea, están conectados a los siguientes pines:
| Capteur 1 | Capteur 2 | Capteur 3 | Capteur 4 | Capteur 5 | |
|---|---|---|---|---|---|
| Pin | IO10 | IO11 | IO12 | IO13 | IO14 |
Usamos la luz reflejada para detectar la línea, medimos la luz ambiental y la luz reflejada para calcular el valor.
Los sensores devuelven valores analógicos.
Ejemplos relacionados
Ejemplo de elioblocs
Aquí, si detectamos una línea debajo del sensor 3 (el sensor del medio), avanzamos.
Ejemplo de Python
Con la biblioteca elio.py
import board
import pwmio
import analogio
import digitalio
from elio import Motors, LineSensor
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)
motors = Motors(AIN1, AIN2, BIN1, BIN2, vBatt_pin)
lineCmd = digitalio.DigitalInOut(board.IO33)
lineCmd.direction = digitalio.Direction.OUTPUT
lineInput = [
analogio.AnalogIn(board.IO10), # Capteur 0
analogio.AnalogIn(board.IO11), # Capteur 1
analogio.AnalogIn(board.IO12), # Capteur 2 (centre)
analogio.AnalogIn(board.IO13), # Capteur 3
analogio.AnalogIn(board.IO14), # Capteur 4
]
line_sensor = LineSensor(lineInput, lineCmd, motors)
threshold = 5000 # Seuil de détection (à calibrer)
while True:
if line_sensor.get_line(2) > threshold: # Capteur central détecte une ligne
motors.move_forward(100)
Aquí si detectamos una línea debajo del sensor central (índice 2), avanzamos.
El umbral es aproximado: utilice line_sensor.calibrate_line_sensors() para calcularlo automáticamente.
Sin la biblioteca elio.py
import board
import analogio
import digitalio
import time
lineCmd = digitalio.DigitalInOut(board.IO33)
lineCmd.direction = digitalio.Direction.OUTPUT
capteur_centre = analogio.AnalogIn(board.IO12) # Capteur 2 (centre)
def get_line_value():
lineCmd.value = True
time.sleep(0.02)
lit = capteur_centre.value
lineCmd.value = False
time.sleep(0.02)
ambient = capteur_centre.value
return ambient - lit
threshold = 5000
while True:
if get_line_value() > threshold:
print("Ligne détectée !")
El valor devuelto es la diferencia entre la luz ambiental y la luz reflejada: cuanto más alto es, más contrastada es la línea.