вторник, 7 июня 2016 г.

2.5. Обмен данными через последовательный порт

Урок: 2.5. Обмен данными через последовательный порт

Транскрибация урока: Теперь поговорим о выводе данных в последовательный порт. В языке Ардуино для этого есть стандартный инструмент, которым мы уже воспользовались. Давайте вновь посмотрим в пример analogRead Serial и обратим внимание на вот эту строчку в разделе setup, Serial.begin(9600). Что это за Serial, подсвеченное жирным оранжевым шрифтом? Это так называемый объект. Объект, который нам предоставляет библиотека Ардуино. Мы не будем сильно останавливаться в нашем курсе на том, что такое объекты. Вы об этом можете почитать дополнительно. Давайте к нему просто относиться как к некоему чёрному ящику, о котором нам известно, что мы можем от него получить. Что мы ему можем дать на вход, и что мы можем взять от него на выходе. Так вот этот чёрный ящик — объект serial — предназначен для обмена данными через последовательный порт. Физически этот обмен данными происходит либо через порт usb, через который у нас плата подключается к компьютеру, или одновременно через нулевой и первый пины платы. Если вы посмотрите на неё повнимательнее, вы увидите там надписи rx и tx. Они предназначены также для обмена данными. Именно поэтому, когда вы собираете ваше устройство, старайтесь использовать эти пины в последнюю очередь. Через них также происходит обмен данными. Когда мы загружаем скетч, он проходит через эти же линии. Именно поэтому, когда вы собираете своё устройство, старайтесь использовать нулевой и первый пины в последнюю очередь. Потому что, когда вы будете загружать скетч и там будет подключено что-то, это может воспрепятствовать корректной работе. Теперь посмотрим, что у нас происходит с этим объектом serial. Вы видите, что после точки написано слово begin и параметр (9600) передан ему? На самом деле, это практически есть вызов функции так же, как мы, например, вызывали analogRead или digtalWrite в первой неделе. Только в применении к объектам их обычно называют методами. То есть у объекта Serial есть метод begin. Он предназначен для того, чтобы установить связь со вторым устройством, в нашем случае — с компьютером. Поэтому он вызывается в setup, происходит это один раз в начале работы контроллера, а (9600), — параметр, который мы передаём, — это скорость обмена данными в бод, — это такие единицы, которые в цифровом обмене данными эквиваленты битам в секунду. 9600 бит в секунду — это не так много, но для того, чтобы передавать наши небольшие объёмы данных вполне достаточно. При желании вы можете увеличивать эту скорость, там, до значения, например, 115200, но, скорее всего, вам это не пригодится. Теперь посмотрим, где мы обращаемся к объекту Serial далее. Это уже происходит в loop, и мы вызываем другой метод println, которому передаём параметр (sensorValue) — переменная, в которую мы сохранили данные, полученные с аналогового входа (A0). Можно догадаться, что println отвечает за вывод строки в последовательный порт и важно обратить внимание на то, что он в конец строки добавляет символ перевода строки. То есть есть ещё один метод print, который выведет ваши данные и не будет переводить строку, тогда следующие данные выведутся сразу же за вашими данными. Сейчас мы проведём с вами маленький эксперимент. Просто сделаем какой-то вывод в последовательный порт и посмотрим, как это выглядит. Я подготовил экспериментальный скетч. Давайте посмотрим, что я сюда написал. У нас также устанавливается соединение на той же скорости, а затем прямо в setup выводится одна строчка: ("Privet"), написанное транслитом. Общение кириллицей вряд ли у вас получится, поэтому ограничимся выводом латинских букв. Итак, у нас в начале скетча будет выводиться слово ("Privet"), а затем в loop мы будем выводить с помощью метода print некое значение. Здесь мы мимоходом знакомимся с одной маленькой полезной функцией, входящей в язык Ардуино. Функция millis. Она возвращает количество миллисекунд, прошедших с запуска контроллера. Это вам может пригодиться очень часто, и вы уже сейчас можете посмотреть, как это выглядит. Посмотрите, у нас будет выводиться количество миллисекунд, прошедших с запуска контроллера, затем будет выводиться без перевода строки вот такая вещь: ("\t"). Подчеркну особенно. Это так называемая escape-последовательность, которая не будет выводиться в том виде, как мы её написали. Когда монитор порта получит \, он догадается о том, что это начало определённой escape-последовательности и выведет какой-то символ, который мы не могли бы написать вручную. Это символ табуляции. С помощью него вы можете довольно аккуратно форматировать ваш вывод в последовательный порт. То есть у нас будет выводиться число миллисекунд, а затем символ табуляции, то есть как будто бы несколько пробелов. Затем я сделал задержку полсекунды, чтобы у нас не слишком быстро всё это бегало, и вновь loop начинается и выводит новое значение, которое возвращает millis. Давайте посмотрим на то, как это будет выглядеть. Я запущу монитор порта. Privet! 0, 499, 999, и мы видим вывод через каждые 500 миллисекунд. Иногда это число увеличивается на 1 миллисекунду, потому что все действия, которые выполняет контроллер, тоже занимают немного времени. Поэтому иногда лишняя миллисекунда накапливается и добавляется к выводимому числу. Итак, теперь вы понимаете, каким образом можете осуществлять вывод в последовательный порт. О том, как читать данные, отправляемые из компьютера, мы поговорим позже на этой неделе. Пока что мы просто разобрались с тем, как работал наш эксперимент, с которым мы возились всё это время. Теперь я закрою монитор порта, и вы также не забывайте это делать после того, как вы удовлетворились его чтением. Потому что потом в процессе загрузки нового скетча вам открытый монитор может помешать.

Часть: Видео

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

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

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

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

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

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

Материал: