В предыдущем уроке мы управляли включением и выключением светодиода, заставляя его мигать. В этом проекте мы будем управлять яркостью светодиода с помощью ШИМ для имитации эффекта дыхания. ШИМ - это метод управления аналоговым выходом с помощью цифровых средств. Цифровое управление используется для генерации прямоугольных волн с различными коэффициентами заполнения (сигнала, который постоянно переключается между высоким и низким уровнями) для управления аналоговым выходом. Обычно напряжение на входах портов составляет 0В и 5В. Что если требуется 3В? Или переключение между 1В, 3В и 3.5В? Мы не можем постоянно изменять резисторы. Поэтому мы прибегаем к ШИМу. Для цифрового выхода Arduino есть только LOW и HIGH, которые соответствуют напряжению 0В и 5В. Вы можете определить LOW как 0 и HIGH как 1 и заставить Arduino выдавать пятьсот сигналов 0 или 1 за 1 сек. Если все пятьсот - 1, это 5В; если все - 0, это 0В. Если выводится 010101010101, то выходной порт будет 2.5В, что похоже на показ фильма. Фильмы, которые мы смотрим, не являются полностью непрерывными. Фактически он выводит 25 кадров в секунду. В этом случае человек не видит этого, как и ШИМ. Если нам нужно разное напряжение, нам нужно контролировать соотношение 0 и 1. Чем больше сигналов 0,1 выводится за единицу времени, тем точнее управление.
Схема подключения:
Не изменяйте подключение.
Тестовый код:
//*****************************************************************
/*
4wd BT Car
lesson 2.1
PWM
https://alash-electronics.kz/blogs/wiki
*/
int ledPin = 9; // Определение пина светодиода на D9
int value;
void setup () {
pinMode (ledPin, OUTPUT); // инициализация пина светодиода как выхода.
}
void loop () {
for (value = 0; value <255; value = value + 1)
{
analogWrite (ledPin, value); // Светодиод постепенно зажигается
delay (5); // задержка 5 мс
}
for (value = 255; value> 0; value = value-1)
{
analogWrite (ledPin, value); // Светодиод постепенно гаснет
delay (5); // задержка 5 мс
}
}
//*****************************************************************
Результат теста:
После успешной загрузки кода на плату подключите провода в соответствии со схемой подключения и используйте USB-кабель для подключения платы к компьютеру. После включения питания вы увидите, что светодиод постепенно меняется от яркого к темному, как дыхание человека, а не мгновенное включение и выключение.
Объяснение кода:
Если нам нужно повторить определенное утверждение, мы можем использовать оператор for. Формат оператора for показан ниже:
FOR циклическая последовательность:
Круг 1: 1 → 2 → 3 → ... → 253 → 254
Круг 2: 2 → 3 → ... → 253 → 254
Круг 3: 3 → ... → 253 → 254
Пока не установлено число 255, цикл "for" не закончится. Зная этот порядок, вернемся к коду:
for (int value = 0; value < 255; value=value+1){
...}
for (int value = 255; value >0; value=value-1){
...}
Два оператора "for" заставляют значение увеличиваться от 0 до 255, затем уменьшаться от 255 до 0, затем увеличиваться до 255.... бесконечный цикл.
Практика расширения:
Давайте изменим значение задержки, оставив пин неизменным, и посмотрим, как изменится светодиод.
//*****************************************************************
/*
4wd BT Car
lesson 2.2
PWM
https://alash-electronics.kz/blogs/wiki
*/
int ledPin = 9; // Определение пина светодиода на D9
void setup () {
pinMode(ledPin, OUTPUT); // инициализация пина светодиода как выхода.
}
void loop () {
for (int value = 0; value <255; value = value + 1)
{
analogWrite (ledPin, value); // Светодиод постепенно зажигается
delay (30); // задержка 30 мс
}
for (int value = 255; value> 0; value = value-1)
{
analogWrite (ledPin, value); // Светодиод постепенно гаснет
delay (30); // задержка 30 мс
}
}
//*****************************************************************
Загрузите код на плату разработки, и светодиод будет мигать медленнее.