Sensor de Velocidade e Arduino: Medindo a Rotação de Motor DC
Medindo Rotação de Motor DC com Sensor de Velocidade Arduino

Medindo a rotação de Motor DC com Sensor de velocidade e Arduino Deixe um comentário

Neste tutorial, vamos mostrar como medir a velocidade de um motor DC utilizando um sensor de velocidade e um Arduino. Vamos explicar os componentes necessários, como funciona o sensor de velocidade, e suas principais aplicações.

sensor de velocidade Arduino

Objetivos

O objetivo principal deste projeto é implementar um sensor de velocidade encoder com Arduino para monitorar a rotação do motor. Dessa forma, iremos contar os pulsos gerados pelo encoder e calcular a velocidade do motor em rotações por minuto (RPM). Além disso, neste tutorial você irá aprender:

  • Controlar a Velocidade do Motor DC: Utilizar um potenciômetro para ajustar a velocidade do motor DC de maneira precisa e eficiente. Converter o valor analógico lido do potenciômetro em um valor PWM, que será usado para controlar a potência enviada ao motor.
  • Fornecer Feedback em Tempo Real: Exibir os valores do potenciômetro, PWM e RPM no monitor serial para monitoramento e ajuste em tempo real. Garantir que o sistema responda rapidamente a mudanças no valor do potenciômetro, ajustando a velocidade do motor de forma dinâmica.

Materiais Necessários

Para seguir com este tutorial, você irá precisar dos seguintes componentes:

Materiais Necessários

Além dos itens mencionados acima, você também precisará ter a Arduino IDE instalada em seu computador ou uma conta cadastrada na Arduino Cloud.

Como funciona o Sensor de Velocidade?

O sensor de velocidade é composto por dois componentes principais: o MOCH22A e o LM393.

Sensor de Velocidade Arduino

O MOCH22A é um sensor optoeletrônico que consiste em um emissor de luz (LED infravermelho) e um detector de luz (fototransistor) posicionados em frente um do outro com uma abertura entre eles. O funcionamento segue os seguintes passos:

  • Emissor de Luz: O LED infravermelho emite luz continuamente.
  • Detecção: Quando uma abertura no disco passa pelo caminho da luz, a luz do LED atinge o fototransistor, que gera um sinal elétrico.
  • Sinal de Interrupção: Quando uma parte opaca do disco bloqueia a luz, o sinal do fototransistor é interrompido.

Este processo gera um sinal pulsante conforme o disco gira.

Já o LM393 é um comparador de tensão que converte o sinal analógico do fototransistor em um sinal digital limpo. Ele compara a tensão do sinal do fototransistor com uma tensão de referência.

Dessa forma, o funcionamento do sensor de velocidade segue o seguinte princípio:

princípio do sensor

  • Geração de Pulsos: Conforme o disco do encoder gira, as aberturas e partes opacas do disco passam pelo caminho da luz do MOCH22A, gerando um sinal pulsante no fototransistor.
  • Sinal Analógico para Digital: O LM393 converte o sinal pulsante em um sinal digital limpo de pulsos.
  • Medição de Velocidade: O número de pulsos por unidade de tempo é contado para determinar a velocidade do movimento rotacional do disco. A frequência dos pulsos está diretamente relacionada à velocidade de rotação do eixo ao qual o disco está acoplado.

Para que serve um Sensor de Velocidade?

Um sensor de velocidade para Arduino é um dispositivo usado para medir a velocidade de um objeto em movimento, como um motor ou uma roda. Esses sensores são essenciais em várias aplicações de controle e automação devido à necessidade de monitorar e ajustar a velocidade para otimizar desempenho, segurança e eficiência. 

Aqui estão algumas das principais finalidades e aplicações de um sensor de velocidade:

  • Controle de Motores: Permite medir a velocidade de rotação de motores DC, motores de passo e outros tipos de motores. Ajuda a ajustar a velocidade dos motores em tempo real, garantindo que operem dentro dos parâmetros desejados.
  • Automação Industrial: Usado para monitorar e controlar a velocidade de maquinários e sistemas automatizados. Essencial para processos que requerem precisão e consistência, como linhas de produção e sistemas de transporte.
  • Robótica: Crucial para controlar a velocidade e a movimentação precisa de robôs. Garante que robôs executem tarefas de forma coordenada e eficiente.
  • Veículos e Velocímetros: Utilizado em sistemas de medição de velocidade de veículos, exibindo essa informação no painel para o motorista. Integrado em sistemas de controle de tração e estabilidade para melhorar a segurança do veículo.
  • Sistemas de Navegação e Controle de Voo: Empregado em aeronaves para medir a velocidade e ajudar na navegação e controle de voo. Importante para evitar situações de perda de sustentação (stall) e para manter a estabilidade do voo.
  • Turbinas Eólicas e Energia Renovável: Monitora a velocidade de rotação das hélices das turbinas eólicas. Permite ajustes para maximizar a geração de energia e proteger o equipamento em condições adversas de vento. Especificamente, um sensor de velocidade do vento Arduino pode ser usado para medir a velocidade do vento, fornecendo dados essenciais para otimizar a operação das turbinas e aumentar a eficiência na geração de energia.
  • Transporte Ferroviário: Utilizado para monitorar e controlar a velocidade de trens. Garante operações seguras e eficientes, evitando acidentes e melhorando o desempenho.

Em resumo, um sensor de velocidade para Arduino é um componente versátil e indispensável em diversos projetos e aplicações onde a medição e o controle preciso da velocidade são críticos. Ele permite não apenas a coleta de dados de velocidade, mas também a implementação de feedback em tempo real para ajustar e otimizar sistemas de acordo com as necessidades específicas.

Como conectar o Sensor de Velocidade ao Arduino?

O sensor de velocidade possui quatro pinos principais: VCC, GND, D0 e AO Veja a descrição de cada um:

  • VCC: Alimentação do sensor (5V).
  • GND: Conexão de terra.
  • D0: Saída digital
  • A0: Saída analógica

Para conectar o sensor de velocidade ao Arduino, siga o passo a passo abaixo:

  • Conecte o VCC do sensor de velocidade ao 5V do Arduino
  • Conecte o GND do sensor de velocidade ao GND do Arduino
  • Conecte a saída digital D0 ao Pino digital D2 do Arduino

Como conectar o Sensor de Velocidade

O código abaixo configura o pino digital 2 como entrada para ler os pulsos do sensor de velocidade e calcula a velocidade com base na contagem de pulsos.

// Definições dos pinos
const int digitalPin = 2;  // Pino digital do sensor conectado ao pino digital 2 do Arduino

volatile int pulseCount = 0;  // Contador de pulsos

// Função de interrupção para contar os pulsos
void countPulse() {
  pulseCount++;
}

void setup() {
  Serial.begin(9600);
  pinMode(digitalPin, INPUT);
  attachInterrupt(digitalPinToInterrupt(digitalPin), countPulse, RISING);  
// Configura interrupção no pino do sensor
}

void loop() {
  noInterrupts();  // Desabilita interrupções temporariamente
  int pulses = pulseCount;  // Copia o valor dos pulsos
  pulseCount = 0;  // Reseta o contador de pulsos
  interrupts();  // Habilita interrupções novamente

  // Calcula a velocidade (exemplo simples, ajuste conforme sua aplicação)
  float speed = pulses;  // Aqui você pode converter para RPM ou outra unidade

  Serial.print("Velocidade: ");
  Serial.print(speed);
  Serial.println(" pulsos por segundo");

  delay(1000);  // Aguarda 1 segundo
}

Rotação de um motor DC com sensor de velocidade e Arduino: Circuito

O esquema de ligações para medir a rotação de um motor DC com sensor de velocidade e Arduino está representado abaixo:

Circuito de Rotação de um motor DC com sensor de velocidade

As ligações realizadas são as seguintes:

Sensor de Velocidade <-> Arduino Uno R4 Minima
VCC<-> 5V
GND <-> GND
D0 <-> D2

Motor DC <-> Mini Driver de Motor
Pino 1 <-> Motor A+
Pino 2 <-> Motor A-

Mini Driver de Motor <-> Arduino Uno R4 Minima
“+” <-> 5V
“-” <-> GND
IN1 <-> D3
IN2 <-> D4

Potenciômetro 100K <-> Arduino Uno R4 Minima
Pino 1 <-> 5V
Pino 2 <-> A0
Pino 3 <-> GND

Rotação de um motor DC com sensor de velocidade e Arduino: Código

para medir a rotação de um motor DC com sensor de velocidade e Arduino, carregue o código abaixo para a placa:

// Programa: Medindo a rotação de um motor DC com sensor de velocidade e Arduino
// Autor: Rosana Guse

// Definição dos pinos do Arduino
#define POT A0       // Pino analógico para o potenciômetro
#define ENCODER 2    // Pino digital para o sensor de velocidade (encoder)
#define IN1 3        // Pino digital para controle do motor (entrada 1)
#define IN2 4        // Pino digital para controle do motor (entrada 2)

// Variável para contar os pulsos do encoder
volatile int pulseCount = 0;
// Variável para armazenar o tempo anterior para cálculo do intervalo
unsigned long previousMillis = 0;
// Intervalo de tempo para cálculo do RPM (1 segundo)
const long interval = 1000;  

// Função de interrupção para contar os pulsos do encoder
void countPulse() {
  pulseCount++;
}

void setup() {
  // Inicializa a comunicação serial para depuração
  Serial.begin(9600);
  
  // Configura os pinos como entrada ou saída
  pinMode(POT, INPUT);
  pinMode(ENCODER, INPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  
  // Configura a interrupção no pino do encoder para contar os pulsos na borda de subida
  attachInterrupt(digitalPinToInterrupt(ENCODER), countPulse, RISING);
}

void loop() {
  // Lê o valor do potenciômetro
  int valor = analogRead(POT);
  // Mapeia o valor lido (0 a 1023) para o valor PWM (0 a 255)
  int pwm = map(valor, 0, 1023, 0, 255);

  // Envia o valor PWM para o motor
  analogWrite(IN1, pwm);
  // Define o outro pino do motor como LOW para controlar a direção
  digitalWrite(IN2, LOW);

  // Verifica se já passou o intervalo de 1 segundo
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;  // Atualiza o tempo anterior

    // Desabilita temporariamente as interrupções para copiar o valor dos pulsos
    noInterrupts();
    int pulses = pulseCount;
    pulseCount = 0;  // Reseta o contador de pulsos
    interrupts();  // Habilita as interrupções novamente

    // Calcula o RPM (rotações por minuto)
    float rpm = (pulses / 16.0) * 60.0;
    
    // Envia os valores lidos e calculados para o monitor serial
    Serial.print("pwm: "); 
    Serial.println(pwm);
    Serial.print("RPM: ");
    Serial.println(rpm);
  }

  // Pequeno delay para evitar travamentos
  delay(10);
}

Rotação de um motor DC com sensor de velocidade e Arduino: Funcionamento

Este projeto controla a velocidade de um motor DC utilizando um potenciômetro e mede a velocidade do motor em RPM (rotações por minuto) usando um sensor de velocidade. A leitura do potenciômetro ajusta a velocidade do motor, e o encoder fornece feedback sobre a velocidade atual do motor.

 

O valor lido do potenciômetro ajusta a velocidade do motor. O valor analógico lido do potenciômetro é convertido em um valor PWM. Esse valor PWM é usado para controlar a potência enviada ao motor, ajustando sua velocidade.

O encoder gera pulsos conforme o motor gira. Esses pulsos são contados por uma interrupção configurada no pino do encoder. A cada segundo, o número de pulsos é usado para calcular a velocidade do motor em RPM. O cálculo leva em consideração o número de pulsos por rotação do disco do encoder (16 pulsos por rotação). Este projeto fornece um exemplo prático de controle e feedback em sistemas de automação, onde a velocidade de um motor precisa ser ajustada e monitorada com precisão.


Se você tiver dúvidas, sugestões ou experiências para compartilhar, fique a vontade para deixar um comentário abaixo. E para não perder nenhum conteúdo como este, não deixe de nos seguir no Instagram.

Faça seu comentário

Acesse sua conta e participe