Светодиоды

Ответить
Oleg
Сообщения: 186
Зарегистрирован: 12 июл 2023, 12:09
Светодиоды

Сообщение Oleg »

Управление светодиодными индикаторами (LED) - это задача, которая, вероятно, будет в самом начале списка дел у любого электронщика. Разнообразных светодиодов существует невероятное множество: от самых простых до высокомощных, от инфракрасных до ультрафиолетовых.

На рисунке показана подборка светодиодов с самыми разными требованиями к силе тока, причем некоторые вполне нормально работают от цифрового выхода, а для управления другими требуются транзисторы или целые электронные схемы.
Разнообразие светодиодов.jpg
Oleg
Сообщения: 186
Зарегистрирован: 12 июл 2023, 12:09
Обычные светодиоды

Сообщение Oleg »

Обычные светодиоды - это те самые разноцветные изделия диаметром 5 мм (реже - 10 мм или 3 мм), которые зажигаются от не очень сильного тока, поэтому ими можно управлять непосредственно с выхода Arduino или Raspberry Pi.

На рисунке показано, как такие светодиоды обычно подключают к цифровому выходу Arduino или Raspberry Pi Резистор здесь нужен для ограничения тока, проходящего через светодиод, и на то есть две причины: во-первых, чтобы не превышать максимальное значение силы тока, на которое рассчитан светодиод (в противном случае он прослужит недолго). и во-вторых, чтобы не превышать предельную величину выходного тока на отдельном контакте платы или суммарно на всех ее выходных контактах.
Подключение светодиода к цифровому выходу.jpg
Подключение светодиода к цифровому выходу.jpg (12.45 КБ) 364 просмотра
Oleg
Сообщения: 186
Зарегистрирован: 12 июл 2023, 12:09
Ограничение тока

Сообщение Oleg »

Когда светодиод подключен так, как показано на рисунке "Подключение светодиода к цифровому входу", то во всей цепи установится более или менее постоянное напряжение. Оно называется прямым напряжением светодиода. В зависимости от цвета светодиода прямое напряжение может быть различным: у красных светодиодов оно обычно минимальное, а у синих и белых наивысшее среди всех светодиодов, дающих видимый свет (таблица).

Существуют также инфракрасные (ИК) светодиоды, наподобие тех, что устанавливаются в телевизионных пультах, а также ультрафиолетовые (УФ) светодиоды, которые часто используют на вечеринках для придания фиолетового оттенка белым одеждам либо для проверки подлинности банкнот.

Кроме прямого напряжения у светодиода есть еще одна важная характеристика, которую нужно знать, - это прямой ток, который вы собираетесь через него пропускать. Большинство светодиодов хотя бы немного светятся от тока силой 1 МА или чуть менее, но, как правило, достигают оптимальной яркости при токе около 20 мА. Это достаточно широкий диапазон, поэтому из соображений безопасности используйте резистор на 470 Ом при работе с любым светодиодом, который подключаете к Arduino или Raspberry Pі, хотя светодиод и будет светить не столь ярко, как мог бы.

Для расчета сопротивления последовательного резистора удобно воспользоваться специальным веб-сервисом, который все за вас рассчитает. Подобный сервис находится по адресу led.linear1.org/lled.wiz, его окно показано на рисунке ниже.

Как можно видеть, за напряжение источника питания здесь принято 3,3 В (очевидно, расчет ведется для Raspberry Pi), а максимальная сила тока, допустимая для любого контакта Raspberry Pi, составляет 16 мА. Калькулятор сообщает, что при этих исходных данных для светодиода с прямым напряжением 2,2 В нужно использовать резистор сопротивлением 82 Ом.

Если вы хотите произвести такой расчет сами, то сначала вычтите значение прямого напряжения (2,2 В) светодиода из напряжения источника питания 3,3 В. Получится 1,1 В. Затем рассчитайте сопротивление резистора по закону Ома: R=V/1=1,1 B / 16 мА = 68,75 Ом.

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

Обратите внимание: значения сопротивления откорректированы и приближены к стандартным значениям таких резисторов, которые имеются в свободном доступе.
Онлайн-калькулятор для работы с последовательными резисторами
Онлайн-калькулятор для работы с последовательными резисторами
Резисторы, ограничивающие силу тока, для разных светодиодов
Резисторы, ограничивающие силу тока, для разных светодиодов
Примечание

В столбце ИК для устройства Рі (3,3 В; 3 мА) указан символ х. Дело в том, что инфракрасные светодиоды для пультов дистанционного управления обычно требуют для работы как минимум 10 мА, причем проектируются с расчетом на силу тока 100 мА или более, - только при таких значениях они получаются достаточно «дальнобойными».
Oleg
Сообщения: 186
Зарегистрирован: 12 июл 2023, 12:09
Re: Светодиоды

Сообщение Oleg »

Имея такой отличный выбор разноцветных светодиодов, возьмем красный, желтый и зеленый излучатели и сделаем светофор, управляемый с Arduino или Raspberry Pi (рисунок ниже).

Светодиоды должны зажигаться в такой последовательности: 1. Красный.

2. Красный с желтым.

3. Зеленый.

4. Желтый.
Светофор на Arduino.jpg
Комплектующие

В этом проекте для работы с Arduino и Raspberry Pi понадобятся следующие комплектующие:

LED1 - Красный светодиод
LED2 - Желтый светодиод
LED3 - Зеленый светодиод
R1-3 - Резисторы на 150 Ом
400-точечная беспаечная макетная плата
Перемычки "папа-папа"
Перемычки "мама-папа" (только для Рі)

Со временем вы, возможно, начнете подбирать резисторы с самыми разными значениями, однако в этом проекте я предлагаю компромиссный вариант резисторы на 150 Ом и для Arduino, и для Raspberry Pi, причем для светодиодов всех трех цветов. Если вы захотите добиться максимальной яркости, то подберите к ним оптимальные резисторы.

Общая конструкция

Каждый из трех светодиодов подключен к отдельному выходному контакту на Arduino или Raspberry Pi.

Подключение к Raspberry Pi

В версии проекта, выполняемой на основе Raspberry Pi, перемычки «папа-папа» заменяются на перемычки «мама-папа», и макетная плата в той же компоновке подключается к контактам GPIO 18, 23 и 24.
Компоновка макетной платы для светофора под управлением Raspberry Pi.jpg

Программа для Raspberry Pi

Код: Выделить всё

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

red_pin = 18
orange_pin = 23
green_pin = 24

GPIO.setup(red_pin, GPIO.OUT)
GPIO.setup(orange_pin, GPIO.OUT)
GPIO.setup(green_pin, GPIO.OUT)

def set_leds(red, orange, green):    # (1)
    GPIO.output(red_pin, red)
    GPIO.output(orange_pin, orange)
    GPIO.output(green_pin, green)

try:         
    while True:
        set_leds(1, 0, 0)
        time.sleep(3)
        set_leds(1, 1, 0)
        time.sleep(0.5)
        set_leds(0, 0, 1)
        time.sleep(5)
        set_leds(0, 1, 0)
        time.sleep(0.5)
          
finally:  
    print("Cleaning up")
    GPIO.cleanup()
Функция set_leds, определяемая в строке, обозначенной комментарием 1, точно так же, как и в случае с Arduino, используется для того, чтобы не захламлять главный цикл множеством функций GPIO. output.
viewtopic.php?p=671#p671
Oleg
Сообщения: 186
Зарегистрирован: 12 июл 2023, 12:09
Шим и светодиоды

Сообщение Oleg »

Попытка управления яркостью светодиода регулированием напряжения на нем обычно не приносит удовлетворительных результатов, поскольку в начале диапазона напряжений на светодиоде имеет место обширная мертвая зона, и лишь после ее преодоления напряжение достигает такой величины, которое позволяет светодиоду излучать хоть какой-то свет. Для управления яркостью светодиода лучше всего подходят аналоговые выходы с ШИМ (см. далее «Широтно-импульсная модуляция»). Светодиоды могут включаться и выключаться очень быстро гораздо быстрее, чем за миллионную долю секунды, при этом с использованием ШИМ светодиод и мерцает на частоте ШИМ, однако зрительно это воспринимается просто как изменение яркости, пропорциональное тому, как долго светодиод фактически остается во включенном состоянии.

ШИРОТНО-ИМПУЛЬСНАЯ МОДУЛЯЦИЯ

До сих пор мы управляли устройствами очень «по-цифровому» - т. е. включали, а за- тем выключали. Но что, если требуется организовать управление более "аналоговым" образом? Допустим, вы хотите управлять скоростью двигателя или яркостью светодиода. Для этого нужно научиться управлять мощностью, подаваемой на интересующее вас устройство.

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

На рисунке показано, как действует ШИМ. При этом предполагается, что напряжение на СРІО-контакте Raspberry Pi составляет 3,3 В. Вам также понадобится транзистор, подключенный к контакту GPIO, он нужен для подачи тока, достаточного для управления двигателем.

Отношение длительности импульса к периоду его следования называется коэффициентом заполнения. Если импульсы соответствуют включенному состоянию на протяжении лишь 5% всего времени цикла (коэффициент заполнения равен 5%), то на Двигатель будет поступать не слишком много энергии, и он станет вращаться очень медленно (либо светодиод будет светить тускло). Стоит повысить коэффициент заполнения до 50% - и двигатель или светодиод получат половину мощности, соответственно, скорость вращения или яркость составят примерно половину от максимума. Если коэффициент заполнения возрастет до 90%, то двигатель будет вращаться почти с полной скоростью, а светодиод - светить в полную силу.

Чтобы выключить двигатель или светодиод, достаточно лишь снизить коэффициент заполнения до 0, а для разгона на полную мощность - поднять его до 100%. Удержание контакта СРІO постоянно в состоянии high и обеспечит коэффициент заполнения 100%

Как Arduino, так и Raspberry Pi позволяют использовать на выходных контактах широтно-импульсную модуляцию. На Arduino Uno она может включаться только на контактах D3, D5, D6, D9, D10 и D11 - эти контакты на самой плате Arduinо помечены тильдой (~). Частота ШИМ на Arduino Uno для большинства контактов составляет 490 Гц (импульсов в секунду). Исключение представляют контакты 5 и 6, работающие с частотой 980 Гц.

Для управления яркостью светодиода или скоростью двигателя вполне достаточно частоты ШИМ 490 Гц, которая установлена в Arduino по умолчанию.
Широтно-импульсная модуляция.jpg
Oleg
Сообщения: 186
Зарегистрирован: 12 июл 2023, 12:09
RGB-светодиоды

Сообщение Oleg »

RGB-светодиод - это единая сборка, в которой на самом деле находятся три светодиода: один синего, один красного, и один зеленого цвета. Используя ШИМ для управления яркостью каждого из этих светодиодов, можно придать RGB-светодиоду любой из трех цветов.

Хотя в RGB-светодиоде содержится три обычных двухвыводных светодиода, это не означает, что корпус светодиода должен иметь шесть выводов, по одному выводу от каждого светодиода можно соединить вместе, придав ему вид обычного вывода.

Если подключить друг к другу отрицательные выводы всех светодиодов, то получившийся вывод будет называться общим катодом, а если проделать то же самое с положительными выводами, получится общий анод.
Схема общего катода RGB-светодиода.jpg
Схема общего катода RGB-светодиода.jpg (9.92 КБ) 356 просмотров
RGB-светодиод может излучать как направленный свет, так и рассеянный. Если светодиод направленный, то в сборке будут четко различаться красный, зеленый и синий светодиоды, и их цвета почти не станут смешиваться друг с другом. В рассеянных сборках цвета трех светодиодов смешиваются друг с другом гораздо лучше.

Далее мы будем работать с дисплеями, основанными на RGB-светодиодах, имеющих собственную управляющую микросхему, которая ограничивает поступление тока на красный, зеленый и синий светодиоды, и в то же время служит им последовательным интерфейсом передачи данных. Arduino или Raspberry Pi могут управлять через этот интерфейс множеством таких светодиодов, и для этого задействуется всего один их выходной контакт.
Oleg
Сообщения: 186
Зарегистрирован: 12 июл 2023, 12:09
Re: Свтодиоды

Сообщение Oleg »

В этом эксперименте мы будем управлять цветом RGB-светодиода с Arduino и с Raspberry Pi. В той версии эксперимента, которая выполняется на Raspberry Pi для управления цветом мы воспользуемся графическим пользовательским интерфейсом с тремя ползунками. На рисунках показаны вариант эксперимента для Raspberry Pi и схема эксперимента.
Подключение макетной платы для смешивания цветов при помощи aspberry Pi.jpg
Подключение макетной платы для смешивания цветов при помощи aspberry Pi.jpg
Схема эксперимента с RGB-светодиодом.jpg
Схема эксперимента с RGB-светодиодом.jpg
Комплектующие

В этом эксперименте для работы с Arduino и Raspberry Pi понадобятся следующие комплектующие:

LED1 - RGB-светодиод
R1-3 - Резистор 470 Ом 0,25 Вт
400-точечная беспаечная макетная плата
Перемычки «папа-папа»
Перемычки мама-папа (только для Рі)


Напомню, что перемычки «мама-папа» понадобятся только для подключения к макетной плате контактов GPIO Raspberry Pi (если вы планируете провести этот эксперимент с Raspberry Pi тоже).

Достичь оптимальной яркости и наилучшего цветового баланса можно лишь при внимательном подборе резисторов соответствующих сопротивлений. Однако при обретать комплектующие проще, если на всех трех каналах использовать резисторы с одним и тем же значением. В нашем случае я рекомендую в качестве универсальных применить резисторы на 470 Ом - они будут работать и с Raspberry Pi, и с Arduino.

Подключение к Raspberry Pi

В версии эксперимента, ориентированной на Raspberry Pi, мы не просто будем вводить команды для изменения цвета, а воспользуемся небольшим окном с пользовательским интерфейсом, содержащим три ползунка - по одному на каждый цветовой канал. Когда вы будете менять положение ползунков, станет меняться и цвет RGB-светодиода.

Поскольку в этой программе организуется графический пользовательский интерфейс, а в ЅЅН графический интерфейс отсутствует, вам потребуется подключить к Raspberry Pi клавиатуру, мышь и монитор.

Компоновка макетной платы для работы с Raspberry Pi показана на рисунке - она точно такая же, как и в случае с Arduino, за тем исключением, что при работе с Raspberry Pi вам понадобятся перемычки «мама-папа». В качестве ШИМ-выходов здесь задействуются GPIO-контакты 18, 23 и 24.

Компоновка макетной платы для смешивания цветов RGB-светодиода с помощью Raspberry Pi
Компоновка макетной платы для смешивания цветов RGB-светодиода с помощью Raspberry Pi
Программа для Raspberry Pi.

В программе для этого эксперимента, написанной на языке Python, применяется Фреймворк Tkinter. С его помощью можно создавать оконные приложения, имеющие свои элементы управления, что дает возможность не ограничиваться примитивной командной строкой, с которой вы работали до сих пор. Соответственно и код программы получается немного длиннее, чем обычно. Кроме того, местами в нем используется сравнительно сложное программирование.

Рассмотрим код:

Код: Выделить всё

from Tkinter import *       
import RPi.GPIO as GPIO
import time


GPIO.setmode(GPIO.BCM)  # (1)
GPIO.setup(18, GPIO.OUT)
GPIO.setup(23, GPIO.OUT)
GPIO.setup(24, GPIO.OUT)


pwmRed = GPIO.PWM(18, 500) # (2)
pwmRed.start(100)

pwmGreen = GPIO.PWM(23, 500)
pwmGreen.start(100)

pwmBlue = GPIO.PWM(24, 500)
pwmBlue.start(100)

class App:
    
    def __init__(self, master): #(3)
        frame = Frame(master)  #(4)
        frame.pack()
        
        Label(frame, text='Red').grid(row=0, column=0) # (5)
        Label(frame, text='Green').grid(row=1, column=0)
        Label(frame, text='Blue').grid(row=2, column=0)
        
        scaleRed = Scale(frame, from_=0, to=100,     # (6)
              orient=HORIZONTAL, command=self.updateRed)
        scaleRed.grid(row=0, column=1)
        scaleGreen = Scale(frame, from_=0, to=100,
              orient=HORIZONTAL, command=self.updateGreen)
        scaleGreen.grid(row=1, column=1)
        scaleBlue = Scale(frame, from_=0, to=100,
              orient=HORIZONTAL, command=self.updateBlue)
        scaleBlue.grid(row=2, column=1)

    def updateRed(self, duty):     # (7)
        # change the led brightness to match the slider
        pwmRed.ChangeDutyCycle(float(duty))

    def updateGreen(self, duty):
        pwmGreen.ChangeDutyCycle(float(duty))
    
    def updateBlue(self, duty):
        pwmBlue.ChangeDutyCycle(float(duty))


root = Tk()  # (8)
root.wm_title('RGB LED Control')
app = App(root)
root.geometry("200x150+0+0")
try:
    root.mainloop()
finally:  
    print("Cleaning up")
    GPIO.cleanup()
Уточним некоторые моменты этой программы по пунктам, воспользовавшись разметкой строк, сделанной в комментариях:
  1. Сконфигурируем Рі так, чтобы можно было работать с именами контактов по системе Broadcom, а не просто с обозначениями позиций.
  • Запускаем широтно-импульсную модуляцию (ШИМ) на красном, зеленом и синем канале, чтобы управлять яркостью светодиодов.
  • Эта функция вызывается при создании приложения.
  • В этом фрейме содержатся различные элементы управления из графического
    интерфейса.
  • Создаем надписи и располагаем каждую в своей ячейке сетки.
  • Создаем ползунки и располагаем каждый в своей ячейке сетки. Атрибут command указывает, какой метод нужно вызывать при перемещении ползунка.
  • Этот метод и подобные методы для других цветов вызываются при перемещении ползунка.
  • Запускаем графический пользовательский интерфейс, задаем для окна название, размер и положение.
Загружаем и выполняем программу

Запустим программу от имени администратора при помощи следующей команды:
$ sudo python mixing_colors.py
Спустя пару секунд появится окно, показанное на рисунке. При перемещении ползунков цвет RGB-светодиода будет меняться.
Перемещаем ползунки для изменения цвета RGB-светодиода
Перемещаем ползунки для изменения цвета RGB-светодиода
Перемещаем ползунки для изменения цвета RGB-светодиода.jpg (13.2 КБ) 355 просмотров

Ответить