Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
Следующие шаги представляют собой эксперименты, демонстрирующие, как работают светодиоды. Они показывают, как уменьшить яркость светодиода с равной скоростью и как постепенно увеличивать и уменьшать яркость.
Тебе понадобится:
- RaspberryPi (я использовал более старый Pi, мой Pi-3 уже используется, но подойдет любой Pi.)
- Макетная плата
- 5 мм красный светодиод
- Резистор 330 Ом (не критично, 220-560 Ом подойдет.)
- Монтажный провод
Пи-сапожник, который я использовал от Adafruit, не нужен, но он упрощает макетирование.
WiringPi - это набор библиотек для программирования RaspberryPi на языке C. Инструкции по загрузке, установке и использованию находятся по адресу
Чтобы установить wiringPi, следуйте инструкциям на этой странице:
Чтобы получить список номеров контактов wiringPi, введите в командной строке команду gpio readall.
В более новых версиях Raspian wiringPi устанавливается по умолчанию.
Шаг 1: широтно-импульсная модуляция
Светодиоды всегда работают при одинаковом напряжении независимо от яркости. Яркость определяется прямоугольным осциллятором, и время, в течение которого напряжение высокое, определяет яркость. Это называется широтно-импульсной модуляцией (ШИМ). Это контролируется функцией wiringPi pwmWrite (pin, n), где n имеет значение от 0 до 255. Если n = 2, светодиод будет в два раза ярче, чем n = 1. Яркость всегда удваивается, когда n удваивается. Таким образом, n = 255 будет вдвое ярче, чем n = 128.
Значение n часто выражается в процентах, называемых рабочим циклом. На рисунках показаны осциллограммы для рабочих циклов 25, 50 и 75%.
Шаг 2: светодиод и резистор
В этом нет необходимости, но наличие нескольких таких под рукой может значительно упростить создание макета.
Припаяйте резистор к короткому светодиоду светодиода. Используйте резистор 220-560 Ом.
Шаг 3: неравномерное затемнение
Постройте схему, как показано на схеме. Это похоже на схему мигания светодиода. Он использует вывод 1 wiringPi, потому что вам нужно использовать вывод с включенной ШИМ. Скомпилируйте программу и запустите ее. Вы заметите, что чем ярче светодиод, тем медленнее он гаснет. По мере приближения к самому тусклому свету он будет очень быстро тускнеть.
/******************************************************************
* Скомпилировать: gcc -o fade1 -Wall -I / usr / local / include -L / usr / local / lib * fade1.c -lwiringPi * * Выполнить: sudo./fade1 * * Все номера контактов являются номерами wiringPi, если не указано иное. ************************************************ **************** / #include int main () {wiringPiSetup (); // Настройка требуется wiringPi pinMode (1, PWM_OUTPUT); // pwmSetMode (PWM_MODE_MS); // Режим метки / пробела int i; while (1) {for (i = 255; i> -1; i--) {pwmWrite (1, i); задержка (10); } для (я = 0; я <256; я ++) {pwmWrite (1, я); задержка (10); }}}
На следующем шаге показано, как уменьшить яркость светодиода с постоянной скоростью и одним оператором for.
Шаг 4: Шаг 4: вверх и вниз за один () и с равномерной скоростью
Чтобы светодиод гаснул с постоянной скоростью, задержка () должна увеличиваться с экспоненциальной скоростью, потому что половина рабочего цикла всегда дает половину яркости.
Линия:
int d = (16-я / 16) ^ 2;
вычисляет обратный квадрат яркости для определения длительности задержки. Скомпилируйте и запустите эту программу, и вы увидите, что светодиодный индикатор будет гаснуть с постоянной скоростью.
/******************************************************************
* Скомпилировать: gcc -o fade1 -Wall -I / usr / local / include -L / usr / local / lib * fade2.c -lwiringPi * * Выполнить: sudo./fade2 * * Все номера контактов являются номерами wiringPi, если не указано иное. ************************************************ **************** / #include int main () {wiringPiSetup (); // Настройка требуется wiringPi pinMode (1, PWM_OUTPUT); // pwmSetMode (PWM_MODE_MS); // Режим метки / пробела while (1) {int i; int x = 1; для (я = 0; я> -1; я = я + х) {int d = (16-я / 16) ^ 2; // вычислить обратный квадрат индекса pwmWrite (1, i); задержка (d); если (я == 255) х = -1; // переключаем направление на пике}}}