Boas Pessoal...
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2FUntitled-19.jpg&hash=963d224c678526545345955dd26202a45bfa84fc)
Estive a testar o meu MotorShield (http://loja.lusorobotica.com/shields/32-motor-shield-arduino.html) e como tal decidi fazer um pequeno tutorial a explicar como podem controlar dois motores DC através do vosso arduino mais o motorshield.
A minha ideia será a seguinte, como sabem o motorshield permite controlar motores DC e motores de passo, como não tive tempo nem tenho o material necessário para testar estes três tipos de actuadores vou apenas colocar o controlo de motores DC, assim que tiver o material para os outros dois tipos de actuadores farei um tutorial e colocarei aqui neste mesmo tópico, para ficar-mos com um sitio que tenho tudo sobre o MotorShield V3.0 (http://loja.lusorobotica.com/shields/32-motor-shield-arduino.html).
Espero que gostem.
Como montar Motor Shield V3.0 - Arduino (http://lusorobotica.com/index.php/topic,1390.0.html)
Material Necessário (Hardware):
- Base Com Dois Motores DC
- Arduino (http://loja.lusorobotica.com/microcontroladores/10-arduino-duemilanove-com-atmega328.html)
- MotorShield V3.0 (http://loja.lusorobotica.com/shields/32-motor-shield-arduino.html)
- 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)
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2FUntitled-1-2.jpg&hash=dd1f694c65de703a96488cc722e48d827a870ae1)
2º Passo
Limpar a base e retirar toda a electrónica que nela estiver (se tiver).
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2FUntitled-2-2.jpg&hash=ee6512dfbc8bb6863791fee72114913c01f32a05)
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2FUntitled-4-2.jpg&hash=856ce73091f2dfd9aba0cfceeaf881677a68cfb2)
3º Passo
Colocar o material nao condutor na base, colocar o arduino em cima e agarrar tudo isto com o parafuso á base.
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2FUntitled-11.jpg&hash=24fbbca9ed9ccc7c8585e3d149e63e813426e030)
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.
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2FUntitled-13.jpg&hash=c94a1ee237cb92a035de674b3ee1df282238479f)
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 (http://blushingboy.net/p/motorShieldV3/downloads/1/get/)
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".
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2FUntitled-14.jpg&hash=bf88ead49c1e0c73f1b1ebd5b83cba490c11969b)
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2FUntitled-15.jpg&hash=cf4eb7fc3fd13a310b5ea5afcbe4df9c875516b0)
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2FUntitled-16.jpg&hash=5c0a40ff3d14a8d5120dd203a75a1862fdce2637)
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2FUntitled-17.jpg&hash=2cdc21520de38cc2d207beefb95cb27a6db4605b)
7º Passo
Vamos agora proceder ao Upload do codigo para o arduino.
- Primeiro ligamos o USB ao Arduino
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2FUntitled-19.jpg&hash=963d224c678526545345955dd26202a45bfa84fc)
- Depois ao PC
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2FUntitled-18.jpg&hash=9666344c9e0e0ff9e15cb9a992543da8a83a50cb)
- Depois é so carregar no botao de Upload
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2Fupload.jpg&hash=7757b0bf7cd3f251e5dbf95e77ced36d3c63a23f)
- E por fim esperar que no canto inferior esquerdo apareça a mensagem "Done Uploading"
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2Fdu.jpg&hash=0feb41d54806fab86bd3b10b2ffa204c0f19a141)
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.