Lição 3: Usando sensores e o eletroímã para colocar um disco na meta
Adicionar o sensor de distância ao projeto
Na Lição 2, o Robô VR dirigiu em sentido inverso de volta ao ponto de partida para soltar o disco. Isso exigia que o usuário calculasse a distância exata para o Robô VR percorrer. Isso nem sempre é possível. Em vez disso, o Robô VR pode usar valores de sensor relatados para pegar e soltar discos com precisão consistente.
Nesta lição, o sensor de distância será usado para determinar onde o robô VR deve parar de dirigir ao retornar à meta. Este sensor informa a distância da frente do robô VR ao objeto mais próximo utilizando o comando get_distance . Para utilizar o sensor de distância para levar o robô VR de volta ao objetivo, é necessário que aconteça o seguinte:
- O robô VR terá de rodar 180 graus para que o sensor de distância fique virado para em direção ao objetivo. O comando turn_to_heading pode ser utilizado para garantir que o robô VR roda para o rumo correto.
- O Robô VR usará o Sensor de Distância com a parede traseira do Playground para determinar onde soltar o disco.
- O Robô VR irá conduzir para o gol.

Para sua informação
O comando turn_to_heading roda o robô VR para uma direção específica utilizando o sensor giroscópio. A direção que o Robô VR irá girar (esquerda ou direita) é determinada com base no rumo atual do Sensor Giroscópio. 
O comando turn_to_heading é utilizado para encaminhar o Robô VR para um rumo específico, independentemente da posição do Robô VR. À medida que você pega ou solta um disco, o Robô VR pode ficar fora do curso. A utilização do comando turn_to_heading garante que o robô VR irá rodar para a posição absoluta em vez de uma posição relativa ao rumo anterior.

Continuar a construir o projeto
- Continuar a trabalhar no projeto Unit8Lesson3.
-
Adicione um comando turn_to_heading após o terceiro comentário. Defina o parâmetro para 180 graus, então o projeto agora tem a seguinte aparência:
def main(): #1. Dirija para o primeiro disco enquanto não estiverdown_eye.near_object () :drivetrain.drive (FORWARD) wait(5, MSEC) drivetrain.stop() # 2. Pegue o primeiro disco magnet.energize(BOOST) # 3. Dirija para a meta drivetrain.turn_to_heading(180, GRAUS) # 4. Solte o disco na meta -
Agora que o Robô de RV está orientado para a meta, o Robô de RV precisará voltar para a meta. Adicione um ciclo while abaixo do comando turn_to_heading , para que a terceira secção do projeto fique assim:
# 3. Dirija para a meta drivetrain.turn_to_heading(180, GRAUS) enquanto a condição: aguarde(5, MS) - Para voltar à meta, o Robô VR usará dados do Sensor de Distância para determinar quando o Robô VR está dentro da meta. Conforme discutido na lição anterior, cada quadrado de grade no Playground Disk Mover mede 200 milímetros (mm) por 200 milímetros (mm).

-
Usando essas medidas, o centro da meta pode ser determinado como estando a aproximadamente 200 milímetros (mm) da parede do Playground.

-
O Robô VR deve dirigir enquanto o Sensor de Distância informa que o Robô VR está a mais de 200 milímetros (mm) da parede do Playground. Defina a condição do ciclo while para o comando get_distance com o parâmetro milímetro (mm). Em seguida, adicione o operador de comparação a maior que (>) 200. A terceira secção do projeto deve agora ter a seguinte aparência:
# 3. Dirija até a meta drivetrain.turn_to_heading(180, GRAUS) enquanto front_distance.get_distance(MM) > 200: aguarde(5, MS) -
Adicione um comando drive neste ciclo while , para que a terceira secção do projeto fique assim. Isso instruirá o Robô VR a avançar enquanto o Sensor de Distância relata uma distância superior a 200 milímetros (mm).
# 3. Dirija para a meta drivetrain.turn_to_heading(180, GRAUS) enquanto front_distance.get_distance(MM) > 200: drivetrain.drive(FORWARD) wait(5, MSEC) -
Assim que o Robô VR atingir a meta (a 200 mm da parede), o Robô VR precisará parar de dirigir. Adicione um comando stop fora do ciclo do while , para que a terceira secção do projeto fique assim:
# 3. Dirija até a meta drivetrain.turn_to_heading(180, GRAUS) enquanto front_distance.get_distance(MM) > 200: drivetrain.drive(FORWARD) wait(5, MSEC) drivetrain.stop() -
Agora que o robô VR está parado na meta, ele pode soltar o disco. Adicione um comando energize abaixo do quarto comentário e defina o parâmetro para 'DROP'. A quarta secção do projeto deve agora ser assim:
# 4. Solte o disco na meta magnet.energize(SOLTE) -
O robô VR terá de conduzir em marcha-atrás a uma curta distância para evitar derrubar ou colidir com quaisquer discos. Colidir com um disco pode potencialmente tirar o Robô VR do curso. O Robô VR precisará então girar para ficar voltado para os discos mais uma vez. Adicione os seguintes comandos após o comando final energizar , conforme mostrado, para instruir o robô VR a conduzir em marcha-atrás durante 100 milímetros (mm) e voltar a um rumo de 0 graus. Certifique-se de que os comandos estão recuados corretamente no seu projeto.
# 4. Solte o disco na meta magnet.energize (DROP) drivetrain.drive_for (REVERSE, 100, MM) drivetrain.turn_to_heading(0, DEGREES) - Abra o Playground do Disk Mover se ainda não estiver aberto e execute o projeto.
-
O robô VR avança, pega o primeiro disco e, em seguida, vira para um rumo de 180 graus para enfrentar a meta. O Robô VR então usa os valores do Sensor de Distância para determinar quando parar de dirigir e soltar o disco.

Fluxo do Projeto para Soltar o Primeiro Disco na Meta
Observe como o ciclo while funciona com o sensor de distância nesta parte do projeto.
- O robô VR avançará enquanto o sensor de distância estiver a mais de 200 milímetros da parede.
- Quando o Sensor de Distância detetar que a parede do Parque Infantil está a menos de 200 milímetros (mm) de distância, o projeto passará para o próximo comando fora do loop enquanto , e o Robô VR irá parar de conduzir.
- O projeto continuará, para energizar o Eletroímã para soltar o disco na baliza.
- Em seguida, o Robô VR inverterá e girará 180 graus para estar pronto para enfrentar o próximo disco.
Selecione o botão Seguinte para continuar com o resto desta lição.