Система управления умным домом на основе Raspberry Pi. Применение Raspberry Pi в быту и нестандартные применения


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 которые ограничены лишь вашим воображением!

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, как и другие небольшие одноплатные компьютеры, не сильно отличается от обычного настольного ПК. На плате 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 является применение специализированных драйверов или плат расширения, к некоторым из которых можно подключать шаговые двигатели или несколько бесщеточных двигателей.

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

Как видно из схемы, если кнопка не нажата, вход GPIO5 будет подключен через резистор к шине 3.3 В. Входной порт RPi имеет высокое входное сопротивление, поэтому напряжение на входной линии будет близко к 3.3 В. Это означает, что при отпущенной кнопке RPi будет определять состояние входа как «лог. 1». Когда кнопка нажата, напряжение на входе будет равно 0 В, что является «лог. 0».

Для этой простой схемы величина сопротивления резистора R1 некритична и может находиться в диапазоне от 1 кОм до 47 кОм, однако низких значений следует избегать, поскольку в этом случае увеличивается ток, потребляемый при нажатии кнопки.

Исходный код программы для чтения состояния кнопки доступен в разделе загрузок (файл с именем Listing_4(Button).txt ). Сохраните код в файле с именем button-test.py и запустите на выполнение командой

sudo python button-test.py.

Результат выполнения программы выводится на экран в виде сообщения о текущем состоянии кнопки и количестве нажатий на нее. При выполнении этого примера вы заметите, что иногда значение счетчика становится больше реального количества нажатий на кнопку, и это происходит из-за «дребезга» контактов. Примерно то же самое происходит и при отпускании кнопки. Решение состоит в использовании механизма подавления «дребезга» контактов (debouncing). Этот механизм может быть как аппаратным, так и программным, причем последний распространен больше. В исходном коде, приведенном в файле Listing_5(Button_Debounce).txt , подавление дребезга контактов кнопки реализовано, и подсчет количества нажатий кнопки будет более точным. Единственное отличие от предыдущего кода заключается в том, что теперь с задержкой 20 мс выполняется вторая проверка состояния входа - за это время дребезг контактов прекращается.

Еще один пример: вольтметр

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

Примером может служить очень простой, но точный вольтметр с диапазоном измерений 0 … 1 В (Рисунки 13, 14). Учтите, что заменить портативный мультиметр он не может, поскольку не имеет необходимых цепей защиты, и может выйти из строя сам или повредить плату RPi, если используется для чего-либо, выходящего за рамки описанных здесь примеров.

В схеме используется микросхема AD654 (преобразователь напряжение-частота), которая генерирует прямоугольные импульсы с частотой, зависящей от входного напряжения. Цифровой выход Fout микросхемы подключен к входу GPIO5 (вывод 29 разъема GPIO). Максимальная частота прямоугольных импульсов при указанных на схеме номиналах элементов равна 10 кГц, поэтому для определения входного напряжения нам потребуется точная система отсчета времени. Код для этого примера (файл Listing_6(Voltmeter).txt ) написан на Си и использует библиотеку wiringpi, написанную Гордоном Хендерсоном (Gordon Henderson). Прежде всего, установите библиотеку wiringpi , для чего выполните следующие команды:

mkdir development
cd development
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build

Сохраните код в файле с именем voltmeter.c и скомпилируйте его командой

gcc -o voltmeter -lrt -lwiringPi voltmeter.c.

Чтобы запустить программу, выполните следующую команду:

sudo ./voltmeter.

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

Несколько элементов в схеме вольтметра также влияют на точность измерений. Конденсатор С1 и резистор R1 задают характеристики преобразования, поэтому желательно выбрать пленочный полипропиленовый конденсатор и точный резистор с допуском 1%. Можно использовать подстроечный резистор. Напряжение питания схемы 5 В поступает с разъема GPIO, но его реальное значение может несколько отличаться от 5 В, поэтому лучше использовать отдельный более точный источник питания.

Для быстрой проверки схемы можно использовать делитель напряжения, состоящий из двух резисторов. Схема включения делителя показана в левой части схемы вольтметра (Рисунок 12). Если резисторы прецизионные и напряжение питания в точности равно 5 В, расчет напряжения на выходе делителя дает 0.04950 В. Значение, полученное в результате реального программного измерения, составило 0.04991 В. Неплохо для такого простого проекта!

Диоды Шоттки D1 и D2 в схеме не являются обязательными, но настоятельно рекомендуются, поскольку они обеспечат некоторую защиту микросхемы, если случайно на вход будет подано напряжение вне диапазона 0…1 В.

Защищенные входы

RPi можно защитить от случайного попадания высокого напряжения, добавив к используемым входам дополнительную схему. В некоторых случаях очень хорошей и недорогой альтернативой показанной ниже схеме (Рисунок 15) может служить оптрон, способный защитить входы RPi от напряжений до 60 В и справится с переполюсовкой. Транзистор BC547B в схеме на Рисунке 14 можно заменить на 2N3904 или BC549. Допустимая мощность рассеивания резистора R1 может быть 0.25 Вт при входных напряжениях до 50 В, в противном случае лучше использовать 0.5 Вт.

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

Подключение к 5-вольтовй логике

Прямое подключение устройств с 5-вольтовыми логическими выходами к входам RPi может вывести плату из строя. В этом случае есть множество решений.

Если состояние 5-вольтового логического выхода меняется относительно медленно, можно рассмотреть возможность использования резистивного делителя на входе RPi, но к быстрым схемам такой способ не применим. Тогда намного более хорошим решением будет использование буферной микросхемы. Для средних скоростей (до 100 кГц) вполне подойдет схема на N-канальном MOSFET ZVN2110A (Рисунок 16). Эта схема также инвертирует входной сигнал.

Показанный на схеме транзистор можно заменить на ZVNL120A или VN10LP.

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

Скорость работы и джиттер

Опрос состояния кнопок и управление светодиодами - события относительно медленные, измеряющиеся десятками и сотнями миллисекунд. Иногда встречаются намного более высокоскоростные сигналы. Например, пульт от телевизора излучает инфракрасные световые импульсы со скоростью 40 тыс. раз в секунду. Несмотря на то, что основной процессор RPi работает на частоте 1 ГГц, работа подсистемы ввода/вывода с такой скоростью не поддерживается по ряду причин, как аппаратных, так и программных. Мы рассмотрим некоторые программные аспекты, касающиеся темы статьи.

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

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

Кроме того, немаловажное значение имеет выбор языка программирования, поскольку некоторые библиотеки подходят лучше, чем другие. Интерпретированные и компилированные коды могут выполняться с разными скоростями. Короче говоря, если требуется очень точная временнáя привязка событий, возможно, придется написать драйвер Linux или использовать внешнее оборудование (например, другой микроконтроллер или логические схемы и генератор).

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

Чтобы узнать это, был написан код для периодического переключения логического состояния выходного порта, к которому был подключен осциллограф. Результат представлен в Таблице 1.

Таблица 1. Максимальная частота переключения выходов при
использовании различных языков программирования
Язык
программирования
Частота Длительность
высокого уровня
Длительность
низкого уровня
Python 71.2 кГц 3.9 мкс 10.1 мкс
Си 5.8 МГц 85 нс 85 нс
Командный скрипт 3.9 кГц 115 мкс 139 мкс

Однако всегда важно помнить о джиттере, которым обязательно сопровождается работа ОС Linux. Для случая простого переключения светодиода это, кончено же, не проблема. Характер джиттера можно увидеть на осциллографе в режиме наложения нескольких каналов при синхронизации общим сигналом (Рисунок 17). Обратите внимание, что джиттер может принимать множество значений, несмотря на то, что сигналы дискретно разнесены на 4 нс (250 МГц), что связано с аппаратными особенностями RPi.

Заключение

Теперь вы увидели, что 40-контактный разъем GPIO на платах RPi может использоваться для различных проектов - от управления светодиодами до электронных схем для измерения аналоговых величин. С небольшими дополнительными схемами адаптации логических уровней RPi может взаимодействовать 5-вольтовыми устройствами. С помощью Python очень легко управлять выходами, так же как не представляет сложности и чтение состояния входов, а библиотека wiringpi значительно упрощает управление программистам, использующим Си.

Спустя пять лет после выпуска первых устройств Raspberry Pi, проект продолжает набирать все большую и большую популярность и распространятся далеко за пределами его первоначального назначения. Основатель проекта Эбен Аптон изначально надеялся продать не более чем 10 000 плат, но на данный момент уж больше 10 000 000 устройств находятся в руках студентов, преподавателей и других людей ит-специальностей.

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

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

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

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

cat /proc/cpuinfo |grep "Revision"

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

Если вы видите очень большой номер, который начинается с 1000 дальше идет номер ревизии и снова 1000, то это признак перенапряжения питания.

Вот некоторые сравнительные характеристики разных версий устройств:

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

Аппаратное обеспечение:

cat /proc/cpuinfo

cat /proc/version

Оперативная память:

cat /proc/memory

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

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

Если вы считаете, что вашему устройству не хватает питания, можно проверить напряжение с помощью мультиметра. На старых платах есть отверстия на верхней части платы подписанные TP1 и TP2.На модели B+, Pi2 и Pi3 они размещены внизу платы, на стороне SD карты, и отмечены PP3 и PP7.

Сначала подключите все периферийные устройства, которые вы собираетесь использовать. Установите мультиметр на измерение напряжения до 20 вольт. Подключите красный провод к TP1 или PP3, а черный к TP2 или PP7. Мультиметр должен выдать значение около 5 Вольт. отклонение в 0,25 Вольт - это плохо и чем ближе к пяти, тем лучше. Если вы обнаружили снижение напряжения это могло произойти по двум причинам:

  • Ваш шнур USB. Возможно, он подходит для зарядки телефона, но он работает слишком медленно. Для телефона этого достаточно, но Raspberry Pi не хватает мощности.
  • Периферические устройства. Для всех USB устройств нужно питание, чтобы решить проблему можно использовать USB хаб.

В общем, подключение Raspberry Pi не вызывает много проблем.

Добавление кнопки сброса

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

На плате есть два отверстия рядом друг с другом, одно круглое, второе - квадратное. На модели B они отмечены как P6 и находятся рядом с портом HDMI. На более поздних платах они размещаются ближе к портам GPIO и обозначены RUN.

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

Использование GPIO и датчиков

Помимо своей низкой цены, Raspberry Pi очень привлекательный для пользователей из-за возможности использовать GPIO.

GPIO или general purpose input/output это порты общего назначения ввода и вывода. Почти все проекты Raspberry Pi построены на использовании этих портов. Их сила в гибкости.

Первые платы Raspberry Pi имели 26 GPIO портов, Raspberry Pi 2 и Pi 3 имеют 40. С технической точки зрения только 17 из 26 и 28 из 40 соответственно. Остальные - это электрические контакты и заземления. Все порты обозначены номерами, но чтобы правильно их использовать вам понадобиться распечатка с описанием значений. Например, для 40:

Или для 28:

Ее можно распечатать и приложить к плате, чтобы не запутаться во время работы:

Чтобы заставить GPIO делать то, что вам нужно понадобиться немного программирования. Обычно, все можно сделать на Python. Если вы не знали, то часть имени Pi походит от инструмента для обучения программированию на Python. Вы можете найти очень много инструкций по использованию Python для Raspbery и GPIO в интернете.

Найдите проект

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

Если вы не хотите ничего программировать, но хочется сделать что-то полезное, можно установить Kodi на Raspberry и сделать домашний медиа центр.

После этого можно перейти к поиску других проектов. Что вам больше нравиться, игры? Домашняя автоматизация? Фотография? Возможно, кто-то уже выложил в интернете инструкции, как сделать то что вы хотите. Используйте их или сделайте что-то свое. Вот некоторые интересные проекты, которые вы можете реализовать:

  • Cupcade - самый простой способ создать собственную небольшую игровую систему. Но здесь нужно покупать устройство комплектом, чтобы получить все необходимые детали;
  • MagicMirror - один из самых популярных проектов на Raspberry Pi, суть в том, чтобы выводить текстовую информацию на зеркало с помощью экрана и этого микрокомпьютера;
  • Minecraft - вы можете создать свой сервер Minecraft на основе Raspberry Pi;

Это далеко не все интересные проекты с помощью которых можно найти применение Raspberry Pi 3. Еще несколько вы можете найти в статье .

Выводы

В этой статье мы рассмотрели начало работы raspberry pi. Это очень интересное устройство может быть достаточно полезным при правильном использовании. А вы уже купили Raspberry Pi? Собираетесь покупать? Или уже собрали свой проект и нашли применение raspberry pi? Напишите в комментариях!

На завершение видео от 16 бит тому назад про Raspberry Pi:







2024 © gtavrl.ru.