Аркадный автомат – сборка

Итак, идея в голове оформилась, стало понятно, что надо браться за работу. Часть деталей у меня валялась уже больше года – raspbery pi & джойстики с кнопками.

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

Первый прототип. Самый лучший

Первый прототип. Самый лучший


Continue reading

Grafana & influxdb на banana pi

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

Сервер – это Banana PI. У него есть SATA разъем для жесткого диска, и, что самое главное, GPIO ноги, на которые можно вешать разные устройства.

В качестве фронтэнда для мониторинга я решил взять Grafana. Это ограничило варианты хранилища данных.
Графана поддерживает Graphite, CloudWatch, ElasticSearch, InfluxDB, KairosDB, OpenTSDB, Prometheus.
Graphite – Не осилил документацию :(
CloudWatch – Облако от Amazon. Я не хотел полагаться на внешние сервисы
ElasticSearch – Java
InfluxDB – Написана на golang
KairosDB – Java поверх Cassandra
OpenTSDB – Java поверх HBase
Prometheus – Работает по pull модели. Он сам собирает данные. Мне это не понравилось

Java – не вариант. Мне не нравится экосистема Java, от нее пахнет корпоративным душком. Плюс, JVM сожрет больше ресурсов, чем я хочу.

В итоге остановился на InfluxDB – то, что все собирается в бинарный код мне показалось весьма уместным для слабого сервера. Более того, возможности писать в базу разнообразны и удобны. Простой HTTP интерфейс, просто UDP и т.п.

Сначала все показалось простым – забрать код, собрать и запустить.
На деле это конечно не так.

Начнем с golang. Его ставить совсем не очевидно. Самый свежий go1.5.x для установки хочет go1.4.x :)
После нескольких попыток поставил gvm, это сильно помогло. gvm, как и его братья из других языков rvm & nvm умеет ставить и переключать версии golang

Нельзя просто взять и сбилдить проект на golang, как я понял. ARM пока вызывает проблемы в golang. Дело еще и в том, что я не сильно знаком с этим стеком. Собирал grafana & influxdb долго и муторно. В установке сильно помогли следующие странички:
http://gridengine.eu/index.php/other-stories/229-installing-influx-db-on-raspberry-pi-2-2015-10-18
http://docs.grafana.org/project/building_from_source/

С этого момента уже легче. Есть БД и фронтэнд к ней.

Совсем бесплатно дался мониторинг состояния системы сервера. InfluxDB отлично интегрируется с кучей систем, в том числе и с collectd. Пришлось поменять всего пару конфигов.

Осталось прочитать данные с датчика. У меня был заранее закуплен датчик bmp180. Забегая заранее – датчик – это чрезвычайно просто.

bmp180

bmp180

Если кратко
– ставим библиотеку python для работы с i2c шиной
– скачиваем готовый скрипт для своего датчика :)
– пришлось адаптировать скрипт для записи непосредственно в InfluxDB через UDP
– пришлось адаптировать скрипт, чтобы он писал не миллибары, а миллиметры ртутного столба

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

Готовенький скрипт для работы
Как подключить датчик и поставить пакеты

А вот и пример датчика, висящего на i2c шине –

root@bananas:~# ls -l /dev/i2c*
crw-rw---T 1 root i2c 89, 0 Jan 1 2010 /dev/i2c-0
crw-rw---T 1 root i2c 89, 1 Jan 1 2010 /dev/i2c-1
crw-rw---T 1 root i2c 89, 2 Jan 1 2010 /dev/i2c-2
crw-rw---T 1 root i2c 89, 3 Jan 1 2010 /dev/i2c-3
crw-rw---T 1 root i2c 89, 4 Jan 1 2010 /dev/i2c-4
root@bananas:~# i2cdetect -y 2
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- 77

Адаптированный скрипт лежит на гитхабе – https://github.com/Gromina/home_monitoring

План корпуса для аркадного автомата

Давно уже подступаюсь к проекту Arcade bartop cabinet, уже почти закупил все, что необходимо.

Для чертежей корпуса перебрал все бесплатные программы для мака, позволяющие сделать 2Д/3Д чертеж. Это были всякие FreeCAD, QCAD, Google Sketchup

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

В итоге остановился на старом добром OpenSCAD. Оказалось, что теперь есть еще и онлайн варианты в браузере – раз, два

Получается вот такая штуковина –

arcade bartop cabinet

arcade bartop cabinet

Continue reading

Про Single-board компьютеры

Уже несколько лет не стихает волна одноплатных компьютеров поднятая raspberry pi.
Трудно поверить, но первый настоящий одноплатный компьютер появился в далеком 1976 году.
Нынешняя волна по всей видимости связана с несколькими вещами – небольшой размер, мощность достаточная для большинства обычных задач и чрезвычайно низкая стоимость и энергопотребление.

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

Raspberry pi

Мощным маркетингом этого компьютера двинули весь рынок. Самым важным моментом была низкая стоимость (от $25) и наличие так называемых GPIO. GPIO – порты ввода-вывода, позволяющие несложно подключать внешние устройства – диоды, кнопки, датчики и т.п. В обычных PC такие подключения затруднительны.
С момента зпуска вышли 2 модели raspberry pi, raspberry pi 2, а также совсем недавно raspberry pi zero.

На raspberry pi можно поставить один из дистрибутивов Linux, коих существует множество.
Также есть RTOS (Real time operating system) дистрибутивы, для решения задач, критичных по времени.
Большим преимуществом является поддержка технологии HDMI CEC, об этом чуть позже.

Компьютер справляется с Full HD видео, поэтому для него собрано несколько дистрибутивов с медиацентроами.
Из существенных минусов – отсутствие SATA. Из-за этого к raspberry pi нельзя подключить жесткие диски большого объема на большой скорости. Их, конечно, можно подключить через USB, но это не позволит качать данные на максимально возможной скорости.

Cubieboard

Производится китайской компанией. Существует несколько разных компьютеров. Я себе приобретал Cubieboard2. В основном из-за SATA разъема, для того, чтобы собрать на этом компьютере сетевое хранилище.
Ничего особо нового по сравнению с raspberry pi сказать не могу. Точно также есть ряд дистрибутивов Linux, на которых можно запустить хоть сервер, хоть десктоп. Есть также дистрибутивы Android.
Также заявляется возможность играть Full HD и даже больше.
Сетевое хранилище на этом компьютере у меня работает уже несколько лет и качает торенты.

Banana Pi

Также китайская компания. Несмотря на это, компьютер относится к категории open source hardware. Что позволяет собирать на базе этого компьютера более сложные или заточенные под задачу устройства.
Также есть несколько разных моделей. Радует наличие Wifi на борту некоторых устройств (Banana pi pro), вместе с SATA. Прямо на борту есть микрофон.
Естественно, также есть GPIO (совместимые по раскладке с raspberry pi).
можно устанавливать Linux и Android
Я брал Banana pi Pro для очередного сетевого хранилища.

Beaglebone black

В некотором роде выделяющийся компьютер. Open source hardware. Как и все предыдущие модели, позволяет поставить разнообразные Linux дистрибутивы. Конечно, можно сделать на базе этого компьютера как десктоп, так сервер.

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

Области применения одноплатных компьютеров

Медиацентр

На базе бывшего XBMC теперь называющегося Kodi созданы дистрибутивы для raspberry pi, превращающие этот небольшой компьютер в полноценный медиацентр. Прелесть raspberry pi в поддержке HDMI CEC. Эта технология позволяет управлять по HDMI внешними устройствами с одного пульта. Таким образом подключенная к телевизору малинка успешно управляется с пульта телевизора (практически любой модели). Производители телевизоров склонны называть HDMI CEC своими названиями непонятно зачем.
Я пробовал 2 дистрибутива Kodi для raspberry pi – openelec и osmc
Openelec позиционирует свою заточенность на скорость, поэтому производители ограничили доступ к системе и выпилили часть системных программ и утилит. Для обычного пользователя это не очень критично.
Я же остановился на OSMC – полноценный линукс с Kodi.

Сетевое хранилище / сервер

Благодаря низкому энергопотреблению, а также отсутствию шума (вентиляторов нигде нет) одноплатные компьютеры отлично подходят для домашнего сервера. На сервере можно поднять качалку торентов, хранилище файлов, даже собственное облако
Если позволяют знания, можно просто настроить Linux под себя, установив transmission, smb и т.п.
Если хочется настраивать мышкой – тоже есть варианты. Недавно я установил сервер на базе OpenMediaVault – После установки дистрибутива на компьютер, можно заходить на него из браузера и все настраивать, очень удобно.

Хочу отметить, что для сервера (особенно для торентов) важен большой объем данных, поэтому тут предпочтение падает на компьютеры с SATA. Я использовал Cubieboard2 и Banana pi pro.

Умный дом

По тем же свойствам, что и выше, одноплатные компьютеры хорошо подходят для автоматизации дома. Это может быть что угодно – видеонаблюдение, управление замками, сигнализацией, кондиционерами, аудио-видеотехникой.
наличие GPIO позволяют подключить практически любые периферийные устройства – камеры, датчики, радио и IR трансмиттеры. Остается только все это интегрировать, что конечно непросто. Я знаю, что уже появились некоторые решения для умных домов, но пока не пробовал ни одного из них.
Пробовал делать видеонаблюдение на базе motion & Cubieboard2 – работает.

роботы

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

игровая консоль

Интересный вариант использования одноплатных компьютеров – создание игровой консоли-эмулятора для ретроигр.
мощности вполне хватает для эмуляции (но лучше брать raspberry pi 2, а не 1)
Разного софта достаточно много, GPIO позволяют подключить любые внешние устройства ввода – джойстики, геймпады, коврики и т.п.
Я пробовал пару дистрибутивов –
retropie – Дистриб для raspberyy pi. работает из коробки, поддерживает кучу джойстиков. Будет немного гемороя для некоторых консолей (надо будет искать их BIOS)
BeagleSNES – дистриб для Beaglebone Black. Эмулирует SNES. Немного тормозит
recalbox – Выглядит симпатично, но толком еще не пробовал
Lakka – Тоже пока не смотрел, но для эмуляторов еще один дистрибутив

Вообще есть желание собрать аркадный кабинет на базе raspberry pi2 – но пока не дошли руки и не все необходимое железо еще собрал

Arduino toolchain in OS X

Давно уже не возился с Arduino. Настолько давно, что обнаружил на обоих маках отсутствие тулчейна Ардуино :(

Я предпочитаю программировать Arduino непосредственно на С/C++ без всяких там IDE (если не считать vim за IDE). Как все это установить на мак написано ниже:

brew tap osx-cross/avr
brew install avr-libc
brew install avrdude --with-usb

Более подробно можете почитать тут.

avr-libc собирается довольно долго, не пугайтесь. Более того, оно может падать примерно так:

configure: updating cache ./config.cache
configure: creating ./config.status
config.status: creating Makefile
config.status: creating po/Makefile.in
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands
config.status: executing default-1 commands
config.status: creating po/POTFILES
config.status: creating po/Makefile
make: *** [all] Error 2

Это тоже не беда. Просто вы не установили системные хедеры. Это делается так –


xcode-select --install

Подробнее про это

Happy coding!

arduino loves servo

arduino loves servo

Да, собираю я все проекты при помощи Make файла, позаимствованного отсюда и немного доработанного.

вольтметры-часы

20140127-201116.jpg

Вот такие часы есть задумка смастерить.
На картинке пара вольтметров, RTC модуль, пара модулей DAC.
Софт, естественно, уже есть и работает. Основной вопрос – хватит ли прямизны рук, чтобы смастерить корпус (хочется деревянный) и обеспечить питание от батареек.
Вольтметры будут жрать что-то, это понятно. Усыплять ардуино на 9/10 секунды тоже не вопрос. Проблема в том, что на ардуине и на DACах впаяны светодиоды. Жрут они вроде по чуть-чуть. но всё время :(
Выпаивать жалко, да и пожечь плату немудрено.

20140127-203019.jpg

Текущее про роботов

Последнее время изучаю ROS (Robotics Operating System) Был поражен, насколько сильно продвинулись наработки в области роботостроения. Имея напильник и опыт программирования, можно клепать роботов за вечер. Система на вид неплохая, но порог входа довольно высок. Я пока еще не набил руку.

Всё это из-за того, что вместе с несколькими коллегами-энтузиастами решили поучаствовать в конкурсе КРОКа
Как всегда, встал вопрос “велосипед vs готовое решение”. Пока не определились. Но мне нравится ROS.

А чтобы набить руку параллельно поставил ROS себе на raspberry PI. И прикупил у китайцев отличный разъёмчик на малиновый GPIO
20140123-154243.jpg
Хотел было непосредственно с малины управлять колёсной базой робота. Но ввода-вывода там маловато (в частности PWM). Так что придется городить огород из Arduino + Motor Shield + raspi.