Автоматическая генерация программного кода микроконтроллера на основе событийно-ориентированной модели

Постановка задачи:
Создание сложной автоматизированной системы на основе контроллера для управления различной периферией (электронные замки, двигателя, светодиодные ленты и прочая электроника).
Создание данной системы потребовалась для квест комнаты, подобной этой, но в городе Хабаровск.
Наш квест в ином сеттинге, но в целом имеет примерно тот же набор исполнительных механизмов, реле, замки, ленты, герконы и т.д…
Основные требования к системе:

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

image
В нашем квесте требовался достаточно сложный сценарий, в особенности:

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

Решение всех проблем было найдено во многом благодаря статье о «Парадигме ситуационно-ориентированного программирования», применив данный подход я получаю «из коробки»:

  • Гибкость — достаточно правильно построить архитектуру событий
  • Надежность — т.к. все события однотипны они могут быть реализованы схожим образом, используя простой код, надежность которого можно гарантировать
  • Функциональность — события вызывают действия, которые могут быть реализованы любым образом

Таким образом архитектуру системы можно построить на основе 3 видов базовых конструкций:

  • Событие,
  • Триггер,
  • Действие

При такой архитектуре можно заметить так же, что если задать в шаблоне кода триггера факт сохранения состояния (активирован\не активирован) то получаем в качестве бонуса возможность использовать состояние триггера в качестве события, таким образом можно построить сколь угодно сложную систему взаимосвязей событий и нелинейность алгоритма.
Благодаря выделения действий в отдельный функциональный блок получаем возможность еще на этапе разработки провести тестирование программного кода каждого действия по отдельности, отладку такого кода произвести намного легче, чем при отладке всего проекта. На отлаженный код уже будут ссылаться триггеры.
image
Триггеры в качестве условия срабатывания могут использовать любое сочетание событий или состояний триггеров (и\или\не).
События могут быть любыми (состояния портов, сообщения в serial и тд), в текущей реализации достаточно было состояния портов, поэтому пока оставлен только этот вариант, расширения функционала не займет много времени.
При создании системы было решено использовать доступное на местном рынке оборудование, таковыми оказались только платы Arduino, учитывая проблемы с доставкой почтой из других регионов факт наличия на рынке запасных частей имеет значение.
Приложение настроено на генерации кода скетча для данной платформы, но при желании адаптация под любой другой язык программирования займет лишь пару минут.
Таким образом шаблоны для скетча Arduino будут выглядеть в простейшем виде например так:

Основной код программы

@init void setup() { @runonce }  void loop() {  @loopcode }  @triggers @sensors @actions 

Шаблон кода действия

//@description void @name() {	 bool debug=true; //@id @code //@id   if (debug) {     Serial.println("DoAction @name");   } } 

Шаблон кода триггера

//@description bool @nameActivated=false; bool @name(){ 	if (@nameActivated){ 		return true; 	}else 	{	 		if (@event){ 			@nameActivated=true; 			Serial.println("@name Activated"); 			@nameDoAction(); 			return true; 		} 		return false; 	}	 	return false; }  void @nameDoAction(){ @nameActivated=true; //****************************************** @actions //****************************************** } 

Шаблон кода сенсора

//@description bool @name() { 	int @namePin=@pinNumber; 	pinMode(@namePin, INPUT_PULLUP); 	int sensorVal = digitalRead(@namePin); 	if (sensorVal == @trueval) {return true;}else{return false;} } 

Пример шаблона инициализации

В данном шаблоне можно подключить библиотеки и объявить глобальные для всего проекта переменные и функции.

#include <etherShield.h> #include <ETHER_28J60.h> #include <EEPROM.h> static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x10, 0x24};   static uint8_t ip[4] = {192, 168, 137, 15};     static uint16_t port = 80;   ETHER_28J60 ethernet; bool started=false; 

На основе данных шаблонов в окне приложения можно задать все параметры сценария.
image
После экспорта прошивки мы можем получить подобный код:

Очень много букв скетча

Плюс такого подхода в том, что все блоки действий на момент экспорта прошивки уже отлажены еще на этапе их разработки, все блоки триггеров, сенсоров и обертки кода действий отлажены и код компилируется без ошибок и будет работать корректно сразу, без этапа отладки.
На практике при разработке квест комнаты много раз приходилось изменять сценарий, благодаря приложению изменять код прошивки не требовалось, достаточно изменить параметры триггеров в интерфейсе программы.
Фотографий с самого квеста пока не прикладываю, если будет желание могу приложить. На данный момент оборудование с прошивкой созданной по данной схеме отработало уже более 50 игровых циклов без единого сбоя.
Исходные коды приложения открыты и доступны всем желающим.
Тестовое приложение с типовыми настройками шаблонов можно найти на github.

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

В следующей статье хотелось бы услышать о:

Никто ещё не голосовал. Воздержавшихся нет.

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

ссылка на оригинал статьи http://habrahabr.ru/post/269897/

Lua 5.3 Справочное руководство


Перевел на русский язык «Lua 5.3 Справочное руководство». Его chm-версию можно взять на файлообменнике.
Собственно, переводил для себя, поэтому в текст оригинального руководства понаставил множество примечаний, как во всплывающих окнах, так и в виде текстовых вставок (со спойлерами и без них) мелким серым шрифтом на желтоватом фоне.
Я не программист, базовых знаний у меня нет, так что везде, где «спотыкался» на терминах, старался таким образом облегчить себе понимание.
Кроме того, для тех кто возможно захочет что-то изменить, вложил в архив файлик Lua5.3.hhp — чтобы любой мог разобрать/собрать chm-файл программой HTML Help Workshop.
Ну и наконец, я не знаю английского языка, переводил в основном онлайновыми программами перевода (с помощью программы QTranslate).

ссылка на оригинал статьи http://habrahabr.ru/post/269899/

Игроки Eve Online будут классифицировать белки человеческого организма

image

Создатели проекта Human Protein Atlas (энциклопедии белков человека) совместно с разработчиками многопользовательской научно-фантастической онлайн-игры Eve Online и швейцарской компанией Massively Multiplayer Online Science объявили о разработке проекта Project Discovery. Он предполагает вовлечение игроков в полезную для науки работу по разметке белков в атласе. Работа будет оформлена в форме мини-игры, времяпрепровождение в которой будет вознаграждаться игровыми бонусами.

Проект Human Protein Atlas, штаб-квартира которого расположена в Стокгольме, содержит порядка 13 миллионов изображений, которые необходимо разметить для включения их в автоматизированную базу данных. Проект собирает известную науке информацию обо всех белках, производимых человеческим организмом.

Доступная всем желающим база данных показывает пространственное распределение белков, как в нормальных тканях человеческого тела, так и в различного вида опухолях. Проект был задуман в 2003 году, и в 2005 – оформлен в виде веб-сайта. Структурированный набор данных о белках помогает определять предназначение и роль каждого из них в организме.

Разработчики игры из компании CCP Games считают, что их игра привлекает людей с техническим складом ума, и поэтому подобные задачи им будут достаточно интересны. «Наша игра прекрасно подходит для такого рода заданий»,- говорит Петур Орн Пораринсон [Pétur Örn Þórarinsson], директор по дизайну и ведущий дизайнер геймплея, известный как CCP Scarpia.

image

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

Например, этим летом благотворительная акция "PLEX for GOOD", объявленная в поддержку пострадавших от землетрясения в Непале, набрала более $100000.

Профессор Эмма Ландберг [Emma Lundberg] из проекта Human Protein Atlas объясняет важность энциклопедии. По её словам, проект помогает разобраться в клеточной биологии, в том, как работает человеческое тело и как в нём развиваются заболевания. Чем лучше учёные разберутся в этих вопросах, тем лучше будут лекарства и методики лечения.

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

Проектами объединения усилий игроков на благо науки занимается специализированная компания Massively Multiplayer Online Science, основанная Бернардом Ревасом [Bernard Revas] и Атиллой Зантнер [Attila Szantner]. Зантнер давно занимается социальными проектами – основанная им в 2002 году социальная сеть iWiW стала крупнейшей сетью в Венгрии с 4,7 миллионами пользователей, до того, как туда пришёл Facebook.

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

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

ссылка на оригинал статьи http://geektimes.ru/post/265044/

Обзор форума «Открытые инновации»

У нас было два летающих мотоцикла, семьдесят пять 3D-принтеров, пять тренажёров для хирургов, один трёхсоткилограммовый сапфир и целое множество роботов всех сортов и расцветок, солнечные батареи, прибор для прокалывания пальца лазером, самокаты напрокат и шестиклассники с макетами чёрной дыры и деревянными пистолетами на резинках. Не то чтобы это был необходимый запас для форума «Открытые инновации». Но если начать собирать инновации, становится трудно остановиться.

Внимание: очень много фотографий под катом.

image

Flexbright SunLight: светильник на гибком световом полотне

Светильник Flexbright SunLight от разработчиков из Саранска – модульная система освещения с изменяемой формой светоизлучающего полотна. Гибкая LED-плёнка изготавливается методом Roll-2-Roll – это печать электронных компонентов на рулоне.

Международный R&D-центр, разработавший этот светильник, специализируется на создании источников света печатным методом и на развитии смежных проектов – создании люминофорных покрытий, токопроводящих чернил, системы дистанционного управления параметрами светоизлучения – яркостью и спектром.

Аппаратно-программный комплекс локомоторной терапии

На форуме «Открытые инновации» я покатался в этом устройстве. Это аппаратно-программный комплекс для пациентов с нарушением двигательной функции. Аппарат мотивирует пациентов к движению — особенно это важно для детей. Компания планирует разработать такой же комплекс для реабилитации детей младшего возраста — от года до пяти лет.

image

image

Броневая керамика

Компания «Вириал» на выставке Открытые инновации 2015 представляет керамические броневые элементы из карбида кремния для защиты боевой техники. Керамические пластины имеют самый высокий класс защиты — 6а. То есть эта керамика выдерживает выстрел из винтовки СВД с патроном 7,62×54 мм R с энергией 3990 Дж. Керамические пластины применяются для защиты от баллистических воздействий сухопутной техники, судов, авиационной техники и личного состава.

image

image

Нанокерамика: болты для позвоночника и протезы

Российская компания ЗАО «НЭВЗ-Керамикс» разрабатывает и производит наноструктурированную керамики для медицины, включая протезы суставов и шурупы для позвоночника, для электроники и микроэлектроники, и бронекерамику.

Компания наладила производство эндопротезов тазобедренного сустава из нанокерамики в Новосибирске. К 2016 году она планирует выйти на 20 000 эндопротезов в год. Сейчас «НЭВЗ-Керамикс производит зубные коронки, эндофиксаторы, пластины и шурупы для позвоночника.

С июня 2015 года ФГБУ «ННИИТО им. Я. Л. Цивьяна» провели более 150 успешных операций на пациентах по замене тазобедренного сустава на эндопротез «БИСЕР».

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

image

Семантические процессоры

В апреле 2015 года российская компания ЭЛВИС-НеоТек представила 40-нанометровый 6-ядерный процессор VIP-1. Компания использует его для собственных систем компьютерного зрения — IP-камер со встроенным интеллектом. В России этот процессор стал первой разработкой мирового уровня по 40-нанометровому технологическому процессу. Основной компонент VIP-1 – специализированный видеопроцессор, который справляется с кодированием и декодированием видеопотоков HD и 4K со скоростью до 60 кадров в секунду. В чип входит 2-ядерный ARM Cortex A9 с частотой 1 ГГц, ядро графического процессора, двухъядерный кластер процессора обработки сигналов и изображений и встроенное ядро навигационного приемника, поддерживающее три системы навигации – GLONASS, GPS и китайскую BeiDou. Размер корпуса — 19х19 мм, энергопотребление — 3 ватт.

Роботизированный склад: RONAVI

Роботизированный комплекс складской логистики RONAVI позволяет управлять складом без человека. Его можно использовать в крупных логистических центрах, на складах торговых сетей и в организации производственных линий. RONAVI увеличивает ёмкость склада до 50% и экономит средства на содержание склада – в частности на обогрев. Фонд заработной платы сокращается на 80%. Грузоподъёмность робота – до 1,5 тонн, время автономной работы – до 6 часов в зависимости от батареи.

Я на этом роботе покатался и поборолся с ним.

image

Синтетические сапфиры

Ставропольский «Монокристалл» — мировой лидер по производству синтетических сапфиров. Их используют в электронной и оптоэлектронной промышленности. Компания работает 25 лет и в 2013 году занимало четверть мирового рынка сапфира. Согласно выпущенному отчёту аналитиков высокотехнологичных рынков Yole Developpement компания стала крупнейшим в мире по годовой выручке производителем искусственных сапфиров.

На форум «Открытые инновации» в Москве компания привезла самый большой в мире искусственный сапфир.

image

image

Фотоэлектрические модули «Хевел»

В феврале 2015 года я писал о том, что компания «Хевел» в Чувашии запустила в промышленную эксплуатацию первый в России завод полного цикла по производству солнечных модулей. Солнечные модули «Хевел» имеют актуальное для России свойство: они вырабатывают электричество и в пасмурную погоду.

На предприятии используют технологию швейцарской компании Oerlikon Solar: на панели наносят фотоэлементы на основе микроморфного кремния. Напыление нанослоёв позволяет сократить использование кремния. Фотографии с предприятия смотрите на Geektimes.

Компания «Хевел» открыла Научно-технический центр при Физико-техническом институте им. А.Ф. Иоффе. Там исследователи разработали технологию, сочетающую лучшие качества тонкоплёночной и кристаллической кремниевой технологий, и повысили КПД солнечных панелей до 22-24%% при среднем показателе по миру в 16%. Себестоимость продукции с применением этой технологии снизится на 20-25%.

Прозрачные электролюминесцентные дисплеи TASEL

Прозрачные дисплеи Lumineq TASEL работают при температуре до минус шестидесяти градусов. Здесь нет заметной смены кадров, как на электронных читалках. Изображение идёт плавно, но пока — только одноцветное на прозрачном фоне.

Одностенные углеродные нанотрубки компании OCSiAl

Компания OCSiAL производит одностенные углеродные нанотрубки под торговой маркой TUBALL. Это универсальный наномодификатор, улучшающий механические свойства, электро- и теплопроводность различных материалов, включая резину, композиты и полимеры. Эта продукция была в Чёрном чемодане.

Биологически активные вещества из микроводорослей

Американская Solix Algredients разработала биотехнологическую цепочки для наращивания микроводорослей в промышленных масштабах с последующим выделением из них веществ — антибиотиков, пигментов и антиоксидантов. Конечный продукт используют в косметике, детском питании и пищевых добавках. Компания открыла R&D-центр по выращиванию микроводорослей на площадке РГУ Нефти и газа имени Губкина.

Перчатка Брайля для слепоглухих

Люди без зрения и слуха способны общаться с помощью мессенджеров для смартфонов. На выставке один из разработчиков представил рабочий прототип перчатки, с помощью которой можно передавать сообщения на основе шрифта Брайля. Средний и безымянный пальцы отвечают за две верхние точки шрифта Брайля, указательный и мизинец — за средние точки, а нижние точки расположены на фаланге указательного пальца. Большой палец участвует в наборе двух нижних точек и в завершении набора буквы. Для получения сообщения в перчатку встроены вибромоторы с другой стороны руки.

image

image

Тяговые протезы, распечатанные на 3D-принтере

Компания «Моторика» изготавливает на 3D-принтере протезы по индивидуальным параметрам. Стоимость таких протезов — от пятидесяти до ста тысяч рублей в зависимости от травмы. В стоимость входит не только пластик, но и снятие мерок, разработка и доработка модели.

image

image

Пистолеты и многоствольный резинкомёт от шестиклассников

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

<img src=»habrastorage.org/files/746/7da/867/7467da8670c249bc9bedcb637ea76da8.JPG" «600»/>

Роботы

Корпорация роботов привезла сразу несколько экспонатов, включая говорящего, но стоящего на месте человекоподобного робота с человека ростом и эту миниатюрную Соньку — Золотую ручку, корпус которой выполнен из тёплой ламповой фанеры. Робот играет на шарманке и выпрашивает деньги.

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

Этот робот напоминает кого-то из персонажей Футурамы.

Кукольный театр из роботов выглядит одновременно милым и зловещим.

В этом году я писал, что российская компания «Анисопринт» представит мобильную ячейку для 3D-печати полимерными композитами на форуме «Открытые инновации». Финальный вариант ячейки выглядел так.

ссылка на оригинал статьи http://geektimes.ru/post/264786/

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

image

Американская фермерская компания Naturipe Farms, занимающаяся преимущественно выращиванием и сбором ягод, организовала конкурс для всех желающих по созданию робота для сбора американской черники. Победитель конкурса получит $250000.

Американская черника (вид Cyanococcus) – разновидность ягод рода Vaccinium, к которым относится и наша черника (её в америке называют «European blueberry» или bilberry). Она синего цвета, из-за чего и называется blueberry, и её до сих пор собирают с кустов вручную.

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

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

Если вы уже помигали всеми возможными светодиодами при помощи Arduino, и думаете, как пристроить к делу и что полезного сделать с вашим стремлением собрать робота – то это шанс для вас.

ссылка на оригинал статьи http://geektimes.ru/post/265042/