🚗 Robot seguidor de línia

Primer projecte extraescolar de programació Python per a alumnes de secundària

El projecte

En aquest projecte, el robot Cutebot segueix sol una línia dibuixada a terra, sense comandament ni ningú que el controli. El robot té dos sensors a sota, un a l'esquerra i un a la dreta, i el programa decideix què fer segons el que detecten.

Què detectaQuè faLlums
La línia als dos sensorsAvança recteVerd
La línia només a la dretaGira a la dreta per tornar-hiEsquerra vermella
Dreta verda
La línia només a l'esquerraGira a l'esquerra per tornar-hiDreta vermella
Esquerra verda
Cap sensor veu la líniaPara i retrocedeix per tornar-la a trobarVermell

Les llums permeten veure i entendre què «està pensant» el robot en cada moment.

Per què és important?

Treballa el pensament lògic i la resolució de problemes. El resultat del codi es veu de seguida: si és correcte, el robot segueix el camí; si no, cal descobrir per què i arreglar-ho. Així s'aprèn a tenir paciència, a analitzar errors i a treballar de manera metòdica.

Què s'aprèn?

Aquest projecte és un primer contacte real amb la programació en Python, el mateix llenguatge que fan servir els professionals a tot el món. Concretament, s'aprèn a:

  • Donar instruccions pas a pas a una màquina, de forma clara i ordenada.
  • Prendre decisions amb condicions: «si passa això, fes allò».
  • Repetir accions amb un bucle perquè el robot funcioni de manera contínua.
  • Fer servir variables, per exemple per guardar la velocitat i poder-la canviar fàcilment.
  • Llegir sensors i fer que el robot reaccioni al que «veu» del seu entorn.
  • Provar, equivocar-se i corregir, la part més important de qualsevol programador.

Conceptes de Python que es fan servir

Per escriure aquest codi cal dominar aquestes idees bàsiques:

  • Importar biblioteques (import): fer servir codi ja preparat, com el que controla la placa micro:bit i el robot.
  • Crear un objecte (robot = Cutebot()): «activar» el robot dins del programa perquè el puguem manar.
  • Variables (VN = 67): una «caixa» amb nom on guardem un valor, com la velocitat normal o la lenta.
  • Funcions i mètodes (robot.motors(), print()): ordres amb nom que fan una tasca concreta, a les quals podem passar valors.
  • Bucle infinit (while True): repetir les mateixes instruccions per sempre.
  • Condicions (if): executar unes ordres només si es compleix una situació.
  • Comparar valors (==): preguntar si dues coses són iguals. No és el mateix que =, que serveix per guardar un valor.
  • Valors Cert/Fals (True i False): la resposta d'un sensor, que veu la línia o no la veu.
  • Combinar condicions (and): comprovar que passen dues coses alhora, com «el sensor esquerre i el dret».
  • Guardar dos valors alhora (esq, dre = robot.linia()): rebre la lectura dels dos sensors en una sola ordre.
  • Mostrar informació (print): veure per pantalla què mesura el robot, molt útil per detectar errors.
  • Sagnat (indentació): en Python, els espais al principi de la línia indiquen quines ordres formen part del bucle o de la condició.
  • Nombres negatius (-20): per fer que el robot vagi cap enrere.

Preguntes freqüents

Què és un robot seguidor de línia?

És un robot que segueix sol una línia dibuixada a terra. Dos sensors situats a sota detecten si veuen la línia, i el programa decideix si ha d'avançar, girar o retrocedir.

Quin llenguatge de programació es fa servir en aquest projecte?

Python, concretament MicroPython, amb la placa micro:bit i el robot Cutebot d'ElecFreaks.

A qui va dirigit?

A alumnes de secundària. És el primer projecte de programació en Python de les extraescolars de RobotSitges, a Sitges.

Quins conceptes de programació s'aprenen?

Variables, bucles, condicions, valors Cert/Fals i lectura de sensors, entre d'altres.

Per saber-ne més

Per investigar:
  • Com decideix el robot cap a on ha de girar?
  • Què passaria si es canviés la velocitat?
  • Per què el robot retrocedeix quan cap sensor veu la línia?
  • Què passaria si es llegís només un sensor en lloc de dos?
  • Fins a quina velocitat segueix bé una corba molt tancada?
  • Quins canvis caldria fer al programa perquè seguís un circuit més difícil?
Veure el codi del projecte
robot_seguidor.pyPython
from microbit import *from cutebot import Cutebotrobot=Cutebot()VN=67VL=0robot.apaga_llums()while True:    distancia=robot.distancia()    print(distancia)    esq, dre= robot.linia()    print(esq, dre)    if esq==False and dre==False:        robot.stop()        robot.motors(-20, -20)        robot.llums(255,0,0)    if esq==True and dre==True:         robot.llums(0,255,0)         robot.motors(VN, VN)    if esq==False and dre==True:         robot.motors(VN, VL)         robot.llum(Cutebot.LLUM_ESQ ,255,0,0)         robot.llum(Cutebot.LLUM_DRE ,0,255,0)    if esq==True and dre==False:        robot.motors(VL, VN)        robot.llum(Cutebot.LLUM_DRE ,255,0,0)        robot.llum(Cutebot.LLUM_ESQ ,0,255,0)