Aula
Nesta aula, os alunos vão unir tudo o que aprenderam: laços de repetição (loops),
leitura de sensores (cor, distância e giroscópio) e uso de funções para modularizar o código.
O objetivo é compreender como esses três elementos interagem para criar comportamentos autônomos e reutilizáveis no robô.
1) Revisando os conceitos
- Loops: estruturas que repetem comandos enquanto uma condição é verdadeira. No PyBricks, o mais usado é o
while True:para repetições contínuas. - Sensores: dispositivos que “alimentam” o programa com dados reais (como cor, distância e orientação). Eles permitem que o robô reaja ao ambiente.
- Funções: blocos de código nomeados (equivalentes aos MyBlocks do Spike) que recebem entradas (variáveis) e podem gerar saídas (valores com
return).
Resumo: Loops controlam o tempo, sensores controlam o comportamento e funções controlam a organização do código.
2) Exemplo integrado – Seguir linha até obstáculo
Este código demonstra a aplicação simultânea de loops, sensores e funções. O robô segue a linha até detectar um obstáculo e então para.
from pybricks.hubs import PrimeHub from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor from pybricks.robotics import DriveBase from pybricks.parameters import Port, Color, Stop from pybricks.tools import wait hub = PrimeHub() mE, mD = Motor(Port.A), Motor(Port.B) sensor_cor = ColorSensor(Port.C) us = UltrasonicSensor(Port.D) robot = DriveBase(mE, mD, 56, 120) ALVO_REFLEXAO = 50 KP = 4.0 VEL = 180 DISTANCIA_PARAR = 200 def seguir_linha(): erro = ALVO_REFLEXAO - sensor_cor.reflection() robot.drive(VEL, KP * erro) def detectar_obstaculo(): return us.distance() <= DISTANCIA_PARAR def missao_principal(): while not detectar_obstaculo(): seguir_linha() wait(15) robot.stop(Stop.HOLD) hub.light.on(Color.YELLOW) wait(500) missao_principal()
3) Analisando o código
- O loop
while not detectar_obstaculo()mantém o robô em movimento até o obstáculo ser detectado. - A função
seguir_linha()usa o sensor de cor para ajustar a curva proporcionalmente ao erro. - A função
detectar_obstaculo()retorna um valor lógico (TrueouFalse), permitindo que o loop pare automaticamente. - Por fim,
missao_principal()organiza toda a lógica, exatamente como um MyBlock principal no Spike Prime.
Dica: Perceba que o
return em detectar_obstaculo() é a “saída” da função — o valor que o loop usa para decidir continuar ou parar.4) Atividade prática guiada
- Adicione uma luz verde no hub enquanto o robô estiver seguindo a linha.
- Após parar, faça o robô dar um pequeno giro de 45° (usando o giroscópio) e acender o LED vermelho.
- Crie uma função chamada
retornar_para_base()que faça o robô recuar 200 mm. - Teste diferentes valores de
KPe observe o comportamento (oscilações, curvas suaves, etc.).
5) Reflexão sobre o aprendizado
Ao combinar loops, sensores e funções, o robô se torna realmente autônomo.
Ele observa o ambiente (sensores), toma decisões (condições dentro dos loops) e executa comportamentos estruturados (funções).
Esse é o mesmo princípio aplicado nas competições da FIRST LEGO League.
Conclusão:
O domínio desses três conceitos é o ponto de virada entre um robô que apenas “executa comandos” e um robô que realmente “pensa” e reage de forma inteligente.
O domínio desses três conceitos é o ponto de virada entre um robô que apenas “executa comandos” e um robô que realmente “pensa” e reage de forma inteligente.