понедельник, 6 июня 2016 г.

2.4. Как считать аналоговый сигнал?

Урок: 2.4. Как считать аналоговый сигнал?

Транскрибация урока: Давайте для начала попробуем визуализировать аналоговый сигнал, поступающий на вход Arduino. Для этого существуют специальные устройства — осциллографы, но мы не будем подключать нашу схему к нему, а сымитируем его работу программно. Для этого воспользуемся отличным инструментом Processing, с которым вы будете знакомиться более детально на следующей неделе. А сейчас можете просто скачать его по ссылке в дополнительных материалах, а также скачать программу, которую я сделал для визуализации аналогового сигнала. Запустите Processing, откройте мою программу и обратите внимание на строчку, где указывается порт, к которому подключен контроллер. Нужно сделать так, чтобы его номер соответствовал реальному номеру порта, который вы видите у себя в системе. Также обратите на вот это вот число — это скорость соединения. Она должна соответствовать скорости, указанной в скетче AnalogReadSerial, который вы загружали в начале эксперимента. Не беспокойтесь, буквально в следующем фрагменте мы поговорим об этой скорости подробнее — просто обратите на это внимание при запуске программы. После этого вы можете запускать визуализатор, нажав кнопочку «Run». У нас открылось вот такое окошко, которое пока что пустое, потому что потенциометр выкручен в положение «0». Теперь я буду его вращать, и мы посмотрим на вот такую вот линию, которая соответствует изменению напряжения на аналоговом входе. Поскольку потенциометр позволяет охватить весь диапазон, мы видели изменения от 0 до 1023. Кроме этого, я добавил отображение минимального и максимального считанного значения — это может быть полезно, когда вы изучаете диапазоны напряжений, которые вам дают различные аналоговые датчики. Глядя на эту картинку, вы, наверное, поняли, что напряжение на входе изменяется непрерывно, то есть, в какой-то момент времени оно может принять значение, например, 2,8327 В, и значение можно уточнить более и более, но мы почему-то, глядя в монитор порта, видели числа от 0 до 1023. Дело в том, что сигнал, попадая в контроллер, претерпевает некоторые преобразования. Он проходит через аналого-цифровой преобразователь — АЦП. Если на пальцах пытаться объяснить принцип работы АЦП, он может заключаться в следующем: специально устройство — компаратор — может сравнить текущее напряжение с неким опорным и сообщить: 0 или 1 он сейчас получил в результате сравнения, больше текущее напряжение, чем опорное, или меньше. В случае с 10-битным АЦП такое происходит 10 раз, и мы получаем комбинацию из 10 нулей и единиц, которая, преобразуясь в десятичное число, дает значение от 0 до 1023. Таким образом, диапазон от 0 до 5 Вольт, который мы можем подать на аналоговый вход Arduino, делится на 1024 ступеньки, то есть разница в 1 означает разницу напряжения примерно в 0,005 В. Чуть меньше, на самом деле. Итак, мы получаем на входе некое число. Как же нам с ним работать в программе? Откуда оно там берется? Давайте посмотрим. Давайте вновь обратимся к примеру, с которого мы начинали эксперимент — из образцов скетча AnalogReadSerial. Наверное, вы уже поняли, что за чтение аналогового сигнала здесь отвечает вот эта вот функция analogRead. Это еще одна встроенная функция языка Arduino, которая предназначена для считывания аналогового сигнала. В качестве параметра она принимает единственный – номер пина. Обратите внимание, что сослаться на аналоговые входы вы можете, используя их обозначения, как на плате: А0, А1 и так далее — все эти обозначения зашиты уже внутри, в библиотеке Arduino. Обратите внимание, что analogRead вызывается справа от оператора присваивания, а слева от него указано имя переменной, которая здесь задается — целочисленная переменная sensorValue. На прошлой неделе мы уже создавали переменные типа int, и здесь нужно заострить ваше внимание на том, что когда мы хотим считать значение с датчика, мы должны где-то это значение использовать. В данном случае мы сохраняем его в переменную. Также вы можете его передать в качестве параметра в какую-то другую функцию или использовать в каких-то вычислениях. Очень много раз я замечал, как начинающие любители Arduino, желая считать датчик, просто пытаются вызвать инструкцию analogRead(A0). И, действительно, наверное, контроллер что-то считывает, но значение, которое он получает, не оказывается нигде. Поэтому когда вы считываете значение с датчиков, понимайте, куда оно отправляется. [ПАУЗА] Следующее, с чем нам нужно разобраться, — это каким же образом данные попадали в монитор порта, как мы их могли читать на экране компьютера.

Часть: Видео

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

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

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

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

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

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

Материал: