Ir para o conteúdo

Semana 5

Fazendo os robôs reagirem

Combine sensores com laços de repetição e condições para um robô reagir ao mundo sozinho.

  • 70 a 85 minutos
  • Missão: Programar um robô que reage sozinho: ele repete em laço, confere um sensor e usa se/senão para desviar de obstáculos ou seguir uma linha.

Esta é a grande semana de programação. Os estudantes pegam os sensores da semana 4 e as sequências da semana 3 e combinam tudo com laços de repetição e condições, para o robô conseguir reagir sozinho. Eles aprendem que um laço repete passos, que um laço infinito se repete até alguém pará-lo, e que um laço repetir-até roda até uma condição virar verdadeira. Conhecem as condições e as decisões booleanas (verdadeiro ou falso), e depois usam se e se/senão para escolher ações. Programam o desvio de obstáculos (repetir em laço, ler o sensor de distância e, se houver algo perto, virar) e exploram o seguimento de linha, conferindo um sensor de luz ou de cor para se guiar e continuar em cima de uma linha.

Ao terminar esta semana, você vai conseguir

  • Explicar como um laço, um laço infinito e um laço repetir-até repetem passos, cada um do seu jeito
  • Descrever uma condição como uma verificação que é verdadeira ou falsa (booleana)
  • Usar se para rodar passos só quando uma condição é verdadeira, e se/senão para escolher entre duas ações
  • Programar o desvio de obstáculos repetindo em laço, lendo um sensor de distância e virando quando algo está perto
  • Explicar como o seguimento de linha fica conferindo um sensor de luz ou de cor para se guiar e continuar em cima de uma linha

Aprender

Laços: repetir sem reescrever

Na semana 3 você escreveu cada passo em fila. Isso funciona, mas se você quer que o robô confira o sensor cem vezes, não vai querer escrever o mesmo passo cem vezes. Um laço é um bloco que repete os passos para você.

Um laço de repetição simples roda os passos um número fixo de vezes, tipo "repita 4 vezes: ande para a frente, vire à direita", para fazer um quadrado. O laço faz a contagem, então o seu programa fica curto.

Por exemplo: Repetir 4 vezes para percorrer um quadrado; Repetir 3 vezes para bater numa porta; Repetir 10 vezes para avançar um pouquinho e conferir

Laços infinitos e laços repetir-até

Um laço infinito repete os passos dele sem parar e nunca acaba sozinho: continua até você parar o programa. Os robôs usam laços infinitos para não parar de observar o mundo, tipo "para sempre: leia o sensor e reaja".

Um laço repetir-até é diferente: ele repete os passos até uma condição virar verdadeira, e aí para e segue em frente. "Repita até a parede estar perto: ande para a frente" quer dizer continuar andando, mas no instante em que a parede estiver perto, parar de repetir.

Por exemplo: Para sempre: não parar de conferir o sensor de distância; Repita até achar a linha: ande para a frente; Repita até o botão ser apertado: espere

Condições são verdadeiras ou falsas (booleanas)

Uma condição é uma pergunta sobre o mundo que só pode ser respondida com sim ou não; em programação a gente diz verdadeiro ou falso. Um valor que só pode ser verdadeiro ou falso se chama booleano.

"A parede está a menos de 10 cm?" é uma condição. Agora ela pode ser verdadeira; um segundo depois, quando o robô se mexer, pode ser falsa. As condições são o jeito de o robô transformar a leitura de um sensor num sim ou não bem claro, sobre o qual ele pode agir.

Por exemplo: A parede está perto? -> verdadeiro ou falso; O sensor está em cima da linha escura? -> verdadeiro ou falso; O botão está apertado? -> verdadeiro ou falso

Se e se/senão: escolher o que fazer

Um bloco se roda os passos dele só quando a condição é verdadeira. "Se a parede estiver perto, vire à direita" quer dizer que o robô vira só quando há mesmo uma parede perto; caso contrário, ele pula a curva.

Um bloco se/senão escolhe entre duas ações: roda um conjunto de passos quando a condição é verdadeira e outro quando ela é falsa. "Se a parede estiver perto, vire à direita; senão, ande para a frente" quer dizer que o robô sempre faz uma coisa ou outra, dependendo do que percebe.

Por exemplo: Se perdeu a linha, vire para achá-la de novo; Se/senão: parede perto -> vire, senão -> ande para a frente; Se o item for vermelho, vire para a caixa vermelha

Desvio de obstáculos = laço + sensor + se/senão

Agora junte tudo. O desvio de obstáculos é um laço infinito que lê o sensor de distância e usa se/senão para decidir: se algo estiver perto, afaste-se; senão, continue andando. Como o laço se repete várias vezes por segundo, o robô reage no instante em que um obstáculo aparece.

É esse o padrão por trás dos carros que estacionam sozinhos e dos robôs aspiradores: perceber, decidir e agir, sem parar.

Por exemplo: Para sempre: leia a distância; se estiver perto vire, senão ande para a frente; Um robô aspirador esbarrando pelo cômodo; Um veículo explorador contornando uma pedra

Seguimento de linha: continue conferindo e corrigindo

O seguimento de linha usa um sensor de luz ou de cor apontado para o chão. Uma linha escura reflete menos luz do que um chão claro, então o sensor consegue distinguir "em cima da linha" de "fora da linha". O robô fica conferindo, de novo e de novo, e se guia para continuar em cima da linha.

Uma regra simples: se o sensor enxergar a linha, faça uma curva para um lado; senão, curve de volta para o outro. O robô nunca anda perfeitamente reto: ele vai serpenteando pela beirada da linha, corrigindo o tempo todo. Esse conferir e corrigir constante é o comportamento reativo.

Por exemplo: Robôs de galpão seguindo fitas coladas no chão; Um carrinho de fábrica sobre uma linha pintada; Repetir até a marca final: continuar seguindo a linha

Palavras para conhecer

Laço de repetição:
Um bloco que repete um ou mais passos, em vez de você escrever tudo de novo várias vezes.
Laço infinito:
Um laço que fica repetindo os passos dele sem parar, até você parar o programa.
Repetir-até:
Um laço que repete os passos dele até uma condição virar verdadeira, e aí para e segue em frente.
Condição:
Uma verificação sobre o mundo, tipo "a parede está perto?", que é sempre verdadeira ou falsa.
If:
Um bloco que roda os passos dele só quando a condição é verdadeira, e pula esses passos quando ela é falsa.
Se/senão:
Um bloco que roda um conjunto de passos quando a condição é verdadeira e outro conjunto quando ela é falsa.
Booleano:
Um valor que só pode ser uma de duas coisas: verdadeiro ou falso. As condições dão uma resposta booleana.
Desvio de obstáculos:
Um comportamento em que o robô repete em laço, lê um sensor de distância e se afasta quando algo está perto.
Seguimento de linha:
Um comportamento em que o robô fica conferindo um sensor de luz ou de cor e se guia para continuar em cima de uma linha marcada.
Comportamento reativo:
Quando um robô muda o que faz com base no que percebe, em tempo real, em vez de seguir uma lista fixa.

Segurança em primeiro lugar

Leia isto antes de montar ou colocar um robô para funcionar nesta semana.

  • Caution:Mantenha dedos, cabelo e roupas soltas longe das rodas em movimento enquanto um robô que reage anda, já que ele muda de direção sozinho.
  • Caution:Cole as linhas de fita e as peças da pista de obstáculos bem lisas no chão e deixe o piso livre, para ninguém tropeçar durante as rodadas.
  • Note:Salve o seu programa de blocos com frequência para que atualizar o navegador não apague o seu trabalho.

Mãos à obra

Escolha o seu caminho

Dá para fazer este curso com um kit de robótica, com o simulador no navegador, ou sem eletrônicos, com materiais de casa. Escolha um: você pode trocar quando quiser sem perder o seu trabalho.

Programa de desvio de obstáculos

Kit de robótica

Programar um robô para repetir em laço, ler um sensor de distância e usar se/senão para virar quando algo estiver perto e andar para a frente quando o caminho estiver livre.

  • O padrão é sempre o mesmo: laço infinito, ler o sensor de distância, e depois se/senão: se algo estiver perto, vire; senão, ande para a frente.
  • Primeiro decida a sua regra de proximidade (por exemplo, "menos de 10 cm conta como perto"). Depois monte o laço para o robô continuar reagindo o tempo todo em que estiver funcionando.

Desvie de obstáculos de verdade com um robô de kit

Você precisa de: Um kit de robótica com sensor de distância, Caixas ou livros para uma pista de obstáculos, Folha de planejamento do programa de blocos

Passos

  1. 1Espalhe alguns obstáculos (caixas ou livros) com vãos por onde o robô consiga passar.
  2. 2Monte um laço infinito. Dentro dele, leia o sensor de distância.
  3. 3Acrescente um se/senão: se a distância for menor que o seu valor de proximidade, vire; senão, ande um pouquinho para a frente.
  4. 4Rode e veja o robô repetir o laço, perceber e contornar os obstáculos sozinho.

Como é quando dá certo: O robô anda para a frente sozinho e se afasta toda vez que um obstáculo chega perto, sem ninguém pilotando.

Fique de olho em:
  • O programa usa um laço infinito (ou de repetição)
  • O programa lê o sensor de distância dentro do laço
  • O programa usa se/senão para virar quando está perto e andar quando está livre
  • O robô desvia de pelo menos um obstáculo sozinho

Segurança: Mantenha os dedos longe das rodas enquanto o robô anda. Dê ao robô um chão livre, sem fios nem degraus.

Se não funcionar

O robô entra direto nos obstáculos
- Confira se o se está mesmo lendo o sensor, e se o seu valor de proximidade é maior que a leitura quando há uma parede bem na frente.
O robô gira no lugar sem parar
- O seu valor de proximidade pode estar grande demais, fazendo ele achar que sempre tem algo perto; diminua, ou acrescente um avanço curto no senão.

Vá além: Acrescente uma segunda regra com se/senão para o robô virar às vezes à esquerda e às vezes à direita, e assim sair dos cantos.

Exploração do seguimento de linha

Kit de robótica

Usar um sensor de luz ou de cor com repetir-até e se para manter um robô se guiando ao longo de uma linha marcada.

  • O seguimento de linha é um comportamento de conferir sem parar: de novo e de novo, leia o sensor de luz ou de cor e corrija o rumo para continuar em cima da linha.
  • Uma regra simples já resolve: se o sensor estiver em cima da linha, curve para um lado; senão, curve para o outro. Coloque isso dentro de um laço repetir-até que termine quando o robô chegar à marca final.

Siga uma linha de fita com um sensor de luz ou de cor

Você precisa de: Um kit de robótica com sensor de luz ou de cor, Uma linha de fita escura sobre um chão claro, Folha de planejamento do programa de blocos

Passos

  1. 1Cole uma linha de fita escura num chão claro, com uma marca bem visível de início e outra de fim.
  2. 2Aponte o sensor de luz ou de cor para o chão e confira a leitura dele em cima da linha e fora da linha.
  3. 3Monte um laço repetir-até (até a marca final) com um se dentro: se o sensor estiver fora da linha, corrija o rumo na direção dela; senão, continue curvando pela beirada.
  4. 4Rode e veja o robô serpentear ao longo da linha e parar no fim.

Como é quando dá certo: O robô segue a linha de fita, corrigindo de um lado para o outro conforme anda, e para na marca final.

Fique de olho em:
  • O programa lê o sensor de luz ou de cor dentro de um laço
  • O programa usa um se (ou um se/senão) para corrigir o rumo com base na leitura
  • O robô fica mais ou menos em cima da linha na maior parte do percurso
  • O robô para na marca final

Segurança: Mantenha os dedos longe das rodas durante as rodadas. Cole a linha bem lisa, para ninguém tropeçar.

Se não funcionar

O robô perde a linha logo de cara
- Confira de novo as leituras em cima da linha e fora dela e coloque o limiar entre as duas; elas precisam ser bem diferentes.
O robô fica rodando em círculos
- Faça as curvas de correção pequenas; curvas grandes passam da linha toda vez.

Vá além: Acrescente uma curva ou uma bifurcação à linha e ajuste a regra de direção para o robô continuar seguindo.

Programe o robô

Build a program from blocks, then run it on the simulator. On the kit path, use the same steps in your robot's app; unplugged, act the blocks out on a floor grid. Your program saves on this device.

Programa de desvio de obstáculos

Um laço infinito que lê o sensor de distância e usa se/senão para virar quando algo está perto e andar para a frente quando o caminho está livre.

Pronto

Adicionar um bloco

Eventos e execução

Movimento

Controle

Saída

Variáveis e contadores

Nenhuma ainda.

O seu programa

  • Andar
Coluna 1, linha 1Coluna 2, linha 1: paredeColuna 3, linha 1Coluna 1, linha 2Coluna 2, linha 2Coluna 3, linha 2Goal zone at column 3, row 1Robot at column 1, row 1
  • Robô (a seta aponta para onde ele olha)
  • Zona de objetivo (contorno tracejado)
  • Parede (cinza, com um X)

Mapa: Uma grade de 3 por 2. O robô começa na coluna 1, linha 1, virado para direita. A zona de objetivo fica na coluna 3, linha 1. Há 1 parede.

Pronto.

Pronto para rodar. · 0 steps

Estado do robô

Coluna
1
Linha
1
Virado para
direita
Distância à frente
0 casas
Toque
pressionado
Em cima de uma linha
não
Luz
80
Na zona de objetivo
não
Colisões
0
Passos
0

Robô na coluna 1, linha 1, virado para direita. Distância à frente: 0 casas. Toque: pressionado. Em cima de uma linha: não. Luz: 80. Fora da zona de objetivo.

Saída do log

Nada registrado ainda.

  • Heads up: This program has no safe stop behavior. Add a safe stop so the robot stops when it is done or blocked.

Programa de seguimento de linha

Um laço repetir-até que lê o sensor de luz ou de cor a cada passo e usa um se para voltar para cima da linha, parando na marca final.

Pronto

Adicionar um bloco

Eventos e execução

Movimento

Controle

Saída

Variáveis e contadores

Nenhuma ainda.

O seu programa

  • Andar
Coluna 1, linha 1: linhaColuna 2, linha 1: linhaColuna 3, linha 1: linhaColuna 4, linha 1: linhaColuna 5, linha 1: linhaGoal zone at column 5, row 1Robot at column 1, row 1
  • Robô (a seta aponta para onde ele olha)
  • Zona de objetivo (contorno tracejado)
  • Linha (faixa tracejada)

Mapa: Uma grade de 5 por 1. O robô começa na coluna 1, linha 1, virado para direita. A zona de objetivo fica na coluna 5, linha 1. Uma linha atravessa 5 casas.

Pronto.

Pronto para rodar. · 0 steps

Estado do robô

Coluna
1
Linha
1
Virado para
direita
Distância à frente
4 casas
Toque
livre
Em cima de uma linha
sim
Luz
20
Na zona de objetivo
não
Colisões
0
Passos
0

Robô na coluna 1, linha 1, virado para direita. Distância à frente: 4 casas. Toque: livre. Em cima de uma linha: sim. Luz: 20. Fora da zona de objetivo.

Saída do log

Nada registrado ainda.

  • Heads up: This program has no safe stop behavior. Add a safe stop so the robot stops when it is done or blocked.

Preveja

Commit to a guess before you test - then see how close you were. Your predictions save automatically.

Como conferir: Rode o programa diante de uma parede três vezes e compare o que o robô faz de verdade com a sua previsão.

Como conferir: Tire a leitura do sensor de dentro do laço, rode e veja se o robô ainda reage aos obstáculos que aparecem.

Testar e melhorar

Teste de confiabilidade do desvio de obstáculos

Coloque o robô diante de um obstáculo e rode o programa. Registre se ele se afastou a tempo. Repita três vezes a partir do mesmo ponto de partida.

O que medir: Em quantas das três tentativas o robô conseguiu desviar do obstáculo

TryEle desviou do obstáculo? (S/N)O que ele fez

Verificação de aprendizagem

Responda a estas perguntas para conferir se você entendeu laços, condições e como os robôs reagem.

  1. 1. Decida se esta afirmação é verdadeira ou falsa.

    Um laço infinito para sozinho depois de alguns segundos.

  2. 2. O que um laço faz num programa?

  3. 3. Qual é a diferença entre um laço infinito e um laço repetir-até?

  4. 4. Uma condição tipo "a parede está perto?" só pode ser:

  5. 5. O que um bloco se/senão faz?

  6. 6. Como funciona o desvio de obstáculos?

0 de 6 respondidas

Refletir

As suas reflexões são salvas sozinhas.

O que vem na semana que vem

Semana que vem o seu robô que reage nem sempre vai se comportar, então vamos aprender a depurar e a fazer com que ele funcione de forma confiável todas as vezes.

  • Salve os seus programas de desvio de obstáculos e de seguimento de linha; semana que vem a gente vai quebrar e consertar versões deles.
  • Repare numa vez em que o seu robô reagiu errado hoje: esse é um bug para levar para a semana 6.
  • Carregue o seu kit ou salve o simulador nos favoritos.

Termine a semana 5

Conclua estes itens para encerrar a semana e desbloquear a próxima:

  • Montar um programa de desvio de obstáculos com um laço, uma leitura de sensor e um se/senão (not done yet)
  • Explorar o seguimento de linha com um sensor de luz ou cor e um laço (not done yet)
  • Fazer três tentativas de reação e registrar os resultados (not done yet)
  • Acertar pelo menos 4 de 5 na verificação de aprendizagem (not done yet)
  • Escrever a sua reflexão (not done yet)