Skip to main content

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. 
Uma vista em perspectiva do Robô VR no Playground Disk Mover no local do primeiro disco azul, com o disco conectado ao eletroímã. A baliza azul está atrás do robô.

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. Vá para o cabeçalho do comando VEXcode VR Python, leia drivetrain dot turn underscore to underscore heading, com 90 e Degrees entre parênteses.

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.

Uma vista de cima para baixo do Robô VR no centro de um círculo que ilustra os cabeçalhos do robô. Na posição de 12 horas, alinhado com a frente do robô, é de 0 graus. O rumo corre no sentido horário em torno do círculo, com 90 graus na posição das 3 horas, 180 graus na posição das 6 horas e 270 graus na posição das 9 horas.

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).Uma vista de perto do canto inferior esquerdo do playground, mostrando que cada quadrado da grade 10 por 10 no chão do playground mede 200 mm por 200 mm.
  • Usando essas medidas, o centro da meta pode ser determinado como estando a aproximadamente 200 milímetros (mm) da parede do Playground.

    Uma visão de perto do canto inferior esquerdo do Disk Mover Playground. O Robô VR tem um disco azul ligado ao eletroímã e está voltado para a baliza azul. Uma medida da parede traseira do playground até o centro da baliza azul é rotulada como 200 milímetros.
  • 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.

    Uma vista lateral da meta azul do Disk Mover Playground, com o primeiro disco azul caído na meta, e o Robô VR é girado e posicionado na frente da meta, pronto para coletar o próximo 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.