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.
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:
- Arduino Uno R4 Minima
- Sensor de Velocidade Encoder
- Motor DC
- Mini Driver Motor Ponte H L298n
- Potenciômetro Linear 100K
- Jumpers Macho-Fêmea
- Cabo USB tipo C
- Protoboard
- Disco Encoder
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.
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:
- 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
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:
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.