Управление на LED с потенциометър и ESP8266 чрез PWM

Управление на LED с потенциометър и ESP8266 чрез PWM

Тази статия обяснява как да използвате ESP8266 D1 Mini за аналогово четене на потенциометър и контрол на светодиод чрез PWM (Pulse Width Modulation). Ще разгледаме процеса на изчитане на аналогови стойности, преобразуването им и използването на PWM за управление на яркостта на светодиод. Примерът използва ESP8266, но същият код е приложим и за Arduino с малки промени. Разгледайте статията ни: Arduino ADC read to PWM output

Схема на връзките

Управление на LED с потенциометър и ESP8266 чрез PWM Схема

В показаната схема имаме свързан потенциометър към аналоговия пин A0 на ESP8266, както и светодиод, свързан към цифров пин D1 (GPIO 5) чрез резистор.

Компоненти:

Примерен код:

int led = 5;
int pot = A0;
int pot_value = 0;
int pot_map = 0;

void setup() {
  Serial.begin(9600);
  pinMode(led, OUTPUT);
}

void loop() {
  pot_value = analogRead(A0); 
  Serial.print("pot_value = ");
  Serial.print(pot_value);
  
  pot_map = map(pot_value, 0, 1023, 0, 255);
  Serial.print(" || ");
  Serial.print("pot_map = ");
  Serial.println(pot_map);
  
  analogWrite(led, pot_map);
}

Стъпка по стъпка обяснение

  1. Дефиниране на пинове и променливи:
    • int led = 5; – Светодиодът е свързан към цифровия пин 5 на ESP8266.
    • int pot = A0; – Потенциометърът е свързан към аналоговия пин A0.
    • pot_value и pot_map са променливи които се използват за съхраняване на стойностите от потенциометъра.
  2. Инициализация:
    • В setup() се намира функцията Serial.begin(9600);, която използваме за да стартираме серийния монитор с комуникационна скорост от 9600 baud. Това ни позволява да видим стойностите на потенциометъра в реално време.
    • pinMode(led, OUTPUT); : Дефинираме пина на светодиода като изход.
  3. Главна програма:
    • В loop() функцията:
      • Четем стойността от потенциометъра с analogRead(A0);. Тази стойност е между 0 и 1023, което съответства на входния диапазон от 0V до 3.3V.
      • След това използваме функцията map(), за да преобразуваме тази стойност в диапазона 0-255. Това е необходимо, тъй като PWM сигналите за контрол на яркостта се контролират в този диапазон.
      • Изпращаме PWM сигнал към пина на светодиода с помощта на analogWrite(led, pot_map);. Стойността на PWM (между 0 и 255) контролира колко дълго сигналът остава “висок” през даден интервал от време, което на практика регулира яркостта на светодиода.

Принцип на работа

Когато въртим потенциометъра, стойността на съпротивлението се променя, което се отразява на напрежението, подавано на пин A0. Аналоговата стойност (между 0 и 1023) се прочита чрез функцията analogRead() и след това се мащабира (0 до 255) с функцията map(). Тази преобразувана стойност се използва за генериране на PWM сигнал към светодиода, което му позволява да свети с различна яркост в зависимост от позицията на потенциометъра.

Заключение

Този проект показва как лесно можем да четем аналогови сигнали с ESP8266 и да ги преобразуваме в PWM сигнали, използвани за контрол на LED яркост. Същият принцип може да бъде приложен и за други приложения, като управление на мотори, вентилатори или други PWM-базирани устройства.