🚗 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è detecta | Què fa | Llums |
|---|---|---|
| La línia als dos sensors | Avança recte | Verd |
| La línia només a la dreta | Gira a la dreta per tornar-hi | Esquerra vermella Dreta verda |
| La línia només a l'esquerra | Gira a l'esquerra per tornar-hi | Dreta vermella Esquerra verda |
| Cap sensor veu la línia | Para i retrocedeix per tornar-la a trobar | Vermell |
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 (
TrueiFalse): 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
- Tutorials del robot Cutebot (ElecFreaks, en anglès)
- micro:bit Educational Foundation (en anglès)
- Python.org, el web oficial del llenguatge (en anglès)
- MicroPython.org, el web oficial de la versió de Python per a microcontroladors (en anglès)
- Documentació de MicroPython per a micro:bit (en anglès)
- 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
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)