– Arduino + MotorShield

Boas Pessoal…

Estive a testar o meu MotorShield e como tal decidi fazer um pequeno tutorial a explicar como podem controlar dois motores DC através do vosso arduino mais o motorshield.

Espero que gostem.

Material Necessário (Hardware):
– Base Com Dois Motores DC
– Arduino
MotorShield V3.0
– 4X Crocodilos
– Parafuso
– Chave Philips (Estrela)
– Rectângulo de Pele (ou outro material nao condutor) para proteger o arduino
– Cabo USB
– Computador

Material Necessário (Software):
– Arduino 0017 (Disponível em arduino.cc)

1º Passo

Arranjar uma base que tenha 2 motores DC (por sorte eu ja tinha uma ca em casa, do meu primeiro robot segue linhas)

2º Passo

Limpar a base e retirar toda a electrónica que nela estiver (se tiver).

3º Passo

Colocar o material nao condutor na base, colocar o arduino em cima e agarrar tudo isto com o parafuso á base.

4º Passo

Depois colocar o MotorShield em cima do arduino, neste processo temos de ter atenção onde ficam os pinos encaixados, sendo que o Vin do MotorShield terá que ficar em contacto com o Vin do Arduino e o pino 0 do MotorShield com o Pino 3 do Arduino.

5º Passo

Vamos agora iniciar a programação…

Temos de ter o esquema da placa presente para que possamos entender o seu funcionamento. o esquema esta disponivel aqui

Entao abrimos o documento com o esquema (Motor_control_v3.0_sch.pdf) e o Arduino 0017 para começarmos a programar.

Verificamos o seguinte:

Se DIRA = 0 o motor 1 anda para a frente
Se DIRA = 1 o motor 1 anda para tras
Se DIRB = 0 o motor 2 anda para a frente
Se DIRB = 1 o motor 2 anda para tras

Se DIRA = 0 e DIRB = 0 o motor 1 e o 2 andam em simultaneo para a frente
Se DIRA = 1 e DIRB = 1 o motor 1 e o 2 andam em simultaneo para tras

Se DIRA = 0 vai virar para a esquerda
Se DIRB = 0 vai virar para a direita

Se DIRA = 0 e DIRB = 1 vai rodar para a esquerda rapido (motor 1 anda para a frente e o motor dois anda para tras)

Se DIRA = 1 e DIRB = 0 vai rodar para a direita rapido (motor 1 anda para tras e o motor dois anda para a frente)

Depois desta fase podemos entao começar a programar.

O codigo que desenvolvi foi o seguinte:

/*Codigo Desenvolvido Para Controlo de 2 Motores DC com o MotorSHieldV3.0
By: AndréD.*/

int PWMA=10; //pino pwm do motor 1
int PWMB=11; //pino pwm do motor 2
int DIRA=12; //pino de controlo do motor 1
int DIRB=13; //pino de controlo do motor 1

void setup()
{
analogWrite(PWMA,255); //definir PWM do motor 1 para velocidade máxima (0 a 255)
analogWrite(PWMB,255); //definir PWM do motor 2 para velocidade máxima (0 a 255)
}

void loop()
{
frente(); //chama a função frente
delay(5000); //os motores andam para a frente durante 5 segundos
stop_(); // chama a funçao stop
delay(1000); // permanece imovel durante 1 segundo
tras(); //chama a funçao tras
delay(5000); //os motores andam para a tras durante 5 segundos
stop_(); // chama a funçao stop
delay(1000); // permanece imovel durante 1 segundo
sp_esquerda(); //chama a funçao sp_esquerda
delay(5000); //o motor 1 anda para a frente e o motor 2 anda para tras permitindo assim uma viragem rapida para a esquerda
stop_(); // chama a funçao stop
delay(1000); // permanece imovel durante 1 segundo
sp_direita(); //chama a funçao sp_direita
delay(5000); //o motor 1 anda para a tras e o motor 2 anda para frente permitindo assim uma viragem rapida para a direita
stop_(); // chama a funçao stop
delay(1000); // permanece imovel durante 1 segundo
esquerda(); //chama a funçao esquerda
delay(5000); //o motor 1 roda para a frente permitindo assim uma viragem a esquerda
stop_(); // chama a funçao stop
delay(1000); // permanece imovel durante 1 segundo
direita(); //chama a funçao direita
delay(5000); //o motor 2 roda para a frente permitindo assim uma viragem a direita
stop_(); // chama a funçao stop
delay(1000); // permanece imovel durante 1 segundo
}

void frente()
{
//ver nota no inicio do programa
analogWrite(PWMA, 255);
analogWrite(PWMB, 255);
digitalWrite(DIRA,LOW);
digitalWrite(DIRB,LOW);
}

void tras()
{
//ver nota no inicio do programa
analogWrite(PWMA, 255);
analogWrite(PWMB, 255);
digitalWrite(DIRA,HIGH);
digitalWrite(DIRB,HIGH);
}

void sp_esquerda()
{
//ver nota no inicio do programa
analogWrite(PWMA, 255);
analogWrite(PWMB, 255);
digitalWrite(DIRA,LOW);
digitalWrite(DIRB,HIGH);
}

void sp_direita()
{
//ver nota no inicio do programa
analogWrite(PWMA, 255);
analogWrite(PWMB, 255);
digitalWrite(DIRA,HIGH);
digitalWrite(DIRB,LOW);
}

void esquerda()
{
//ver nota no inicio do programa
analogWrite(PWMA, 255);
analogWrite(PWMB, 255);
digitalWrite(DIRA,LOW);
}

void direita()
{
//ver nota no inicio do programa
analogWrite(PWMA, 255);
analogWrite(PWMB, 255);
digitalWrite(DIRB,LOW);
}

void stop_() { // Esta funçao define o PWM a 0 para que a plataforma possa parrar.
analogWrite(PWMA, 0);
analogWrite(PWMB, 0);
}

Já testei e está a funcionar, se houver algum problema ou algo que acham que devo alterar é so sugerirem.

6º Passo

Depois de termos o MotorShield em cima do Arduino e a programação feita e pronta a ser testada vamos fazer as ligações aos motores com os crocodilos, da forma representada em baixo:

Neste passo e muito importante que as ligações nao fiquem em contacto umas com as outras, para isso dobrem um pouco os pinos nas saidas dos motores para que os crocodilos “estejam á vontade”.

7º Passo

Vamos agora proceder ao Upload do codigo para o arduino.

Primeiro ligamos o USB ao Arduino

Depois ao PC

Depois é so carregar no botao de Upload

E por fim esperar que no canto inferior esquerdo apareça a mensagem “Done Uploading”

NOTA: Se neste passo acontecer algo e nao aparecer essa mensagem, recomendo a verificarem o codigo e/ou se o cabo está correctamente ligado ao PC e ao Arduino.

8º Passo

Testar a base a andar…

(Video Brevemente Disponivel) -> Tou sem Camera…

Espero que tenham Gostado e peço desculpa por algum erro que possa surgir…

Cumps
AndréD.

Anúncios
Comentários
  1. Pick diz:

    Boas.
    gostaria um pouco da tua ajuda. estou a fazer um trabalho usando arduíno atemega328p e L293D no proteus simulando Controlo de 2 Motores DC com o MotorSHieldV3.0, mas não conheço os pin para poder ligar DIRA, DIRB, PWMA,PWMB ao atemega328p. tens assim alguma ideia sobre assunto em que tu podes me ajudar a fazer.

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão /  Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão /  Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão /  Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão /  Alterar )

Connecting to %s