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

3.5. Работа с массивами

Урок: 3.5. Работа с массивами

Транскрибация урока: Каким же образом мы будем работать с этим набором измерений? Вместо того чтобы заводить десяток переменных и проводить с ними сложные манипуляции, мы лучше познакомимся с массивами. Что из себя представляет массив? Это набор однотипных данных, состоящий из скольких-то элементов. У каждого элемента есть свой индекс, то есть номер, и мы можем произвольным образом обратиться к к любому элементу массива по его индексу. Соответственно, массив имеет точно так же, как переменная, свое имя, и у каждого элемента, повторю, есть свой индекс. Я вот так вот схематично это изобразил. Здесь у меня массив из 9-ти элементов, которые пронумерованы от нуля до, соответственно, 8-ми. Что же мы будем делать для создания скользящей средней? Мы после каждого нового измерения будем перекладывать каждый последующий элемент массива в предыдущий, то есть у нас точно так же будет сдвигаться вот это окошко. А потом в последний элемент мы будем записывать то, что получили с дальномера. Измерили и записали последний элемент массива. На следующей итерации, на следующем измерении, соответственно, предыдущее измерение уедет в предпоследний элемент, и так все сдвинется, соответственно, до самого первого, а на последнее место встанет новое измерение. После чего мы можем каждый раз просуммировать их и поделить на количество этих элементов. Давайте посмотрим на www.arduino.cc, как выглядит синтаксис работы с массивами. Здесь мы видим несколько способов создать массивы. Как мы видим, это очень похоже на создание переменных. Так же мы указываем тип. Точно так же мы даем массиву имя. Но затем в квадратных скобках указываем количество его элементов. Затем при обращении к какому-то элементу массива мы точно так же будем писать его имя и номер элемента, к которому мы обращаемся. Еще раз подчеркну, что элементы нумеруются с нуля, поэтому в массиве из 6-ти элементов последним порядковым номером элемента будет 5. Первый – 0, 1, 2, 3, 4, 5 – всего 6. Затем мы видим еще несколько способов объявить массив. Во втором способе мы не указываем количество элементов, но мы явно их перечисляем. Вот таким вот образом в фигурных скобках через запятую можно сразу инициализировать массив, то есть каждому элементу присвоить значение. Здесь мы в этом примере видим, что массив состоит из 5-ти элементов и они все перечислены в фигурных скобках. Можно совместить эти способы и указать количество элементов в квадратных скобках, а в фигурных скобках перечислить собственно, значения, которые в них входят. Давайте теперь посмотрим на то, каким образом я реализовал скользящую среднюю в скетче. За основу я взял скетч, где мы выводили показания дальномера на светодиод и в последовательный порт и начал его модифицировать. Во-первых, создал макроопределение (вот это вот MA), в котором мы обозначаем, по скольким измерениям мы будем усреднять. То есть как бы какова ширина вот этого окошка скользящей средней. Затем я создал массив measurments, то есть вот эти измерения. Длина его связана как раз вот с этим макроопределением. Какой ширины окошко мы хотим сделать, такого размера массив и создадим. И затем уже в лупе создал цикл со счетчиком, который пробегает от нуля до предпоследнего элемента массива по единичке. И на каждой итерации мы в текущий элемент записываем значение следующего элемента, то есть вначале в нулевой элемент массива мы переписываем то, что было в первом, затем в первый переписываем то, что было во втором, и так далее до предпоследнего. А затем в последний элемент массива мы, наконец, считываем новое текущее показание с датчика. Обратите внимание еще раз на то, что к последнему элементу я обращаюсь как к «MA минус 1». MA в нашем макроопределении (в данном случае 7) – это количество элементов массива. Соответственно, номер последнего элемента будет на 1 меньше. Вот таким образом я сохранил в последний элемент то, что показывает датчик. Затем я создаю переменную, в которой мы посчитаем сумму этих измерений. Делаю ее типа long, потому что если ее сделать целочисленной (int), то в случае, если мы хотим усреднять по большому количеству измерений, если их будет больше 30, больше 40, int переполнится и мы получим некорректные вычисления, поэтому я сделаю ее типа long. И создал еще один цикл, который на этот раз пробегает уже от нуля до последнего элемента массива. Поскольку у нас написано «меньше, чем MA», то мы остановимся именно на последнем элементе, номер которого на 1 меньше количества элементов. И к вот этой переменной mean прибавляем каждый элемент массива. После чего в сокращенной форме я записал mean /= MA, то есть разделить полученную сумму на количество элементов и снова записать ее в тот же самый mean. И затем уже в последовательный порт и на светодиод мы выводим вот это вот усредненное значение. Теперь давайте посмотрим еще раз в визуализатор и сравним картинку с той, которую мы видели недавно. Согласитесь, стало гораздо более гладкая линия. Понятно, что неидеальная, но тем не менее больших выбросов уже нету. Вы можете поэкспериментировать с шириной окошка, посмотреть, как будет меняться вот этот график при разном количестве измерений, которые мы усредняем.

Часть: Видео

Модуль: Цель обнаружена

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

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

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

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

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

Материал: