AULA 8-1 - Microcontroladores - Eng
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 shield MH Electronics Ponte H;
- 1 motor de passo 28BYJ-48 5v
- 1 motor de passo tipo NEMA 17;
- 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:
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.
O servo mais comum utilizado no mundo maker é o Micro Servo TowerPro 9g SG90.
É um servo de alta qualidade e excelente para as suas necessidades seja em aeromodelismo ou em projetos mecatrônicos.
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
Exemplo 1 - Circuito simples, sem carga
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.
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); //Indica qual porta do Arduino será usada para acionar o Servo
Serial.begin(9600);
s.write(0); // Inicia motor posição zero - método write(x) rotaciona o eixo para o ângulo x
}
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);
}
}
Exemplo 2 - Circuito simples, controlado por potenciômetro
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.
// Programa: Controlando um servo motor com potenciômetro // Fonte: MakerHero #include <Servo.h> // Inclui a biblioteca Servo para controlar servos Servo meuServo; // Cria um objeto Servo para controlar o servo motor int pos; // Variável para armazenar a posição do servo motor int potPin = A0; // Pino analógico onde o potenciômetro está conectado int val; // Variável para armazenar o valor lido do potenciômetro void setup() { meuServo.attach(6); // Associa o servo motor ao pino digital 6 do Arduino meuServo.write(0); // Define a posição inicial do servo motor para 0 graus } void loop() { val = analogRead(potPin); // Lê o valor do potenciômetro (0 a 1023) pos = map(val, 0, 1023, 0, 180); // Mapeia o valor do potenciômetro para a faixa de 0 a 180 graus meuServo.write(pos); // Define a posição do servo motor delay(15); // Aguarda um curto intervalo para estabilizar o movimento do servo }
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:
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.
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.
Os motores de passo também permitem o controle da posição do eixo, assim como nos servomotores.
Veja uma comparação entre os dois tipos de motores aqui: Comparação entre motores de passo e servos. Motores de passo são bastante usados 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.
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);
}
| Ponte H | AULA 8 - Servomotores | Projeto 1 >> |
|---|







