Aula
Objetivo da aula
- Entender as diferenças entre movimento por tempo e movimento por rotação.
- Aprender a usar
run_time(),run_angle(),run()estop()no PyBricks. - Conhecer os modos de parada: HOLD, BRAKE e COAST.
- Aplicar esses comandos para obter movimentos precisos e repetíveis.
Preparação
Conecte um motor à porta A do hub SPIKE Prime.
Dica: Considere prender o motor na estrutura do robô para evitar vibrações e leituras inconsistentes.
1) Movimento por tempo — run_time()
Quando usar: para acionar por um intervalo fixo (em milissegundos), quando não é necessária precisão de ângulo.
velocidade: graus por segundo (°/s)tempo_ms: milissegundosthen: como parar (Stop.HOLD,Stop.BRAKE,Stop.COAST)wait:Trueespera terminar;Falsesegue adiante
from pybricks.pupdevices import Motor from pybricks.parameters import Port, Stop motorA = Motor(Port.A) motorA.run_time(400, 1000, then=Stop.HOLD, wait=True) # 400°/s por 1s, segura posição
Quando é útil?
- Abrir/fechar uma garra por um curto período.
- Ajustes rápidos que não exigem ângulo exato.
2) Movimento por rotação — run_angle()
Quando usar: para movimentos precisos de posição (em graus).
velocidade: graus por segundo (°/s)angulo: graus (360° = 1 volta)then: modo de paradawait: aguarda ou não o término
motorA.run_angle(300, 360, then=Stop.HOLD, wait=True) # 1 volta motorA.run_angle(300, -180, then=Stop.BRAKE, wait=True) # meia volta para trás
Quando é útil?
- Levantar um braço até um ângulo específico.
- Movimentos de garras com posicionamento repetível.
3) Movimento contínuo — run() e stop()
Quando usar: para manter velocidade até que uma condição aconteça (sensor, tempo externo, etc.).
from pybricks.tools import wait motorA.run(350) # gira indefinidamente wait(1200) # 1,2s se passando... motorA.stop() # para usando o modo padrão (BRAKE)
Você pode combinar run() com sensores (parar ao detectar um valor), veremos mais nos módulos de sensores.
4) Modos de parada — Stop
- HOLD: segura a posição final com força (bom para precisão).
- BRAKE: aplica freio, mas não mantém posição ativamente.
- COAST: roda livre; o motor desacelera sem freio.
Escolha prática: HOLD para ângulos críticos (garra, braço); BRAKE para paradas firmes; COAST para suavidade quando não precisa de precisão.
5) Comparando por tempo × por rotação
| Critério | Por tempo (run_time) |
Por rotação (run_angle) |
|---|---|---|
| Precisão | Baixa a média | Alta (define graus exatos) |
| Repetibilidade | Varia com carga/bateria | Muito boa |
| Uso típico | Ações rápidas e simples | Braços/garra e posições fixas |
6) Exemplos práticos
A) Abrir e fechar garra (ângulo preciso)
from pybricks.pupdevices import Motor from pybricks.parameters import Port, Stop garra = Motor(Port.A) garra.run_angle(300, 120, then=Stop.HOLD, wait=True) # abre garra.run_angle(300, -120, then=Stop.HOLD, wait=True) # fecha
B) Alimentar uma esteira por tempo
esteira = Motor(Port.A) esteira.run_time(500, 800, then=Stop.BRAKE, wait=True) # 0,8s de alimentação
C) Movimento contínuo até uma condição (parada manual)
motorA.run(450)
# ... ler sensor/tempo em outro trecho e então:
motorA.stop()
7) Ajustes finos: limites de controle
Para suavidade e consistência, ajuste limites de controle antes dos comandos:
from pybricks.hubs import PrimeHub hub = PrimeHub() motorA.control.limits(speed=700, acceleration=500, torque=100)
Boas práticas: teste diferentes acceleration/deceleration para evitar trancos e garantir repetibilidade.
Erros comuns
- Confundir unidades: velocidade em °/s, tempo em ms, ângulo em °.
- Não aguardar término: se usar
wait=False, o programa segue adiante e pode sobrepor comandos. - Parada inadequada: usar
COASTquando precisa de precisão; prefiraHOLDpara posições críticas.
Atividade prática
- Faça o motor girar por 1,5s a 450°/s usando
run_time()comStop.BRAKE. - Faça o motor girar 2 voltas (720°) a 300°/s usando
run_angle()comStop.HOLD. - Crie uma função
abrir_e_fechar_garra()que use dois comandosrun_angle()com pausas curtas. - Compare resultados: qual método foi mais repetível no seu robô?