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?