Arduino 9: Usando entradas e saídas analógicas

Variando a tensão média aplicada no motor podemos fazê-lo acelerar ou desacelerar. Já fizemos isto usando o circuito integrado 555. Com Arduino o circuito é bem mais simples.

Experimento 30 – Acelerando e desacelerando o motor com luz

Material necessário:

  • Arduino Nano + cabo USB + computador
  • Motor de 3V
  • 1 diodo de propósito geral (1N4148 ou equivalente)
  • 2 resistores de 10k ohms
  • LDR
  • 1 transistor MOSFET IRL540
  • Protoboard, fios e jumpers

Monte o circuito abaixo:

O circuito requer uma entrada analógica que irá selecionar a velocidade desejada para o motor, e uma saída, também analógica (PWM), para variar a intensidade da tensão aplicada no motor e assim fazê-lo girar mais rápido ou mais devagar.

A leitura dos dados de entrada para controlar a velocidade do motor poderia ser feita variando um potenciômetro, mas é bem mais interessante usar um sensor de intensidade luminosa como o LDR. O circuito pode ser usado para construir um carrinho que anda quando o ambiente está iluminado, e que para quando entra em um ambiente escuro.

Como um motor pode demandar muito mais corrente que o pino do Arduino é capaz de fornecer, precisamos isolá-lo. Uma forma de fazer isto é através de um transistor. Usaremos neste exemplo um transistor MOSFET de potência, que consome pouca energia mas suporta bem mais corrente direta que o motor será capaz de exigir. Motores também causam pulsos reversos de corrente quando o motor liga ou desliga. Protegeremos o circuito desses pulsos com um diodo em paralelo com o motor.

Este MOSFET que usamos só irá conduzir (entre os seus terminais D e S) quando a tensão no terminal de controle (terminal G) tiver mais de 4,5V. Como usamos PWM, o pino 3 irá gerar pulsos de onda quadrada em valores absolutos de 0 ou 5V (os valores intermediários são simulados através da largura dos pulsos, ou seja, através de PWM). Assim o MOSFET irá ligar e desligar muito rapidamente. Quando o tempo ligado aumentar, o motor irá acelerar. Quando o tempo desligado aumentar, o motor irá desacelerar.

O programa é simples. Consiste na leitura do valor do LDR (0 a 1023) dividido por quatro para que possa ser enviado para a saída PWM (0 a 255):

#define PINO_MOTOR 3;
#define PINO_LDR A0;

void setup() {
    pinMode(PINO_MOTOR, OUTPUT);
}

void loop() {
    int velocidade = analogRead(PINO_LDR) / 4;
    analogWrite(PINO_MOTOR, velocidade);
}

Alteração 30.1 – Usando uma fonte externa para alimentar o motor

Este experimento funciona adequadamente com o motor distribuído no kit, que consome muito pouca corrente, mas se você usar um outro motor ele poderá exigir demais do Arduino. Normalmente um motor não deve ser alimentado com a fonte interna de 5V do Arduino. Ele deve usar uma fonte externa (a fonte pode até ser a mesma usada pelo Arduino, se o motor suportar). Isto não impede que o Arduino continue a controlá-lo. O circuito abaixo ilustra esta configuração (o Arduino pode ser alimentado via USB ou pelo pino Vin):