суббота, 18 июня 2016 г.

2.15. Система мониторинга

Урок: 2.15. Система мониторинга

Транскрибация урока: Итак, мы добрались до завершающего фрагмента этой недели, где мы обобщим все, что изучили в процессе. Мы создадим устройство системы мониторинга. Она будет собирать какие-то данные из внешнего мира и сообщать их нам, причем разными способами. Для чего такая система может быть полезна? Ну самый простой и интересный пример — это собирать данные, например, для научного исследования. Кроме этого, вы можете устроить сигнализацию об изменении какого-то параметра. Мы, кстати, учтем это в нашем проекте. Как мы уже знаем, чтение аналогового сигнала с точки зрения контроллера — это одно и то же, поэтому в качестве примера мы возьмем изучение освещенности и температуры. Давайте представим будущее устройство схематично. У нас будет три входа: два из них — это аналоговые входы от датчиков освещенности и температуры, и один цифровой — вход-кнопка: он будет переключать то, что мы сейчас выводим на шкалу. Шкала — это у нас первое устройство вывода. Мы в этом случае обойдемся без микросхемы, тот пример был и так достаточно сложный. Итак, у нас в качестве устройств вывода есть шкала, есть пьезодинамик и есть обмен данными с компьютерами — это и вход, и выход. Затем, как мы будем проверять, что наше устройство готово? Мы хотим, чтобы оно могло отправлять данные в компьютер, причем по запросу. Если мы запрашиваем температуру символом t, она нам будет направлять температуру. Если мы запрашиваем освещенность с помощью символа l, он будет нам отправлять освещенность — там же, в мониторе порта. А шкала нам будет показывать данные непрерывно: сначала один из показателей, а по нажатию кнопки — переключать на отображение второго показателя. Кроме этого, мы установим некий порог, по превышении которого показателем температуры мы будем издавать звуковой сигнал. Ну, естественно, вы понимаете, что вместо звуковой сигнализации это может быть, например, включение системы охлаждения или любая другая реакция. Но сейчас речь не об этом. Давайте посмотрим, как мы соберем это устройство. Здесь я хочу вас познакомить еще с одним элементом, входящим в нашу экосистему. Я не буду скрывать гордость, что тоже приложил руку к его созданию. Это вот такие вот детальки конструктора, которые позволяют прототипировать устройство еще быстрее. Он сделан из ПВХ, вспененного ПВХ, который легко обрабатывается, то есть из стандартной детальки, которую вы получили, вы можете с помощью ножа, клея, винтов и так далее сделать более подходящую вам деталь. Они удобны, в том числе тем, что в них предусмотрены вырезы под различные стандартные компоненты. В частности, Troyka-модули. Поскольку все Troyka-модули имеют стандартные габариты, вы можете, используя одну и ту же деталь, закреплять все, что вам заблагорассудится. Итак, давайте смотреть, как я собираю это устройство. С одной стороны у нас есть панелька для четырех Troyka-модулей, как раз куда уместились все нужные нам компоненты: датчик освещенности, кнопка, датчик температуры и пьезодинамик. С другой стороны у нас пережитки прошлого — маленькая макетная плата со шкалой. Здесь вы можете наглядно убедиться в том, какой из способов монтажа более простой и эстетичный. Внутри, я не особенно скрывал это, у нас лежит Arduino с Troyka Shield. К колодке Arduino подключены все выводы шкалы, а четыре модуля подключены каждый к своим входам. Когда мы будем разбирать скетч, увидим, что куда подключается. Давайте теперь смотреть, из чего состоит программа. Я бы рекомендовал тем из вас, кто чувствует в себе силы, попробовать по моему описанию создать программу самостоятельно. То есть поставить сейчас на паузу ролик и попробовать свои силы. Ну а мы продолжим и посмотрим, что получилось у меня. За основу скетча я взял один из тех, что мы использовали в течении недели, там где выводили на шкалу показания потенциометра. Здесь у меня остались определения пинов. Затем я добавил пины для датчиков температуры и освещенности. Кроме этого, добавил пин для пищалки и кнопки. Вот в этой строке определен порог, после которого будет появляться звуковая сигнализация, когда температура повысится. Затем я определил несколько нужных нам переменных: для хранения температуры, освещенности, одну служебную переменную для подсчета количества светодиодов, которые будут зажигаться в шкалеTroyka Shield, — сейчас вы увидите, как они работают, — и две переменных, знакомые нам по упражнению с триггером, для хранения предыдущего состояния кнопки и самого триггера. Оба типа bool. В setup у нас тоже остались строчки из примера про шкалу, где у нас выходами делаются все пины, к которым подключена шкала, и выходом делается пин пищалки, а пин кнопки делается входом. Я напомню, что модуль «Кнопка», который мы используем, имеет на борту подтягивающий к питанию резистор, поэтому мы не делаем режим input pull-up и помним, что в нажатом состоянии кнопка будет давать ноль, а единицу — в ненажатом. Также я устанавливаю соединение с компьютером и сразу же вывожу строчку-подсказку, которая говорит о том, что нужно ввести t для получения данных о температуре и l — для получения данных об освещенности. Что же происходит в loop? Вы можете понаблюдать, как я взял куски из разных наших экспериментов и совместил их в один. Для начала в заведенные переменные я сохраняю то, что мы считываем на аналоговых входах. Соответственно, в температуру с датчика температуры и в освещенность с датчика освещенности. Затем идет фрагмент, который отвечает за обмен данными с компьютером. В случае если буфер не пуст, то есть мы с компьютера получили что-то, посмотрим, что это было, сохраним это в переменную mode типа «режим» и посмотрим, что в ней лежит. Если в ней оказалась буква t строчная или буква T заглавная, а ведь пользователь может незаметно нажать Shift или Caps Lock и отправить букву не в том регистре, а устройство должно корректно это распознать, то в последовательный порт мы выводим слово «Температура», табуляцию и само значение температуры. Аналогично мы смотрим, пришел ли символ l строчный или L заглавный и выводим сообщение о освещенности, если пришел l. Дальше мы будем заниматься управлением, выводом на шкалу. Сначала мы считаем кнопку в переменную current, как мы это делали раньше, для того, чтобы можно было сравнить с предыдущим ее значением и перевернуть триггер, если кнопка только что была нажата. После чего предыдущим значением назначить текущее, как это раньше и было. Затем в зависимости от того, истинный триггер или ложный, мы сохраняем в переменную countLeds, которую дальше используем, либо температуру, либо освещенность. А затем мы взяли строчку из недавнего примера про определение последнего горящего в шкале светодиода и в lastLed записали значение от 2 до 11, которое превратилось благодаря map из значений от 0 до 500, которые были сохранены в countLeds. Здесь нам уже все равно, температура или освещенность там хранятся. У нас там просто значение. Здесь я не стал брать полный диапазон до 1023, потому что ни датчик освещенности, ни датчик температуры в наших условиях здесь не дадут значение больше 500. После этого у нас остался тот же цикл, который был в том примере с lastLed. Мы зажигаем столько светодиодов, сколько нужно в текущей обстановке. И выводим, таким образом, либо температуру, либо освещенность. Ну и последнее, что остается из заявленного функционала, — это издать звуковой сигнал в случае, если уровень температуры превзошел заданный граничный уровень, то есть стало слишком тепло. Мы будем пищать на частоте 2 кГц в течение 1 секунды. Хочу сделать оговорку, что я не стал перегружать программу переводом считываемых параметров в систему C, например. Мы работаем с теми условными единицами, которые получаем при считывании аналогового сигнала на входе. При желании вы можете найти или вычислить формулы, по которым превратите температуру в градусы, а освещенность, не знаю, в люмены, например. Давайте теперь смотреть, как все это работает. Для начала посмотрим, как работает шкала. По умолчанию она отображает освещенность, и если я буду закрывать датчик освещенности рукой, мы увидим, что количество светодиодов меняется. Затем мы можем нажать кнопку, переключив таким образом шкалу в режим отображения температуры. Сейчас мы видим, что горит три деления. Ну и быстрый способ нагреть датчик — это «пожарить» его. Кроме того, что у нас выросли деления на шкале, мы услышали звуковой сигнал, потому что температура превзошла заданный порог. Хорошо, режим отображения непосредственно пользователю работает корректно. Теперь запустим монитор порта, и, как мы и написали в setup, он нам вывел подсказку, каким символом нужно запрашивать какой из параметров. Ну давайте попробуем запросить температуру. Она показывает нам эти условные единицы — 162. Проверим, отработает ли заглавная буква. Да, все так же. Давайте проверим освещенность, потом проверим заглавную букву, а заодно освещенность изменим. Да, действительно, она изменилась, причем в сторону увеличения. Ну такова природа данного датчика освещенности: он увеличивает показания с уменьшением освещенности. Вот и все. Наше устройство работает, как заявлено. Оно уже представляет собой целое полезное устройство или фрагмент некоего большего полезного устройства, ну и обобщает практически весь материал, который мы так долго разбирали в ходе этой недели. Теперь я предлагаю вам немножко передохнуть, а затем поупражняться со всеми новыми знаниями, пройти тестирование, ну и ожидать с нетерпением следующей недели. До новых встреч.

Часть: Видео

Модуль: Контроллер изучает мир

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

Курс: Строим роботов и другие устройства на Arduino. От светофора до 3D-принтера

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

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

Пройдя этот курс, вы сможете создавать устройства, которые считывают данные о внешнем мире с разнообразных датчиков, обрабатывают информацию, получают и отправляют данные на ПК, в Интернет, на мобильные устройства, управляют индикацией и движением. Создание устройств будет включать проектирование, изучение компонентов, сборку схем, написание программ, диагностику. Попутно с созданием самих устройств вы сделаете визуализацию на ПК, создадите веб-страницу, которую будет демонстрировать одно из ваших устройств, а также разберетесь с устройством и работой FDM 3D-принтера.

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

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

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

Программа:
  • Неделя 1 Один старый и много новых знакомых
  • Неделя 2 Контроллер изучает мир
  • Неделя 3 Цель обнаружена
  • Неделя 4 Как полить цветок из другого города
  • Неделя 5 Мобильный робот
  • Неделя 6 Как создать новый предмет за час
Преподаватель: Алексей Перепелкин (1), Дмитрий Савицкий (2)

Описание преподавателя: (1) Алексей Перепёлкин занимается развитием робототехники на базе ЛИОТ МФТИ. В 2012 году открыл для себя новое захватывающее чувство – когда устройство, которое сам построил и запрограммировал, работает. Свернул с финансовой дорожки и создал кружок робототехники для подростков. Готовил их к соревнованиям. Стал посещать конференции, а затем проводил мастер-классы для тех, кто тоже хочет организовать занятия. Совместно с коллегами в 2013 году разработал новые соревнования – Робопрофи – для конкурса Робот для жизни и провел их. В 2014 году впервые провел Arduino-номинацию на фестивале Робофест, а для российского финала Russian Robot Olympiad 2014 сделал творческую категорию. С тех пор эти соревнования стали регулярными. Летом 2014 провел двухнедельную мастерскую в детском лагере Никола-Ленивца, а затем преподавал в выездной школе, посвященной программированию и робототехнике, которую провели ABBYY и Яндекс. В 2015 году стал руководителем направления робототехники в GoTo Camp, выездных школах, где участники создали десятки проектов, от прототипов умных домов и операторских тележек до робота-бубниста и принтера для незрячих. В 2014 году с коллегами начал проект Роболабы: мероприятия для школьников и студентов, где участники параллельно решают усложненные задачи, а затем проводят рефлексию сделанной работы и оценивают чужие в ходе серии мероприятий.

(2) Физик, научный сотрудник, выпускник МФТИ. Запустил кружок робототехники в 2011 году. Рассказал Алексею Перепелкину о том, как здорово вести кружок робототехники. Рассказал об этом еще целому ряду людей. Побеждал со своими командами на соревнованиях. Проводил проектную работу с участниками исследовательской выездной школы МКШ с 2013 года, где руководил реализацией физических и робототехнических проектов, например, «Вслед за солнцем», в котором изучалась эффективность динамической ориентации солнечных батарей на солнце. Вместе с коллегами разрабатывал и был судьей Робопрофи. Участвовал в подготовке проекта Роболабы. Вновь пришел в МФТИ для проведения факультативного курса «Основы создания киберфизических устройств»

Организатор: Лаборатория инновационных образовательных технологий МФТИ (1), Лаборатория инновационных образовательных технологий МФТИ (2)

Описание организатора: (2) Московский физико-технический институт (неофициально известный как МФТИ или Физтех) является одним из самых престижных в мире учебных и научно-исследовательских институтов. Он готовит высококвалифицированных специалистов в области теоретической и прикладной физики, прикладной математики, информатики, биотехнологии и смежных дисциплин. Физтех был основан в 1951 году Нобелевской премии лауреатами Петром Капицей, Николаем Семеновым, Левом Ландау и Сергеем Христиановичем. Основой образования в МФТИ является уникальная «система Физтеха»: кропотливое воспитание и отбор самых талантливых абитуриентов, фундаментальное образование высшего класса и раннее вовлечение студентов в реальную научно-исследовательскую работу. Среди выпускников МФТИ есть Нобелевские лауреаты, основатели всемирно известных компаний, известные космонавты, изобретатели, инженеры.

Категория: Компьютерные науки

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

Тематика: Разработка ПО

Материал: