Desbravando o PyBricks: Programando o SPIKE Prime em Python do Zero
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 (True ou False), 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

  1. Adicione uma luz verde no hub enquanto o robô estiver seguindo a linha.
  2. Após parar, faça o robô dar um pequeno giro de 45° (usando o giroscópio) e acender o LED vermelho.
  3. Crie uma função chamada retornar_para_base() que faça o robô recuar 200 mm.
  4. Teste diferentes valores de KP e 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.