Raspberry Pi. Делаем плату индикации и пишем код на Python

Задача выглядит следующим — для одного из проектов необходимо сделать плату индикации состояния Raspberry Pi (несколько светодиодов), вынести на 40-50 см от корпуса и управлять состоянием светодиодов средствами Python 2.x. Для этого нам потребуется:

  1. Светодиод RGB 3528 в корпусе PLCC-4 — 1 шт.;
  2. Резисторы типоразмера 0805 на 470R — 3 шт.;
  3. Шлейф «радуга» или уже обжатые провода (ссылка);
  4. Raspberry Pi (можно купить у наших партнеров — компании RoboCraft) с установленным Rasbian;
  5. Инструменты для пайки и сборки;
  6. Желание/возможность сделать плату (плата односторонняя, так что ЛУТ здесь применим).
  7. Коннекторы на провод BLS-1

ЭТАП ПРОЕКТИРОВАНИЯ

Так как нам было необходимо сделать плату срочно, компоненты выбирались из того, что есть, решения принимались на месте. Для индикации был выбран светодиод RGB 3528 в корпусе PLCC-4 на 2500 мкд (ссылка на datasheet).

3528-photo

3528_plcc-4

Купить можно смело у китайцев на AliExpress (ссылка на позицию у известного нам продавца). Как можно видеть из схемы светодиода, для организации разных цветов коммутируется земля, а питание является общим (так сделано для того, чтобы можно было управлять отдельным цветом с помощью транзистора по схеме «общий эммитер»). Исходя из этой логики, получается следующая картина:

  1. Для того, чтобы зажечь отдельный цвет, нужно подключить его вывод к земле;
  2. Самый простой вариант подключения к Raspberry Pi — посадить каждый цвет на отдельный пин и управлять состояниями светодиодов следующим образом:
    • Если пишем в пин «0» (а по факту — прижимаем пин к земле) — светодиод горит;
    • Если пишем в пин «1» (или иначе — притягиваем пин к питанию) — светодиод не горит;

Раз нам нужно, чтобы индикация была вынесена на отдельную плату, схематика будет следующей (на разъем M1 не обращаем пока внимания):

schematic_rgb_module

Исходя из вышеописанного, схема подключения для Raspberry Pi v2 (ВНИМАНИЕ — НОМЕРА GPIO РАЗЛИЧАЮТСЯ ДЛЯ РАЗНЫХ ВЕРСИЙ Rasberry Pi) будет следующей:

  • Вывод красного светодиода -> GPIO17
  • Вывод зеленого светодиода -> GPIO27
  • Вывод синего светодиода -> GPIO22
  • Общий провод — это питание — на 3.3V

pic_gpio1_00

ЭТАП КОНСТРУИРОВАНИЯ ПЕЧАТНОЙ ПЛАТЫ

Ну что ж, пора переходить к железной части. Внимание — дальнейшие рассуждения не являются истиной в последней инстанции; мне такие проекты решения на момент разработки показались приемлемыми. Если вас что-то не устраивает в конструктиве печатной платы — вы можете ее развести самостоятельно.

Какие-либо специальные требования к плате не предъявлялись, поэтому ее размер был выбран минимальным, ширина дорожек — 0.4 мм, зазоры — 0.2 мм. Так как необходимо было вынести плату индикации на 40-50 см, необходимо было проводное соединение (провода нужны гибкие, в виду того, что так будет проще монтировать такой модуль и эксплуатировать). Крепеж и отверстия для монтажа не предусматривались.

Самым важным проектным решением было для увеличения надежности соединения (а по простому — чтобы не оторвали провода), укрепить проводное соединение с помощью отверстий, в которые эти провода пропускаются, а затем запаиваются с другой стороны (это именно тот коннектор M1 на схеме, который ни к чему не подключается). Довольно популярное решение, ничего нового. Для шлейфа радуги необходимы отверстия в 1.4 мм. Падстек может быть без поясков, я просто не стал переделывать, а заменил все падстеки на плате за одну операцию. Кроме того, с обратной стороны места изгиба провода были залиты термоклеем, опять же, для увеличения надежности.

На другом конце провода обжаты под коннекторы BLS-1.

BLS-1

Как итог, получилась следующая плата:

pcb

После сборки модуль выглядит так, как указано на фото ниже. Для простоты и наглядности, цвета проводов указывают на цвет светодиода, которым управляет пин GPIO.

rgb_module

ПИШЕМ КОД ДЛЯ Raspberry Pi НА Python

Для начала, установим библиотеку setuptools и библиотеку для работы с GPIO Raspberry Pi RPIO:

$ sudo apt-get install python-setuptools
$ sudo easy_install -U RPIO

Последовательность программирования c использованием RPIO для работы со светодиодом следующая:

  1. Импортируем библиотеку RPIO:
    import RPIO
    
  2. Инициализируем необходимые нам пины как выходы и записываем в них в качестве начального состояния высокий уровень (т.о. светодиод будет выключен). По умолчанию, пины нумеруются как GPIOxx, где XX — номер, который мы указываем:
    RED = 17
    GREEN = 27
    BLUE = 22
    
    RPIO.setup(RED, RPIO.OUT, initial = RPIO.HIGH)
    RPIO.setup(GREEN, RPIO.OUT, initial = RPIO.HIGH)
    RPIO.setup(BLUE, RPIO.OUT, initial = RPIO.HIGH)
    
  3. управляем нужными нам светодиодами
    RPIO.output(RED, RPIO.LOW) # включили красный
    RPIO.output(RED, RPIO.HIGH) # выключили красный
    RPIO.output(RED, RPIO.LOW) #включили синий
    

Таким нехитрым образом, мы получили плату для индикации работы устройства.

СМЕШЕНИЕ ЦВЕТОВ

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

1_2

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

БИБЛИОТЕКА ДЛЯ РАБОТЫ

Для упрощения работы с таким модулем, я написал простую библиотеку (доступна на нашем bitbucket вместе с файлами для производства) и тестовую последовательность (ниже на видео показана ее работа). Дам всего лишь комментарии к вызовам функций, т.к. сами функции достаточно объяснены в коде и понятны.

if __name__=='__main__':

    # Testing sequence
    RGB_Init() #инициализация пинов и выключение всех цветов

    RGB_Flashing(RGB_RedOn, 3, 0.1) #моргаем красным 3 раза с периодом 0.1 секунды
    RGB_Flashing(RGB_GreenOn, 3, 0.1)
    RGB_Flashing(RGB_BlueOn, 3, 0.1)
    RGB_Flashing(RGB_MagentaOn, 3, 0.1)
    RGB_Flashing(RGB_CyanOn, 3, 0.1)
    RGB_Flashing(RGB_YellowOn, 3, 0.1)
    RGB_Flashing(RGB_WhiteOn, 3, 0.1)

    RGB_RedOn()	#включаем перманентно красный
    sleep(0.5) #задержка 0.5 секунды
    RGB_GreenOn()
    sleep(0.5)
    RGB_BlueOn()
    sleep(0.5)
    RGB_MagentaOn()
    sleep(0.5)
    RGB_CyanOn()
    sleep(0.5)
    RGB_YellowOn()
    sleep(0.5)
    RGB_WhiteOn()
    sleep(0.5)

    RGB_Off() #выключаем все цвета. Эта же функция используется для того, чтобы после включение одного цвета выключить его.

В любом случае, если у вас возникнут вопросы по библиотеке — добро пожаловать в комментарии.

ВИДЕО РАБОТЫ МОДУЛЯ

ПОЛЕЗНЫЕ ССЫЛКИ

Ссылка на репозиторий bitbucket с библиотекой и файлами для производства платы
LED RGB 3528 datasheet

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