Skip to content
  • Категории
  • Главная
  • Документация
  • Последние
  • Пользователи
Collapse
N

nbo

@nbo
Сводка
Сообщения
7
Темы
5
Группы
0
Подписчики
0
Подписки
0

Сообщения

Последние Лучшие сообщения Спорные

  • Car PC на основе Raspberry Pi
    N nbo

    5d9bcaa7-d0e3-4548-bd4f-5f088eed93c3-image.png
    Набор модулей для сборки автомобильного компьютера.
    Базовым программным обеспечением является адаптированный Raspbian Linux со специальной мультимедийной оболочкой-интерфейсом, написанной на Qt5, которая запускается автоматически после загрузки операционной системы. Помимо стандартного программного обеспечения, можно использовать ПО сторонних разработчиков (например XBMC Car PC edition).

    Базовый набор модулей включает в себя

    • Сенсорный экран 7`` с HDMI-интерфейсом и стандартным 2DIN корпусом
    • 4x50W усилитель (чип TDA-7850)
    • Модуль FM радио с адаптером для подключения к усилителю
    • GPS модуль + GPS антенна
    • Кабель ISO-10487
    • Кнопка-ключ с проводами
    • Активный USB хаб
    • Конвертер 12V-5V с разъёмами для питания RaspberryPi и активного USB-хаба
    • Переходник и аудиокабель для подключения RaspberryPi к усилителю
    • HDMI кабель
    • CSI-Камера с широкоугольным объективом
    • OBD-II адаптер ELM327
    • Кроме этого к компьютеру можно подключать дополнительные модули по USB - Wi-Fi приёмники, 3g/4g модемы и т.д

    В качестве разъёма для подключения в автомобиле выбран стандартный разъём ISO-10487. Таким образом, если в вашем автомобиле разъём для подключения аудиоаппаратуры отличен от ISO-10487, вы можете без проблем приобрести переходник в интернет-магазинах.

    Сборка

    Питание

    Все модули компьютера получают питание через провода +12V (красный провод), GND (чёрный) стандартного разъёма ISO-10487, к которым они подключены параллельно. В разрыв красного провода разъёма вставляется кнопка-ключ.

    Питание необходимо для:

    1. Преобразователя 12V-5V, который питает Raspberry Pi и активный USB-хаб.
      65147b62-eea7-4e0a-9baa-01f5150427f6-image.png
    2. Сенсорного экрана
    3. Усилителя
      e74721b7-6a39-47d5-a6c1-66ebf2c876b5-image.png

    Звук

    4-канальный усилитель подключается к проводам разъёма ISO-10487.

    0f3a7906-c398-470a-ba13-dcb237a90e74-image.png

    На входы усилителя подаются аудиосигналы сигналы от Raspberry Pi и от FM-приёмника. Управление громкостью звука программное.

    Подключение FM-приёмника к усилителю:

    4996d2ac-b55d-48bd-adc9-4a8da2b90373-image.png

    Подключение Raspberry Pi к усилителю: .

    5f277a0b-51b2-4983-972e-9cdc97139768-image.png

    В связи с тем, что звук с аналогового аудиовыхода Raspberry Pi может оказаться не очень качественным, можно брать цифровой аудиосигнал с HDMI выхода Raspberry Pi и преобразовывать его в аналоговый при помощи конвертера HDMI-HDMI+audio. В этом случае конвертер будет питаться от USB-хаба.

    2df36f89-8043-4ace-9562-d7e677b11326-image.png

    061700f1-467e-4889-9a27-6c31e16bc6ab-image.png

    Подключение устройств к Raspberry Pi

    К Raspberry Pi подключаются следующие устройства:

    1. FM приёмник (к GPIO пинам SDA,SCL,VCC,GND)
    2. GPS (к GPIO линиям RX, TX, VCC, GND)
      9e1451bb-8801-494a-883e-bb507b3079cc-image.png

    c88a44a0-6340-44d2-b97c-6ce875e2836c-image.png

    1. К USB входам Raspberry Pi подключается USB-хаб и один из USB-разъёмов экрана, который обеспечивает работу сенсора

    2. Экран подключается посредством HDMI интерфейса. На лицевой панели экрана имеется USB-вход. Для того, чтобы он работал, необходимо подсоединить USB-шнур №2 экрана к USB-хабу

    3c71eecd-38ce-48b5-ad79-7053cb46024f-image.png

    1. Подключение камеры. Стандартная камера с широкоугольным объективом используется в качестве видеорегистратора. Выводится на лобовое стекло при помощи удлинителя.
      38a88290-92e0-4963-b29b-35d6494bf2ee-image.png

    Принцип работы удлинителя:

    RasPi -> CSI-кабель -> переходник с CSI на IDC -> IDC кабель (можно сделать любой длины) -> переходник с IDC на CSI-> CSI кабель -> камера
    

    a44bac4e-0e81-49f4-a878-45f139c93fd8-image.png

    1. Для диагностики ЭСУД и чтения параметров работы двигателя и систем автомобиля используется адаптер ELM-327, который подключается к OBD-II разъёму в автомобиле
      8184969a-878a-4a80-a707-54ef99e260eb-image.png

    Завершение сборки

    После того, как все компоненты соединены необходимо уложить их в стандартный 2DIN корпус.
    745a9b21-998e-4d98-a28a-caf2d11af261-image.png

    На чип усилителя рекомендуется установить радиатор. Так как радиатор будет нагреваться во время работы усилителя, убедитесь, чтобы при установке в машине он не соприкасался с проводкой автомобиля.

    Для того, чтобы вывести кнопку-ключ на лицевую панель, необходимо извлечь любую из кнопок-заглушек в левой части экрана.
    639677a2-e843-4c5b-9cce-12597e32e920-image.png

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

    Базовым программным обеспечением является адаптированный Raspbian Linux со специальной мультимедийной оболочкой-интерфейсом , написанной на Qt5, которая запускается автоматически после загрузки операционной системы. Помимо стандартного программного обеспечения, можно использовать ПО сторонних разработчиков (например XBMC Car PC edition). ПО записывается на карту-памяти SD

    Основные возможности

    Главный экран

    2b2df08f-102f-4e22-82c7-b0fb5ecc3f86-image.png
    Это главный экран интерфейса - то, что вы видите после того, как загрузилась операционная система и оболочка автоматически запустилась. К этому экрану можно вернуться в любой момент, нажав кнопку "

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

    В центральной чаcти экрана 6 больших кнопок для перехода в соответствующие разделы приложения: Media, Radio, Navigation, Car DVR, Trip Computer

    Кнопка Applications пока не активна.

    В верхней части интерфейса расположен аудиоплеер, который отображается всегда в верхней части приложения.

    Для загрузки нового плейлиста нужно перейти в раздел "Media"->"Media Audio".

    FM радио

    cb318315-0a6f-4124-a0ff-85da48b96adb-image.png
    Интерфейс FM радио. Для перехода к интернет-радио нажмите кнопку "Internet radio" в верхнем правом углу экрана.

    Интерфейс разделён на 2 части - левая часть содержит информацию о текущей радиостанции и кнопки управления, правая часть - список избранных радиостанций.

    Верхний аудиоплеер останавливает воспроизведение, когда вы выбираете радиостанцию из списка избранных или начинаете поиск новой станции.

    Интернет радио

    65cb0d0d-ce9e-4437-95ff-b03155132ca1-image.png

    Для прослушивание интернет радио необходимо подключение к интернету.

    Вы можете использовать Wi-Fi приёмник для подключения к беспроводной сети либо 3g/4g usb модем

    Нажмите кнопку "Add new station", чтобы добавить новую станцию. После ввода названия станции и адреса потока станция появится в списке.

    Для удаления станции нажмите кнопку "Delete selected station"

    Вы также можете переключаться между станциями нажимая кнопки "Следующий/Предыдущий" в верхнем аудиоплеере

    Медиацентр

    f14fdb8e-a42e-4107-b3f0-4af8364db0a9-image.png

    Медиацентр состоит из 2 частей - Media Audio и Media Video.

    Раздел Media Audio предназначен для просмотра аудифайлов и их добавления в плейлист аудиоплеера.

    Чтобы выбрать папку с аудиофайлами нажмите кнопку "Select audio folder". После выбора папки нажмите кнопку "Scan folder".

    Найденные аудиофайлы в выбранной папке и вложенных папках отобразятся в списке и будут добавлены в плейлист аудиоплеера.

    Медиацентр основан на backend'e gstreamer.. Все популярные аудиоформаты поддерживаются по умолчанию. Если нужный аудиоформат не поддерживается просто скачайте соответствующий плагин к gstreamer'у из репозитория для обеспечения поддержки формата.

    Раздел Media Video предназначен для просмотра видеофайлов (включая видеофайлы, записанные автомобильным видеорегистратором). Видеоплеер основан на OMXPlayer, который поддерживает аппаратное видеоускорение. Кнопки управления позволяют Воспроизводить/Останавливать/Ставить на паузу видео, перематывать вперёд/назад, регулировать громкость, открывать полноэкранный режим.

    d7f110aa-96b5-4483-9a03-9fec397e7ea3-image.png

    Видеорегистратор

    021afdd3-4827-4370-862b-6c90cd78125c-image.png

    Для начала записи нажмите кнопку "Start video record"

    Для просмотра записанных видеофайлов нажмите кнопку "Recorded videos"

    В разделе "Settings" можно задать

    • Папку для записи видеофайлов
    • Максимальный размер папки для записи (при достижении лимита старые файлы будут перезаписываться новыми)
    • Продолжительность 1 видеофайла (по истечении этого времени начнётся запись нового видеофайла)
    • Битрейт
    • Видеоразрешение

    Бортовой диагностический компьютер

    b878f37d-e63a-4778-991d-e19e2615b7e6-image.png

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

    Также может показывать диагностические коды ошибок
    eec45634-d98d-4d63-8d6b-38b3c2f3e11d-image.png

    GPS навигация

    2c2267fa-d92e-44ea-8636-e7eb9eba4919-image.png

    В качестве программы GPS навигации используется Navit.

    Вам нужно вырезать нужный регион из карты OpenStreet при помощи сервиса http://maps5.navit-project.org/ и сохранить его как /usr/share/maps/MyMap.bin file

    Конфигурационный файл Navit'а - /etc/navit/navit.xml позволит легко кастомизировать программу по этим инструкциям - http://wiki.navit-project.org/index.php/Configuration

    Настройки

    02a26402-1c59-4d45-8391-14457e77b268-image.png

    • Wi-Fi Settings - список доступных беспроводных сетей. Для подключения нажмите кнопку "Connect" напротив нужной сети и введите пароль для установки беспроводного соединения.
    • Modem settings - настройки 3g/4g modem. Введите APN логин, APN пароль (если требуется), адрес APN точки доступа и нажмите кнопку "Connect" для соединения с мобильным интернетом.
    • Media settings - настройки медиацентра. Здесь можно задать форматы файлов, которые будут распознаваться как медиаконтент.
    • OBD settings - настройки диагностического бортового компьютера.
    • Language settings - Выбор языка интерфейса. Доступны английский и русский.

    Где скачать?

    ПО будет доступно для скачивания в конце этой недели.

    Альтернативное программное обеспечение
    В качестве альтернативного ПО можно использовать сборку медиацентра XBMC Car PC edition

    https://drive.google.com/folderview?id=0B__Rs5JF53-kVk03SGQ5OWY4Z0k&usp=sharing#list

    Список альтернативного ПО будет пополняться.


  • Сериал / арт проект на RPi
    N nbo

    Задумка интересная.
    Но немного уныло - нужны смены ракурсов и какой-нибудь таинственный фоновый музон


  • Удаленное Управление рабочим столом PI4(PI3) через 4G(LTE) под Windows
    N nbo

    @korolev89#6021 Оборудование будет стоять в ящике где температурные скачки велики, по этой причине обычный 4G модем не подойдет

    Описание

    Вот такую штуку можно использовать вместо USB модема. Рабочие температуры -30 - +80


  • Создаём собственный Raspbian репозиторий
    N nbo

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

    В Linux концепция установки ПО полностью отличается. Хотя Windows-подобные инсталяторы встречаются и для Linux софта, наиболее распространёнными вариантами являются:

    • Установка ПО из исходных кодов
    • Установка ПО из бинарных пакетов
      Второй вариант является самым простым и распространённым. В этой статье мы рассмотрим структуру таких пакетов, методику их создания, а также менеджер пакетов apt-get и создание репозитория, из которого apt-get может устанавливать ПО.

    В мире Linux наиболее распространёнными форматами пакетов являются rpm ( используются в дистрибутивах Red Hat, Fedora), и deb (используются в дистрибутивах Debian, Ubuntu).

    В Raspbian соответственно используются deb пакеты

    Установка/удаление пакета производится утилитой dpkg:

    установка:

    dpkg -i файл_пакета.deb
    

    частичное удаление пакета (Остаются настройки пакета, пользовательские данные и т.д) :

    dpkg -r файл_пакета.deb
    

    полное удаление пакета:

    dpkg -P файл_пакета.deb
    

    дополнительные возможности dpkg:

    • dpkg -L название_пакета - список файлов, установленных пакетом в файловую систему.
    • dpkg -S имя_файла - покажет, какой пакет установил данный файл
    • dpkg -s название_пакета - вывод информации об установленном пакете.
    • dpkg -l - список установленных пакетов
    • dpkg -c файл_пакета.deb - список файлов, упакованных в deb пакет
    • dpkg -I файл_пакета.deb - информация о пакете

    Deb пакет не установится, если в системе отсутствуют важные пакеты, от которых зависит работоспособность ПО, упакованного в deb пакет. Зависимости задаются разработчиком, при упаковке файлов в deb пакет.

    Автоматически установить требуемые зависимости dpkg не может, поэтому для упрощения установки ПО в Linux были придуманы менеджеры пакетов.

    В Raspbian используется менеджер пакетов apt-get.

    Установка пакета осуществляется командой

    sudo apt-get install название_пакета
    

    Во время выполнения данной команды apt-get произведёт поиск пакета в репозиториях, указанных в конфиге /etc/apt/sources.list, а также поиск всех зависимостей данного пакета, после чего будет произведена установка.

    Обратите внимание, что apt-get ведёт поиск пакетов по локально сохранённому "индексу" пакетов. Поэтому периодически необходимо обновлять этот индекс командой

    sudo apt-get update
    

    Удаление пакета осуществляется командой

    sudo apt-get remove название_пакета
    

    , если к команде добавить ключ -purge, то будут удалены и конфигурационные файлы пакета

    Чтобы обновить все пакеты, установленные через apt-get до самой свежей версии используется команда

    sudo apt-get upgrade
    

    Я этой функцией не пользуюсь без крайней необходимости - как показывает опыт, если что-то нормально работает, то это лучше не трогать

    Создание собственных deb пакетов

    Создание deb пакета довольно обширная тема, в рамках этой статьи мы рассмотрим только основы.

    Допустим вы разработчик ПО для raspberry pi, создали и скомпилировали программный комплекc, состоящий из бинарника my_raspi_soft и конфига к нему my_raspi_soft.conf

    Для упрощения дистрибуции вашей программы упакуем её в deb-пакет и добавим его в собственный репозиторий, чтобы

    ваши пользователи могли легко установить вашу программу командой

    apt-get my_raspi_soft install
    

    Итак, создадим в удобном месте (например в домашней директории) папку (в дальнейшем я буду называть её директорией пакета), в которой будем создавать структуру пакета

    mkdir  ~/my_raspi_soft
    

    и установим инструменты необходимые для создания deb пакета:

    sudo apt-get install dpkg lintian
    

    В директории пакета создаём папку DEBIAN (в ней будут храниться служебные файлы пакета, необходимые для его правильной упаковки):

    mkdir ~/my_raspi_soft/DEBIAN
    

    и файловую структуру установки пакета - она указывает, куда копировать файлы пакета во время его установки. Допустим мы предполагаем, что во время установки пакета файл my_raspi_soft должен быть скопирован в /usr/bin, а его конфиг my_raspi_soft.conf в /etc/. Тогда файловая структура должна иметь вид:

    mkdir -p ~/my_raspi_soft/usr/bin //после создания диретории помещаем в неё наш бинарник my_raspi_soft
    mkdir ~/my_raspi_soft/etc //после создания диретории помещаем в неё наш конфиг  my_raspi_soft.conf
    

    Теперь приступим к наполнению папки DEBIAN служебными файлами.

    Главным служебным файлом является файл control, в него заносятся свойства пакета в формате свойство: значение свойства.

    Свойства, которые добавляются в control файл (обязательные свойства я выделил жирным шрифтом):

    Package - имя пакета. Именно оно используется при установке через apt-get install. Допустимо использовать латинские буквы, цифры и дефис (Package: my-raspi-soft)

    Version - версия программы и пакета в формате версия_программы-версия_пакета. (пример: 0.9-1)

    Maintainer - "мэйнтейнер", создатель пакета, ответственный за его обновление и т.д Формат вида имя email (Vasya )

    Architecture - архитектура процессора, для которого предназначен пакет. В случае с Raspberry Pi это будет armhf

    Section - категория ПО, упакованного в пакет. Перечень категорий:

    admin, base, comm, contrib, devel, doc, editors, electronics, embedded, games, gnome, graphics, hamradio, interpreters, kde, libs, libdevel, mail, math, misc, net, news, non-free, oldlibs, otherosfs, perl, python, science, shells, sound, tex, text, utils, web, x11

    Description - описание пакета

    Depends - список зависимостей - пакетов, без которых не возможна работа нашей my_raspi_soft. Также можно указать требуюмую версию таких пакетов при помощи операторов <<, =, >>, <=, >=. Допустим в нашем проекте используется библиотека wiringPi. Тогда в config добавим строку - Depends:libwiringpi

    Conflicts - список пакетов, с которыми конфликтует наша программа. Пока эти пакеты установлены в системе, установка пакета с нашей программой будет невозможна.

    В итоге наш файл control будет выглядеть как-то так:

    Package: my-raspi-soft
    Version: 0.1-1
    Section: misc
    Architecture: armhf
    Depends: libwiringpi
    Maintainer: Vasya 
    Description: My RasPi software
    

    Это необходимый минимум служебных файлов для сборки deb пакета.

    Какие ещё служебные файлы можно разместить в папке DEBIAN?

    copyright - текст лицензии и декларация авторских прав

    changelog - история изменений в специальном формате

    conffiles - список файлов конфигурации (полный путь). Это нужно для того, чтобы при обновлении пакета можно было оставить старые настройки. Можно добавить сюда наш /etc/my_raspi_soft.conf

    md5sums - контрольные суммы файлов пакета. можно заполнить так:

    md5deep -r директория_пакета > директория_пакета/DEBIAN/md5sums
    

    Кроме служебных файлов в папке DEBIAN можно разместить скрипты, которые будут выполняться до/после установки/удаления пакета.

    preinst - скрипт с таким именем выполняется до установки пакета

    postinst - скрипт, выполняющийся после установки пакета

    prerm - скрипт, выполняющийся перед удалением пакета

    postrm - скрипт, выполняющийся после удаление пакета

    Минимальная структура пакета создана, теперь можно приступать к его упаковке в deb файл!

    Переходим на 1 папку выше директории пакета и выполняем команду

    fakeroot dpkg-deb --build my_raspi_soft
    

    Всё, пакет готов. Осталось лишь переименовать его согласно стандарту имяпакета_версия_архитектура.deb:

    mv my_raspi_soft.deb my-raspi-soft_0.9-1_armhf.deb
    

    В завершении протестируем пакет на ошибки при помощи lintian:

    lintian my-raspi-soft_0.9-1_armhf.deb
    

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

    Создание репозитория deb пакетов

    Нам потребуется сервер с установленным веб-сервером Apache (или любым другим).

    Создаём в конфиге апача новый виртуальный хост для домена (например repo.yourserver.com), на котором будет висеть наш репозиторий. В настройках виртуального хоста обязательно разрешаем просмотр папок в DOCUMENT_ROOT (Options All Indexes)

    В этом примере в качестве DOCUMENT_ROOT будет выступать директория - /home/repo/www

    Создаём структуру репозитория:

    # mkdir -p /home/repo/www/apt/pool/main
    # mkdir -p /home/repo/www/apt/dists/stable/main/binary-armhf
    

    Загружаем наш deb пакет my-raspi-soft_0.9-1_armhf.deb в /home/repo/www/apt/pool/main/

    Создание GPG ключей

    Публичный GPG ключ должен быть создан и затем скачан пользователями вашего репозитория. Если этого не сделать, то каждый раз при установке пакетов из вашего репозитория apt-get будет выводить предупреждение.

    Создаём ключ командой:

    gpg --gen-key
    

    Проверяем ключ:

    gpg --list-keys
    

    Вывод этой команды будет примерно таким:

    pub   2048R/CE123456 2012-09-02 [expires: 2022-08-31]
    uid   My repo
    

    Далее:

    # gpg --export -a CE123456 > ~/repo.key
    # gpg --no-default-keyring --keyring /home/repo/www/apt/myrepo.gpg --import ~/repo.key
    # rm ~/repo.key
    

    Индексация и подпись пакетов

    Чтобы клиентские менеджеры пакетов apt-get могли устанавливать пакеты из нашего репозитория, необходимо произвести индексацию пакетов, которые мы загрузили в /home/repo/www/apt/pool/main/

    Для этого можно использовать вот такой несложный скрипт. Он произведёт индексацию всех пакетов в /home/repo/www/apt/pool/main, создаст файл /home/repo/www/apt/pool/main/Release, который содержит MD5 и SHA хэши всех файлов пакета и подпишет файл Release ключом Release.gpg.

    Запускать этот файл нужно каждый раз после загрузки нового deb пакета в наш репозиторий (GPG_NAME заменить на параметр, который соответствует вашему ключу, созданному в предыдущем шаге)

    #!/bin/bash
    
    GPG_NAME=CE123456
    REPONAME=stable
    VERSION=6.0
    
    for bindir in `find dists/${REPONAME} -type d -name "binary*"`; do
        arch=`echo $bindir|cut -d"-" -f 2`
        echo "Processing ${bindir} with arch ${arch}"
    
        overrides_file=/tmp/overrides
        package_file=$bindir/Packages
        release_file=$bindir/Release
    
        # Create simple overrides file to stop warnings
        cat /dev/null > $overrides_file
        for pkg in `ls pool/main/ | grep -E "(all|${arch})\.deb"`; do
            pkg_name=`/usr/bin/dpkg-deb -f pool/main/${pkg} Package`
            echo "${pkg_name} Priority extra" >> $overrides_file
        done
    
        # Index of packages is written to Packages which is also zipped
        dpkg-scanpackages -a ${arch} pool/main $overrides_file > $package_file
        # The line above is also commonly written as:
        # dpkg-scanpackages -a ${arch} pool/main /dev/null > $package_file
        gzip -9c $package_file > ${package_file}.gz
        bzip2 -c $package_file > ${package_file}.bz2
    
        # Cleanup
        rm $overrides_file
    done
    
    # Release info goes into Release & Release.gpg which includes an md5 & sha1 hash of Packages.*
    # Generate & sign release file
    cd dists/${REPONAME}
    cat > Release <
    Suite: ${REPONAME}
    Version: ${VERSION}
    Component: main
    Origin: My Company
    Label: My Repo
    Architecture: armhf
    Date: `date`
    ENDRELEASE
    
    # Generate hashes
    echo "MD5Sum:" >> Release
    for hashme in `find main -type f`; do
        md5=`openssl dgst -md5 ${hashme}|cut -d" " -f 2`
        size=`stat -c %s ${hashme}`
        echo " ${md5} ${size} ${hashme}" >> Release
    done
    echo "SHA1:" >> Release
    for hashme in `find main -type f`; do
        sha1=`openssl dgst -sha1 ${hashme}|cut -d" " -f 2`
        size=`stat -c %s ${hashme}`
        echo " ${sha1} ${size} ${hashme}" >> Release
    done
    
    # Sign!
    gpg --yes -u $GPG_NAME --sign -bao Release.gpg Release
    cd
    

    Сохраните код скрипта в /home/repo/www/apt/reindex.sh и запустите его:

    chmod +x /home/repo/www/apt/reindex.sh
    /home/repo/www/apt/reindex.sh
    

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

    /home/repo/www/apt/
    /home/repo/www/apt/dists
    /home/repo/www/apt/dists/stable
    /home/repo/www/apt/dists/stable/Release
    /home/repo/www/apt/dists/stable/Release.gpg
    /home/repo/www/apt/dists/stable/main
    /home/repo/www/apt/dists/stable/main/binary-armhf
    /home/repo/www/apt/dists/stable/main/binary-armhf/Packages.gz
    /home/repo/www/apt/dists/stable/main/binary-armhf/Packages.bz2
    /home/repo/www/apt/dists/stable/main/binary-armhf/Packages
    /home/repo/www/apt/pool
    /home/repo/www/apt/pool/main
    /home/repo/www/apt/pool/main/my-raspi-soft_0.9-1_armhf.deb
    /home/repo/www/apt/reindex_stable.sh
    /home/repo/www/apt/myrepo.gpg
    

    Клиентские настройки для apt-get

    Чтобы пользователи могли устанавливать ПО из вашего репозитория при помощи менеджера пакетов apt-get, они должны

    1.добавить ваш репозиторий в /etc/apt/sources.list

    deb http://repo.yourserver.com/ stable main
    

    2.скачать ключ:

    # cd /etc/apt/trusted.gpg.d/
    # wget http://repo.yourserver.com/myrepo.gpg
    

    3.Обновить локальный индекс пакетов apt-get

    sudo apt-get update
    

    После выполнения этих шагов ваша программа может быть установлена командой:

    sudo apt-get install my-raspi-soft
    

  • Управление Raspberry Pi через VNC
    N nbo

    Одним из наиболее распространённых способов удалённого управления Raspberry Pi является управление платой по протоколу SSH при помощи SSH-клиента. И это весьма удобно, но что делать, если удалённой консоли недостаточно для управления, а нужен полноценный графический режим (X-Window)? Или нужно протестировать что-нибудь в графическом режиме, а подключать монитор лень либо нет возможности? Нам поможет VNC!

    1. Устанавливаем VNC сервер на Raspberry Pi
    sudo apt-get install tightvncserver
    
    1. Запускаем TightVNC сервер, чтобы установить пароль для подключения
    tightvncserver
    
    1. Запускаем
    vncserver vncserver :1 -geometry 800x480 -depth 24
    

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

    Скачиваем VNC клиент, например этот - http://www.tightvnc.com/download.php

    Запускаем tvnviewer, в поле Remote Host вводим IP адрес Raspberry Pi и порт, на котором VNC сервер ожидает подключения (посмотреть можно командой

    netstat -pan, netstat -pan|grep 'vnc'
    

    , скорее всего это будет порт 5901. В моём случае значение поля Remote Host имеет вид 192.168.1.105::5901.

    589fec74-9c83-4fd5-b7d6-fc514800a6df-image.png

    Нажимаем кнопку Connect. Далее нас попросят ввести пароль, который мы указали в Шаге 2. Вводим пароль.

    Если всё было сделано правильно, то вы увидите окно размером, который вы указали в параметре -geometry при запуске VNC сервера, а в окне удалённый рабочий стол LXDE Raspberry Pi.
    9483aaed-9dfe-460f-9c69-67c4133f0a21-image.png


  • Подключаем сервопривод к Raspberry Pi
    N nbo

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

    Подключение

    Сервоприводы подключаются тремя проводами. Два провода (чёрный и красный) - питание, третий (оранжевый, жёлтый, белый или синий) - сигнальный.

    c45f1391-fd30-4676-8657-6d5f250f2530-image.png

    Для моего сервопривода MG 996R провода имеют такой цвет. Запитал я его от Raspberry Pi, подключив Vcc к пину №4 (5v), Ground к пину #6 (GND). Оранжевый сигнальный провод - к пину №12 (PWM)
    7d109450-1870-43f5-ac42-c9f46ea394f0-image.png

    Принцип работы

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

    f63e8e4f-e5d5-44a1-a1fb-197ac29bbd28-image.png

    Плата сервопривода преобразует длительность импульса в управляющее напряжении (Uупр), которое поступает на сумматор. Также на сумматор приходит напряжение обратной связи (Uobr), которое регулируется потенциометром, соединённым с выходным валом сервопривода. Сумматор вычисляет разницу между Uупр и Uobr, разница напряжений усиливается и подаётся на электромотор. Электромотор вращает выходной вал, вместе с выходной валом вращается и меняет своё сопротивление потенциометр, из-за изменения сопротивления меняется напряжение обратной связи. Электромотор остановится, когда разница между напряжением обратной связи и управляющим напряжением станет равна нулю.
    2f0836af-c1ea-4b57-8beb-9ed5adb2b832-image.png

    Программирование

    Теперь попробуем всё это запрограммировать. Для работы с gpio я предпочитаю использовать библиотку wiringPi. В Raspberry Pi аппаратный шим находится на пинах BCM18 (порядковый номер 12, в нотификации wiringPi - 1).

    Тактирующий осциллятор на аппаратном ШИМ Raspberry Pi имеет частоту 19.200.000 Гц (19.2 МГц). Чтобы получить частоту в 50Гц, необходимую для сервопривода, зададим делителю частоты значение 192 при помощи функции pwmSetClock , а значение соответствующее максимальному коэффициенту заполнения импульса равным 2000 функцией pwmSetRange .

    19.200.000 / 192 / 2000 = 50

    Как было сказано выше - угол поворота вала зависит от длительности импульса. Длительность импульса зависит от величины коэффициента заполнения, который задаётся вторым аргументом функции pwmWrite . При коэф. заполнения 1 (значение 2000) длительность импульса составит 20мс, при коэф. заполнения 0.05 (значение 100) 1мс

    Большинство сервоприводов рассчитаны на приём импульсов длительностью от 1 до 2 мс

    1мс - крайнее левое положение, 1.5мс - центральное положеник, 2мс - крайнее правое положение. Задавая длительность импульса в диапазоне 1-2мс, можно повернуть вал сервопривода в нужное положение

    В реальности диапазон длительности импульсов, приводящих к повороту вала, может несколько отличаться и устанавливается экспериментальным путём. Для моего сервопривода (MG 996R) он составил 0.35мс (коэф. заполнения 1.75%) - 2.63мс (коэф. заполнения 13.15%)

    Рассчёт угла поворота вала сервопривода
    Напишем функцию, которая переводит требуемый угол поворота в градусах в значение коэффициента заполнения, который выступает аргументом функции pwmWrite и определяет на какой угол повернётся вал сервопривода.
    15773054-48cf-4360-889e-692c5787aa18-image.png

    int getDCValue(int angle, int maxPWMRange)
    {
       //DC - Duty Cycle, коэффициент заполнения
       float minDC = 1.75;
       float maxDC = 13.15;
       int requiredDC = (angle/180*(maxDC-minDC)+minDC)/100*maxPWMRange; 
       return requiredDC;
    }
    

    Полностью программа будет выглядеть так. Угол поворота задаётся как параметр в командной строке при запуске программы:

    //servo.c
    #include <stdio.h>
    #include <stdlib.h>
    #include  <wiringPi.h> 
    
    int getDCValue(int angle, int maxPWMRange)
    {
       float minDC = 1.75;
       float maxDC = 13.15;
       int requiredDC = (angle*(maxDC-minDC)/180+minDC)/100*maxPWMRange; 
       return requiredDC;
    }
    
    void main(int argc, char *argv[])
    {
     if (argc==2)
     {
      int maxPWMRange = 2000;
      int rotateAngle = atoi(argv[1]);
      int dutyCycle = getDCValue(rotateAngle,maxPWMRange);
      wiringPiSetup ();
      pinMode (1, PWM_OUTPUT); //переводим вывод BCM18 в режим ШИМ выхода
      pwmSetMode(PWM_MODE_MS);   
      pwmSetClock(192);
      pwmSetRange(maxPWMRange);
      pwmWrite (1, dutyCycle);
      printf ("set PWM  value %d \n", dutyCycle);
     }
     else
     {
      printf ("Vvedite ugol povorota");
     }
    }
    

    Компилируем

    gcc ./servo.c -o servo -lwiringPi
    

    Запускаем:

    pi@raspberrypi:~ $ sudo ./servo 60
    

    Вал сервопривода встаёт в положение 60 градусов


  • Получение данных с аналоговых датчиков, подключенных к Raspberry Pi
    N nbo

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

    Чтобы считать это напряжение и преобразовать его к осязаемому цифровому значению используется аналого-цифровой преобразователь (AЦП).

    В Raspberry Pi отсутствует встроенный АЦП, поэтому для подключения к RasPi аналоговых датчиков потребуется внешний АЦП.

    Я использовал АЦП на основе чипа PCF8591 -http://smartelectronika.com/viewproduct/49/

    727a2beb-0d63-446f-b0fc-bbb999e25d74-image.png

    Это 4-канальный 8-битный АЦП, который передаёт считываемые с датчика значения напряжения по i2c. Соответственно подключаем его к пинам 5V, GND, SDA, SCL GPIO разъёма Raspberry Pi. Также нам потребуется подгрузить модули ядра для работы с i2c:

    sudo modprobe i2c-dev
    sudo modprobe i2c-bcm2708
    

    Чтобы постоянно не подгружать их постоянно вручную рекомендую добавить строчки в /etc/modules:

    i2c-dev
    i2c-bcm2708
    

    Как я уже выше писал, разрешающая способность PCF8591 8-бит. Это значит, что величина цифрового значения, в которое будет преобразовано напряжение сигнального выхода датчика будет лежать в диапазоне от 0 до 2^8-1=255. Это значение высчитывается по формуле -

    напряжение сигнального выхода датчика/напряжение АЦП * разрешающую способность АЦП
    Таким образом для 3V с датчика: value=3/5*255=153

    К АЦП мы будем подключать аналоговый датчик MQ-3, который определяет концентрацию паров этилового спирта в воздухе.

    73e5f19a-8255-4d89-a431-08ebd7b416fe-image.png

    У MQ-3 4 выхода - AD, DO, Vcc, GND. Vcc и GND подключаем к пинам GPIO 5V и GND. AD (выход сигнального напряжения датчика) подключаем к одному из 4 входов АЦП (я подключил к А0). DO не подключаем никуда. На выходе DO появляется напряжение, когда значение измеряемой величины (в нашем случае концентрации паров этилового спирта в воздухе) достигает некоторой критической величины. Критическая величина задаётся подкруткой подстроечного резистора на плате датчика.

    a05fe677-41fd-4a8e-afec-f4b981e96363-image.png

    Далее переходим к программной части. Для получения значения датчика будем использовать популярную библиотеку для работы с GPIOwiringPi:

    sudo apt-get install git-core
    git clone git://git.drogon.net/wiringPi
    cd wiringPi
    ./build
    

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

    #include <wiringPi.h> 
    #include <pcf8591.h> 
    main ()
    {
      wiringPiSetup () ;
      pcf8591Setup (200, 0x48) ;
      for (;;)
            {
         delay (500);
        printf ("%4d \n", analogRead (200)) ;
         }
    }
    

    В функцию pcf8591Setup передаётся число большее 64, которое будет служить номером "виртуального" пина для библиотеки wiringPi и адрес АЦП на интерфейсе i2c.analogReadвозвращает преобразованное значение напряжения датчика (число от 0 до 255), подключённого к АЦП.

    Компилируем нашу программу:

    gcc -o ./analogread ./analogread.c -lwiringPi
    

    Запускаем скомпилированный analogread - на экране побегут значения датчика, обновляемые каждые полсекунды.

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

    Чтобы это значение преобразовать в реальное значение концентрации паров этилового спирта нужно обратиться к даташиту на MQ-3, в этой статье я этот вопрос рассматривать не буду.

  • 1 / 1
  • Войти

  • Нет учётной записи? Зарегистрироваться

  • Login or register to search.
  • Первое сообщение
    Последнее сообщение
0
  • Категории
  • Главная
  • Документация
  • Последние
  • Пользователи