Recents in Beach


Receba o meu conteúdo GRATUITAMENTE


ESP8266 utilizando PWM com Potenciômetro



Para quem não é acostumado com eletrônica, PWM é controle de potência. E nesta montagem mostramos como utilizá-lo para controlar a intensidade da luz de um led, como uma espécie de um dimmer de um abajur, escurecendo e clareando.
Este mecanismo te possibilita também, por exemplo, ligar um driver de um motor. E esta é apenas mais uma das possibilidades.

- Observação: PWM, em inglês, significa Pulse-Width Modulation, ou seja, modulação por largura de pulso.


Objetivo

A montagem consiste em um potenciômetro, que é um resistor variável, monitorado pelo ESP. Neste esquema estou utilizando o mesmo código fonte que utilizaria com um Arduino, por isso sempre optamos por usar a IDE arduino com ESP, para melhor aproveitamento em outros projetos também.
Na montagem, o ESP está ligado na USB só por questão de alimentação. Temos também o pino do cursor, que é o pino do centro potenciômetro, ligado na porta AD, e o positivo e o negativo.
Conforme a tensão vai variando, é possível ler um valor diferente no AD. Portanto, girando o potenciômetro é possível aumentar ou diminuir o brilho do led.


Montagem


O esquema elétrico é bem simples: usando o ESP8266 na configuração do NodeMCU, vamos alimentar a USB. Então, aqui, o potenciômetro tem que estar ligado por uma ponta ao negativo e, pela outra ponta, ao positivo. O meio, que o é cursor, ele fica ligado no ADC 0, porque esse ESP só tem uma porta que lê valores analógicos.


WiFi ESP8266 NodeMCU ESP-12E


Código fonte


Na função Setup, definimos o modo de comportamento dos pinos que utilizamos, no caso o LED e o POTENCIÔMETRO.

void setup()
{
Serial.begin(115200)
// Instrução para colocar o gpio que iremos utilizar como entrada,
// podemos fazer a leitura nesse pino
pinMode(A0, INPUT); 
// A0 é uma constante que indica o pino que ligamos nosso potenciômetro
// Instrução para colocar o gpio que iremos utilizar como saída,
// podemos alterar seu valor livremente para HIGH ou LOW
pinMode(LED_BUILTIN, OUTPUT);
// LED_BUILTIN é uma constante que indica o LED do ESP8266
}

Loop

Nesta função é feita a lógica para ler o valor do POTENCIÔMETRO e atribuir esse valor (que é a intensidade do brilho) no LED.

void loop()
{
// faz a leitura do pino A0 (no nosso caso, o potenciômetro, retorna um valor entre 0 e 1023)
int potencia = analogRead(A0);
Serial.println(potencia);
// como o LED no ESP8266 trabalha de maneira contrária, ou seja, quanto maior o valor atribuído, menor a intensidade. Faremos o cálculo para aumentarmos o brilho conforme girarmos o potenciômetro em sentido horário.
potencia = 1023 - potencia;
//  atribui o valor lido do potenciômetro para configurar a intensidade do brilho do LED
analogWrite(LED_BUILTIN, potencia);
}


Arquivos para download:


Postar um comentário

6 Comentários

  1. Amigo, a função analogWrite não funciona no Esp8266.
    O pwm trabalha de forma diferente.

    ResponderExcluir
    Respostas
    1. Funciona sim, utilizando os GPIO's que suportam (D1-D8) funciona sem problema.

      Excluir
  2. Muito bom.
    Tô com um projeto pra controlar modalidades de competição de slot car (autorama).
    Serão 3 modalidades baseadas na "potência dos carrinhos", porém quero criar padrões de potência da própria pista, isso fará com que a competitividade seja maior.
    Qual sugestão de projeto para determinar a potência máxima da pista?

    ResponderExcluir