четверг, 16 июня 2016 г.

2.13. Отладка

Урок: 2.13. Отладка

Транскрибация урока: Хочу обратить ваше внимание на еще один способ полезного использования пьезодинамика и вывода в последовательный порт. В программировании, а тем более в создании киберфизических устройств, где программирование также присутствует, есть важный этап, называемый отладкой, который предназначен для избавления от ошибок. Чтобы от ошибки избавиться, сначала нужно ее найти. В средах разработки у программистов есть специальные средства для этого, которые например позволяют шаг за шагом выполнять программу, а не все сразу. И смотреть, в какой момент что происходит. Стандартная среда Arduino такого не предлагает. Но мы можем пользоваться дополнительными способами. Например, мы можем вставлять команду для создания звука в каком-то месте программы, где мы сомневаемся, что все происходит корректно. То есть если до писка дело дошло, значит программа до этого места выполняется. Затем мы можем эту команду переставлять далее по коду, чтобы обнаружить, в конце концов, в каком же месте происходит ошибка. Если нам нужно работать с данными, мы не уверены в том, что в процессе вычислений что-то было вычислено корректно, мы можем выводить значение переменных в последовательный порт. Или просто отправлять себе туда сообщение о том, что мы добрались до определенного места программы. Давайте попробуем немножко модифицировать наш предыдущий скетч, где мы получали цифры с компьютера и выводили их на семисегментник, чтобы понять, о чем же я сейчас говорил. Я немножко доработал эту программу, добавил туда пин пищалки, которую уместил в середину схемы, и затем ниже добавил отладочных строчек. [ЩЕЛЧКИ] Допустим, что мы отправляем с компьютера цифру, но на сегментник ничего не приходит. Причин этому может быть множество, начиная с того, что мы не подключили провод, заканчивая тем, что у нас, например, не работает сдвиговый регистр. Но нужно понять, в чем же именно проблема. Первым делом в коде мы проверяем, есть ли что-то в буфере. Пришло ли что-то по последовательному порту. И здесь я добавил вывод в тот же последовательный порт сообщение got data, ну то есть «пришли какие-то данные». То есть если мы там прочитали это сообщение, значит данные приходят. Если этого сообщения нет, нужно разбираться почему. Может быть у нас не установлены соединения или не совпадают скорости. Вариантов тоже может быть несколько. Затем допустим, мы обнаружили, что данные приходят, но на дисплей ничего не выводится. Может быть, по какой-то причине наше сравнение не срабатывает, то есть вот это вот условие считается ложным, при том что мы отправили ноль. Мало ли почему. Здесь я добавляю писк 3 кГц длительностью 1 секунду. То есть теперь если мы получили ноль и услышали писк, а на дисплее ничего не видим, значит у нас какая-то проблема со способом вывода данных на дисплей. Ну и, в конце концов, обратите внимание, что вся основная часть программы выполняется только в случае получения данных с компьютера. Может сложиться так, что они почему-то не получены. А вдруг у нас вообще контроллер не работает? Давайте чтоб убедиться в том, что программа хоть как-то работает, в конце loop'а добавим еще один вывод в последовательный порт, end of loop, то есть досюда программа дошла. Будем знать, что если что-то не так, то это внутри вот этой вот проверки и в Serial available. Давайте теперь посмотрим, как это работает. Я запускаю монитор порта и, например, отправляю команду «1». Мы получили аж 4 сообщения. Почему 4? Got data мы получили с связи с тем, что в буфере что-то оказалось. Затем цикл дошел до конца. Об этом мы тоже узнали. Почему же мы получили еще раз те же самые 2 сообщения. Помните, я обращал ваше внимание на вот это вот место — новая строка. На самом деле, при отправке сообщения с компьютера кроме тех символов, которые вы ввели, в конце добавляется еще один символ — символ новой строки, который мы не видим. Именно поэтомы мы получаем эти сообщения дважды. Что же будет, если я отправлю в монитор, через монитор отправлю ноль? Да, как и ожидалось, у нас происходит писк в том месте, где мы распознали, что переменная digit равна нулю. Вот таким простым способом я вам показал еще один способ применить пьезодинамик и вывод в последовательный порт для отслеживания хода программы и обнаружения возможных ошибок. Теперь если у вас что-то пошло не так, вы можете решительно обнаружить это, вместо того чтобы сидеть в растерянности.

Часть: Видео

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

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

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

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

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

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

Материал: