Как управлять яркостью светодиода на Raspberry Pi с помощью ШИМ

Если вы хотите сделать на Raspberry Pi мигающий светодиод, подождите, пока не научитесь управлять его яркостью! В этом уроке мы будем работать с парой кнопок для регулировки яркости светодиодов на Raspberry Pi.

Если вы только начинаете свой первый проект Raspberry Pi, вот как быстро установить операционную систему для Raspberry Pi на ваше устройство.

Что ШИМ делает со светодиодами?

ШИМ, или широтно-импульсная модуляция, представляет собой метод искусственного снижения выходного напряжения контактов GPIO (ввод/вывод общего назначения) Raspberry Pi. Пустышка означает, что вы на самом деле не снижаете напряжение, а просто включаете и выключаете его так быстро, что общее напряжение становится ниже фактического напряжения, которое вы подаете.

Для светодиодных или светодиодных светильников увеличение общего напряжения сделает свет ярче, а уменьшение напряжения сделает свет тусклее. Но поскольку у Raspberry Pi нет аналогового выхода, в статье для управления яркостью светодиода используется ШИМ.

Необходимые вещи

  1. 2 кнопки
  2. 3 резистора (250–550 Ом подойдут. Используйте меньший номинал, если светодиод слишком темный)
  3. 1 светодиод (любого цвета)
  4. Перемычка
  5. Raspberry Pi (любая модель, кроме Pi Pico)

Как использовать ШИМ для управления яркостью светодиодов на Raspberry Pi

В этом уроке используются две кнопки, чтобы сделать светодиод ярче или тусклее с помощью ШИМ. Нажатие кнопки «ярче» увеличит выходную мощность ШИМ, а нажатие кнопки «тусклее» уменьшит выходную мощность.

Подготовьте схему

1. Начнем со светодиодных фонарей. На макетной плате разместите светодиод и с одной стороны подключите резистор. Сторона, на которой установлен резистор, не имеет значения.

Как управлять яркостью светодиода на Raspberry Pi с помощью ШИМ. Изображение 1

2. Подключите перемычку со стороны катода. Это будет указывать на контакт 11 на Raspberry Pi. Добавьте еще одну перемычку, ведущую к синей линии на макете, затем добавьте еще одну перемычку от этой синей линии к контакту 9 на Raspberry Pi, который является GND.

Как управлять яркостью светодиода на Raspberry Pi с помощью ШИМ. Изображение 2

Примечание. Чтобы найти правильный номер контакта на Raspberry Pi, держите плату так, чтобы лоток для контактов GPIO находился с правой стороны. Верхний левый контакт должен быть контактом 1, правый — контактом 2, а нижний — контактом 3.

Как управлять яркостью светодиода на Raspberry Pi с помощью ШИМ. Изображение 3

3. Вам нужно будет собрать кнопки. Разместите кнопки на макетной плате и добавьте резистор к одному выводу каждой кнопки. Другая сторона резистора будет вести к синей линии макета.

4. Добавьте перемычку параллельно резистору и кнопке. Подключите другой конец этих контактов к контактам 13 (кнопка «Ярче») и 15 (кнопка «Тикше»).

Как управлять яркостью светодиода на Raspberry Pi с помощью ШИМ. Изображение 4.

5. С помощью перемычек подключите боковые кнопки к красной линии макета.

Как управлять яркостью светодиода на Raspberry Pi с помощью ШИМ. Изображение 5

6. Подключите красную линию к источнику 3,3 В на Raspberry Pi, как контакт 1.

Если Python — ваш язык программирования, узнайте, как установить несколько версий Python в Linux и управлять ими.

Подготовьте код

В вашем любимом редакторе кода создайте новый файл и сохраните его как «rpi-lcdpwm.py».

1. Начните с приведенного ниже кода, который дает вам два способа импорта модулей на Python: первый импортирует модуль RPi.GPIO и позволяет вызывать его только по GPIO, а второй импортирует только функции сна() из всего времени модуля.

импортировать RPi.GPIO как GPIO из режима ожидания импорта времени

2. Определите количество контактов, чтобы упростить внесение изменений на случай, если позже вы передумаете.

LEDPin = 11 BrightenButton = 13 dimButton = 15

3. Необязательно: добавьте строку GPIO.setwarnings(False), чтобы избежать появления предупреждающего сообщения GPIO при последующем запуске сценария.

4. Установите метод выбора контактов. BOARD — хороший выбор для новичков, так как облегчает поиск контактов без необходимости обращаться к распиновке. Другой метод — BCM, сокращение от Broadcom, в котором используются номера Broadcom, назначенные каждому контакту, которые могут различаться в зависимости от модели Raspberry Pi.

GPIO.setmode(GPIO.BOARD)

5. Назначьте контакты GPIO в качестве входа или выхода. В статье указан выходной контакт для светодиодов, который всегда запускается в состоянии LOW. Следующие две строки устанавливают входные контакты BrightButton и dimButtonmake, отслеживающие нажатия кнопок. Им также необходимо установить GPIO.PUD_DOWN, чтобы указать использование подтягивающего резистора.

GPIO.setup(ledPin, GPIO.OUT, Initial=GPIO.LOW) GPIO.setup(brightenButton, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(dimButton, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

6. Пожалуйста, укажите ШИМ. pwmLEDPini — это переменная, которая позволяет позже легко ввести GPIO.PWM(ledPin, 100) и команду .start(0) для запуска процесса ШИМ. Теперь вы можете изменить выходной сигнал светодиода, используя ШИМ.

pwmLEDPin = GPIO.PWM(ledPin, 100) pwmLEDPin.start(0)

7. Рабочий цикл — это процент времени, в течение которого вывод активен во время пульсовой волны. В данном примере сначала устанавливается рабочий цикл на 100%.

DutyCycle = 100 GPIO.output(ledPin, GPIO.HIGH)

8. Что касается цикла, то в статье рассматривается настройка цикла, который выполняется почти вечно.

пока правда:

9. Когда начинается эта итерация, рабочий цикл также обновляется.

pwmLEDPin.ChangeDutyCycle(dutyCycle)

10. Запрограммируйте функцию BrightenButton. Когда Raspberry обнаруживает ток, протекающий через контакт BrightenButton, он отображает сообщение о том, что BrightenButton имеет ВЫСОКИЙ уровень, добавляя 5 к текущему значению рабочего цикла, пока оно не достигнет 100.

if GPIO.input(brightenButton) == GPIO.HIGH: print(“brightenButton ВЫСОКИЙ”) ifdutyCycle

11. При программировании функции dimButton поступайте наоборот, уменьшайте значение на 5, пока оно не достигнет 0.

elif GPIO.input(dimButton) == GPIO.HIGH: print(“dimButton имеет ВЫСОКИЙ уровень”), еслиdutyCycle > 0:dutyCycle -= 5 Sleep(0,25) else:dutyCycle = 0

Окончательный код

импортировать RPi.GPIO как GPIO из времени импорта снаledPin = 11 BrightenButton = 13 dimButton = 15 GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) GPIO.setup(ledPin, GPIO.OUT, Initial=GPIO.LOW) GPIO .setup(brightenButton, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(dimButton, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) pwmLEDPin = GPIO.PWM(ledPin, 100) pwmLEDPin.start(0)dutyCycle = 100 GPIO.output(ledPin, GPIO.HIGH) в то время как True: pwmLEDPin.ChangeDutyCycle(dutyCycle) if GPIO.input(brightenButton) == GPIO.HIGH: print(“brightenButton ВЫСОКИЙ”) ifdutyCycle 0:dutyCycle -= 5 Sleep( 0.25) иначе: DutyCycle = 0

Заставьте код работать

Во-первых, вам понадобится терминал. Вы можете использовать встроенный терминал Raspberry Pi или управлять Raspberry Pi через SSH на отдельном компьютере. Через терминал вам следует перейти в каталог скрипта Python и ввести python3 rpi-ledpwm.py или имя файла, которое вы использовали.

Иногда светодиодный индикатор выглядит так, будто он мигает. В этом случае частота ШИМ может быть слишком низкой. Вы можете увеличить частоту, увеличивая число pwmLEDPin = GPIO.PWM(ledPin, 100), пока мерцание больше не исчезнет.

Если переходы кажутся вам зернистыми, уменьшите время сна (0,25) внутри цикла while. Однако процесс преобразования будет быстрее, если вы уменьшите этот временной уровень, поэтому не уменьшайте его слишком сильно.

В приведенной выше статье вы познакомились с «Как управлять яркостью светодиодов на Raspberry Pi с помощью ШИМ». СоветыНадейтесь, что эта статья вам поможет! Если эта статья кажется вам интересной и полезной, не забудьте поделиться ею. Спасибо!

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *