Controlando o acionamento e velocidade de um motor CC com Arduino e transistor

Ontem, no Automação no Parque, contrariando as minhas expectativas, o movimento foi muito bom. Alguns trainees, o Euclas trabalhando em um projeto dele próprio, e outros.

Choveu bastante, e como o telhado do quiosque não tá lá essas coisas, deu o que fazer para a gente conseguir posicionar as mesas de maneira a escaparmos das goteiras. É que eletrônicos e água geralmente não se dão bem, como vcs sabem...





Achada uma posição como poucas e fracas goteiras, volta ao trabalho.

Apareceu por lá um ex-aluno com um projeto de um mecanismo de ajuste de pH de soluções. Consiste em um pHgâmetro que captará o pH da solução, enviando ao Arduino. Este fará o ajuste do circuito acionando uma de duas bombas ligadas respectivamente a soluções ácida e básica.

Ele trouxe o sensor, testamos, funcionou. Trouxe tb as bombas, mas não tínhamos fonte capaz de acioná-las. Como elas são tocadas por motores CC, resolvemos montar o circuito de controle do motor, para adiantar.

Apesar de não precisarmos controlar o sentido de rotação do motor (já que isso não faz sentido para uma bomba), primeiro tentamos usar uma plaquinha driver que o camarada tinha, essa aqui à esquerda, código ZC-A0591.

Ela é usada para se controlar motores de passo, e na minha cabeça deveria funcionar para motores CC. Não foi o que aconteceu, testamos num motor CC de 5V e nada de acionar.

Como a gente não tinha que mudar de direção, mas só acionar e controlar a velocidade, resolvemos fazer uma outra implementação, mais simples, usando transistor. O transistor é necessário porque o Arduino não aguenta mais do que uns 40, 50 mA de corrente em suas portas, e a gente mediu no motor uma corrente de 250 mA.




Abaixo, esquema do circuito que usamos:

Bem simples e barato, o circuito usa um TIP120, transistor tipo Darlington que consegue "administrar" 5A, muito mais  do que o que o motor precisa.

O resistor de 220 mA serve para limitar a corrente de base em 22 mA, bem menos que os 120 mA que o TIP120 "guenta".

O diodo 1N4001 serve para evitar que a corrente gerada pelo motor quando ele é desligado atinja o transistor e o resto do circuito.



Montado o "circuitim", toca a fazer o programa, também bem simples:


#define pinControl 10

void setup()
{
  Serial.begin(9600);
  pinMode(pinControl,OUTPUT);
}

void runAndWait(int speed, int interval)
{
  analogWrite(pinControl,speed);
  delay(interval);
}

void loop()
{
  runAndWait(100,2000);
  runAndWait(150,2000);
  runAndWait(200,2000);
  runAndWait(250,2000);
}

O pino 10 (pode ser qualquer outro, desde que seja PWM) controla o motor. A função runAndWait aciona o motor com a velocidade speed, durante o intervalo de tempo interval, em milissegundos.

No loop o programa aciona o motor em quatro velocidades distintas (abaixo de 100 ele não gira, a corrente fica muito baixa).

Observe que, se fôssemos apenas ligar e desligar o motor, poderíamos utilizar um relé. Ocorre que, para controlar a velocidade, precisamos passar a "variação de tensão" (entre aspas porque é PWM), só podemos usar um transistor, já que o relé tem partes mecânicas e não pode portanto ser chaveado com a rapidez necessária para o PWM.

Agora, mesmo que só precisássemos ligar e desligar o motor, o uso do TIP120 é bastante interessante, já que ele é barato, possivelmente mais do que o relé, é absolutamente silencioso e, por não ter partes móveis, deve durar mais.

Observação: depois que terminei esse post descobri um jeito de ligar a plaquinha lá em cima de maneira a que ela ela controle motores CC. O texto do cara pode ser visto aqui. Vou ligá-la na próxima semana e testar prá ver se rola.

Abaixo vídeo da bagaça funcionando:


Comentários

  1. Legal o Post Prof. Mauro,
    Agradeço vosso interesse em me ajudar nesse projeto.
    No próximo sábado estarei lá novamente para avançarmos ainda mais.

    Abraços.

    Emerson Vitorio

    ResponderExcluir
    Respostas
    1. Emerson,

      O seu projeto é muito legal, a gente vai aprender um bocado com ele.
      Isso, apareça lá no sabadão, e leve de novo aquela paquinha driver pr[a gente testá-la por lá.

      [] e até,

      Mauro

      Excluir
    2. Fala Mauro,

      Estou trabalhando todos os Sábados e está difícil de passa ai. No dia que passai não tinha ninguém e depois fui saber que você tinha viajado. mas tubo bem.

      Preciso voltar a fazer algum projeto. tenho algumas coisas em mentes e preciso rascunhar para podermos analisar.

      Assim que conseguir dar uma escapada passo ai para conversarmos.

      Um abraço.

      Emerson

      Excluir
  2. esse circuito serve para um motor de 12V?

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Controle PID de Potência em Corrente Alternada - Arduino e TRIAC - Parte III

Controle PID de Potência em Corrente Alternada - Arduino e TRIAC - Parte I

Dividindo um programa (sketch) do Arduino em mais de um arquivo