Utilitzarem el sensor per a detectar una línia negra, i controlar el robot per a seguir la trajectòria.
En primer lloc, connectem el robot.
In [ ]:
from functions import connect, light, forward, stop
connect()
Per a analitzar els valors del sensor, farem una gràfica, però en aquest mentre el robot es mou.
Heu de col·locar el robot perpendicularment a la línia negra, de manera que el codi següent farà avançar el robot uns segons per a travessar-la, llegint els valos abans de la línia, sobre ella, i després de la línia.
In [ ]:
forward()
data = []
for i in range(25):
data.append(light())
stop()
A continuació representeu la gràfica. Hauríeu d'obtindre una mena de "V" perquè els valors alts corresponen a la superfície blanca (que reflexa més llum) i els baixos a la negra (que en reflexa menys).
In [ ]:
from functions import plot
plot(data)
Heu de seleccionar un valor intermedi per a distingir entre blanc i negre. Serà el llindar que usareu:
Per a seguir la línia, la idea és senzilla:
Depenent del sentit en que està recorrent el circuit, haurà de rectificar girant a l'esquerra o a la dreta.
In [ ]:
from functions import left, right
In [ ]:
try:
while True:
if light()>40:
forward()
else:
right()
except KeyboardInterrupt:
stop()
In [ ]:
from functions import left_sharp, right_sharp
In [ ]:
try:
while True:
if light()>40:
forward()
else:
right_sharp()
except KeyboardInterrupt:
stop()
En general, pot haver curves a esquerra i dreta. Aleshores, el mètode anterior no és suficient. Una solució seria usar dos sensors, un per cada costat de la línia, però només en tenim un per robot.
Una altra solució és fer que el sensor vaja per la vora de la línia, de manera que la superfície serà meitat negra i meitat blanca. Si definim dos llindars, aleshores:
El robot anirà recte quan vaja per la vora de la línia, i pot rectificar a esquerra en un cas, i a dreta en l'altre.
In [ ]:
try:
while True:
if light()>85:
left_sharp(speed=10)
else:
if light()<15:
right_sharp(speed=10)
else:
forward(speed=50)
except KeyboardInterrupt:
stop()
In [ ]:
try:
while True:
if light()>40:
left_sharp(speed=50)
else:
if light()<15:
right_sharp(speed=50)
else:
forward(speed=50)
except KeyboardInterrupt:
stop()
In [ ]:
from functions import disconnect
disconnect()
En aquesta pàgina no hem vist conceptes nous, però hem aplicat el que ja sabíem al problema de seguir la línia.
Passem a vore el darrer sensor.