I05 - Controlando um motor DC com Arduino, transistor e potenciômetro

Intermediário - Projeto 05

Controle de velocidade de um motor DC - acionamento com transistor

Objetivo

Neste tutorial vamos mostrar como criar um circuito para acionar e controlar a velocidade de um pequeno motor CC (motor de corrente contínua) com Arduino. O acionamento do motor será através do uso de um transistor e o controle da velocidade será através de um potenciômetro, onde utilizaremos a técnica PWM (Pulse Width Modulation).

Definições

Motores CC (DC motor): De forma geral, os motores CC, de corrente contínua, são dispositivos que convertem energia elétrica em energia mecânica, gerando uma rotação no seu eixo. Este tutorial deve ser utilizado apenas para motores que consomem menos que 1A quando alimentados por uma tensão de 5 a 9V. No nosso projeto, vamos utilizar um motor de corrente contínua de 130mA para uma tensão de 5V com potência e rendimento máximo.

ATENÇÃO:

a) Nunca ligue o motor CC diretamente no Arduino, pois poderá danificar irreversivelmente o seu microcontrolador. Os pinos digitais do Arduino oferecem no máximo 40mA e um motor CC, mesmo que pequeno, consome muito mais que isto. Portanto, para controlar um motor CC é necessário a utilização de correntes mais altas que as do Arduino e por isso você deverá utilizar transistores para garantir correntes satisfatórias para operar o motor em vazio ou em plena carga. Desta forma, o transistor irá proteger o pino digital do Arduino, impedindo que opere com correntes superiores a corrente máxima permitida e ao mesmo tempo podendo controlar o motor de forma eficiente.

b) Por questões de segurança, é altamente recomendável que se utilize uma fonte externa para alimentar o motor. Placas de Arduino, além de caras, são susceptíveis quando conectadas a dispositivos de correntes elevadas, como os motores de corrente contínua. Além disso, o motor utilizado poderá exigir tensões e correntes acima do que o Arduino pode fornecer. Lembre-se que o Arduino possui um regulador de tensão para 5V ou 3,3V.

b1. A fonte de alimentação externa deverá ter tensão e corrente suficientes para acionar e controlar o motor CC utilizado.  Para evitar a queima do motor, não utilize fonte externa com tensões muito superiores à tensão de operação do motor. As características do motor devem ser obtidas no datasheet do componente.

b2. No nosso projeto, dividimos o circuito em 2 partes. A primeira parte é alimentada diretamente pelo Arduino (5V) que inclui o potenciômetro e o botão para ligar o motor. A segunda parte controla a alimentação do motor e o transistor de proteção, onde utilizamos uma fonte ajustável de 5V com corrente máxima de 700mA.

b3. É importante lembrar que a placa do Arduino deverá ser alimentada diretamente pela USB de um computador, baterias (9 ou 12V) ou por uma fonte chaveada de 9V ou 12V (plug P4), por exemplo.

c) Também é recomendável a utilização de um diodo de proteção da porta digital do Arduino. Diodos foram projetados para permitir que a corrente flua apenas em uma direção, do polo positivo para o polo negativo, bloqueando qualquer corrente parasita que tente ir na direção oposta e que possa prejudicar os componentes do circuito. Esta corrente é resultado da "tensão reversa" ou "força eletromotriz inversa" criada pela inércia do rotor quando a alimentação do motor é removida. Nesta condição, o motor passa a gerar corrente elétrica através da transformação da energia mecânica da inércia do rotor em energia elétrica. Esta corrente fluirá no sentido contrário, podendo causar efeitos indesejáveis no Arduino e na fonte externa, caso o circuito não seja bloqueado por um diodo.

c1. Segundo alguns técnicos em eletrônica, a adição do diodo para a proteção é opcional, tendo em vista que o transistor que utilizaremos no projeto (TIP120, TIP121 ou TIP122) já possui um diodo interno. Veja o esquema abaixo:

c2. No entanto, outros tantos técnicos reforçam o uso do diodo como proteção, e vão além, recomendam a utilização também de um capacitor cerâmico para estabilizar a tensão e evitar ruídos no circuito. Estas variações só podem ser detectadas em equipamentos de medição, como um osciloscópio por exemplo. No nosso projeto vamos adicionar um diodo de proteção, o diodo 1N4004, e vamos testar na prática o projeto com e sem proteção com o diodo.

Dica: Opte sempre por proteger o máximo os circuitos utilizados. Mas se você não tiver um diodo em mãos, você poderá testar o projeto tranquilamente sem este componente (não haverá danos físicos aos componentes eletrônicos).

d) Preste bem atenção na montagem do circuito antes de ligar na energia elétrica. Qualquer erro poderá causar danos irreversíveis nos componentes e na placa do Arduino.

Aplicação

Para fins didáticos e projetos de automação, robótica e máquinas eletrônicas em geral.

Componentes necessários

Referência

Componente

Quantidade

Imagem

Observação

Protoboard Protoboard 830 pontos 1 Resultado de imagem para protoboard 830v

 

Jumpers Kit cabos ligação macho / macho 1    
Micro Motor DC

Micro Motor de corrente contínua (CC) 6000rpm / 5V

1

 

– Tensão nominal: 3,0 a 5,0V

- Corrente sem carga: 90mA

- Corrente em plena carga: 130mA

- Rotação sem carga: 6.000 rpm

- Rotação máximo rendimento: 5.800 rpm

- Potência Máxima: 0,35W

(datasheet)

Transistor TIP122 Transistor NPN TIP122 1

 – Tensão máxima base-coletor: 100V
– Corrente coletor: 5A
– Temperatura de operação: -65 à 150 °C

(datasheet)

Obs.: Similares ao TIP122: TIP120 e TIP121

Dido IN4004 Diodo IN40404 1  
Corrente: 1A
Proteção tensão reversa:  400V
Encapsulamento:     DO41

(datasheet)

Obs.: Similar ao IN4004: IN4007

Push Button  Push button 6X6X5mm 1  
Potenciômetro Potenciômetro 10K   1 Resultado de imagem para potenciômetro  

Você poderá experimentar valores diferentes do potenciômetro, entre 1K a 100K.

A tensão resultante do potenciômetro aumenta quando giramos o eixo do componente no sentido do polo negativo para o polo positivo

Led 5mm Led 5mm 3  

3 LEDs alto brilho ou difuso

No projeto utilizamos 1 led verde, 1 led amarelo e 1 led vermelho

Você poderá utilizar também LEDs de 3 mm e as cores que desejar.

Resistor Resistor 10KΩ

1

 

1 Resistor de 2,2KΩ a 25KΩ (transistor)

 

Resistor Resistor 150Ω

3

3 Resistores de 150Ω ou superiores (leds)

Fonte externa fonte ajustável para protoboard + fonte chaveada de 9V 1

https://www.vidadesilicio.com.br/media/catalog/product/cache/2/thumbnail/450x450/9df78eab33525d08d6e5fb8d27136e95/4/5/450xn_8.jpg

Fonte Chaveada 9V 1A

Utilizamos no projeto uma fonte ajustável (5V) para protoboard alimentada por uma fonte chaveada de 9V (1A)

Dados da fonte ajustável para protoboard:

Tensão de entrada: 6,5 a 12 VDC
– Tensão de saída: 3,3v e 5v, sendo uma em USB
– Corrente máxima de saída: 700mA

 

Se você não tiver uma fonte ajustável, utilize um suporte com 4 pilhas AA ou 4 pilhas AAA ou uma bateria 9V como fonte de energia externa

Arduino UNO Arduino UNO R3 1

Você poderá utilizar uma placa Arduino UNO original ou similar

Montagem do Circuito

Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da energia elétrica enquanto você monta o circuito.


Atenção

Como descrevemos no início deste tutorial, dividimos o circuito em 2 partes:

a) a primeira parte é alimentada diretamente pelo Arduino, a partir da porta USB do computador, baterias (9V) ou através de um adaptador AC de 9V a 12V ou de uma fonte chaveada de 9V a 12V. 

b) segunda parte deverá ser alimentada por uma fonte externa de 5V independente, como um suporte para 4 pilhas AAA ou AA (6V), fonte chaveada 5V ou fonte ajustável para protoboard 5V. Você poderá utilizar também como fonte externa uma bateria de 9V, que por possuir baixa intensidade de corrente irá funcionar também neste projeto para motores de corrente contínua de até 5V.

Parte do circuito alimentada diretamente pelo Arduino

1. Observe na imagem acima que conectamos o Vcc do Arduino no protoboard, onde estão ligados os leds, o botão (push button) e o potenciômetro. Observe que o Ground destes componentes está ligado com o Ground do Arduino.

2. Lembre-se que o LED tem polaridade: O terminal maior tem polaridade positiva e o lado do chanfro tem polaridade negativa.

2.1. Portanto, faça a conexão do Arduino no terminal positivo do led (anodo) e o GND no terminal negativo (catodo).

2.2. Para evitar danos ao led é necessário a inclusão de um resistor no circuito. Como o resistor é um limitador da corrente elétrica, ele poderá estar conectado no anodo (terminal maior) ou no catodo (terminal menor) do led, tanto faz.

3. Determinamos o valor do resistor através da tabela prática: Tabela prática de utilização de leds 3mm e 5mm. Entretanto, o mais correto é sempre verificar o datasheet do fabricante do LED para você ter os exatos valores de tensão e corrente do mesmo - leia Leds ligados em série e em paralelo.

3.1. Valores utilizados para nossos projetos: LEDs difusos ou de alto brilho: Vermelho, Laranja e Amarelo: 150 Ω | Led Verde e Azul: 100 Ω

4. Observe que o potenciômetro foi montado como um divisor de tensão, onde utilizamos os 3 terminais do componente. Desta forma, o potenciômetro funciona como um divisor de tensão que pode ser lido pelo IDE do Arduino através do conversor analógico digital (ADC ou DAC em inglês). Girando o eixo do polo negativo (GND) para o polo positivo (Vcc) aumentamos o valor da tensão, e ao contrário, diminuiremos o valor da tensão e portanto diminuiremos a velocidade de rotação do motor.

4.1. O potenciômetro utilizado no projeto é um componente mecânico analógico, e por este fato o terminal "b", veja a imagem acima, deverá estar conectado à uma porta analógica do Arduino. No nosso exemplo, conectamos o potenciômetro na porta analógica A0 do Arduino.

4.2. O conversor analógico-digital (frequentemente abreviado por conversor A/D ou ADC) é um dispositivo eletrônico capaz de gerar uma representação digital a partir de uma grandeza analógica, normalmente um sinal representado por um nível de tensão ou intensidade de corrente elétrica. O Arduino UNO (microcontrolador ATmega328) possui um conversor analógico digital interno de 10 bits de resolução (210 = 1024), ou seja, podendo variar seus valores entre 0 e 1023.

5. Monte o botão (push button) sem o resistor, pois através da programação vamos habilitar o resistor pull-up interno do Arduino. Desta forma, quando o botão estiver pressionado, o Arduino retornará "LOW" ou "0". Veja o projeto Projeto 02b - Led apaga com push button pressionado (pull-up interno do Arduino)  ou assista o vídeo Arduino: Botão e Resistor de Pull Up Interno

 Parte do circuito alimentada por fonte externa

1. Observe na imagem acima que utilizamos um suporte com 4 pilhas AAA (6V) como fonte de alimentação externa. Você também poderá utilizar 4 pilhas AA (6V), uma bateria 9V, ou ainda, uma fonte ajustável para protoboard alimentada por uma fonte chaveada de 9V (opção utilizada nos nossos testes). É importante saber que a fonte utilizada no circuito deve ter tensão e corrente adequadas para o motor que se deseja usar. No nosso exemplo, usamos uma fonte ajustável para protoboard com saída de 5V e corrente de até 700mA para um motor de corrente contínua de 5V e corrente de 130mA.

1.1. Para utilizar uma fonte ajustável para protoboard, assista o vídeo: https://www.youtube.com/watch?v=gH_LQp6de68

1.2. Para utilizar a fonte ajustável, você deverá fornecer energia em apenas um lado do protoboard. O outro lado deverá estar recebendo energia diretamente do Arduino.

2. Observe também que juntamos o Ground da fonte externa com o Graund do Arduino. Isso é necessário para criar um ponto de referência para o fluxo dos elétrons seguirem no circuito. Se você retirar a conexão do Ground do Arduino, o motor irá parar, pois os elétrons perderão a referência e não haverá mais corrente elétrica no circuito.

3. Para a montagem do Transistor Darlington NPN (TIP120, TIP121 ou TIPO122) é necessário uma atenção nas ligações dos seus terminais. O transistor possui 3 terminais: (1) BASE, (2) COLETOR e (3) EMISSOR.

3.1. A BASE (1) deverá estar conectada com o pino digital do Arduino. No nosso exemplo, conectamos ao pino 9. É importante salientar que o terminal deverá estar conectado em uma porta digital com PWM (Modulação Por Largura de Pulso em português), pois utilizaremos esta técnica para fazer com que o motor varie a sua rotação.

Obs.: O Arduino UNO, que utilizamos no nosso projeto, possui 6 saídas digitais que podem ser utilizadas como PWM, sendo elas: 11, 10, 9, 6, 5 e 3.

3.1.1 Observe que usamos um resistor de 10K entre a Base do transistor e o pino digital do Arduino. Este resistor dependerá do hfe (Forward Current Gain - fator de ganho) do transistor, ou seja, da relação entre o número de vezes que a corrente de coletor será maior. Por exemplo, um transistor com hfe de 1000 significa que a corrente do coletor será 1000 vezes maior que a da base (hfe = 1000, conforme datasheet do TIP122).

3.1.1.1 Como no Arduino temos 40mA X 1000, ofereceríamos uma corrente desnecessária para fazer girar o motor DC utilizado no projeto que precisa de apenas de 130mA.

3.1.1.1.1 Como iremos usar uma corrente muito baixa no motor DC (entre 90mA e 130mA) podemos utilizar um resistor de 10K sem problemas. Quanto maior a corrente do motor, menor deverá ser o resistor utilizado. Entretanto, para motores de baixa potência, com correntes abaixo de 1A, resistores de 2,2K a 10K funcionarão perfeitamente. O ideal, no entanto, é que se calcule o valor correto do resistor para garantir que não haja dissipação de energia desnecessária.

3.1.1.1.2.  Exemplo de cálculo: Para oferecer uma corrente de 160mA (considerando um fator de segurança de ~25%) no motor DC, precisaríamos aplicar uma corrente na base do transistor de i = (160mA / 1000) => i = 0,16mA, pois i_base = i_coletor/hfe. Pela lei de ohm, R = V / i => onde V = 5V - 0,7V (queda de tensão média entre base e emissor). Portanto, R = 4,3 / 0,00016 => R = 26.875 ohm. Desta forma, poderíamos utilizar um resistor de até 25Kohms para o funcionamento do nosso motor.

3.2. O COLETOR (2) é ligado diretamente no terminal do motor.

 3.2.1. Com já descrevemos no início do tutorial, utilizamos um diodo para proteger o Arduino e a fonte de energia externa de uma possível "tensão reversa" também chamada de "corrente parasita". O diodo é opcional para os nossos testes aqui mas é altamente recomendável quando se utiliza circuitos operacionais para uma aplicação qualquer.

3.2.1. O diodo é um componente que deixa a corrente passar em um único sentido, servindo como uma válvula para evitar o retorno da tensão gerada quando acionamos ou paramos o motor rapidamente.

3.2.2. Muita atenção, pois o diodo tem polaridade. O diodo possui uma faixa branca próxima do terminal negativo. Imagine essa faixa branca como uma barreira. A eletricidade flui pelo diodo a partir do terminal que não tem barreira.

 3.2.3. Veja a montagem do diodo no nosso circuito.

3.3. Finalmente temos o EMISSOR (3) conectado ao Ground (-).

3.4. Como vimos na montagem, o transistor neste projeto irá funcionar como uma chave. Ao fornecer uma tensão de até 5V na BASE por meio do pino digital 9 do Arduino, o transistor liga, permitindo que a corrente flua entre o EMISSOR e o COLETOR. Desta forma, é possível controlar correntes mais elevadas entre o EMISSOR e o COLETOR, alimentando adequadamente o motor que está em série com esse circuito.

4. É importante entender que não é possível controlarmos o sentido de rotação do eixo através da programação do Arduino apenas com os componentes utilizados neste projeto. Para alterarmos o sentido de rotação do motor precisaremos neste caso inverter as conexões da montagem. Inverta as conexões, conectando o Vcc no conector (A) e o COLETOR no conector (B) do motor como mostra a figura abaixo.

4.1. No próximo projeto mostraremos como alterar o sentido de rotação do motor utilizando uma ponte-H. Com este componente, poderemos controlar a velocidade e o sentido de rotação do motor também.

5. A montagem do nosso projeto foi realizada em um protoboard com linhas de alimentação contínuas. Verifique se o seu protoboard possui linhas de alimentação contínuas ou separadas.

5.1. Veja a fotografia abaixo que mostra a montagem completa do circuito.

Testando a montagem do circuito I - motor liga e desliga

1. Neste primeiro teste vamos criar um sketch para fazer com que o botão (push button) ligue e desligue o motor quando pressionado.

1.1. Quando pressionamos o botão, o Arduino enviará um sinal alto nível (HIGH) através da porta digital 9 que irá acionar o transistor e ligar o motor. Na prática, quando o Arduino envia uma tensão (até 5V) para a Base do transistor, o componente gera um curto entre o Emissor e o Coletor, ampliando a corrente que será aplicada no motor para que ele seja acionado de forma satisfatória.

1.2. Quando pressionamos novamente o botão, o Arduino enviará um sinal de baixo nível (LOW), fechando o fluxo de corrente entre o Emissor e o Coletor e desligando o motor.

/*******************************************************************************
*
*    Projeto I05 - Controlando um motor CC com transistor
*    Teste 1: Botão liga e desliga motor            
*    http://squids.com.br/arduino
*
*******************************************************************************/
const byte pinTransistor = 9;
const byte pinButton = 2;
boolean state = 0;

void setup() {
Serial.begin(9600);  
pinMode(pinTransistor, OUTPUT); //Sinal digital transistor (Saída do Arduino)
pinMode(pinButton, INPUT_PULLUP); // Sinal digital botão (entrada no Arduino)
digitalWrite(pinTransistor, LOW); // inicia como motor desligado
}

void loop() {
  // alterna state entre 0 e 1
  if (!digitalRead(pinButton)) { // verifica se o botão foi pressionado
    state = !state;
    while(!digitalRead(pinButton)) {}
    delay(50);
  }
  // liga e desliga o motor ao pressionar o botão
  (state) ? digitalWrite(pinTransistor, HIGH) : digitalWrite(pinTransistor, LOW);
}

 Veja o teste "liga e desliga" o motor no vídeo abaixo:

Testando a montagem do circuito II - motor varia a velocidade

2. Nesse teste agora vamos fazer com que o motor varie a velocidade automaticamente, acelerando suavemente até a velocidade máxima e depois reduzindo a velocidade, mas sem parar. Este ciclo é repetido indefinidamente até desligarmos o botão (push button) ou qualquer fonte de energia.

2.1. Para isto precisaremos utilizar a técnica PWM (Pulse Width Modulation), onde modulamos o sinal do Arduino que vai para o transistor, fazendo com que ele ligue e desligue muitas vezes por segundo controlando assim a velocidade do motor.

PWM (Pulse Width Modulation) - Modulação por Largura de Pulso

2.2. Refere-se ao conceito de pulsar rapidamente um sinal digital em um condutor. Quando geramos a modulação através da largura do pulso em uma onda quadrada podemos controlar a potência ou a frequência de um circuito.

PWM signal with its two basic time periods | Download Scientific ...

2.2.1. A técnica de PWM é empregada em diversas áreas da eletrônica e, por meio da largura do pulso de uma onda quadrada, é possível o controle de potência ou velocidade nas aplicações de motores elétricos, aquecedores elétricos, leds e luzes nas diferentes intensidades e frequências. O Projeto 14 - Led com efeito dimmer usando potenciômetro é um ótimo exemplo de como utilizar o PWM para controlar a intensidade luminosa de um led utilizando a função analogWrite(). Veja abaixo um gráfico que mostra alguns exemplos de PWM de acordo com a razão cíclica (duty cycle) entre 0% e 100%.

Domine o PWM com Wagner Rambo - Embarcados

3. É importante entendermos que a modulação PWM para o Arduino UNO ( microcontrolador ATmega328) tem resolução de 8 bits (28 = 256), variando, portanto, de 0 a 255. Quando zero, o motor estará desligado e quando 255 o motor estará na máxima velocidade.

 3.1. Dividimos o valor da modulação em 3 partes. Quando obter o valor entre 0 e 85, o led verde é ligado, de 86 a 170 o led amarelo é ligado e acima de 170 ligamos o led vermelho.

3.2. Veja abaixo o sketch do teste de variação de velocidade do motor.

/*******************************************************************************
*
*    Projeto I05 - Controlando um motor CC com transistor
*    Teste 2: Variando a velocidade do motor
*    Autor: Angelo Luis Ferreira            
*    http://squids.com.br/arduino
*
*******************************************************************************/
const byte pinTransistor = 9;
const byte pinButton = 2;
boolean state = 0;

// leds
const byte ledGreen = 3;
const byte ledYellow = 4;
const byte ledRed = 5;

void setup() {
  Serial.begin(9600);  
  pinMode(pinTransistor, OUTPUT); //Sinal digital transistor (Saída do Arduino)
  pinMode(ledGreen, OUTPUT); //Sinal digital led verde (Saída do Arduino)
  pinMode(ledYellow, OUTPUT); //Sinal digital led amarelo (Saída do Arduino)
  pinMode(ledRed, OUTPUT); //Sinal digital led vermelho (Saída do Arduino)
  pinMode(pinButton, INPUT_PULLUP); // Sinal digital botão (entrada no Arduino)
  digitalWrite(pinTransistor, LOW); // inicia como motor desligado
}


void loop () {
  getTurnOnOff();
  // liga e desliga o motor ao pressionar o botão
  if (state) {
    // acelera o motor suavemente
    for (int i = 50; i <= 255; i++) {
       // verifica se o botão foi pressionado
      getTurnOnOff();
      if(!state) break;
      // se não pressionado roda o motor      
      analogWrite(pinTransistor, i); //Aceleração suave do motor
      turnLed(i);      
      delay(100);
      Serial.println(i);
    }
    //desacelera o motor suavemente
    for(int x = 255; x >= 50; x--){
      // verifica se o botão foi pressionado
      getTurnOnOff();
      if(!state) break;
      // se não pressionado roda o motor
      analogWrite(pinTransistor, x);
      turnLed(x);
      delay(100);
      Serial.println(x);
    }    
  } else digitalWrite(pinTransistor, LOW);
}


void getTurnOnOff() {
  // alterna state entre 0 e 1
  if (!digitalRead(pinButton)) { // verifica se o botão foi pressionado
    state = !state;
    while(!digitalRead(pinButton)) {}
    delay(50);
  }
  if(!state) {
    turnOffLeds();
    digitalWrite(pinTransistor, LOW); 
  }
}

void turnLed(byte j) {
  if (j<=+85) {
    turnOffLeds();
    digitalWrite(ledGreen, HIGH);
  } else if ((85< j) && (j<= 170)) {
     turnOffLeds();
     digitalWrite(ledYellow, HIGH);
  } else if (j>=170) {
    turnOffLeds();
    digitalWrite(ledRed, HIGH);
  }
}

void turnOffLeds() {
    digitalWrite(ledGreen, LOW);
    digitalWrite(ledRed, LOW);
    digitalWrite(ledYellow, LOW);
}

  Veja o funcionamento do teste "motor varia a velocidade" no vídeo abaixo:

 Código do Projeto (Sketch)

1) Faça o dowload e abra o arquivo projetoI05.ino no IDE do Arduino:  DOWNLOAD - projetoI05.ino

Se preferir, copie e cole o código abaixo no IDE do Arduino:

/*******************************************************************************
*
*    Projeto I05 - Controlando um motor CC com transistor e potenciômetro
*    Data: 01/09/2020
*    Autor: Angelo Luis Ferreira
*            http://squids.com.br/arduino
*
*******************************************************************************/
const byte pinTransistor = 9;
const byte pinButton = 2;
const byte pinPot = A0;
boolean state = 0;

// leds
const byte ledGreen = 3;
const byte ledYellow = 4;
const byte ledRed = 5;

void setup() {
  Serial.begin(9600);  
  pinMode(pinTransistor, OUTPUT); //Sinal digital transistor (Saída do Arduino)
  pinMode(ledGreen, OUTPUT); //Sinal digital led verde (Saída do Arduino)
  pinMode(ledYellow, OUTPUT); //Sinal digital led amarelo (Saída do Arduino)
  pinMode(ledRed, OUTPUT); //Sinal digital led vermelho (Saída do Arduino)
  pinMode(pinButton, INPUT_PULLUP); // Sinal digital botão (entrada no Arduino)
  digitalWrite(pinTransistor, LOW); // inicia como motor desligado
}


void loop () {
  getTurnOnOff(); // liga e desliga o motor ao pressionar o botão  
  if (state) {
    byte power = map(analogRead(pinPot),0,1023,0,255);
    analogWrite(pinTransistor,power);
    turnLed(power);
    Serial.println(power);
    } else digitalWrite(pinTransistor, LOW);
}


void getTurnOnOff() {
  // alterna state entre 0 e 1
  if (!digitalRead(pinButton)) { // verifica se o botão foi pressionado
    state = !state;
    while(!digitalRead(pinButton)) {}
    delay(50);
  }
  if(!state) {
    turnOffLeds();
    digitalWrite(pinTransistor, LOW); 
  }
}

void turnLed(byte j) {
  if (j<=+85) {
    turnOffLeds();
    digitalWrite(ledGreen, HIGH);
  } else if ((85< j) && (j<= 170)) {
     turnOffLeds();
     digitalWrite(ledYellow, HIGH);
  } else if (j>=170) {
    turnOffLeds();
    digitalWrite(ledRed, HIGH);
  }
}

void turnOffLeds() {
    digitalWrite(ledGreen, LOW);
    digitalWrite(ledRed, LOW);
    digitalWrite(ledYellow, LOW);
}

Vídeo

Como o projeto deve funcionar

1. Ao girar o eixo do potenciômetro no sentido horário (do polo negativa para o positivo) aumentamos a velocidade do motor até atingir a velocidade máxima.

2. Ao girar o eixo do potenciômetro no senti anti-horário (do polo positivo para o negativo) reduzimos a velocidade do motor até desligar o componente.

3. Os leds verde, amarelo e vermelho acenderão conforme a velocidade do motor. Velocidade baixa acende o led verde, velocidade média, o amarelo e velocidade alta o led vermelho.

4. Se desejar, abra o Monitor Serial do IDE do Arduino para visualizar os valores PWM, de 0 255, que indicam a velocidade do motor (0 a 85 - velocidade baixa, 86 a 170 - velocidade média, e 170 a 255 velocidade alta):

Desafios

Com base neste projeto, resolva o seguinte desafio:  Desafio 76

O anúncio abaixo ajuda a manter o Squids Arduino funcionando

Comentários

×

Infomações do site / SEO








×

Adicionar Marcadores