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);
}






6 Comentários
Nota 10, excelente...
ResponderExcluirAmigo, a função analogWrite não funciona no Esp8266.
ResponderExcluirO pwm trabalha de forma diferente.
Como funciona?
ExcluirFunciona sim, utilizando os GPIO's que suportam (D1-D8) funciona sem problema.
ExcluirE com o ESP32?
ResponderExcluirMuito bom.
ResponderExcluirTô 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?