AULA 8-1 - Microcontroladores - Eng

De IFSC
Revisão de 16h59min de 11 de abril de 2024 por imported>Fargoud (→‎Código 2:)
Ir para navegação Ir para pesquisar

<< Página do curso

MATERIAIS

Por aluno:

  • 1 placa Arduino Uno
  • cabo de comunicação/alimentação USB
  • 1 computador PC com software Arduino IDE instalado
  • 1 proto shield para montagens
  • 1 módulo Driver motor com Ponte H;
  • 1 shield MH Electronics Ponte H;
  • 1 motor de passo;
  • 1 servo motor;
  • cabos fêmea-macho

METODOLOGIA

  • Exposição dialogada dos conteúdos disponíveis, em projetor multimídia.
  • Navegação assistida em outros sites e portais, de conteúdos relacionados.
  • Montagens práticas e desenvolvimento em computador de aplicativos.
  • Testes de verificação e validação.


O Servomotor

(Fonte: "Como usar servomotor com arduino" - Fazedores.com)

Um Servo Motor comum é um motor que nos possibilita o controle de sua posição.

Um servo motor é um equipamento eletromecânico que possui um encoder e um controlador acoplado:

MIC2servo1.png

Diferentemente de motores tradicionais, como de corrente contínua, o servo motor apresenta movimento rotativo proporcional a um comando, de forma a atualizar sua posição.

Ao invés de girar continuamente, como os motores de corrente contínua, o servo, ao receber um comando, gira até a posição especificada pelo mesmo. Ou seja, o servo motor é um atuador rotativo para controle de posição, que atua com precisão e velocidade controlada em malha fechada.

Dentre as principais aplicações para servo motores, podemos destacar:

  • Aeromodelismo;
  • Automodelismo;
  • Nautimodelismo;
  • Robótica;
  • Automação de processos;
  • Controle de válvulas, etc.

MIC2servo2.png


O servo mais comum utilizado no mundo maker é o Micro Servo TowerPro 9g SG90.

MIC2servo1-1.png


É um servo de alta qualidade e excelente para as suas necessidades seja em aeromodelismo ou em projetos mecatrônicos.

MIC2servo2-1.png


Neste tutorial iremos mostrar os primeiros passos com esse servo e como fazer um programa em Arduino para controle do servo.


Então veja a seguir como usar Servo Motor com Arduino.


Especificações técnicas do Micro Servo 9g

  • Tensão de Operação: 3,0 – 7,2v
  • Velocidade: 0,12 seg/60Graus (4,8v) sem carga
  • Torque: 1,2 kg.cm (4,8v) e 1,6 kg.cm (6,0v)
  • Temperatura de Operação.: -30C ~ +60C
  • Dimensões.: 32x30x12 mm
  • Tipo de Engrenagem: Nylon
  • Tamanho cabo: 245 mm
  • Peso: 9g

Como usar servo motor com Arduino – ligação dos componentes

Conecte a alimentação do Micro Servo 9g ao Arduino. Fio Marrom com GND, Fio Vermelho com 5v e Fio Laranja na Porta Digital 6.

MIC2servo3.png

Programa Arduino Uno R3

#include <Servo.h>

#define SERVO 6 // Porta Digital 6 PWM

Servo s; // Variável Servo
int pos; // Posição Servo

void setup ()
{
  s.attach(SERVO);
  Serial.begin(9600);
  s.write(0); // Inicia motor posição zero
}

void loop()
{
  for(pos = 0; pos < 90; pos++)
  {
    s.write(pos);
    delay(15);
  }
  delay(1000);
  for(pos = 90; pos >= 0; pos--)
  {
    s.write(pos);
    delay(15);
  }
}

Shield Motor Drive L293D Ponte H

Como já vimos, a shield já vem com os slots prontos para conexão direta com o Arduino, prescindindo de toda fiação para as ligações do circuito:


MIC2shieldponteh3.png


MIC2shieldponteh4.png


MIC2shieldponteh8.png


A alimentação do Motor Shield Arduino obedece os limites de tensão estabelecidos pelo Driver L293D e por mais que seja um shield com contato direto no Arduino, a alimentação do Arduino normalmente não é suficiente para o funcionamento dos motores, por isto é necessária uma alimentação externa.

Através do esquema exibido abaixo, podemos observar o borne para para alimentação externa e como dito, este possui limite de alimentação de 4,5 a 36V, ao lado tem-se o jumper de seleção para fonte de alimentação. Quando esse jumper estiver inserido, a alimentação utilizada para os motores é o do próprio Arduino.

Se utilizarmos uma fonte externa é fundamental a retirada deste jumper.


MIC2shieldponteh2 2.png

Abaixo, vemos o esquema de ligação possível utilizando-se os 4 motores DC conectados ao Motor Shield Arduino, porém vale ressaltar que nestes casos a corrente máxima por porta pode ser de 600mA. Assim, ao utilizarmos as quatro portas teremos um total de 2,4A e a fonte de alimentação externa utilizada através dos Bornes deve suprir esta necessidade para o total desempenho dos motores (sem o jumper):

MIC2shieldponteh3 2-2.png


Especificações:
– Chip: 293D (Datasheet)
– Pode controlar 2 Servos.
– Tensão de saída: 4,5-16V
– Corrente de saída: 600mA por canal
– Até 4 motores DC bi-direcional com seleção individual de velocidades de 8 bits (cerca de 0,5% de resolução).
– Até 2 Motores de Passo (Unipolar ou Bipolar) com bobina unica, dupla ou passos interlaçados.
– 4 Pontes H: 0,6A por Ponte (1,2A de pico) com proteção térmica e diodos de proteção contra retro-alimentação.
– Resistores Pull Down mantem motores desativos durante a entrada de alimentação.
– Botão de Reset Arduino disponível no topo da placa.
– Terminais em bloco de 2 pinos e jumper para conexão de alimentação externa.

Acionamento servomotor, usando Motor Shield

O último projeto consiste em controlar um servo motor com o Motor Shield.


Abaixo, serão descritos o diagrama do projeto de acionamento do servo, utilizando-se a Motor shield, o código implementado e o resultado obtido.

MIC2motorshieldservo.png


Código

#include <Servo.h> 
Servo myservo;  // Cria servo objeto para controlar um servo
int pos = 0;  // Variável para guardar a posição do servo
void setup() 
{
  // Conecta o servo no pino 10 para o servo objeto
  myservo.attach(10);   
}
void loop() 
{
  // Aumenta o ângulo de 0 graus até 180 graus
  for(pos = 0; pos <= 180; pos += 1) 
  {
     myservo.write(pos);
     delay(15);
  }
  // Diminui o ângulo de 180 graus até 0 graus
  for(pos = 180; pos>=0; pos-=1)
  {
    myservo.write(pos);
     delay(15);
  }
}


Acionamento motor de passo, usando Motor Shield

O terceiro projeto consiste em controlar um motor de passo com o Motor Shield. Será utilizada um fonte externa de 5V.


MIC2Motorshieldmotorpasso.png

Motores de passo são ótimos para um controle mais preciso, por exemplo, em robótica, ou projetos CNC.

Este motor shield suporta até 2 motores de passo. A biblioteca funciona da mesma forma para motores uni, ou bipolares.

Para motores UNIPOLARES: para conectar o motor de passo, primeiro defina quais pinos serão conectados a qual bobina e quais pinos são os taps centrais. Se for um motor de 5 enrolamentos, então um pino será o tap central para ambas as bobinas. Os taps centrais deverão estar conectados juntos ao terminal GND da motor shield. Então, a bobina 1 deverá ser conectada a um born de motor (M1 ou M3) e a bobina 2, ao outro borne (M2 ou M4).


Para motores BIPOLARES: será igual ao anterior, exceto que não haverá um quinto enrolamento para se conectar ao terra. O código é exatamente o mesmo.

"Single" significa que uma única bobina foi ativada. "Double" significa que as 2 bobinas foram ativadas, para maior torque.

Código 1:

StepsPerRevolution indica quantos passos por volta o motor tem. Um motor de passo com 7,5 graus tem 360/7,5 = 48 passos.

#include <AFMotor.h>                      // Inclui a Biblioteca AFMotor.h
const int stepsPerRevolution = 48;        // Número de etapas por volta
AF_Stepper motor(stepsPerRevolution, 2);  // Define M3 e M4 como local de instalação (Se 1 -> M1 e M2)
void setup() {
   motor.setSpeed(100);                    // Define a velocidade do Motor
}
 
void loop() {
  motor.step(648, FORWARD, SINGLE);       // Movimenta o Motor para uma Direção
  motor.step(648, BACKWARD, SINGLE);      // Inverte a direção do Motor
  
  motor.step(648, FORWARD, MICROSTEP);    // Movimenta o Motor em uma Direção com passos suaves
  motor.step(648, BACKWARD, MICROSTEP);   // Inverte a direção do Motor
 }

Altere o parâmetro stepsPerRevolution de acordo com as especificações do seu motor antes de tentar o esboço. Por exemplo, para NEMA 17 defina-o para 200 e para 28BYJ-48 defina-o para 48.

A figura abaixo ilustra como seria a ligação da shield em um motor de passo tipo NEMA17.


MIC2MotorshieldmotorpassoNEMA.png

Código 2:

#include <AFMotor.h>
// Número de passos por rotação de saída
// Se preciso, mude esta especificação de acordo com seu motor
const int stepsPerRevolution = 200;
// Conecta o motor a porta #2 (M3 and M4)
AF_Stepper motor(stepsPerRevolution, 2);
void setup() {
  Serial.begin(9600);
  Serial.println("Teste do Motor de Passos!");
  motor.setSpeed(10);  // 10 rpm   
}
void loop() {
  Serial.println("Passo única da bobina");
  motor.step(100, FORWARD, SINGLE); 
  motor.step(100, BACKWARD, SINGLE); 
  Serial.println("Passo duplo da bobina");
  motor.step(100, FORWARD, DOUBLE); 
  motor.step(100, BACKWARD, DOUBLE);
  Serial.println("Passos intercalados da bobina");
  motor.step(100, FORWARD, INTERLEAVE); 
  motor.step(100, BACKWARD, INTERLEAVE); 
  Serial.println("Micropassos da bobina");
  motor.step(100, FORWARD, MICROSTEP); 
  motor.step(100, BACKWARD, MICROSTEP); 
}



<< Página do curso

Ponte H AULA 8 - Servomotores Projeto 1 >>