MINDSTORMS ATRAVÉS DO GPIO
![](https://www.raspberrypi.org/magpi/wp-content/uploads/2018/02/circuitDiagram.png)
O LEGO Mindstorms é uma ótima ferramenta para ganhar experiência na compreensão da robótica, mas e se você quisesse criar seu próprio sensor de entrada? Neste guia, mostraremos como é simples construir um circuito para controlar um robô Mindstorms através do GPIO em Raspberry Pi.
Vamos mostrar cada passo desde conectar o robô até escrever o código. O resultado será um programa em Ch, um intérprete superconjunto de C / C ++, para controlar a direção do robô com um botão.
Você precisará
- Robô LEGO Mindstorms (NXT ou EV3)
- Tábua de pão
- Fios para breadboard
- 1 × LED
- 1 × botão de pressão
- 1 × 220 Ω resistor (vermelho-vermelho-marrom)
- Resistor 1 × 10 kΩ (castanho-preto-laranja)
- Código para este projeto
Programas
Para fazer uso das ferramentas de programação do C-STEM, você deve instalar o sistema operacional C-STEMbian, que contém o C-STEM Studio. Este sistema operacional gratuito e de código aberto contém todas as ferramentas necessárias para robótica e computação física. Além disso, é um superconjunto do Raspbian, então todos os recursos familiares ainda estarão lá. Se você já tiver o Raspbian instalado, os módulos C-STEM podem ser instalados separadamente na parte superior. Tudo isso está disponível na seção C-STEMbian do site C-STEM . Guias passo a passo irão ajudá-lo a configurar e acessar o Raspberry Pi, se necessário.
Conectando-se ao robô Mindstorms
Conectar-se ao seu robô Mindstorms é bastante simples com o software C-STEM.
Primeiro, você precisará abrir o C-STEM Studio e iniciar o Ch Mindstorms Controller. Encontre o grande 'C' no topo da tela depois de fazer o login no seu Raspberry Pi. Clique no 'C' e navegue até 'Ch Mindstorms Controller' no lado esquerdo do menu no C-STEM Studio. Clique em Launch para abri-lo.
O Controlador Ch Mindstorms pode conectar-se a robôs EV3 e NXT. Basta pressionar o botão Scan Robot e adicionar os robôs encontrados na lista do gerenciador de robôs. Siga as instruções na tela para emparelhar os robôs com o seu Raspberry Pi. Devido às limitações do Bluetooth, o Controlador Ch Mindstorms pode conectar-se a um máximo de sete robôs de cada vez.(Certifique-se de que os robôs estejam ligados e que o Bluetooth esteja ativado!)
Depois que os robôs forem digitalizados e adicionados à lista, selecione os que você gostaria de conectar e pressione Conectar. Os robôs aos quais você está conectado terão um ponto verde ao lado de seus nomes.
Construindo o circuito simples
O programa neste tutorial requer um circuito físico para funcionar. Nosso circuito consistirá de uma entrada de botão para controlar a direção do movimento do robô. Uma saída de LED dará uma indicação visual da mudança de direção ao pressionar o botão.
Olhando para o circuito, existem dois lados: entrada e saída. O lado da entrada, mostrado à direita, tem um botão em série com um resistor de 10 kΩ. O botão de pressão está conectado a 5 V para energia. O GPIO 18 é conectado entre eles para ler a entrada do botão.
O lado da saída, à esquerda, tem um LED em série com um resistor de 220.. O GPIO 4 controla essa luz.
Se você tiver um, use uma placa de fuga para tornar o processo de fiação mais claro. Caso contrário, ligue os pinos diretamente do Pi. Pegue um fio do GPIO 4 e conecte-o a uma linha vazia da breadboard. Em seguida, conecte a perna positiva (mais longa) de um LED a essa linha. Da perna negativa do LED, conecte um resistor de 220 Ω (vermelho-vermelho-marrom) ao terra.
Para o botão, insira-o sobre a calha da tábua de pão. Conecte 5 V a uma derivação e conecte um resistor de 10 kΩ (marrom-preto-laranja) do terra à perna adjacente.Por fim, conecte um fio do GPIO 18 à fileira da resistência e da perna do botão de pressão. Isso carregará o sinal de entrada quando o botão for pressionado.
Antes de programar, podemos usar o GPIOviewer, um recurso útil do sistema operacional C-STEMbian. Para usá-lo, navegue novamente para o grande 'C' na parte superior da janela da área de trabalho.
Uma vez aberto, navegue até Ch Raspberry Pi e clique em Launch no canto inferior direito. Isso abrirá o GPIOviewer, que permite o controle total de todos os pinos GPIO no Raspberry Pi. Nessa visualização, você pode alterar os modos de pinos entre entrada, saída e PWM (com um controle deslizante).
Para este circuito, encontre o GPIO 4 e configure-o para saída.
Certifique-se de que o LED esteja configurado e funcionando corretamente alternando entre as saídas altas e baixas. Se a luz acender, você pode passar para testar a entrada. Coloque o GPIO 18 no modo de entrada. Então, tente pressionar o botão. Se a entrada mudar, o circuito está pronto para programação.
Codificação em Ch
A programação no Ch inicia abrindo o C-STEM Studio novamente no seu Raspberry Pi. Na v4.0, navegue até Código no currículo> LearnPiprogram> mindstormsDirectionBot.ch. Se você quiser fazer alterações no arquivo, copie e cole em outro local antes de abrir! Para abrir o programa com o ChIDE, basta clicar duas vezes nele. O código para o projeto segue, que pode ser modificado dentro do painel de edição.
Ao executar o código, certifique-se de que o robô Mindstorms ainda esteja conectado por meio do CMC! Caso contrário, o IDE não reconhecerá que o bot está conectado e, portanto, não executará o código nele. O código deve conduzir o robô para frente ou para trás continuamente a uma velocidade constante. Quando o usuário dá entrada através de um botão, o robô deve mudar de direção negando sua velocidade. O LED também altera os estados pressionando um botão, verificando se a velocidade é positiva ou negativa. Vamos dar uma olhada no código Ch para entender como isso é feito ...
A primeira coisa a notar são os dois cabeçalhos, wiringPi.h e mindstorms.h.Usamos o cabeamento de cabeamento para obter entradas e saídas mais facilmente a partir dos pinos do GPIO. Ele permite que o código se assemelhe ao código do Arduino. Para usar a plataforma Mindstorms, incluímos mindstorms.h, que contém todas as funcionalidades do robô, como mover e girar.
CMindstorms robot;
Agora, o programa precisa declarar um robô. Em Ch, CMindstorms é uma classe que pode ser instanciada como uma variável. Para este programa, o robô Mindstorms é referido como 'robô'; todas as funções relacionadas a ele serão chamadas usando o formato robot.function.
The first variable holds the radius of the wheels on the Mindstorms robot in units of inches. Remember that the radius of a circle, or wheel, is the distance from its centre to the edge. After that, a variable for speed is set to 5 inches (12.5 cm) per second. Depending on the Mindstorms wheels attached, the radius may be different. By storing the value in a variable and passing it to functions, the code is easily adaptable to various sizes. If unsure, the radius of the physical wheel can be measured, especially if using a custom wheel.
Variables for the current switch value as well as the input/output pins are declared similarly to previous projects. Then, the pins are set up and initialised.
robot.driveForeverNB();
Before entering the while loop, the robot is set to continuously move using the driveForeverNB() function in the CMindstormsI class. It will drive forever in whatever direction it is currently facing. Forcing the robot to move constantly makes this code and physical circuit easier since the only input needed is the direction change. It is important not to use the driveForever() version without the ‘NB’ letters. For these functions, ‘NB’ stands for ‘non-blocking’, which allows the code to continue after the function has been called. Without the ‘NB,’ the code would stop at the function because it ‘blocks’ the program from continuing until it finishes.
The first section inside the infinite while loop checks the direction-changing pin. There is a delay(50), meaning wait 50 milliseconds, to ensure a clean reading of the pin. Without this, it may switch directions multiple times on a single press. If the pin reads a value of ‘HIGH’ or ‘1’, it will reverse the direction of movement. To accomplish this, the speed is set equal to its negative counterpart. For example, if the speed was 5 inches/second, this will change it to -5 inches/second. Therefore, the Mindstorms robot will move just as fast in either direction. Writing a new speed to the robot also requires the setSpeed() function in the CMindstormsI class. Notice that this function also requires the radius of the wheel because it uses this value to calculate how fast the wheel must spin to achieve the correct distance. Finally, one more robot.driveForeverNB() call is made to ensure the robot continues to move.
To end the while loop, an if statement controls the state of the LED. When the robot’s speed is greater than zero, it must be moving forward. In this case, the LED turns on. The LED turns off while the robot is moving backwards by checking if speed is less than zero.
If you want to take this project a step further, try connecting multiple robots and control them with the same circuit! Additionally, you can add LED traffic lights and make the robot move according to the lights. Or, come up with your own idea! Now you have the tools to make circuits that can interact with robots.
Nenhum comentário:
Postar um comentário