Motor Shield Arduíno

Informação do site: https://store.arduino.cc/arduino-motor-shield-rev3

Descrição

O Arduino Motor Shield é baseado no L298, que é um driver de ponte dupla projetado para acionar cargas indutivas, como relés, solenóides, motores de corrente contínua e motores de passo. Ele permite acionar dois motores CC com uma placa de Arduino, controlando a velocidade e a direção de cada motor de forma independente. Também é possível medir a corrente absorvida por cada motor, entre outras características.

Características Técnicas

Alimentação

O Arduino Motor Shield deve ser alimentado apenas por uma fonte de alimentação externa. Porque o L298 IC montado na blindagem tem duas conexões de energia separadas, uma para a lógica e outra para o driver de alimentação do motor. A corrente necessária do motor geralmente excede o valor máxima de corrente USB. A energia externa (não USB) pode ser proveniente de um adaptador AC / DC ou de uma bateria. Para evitar possíveis danos na placa Arduino na qual o shield está montado, recomenda-se uma fonte de alimentação externa que forneça uma tensão entre 7 e 12V. Se o motor exigir mais de 9V, recomendamos que separe os circuitos de alimentação do shield e da placa Arduino. na qual o shield está montado. Isso é possível cortando o jumper “Vin Connect” colocado no lado de trás da blindagem. O limite máximo para o Vin, nos terminais de parafuso, é de 18V. Os pinos de energia são os seguintes:

Vin no bloco de terminais de parafuso, é a tensão de entrada para o motor conectado ao shield. Uma fonte de alimentação externa ligada a este pino também fornece energia para a placa Arduino na qual está montado. Ao cortar o jumper “Vin Connect”, torna a linha de alimentação dedicada aos motores.
GND permite ligar no bloco de terminais de parafuso o potencial negativo.
O shield pode fornecer 2 amperes por canal, num total de 4 amperes. A Entrada e Saída deste shield possui dois canais separados, chamados A e B, que usam 4 dos pinos do Arduino para acionar ou detectar o motor. No total, existem 8 pinos em uso neste shield. Pode usar-se cada canal separadamente para acionar dois motores CC ou combiná-los para acionar um motor bipolar de passo. Os pinos do shield, para cada canal, devem ser considerados de acordo com a tabela seguinte (estes pins embora pareçam livres não podem ser utilizados para mais nenhuma função):

Ligação e controlo de motores DC

Pode acionar-se dois motores DC ligando os dois condutores de cada um aos terminais de parafuso (+) e (-) em cada canal A e B. Desta forma, pode controlar-se a direção ajustando HIGH ou LOW dos pinos de DIR A e DIR B pinos, para controlar a velocidade, apenas é preciso controlar os valores do ciclo de serviço PWM A e PWM B (entre 0 e 255). Os pinos de travagem, Brake A e Brake B, se forem colocados em HIGH, param os motores de CC. Para medir a corrente que passa pelos motores de CC em cada canal há uma tensão proporcional à corrente a medir, que pode ser lida nas entradas analógicas A0 e A1l, através da função analogRead (). Estas são calibradas para 3,3V quando cada canal estiver a fornecer uma corrente máxima de 2A.

Esquema de ligação

Programa de teste

Link +

/* Teste com o Arduino motor shield 
 * Programa realizado pelo Professor Ramiro Martins 
 * Clube de Robotica da ESGC
 * Visite o nosso site em: https://cluberobotica.wordpress.com/
 * Tambem estamos no Facebook: https://www.facebook.com/clubederoboticaesgc/
 */

//Declaracao de variaveis
const int 
  PWM_A   = 3, // A partir do pin 3 pode-se controlar a velocidade do motor A 
  PWM_B   = 11, // A partir do pin 11 pode-se controlar a velocidade do motor B
  DIR_A   = 12, // A partir do pin 12 pode-se controlar o motor A roda para afrente ou para tras
  DIR_B   = 13, // A partir do pin 13 pode-se controlar o motor B roda para afrente ou para tras
  BRAKE_A = 9, // A partir do pin 9 pode-se parar o motor A
  BRAKE_B = 8; // A partir do pin 8 pode-se parar o motor B

void setup() {
  
 // Configuracao do circuito de saida A, que liga o motor A 
      pinMode(BRAKE_A, OUTPUT);  // pin de paragem do circuito A
      pinMode(DIR_A, OUTPUT);    // pin de direcao do circuito A

 // Configuracao do circuito de saida A, que liga o motor B 
      pinMode(BRAKE_B, OUTPUT);  // pin de paragem do circuito B
      pinMode(DIR_B, OUTPUT);    // pin de direcao do circuito B
 // Open Serial communication
      Serial.begin(9600);
}

void loop() {
  
 // Rotinas do programa para teste dos motores:
  
  // Robot roda para a frente
      digitalWrite(BRAKE_A, LOW);  // funcao de paragem a zero, paragem do motor A desligada 
      digitalWrite(DIR_A, HIGH);   // funcao para andar a um, o motor A roda para a frente 
      analogWrite(PWM_A, 150);     // velocidade do motor A esta definida a 150, 255 valor max.
      digitalWrite(BRAKE_B, LOW);  // funcao de paragem a zero, paragem do motor B desligada 
      digitalWrite(DIR_B, HIGH);   // funcao para andar a um, o motor B roda para a frente 
      analogWrite(PWM_B, 150);     // velocidade do motor B esta definida a 150, 255 valor max.
      Serial.println("Estou a andar para a frente");     
      delay(10000);                // tempo de funcionamento 10 segundos
      analogWrite(PWM_A, 0);     // velocidade do motor A a zero, nao se fornece energia
      analogWrite(PWM_B, 0);     // velocidade do motor B a zero, nao se fornece energia     
      delay(500);                // tempo de funcionamento 0.5 segundos
      
  // O Robot roda para tras
      digitalWrite(BRAKE_A, LOW);  // funcao de paragem a zero, paragem do motor A desligada 
      digitalWrite(DIR_A, LOW);    // funcao para andar a zero, o motor A roda para tras
      analogWrite(PWM_A, 150);     // velocidade do motor A esta definida a 150, 255 valor max.
      digitalWrite(BRAKE_B, LOW);  // funcao de paragem a zero, paragem do motor B desligada
      digitalWrite(DIR_B, LOW);    // funcao para andar a zero, o motor B roda para tras
      analogWrite(PWM_B, 150);     // velocidade do motor A esta definida a 150, 255 valor max.
      Serial.println("Estou a andar para tras"); 
      delay(10000);                // tempo de funcionamento 10 segundos
  
  // O Robot para 5 segundos porque a energia fornecida ao motor A e B e zero
      analogWrite(PWM_A, 0);       // velocidade do motor A a zero, nao se fornece energia
      analogWrite(PWM_B, 0);       // velocidade do motor B a zero, nao se fornece energia
      Serial.println("Estou parado"); 
      delay(5000);                // tempo de funcionamento 5 segundos

  //Robot roda para a direita durante 10 segundos, parando o motor da direita e rodando o da esquerda
      digitalWrite(BRAKE_A, LOW);  // funcao de paragem a zero, paragem do motor A desligada 
      digitalWrite(DIR_A, HIGH);   // funcao para andar a um, o motor A roda para a frente 
      analogWrite(PWM_A, 100);      // velocidade do motor A a 100, 255 valor max.
      analogWrite(PWM_B, 0);       // velocidade do motor B a zero, fica parado
      Serial.println("Estou a andar para a direita");
      delay(10000);                // tempo de funcionamento 10 segundos 
        
  //Rodar para a esquerda durante 10 segundos, parando um motor da esquerda e rodando o da direita
      digitalWrite(BRAKE_B, LOW);  // funcao de paragem a zero, paragem do motor B desligada 
      digitalWrite(DIR_B, HIGH);   // funcao para andar a um, o motor B roda para a frente 
      analogWrite(PWM_B, 100);      // velocidade do motor B a 100, 255 valor max.
      analogWrite(PWM_A, 0);       // velocidade do motor A a zero, fica parado
      Serial.println("Estou a andar para a esquerda"); 
      delay(10000);                // tempo de funcionamento 10 segundos   
 
  //Rodar para a esquerda e direita aos ss 5 segundos
     for (int i=0; i<10; i++){
      digitalWrite(BRAKE_B, LOW);  // funcao de paragem a zero, paragem do motor B desligada 
      digitalWrite(DIR_B, HIGH);   // funcao para andar a um, o motor B roda para a frente 
      analogWrite(PWM_B, 150);      // velocidade do motor B a 150, 255 valor max.
      analogWrite(PWM_A, 50);       // velocidade do motor A a 50, fica parado
      Serial.println("Estou a andar para a direita");      
      delay(5000);                // tempo de funcionamento 5 segundos  
      digitalWrite(BRAKE_A, LOW);  // funcao de paragem a zero, paragem do motor A desligada 
      digitalWrite(DIR_A, HIGH);   // funcao para andar a um, o motor A roda para a frente 
      analogWrite(PWM_A, 150);      // velocidade do motor A a 150, 255 valor max.
      analogWrite(PWM_B, 50);       // velocidade do motor B a 50, fica parado
      Serial.println("Estou a andar para a esquerda");    
      delay(5000);                // tempo de funcionamento 5 segundos    
      }
}  // Fim do programa de testes dos movimentos dos motores

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.