![Управление на LED с потенциометър и ESP8266 чрез PWM](http://ardudevelop.eu/wp-content/uploads/2024/09/Управление-на-LED-с-потенциометър-и-ESP8266-чрез-PWM.png)
Тази статия обяснява как да използвате ESP8266 D1 Mini за аналогово четене на потенциометър и контрол на светодиод чрез PWM (Pulse Width Modulation). Ще разгледаме процеса на изчитане на аналогови стойности, преобразуването им и използването на PWM за управление на яркостта на светодиод. Примерът използва ESP8266, но същият код е приложим и за Arduino с малки промени. Разгледайте статията ни: Arduino ADC read to PWM output
Схема на връзките
![Управление на LED с потенциометър и ESP8266 чрез PWM Схема](http://ardudevelop.eu/wp-content/uploads/2024/09/Управление-на-LED-с-потенциометър-и-ESP8266-чрез-PWM-Схема.png)
В показаната схема имаме свързан потенциометър към аналоговия пин A0 на ESP8266, както и светодиод, свързан към цифров пин D1 (GPIO 5) чрез резистор.
Компоненти:
- ESP8266 D1 Mini. Конфигурация на пиновете може да разгледате в ревюто ни за тази платформа: ESP8266 D1 Mini – Малък, но Мощен Wi-Fi Микроконтролер
- Потенциометър
- Светодиод
- Резистор (около 220Ω)
- Свързващи кабели
Примерен код:
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);
}
Стъпка по стъпка обяснение
- Дефиниране на пинове и променливи:
- int led = 5; – Светодиодът е свързан към цифровия пин 5 на ESP8266.
- int pot = A0; – Потенциометърът е свързан към аналоговия пин A0.
- pot_value и pot_map са променливи които се използват за съхраняване на стойностите от потенциометъра.
- Инициализация:
- В setup() се намира функцията Serial.begin(9600);, която използваме за да стартираме серийния монитор с комуникационна скорост от 9600 baud. Това ни позволява да видим стойностите на потенциометъра в реално време.
- pinMode(led, OUTPUT); : Дефинираме пина на светодиода като изход.
- Главна програма:
- В loop() функцията:
- Четем стойността от потенциометъра с analogRead(A0);. Тази стойност е между 0 и 1023, което съответства на входния диапазон от 0V до 3.3V.
- След това използваме функцията map(), за да преобразуваме тази стойност в диапазона 0-255. Това е необходимо, тъй като PWM сигналите за контрол на яркостта се контролират в този диапазон.
- Изпращаме PWM сигнал към пина на светодиода с помощта на analogWrite(led, pot_map);. Стойността на PWM (между 0 и 255) контролира колко дълго сигналът остава “висок” през даден интервал от време, което на практика регулира яркостта на светодиода.
- В loop() функцията:
Принцип на работа
Когато въртим потенциометъра, стойността на съпротивлението се променя, което се отразява на напрежението, подавано на пин A0. Аналоговата стойност (между 0 и 1023) се прочита чрез функцията analogRead() и след това се мащабира (0 до 255) с функцията map(). Тази преобразувана стойност се използва за генериране на PWM сигнал към светодиода, което му позволява да свети с различна яркост в зависимост от позицията на потенциометъра.
Заключение
Този проект показва как лесно можем да четем аналогови сигнали с ESP8266 и да ги преобразуваме в PWM сигнали, използвани за контрол на LED яркост. Същият принцип може да бъде приложен и за други приложения, като управление на мотори, вентилатори или други PWM-базирани устройства.