- Material Necessário
- Compreendendo o Módulo Joystick:
- Diagrama de circuito:
- Programação para interface do joystick:
- Visualização da simulação:
- Hardware e funcionamento:
Os dispositivos de entrada desempenham um papel vital em qualquer projeto eletrônico. Esses dispositivos de entrada ajudam o usuário a interagir com o mundo digital. Um dispositivo de entrada pode ser tão simples como um botão ou tão complicado como uma tela de toque; varia de acordo com os requisitos do projeto. Neste tutorial vamos aprender como fazer a interface de um joystick com nosso microcontrolador PIC, um joystick é uma maneira legal de interagir com o mundo digital e quase todo mundo o usaria para jogar videogame na adolescência.
Um joystick pode parecer um dispositivo sofisticado, mas na verdade é apenas uma combinação de dois potenciômetros e um botão. Portanto, também é muito fácil fazer a interface com qualquer MCU, desde que saibamos como usar o recurso ADC desse MCU. Já aprendemos como usar ADC com PIC, portanto, seria apenas uma solução alternativa para a interface do Joystick. Para as pessoas que são novas no pickit, é recomendado aprender o projeto ADC acima, bem como o projeto de sequência de LED piscando para facilitar a compreensão do projeto.
Material Necessário
- PicKit 3 para programação
- Módulo Joy Stick
- PIC16F877A IC
- 40 - Suporte de pino IC
- Quadro de desempenho
- 20 MHz Crystal OSC
- Alfinetes de Bergstik
- Resistor 220ohm
- 5 LEDs de qualquer cor
- 1 kit de solda
- IC 7805
- Adaptador 12V
- Fios de conexão
- Tábua de pão
Compreendendo o Módulo Joystick:
Os joysticks estão disponíveis em diferentes formas e tamanhos. Um módulo Joystick típico é mostrado na figura abaixo. Um joystick nada mais é do que um par de potenciômetros e um botão montado sobre um arranjo mecânico inteligente. O potenciômetro é usado para monitorar o movimento X e Y do joystick e o botão é usado para detectar se o joystick foi pressionado. Ambos os potenciômetros emitem uma tensão analógica que depende da posição do joystick. E podemos obter a direção do movimento interpretando essas mudanças de voltagem usando algum microcontrolador. Anteriormente, fizemos a interface do Joystick com AVR, Joystick com Arduino e Raspberry Pi.
Antes de fazer a interface de qualquer sensor ou módulo com um microcontrolador, é importante saber como ele funciona. Aqui, nosso joystick tem 5 pinos de saída, dos quais dois são para alimentação e três para dados. O módulo deve ser alimentado com + 5V. Os pinos de dados são nomeados como VRX, VRY e SW.
O termo “VRX” significa tensão variável no eixo X e o termo “VRY” significa tensão variável no eixo Y e “SW” significa interruptor.
Portanto, quando movemos o joystick para a esquerda ou direita, o valor da tensão no VRX varia e quando o aumentamos ou diminuímos, o VRY varia. Da mesma forma, quando o movemos diagonalmente, VRX e VRY variam. Quando pressionamos o interruptor, o pino SW será conectado ao aterramento. A figura abaixo ajudará você a entender os valores de saída muito melhor
Diagrama de circuito:
Agora que sabemos como o joystick funciona, podemos chegar à conclusão de que precisaremos de dois pinos ADC e um pino de entrada digital para ler todos os três pinos de dados do módulo Joystick. O diagrama completo do circuito é mostrado na imagem abaixo
Como você pode ver no diagrama do circuito, em vez do joystick, usamos dois potenciômetros RV1 e RV3 como entradas de tensão analógicas e uma entrada lógica para a chave. Você pode seguir as etiquetas escritas na cor violeta para combinar os nomes dos pinos e fazer suas conexões de acordo.
Observe que os pinos analógicos estão conectados aos canais A0 e A1 e a chave digital está conectada ao RB0. Também teremos 5 luzes LED conectadas como saída, para que possamos acender uma com base na direção em que o joystick é movido. Portanto, esses pinos de saída são conectados à PORTA C de RC0 a RC4. Depois de fazer a panorâmica em nosso diagrama de circuito, podemos prosseguir com a programação, simular o programa neste circuito e construir o circuito em uma placa de ensaio e, em seguida, carregar o programa no hardware. Para se ter uma ideia do meu hardware depois de fazer as conexões acima é mostrado abaixo
Programação para interface do joystick:
O programa para fazer a interface do joystick com o PIC é simples e direto. Já sabemos a quais pinos o Joystick está conectado e qual é sua função, então simplesmente temos que ler a tensão analógica dos pinos e controlar os LEDs de saída de acordo.
O programa completo para fazer isso é fornecido no final deste documento, mas para explicar as coisas, estou dividindo o código em pequenos trechos significativos abaixo.
Como sempre o programa é iniciado definindo os bits de configuração, não vamos discutir muito sobre definir bits de configuração porque já aprendemos no projeto LED piscando e é o mesmo para este projeto também. Uma vez que os bits de configuração estão definidos, temos que definir as funções ADC para usar o módulo ADC em nosso PIC. Essas funções também foram aprendidas no tutorial de como usar ADC com PIC. Depois disso, temos que declarar quais pinos são entradas e quais são pinos de saída. Aqui, o LED é conectado ao PORTC, portanto, são pinos de saída e o pino do joystick é um pino de entrada digital. Portanto, usamos as seguintes linhas para declarar o mesmo:
// ***** Configuração de E / S **** // TRISC = 0X00; // PORT C é usado como portas de saída PORTC = 0X00; // Torne todos os pinos baixos TRISB0 = 1; // RB0 é usado como entrada // *** Fim da configuração I / O ** ///
Os pinos ADC não precisam ser definidos como pinos de entrada porque eles, ao usar a função ADC, serão atribuídos como pinos de entrada. Uma vez que os pinos são definidos, podemos chamar a função ADC_initialize que definimos anteriormente. Esta função irá definir os registros ADC necessários e preparar o módulo ADC.
ADC_Initialize (); // Configure o módulo ADC
Agora, damos um passo em nossa infinita enquanto loop. Dentro deste loop temos que monitorar os valores de VRX, VRY e SW e com base nos valores temos que controlar a saída do led. Podemos começar o processo de monitoramento lendo a tensão analógica de VRX e VRY usando as linhas abaixo
int joy_X = (ADC_Read (0)); // Lê o eixo X do joystick int joy_Y = (ADC_Read (1)); // Leia o eixo Y do joystick
Esta linha salvará o valor de VRX e VRY na variável joy_X e joy_Y respectivamente. A função ADC_Read (0) significa que estamos lendo o valor ADC do canal 0, que é o pino A0. Conectamos VRX e VRY aos pinos A0 e A1 e então lemos de 0 e 1.
Se você pode se lembrar de nosso tutorial ADC, sabemos que lemos a Tensão Analógica, o PIC sendo um dispositivo digital irá lê-la de 0 a 1023. Este valor depende da posição do módulo do joystick. Você pode usar o diagrama de etiqueta acima para saber o valor que pode esperar para cada posição do joystick.
Aqui, usei o valor limite de 200 como limite inferior e um valor de 800 como limite superior. Você pode usar o que quiser. Portanto, vamos usar esses valores e começar a acender os LEDs de acordo. Para fazer isso, temos que comparar o valor de joy_X com os valores predefinidos usando um loop IF e tornar os pinos do LED altos ou baixos como mostrado abaixo. As linhas de comentários ajudarão você a entender melhor
if (joy_X <200) // Joy subiu {RC0 = 0; RC1 = 1;} // LED superior acende else if (joy_X> 800) // Joy moveu para baixo {RC0 = 1; RC1 = 0;} // LED inferior acende, else // Se não for movido {RC0 = 0; RC1 = 0;} // Desligue ambos os led
Podemos fazer o mesmo para o valor do eixo Y da mesma forma. Só temos que substituir a variável joy_X por joy_Y e também controlar os próximos dois pinos de LED conforme mostrado abaixo. Observe que quando o joystick não é movido, desligamos ambas as luzes LED.
if (joy_Y <200) // Joy movida para a esquerda {RC2 = 0; RC3 = 1;} // LED esquerdo aceso else if (joy_Y> 800) // Joy movido para a direita {RC2 = 1; RC3 = 0;} // LED direito acende, else // Se não for movido {RC2 = 0; RC3 = 0;} // Desligue ambos os LEDs
Agora temos mais uma coisa a fazer, temos que verificar se o botão está pressionado. O pino da chave está conectado ao RB0 para que possamos usar novamente o loop if e verificar se ele está ligado. Se for pressionado, desligaremos o LED para indicar que o interruptor foi pressionado.
if (RB0 == 1) // Se Joy for pressionado RC4 = 1; // LED do meio aceso else RC4 = 0; // LED do meio apagado
Visualização da simulação:
O projeto completo pode ser simulado usando o software Proteus. Depois de escrever o programa, compile o código e vincule o código hexadecimal da simulação ao circuito. Então você deve notar as luzes LED brilhando de acordo com a posição dos potenciômetros. A simulação é mostrada abaixo:
Hardware e funcionamento:
Depois de verificar o código usando a Simulação, podemos construir o circuito em uma placa de pão. Se você tem seguido os tutoriais do PIC, deve ter notado que usamos a mesma placa de desempenho que tem o PIC e o circuito 7805 soldados a ela. Se você também estiver interessado em fazer um para usá-lo em todos os seus projetos PIC, solde o circuito em uma placa perf. Ou você também pode construir o circuito completo em uma placa de ensaio também. Uma vez que o hardware esteja pronto, seria algo assim abaixo.
Agora carregue o código para o microcontrolador PIC usando o PICkit3. Você pode consultar o projeto LED Blink para obter orientação. Você deve notar que a luz amarela fica alta assim que o programa é carregado. Agora use o joystick e varie o botão, para cada direção do joystick você notará o respectivo LED ficando alto. Quando o botão do meio é pressionado, o LED do meio é desligado.
Este trabalho é apenas um exemplo, você pode construir muitos projetos interessantes em cima dele. O funcionamento completo do projeto também pode ser encontrado no vídeo fornecido no final desta página.
Espero que você tenha entendido o projeto e gostado de construí-lo. Se tiver algum problema em fazê-lo, fique à vontade para postá-lo na seção de comentários abaixo ou escrevê-lo nos fóruns para obter ajuda.