Советы

Raspberry Pi для домашней автоматизации. Структурная схема

Raspberry Pi для домашней автоматизации. Структурная схема

Рисунок 1. Блочная диаграмма аппаратной части системы

Описание процесса монтажа аппаратной части системы занимает много времени, но является достаточно простым. В первую очередь следует соединить блок питания с стенной розеткой с помощью удлинителя, отрезав розетку это удлинителя. Зачистите провода и закрепите их с помощью винтов в терминалах блока питания. Далее соедините Raspberry Pi с блоком питания, отрезав разъем типа A от кабеля USB и соединив провода с соответствующими выводами блока питания, и вставьте разъем micro USB в разъем питания RPi. После этого следует зачистить оба конца двух жил гибкого кабеля и соединить их с соответствующими терминалами с обозначениями GND и JDVcc блока питания и блока реле. Наконец, следует удалить джампер, соединяющий вывод с обозначением JDVcc с выводом с обозначением Vcc. В том случае, если вы не удалите этот дампер, на предназначенные для напряжения 3.3 В выводы RPi будет подано напряжение в 5 В, которое с высокой вероятностью выведет компьютер из строя.

Теперь, когда питание подведено ко всем терминалам, следует соединить линии IN1-IN8 модуля реле с соответствующими выводами разъема GPIO с помощью гибкого кабеля таким образом, как показано на Рисунке 2. Представленный в данной статье код был разработан для случая, когда выводы IN1-IN7 соединены с выводами GPIO1-GPIO7. В том случае, если вы решите соединить данные выводы по-другому, вам придется модифицировать соответствующим образом ваш код.

Схема расположения выводов разъема GPIO Raspberry Pi приведена на Рисунке 2. На порты ввода-вывода Raspberry Pi подается напряжение 3.3 В, а модуль реле работает с напряжением 5 В. Однако, реле изолированы от выводов GPIO Raspberry Pi при помощи оптопар. На оптопары может подаваться напряжение 3.3 В с вывода Vcc. На вывод Vcc модуля реле может быть подано напряжение 3.3 В с разъема GPIO Raspberry Pi. Убедитесь в том, что вы убрали джампер, замыкающий выводы Vcc и JDVcc модуля реле. На вывод JDVcc должно подаваться напряжение 5 В для корректной работы реле. Рассматриваемый модуль реле размыкает контакты в активном состоянии. Из этого следует, что вы должны заземлить терминалы IN1-IN8 для включения реле.

Рисунок 2. Схема расположения выводов разъема GPIO Raspberry Pi

Предупреждение: проявляйте особую осторожность при соединении аппаратных компонентов системы. Последствия поражения электрическим током могут оказаться фатальными!

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

Рисунок 3. Монтаж аппаратной части системы

Программное окружение

Я начал создание своего программного окружения с установки образа операционной системы Raspbian. Перед началом установки образа операционной системы вам потребуется подготовить дисплей, поддерживающий передачу изображения по HDMI, клавиатуру и мышь с разъемами USB, а также сетевой кабель для соединения с системой по протоколу Ethernet. Также вы можете установить соединение с системой посредством адаптера Wi-Fi. Создайте загрузочную SD-карту для первой загрузки системы в соответствии с инструкциями, приведенными на ресурсе http://www.raspberrypi.org/documentation/installation/installing-image . В процессе первой загрузки системы установщик осуществит настройку операционной системы и разместит данные из ее образа на всем доступном пространстве карты памяти. После первой загрузки вы должны иметь возможность входа в систему с помощью стандартных данных учетной записи пользователя (имя пользователя "pi" и пароль "raspberry").

Обновление системы является разумным действием, которое должно выполняться сразу же после успешного входа в систему. Образ операционной системы Raspbian базируется на пакетах программного обеспечения дистрибутива Debian и использует приложение aptitude в качестве менеджера пакетов программного обеспечения. Кроме того, вам понадобятся пакеты программного обеспечения с именами python , pip и git . Я также мог бы порекомендовать установку Webmin для упрощения процесса администрирования системы. Инструкции по установке Webmin приведены на ресурсе http://www.webmin.com/deb.html (следуйте рекомендациям, приведенным в разделе "Using the Webmin APT repository"):

Sudo apt-get update && sudo apt-get dist-upgrade sudo apt-get install python python-pip git git-core

После этого вам придется настроить соединение с использованием адаптера Wi-Fi. Вы можете найти подробные инструкции на ресурсе http://www.raspberrypi.org/documentation/configuration/wireless . Я рекомендую использовать вариант wicd-curses . На данном этапе вы можете изменить параметры настройки Raspberry Pi с помощью команды sudo raspi-config . После ввода данной команды вы получите доступ к удобному графическому интерфейсу, который позволит вам установить значения таких параметров, как объем оперативной памяти, разделяемой с графическим процессором, параметры быстродействия центрального процессора, режим использования графического интерфейса в процессе загрузки и других.

Другим полезным инструментом является интегрированная среда разработки Cloud 9 IDE . Cloud 9 IDE позволит вам редактировать свой код на уровне Raspberry Pi посредством веб-браузера. Данная интегрированная среда разработки также предоставит вам доступ к интерфейсу командной строки в рамках веб-браузера. Вы можете разрабатывать и исполнять любой код, не покидая свой веб-браузер. Интегрированная среда разработки Colud 9 IDE требует наличия определенной версии фреймворка NodeJS. Использование неподдерживаемой версии фреймворка повлечет за собой постоянные аварийные завершения работы сервера Cloud 9, которые могут привести любого пользователя в уныние. Инструкции по установке фреймворка NodeJS на компьютер Raspberry Pi приведены на ресурсе http://weworkweplay.com/play/raspberry-pi-nodejs .

Программное обеспечение

Я решил создавать пользовательский интерфейс своей системы с использованием технологий HTML5, CSS3 и JavaScript. Комбинация трех упомянутых технологий является мощным инструментом для создания пользовательских интерфейсов. Язык программирования JavaScript позволяет использовать простой API для взаимодействия с серверами. Кроме того, существует множество библиотек для языка программирования JavaScript, таких, как JQuery, Bootstrap и других, из которых можно выбрать наиболее подходящую. HTML5 предоставляет API WebSocket, позволяющее веб-браузеру поддерживать соединение в рабочем состоянии и осуществлять обмен данными посредством этого соединения. Это обстоятельство делает API WebSocket особенно полезным для реализации динамических приложений и приложений для потоковой передачи данных, таких, как игры и чаты. Каскадные таблицы стилей CSS полезны для стилизации различных элементов страницы HTML. В случае корректного использования они позволяют создавать динамические пользовательские интерфейсы путем изменения стилей элементов страниц при наступлении тех или иных событий. Для данного проекта я выбрал фреймворк JQuery для обработки событий, Bootstrap CSS для размещения кнопок в форме сетки и язык программирования JavaScript для реализации механизмов обмена данными на основе API WebSocket.

Библиотеки

Серверное приложение, работающее на уровне Raspberry Pi, должно управлять состоянием выводов разъема GPIO платы Raspberry Pi. Оно также должно предоставлять интерфейс HTTP для передачи данных графического интерфейса и интерфейс WebSocket для передачи сообщений с командами и данными состояния. Готового к установке серверного приложения с такими специфическими функциями попросту не существует, поэтому я принял решение о создании своей собственной реализации сервера с использованием языка программирования Python. Для упрощения разработки описанного серверного приложения с использованием языка программирования Python доступны модули с реализациями методов для работы с интерфейсом GPIO Raspberry Pi, для создания сервера HTTP и для работы с интерфейсом WebSockets. Так как все перечисленные модули предназначены для выполнения поставленных задач, мне пришлось разработать минимальный объем кода.

Однако, упомянутые модули не включены в комплект поставки интерпретатора Python и должны устанавливаться отдельно. В первую очередь вам понадобится модуль для управления состоянием выводов разъема GPIO Raspberry Pi. Простейший способ изменения состояния выводов данного разъема заключается в использовании библиотеки RPi.GPIO, доступной по адресу https://pypi.python.org/pypi/RPi.GPIO . Вы можете установить соответствующий модуль с помощью следующей команды:

Sudo pip install RPi.GPIO

Работа с модулем RPi.GPIO не связана с какими-либо сложностями. Вы можете найти примеры использования данного модуля по адресу . На первом шаге работы с модулем необходимо осуществить импорт его кода в код проекта. После этого вам придется выбрать режим работы. В качестве идентификатора режима работы может использоваться либо константа GPIO.BOARD, либо константа GPIO.BCM. Выбор режима работы обуславливает использование чипа BCM или выводов разъема ввода-вывода при ссылках на номера выводов во всех последующих командах. Далее следует указать, используются ли выводы из рассматриваемого разъема для ввода или вывода. Теперь вы можете использовать выводы данного разъема по назначению. Наконец, вам придется осуществить вызов метода cleanup() для сброса состояния выводов разъема GPIO. В Листинге 1 показан простейший пример использования модуля RPi.GPIO.

Листинг 1. Использование модуля RPi.GPIO

Import RPi.GPIO as GPIO # импортирование кода модуля в код проекта GPIO.setmode(GPIO.BOARD) # указание на то, что нумерация используется для обозначения выводов разъема GPIO.setup(0, GPIO.IN) # указание на то, что канал 0 будет использоваться для ввода GPIO.setup(1, GPIO.OUT) # указание на то, что канал 1 будет использоваться для вывода var1=GPIO.input(0) # чтение состояния канала 0 GPIO.output(1, GPIO.HIGH) # установка логической единицы на канале 1 GPIO.cleanup() # сброс состояния выводов разъема GPIO.

5

Hi-Fi аудиоплеер на базе миникомпьютера «Raspberry Pi». Часть 1. Блок питания для Raspberry Pi (5V, 2A)

Цепочка C31, R15 обеспечивает нулевое состояние триггера при включении блока питания в сеть 220 V.

Задержка выключения нужна потому что после программного выключения, после того как все GPIO погашены, ещё 2-3 секунды идёт обращение к флеш-памяти миникомпьютера (там установлена операционная система). Это ещё одна небольшая проблема, которую необходимо предусмотреть в данном блоке питания.

Программное обеспечение

Код программы, выдающей сигнал «RPi_OFF»
#include "stdlib.h" #include "bcm2835.h" #define PIN_12 RPI_V2_GPIO_P1_12 #define PIN_07 RPI_V2_GPIO_P1_07 int init_system (void) { if (!bcm2835_init()) return 0; bcm2835_gpio_fsel(PIN_12, BCM2835_GPIO_FSEL_OUTP); //пин на выход bcm2835_gpio_fsel(PIN_07, BCM2835_GPIO_FSEL_INPT); //как вход } int main (int argc, char *argv, char *enpv) { if (!init_system()) return 1; bcm2835_gpio_write(PIN_12, HIGH); // (Машина загружена) //ожидания низкого уровня (кнопки выключения) while(bcm2835_gpio_lev(PIN_07)) delay(50); system("poweroff"); return 0; }
Этот код у меня включен в основном программном обеспечении, здесь он просто как рабочий пример для ознакомления или повторения. Далее надо добавить эту программу в автозагрузку. Для этого в файл /etc/rc.local в конце перед EXIT 0 добавим:
#! /bin/sh …… /programs/autorun.sh & EXIT 0

Папку проекта «programs.zip» можно скачать в секции «Файлы» внизу статьи. autorun.sh - это наш исполняемый скрипт, который запустит программу. В нем:
#! /bin/sh ./programs/project_pin_on/bin/pin12on exit 0

ШИМ-контроллер DP408P (1M0880) в импульсном БП

Здесь стоит уделить внимание замечательной микросхеме ШИМ-контроллеру DP408P (аналог 1M0880). DP408P работает на частоте 25 КГц, 1M0880 – 64 КГц. За время моих испытаний, попыток изготовить идеальных трансформаторов и т.п., сложилось впечатление, что убить чип невозможно. Без снабберных цепей я её включал, перегружал, все ей нипочём. Рекомендую чип для тех, кто впервые решил построить обратноходовой преобразователь. Я так ни одной микросхемы и не сжег. DP408P можно наковырять в старых СRT мониторах от SAMSUNG. Даташит, к сожалению, на нее не найти, но у меня в наличии так же имелась и 1M0880 и, в результате сравнения, выяснилось, что они практически одинаковые.

Микросхема включается, как только напряжение её питания превысит 15 V. Микросхема выключается, когда напряжение питания упадет до 8,5-9 V. То есть, после того, как микросхема включилась, напряжение не обязательно должно быть 15 V и выше, но желательно.

Если напряжение питания превысит 27 V (25V для 1М0880), срабатывает защита и микросхема выключается. Следующая попытка включения пройдёт только после снятия питания, если напряжение питания упадет ниже 8,5-9 V и опять превысит 15 V.

В процессе испытаний, например, свеженамотанного трансформатора, удобно сначала запитать ШИМ от отдельного лабораторного блока питания. Надо помнить про очередность подачи напряжений: сначала высокое 308 V, затем 15 V.

Для первичного запуска используется отдельный выпрямитель D5. За счёт R6 и С18 напряжение питания достигает уровня 15 V немного позже появления 308 V. ШИМ запускается, потребляя около 20 мА. И если не подключить обмотку самопитания, С18 разряжается и микросхема выключается. Затем опять зарядится конденсатор, и процесс запуска повторится снова.

В конце подключаем обмотку самопитания. Намотать обмотку надо так, чтобы напряжение 15-17 V было на минимальной нагрузке - нагрузке холостого хода (в моем случае ок. 0,25 Вт).

В данном блоке питания я не стал применять самодельные трансформаторы, Был применен трансформатор от убитого молнией AC/DC вот такого адаптера:


Рис 4. Доноры импульсных трансформаторов


Питал этот адаптер какой-то роутер или свитч, не помню уже, с заявленными параметрами 5V 2A MAX.

Дело в том, что я не смог намотать трансформатор лучше, чем этот. Как я не изгалялся - выбросы при закрывании силового транзистора микросхемы были больше чем с данным китайским трансформатором. Ну и ладно!

Вооруженным глазом

Посмотрим, что же получилось:


Рис 5 . Осциллограмма (pin-1 IC1), нагрузка 2.1А (Сток силового транзистора).



Рис 6 . Осциллограмма (pin-1 IC1), нагрузка 2,1 А. (Выброс срезанный снаббером)



Рис 7. Осциллограмма (pin-1 IC1), нагрузка 50 mА. (Сток силового транзистора).



Рис 8. Осциллограмма (pin-1 IC1), нагрузка 2,1 А. (38 nS на 300 V).

По температуре: снабберный резистор при нагрузке 2,1 А = 50°С, DP408 = 37°С, трансформатор = 40°С. Температуру измерял бесконтактным термометром для младенцев.

И ещё фото конструкции


Рис 9. Блок питания – вид слева.


Рис 10. Блок питания – вид снизу.


Рис 11. Плата A2.

На рисунке 11 плата A2. Три светодиода разного цвета и под ними кнопка. В корпусе кнопка имеет стеклышко (см. видео) поэтому крайние светодиоды загнул, чтобы светили к центру. Плата выполнена по аналогии родной платы видеомагнитофона (корпус применил от видеомагнитофона).

Видео

Система не оптимизирована поэтому «Малина» загружается долго, да и флешка с операционной системой медленная. Потом вставлю настоящую,

Raspberry PI - это устройство имеющее достаточную производительность для того чтобы на его основе могли быть построены роботы способные распознавать образы, выполнять работу людей и прочие подобные устройства для автоматизации и выполнения сложных вычислительных действий. Т.к. тактовая частота процессора Raspberry PI 3 м.б. 1.2 ГГц а его разрядность 32 бита то Raspberry PI 3 значительно превосходит обычное Arduino у которого тактовая частота как правило 16 МГц а разрядность микроконтроллера 8 бит, Arduino безусловно занимает своё место в выполнении операций не требующих большой производительности но когда её уже не хватает Raspberry PI "приходит на помощь" и перекрывает такой большой диапазон возможных применений что можно быть абсолютно уверенным в целесообразности приобретения данного одноплатного компьютера Raspberry PI 3 (можно заказать по ссылке) . Т.к. Raspberry PI - это компьютер то для того чтобы его использовать нужно на него установить операционную систему (хотя существуют обходные пути но всё же лучше и проще установить операционную систему (ос далее)). Существует много ос которые можно установить на Raspberry Pi но одной из самых популярных (для использования с Raspberry Pi), наиболее подходящих для начинающих является ос Raspbian. Для того чтобы установить ос на Raspberry Pi понадобиться micro sd карта с расширителем для того чтобы её можно было вставить в обычный компьютер и записать на неё ос. Sd карта должна иметь не менее 4Гб памяти при установке полной версии Raspbian и не менее 8Гб для установки минимальных версий Raspbian. Минимальные версии могут не иметь (и скорее всего не имеют) графического интерфейса и много всего остального что может считаться лишним и занимает место. Для избежания проблем с отсутствием необходимых файлов, можно поставить полную версию. Можно использовать SD карту 10го класса и с 32Гб памяти (проверено работает (как см. видео ниже)). После приобретения карты памяти её надо вставить в компьютер в соответствующий разъём, после этого посмотреть с какой буквой появился диск в разделе "мой компьютер" и запомнить, потом надо скачать ос с официального сайта https://www.raspberrypi.org/downloads/raspbian/ нажав кнопку "Download ZIP" под "RASPBIAN JESSIE" для скачивания полной версии или под "RASPBIAN JESSIE LITE" для скачивания облегчённой но, для начинающих, лучше выбрать "RASPBIAN JESSIE" т.е. полную версию. После скачивания архива "RASPBIAN JESSIE" его нужно разархивировать, потом скачать программу (или от сюда https://yadi.sk/d/SGGe1lMNs69YQ), установить её, открыть, далее нужно в правом верхнем углу указать букву диска (запомненную ранее), найти разархивированный образ ос

И нажать кнопку "write".

После чего выведется окно с предупреждением и в этом окне надо нажать кнопку "Yes",

После того как запись закончиться и появится окно сообщающее об успешной записи (Write Successful) нужно нажать кнопку "Ok" в этом окне.

Потом закрыть программу, вытащить SD карту безопасным способом и вставить в Raspberry Pi.

Далее можно подключить к Raspberry Pi usb клавиатуру (или ps2 через ), usb мышь и монитор или телевизор через hdmi кабель или можно подключить ethernet кабель (но это для опытных пользователей поэтому далее рассмотрим первый вариант). После этого надо подключить питание через micro usb например от зарядного устройства от смартфона. После подключения питания начнётся установка операционной системы. Как правило в новых (на момент написания данной статьи) версиях ос уже настроена возможность связи с Raspberry Pi по SSH и поэтому для того чтобы настроить связь с Raspberry Pi 3 по wifi достаточно настроить только wifi, Для этого в правом верхнем углу экрана есть значёк на который нужно нажать и выбрать wifi,

После чего вписать пароль от данного wifi в появившееся текстовое поле,

После этих действий wifi на Raspberry Pi 3 будет настроен и дальше можно будет не используя провода программировать Raspberry Pi 3 удалённо по wifi. После настройки Raspberry Pi 3 можно выключить вписав в командной строке (в программе LXTerminal которую можно открыть двойным кликом по иконке программы) команду sudo halt или нажав соответствующие кнопки выключения в графическом режиме, после окончательного выключения можно отключить питание и при следующей подаче питания Raspberry Pi 3 включиться с wifi. Теперь чтобы программировать Raspberry Pi 3 по wifi нужно выяснить какой у него ip адрес. Для того чтобы это сделать надо подать питание на Raspberry Pi 3, дождаться окончания загрузки ос, зайти в веб интерфейс маршрутизатора (вписав в строке браузера 192.168.1.1 или то что надо для входа в веб интерфейс, ввести логин и пароль), найти вкладку DHCP Leases или что то подобное, найти там строку с raspberry и ip адрес Raspberry Pi 3.

Далее нужно открыть программу PuTTY (если её нет то перед этим скачать (или ) и установить) поставить порт 22, соединение по SSH, вписать в поле "Host Name (or IP Adress)" ip адрес Raspberry Pi 3,

После чего нажать кнопку "Open" внизу окна, далее появиться чёрное окно с предложением ввести логин. По умолчанию логин "pi" - его надо ввести и нажать enter. Далее надо ввести пароль, по умолчанию "raspberry". При вводе пароля он не отображается - это нормально. После того как пароль введён невидимыми буквами нужно нажать enter и если всё было сделано правильно то мы получим доступ к Raspberry Pi 3 если нет то нужно повторить действия. После того как получен доступ к Raspberry Pi 3 можно его программировать, для начала нужно войти в папку "pi" для этого надо вписать команду

И нажать enter (после cd обязательно пробел).
Теперь можно открыть текстовый редактор nano. Nano - это специальный текстовый редактор который есть на большинстве ос на подобии Linux и в котором можно написать программу для Raspberry Pi. Для открытия этого редактора и одновременно с этим создания файла с названием "first" и расширением "py" нужно вписать команду

И нажать enter. Откроется редактор nano и можно заметь что его интерфейс немного отличается но в основном - это то же чёрное поле в которое надо вписывать команды. Т.к. мы хотим управлять портами ввода вывода общего (GPIO) то прежде чем запустить программу по управлению этими портами, нужно подключить к ним какое нибудь устройство чтобы можно было видеть что управление получилось. Надо также отметить что пины настроенные как выходы у Raspberry Pi могут выдавать очень небольшой ток (предполагаю что до 25мА) и учитывая что Raspberry Pi это всё таки не самое дешёвое устройство то настоятельно рекомендуется позаботиться от том чтобы нагрузка на выводы не была слишком большой. Маломощные индикаторные светодиоды, как правило, могут использоваться с Raspberry Pi т.к. им для того чтобы светиться достаточно небольшого тока. Для первого раза можно сделать приспособление с разъёмом, двумя встречно параллельно включёнными светодиодами и резистором с сопротивлением 220Ом включённым последовательно со светодиодами. Т.к. сопротивление резистора 220Ом, ток обязательно проходит через этот резистор и нет параллельных путей его прохода, напряжение на выводах 3.3В то ток не будет больше чем 3.3/220=0.015А=15мА. Подключить это можно к свободным GPIO например к 5 и 13 как на схеме

(распиновка взята с https://en.wikipedia.org/wiki/Raspberry_Pi), выглядеть это может примерно так:

После того как всё аккуратно и правильно подключено и есть уверенность в том что ничего не сгорит можно скопировать в редактор NANO первую простенькую программу на языке Python

Import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(5, GPIO.OUT)
GPIO.output(13, True)
GPIO.output(5, False)
time.sleep(1)
GPIO.output(13, False)
GPIO.output(5, True)
time.sleep(1)
GPIO.output(13, True)
GPIO.output(5, False)
time.sleep(1)
GPIO.output(13, False)
GPIO.output(5, True)
time.sleep(1)
GPIO.output(13, True)
GPIO.output(5, False)
time.sleep(1)
GPIO.output(13, False)
GPIO.output(5, True)
time.sleep(1)
GPIO.cleanup()

Потом нажать

После выхода из редактора NANO можно ввести команду

Sudo python first.py

После чего светодиоды помигают некоторое количество раз. Т.е. получилось управлять портами ввода вывода общего назначения по wifi! Теперь давайте рассмотрим программу и выясним как это получилось.
Строка:

Import RPi.GPIO as GPIO

Это подключение библиотеки "GPIO" для управления выводами.
Строка:

Это подключение библиотеки "time" для задержек.
Далее идёт установка режима GPIO:

GPIO.setmode(GPIO.BCM)

Конфигурация выводов 5 и 13 как выходы:

GPIO.setup(13, GPIO.OUT)
GPIO.setup(5, GPIO.OUT)

Установка логической единицы на выводе 13, установка логического нуля на выводе 5:

GPIO.output(13, True)
GPIO.output(5, False)

Задержка

Установка логического нуля на выводе 13, установка логической единицы на выводе 5:

GPIO.output(13, False)
GPIO.output(5, True)

Переводит все выводы в исходное состояние и программа завершается. Т.о. можно управлять любыми свободными пинами по wifi и если сделать питание 5В от аккумулятора то уже можно сделать какого нибудь автономного робота или устройство не привязанное проводами к чему либо стационарному. Язык программирования Python (питон) отличается от си подобных языков, например вместо точки с запятой, для завершения команды, в питоне используется перевод строки, вместо фигурных скобок используется отступ от левого края который делается клавишей Tab. В общем Python это очень интересный язык на котором получается легко читаемый простой код. После того как работа (или игра) с Raspberry PI 3 закончена можно его выключить командой

И после полного выключения убрать питание. При подаче питания Raspberry PI 3 включается и с ним снова можно работать (или играть). Заказать Raspberry pi 3 можно по ссылке http://ali.pub/91xb2 . О том как делается настройка Raspberry PI 3 и управление его пинами можно посмотреть на видео:

После успешного мигания светодиодами можно приступить к полномасштабному изучению данного компьютера и созданию проектов используя возможностями Raspberry PI 3 которые ограничены лишь вашим воображением!

С точки зрения внешних интерфейсов Raspberry Pi, как и другие небольшие одноплатные компьютеры, не сильно отличается от обычного настольного ПК. На плате RPi предусмотрены USB порты для подключения клавиатуры и мыши, порт HDMI для подключения дисплея. Однако, благодаря тому, что RPi значительно компактнее и дешевле, чем ПК, становится возможным использовать их в различных системах и приложениях, где ПК или ноутбуки неуместны.

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

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

Именно здесь проявляется очевидное преимущество RPi и других SBC, обусловленное ключевым различием между одноплатными компьютерами и ПК: одноплатные компьютеры имеют порты ввода/вывода общего назначения, - то, чего нет у больших ПК (Рисунок 1).

Через эти выводы (штыревые разъемы) RPi может взаимодействовать с электронным миром, состоящим (помимо прочего) из датчиков, индикаторов и исполнительных механизмов.

В статье мы рассмотрим примеры схем, которые можно использовать «как есть» (или изменить и расширить), вместе с примерами кода на нескольких языках программирования.

Разъем расширения Raspberry Pi

На Рисунке 2 показано расположение и назначение выводов разъема расширения Raspberry Pi. Первые выводы подобных разъемов на печатных платах, как правило, могут быть идентифицированы по квадратной контактной площадке на нижнем слое платы. На 40-контактный разъем расширения RPi выведены цифровые входы и выходы, совместимые с логическими уровнями 3.3 В.

Совместимость с логическими уровнями 3.3 В означает, что RPi будет интерпретировать входной уровень близкий к 0 В как логический «0», а уровень выше 2 В как логическую «1». Подача на вход напряжения выше 3.3 может вывести RPi из строя. Соответственно, когда GPIO порт сконфигурирован как выход, RPi будет устанавливать на нем напряжение близкое к 0, либо к 3.3 В.

В статье мы будем говорить о выводах, отмеченных на Рисунке 2 розовым, белым, красным и оранжевым цветом. Остальные порты используются последовательными интерфейсами передачи данных.

Цифровые выходы RPi

Первые шаги: управление светодиодом

Простейший пример использования выходов - управление светодиодом или лампочкой, или каким-нибудь приводом или мотором. Для преобразования выходного сигнала RPi во что-то, что будет управлять нужным устройством, обычно требуется электронная схема. Все, что необходимо для небольшого светодиода - последовательный токоограничительный резистор, защищающий светодиод и выход RPi. Сопротивление резистора выбирается из диапазона 100 Ом … 1 кОм, в зависимости от используемого светодиода и необходимой яркости при установке на выходе логической «1».

Подключение светодиода к контактам разъема GPIO с помощью беспаечной макетной платы показано на Рисунке 3, а сама схема - на Рисунке 4. Соединение GND (0 В) было взято с вывода 6 разъема GPIO, для управления светодиодом используется порт GPIO22 (вывод 15). Можно использовать любой порт GPIO, отмеченный розовым цветом на Рисунке 2.

После того, как выполнены и проверены все соединения, можно приступать к написанию кода или сценария управления светодиодом. Выбор языка зависит от вас. Один из примеров на популярном языке Python содержится в (Листинге 1).

Листинг 1. Пример программы на Python для простого мигания светодиодом.


import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(22, GPIO.OUT)
GPIO.output(22, True)
time.sleep(3)
GPIO.cleanup()

Сохраните код в файл с именем led-test.py , а затем запустите его, выполнив команду:

sudo python led-test.py

Другая программа (Листинг 2) демонстрирует пример управления светодиодом. Светодиод мигает 10 раз. (Примечание: в Python, в отличие от других языков программирования, важно использование отступов в коде).

Листинг 2. Исходный код программы на Python (светодиод мигает 10 раз).

# Светодиод подключен к GPIO22 (контакт 15)
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
for x in range(0,10):
GPIO.setup(22, GPIO.OUT)
GPIO.output(22, True)
time.sleep(0.05)
GPIO.output(22, False)
time.sleep(0.45)

GPIO.cleanup()

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

Листинг 3. Командный скрипт (Shell-скрипт) для управления светодиодом, подключенным к GPIO22 Raspberry Pi.

#!/bin/sh
GPIO_PATH=/sys/class/gpio
LED_PIN=22 #GPIO 22 is pin 15
echo "$LED_PIN" > $GPIO_PATH/export
echo "out" > $GPIO_PATH/gpio$LED_PIN/direction
echo "1" > $GPIO_PATH/gpio$LED_PIN/value
sleep 1
echo "$LED_PIN" > $GPIO_PATH/unexport

Первая строка скрипта выглядит как комментарий, но она указывает оболочке Linux, что делать со скриптом при выполнении, поэтому изменять ее нельзя. Остальные строки скрипта используются для контроля соответствующего GPIO порта, конфигурирования его как выхода, установки на нем высокого уровня и выполнения задержки на 1 с. В конце порт освобождается, чтобы дать возможность использовать его в других программах.

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

Генератор тональных сигналов

Более интересным примером может служить использование нескольких портов GPIO для управления тональным генератором. У RPi есть разъем для подключения наушников, но часто для оповещения о событиях (например, для будильника) достаточно простого сигнала или серии сигналов разной тональности.

Принципиальная схема простого генератора звуковых сигналов, выполненного на микросхеме интегрального таймера ICM7555, изображена на Рисунке 5. Вид конструкции, собранной на макетной плате, показан на Рисунке 6. Меняя номиналы резистора и конденсатора, можно создавать разные тональные сигналы и звуки.

Управление генератором осуществляется посредством двух портов GPIO RPi. Один выход (GPIO22) используется для включения или выключения звука, а второй (GPIO27) - для переключения между двумя альтернативными частотами сигнала. При желании можно выбрать другие тона, изменив номиналы компонентов C1, R1 и R2.

Исходный код программы на языке Python, генерирующей несколько звуковых эффектов, приведен в Листинге 4. Сохраните код в файле с именем tone-test.py и затем запустите на выполнение командой

sudo python tone-test.py.

Листинг 4. Программа управления генератором звуковых сигналов.

import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(22, GPIO.OUT) # Вкл/Выкл генератора
GPIO.setup(27, GPIO.OUT) # Изменение тональности

GPIO.output(22, True)
for x in range(0,5):
GPIO.output(27, True)
time.sleep(0.1)
GPIO.output(27, False)
time.sleep(0.2)
GPIO.output(22, False)
time.sleep(0.5)

For x in range(0,5):
GPIO.output(22, True)
time.sleep(0.1)
GPIO.output(22, False)
time.sleep(0.2)
GPIO.output(27, True)
time.sleep(0.2)

For x in range(0,5):
GPIO.output(22, True)
time.sleep(0.05)
GPIO.output(22, False)
time.sleep(0.05)

For x in range(0,10):
GPIO.output(22, True)
time.sleep(0.1)
GPIO.output(22, False)
time.sleep(0.1)
time.sleep(1)

GPIO.cleanup()

Обратите внимание, что схема питается напряжением 3.3 В (вывод 1 разъема GPIO). Используйте этот источник только в том случае, если уверены, что ваша схема не потребляет значительный ток. Шину питания 3.3 В можно нагружать током до 50 мА. При необходимости можно воспользоваться отдельным регулятором напряжения 5 В - 3.3. В и подключить его к источнику питания 5 В, доступному на выводе 2 разъема GPIO.

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

Подключение к 5-вольтовым логическим устройствам

Использование RPi для управления 5-вольтовыми устройствами не потребует каких-либо дополнительных схем. Логические входы устройства с напряжением питания 5 В будут нормально функционировать с выходными сигналами 3.3 В портов RPi.

Маломощные светодиоды

Для маломощных синих и белых светодиодов может потребоваться напряжение выше 3.3 В. Проще всего управлять единичным светодиодом с помощью транзисторного ключа, коммутирующего ток шины 5 В (Рисунок 7). Сопротивление резистора R1 рассчитывается исходя из технических характеристик конкретного светодиода, транзистор - любой n-p-n типа.

Мощные устройства

Самым простым и распространенным способом управления мощными устройствами, питающимися от источника переменного или постоянного тока (но не от сети), является использование реле с транзисторным ключом (Рисунок 8). Подойдут практически любые n-p-n транзисторы, в частности, популярные BC547B, 2N3904 и BC549. При этом, если внешнее устройство может работать от 5 В, подать питание на реле можно с вывода 2 разъема GPIO. Но и в этом случае не следует забывать о токе потребления. В противном случае реле может быть подключено к внешнему источнику питания с соблюдением мер предосторожности, исключающих попадание внешнего напряжения на RPi.

Устройства c питанием от электросети

Обращение с любыми схемами или устройствами, непосредственно управляющими приборами, подключенными к сети переменного тока, требует особой осторожности. Большинство из них просто не отвечает стандартам безопасности, несмотря на то, что некоторые изготовители утверждают обратное. Достаточно безопасный подход заключается в том, чтобы найти готовое решение дистанционного управления авторитетного производителя, предлагаемое авторитетным поставщиком, в котором для управления устройствами, питающимися от сети, используются инфракрасные или беспроводные технологии. Например, компания Energenie предлагает сетевые розетки с управлением по радиоканалу в комплекте с небольшим модулем радиопередатчика (Рисунок 9), подключаемым непосредственно в разъем GPIO платы RPi, а также примеры программ на Python.

Группа реле, светодиодов или иных устройств

Для управления несколькими светодиодами, реле или другими устройствами, которые питаются от 12 В и потребляют менее 200 мА, можно использовать древнюю (выпускаемую более 25 лет) микросхему ULN2803. Микросхема представляет собой набор из восьми ключей на основе транзистора Дарлингтона. Один из вариантов подключения микросхемы ULN2803 к RPi показан на Рисунке 10.

Маломощные двигатели постоянного тока

Оптимальным решением для управления электродвигателями постоянного тока с помощью RPi является применение специализированных драйверов или плат расширения, к некоторым из которых можно подключать шаговые двигатели или несколько бесщеточных двигателей.

Raspberry Pi – это инновационный продукт от английских разработчиков. Их главной целью было популяризировать компьютерное образование среди широких слоев населения, сделать программирование более обширной и доступной дисциплиной и побудить больше людей создавать что-то новое при помощи новых технологий.

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

Что представляет собой это изобретение, и каково применение Raspberry Pi в современном мире, об этом мы и расскажем ниже.

Особенности компьютера Raspberry Pi

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

Как полагают разработчики, устройство Raspberry Pi должно выполнять такие образовательные цели:

  • заинтересовывать школьников развивать навыки программирования;
  • способствовать в начинаниях молодых программистов;
  • помогать опытным компьютерщикам открывать новые горизонты, и делать новые достижения в области программирования.

В родной стране устройства Raspberry Pi – Великобритании, его полный комплект можно приобрести всего за 75 фунтов. Сам комплект при этом состоит из таких составляющих:

  • самого мини-компьютера Raspberry Pi модели В;
  • микро- CD (8 гигабайт);
  • клавиатуры;
  • оптической мыши;
  • микро-адаптера CD Card ;
  • источника питания;
  • кабелей HDMI и микро USB .

Первая партия Raspberry Pi производилась в Поднебесной, но с конца 2012 года производство целиком перенесено в Великобританию, на завод в Пенкойде (Уэльс). В среднем, завод производит порядка 40 тысяч мини-компьютеров Raspberry Pi в неделю.

Технические характеристики Raspberry Pi

Итак, какие же технические характеристики этого уникального компьютера без корпуса, давайте выясним:

Применение компьютера Raspberry Pi для дома

Наиболее применяемая модель мини-компьютера Raspberry Pi – это модель В на 215 Мб оперативной памяти с поддержкой Ethernet . Также есть еще одна модификация прибора, в которой компоненты размещены более компактно, также она имеет четыре порта USB , количество портов ввода и вывода GPIO в ней существенно больше, кроме того, отсутствует композитный видеовыход.

Сферы применения компьютера Raspberry Pi достаточно широки. Несмотря на то что этот прибор не слишком мощный, но при этом это вполне полноценный компьютер. Если вам нужна машина для решения простейших задач, которые не требуют применения мощных ресурсов в плане вычисления, то вы смело можете подключать к устройству Raspberry Pi стандартные элементы машины:

  • монитор;
  • мышь;
  • клавиатуру;
  • подключение любого дистрибутива ОС Linux .

В домашних условиях устройство Raspberry Pi вы можете использовать в таких целях:

  • создание домашнего медиа-сервера;
  • как сервер хранения данных;
  • в качестве «мозгового центра» для автоматизированных станков или роботов;
  • как сервер домашней автоматизации (или системы «умный дом»).

Как мы видим, сферы применения Raspberry Pi для частных нужд могут быть разные. В основном – это узкопрофильные задачи, связанные с работой программистов или других разработчиков. А если говорить о широком применении, то стоит ознакомиться с особенностями применения Raspberry Pi для систем домашней автоматизации или так называемого умного дома . Давайте рассмотрим практическую сторону этого вопроса.

Любая система домашней автоматизации или же так называемый умный дом является достаточно сложной и многоструктурной. Помимо того, что она призвана выполнять те или иные сценарии, которые задаются ей пользователем, она имеет свойство принимать свои собственные решения в определенной нештатной ситуации. Смело можно сказать, что такая система имеет задатки искусственного интеллекта .

Многие сегодня применяют понятие «умный дом» ко всему, например:

  • сигнализации GSM ;
  • датчику протекания воды;
  • световому управлению датчикам движения и т.д.

Все эти явления могут входить в структуру домашней автоматизации, но являться ею по отдельности они не могут.

Система домашней автоматизации («умный дом») включает в себя такие компоненты:

  • центральный сервер;
  • он связан посредством интерфейса RS485 с контроллерами, которые стоят в каждой комнате и помещении дома;
  • к контроллерам подключены те или иные управленческие устройства для защиты, контроля и регулирования работы системы.

Такая сетевая архитектура данной системы хороша тем, что у владельца дома нет необходимости протягивать от каждого устройства к серверу неудобные провода, а нужно просто соединить контролеры, к которым они подключаются посредством одного кабеля UTP. Одна пара его проводов применяется для интерфейса RS485, а другие питают датчики и контроллеры. Стоит отметить, что структура работы предусмотрена таким образом, что если выйдет из строя один из контроллеров или несколько, или даже будет нарушена работа центрального сервера, на работу системы в целом это влиять не будет.

А мини-компьютер Raspberry Pi в данной системе и является центральным сервером . На него нужно установить Веб-сервер, с помощью которого любой пользователь посредством своего мобильного устройства (смартфона, планшета или ноутбука) сможет посредством обычного браузера иметь данные обо всех процессах, которые происходят в доме и управлять этими процессами. Доступ к серверу пользователь имеет посредством логина и пароля через домашнюю локальную сеть или через глобальную сеть, если входить в нее через Wi - Fi -устройство.

К последовательному порту устройства UART посредством согласовывающего прибора через интерфейс RS485 подключают контроллера, которые оснащены разным набором выводов или вводов. Также к этому же интерфейсу можно подключать GPS -модель и с его помощью иметь доступ в систему посредством мобильной или стационарной телефонной связи, если пользователь находится в зоне, где нет доступа в Интернет. Доступ разрешается также через пароль, как и в предыдущем случае. Еще одно устройство в сети – это радиомодуль , с помощью которого можно привязать к общей системе все радиодатчики и пульты дистанционного управления.

Итак, существующая на сегодняшний день версия системы домашней автоматизации на базе компьютера Raspberry Pi состоит из центрального сервера и контроллеров с интерфейсом RS485, которые нужны для связи с сервером. Их описание выглядит так:

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

Конструктор Kano

Конструктор Kano для детей – это не просто обычный конструктор, это модульный компьютер, собрать такую головоломку сможет даже ребенок. Набор конструктора включает в себя следующее:

Таким образом, даже ребенок может сам собрать компьютер, который затем подключается к монитору или телевизору посредством HDMI -порта .

Такой конструктор изначально был создан для детей, но стал популярным и среди взрослых. Средства на разработку и реализацию этого проекта были собраны посредством платформы для сбора средств на творческие изобретения. Благодаря собранному компьютеру можно выполнять такие действия:

  • записывать музыку;
  • смотреть видео в формате HD ;
  • писать программы;
  • создавать свои игры.

Летающее устройство SkyJack

Другие изобретатели на базе компьютера Raspberry Pi создали аппарат-беспилотник SkyJack, который управляется посредством Wi - Fi соединения. Такой аппарат способен брать вертолетную высоту, отслеживать пути военных вертолетов и управлять ими, также с его помощью можно перехватывать радиосигналы и создавать помехи. Однако, несмотря на такие возможности, аппарат разрешен для массового пользования из-за своего небольшого радиуса действия.

Poppy: робот-инопланетянин

Робот Poppy был создан посредством трехмерной печати французской компанией INRIA Flowers . Робот управляется посредством мини-компьютера Raspberry Pi. Конструкция робота повторяет биологическое строение человека, он имеет суставы, позвоночник и сухожилия, его походка похожа на человеческую, он ходит, переступая с пятки на нос и равномерно руководить центом своей тяжести.

Что такое No More Woof?

No More Woof – это прибор, который пока находится на стадии разработки, и создается на базе Raspberry Pi. С его помощью хозяин будет понимать, что хочет его пес. Так, прибор будет прикрепляться к голове животного и работать по принципу электроэнцефалографа, то есть считывать информацию с головы собаки и передавать ее хозяину посредством Raspberry Pi. Когда подобный прибор будет готов и каким образом он будет точно использоваться, пока неизвестно, но подобные гарнитуры, пусть не настолько совершенные, уже применялись профессиональными кинологами.

Все видят, что с наступлением нового тысячелетия интерес к компьютерам у нового поколения и не только является исключительно потребительским. Дети не хотят учиться программировать и создавать что-то новое, а хотят быть исключительно «юзерами». Разработчики Raspberry Pi уверены, что их устройство вернет былой интерес людей к изучению вычислительных наук и заставит их не только пользоваться новыми технологиями, но и создавать их.