Olá pessoal. Agora que aprendemos a controlar as rodas do carrinho robô por meio da ponte "H", já podemos partir para o próximo nível e montar uma garra em nosso robô controlada por um servo motor. O sketch que utilizaremos para tal, é semelhante ao da fase 1, apenas com algumas mudanças, que possibilitam o controle do servo motor pelas teclas "p" e "s". Percebam que para isso tivemos que acrescentar mais dois IF's juntamente com a biblioteca <servo.h>. O controle do servo se dá através do pino 2 do arduino.
O sketch está logo abaixo, e pode ser copiado e colado na tela do arduino:
// PROGRAMA CARRINHO ROBO 2 (RODAS - PONTE H - GARRA - SERVO MOTOR)
/* Este programa controla as rodas e a garra do carrinho por meio da comunicacao serial, via teclado.
Para o controle do carrinho, o mesmo deve estar conectado via
USB. Os comandos possiveis sao:
'f'- carrinho anda para frente;
'r'- carrinho anda para tras;
'e'- vira para a esquerda;
'd'- vira para a direita;
'h'- potencia maxima quando acionada alguma porta PWM;
'l'- potencia reduzida;
'p'- garra fecha;
's'- garra abre;
*/
#include <Servo.h> // biblioteca para controle do servo motor;
Servo myservo; // cria um objeto que possibilita o controle de um servo;
int tempo = 500; // Variavel que controla o tempo dos motores;
char comando = 'v'; // Recebe o valor digitado;
int POT = 255; // Controla a potencia das portas PWM;
void setup()
{
myservo.attach(2); // define em que pino digital esta conectado o servo;
Serial.begin(9600); // inicia comunicacao serial;
// declaração dos pinos utilizados:
pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(9, OUTPUT);
}
void loop()
{
if (Serial.available()) // verifica se existe algo digitado no monitor serial;
{
comando = Serial.read(); // carrega o valor digitado no monitor serial na variavel "comando";
if (comando == 'f') // verifica se a variavel "comando" contem a letra "f"; Se verdadeiro aciona as portas
//que fazem com que o carrinho ande para a frente pelo tempo contido na variavel "tempo", apos isso desliga todas as portas;
{
Serial.println("carrinho.anda para frente!");
analogWrite(3, POT);
analogWrite(6, POT);
analogWrite(9, 0);
analogWrite(5, 0);
delay(tempo);
analogWrite(3, 0);
analogWrite(6, 0);
analogWrite(9, 0);
analogWrite(5, 0);
}
if (comando == 'r') // verifica se a variavel "comando" contem a letra "r"; Se verdadeiro aciona as portas
//que fazem com que o carrinho ande para a tras pelo tempo contido na variavel "tempo", apos isso desliga todas as portas;
{
Serial.println("carrinho.anda para tras!");
analogWrite(5, POT);
analogWrite(9, POT);
analogWrite(3, 0);
analogWrite(6, 0);
delay(tempo);
analogWrite(3, 0);
analogWrite(6, 0);
analogWrite(9, 0);
analogWrite(5, 0);
}
if (comando == 'e') // verifica se a variavel "comando" contem a letra "e"; Se verdadeiro aciona as portas
//que fazem com que o carrinho ande para a esquerda pelo tempo contido na variavel "tempo", apos isso desliga todas as portas;
{
Serial.println("carrinho.anda para esquerda!");
analogWrite(3, POT);
analogWrite(9, POT);
analogWrite(5, 0);
analogWrite(6, 0);
delay(tempo);
analogWrite(3, 0);
analogWrite(6, 0);
analogWrite(9, 0);
analogWrite(5, 0);
}
if (comando == 'd') // verifica se a variavel "comando" contem a letra "d"; Se verdadeiro aciona as portas
//que fazem com que o carrinho ande para a direita pelo tempo contido na variavel "tempo", apos isso desliga todas as portas;
{
Serial.println("carrinho.anda para direita!");
analogWrite(5, POT);
analogWrite(6, POT);
analogWrite(3, 0);
analogWrite(9, 0);
delay(tempo);
analogWrite(3, 0);
analogWrite(6, 0);
analogWrite(9, 0);
analogWrite(5, 0);
}
if (comando == 'h') // verifica se a variavel "comando" contem a letra "h"; Se verdadeiro carrega na variavel "POT
// o valor de 255, que fará com que as portas PWM enviem a potencia maxima para os motores quando acionados;
{
POT = 255;
Serial.print("velocidade maxima. Pot:");
Serial.println(POT);
}
if (comando == 'l') // verifica se a variavel "comando" contem a letra "l"; Se verdadeiro carrega na variavel "POT
// o valor de 200, que fará com que as portas PWM enviem uma potencia reduzida para os motores quando acionados;
{
POT = 200;
Serial.print("velocida media. Pot: ");
Serial.println(POT);
}
if (comando == 'p') // verifica se a variavel "comando" contem a letra "p"; Se verdadeiro faz com que o eixo do servo motor gire
// para a posicao de 180 graus, fazendo com que a garra feche;
{
Serial.println(" Garra fechada!!! ");
myservo.write(180); // comanda servo para a posicao indicada;
delay(15); // espera ate que o servo chegue na posicao ordenada;
}
if (comando == 's') // verifica se a variável "comando" contem a letra "s"; Se verdadeiro faz com que o eixo do servo motor gire
// para a posição de 0 graus, fazendo com que a garra abra;
{
Serial.println(" Garra aberta!!! ");
myservo.write(0); // comanda servo para a posição indicada;
delay(15); // espera ate que o servo chegue na posição ordenada;
}
else // caso seja digitado qualquer outro comando diferente dos definidos acima, imprime a mensagem: "comando desconhecido!";
{
Serial.println("comando desconhecido!");
}
}
}
// Fim do programa;
/* Este programa controla as rodas e a garra do carrinho por meio da comunicacao serial, via teclado.
Para o controle do carrinho, o mesmo deve estar conectado via
USB. Os comandos possiveis sao:
'f'- carrinho anda para frente;
'r'- carrinho anda para tras;
'e'- vira para a esquerda;
'd'- vira para a direita;
'h'- potencia maxima quando acionada alguma porta PWM;
'l'- potencia reduzida;
'p'- garra fecha;
's'- garra abre;
*/
#include <Servo.h> // biblioteca para controle do servo motor;
Servo myservo; // cria um objeto que possibilita o controle de um servo;
int tempo = 500; // Variavel que controla o tempo dos motores;
char comando = 'v'; // Recebe o valor digitado;
int POT = 255; // Controla a potencia das portas PWM;
void setup()
{
myservo.attach(2); // define em que pino digital esta conectado o servo;
Serial.begin(9600); // inicia comunicacao serial;
// declaração dos pinos utilizados:
pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(9, OUTPUT);
}
void loop()
{
if (Serial.available()) // verifica se existe algo digitado no monitor serial;
{
comando = Serial.read(); // carrega o valor digitado no monitor serial na variavel "comando";
if (comando == 'f') // verifica se a variavel "comando" contem a letra "f"; Se verdadeiro aciona as portas
//que fazem com que o carrinho ande para a frente pelo tempo contido na variavel "tempo", apos isso desliga todas as portas;
{
Serial.println("carrinho.anda para frente!");
analogWrite(3, POT);
analogWrite(6, POT);
analogWrite(9, 0);
analogWrite(5, 0);
delay(tempo);
analogWrite(3, 0);
analogWrite(6, 0);
analogWrite(9, 0);
analogWrite(5, 0);
}
if (comando == 'r') // verifica se a variavel "comando" contem a letra "r"; Se verdadeiro aciona as portas
//que fazem com que o carrinho ande para a tras pelo tempo contido na variavel "tempo", apos isso desliga todas as portas;
{
Serial.println("carrinho.anda para tras!");
analogWrite(5, POT);
analogWrite(9, POT);
analogWrite(3, 0);
analogWrite(6, 0);
delay(tempo);
analogWrite(3, 0);
analogWrite(6, 0);
analogWrite(9, 0);
analogWrite(5, 0);
}
if (comando == 'e') // verifica se a variavel "comando" contem a letra "e"; Se verdadeiro aciona as portas
//que fazem com que o carrinho ande para a esquerda pelo tempo contido na variavel "tempo", apos isso desliga todas as portas;
{
Serial.println("carrinho.anda para esquerda!");
analogWrite(3, POT);
analogWrite(9, POT);
analogWrite(5, 0);
analogWrite(6, 0);
delay(tempo);
analogWrite(3, 0);
analogWrite(6, 0);
analogWrite(9, 0);
analogWrite(5, 0);
}
if (comando == 'd') // verifica se a variavel "comando" contem a letra "d"; Se verdadeiro aciona as portas
//que fazem com que o carrinho ande para a direita pelo tempo contido na variavel "tempo", apos isso desliga todas as portas;
{
Serial.println("carrinho.anda para direita!");
analogWrite(5, POT);
analogWrite(6, POT);
analogWrite(3, 0);
analogWrite(9, 0);
delay(tempo);
analogWrite(3, 0);
analogWrite(6, 0);
analogWrite(9, 0);
analogWrite(5, 0);
}
if (comando == 'h') // verifica se a variavel "comando" contem a letra "h"; Se verdadeiro carrega na variavel "POT
// o valor de 255, que fará com que as portas PWM enviem a potencia maxima para os motores quando acionados;
{
POT = 255;
Serial.print("velocidade maxima. Pot:");
Serial.println(POT);
}
if (comando == 'l') // verifica se a variavel "comando" contem a letra "l"; Se verdadeiro carrega na variavel "POT
// o valor de 200, que fará com que as portas PWM enviem uma potencia reduzida para os motores quando acionados;
{
POT = 200;
Serial.print("velocida media. Pot: ");
Serial.println(POT);
}
if (comando == 'p') // verifica se a variavel "comando" contem a letra "p"; Se verdadeiro faz com que o eixo do servo motor gire
// para a posicao de 180 graus, fazendo com que a garra feche;
{
Serial.println(" Garra fechada!!! ");
myservo.write(180); // comanda servo para a posicao indicada;
delay(15); // espera ate que o servo chegue na posicao ordenada;
}
if (comando == 's') // verifica se a variável "comando" contem a letra "s"; Se verdadeiro faz com que o eixo do servo motor gire
// para a posição de 0 graus, fazendo com que a garra abra;
{
Serial.println(" Garra aberta!!! ");
myservo.write(0); // comanda servo para a posição indicada;
delay(15); // espera ate que o servo chegue na posição ordenada;
}
else // caso seja digitado qualquer outro comando diferente dos definidos acima, imprime a mensagem: "comando desconhecido!";
{
Serial.println("comando desconhecido!");
}
}
}
// Fim do programa;
Nenhum comentário:
Postar um comentário