Controle de velocidade do motor DC usando Arduino e PWM
Conteudo
Controle de velocidade do motor DC usando Arduino e PWM
O controle de velocidade do motor DC com interface de PC é um projeto DIY fácil. Neste projeto, a velocidade do motor DC é controlada enviando o comando através do PC. O Arduino é conectado diretamente ao PC através do cabo USB e o comando é dado ao Arduino no monitor serial do IDE do Arduino.
O motor é conectado a um transistor, e a base do transistor é conectada ao pino PWM do Arduino e a velocidade do motor é variada de acordo com o sinal PWM vindo do Arduino.
Arduino DC Motor Control – Trabalhando
O Arduino está conectado ao PC por meio do cabo USB. Podemos enviar o comando para o PC no monitor serial. Podemos alterar a velocidade do motor de 0 para 9. Quando 0 é enviado pelo Monitor Serial, o motor funciona na velocidade mínima (ou seja, zero). Quando a velocidade é variada de 1 a 9, a velocidade aumenta, sendo o valor 9 definido como a velocidade máxima do motor.
Uma tecnologia de controlador de motor PWM DC é usada para controlar a velocidade. No PWM, o Arduino envia uma onda pulsante semelhante ao modo astável do IC do temporizador 555.
Controle de velocidade PWM (modulação por largura de pulso)
Microcontrolador e Arduino são dispositivos digitais; eles não podem fornecer a saída analógica. O microcontrolador fornece Zero e UM como saída, onde ZERO é lógico LOW e ONE é lógico HIGH. Em nosso caso, estamos usando a versão de 5 volts do Arduino. Portanto, é lógico que ZERO é tensão zero e lógico ALTA é 5 tensão.
A saída digital é boa para dispositivos digitais, mas às vezes precisamos da saída analógica. Nesse caso, o PWM é muito útil. No PWM, o sinal de saída alterna entre zero e um, na frequência alta e fixa, conforme mostrado na figura abaixo.
Conforme mostrado na figura acima, o tempo de ON é “Ton” e o tempo de OFF é “Toff”. T é a soma de “Ton” e “Toff”, que é chamado de período de tempo. No conceito de PWM “T” não está variando e “Ton” e “Toff” podem variar, desta forma quando “Ton” aumenta “Toff” diminui e “Toff” aumenta quando “Ton” diminui proporcionalmente.
O ciclo de trabalho é a fração de um período de tempo. O ciclo de trabalho é comumente expresso como uma porcentagem ou proporção. Um período é o tempo que leva para um sinal completar um ciclo liga e desliga. Como uma fórmula, um ciclo de trabalho pode ser expresso como:
CICLO DE SERVIÇO = (Ton ÷ T) x100%
Agora, a velocidade do motor varia de acordo com o ciclo de trabalho. Suponha que o serviço seja zero, o motor não funcione e quando o ciclo de serviço for 100% o motor se move em RPM máximo. Mas este conceito nem sempre é correto porque o motor começa a funcionar depois de fornecer alguma tensão fixa que é chamada de tensão limite.
Transistor (2N2222)
O microcontrolador e o Arduino podem processar sinais e consumir quase 20 a 40mA de corrente, mas os motores precisam de alta corrente e tensão, então estamos usando o transistor para acionar o motor. O transistor é conectado em série com o motor e a base do transistor é conectada ao pino PWM do Arduino por meio de uma resistência. O sinal PWM está vindo do Arduino e o transistor funciona como uma chave e provoca um curto-circuito no Emissor (E) e no Coletor (C) quando o sinal PWM está no estado Alto e normalmente abre quando o sinal PWM está no estado BAIXO. Este processo funciona continuamente e os motores funcionam na velocidade desejada.
Componentes
Componentes | Especificação | Quantidade | Compre no Amazon ou MercadoLivre |
---|---|---|---|
Arduino Nano | Nano | 1 | https://amzn.to/2KvyHiu |
Motor DC 12V | Baixo consumo de energia | 1 | https://amzn.to/39KSweg |
Transistor | 2N2222 | 1 | https://amzn.to/38VQA3n |
Adaptador de energia | 12 Volts | 1 | https://amzn.to/2XUweRz |
Resistência | 1K | 1 | https://amzn.to/3qwBBCL |
Diode | 1N4004 | 1 | https://amzn.to/38XVZHf |
Cabo USB | Para Arduino Nano | 1 |
Controle de Motor Arduino DC – Circuito
O diagrama do circuito é mostrado na figura abaixo. Se você estiver fazendo este circuito no PCB de uso geral (ZERO PCB) ou placa de ensaio, esta figura é útil
Além disso, se você for bom no PCB Desig, use as imagens fornecidas abaixo.
No circuito é usado um Arduino Nano, que é muito pequeno e amigável para a placa de ensaio (ProtoBoard).
O pino BASE de um transistor (2n2222) é conectado ao pino D9 do Arduino por meio de uma resistência de 1k ohm, a resistência é usada para limitação de corrente. O motor está conectado entre o pino coletor do transistor e o Vcc. Um diodo (1n4004) é conectado em paralelo ao motor em polarização reversa; é usado para bloquear a corrente reversa. O pino emissor do transistor é conectado ao solo. Este circuito é alimentado por um adaptador de 12 volts.
Controle de velocidade do motor DC – Programa de download para o Arduino
int out1 = 9; int val; void setup() { Serial.begin(9600); pinMode(out1,OUTPUT); pinMode(out1,OUTPUT); } void loop() { if (Serial.available()){ val = Serial.read(); } if (val == '0') {analogWrite(out1, 0); Serial.println("Velocidade é = 0"); val = 10;} if (val == '1') {analogWrite(out1, 255); delay(10); analogWrite(out1, 175) ; Serial.println("Velocidade é = 1"); val = 10;} if (val == '2') {analogWrite(out1, 255); delay(10); analogWrite(out1, 185) ; Serial.println("Velocidade é = 2"); val = 10;} if (val == '3') {analogWrite(out1, 255); delay(10); analogWrite(out1, 195); Serial.println("Velocidade é = 3"); val = 10;} if (val == '4') {analogWrite(out1, 255); delay(10); analogWrite(out1, 205); Serial.println("Velocidade é = 4"); val = 10;} if (val == '5') {analogWrite(out1, 255); delay(10); analogWrite(out1, 215); Serial.println("Velocidade é = 5"); val = 10;} if (val == '6') {analogWrite(out1, 255); delay(10); analogWrite(out1, 225); Serial.println("Velocidade é = 6"); val = 10;} if (val == '7') {analogWrite(out1, 255); delay(10); analogWrite(out1, 235); Serial.println("Velocidade é = 7"); val = 10;} if (val == '8') {analogWrite(out1, 255); delay(10); analogWrite(out1, 245); Serial.println("Velocidade é = 8"); val = 10;} if (val == '9') {analogWrite(out1, 255); delay(10); analogWrite(out1, 255); Serial.println("Velocidade é = 9"); val = 10;} }
No início do código, dois inteiros são declarados pelo nome “out1” e “val”, onde out1 é igual a 9, o que mostra que o pino D9 do Arduino é usado como pino de saída (ou pino PWM). Além disso, os dados provenientes do monitor serial são salvos no segundo inteiro “val”.
No void setup(), a comunicação serial é iniciada usando a função “Serial.begin(9600)” onde 9600 é a taxa de transmissão do monitor serial. Depois disso, “out1” é declarado como saída porque o motor é um dispositivo de saída.
No void loop, “serial.available” é usado dentro da condição “if”, torna-se verdadeiro quando qualquer dado é enviado pelo monitor serial. Estes dados são salvos em “val” inteiro usando a função “Serial.read”.
Depois disso, muitas condições “se” são usadas, na primeira “if condição”, quando ‘0’ é enviado através do monitor serial, ele se torna verdadeiro. No suporte, “analogWrite(out1, 0)” é usado para operar o motor no valor PWM zero. Na função “analogWrite(out1, 0)”, “out1” é usado para indicar o pino que queremos usar e “0” é o valor PWM neste pino. Depois disso, “Velocidade é = 0” é mostrado no monitor serial usando a função “Serial.println”. Depois disso, o número inteiro “val” é atualizado para 10, onde 10 é o valor aleatório, que é diferente de 0 a 9.
Na próxima linha, se a condição for usada para “val == 1”, neste momento o motor funciona com o valor PWM de 175. As mesmas condições são usadas até 9, nos 9 o motor funciona com o valor de 255 PWM, 255 é o valor PWM máximo .
Processo
- Conecte o Arduino via USB e faça o upload do código
- Abra o monitor serial e defina a taxa de transmissão em 9600
- Agora digite qualquer número de 0 a 9.
Depois de digitar qualquer valor de zero a 9, a velocidade do motor varia.