11/04/2013
Adquira estes componentes na Loja do Lab de Garagem
Olá Garagistas! No tutorial de hoje iremos utilizar o Monster Motor Shield para o controle de um Motor DC 12V que está ligado a uma roda onde iremos controlar o sentido e a velocidade de rotação.
- Lista de Materiais:
1. Funcionamento
1.1) PWM
A sigla PWM é uma abreviação para Pulse Width Modulation ou Modulação por Largura de Pulso. Com essa técnica é possível controlar a velocidade dos motores, mantendo o torque ainda que em baixas velocidades, o que garante partidas suaves mesmo quando há uma carga maior sobre os motores, aspectos que caracterizam o controle PWM como ideal para aplicações em robótica.
O controle de velocidade de nosso motor será controlado por um PWM que pode ser definido com um valor entre "0" e "255", onde "0" indica que o motor esta parado e "255" que o motor esta em sua velocidade total.
1.2) Hardware Monster Motor Shield
PinA2 - Pino Analógico 2: Sensor de Corrente para Motor 0 via Hardware >> //cspin[0]
PinA3 - Pino Analógico 3: Sensor de Corrente para Motor 1 via Hardware >> //cspin[1]
OBS: Para definições de valores de corrente limite (CS_THRESHOLD) em seu projeto, consultar o Datasheet do fabricante.
PinD7 (D7) - Pino Digital 7: Pino para controle do sentido Horário do Motor 0 (A1) >> // inApin[0]
PinD8 (D8) - Pino Digital 8: Pino para controle do sentido Anti-Horário do Motor 0 (B1) >> // inBpin[0]
PinD4 (D4) - Pino Digital 4: Pino para controle do sentido Horário do Motor 1 (A2) >> // inApin[1]
PinD9 (D9) - Pino Digital 9: Pino para controle do sentido Anti-Horário do Motor 1 (B2) >> // inBpin[1]
PinD5 (D5) - Pino Digital 5: Pino para PWM Motor 0 // pwmpin[0]
PinD6 (D6) - Pino Digital 6: Pino para PWM Motor 1 // pwmpin[1]
- Tabelas da Verdade:
1.3) Monster Shield Exemplo
- O Serial Monitor será utilizado para acompanhar o aumento de velocidade em PWM do motor e o travamento do mesmo se ocorrer.
- O LED e a resistência entre os Pinos 13 e GND são utilizados no exemplo para indicar que o motor travou.
- A definição "#define CS_THRESHOLD" na quinta linha do programa serve como proteção para o circuito, onde no mesmo você define um valor máximo de corrente antes de o programa desligar seu motor. Pois, por excesso de peso, ou se por qualquer outro motivo o motor travar, o consumo de corrente aumentará, e com essa definição você protege seu circuito, fazendo com que nenhum de seus componentes queimem se a corrente aumentar muito.
- OBS: O valor definido nesse comando não é dado em A (Ampere), o valor é uma amostragem que o circuito faz via hardware, conforme a figura abaixo:
- OBS: Para a definição de corrente usada no comando, consulte o Datasheet.
- A função para controle do nosso motor é "motorGo(motor, sentido, pwm);" onde:
motor: É a saída do motor que iremos utilizar: "0" (A1:B1) e/ou "1" (A2:B2)
sentido: "CW" para sentido horário de rotação e "CCW" para sentido anti-horário de rotação
pwm: Valor entre "0" e "255" para controle de velocidade do motor
Exemplo: "motorGo(0, CW, 255);"
No exemplo, o motor 1 irá girar no sentido horário em sua velocidade máxima.
2. A Montagem
Esquema da Montagem:
2.1) Conecte seu Monster Motor Shield ao Arduino
2.2) Conecte o LED com a resitência entre o pino 13 e o GND que será utilizado no exemplo para indicar que o motor foi travado.
2.3) Conecte o motor nos pinos A1:B1 do Shield
2.4) Conecte a fonte 12V nos pinos + e - do Monster Shield
2.5) Circuito Montado
3. O Sketch
#define BRAKEVCC 0
#define CW 1
#define CCW 2
#define BRAKEGND 3
#define CS_THRESHOLD 15 // Definição da corrente de segurança (Consulte: "1.3) Monster Shield Exemplo").
int inApin[2] = {7, 4}; // INA: Sentido Horário Motor0 e Motor1 (Consulte:"1.2) Hardware Monster Motor Shield").
int inBpin[2] = {8, 9}; // INB: Sentido Anti-Horário Motor0 e Motor1 (Consulte: "1.2) Hardware Monster Motor Shield").
int pwmpin[2] = {5, 6}; // Entrada do PWM
int cspin[2] = {2, 3}; // Entrada do Sensor de Corrente
int statpin = 13;
int i=0;;
void setup() // Faz as configuração para a utilização das funções no Sketch
{
Serial.begin(9600); // Iniciar a serial para fazer o monitoramento
pinMode(statpin, OUTPUT);
for (int i=0; i<2; i++)
{
pinMode(inApin[i], OUTPUT);
pinMode(inBpin[i], OUTPUT);
pinMode(pwmpin[i], OUTPUT);
}
for (int i=0; i<2; i++)
{
digitalWrite(inApin[i], LOW);
digitalWrite(inBpin[i], LOW);
}
}
void loop() // Programa roda dentro do loop
{
while(i<255)
{
motorGo(0, CW, i); // Aumento do o PWM do motor até 255
delay(50); // Se o motor travar ele desliga o motor e
i++; // Reinicia o processo de aumento do PWM
if (analogRead(cspin[0]) > CS_THRESHOLD)
motorOff(0);
Serial.println(i);
digitalWrite(statpin, LOW);
}
i=1;
while(i!=0)
{ // Mantém o PWM em 255 (Velocidade Máxima do Motor)
motorGo(0, CW, 255); // Se o motor travar ele desliga o motor e
if (analogRead(cspin[0]) > CS_THRESHOLD) // Reinicia o processo de aumento do PWM
motorOff(0);
}
}
void motorOff(int motor) //Função para desligar o motor se o mesmo travar
{
for (int i=0; i<2; i++)
{
digitalWrite(inApin[i], LOW);
digitalWrite(inBpin[i], LOW);
}
analogWrite(pwmpin[motor], 0);
i=0;
digitalWrite(13, HIGH);
Serial.println("Motor Travado");
delay(1000);
}
void motorGo(uint8_t motor, uint8_t direct, uint8_t pwm) //Função que controla as variáveis: motor(0 ou 1), sentido (cw ou ccw) e pwm (entra 0 e 255);
{
if (motor <= 1)
{
if (direct <=4)
{
if (direct <=1)
digitalWrite(inApin[motor], HIGH);
else
digitalWrite(inApin[motor], LOW);
if ((direct==0)||(direct==2))
digitalWrite(inBpin[motor], HIGH);
else
digitalWrite(inBpin[motor], LOW);
analogWrite(pwmpin[motor], pwm);
}
}
}
É isso ai Garagistas! Espero que tenham gostado desde tutorial. Até a Próxima!
Referências:
http://www.pnca.com.br/index.php?option=com_content&view=articl...
http://en.wikiversity.org/wiki/Arduino/MonsterMotorShield
http://en.wikiversity.org/wiki/Arduino/MonsterMotorShield/UnoCode
http://www.labdegaragem.org/loja/index.php/31-shields/monster-moto-...
Comentar
ok Wagner mas como sou meio leigo em Arduíno pode me detalhar o esquema elétrico e código fonte para este tipo de circuito, serei grato, obrigado
Valter, certeza que dá, é só atribuir 2 pinos digitais pra serem os "botoes do fliperama", e alterar o codigo pra quando cada um deles for high, alterar a rotação do motor correspondente...
parabens pelo cirduito mas minha duvida é saber se da para fazer com este Monster Moto Shield, fazer o motor mover para direita e para esquerda com um controle de fliperama ligado ao Arduíno e este movimento de esquerda e direita que seria uma reversão começar do 0 a 255 quando da o toque no controle, obrigado
Muito bacana... Esse driver parece bacana, estou pensando em utilizar dele no lugar do Wild Thumper Controller. Gostei do seu sketch pra fazer uma progressao de PWM suave :D.
Eu nao entendi esse pino:
cspin[0]
pra ler a corrente...
o pino 2 ja esta, via hardware, ligado a leitura de corrente?
outra coisa:
int inApin[2] = {7, 4}; // INA: Entrada do Sentido Horário
int inBpin[2] = {8, 9}; // INB: Entrada do Sentido Anti-Horário
O comentário parece estar errado... inApin seriam os pinos do motor A e inBpin os pinos do motor B, nao tem a ver com o sentido em que estao rodando nessa definiçao, vc define isso depois, na execuçao do codigo, mudando os "High"/"Low" pra mudar a direção deles ;)
sobre o "motor travar", tambem nao tenho certeza se isso esta correto, porque tem motores de stall em 6A, por exemplo, se vc definiu no codigo que a corrente maxima é 15A, o motor ja vai estar travado ha bastante tempo e talvez nem execute o codigo de segurança e frite o motor(eu ja queimei 2 motores no WTC por ter definido uma corrente de corte mais alta que a corrente em stall da soma dos motores)
Uma dica de hardware: sobre os dois CIs principais da pra colocar dissipadores (infelizmente nao posso postar o link aqui), o que faz voce poder aumentar a corrente de pra mais de 20A sem problema.
No mais, excelente tutorial, serve demais pra iniciar a brincadeira com esse driver
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!
Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)