Esse review vai juntar dois items muito bons, que não podem faltar a ninguém, um deles é o Thumb Joystick do dealextreme, e o outro é o servo Towerpro MG955. Vamos aproveitar esse posta para comentar sobre os dois items a fundo, seu funcionamento, e um exemplo muito legal.
Ambos os items podem ser comprados no DX, com ótimos preços, e qualidade muito boa.É dificil achar preço melhor em outros lugares da internet.
Sobre o Thumb Joystick:
Esse modulo pode ser usado em qualquer microcontrolador, ele é feito de dois potenciômetros, um para o eixo X e outro para o eixo Y, alem disso se você pressionar, ele possui um botão. Suas aplicações são infinitas, nesse exemplo eu vou fazer a leitura analógica dos potenciômetros, e depois de fazer essa leitura vou colocar esses valores no servo motor Towerpro MG955.
Imagens do Thumb Joystick:
Lateralmente:
A parte preta é removível, expondo seu circuito interno:
Por outros ângulos fica fácil de ver os potenciômetros:
Usando o Thumb Joystick:
Para usar é bem simples, como se trata de um potenciômetro variável, a primeira coisa que vamos fazer é ligar os pinos no microcontrolador, o pino GND tem que ser ligado ao terra, o pino +5V deve ser ligado a tensão, os pinos VRx e VRy devem ser ligados em canais analógicos, para fazer a leitura que varia entre 0 e 1023, sendo o minimo 0V e o máximo 5V.
Feita essa leitura voce pode jogar esses dados em uma outra variavel, nesse exemplo vai ser quantos graus o motor servo deve se mover, vai ficar mais tranquilo de entender quando eu postar o codigo. Mas primeiro vamos falar do servo motor.
O que é um Servo Motor:
Um servo motor é um dispositivo eletromecânico com características especiais que possibilitam o posicionamento preciso de um eixo em qualquer ângulo entre 0° e 180°. Geralmente possui alto torque devido às reduções por meio de engrenagens.Onde é usado:
Nos mais variados ramos da mecânica e eletrônica, principalmente em indústrias, robôs e acionamentos controlados por computador. Em brinquedos também são muito usados, são modelos mais simples e menores, mas que possuem uma grande precisão e velocidade.
Funcionamento:
Vou descrever o funcionamento do servo desde a leitura dos sinais elétricos até o posicionamento final. Vale lembrar que a cada 20ms (milissegundo) o servo faz a leitura do sinal no fio correspondente (signal).
Vamos imaginar um pequeno processador ligando e desligando uma saída de tensão de 5 volts durante um tempo de 1,5ms (ligado) e 18,5ms (desligado).
Outra imagem que mostra todos pulsos:
Imagens do servo motor do DX:
Onde o fio vermelho é +5V, o fio marrom é GND e o fio amarelo é de dados.
O servo acompanha varias garras, que podem ser utilizadas de ferentes maneiras, vale lembrar que esse servo do dealextreme aguenta 25kfg
Vamos programar:
Esse código faz o seguinte, olha o valor do joystick, pega esse valor e mapeia entre 0 e 180, depois disso coloca esse valor em graus no microcontrolador, o programa esta bem comentado e fácil de entender:
#include <Servo.h> // incluindo a biblioteca dos servos
Servo SRx;
Servo SRy;
const int VRx = A0;
const int VRy = A1;
const int led = 13;
const int botao = 2;
int sensorVRx = 0;
int sensorVRy = 0;
int outputVRx = 0;
int outputVRy = 0;
int estadoBotao = 0;
long tempo_anterior = 0;
long intervalo = 100; //milisegundos
unsigned long tempo_atual;
void setup()
{
Serial.begin(9600);
SRx.attach(9);
SRy.attach(10);
pinMode(led, OUTPUT);
pinMode(botao, INPUT);
}
void loop()
{
tempo_atual = millis();// o tempo atual é igual ao tempo de funcionamento do uC
sensorVRx = analogRead(VRx);
sensorVRy = analogRead(VRy);
outputVRx = map(sensorVRx, 0, 1023, 0, 180);
outputVRy = map(sensorVRy, 0, 1023, 0, 180);
estadoBotao = digitalRead(botao);
if(estadoBotao==HIGH)
{
digitalWrite(led,HIGH);
}
else
{
digitalWrite(led,LOW);
}
if(tempo_atual - tempo_anterior > intervalo)// se o tempo atual menos o tempo anterior for maior que o intervalo com que eu quero fazer minha acao
{
tempo_anterior = tempo_atual;//tempo anterior recebe o tempo atual
Serial.print(outputVRx);
Serial.print(",");
Serial.print(outputVRy);
Serial.print(",");
Serial.println("");
}
SRx.write(outputVRx);
SRy.write(outputVRy);
delay(2);
}
Nenhum comentário:
Postar um comentário