AULA 8-1 - Microcontroladores - Eng

De IFSC
Revisão de 13h58min de 9 de outubro de 2025 por imported>Fargoud (→‎MATERIAIS)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
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 shield MH Electronics Ponte H;
  • 1 motor de passo 28BYJ-48 5v
  • 1 motor de passo tipo NEMA 17;
  • 1 servo motor;
  • 1 potenciômetro de 10k;
  • 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

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.

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);  //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);
    Serial.println(pos);
    delay(15);
  }
  delay(1000);
  for(pos = 90; pos >= 0; pos--)
  {
    s.write(pos);
    Serial.println(pos);
    delay(15);
  }
}

Exemplo 2 - Circuito simples, controlado por potenciômetro

MIC2servo3-3.png


// 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() {
    Serial.begin(9600);
    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)
    Serial.println(val);
    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.

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

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.


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 >>