Postagem em destaque

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

Este post é o primeiro de uma série de seis que escrevi tratando de controle de potência e PID (controle proporcional, integral e derivativo...

domingo, 9 de março de 2014

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: