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

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

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

Начинаете свой первый проект на Raspberry Pi? Вот как можно быстро установите ОС Raspberry Pi на свое устройство .

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

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

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

о, что общее напряжение становится ниже реального напряжения, которое вы к нему прикладываете.

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

Что вам понадобится

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

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

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

Подготовка схемы

  1. Начнем со светодиода. На макетной плате разместите светодиод и подключите резистор с одной стороны. Сторона, на которой установлен резистор, не имеет значения.
Светодиод и резистор на макетной плате для руководства по светодиодам Raspberry Pi Pwm
  1. Подключите перемычку к катодной стороне. Э

    Что вам понадобится

    кт 11 на Raspberry Pi. Добавьте еще одну перемычку, ведущую к синей направляющей на макетной плате, затем добавьте еще одну перемычку от этой синей направляющей к контакту 9 на Raspberry Pi, который является GND.
Как использовать ШИМ для управления яркостью светодиодов на Raspberry Piberry Pi для Raspberry Pi Pwm Led Guide">

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

Подготовка схемыberry Pi">
  1. Вам нужно будет создать кнопки. Поместите кнопки на макетную плату и добавьте резистор к одной ножке каждой кнопки. Другая сторона резистора должна вести к синей шине макетной платы.

Совет. хотите узнать больше о кнопках? У нас есть полное руководство, которое покажет вам, как используйте кнопки с контактами Raspberry Pi GPIO .

  1. Добавьте перемычки параллельно резистору и кнопке. Подключите другую сторону этих контактов к контактам 13 (кнопка «Ярче») и 15 (кнопка «Диммер»).
Кнопки на макетной плате со светодиодом для Raspberry Pi Pwm Led Guide
  1. Используйте перемычку, чтобы соединить кнопки сбоку с красной направляющей макетной платы.
Красные перемычки на кнопках макетной платы для руководства Raspberry Pi Pwm Led
  1. Подключите красную шину к источнику 3,3 В на Raspberry Pi, например контакту 1.

Если вы предпочитаете Python, научитесь устанавливать и управлять несколькими версиями Python в Linux .

Подготовка кода

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

  1. Начните с приведенного ниже кода, который дает вам два способа импорта модулей в Python: первый импортирует модуль RPi.GPIOи позволяет вызывать его с помощью всего лишь GPIO, и второй импортирует только функцию sleep()из всего модуля time.
import RPi.GPIO as GPIO
from time import sleep
  1. Определите номера контактов, чтобы их было легче менять на случай, если вы передумаете позже.
ledPin = 11
brightenButton = 13
dimButton = 15
  1. Необязательно : добавьте строку GPIO.setwarnings(False), чтобы избежать появления предупреждающего сообщения GPIO при последующем запуске сценария.
  1. Установите метод выбора булавки. BOARD— хороший выбор для новичков, так как облегчает поиск контактов без необходимости сверяться с распиновкой. Другой метод — BCM, что означает «Broadcom». При этом используются номера Broadcom, присвоенные каждому контакту, которые могут отличаться в зависимости от марки вашего Raspberry Pi.
GPIO.setmode(GPIO.BOARD)
  1. Назначьте контакты GPIO в качестве входов или выходов. Мы назначаем ledPinв качестве выходного контакта, и его состояние всегда будет начинаться с LOW. Следующие две строки устанавливают brightenButtonи dimButtonв качестве входных контактов, которые слушают нажатия кнопок. Им также следует установить значение 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)
  1. Давайте объявим ШИМ. pwmLEDPin— это переменная, которая упрощает последующий ввод GPIO.PWM(ledPin, 100), а команда .start(0)запускает процесс ШИМ. Теперь мы можем изменить выходной сигнал ledPinПодготовка кодаl>
    pwmLEDPin = GPIO.PWM(ledPin, 100)
    pwmLEDPin.start(0)
    1. Рабочий цикл — это процент времени, в течение которого вывод активен во время пульсовой волны. Здесь мы сначала устанавливаем рабочий цикл на 100%. У нас было довольно продолжительное обсуждение этой темы в руководство по использованию серводвигателей с Raspberry Pi, , если вам интересно.
    dutyCycle = 100
    GPIO.output(ledPin, GPIO.HIGH)
    1. Что касается цикла, мы устанавливаем цикл while, который работает практически вечно.
    while True:

    <старый старт="9">

  2. В начале этого цикла цикла мы обновляем рабочий цикл.
pwmLEDPin.ChangeDutyCycle(dutyCycle)
  1. Давайте запрограммируем, что делает brightenButton. Когда Raspberry обнаруживает, что через контакт brightenButtonпроходит электричество, он отображает сообщение «BrightenButton имеет ВЫСОКИЙ уровень», что добавляет 5 к текущему значению рабочего цикла, пока оно не достигнет 100.
if GPIO.input(brightenButton) == GPIO.HIGH:
                print("brightenButton is HIGH")
                if dutyCycle < 100:
                        dutyCycle += 5
                        sleep(0.25)
                else: dutyCycle = 100
  1. При программировании функции dimButtonона делает обратное, уменьшая значение на 5, пока оно не достигнет 0.
elif GPIO.input(dimButton) == GPIO.HIGH:
                print("dimButton is HIGH")
                if dutyCycle > 0:
                        dutyCycle -= 5
                        sleep(0.25)
                else: dutyCycle = 0

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

import RPi.GPIO as GPIO
from time import sleep
 
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)
 
while True:
        pwmLEDPin.ChangeDutyCycle(dutyCycle)
        if GPIO.input(brightenButton) == GPIO.HIGH:
                print("brightenButton is HIGH")
                if dutyCycle < 100:
                        dutyCycle += 5
                        sleep(0.25)
                else: dutyCycle = 100
        elif GPIO.input(dimButton) == GPIO.HIGH:
                print("dimButton is HIGH")
                if dutyCycle > 0:
                        dutyCycle -= 5
                        sleep(0.25)
                else: dutyCycle = 0

Как это работает

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

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

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

Совет : предпочитаете Arduino? Вот полный руководство по началу работы с проектами Arduino .

Часто задаваемые вопросы

Какую минимальную частоту я могу генерировать с помощью Raspberry Pi?

Самая низкая частота, которую можно установить на Raspberry Pi, — 10 Гц. Аппаратное обеспечение не может поддерживать что-либо ниже этого.

Какую максимальную частоту я могу генерировать с помощью Raspberry Pi?

Максимальная частота, которую можно установить на Raspberry Pi, составляет 8000 Гц.

Можно ли превратить пульсовые волны в звуковые волны?

Да. С помощью пьезоэлектрического элемента вполне возможно превратить пульсовые волны в звуковые волны, которые вы сможете услышать. В этом случае изменение частоты меняет высоту тона, а изменение рабочего цикла регулирует громкость.

Все изображения Теренца Йомара Дела Круза.

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

Как это работает

Часто задаваемые вопросы

Какую минимальную частоту я могу генерировать с помощью Raspberry Pi?

Какую максимальную частоту я могу генерировать с помощью Raspberry Pi?

Можно ли превратить пульсовые волны в звуковые волны?

ПОХОЖИЕ СТАТЬИ

Популярные записи