Lijnsensoren
Les capteurs de ligne d'Eliobot sont des capteurs infrarouges qui permettent de détecter les lignes.
Gebruik met Elioblocs
Om Eliobot-lijnsensoren op Elioblocs te gebruiken, gebruiken we blokken uit de categorie .
Gebruik met Python
Met Python moet u elke lijnsensor als een object definiëren. Op de lijnsensor hebben we 5 sensoren, deze zijn aangesloten op de volgende pinnen:
| Capteur 1 | Capteur 2 | Capteur 3 | Capteur 4 | Capteur 5 | |
|---|---|---|---|---|---|
| Pin | IO10 | IO11 | IO12 | IO13 | IO14 |
We gebruiken het gereflecteerde licht om de lijn te detecteren, we meten het omgevingslicht en het gereflecteerde licht om de waarde te berekenen.
De sensoren retourneren analoge waarden.
Gerelateerde voorbeelden
Elioblocs voorbeeld
Als we hier een lijn onder sensor 3 (de middelste sensor) detecteren, gaan we vooruit.
Python-voorbeeld
Met de bibliotheek 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)
Als we hier een lijn onder de centrale sensor detecteren (index 2), gaan we vooruit.
De drempel is een schatting. Gebruik line_sensor.calibrate_line_sensors() om deze automatisch te berekenen.
Zonder de bibliotheek 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 !")
De geretourneerde waarde is het verschil tussen omgevingslicht en gereflecteerd licht: hoe hoger deze is, hoe contrastrijker de lijn.