Saltar al contenido principal

Sensores de línea

Eliobot line sensor


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 catégorie ligne.

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 1Capteur 2Capteur 3Capteur 4Capteur 5
PinIO10IO11IO12IO13IO14

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

exemple suivi de ligne 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.