Образовательно-методический комплекс по предмету РОБОТОТЕХНИКА
учебно-методический материал по теме

Косицын Сергей Юрьевич

Обучение примерно разбито на три ступени освоения.

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

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

Первая ступень "Конструирование механизмов и основы программного управления " для учащихся 5-6 классов

Программа предусматривает первое знакомство с основами  конструирования и программирования  механизмов и роботов. Обучение организовано по двум основным направлениям: конструирование  с применением специализированных конструкторов Lego разного уровня сложности и начальное программирование. Изучая простые механизмы, ребята учатся работать руками (развитие мелких и точных движений), развивают элементарное конструкторское мышление, фантазию, изучают принципы работы многих механизмов. В сочетании двух предметов (конструирование и программирование), образуется общий курс робототехники, который  предполагает использование компьютеров и специальных интерфейсных блоков совместно с конструкторами. Компьютер используется как средство управления моделью. Его использование направлено на составление управляющих алгоритмов для собранных проектов и моделей мобильных роботов. Обучающиеся получают представление об особенностях составления программ управления, автоматизации процессов, моделировании работоспособных систем. 

Вторая ступень "Программирование стационарных и мобильных автоматизированных систем" для учащихся 6-8 классов

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

Скачать:

ВложениеРазмер
Файл Дополнительная общеобразовательная программа «Основные блоки, элементы конструкций и механизмов»646.11 КБ
Файл Дополнительная общеобразовательная программа «Конструирование механизмов и основы программного управления»669.01 КБ
Файл Дополнительная общеобразовательная программа «Разработка, конструирование и программирование стационарных и мобильных автоматизи207.88 КБ
Файл Открытое занятие «Программирование ботов с использованием датчика касания»80.89 КБ
Файл Положение по проведению конкурса-викторины по робототехнике «Новогодняя механика» 16.34 КБ
Microsoft Office document icon Положение по проведению соревнований по робототехнике. «Программирование движения автономной системы «Фигурное катание»287.5 КБ
Файл Учебное пособие «Программирование в среде NXT».522.62 КБ
Файл Положение по проведению конкурса по робототехнике «Мой Луноход» 16.46 КБ
Файл Тест текущего контроля усвоения учебного материала «Введение в конструирование. Информационные процессы» 1.34 МБ
Файл Тест текущего контроля усвоения учебного материала «Информация и её свойства. Информационные процессы» 77.44 КБ
Файл Самостоятельная работа. к тесту «Информация и её свойства. Информационные процессы» 13.14 КБ
Файл Викторина знатоков «Элементы легоконструкций и механизмов» в рамках проведения конкурса по робототехники «Новогодние конструкции562.55 КБ
Файл Положение по открытому конкурсу "Робо-сумо"99.17 КБ
Файл План проведения соревнований "Робо-сумо"27.58 КБ
PDF icon Бланки протоколов для соревнований по "Робо-сумо"258.86 КБ
PDF icon Заготовки наградного материала для соревнований по "Робо-сумо"1.93 МБ

Предварительный просмотр:

ГБОУ ЗДТДиМ

Дополнительная общеобразовательная программа «Основные блоки, элементы конструкций и механизмов»

ДЕПАРТАМЕНТ ОБРАЗОВАНИЯ ГОРОДА МОСКВЫ

ЗЕЛЕНОГРАДСКОЕ ОКРУЖНОЕ УПРАВЛЕНИЕ ОБРАЗОВАНИЯ

ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ГОРОДА МОСКВЫ

ЗЕЛЕНОГРАДСКИЙ ДВОРЕЦ ТВОРЧЕСТВА ДЕТЕЙ И МОЛОДЁЖИ

УТВЕРЖДАЮ

Директор ГБОУ ЗДТДиМ

____________ О.Н. Сорокина

"____"______________20__г.

ДОПОЛНИТЕЛЬНАЯ ОБЩЕОБРАЗОВАТЕЛЬНАЯ ПРОГРАММА

«Основные блоки, элементы конструкций и механизмов»

Направленность - техническая

Уровень - ознакомительный

Для учащихся  4 классов

Срок реализации программы –  1 год

Авторы:

педагог дополнительного образования

Косицын Сергей Юрьевич,

методист

Косицына Ольга Георгиевна

МОСКВА – 2014


ПРОТОКОЛ СОГЛАСОВАНИЙ

ДОПОЛНИТЕЛЬНОЙ ОБЩЕОБРАЗОВАТЕЛЬНОЙ ПРОГРАММЫ

«Основные блоки, элементы

конструкций и механизмов»

УТВЕРЖДЕНО

Методическим советом

Протокол №_______

от"____"____________20__г.

Председатель методического  совета__________________/                               /

СОГЛАСОВАНО

Управляющим  советом

Протокол №_______

от"____"____________20__г.

Председатель управляющего  совета__________________/                               /


Содержание

  • Пояснительная записка

Направленность

Новизна и актуальность

Цель и задачи программы

Отличительные особенности

Возраст детей

Сроки реализации. Формы и  режим занятий

Ожидаемые результаты и способы их проверки

Формы подведения итогов

  • Учебно-тематический план
  • Содержание образовательной деятельности
  • Список  статей и каталог файлов
  • Приложения:

№1 Название деталей конструктора


Пояснительная записка

Направленность:

Дополнительная ознакомительная  общеобразовательная программа  «Основные блоки, элементы конструкций и механизмов» реализует техническую направленность, ознакомительного уровня.  Способствует формированию у обучающихся интереса к технике, развитию  конструкторских способностей и технического мышления.  Предполагает обучение конструированию с использованием образовательных конструкторов LEGO.

В основу программы были положены элементы образовательных программ дополнительного образования детей  «Легоконструирование» (Авилова С.Ю. г.Тюмень), «Легоконструирование» (Щетинин Н. А.)  

Данная программа разработана с учетом требований письма от 11 декабря 2006 г. N 06-1844 Министерства образования и науки Российской Федерации «О примерных требованиях к программам дополнительного образования детей» и в соответствии с СанПин 2.4.2. 2821– 10 ст4.12 и СанПин 2.4.4.1251-03

Актуальность и педагогическая целесообразность:

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

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

Цель и задачи программы

Цель  создание условий для  развития технического мышления средствами легоконструирования.

 Задачи

образовательные:

  • изучение  основных принципов механики и способов передачи движения;
  • формирование навыков  работы по инструкциям;
  • формирование навыков выполнения творческих проектов;
  • пополнение словарного запаса  техническими терминами;

развивающие:

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

воспитательные:

  • формирование думающего и чувствующего, любящего и активного человека, готового к творческой деятельности в любой области;
  • аккуратность;
  • умение работать в коллективе;
  • воспитывать чувство доброты и взаимовыручки;
  • уважение к чужому мнению;
  • усидчивость.

Отличительные особенности

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

Возраст детей

Набор в учебные группы ведется из числа учащихся 4-х классов (10 лет).

Сроки реализации. Формы и  режим занятий

Программа  ознакомительная и рассчитана на 1 год обучения:— 88 часов. Их них  64 часа аудиторные занятия, и 24 часа социальная практика.

Материальная база робототехнического класса обеспечена 10 индивидуальными и 5 групповыми (на 2-х обучающихся) рабочими комплектами, (включая преподавательский набор). Конструкторы состоят из большого количества мелких деталей, что требует особенно внимательного  педагогического наблюдения за каждым обучающимся на занятии.

Учитывая это учебная группа состоит из 8 человек.

 Занятия проводятся 2 раза в неделю по 1 часу. Занятия комбинированного типа (сочетание теории и практики) с применением метода проектно-исследовательской деятельности. Структура  часового занятия по конструированию соответствует требованиями СанПиН 2.4.4.1251-03: 5-10 минут  организационная и теоретическая часть, 25 минут работа с конструктором, 10 мин уборка рабочего места разборка моделей.

Ожидаемые результаты и способы их проверки

Учащийся может знать:

-правила техники безопасности при работе с конструктором;

- названия всех деталей конструктора;

- виды соединений и их характеристики;

- способы соединения деталей.

- определение конструкции, ее элементов;

- основные свойства конструкции;

- примеры жестких конструкций и где они используются.

- условные обозначения деталей.

- приемы повышения жесткости и устойчивости конструкции.

- виды, способы и области применения ремённых передач.

- определение и  виды зубчатых передач и способы их применения.

- виды зубчатых передач под углом 90°;

- особенности реечной передачи.

- приемы передачи движения с помощью ремённых и зубчатых передач.

Обучающий может уметь:

- соединять детали конструктора различными способами;

- характеризовать различные соединения.

- собирать жесткие и устойчивые конструкции.

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

- самостоятельно конструировать механизмы способные передавать энергию и накапливать энергию.

Формы подведения итогов

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

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


2. УЧЕБНО-ТЕМАТИЧЕСКИЙ  ПЛАН

Разделы и темы

Теория

Практика

Всего

1.Введение в предмет "Легоконструирование".

2

-

2

2.Конструкция. Основные свойства конструкции при ее построении.

2

4

6

3.Ознакомление с принципами описания конструкции.

2

6

8

4.Индивидуальный проект  по теме "Конструкции"  

 

6

6

5. Простые механизмы и их применение.

2

6

8

6. .Индивидуальный проект на тему "Простые механизмы"

2

12

14

7. Передачи.

6

10

16

8. Занятия по промежуточной и итоговой аттестации

4

4

9. Социальная практика

2

22

24

ИТОГО

18

70

88


3. СОДЕРЖАНИЕ ОБРАЗОВАТЕЛЬНОЙ ДЕЯТЕЛЬНОСТИ

1.Введение в предмет "Легоконструирование".

Теория: правила безопасной работы с  легоконструктором. Ознакомление с конструктором "Простые механизмы". Названия и назначения всех деталей конструктора. Виды соединений деталей. Изучение типовых соединений деталей.

2.Конструкция. Основные свойства конструкции при ее построении.

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

Практика: построение моделей с использованием технологических карт.

3.Ознакомление с принципами описания конструкции.

Теория: понятие конструирования (постановка задачи). Способы описания конструкции (рисунок, эскиз и чертеж) их достоинства и недостатки. Условные обозначения деталей конструктора.

Практика: чтение  технологических карт.

4.Индивидуальный проект  по теме "Конструкции"  

Самостоятельная творческая работа учащихся по заданной теме. 

5.  Простые механизмы и их применение.

Теория: понятие о простых механизмах и их разновидностях. Примеры применения простых механизмов в быту и технике.

Практика: построение моделей с использованием технологических карт. 

6. Индивидуальный проект на тему "Простые механизмы"

Теория. Учащимся предлагается самостоятельно разработать конструкцию или механизм с применением полученных знаний, умений и навыков.

Практика: самостоятельная творческая работа учащихся по заданной теме. 

7. Передачи.

Теория. Ременные передачи. Виды ременных передач; сопутствующая терминология. Применение и построение ременных передач в технике. Зубчатые передачи. Назначение зубчатых колес, их виды. Зубчатые передачи, их виды. Применение зубчатых передач в технике. Виды зубчатых передач. Назначение зубчатых колес, их виды. Зубчатые передачи под углом 90°, их виды. Реечная передача. Применение зубчатых передач в технике.

Практика: построение конструкций по теме "Ременные передачи"

Построение конструкций по теме "Зубчатые передачи"

Построение сложных моделей по теме "Зубчатые передачи"

Построение моделей с использованием технологических карт.

Индивидуальный проект  по темам "Ременные и зубчатые передачи"

Самостоятельная творческая работа учащихся по заданной теме. 

8.  Занятия по промежуточной и итоговой аттестации.

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

Занятие по итоговой аттестации.   Правила безопасной работы с конструктором. Проверка умения работать по технологической карте. Проверка знаний элементной базы конструктора. Выполнение творческих заданий. Скоростная сборка-разборка конструкций.  

9.  Социальная практика.

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

Участие в качестве зрителей или участников в технических конкурсах, играх, викторинах,.  праздниках.


МЕТОДИЧЕСКОЕ ОБЕСПЕЧЕНИЕ

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

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

Организация педагогического процесса предполагает создание для обучающихся такой среды, в которой они полнее раскрывают свой внутренний мир и чувствуют себя комфортно и свободно. Этому способствуют комплекс методов, форм и средств образовательного процесса.

Формы проведения занятий разнообразны. Это и лекция, и объяснение материала с привлечением обучающихся, и самостоятельная тренировочная работа, и эвристическая беседа, практическое учебное занятие, самостоятельная работа, проектная деятельность.

На занятиях предусматриваются следующие формы организации учебной деятельности: индивидуальная (обучающемуся даётся самостоятельное задание с учётом его возможностей), фронтальная (работа со всеми одновременно, например, при объяснении нового материала или отработке определённого технологического приёма), групповая (разделение обучающихся на группы для выполнения определённой работы).

«Красной нитью» через весь образовательный процесс проходит индивидуальная исследовательская деятельность воспитанников.  Именно это является основной почвой для формирования комплекса образовательных компетенций.

Как правило, 1/3 занятия отводится на изложение педагогом теоретических основ изучаемой темы, остальные 2/3 посвящены практическим работам и повторение материала предыдущего занятия. В ходе этих работ предусматривается анализ действий обучающихся, обсуждение оптимальной последовательности выполнения заданий, поиск наиболее эффективных способов решения поставленных задач.

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

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


Каталог файлов

  1. Программа «Лего-конструирование» в год 64 часа в неделю 2 часа

Муниципальное образовательное учреждение «Средняя общеобразовательная школа №88» Руководитель: Авилова С.Ю. г. Тюмень, 2009

  1. Программа кружка «Лего - конструирование» Муниципального общеобразовательного учреждения  «Хуторская основная общеобразовательная школа» Учитель: Щетинин Николай Алексеевич. Огромная благодарность.
  2. Плакаты с названиями деталей и схемы размещения

Графические файлы с изображением деталей с названиями, а так же удобные схемы размещения для конструкторов 8547 и 9695

  1. Название деталей конструктора лего набора перворобот

Полный перечень деталей конструктора lego 9797 и 9695 упорядоченных по категориям.

Список статей

  1. Программа «Лего-конструирование» в год 64 часа в неделю 2 часа
  2. Муниципальное образовательное учреждение «Средняя общеобразовательная школа №88» Руководитель: Авилова С.Ю. г. Тюмень, 2009
  3. Курс по LEGO-конструированию для 4 класса. Курс составлен Наталией Александровной Быстровой
  4. Курс по LEGO-конструированию для 3 класса.  Курс составлен Анастасией Викторовной Павловой
  5. Конспекты уроков ЛЕГО во втором классе приложения
  6. Курс по LEGO-конструированию для 2 класса. Курс составлен Наталией Александровной Подлесной, г. Москва 
  7. Курс по ЛЕГО-конструированию для 1 класса. Курс составлен преподавателем ГОУ Прогимназии №1781 Людмилой Николаевной Сторублёвой.

 Приложение№1

Название деталей конструктора.

Название

Изображение

Кубики, кирпичики, пластинки

кирпич 1x2

https://lh4.googleusercontent.com/ga7ArlwbcBj9aqXzkFqKlGGtWt9Z3Mr4MBNuX07o2JYMurBPOJSKyzppNFKKCS_ex0RBBsQEWgJgu8a-s7VQogTKFx2ZySlENt40GSufmcJy4LunOEA

кирпич 2x2

https://lh6.googleusercontent.com/X-x9w0rq7HWfPsddwcTvUXr7YtvdMOW0TEu9CjdcTlWZPwQPVHYi2qdZ9Noyp6jos2N32fm3T_tavIoipgfMOPEkvvwYcorhYVP3LnXXUZ2JMEhFrTQ

кирпич круглый с крестовиной

https://lh6.googleusercontent.com/j-vERqIRWZa0zFApUUi_iVkDUC5UlkKarYDIaGkR71sSecnwo001HshcrgR4nf4qGVU6gJGiCHj0uoIR0Pa7rLHvSlrVxMDABh_LoxqqC9idntBOJjA

конус

https://lh5.googleusercontent.com/mB_hHD5IYKLvGi2ieznczCJzKTjJBTfN-ihSgoCzZgWusBNrsFwiDyZ9HEHp8bNlhW0huTCAuEepBC4tzET8Vqk2Hio-iYEICBzR-dFmjTM-ZbGMFoo

пластина 1x2

https://lh4.googleusercontent.com/OcL8xR8STZVUXHL6e9JPV7P7tEzw-HkeWie3kOHqrNyFYQ65puPzS_AFf14xnYNYKhdz2GwWsNfLQlPFvxp0vnfjGc271-p1AkM1FwDra0jGbNPhcOc

гладкая пластина 1х2

https://lh5.googleusercontent.com/t04_x23UB5dUugTt6h0ejOTf9PM28z7GAiyBuIWX58l3QxKIkNwqGgmiHGnHtttUNb67MfHQns2-b6uRsHxeC0PSPktveB-23bE1qf6lQNYLYVra_1c

пластина 1x4

https://lh4.googleusercontent.com/hlf-A-xLv5ql8BWjTUcGDja2ZB82GPFzMoTqSRp8KOVCxtQQqNhoQmjxVbaBt07Ek2AoAcT9FopxMqPeeQ3ghTJDOzj8pLTOXlV23J-0J8NZRsql1-8

пластина 1x6

https://lh6.googleusercontent.com/XDtkLlh2nKitIQIYAAH_KJKXpwnUdaxAj2PuqwSLJ_1d_YjMR0_TDuntvT7vHNN5BeOiFv6e9pWuc6BJ9Ya6gbYv1y77MYyBDXrhPwrtwAFts4gCiZk

пластина 1x8

https://lh5.googleusercontent.com/tVapVsSCztJyuYi2zR4_504sAtshG2pbGhRAwPHm0CY_bjv66q0nzyKsHuG8gedfdU2mdRBAI1CTXitxVS_VUCh3sZqUXCXgAZfypQRE1n56ZPd-2rg

пластина круглая с крестовиной

https://lh5.googleusercontent.com/D5Z0tijvyu6eM_cCgm3hcPjCFX7IAX04BNIhL61P-1-mlni3dJD9XLRNMfmFZjwo4iFJzuKfzVracTcbZ_Ml4VDLu7al5V72wsgeNa9H5owTap2fx14

круглый скользящий башмак

https://lh3.googleusercontent.com/dCuHyTgPXRG4DBdD2CZ0_hL2VtJ6qQ6LkOx10nkD4Z4CA4mGR4x9T166iAqR9uISO2WjWXj_clBfdN25Qs5k0IU0-BrSmZn1VLlQoMQ6jX11A0xD0lw

пластина отверстиями 2x4

https://lh3.googleusercontent.com/ngu0-d77lK4d9U5DLbgEiqcPH5vQ01Q6_f0Cp0i081dZsFwnqoDr09qFQscF1-4CWgU72pjoC31_xOKbxKS5_5DXx7UzCYDpHnoSa0GIMJ3SkCjUlIg

пластина с отверстиями 2x6

https://lh4.googleusercontent.com/19UaeEG_RoJ2og_qm6PHi_XFQLQF6-BSHiI9ZjQboklFMUZEJOkOvCZg7NPRLTH9SyDVQq7WSCY4nXLL0WPqHtg2tX3v8uTMhfmgSoUjoTqt050Kwbg

пластина с отверстиями 2x8

https://lh6.googleusercontent.com/b-Os5qVesEBpBy7yCEyV3RAU3SniCFFWG2oR95KIVI-1tCiZ3NA1fVl88rdamEfBLw6XOPeswZ2tpRQ6Zq4edN29UQPGTt3qGzBrsJFGZj00PDWEIGI

кирпич с отверстием для оси

https://lh4.googleusercontent.com/QK6WNo1PnyxlxzL-pI74CIyu_FKM_366L8-b-iDRYeJ6P_6e5-SgnOVW0jLjjOGAe0KSMDSON8JNSZm6nmkfXYsCBo86Bo4pzA-Z079Z2WPLS7zAqg4

Балки с выступами

балка с выступами 1x2

https://lh4.googleusercontent.com/oxo_wquDlBlBpiZl1MleY17EIPGQfeVrVdOMNAWDR0mxjJPvmzmLkjMoHn9aM2W-kZRiJk3CEMx-qxjJfbnEq3yqnCVg78v8aZZHaKijbRc9zGykW-U

балка с выступами 1x4

https://lh3.googleusercontent.com/P2XVb3a8EvNUTe6Tmu1ghcUJTeDmk7gAyYspMpt8kZPcNGY3W2gb1ZiKmrgPqKCcerB9uMOHD6vnZkcwVi1YEBp-7KOrm63S-p50QyUtKOmhyP24Brw

балка с выступами 1x6

https://lh4.googleusercontent.com/z9kcHC8utQi7GZ4TQY6FPXhbbeOZOa-Eil34jyyWLl-jlqaOioL8eMavEhVyNOlMeaUFTL4khKTWJuAzV6Gpd79ejeQ8HfDPvikhvDA4JqrHEjc2S3E

балка с выступами 1x8

https://lh5.googleusercontent.com/BmHYCKxNEb3JxXFeeMnS5r0fyJyVObx8_XWGz7EJnl-U_niCwJ-SE8ueJlXeaG6O6fmQzpVJJ-qp97OiUQ7LuJvnlKuDLXiBhft5lo2_f5hrgk7Ac0M

балка с выступами 1x12

https://lh5.googleusercontent.com/zKrdYknZVa9OmanK5TtV71FcqLoCYX8Jb1XEFGUqcAUkXFZnxEsbbop8tfbMiOJZBxzAAFhlpIGf65yjNYKsRFYSIxBoxRe1NqT035HqaNyFNLCouWo

балка с выступами 1x14

https://lh6.googleusercontent.com/kbtZpc1uRJQ71LLxQqStI88ZhlOVVSu6otsdwahCqIcpyUSlEMh_rhBQnFTQ0TzBxB7KW9-WdQ4np_k06_yT-tGYG7lkx03eU4NdiRte7Wg-mmNtUrc

Штифты

штифт

https://lh4.googleusercontent.com/l_zX7MOl11U1w0apR_6rQo4HFXyZGOri4y32x2RNPGH8EGWub2_rDN4VCyhHMFZDLpUoWpVeXcUVGTYVUVxusI9a4sBmtcagRg5zSeO0TDnuYAaQ-dY

штифт

https://lh4.googleusercontent.com/8sDj5uoEnkBAxZLjHlptM209M9Yzx9zgtVC_EbiVZyyu5dmB5DUrZJs4nbVb7QJRUX7xaS2BDh9m_pOdXqYeCVpiYOPtZLM1X7IzJE3RxNNRUGoNkxw

штифт с выступом

https://lh6.googleusercontent.com/2Bc4QON9rr3bz8vE0wPkSbvxqpys7NAc_scWNXYONQKya6-EzW0PXLIP0APd2S5fsn9DQHgwkU7xd3hWiEvBtIys656BqT_bCP0dhIDEZyldSeHmUVo

штифт 1/2

https://lh3.googleusercontent.com/CNcl-F_vkrSuMIVOajSNYW1_H7x0Dq0Asp4TtPhsKKjtp2A1xU8qqBot2z_oUBkWkmSKjhw2oxNgU13_3JQsSPDBtSnjSHUI2dErmIRPcgyjUWH7nfU

штифт трехмодульный двойной

https://lh3.googleusercontent.com/xeElXyhCATo2AD_ieo4hAckeoNQW1dnl97IBBmZJsQiSG-8YfoNtiT45F2wEZC-LejhEK51Q316Rsm_3Wo6LOeAGTN7PHQqveN1nBmIOWwjrPIPYso4

штифт, шаровой

https://lh6.googleusercontent.com/lOt06pC5MdcjiP9zJvFC6UUAirsRYPIcvcSSataPzKbnDHG_SCLeH74-nSOgp6qu6WrRsKBHOu3-lumaXJicW428QqALM4OWCVge05T0HYMBED1nw3Q

штифт крестовый

https://lh5.googleusercontent.com/bLcJgNavMHSJoo084SmVUX1rf51xmg9S1krTKa6byC3P6rUHMVqpyWZ4uV0Qo_rmREo2--f0-svMjicAUF6ZJJRcDMSjTWEktd--rput6__Cp3P2uM8

штифт крестовый с выступами

https://lh3.googleusercontent.com/0tIW4rTxqTLIuHY1oIo8Tb6kgEeaiHCedCGtOLa0zQcWNwHkORZiuj7aIv4hJBC8UVF911qYounVC27kRTbT84dXih_fk-gG9MO2V2st4ATayoiT9z0

длинный штифт

https://lh3.googleusercontent.com/61TMU4bGh-aN3dRWZNFs8fFdJElJppPk2YG1KoCr6RjKxNNFdF7UdeWWnTXGxFdStNdOYlLwGqmG_dQnglXwxFh-CH14AzlzNVRSrcUBGzncZ4oUMUg

длинный штифт

https://lh5.googleusercontent.com/OdyN6nHUUoCglgjKMpWfOhHXzWpb1KWXBeXoQxSG5yje9eybNoGL4727w2ill2rvjMFx482M7dstH7syokCyATYyO-acTCqaMska8RUH2OUNaaZhoO4

штифт со втулкой

https://lh3.googleusercontent.com/EqmXROGwxc-0WX-55PBT-FSHU5vskx4dC0GC9SJZqCYQ3OBdLd5s5syTvVYn3i0FgbJA805h04-oXn1txcXPw4um_7VUsx7Kr3th-bZL7Kof_2LnLXg

штифт крестовый с круглой головкой

https://lh6.googleusercontent.com/2MVw3NuJqAKctGTSeYB8xdoCyUML2GSLH0A-utPENEBGy1H-HjdDEWNyu6bu3MDwscaMot9rvlCE_fSaQhFJJG9mAjfyPCmBAApdh36l3dDe_6AgGZo

Оси

ось 2 с канавками

https://lh6.googleusercontent.com/vSsF5YmiJlVACzLF-r9v6tQS3tN1OTObqES7KNQOwQT4n8jzs9iYqazKFJRsJCbpePutfIpg_RPGWCnOuABd1_bb7DFWnSOXmsbt0YTWnl8ePN8qdxo

ось 3

https://lh3.googleusercontent.com/jSILD4zvv_RRB21taJ6PDkutCojpLaUpzZ9AIZHDXxleTJNEueWh6o0pdGRi7mKSHjYfcx669Rkn1clZgAr-vWDQl-ed8bS5x1hLFqBvj9ouF4kvbSI

ось 3 с шипами

https://lh6.googleusercontent.com/L8mY24L-VrsZCGiQFasLVZ-7QxlrhuLfWHSXL10OEXxsqSU_ZxLQsUKDxmRZTjv4wzOsvtMtC_IdMiIdwSaZViYYvE9SiS4h6xbSs1YNIxvQKxA4iw4

ось 4

https://lh5.googleusercontent.com/ercmV8U0AvB4IpGMLcrkEV6ZcgJygBUligMs7iR7yqV5Rj67bU8-MvxQZ86YUnJxGwixccZnXRf7zqGkGjxLb9Fg7g9c1H4x63uwl-Y3qilaArvdr-Y

ось 5

https://lh5.googleusercontent.com/hL059nSTgm2ZG_FOdxul61_l3OgBf796Y496eCfHqQ0UKy9UPonhnqd07iqeKwObhVRAZXaMsUGufzxmwj_d4aZVpkCsxrWHOfX-BaAx499lOi7AxuM

ось 6

https://lh3.googleusercontent.com/-KlVOsOUH3AeODbQcnx2n1uuiWehXrtF6VhWOojGlZj9cMNYye8l3lEH3YatC4vSOms7CeFmx7nNNDns3rsvHzPILZIil_Dyh5ZZF6RLFUrvGuz04ew

ось 7

https://lh4.googleusercontent.com/2WlCZUIaeLx3yHOeecOgmhlxNp8e5sVYsFdFepCadWcHzb1ajObFEvtAsmyLOgWcqZBofh8bx7M30gt-u9Y6MqZTkdGwjyffXZklfHcSyR5YunEbi34

ось 8

https://lh5.googleusercontent.com/oiEb9NRzLD-1IBakrI6Mi3vNuWiphx1jfNykdt7FNWg1wQsGbDvBVFth6a8bqqFZIfz09E88T0NVeIdyQXuRHtQ4eqpYzutR19Qq2uyoZvscOEQMN-8

ось 10

https://lh6.googleusercontent.com/36f96UQzG_W_0ETCcYMDl8r09nVPpi9GSC7cmaQQz_z9UqiQ0cKT7y4g0KAFssz614cHOzy7YgHcm0UDfyR0A0-zhZO_p9C5UQPs9ESMzsHRflSpndk

ось 12

https://lh4.googleusercontent.com/njcQhGj49_ah3vPvk97f56_4BIH5hdJ1FF_lCYJ1vmQWfb-Z8ZhfjAvoElvZiPV0GD_q01ytetCN6CEEji0qtdiXY7l9Za3Eoa012kfuUxIJP7qz_wM

Соединители и втулки для осей

универсальный шарнир

https://lh4.googleusercontent.com/BfxlDHeojusHWcuEpVXCKgV_7cT6ifKp0bSvW0Qqnm33Tub_rInm7seo7N6u4ADvbmj6i6BXjdl_lpvEbtZW3jha_5ZzvvAAmZS_16XOwpCgNSQEdQU

удлинитель оси

https://lh6.googleusercontent.com/26bSMWOBqo0zHVx_nX5L3tO5RfupVb3ouxkmmVi3WxiAeBTuMumVI5rsKvCQl66_VFYw3ADkp8drhTGmGhQC_KQzDrnjvHYDVkiGeiMNqBID6na2WHc

втулка

https://lh3.googleusercontent.com/G_6poDJMt1Vj_Xn2ycJNtLwsJbNyPIa1s6by2q-uF__adS2Wt5J3mA2a6hThEvu2a1S2zLeEBuOUi29jLKgwaZj_FBLwPiFq2K0TbxrtiGaqrFIc5MI

втулка 1/2

https://lh6.googleusercontent.com/Kb-dIlp4Otc_ORvRdFYlXSmmLUfi7Ufpa0olPbQFvUXipvxXDlL4KWxQAfnCD3GqrD5rKpSkUlePLJqDxzP9k6R_7OBApb9QVIpD5K48MVOidPKonLQ

Балки

балка 2

https://lh3.googleusercontent.com/WAzW_klHeDf_BTTxQoN8pPHFEhf1O25FhCfFJZcCw8Jw-PmV4q7Wg2wF2mkQfWer47gSPDXng5KIr2ni2kyhRV9aOtWI4wVTGA063F29VIeWR5ODUlw

балка 3

https://lh5.googleusercontent.com/yrJmlEOeCuZjeqJBYkZg-qgKYUv86g0s5OoKhiMyTzUVAuvc1ePjACwqhXC7Piv1YDCWAAKQVlUA7aup4Q_OeLT2wVWjOF_-SAU1DN_pSZHT_UuNBbI

балка 5

https://lh3.googleusercontent.com/5_navd9GhFhu1tivQ7EAhSWFkwZggCsT_FTkeG6fgRGOZSjmMmRREBpg2AMsqetpkijkBqhsI8kztRBuEHtWXq_BPgzm6gsbxQrJfXOVF7NzVrJUtfY

балка 7

https://lh4.googleusercontent.com/KTvQohc1-T5jV8UgAMS6Zcv4C41DUvAV84yJUV1NMh7fLkNF0oeIgwPYQUp3hSE2ZYyaPZ78s0cfGRQ6HnNcFG9xq-GLv6M8NtQAa7nKi8OqBsfsmyU

балка 9

https://lh4.googleusercontent.com/qfVJJWLFSSd-JSRiJSj5VQzwJwVmA8BgSaAZ3mY9Zny0mFI4m2scuaaaRKXcuQhH5alM8SKa_8H4iCZTa8fcLg66f4e3SC6tqE9O365OkFiFLlJFjco

балка 11

https://lh6.googleusercontent.com/coo2f0IIGXpqymRilhdtRG50Z2-C4Pv8pXNiNSw4GezymePdrr7y0_ic7M8LZm47C5oGmqV9pdv2XMCs4luOp2YdcVuOeo4TqOuaW-sJxb3m8ECXDxM

балка 13

https://lh3.googleusercontent.com/IVNfJ-KYZxGU279NtFUb_kKIPkcalY70SU11Jnkwo0W-lecNa3ZyNe3I8_msENQr0XGWxm096Jd93cXJFm6cGHH29TDo4iEtRWMGumjJfQAn3bKCl6g

балка 15

https://lh3.googleusercontent.com/E5Pwnw_xal3OobxI4P6-8ZZLAejCaivjJVIpdapW2OZaUTEGcceX808skPCy-yUFUx_3tpwZCGYBNXUSgsCAcGZj4w1w7vEyVGXQFpDY0zIZzs_V6JI

балка с 4-мя штифтами

https://lh4.googleusercontent.com/zlpRZJeO5gAYKo25s9a22JJ3tQbzd4N8Ue2Uzj3bMTOj-r-MyRr_ad4XyyQx1NrZgLiDA9GgZ-C96wDNRZ25-P5gODQB-8L8fV-eK_3G80zI4pdcGDw

Изогнутые балки

балка угловая с 4 штифтами

https://lh4.googleusercontent.com/hpqheRlhLEEAV_g89sFI9DoFoXjXGScsoVKioUJvPR5TCTDvNkgLWM9FyVnOCj-REs3BW-0qBh0_gMsNdcmRq0b0m3TewTu6BbNEmlIby7iPEBs19YA

балка  угловая

https://lh5.googleusercontent.com/_K_54ahA-t_VnqWDFfwZDz7tJhB6uhMm9bx4b92XF0cUK6KnzNB8PPz95bGlHalTmwtMY2lwxipPXvhCUwXvfwOXfl3vsXDccoM_oMhl8--l1e-twSA

балка изогнутая 4х4

https://lh5.googleusercontent.com/7pwqkYdrJwJRPW1OBnvnkZOtA7ikrgvAITNnzlX1Sezy7w4rOnUc6GSpTF-g84gKYxgWtE1sK_gEIsTdJtUJPLm3ZiYpyTYua4632f6KoK-sw_3uocg

балка изогнутая 7х3

https://lh3.googleusercontent.com/Iyoe_c4vZTe87s9WVS9ThrgfeZ_r0KwyGfqUqXdK4NPViYzzQEX_ZhjCVLrMjQC6znvwaru4vhx4_faoos-3LgKCBSMOeM0lQplesrn7kMvMi3IiX9g

балка дважды изогнутая

https://lh5.googleusercontent.com/OLfvx_3OU_Qi_BcXKVTDpHav1_WmwSxqqIKZ1VRRW9ji5MzuwNzQ2ybuzuPovQ953N1n7WSOR--N9AZuKIt4pXHdNou4NFdiaGeLpLNqzF5l81P6-BI

балка Г-образная 2x4

https://lh4.googleusercontent.com/YNVckQYyjp0JxdqLRcZMLhZ2qskT0sdC-qpWDejaDLYxLqZflTH6Bpn7zURS2obpX5FZ2gJDHhnygUpZ6cSpGW43yNHsBugJGB4jsPSRiUeHPsKesis

балка Г-образная 3x5

https://lh4.googleusercontent.com/rCj-dxC87F7dWy74G93N_NW9Gd6KHuLZABvqzOSEOk-Wmr5nf_c5E6fTr0kO0kmA3yDQoQnbg3OACbgQ_JR2Q6PAG2EKGl8vM1B64kO3AqyDgp0g5Zz4

Фиксаторы, конекторы

кулачок

https://lh4.googleusercontent.com/SKbrjbDmp2X5cfopMQeC5ZC_C2Z85v_csXz0mvA34bPTJDRNSA-gMedQjozpSpPJIg01MaOCyvdmof9AuL8coZw0CA_s1B91AfBA6zN3IqadokiHly0

амортизатор (демпфер)

https://lh3.googleusercontent.com/OCVurysyFV-j491PXyge21z-eDw1yjJVrrMLd64zvJGI1Kkw6FAhJr9aeJ0zVDpoKY2w7NXLLAD41FY5hq0zEESUmFYTb6Z3cLUqvCqfwC6MPelv_Qg

фиксатор поперечный с осью и отверстием для оси

https://lh5.googleusercontent.com/kWzp58xt7AGKTT3kTSnnLiMIf3OvjUkSxE5YiwreiQkf-xiMlTaxZNsGmORPK5iAEBOy4ZQT5nZH-CUi0O-WVZIgd-pwhWEPNXPfqayAT0rjDGnv2lA

угловой фиксатор 0° (1)

https://lh6.googleusercontent.com/Msxcp-d3tvBaKbX5msMRebJn3iqHxojnj-TSO3FR_KZNW0oXkPTXabJawBxXw1WAcdZiY3G2gWwTeegEOe0JLelnJ05RgvHZwnCIst1OmF2KwXy010c

угловой фиксатор 180° (2)

https://lh3.googleusercontent.com/hT7AQriDJNtJKW8ZgN-GSbLdDTyrTz23-4Ii1wp0K-k2_gISyBMR0p8cM5rvRnDJHCNtVttE01mZutws8MaXmNOKpFXXwZwH2AAXSyQKGV-0jGFhfr0

угловой фиксатор 157,5° (3)

https://lh6.googleusercontent.com/z3DcORnanfVjjlUEsB8XTSOAnj_KaVBdk_6B---pl19HFj5AvfQIRTqvr9hRaKMiXdDqwyTVa3T_lEUKUaFGzVwi4BNU_G2N_9N8PF5peMO4XgBtQa4

угловой фиксатор 135° (4)

https://lh6.googleusercontent.com/FVzA7wcKi4ERBN4Og5lPWndAAnVzP_DtBzfcPg7SjCxOfv2owNYqpaWIhxywW6ka3mag6QNlfJs97SL7HXhxxzVnUX2qGSJNBxNErs926BYWNTrp91w

угловой фиксатор 112,5 (5)

https://lh3.googleusercontent.com/Uq1_AgLihhijGB_Ar4RC8dVducMrGONH44drJUjhfMLF-Z5lYti3caVDwSPscT6mIt-0Js2EalhFVzn8PXJ2ZHl1z_PUn1FMP13f8W4IcnudsxUjjSM

угловой фиксатор 90° (6)

https://lh3.googleusercontent.com/v-JpnPabMRqfYm9tWucPwjUw0WW1EoH5gPQUf7Gb0G6iZFCxlbDmKEM_B2ZAZXktFg52JHuMpkyLT8EVcQykBCxlayGW287uoRwHPW4voQdZyQgiVI8

фиксатор перпендикулярный

https://lh5.googleusercontent.com/smHuCwaU1z7QsLPdbyaU22XlzCCAtJsk-TeSay1YBCw4Y4KfMZZsIzKKvNGUnhHzEfdxNBLkOT1Zsi_wU9jEi10HcjraNDyBoSAs8XlCMNvlu_MIqWI

фиксатор двойной перпендикулярный трехмодульный

https://lh6.googleusercontent.com/UCZluKWoKDIYeAhg07iL96ngSNPn2K2f7K1_5J6YApGuwETSf9kqcsDeYdyR8bdWlFHYiw5zmn-Y0jRI2k9kkTJ7AoTl6XGEt0-9Wj0s_jKeCK5hHrw

фиксатор тройной перпендикулярный трехмодульный

https://lh6.googleusercontent.com/vuQMLW5HRhGN3pMe8Y6B1aluRrwD_ar6i3SVHxHvhQIPzoYxAhvwhoWBi-iCqP1YQ7DuqQJmTtxue2zLQ_7dxuvAqVRkT124GjfUA7Xq7A2sS-Nq9yY

фиксатор перпендикулярный двойной

https://lh6.googleusercontent.com/sFsHK-Hq9S-X7Z5UQLi_MOxfAqelSWhixUoBCwTK5jZ14VXGE7TXC_4HhXD9eQQb82oEphKstxjlxssojQK2QZ66B9hgClV0gkj-ZgHKOZY7z0OFbvY

фиксатор перпендикулярный парный

https://lh3.googleusercontent.com/v3X_xyjhSTYiVvsOhUpgNUxWSLevtYGdr-d3Bsq6-jWIsp8wpwB_cepiS4NZmC_BoX0mkKhGBI-iEziq9C70BVMNiY_OQt3gmhIGsIuXyX_qkl3W1io

фиксатор перпендикулярный с двумя отверстиями

https://lh4.googleusercontent.com/ngaRFQhlZDcGKgCJmBeTLUEP-0xBf__ekaGj_zRnSZMKko5ks3AMrLIo87QSYr0r_Wkq9ayQYtE_xl3WEwJnlxJzlvFbVnsSZ6s9CUBrU2iqqFnQ5iU

фиксатор поперечный с отверстиями для оси

https://lh6.googleusercontent.com/b63uY4uz-b6rhspBEQWwvFoKRIgrbg9zUdO6UJDQoqm9ztyqI-SgoJzl_QErecW3wGa-EHOrjZfrqhJpOhB65EaIbf8QiXmTXwsIiAj-xcMAcDqIs2o

шаровая опора

https://lh6.googleusercontent.com/1hiLIaSFhZwIqV1kfLIjHfcin8YuchDWoLTxcgUqqqSfeSBwFGUKNOVPctpVbkpa3mxr8tQg0BGurj6OrAP4sts-PiMNtI-3DUNfK-cWJG0OLjo66AA

коннектор двойной перпендикулярный

https://lh4.googleusercontent.com/ZXHWyxt_8ZjwT1mKyJWqre5jFM4dF5TrI2Ym2sWCZT1tvGMldDnrHUgmmZudBaRzk0lmvZF341GPNxFuKKllXDTgeCGilkYYNQIduEn005jhaf23v8k

вороток

https://lh6.googleusercontent.com/4sNApuV7qRrmhRyu6XxPHDG3uX-2Ztpocp-K1dCliv-KqLuEH4LJTng2N20fH-9sM5Jrjb0iuIKoMAIVzBpTZ7LtwCUxvInktPeKcvLl8ok0C96MODA

коннектор круглый

https://lh5.googleusercontent.com/2_dQNAyrXAamZO9lKP3AMg3Cfpt926E3a0KjLmPoZHvAx-fPcJWPEDy0DyVT1NpWViV0ljkxcEg_DxX003x9TL-6QrScShd89L-4_UpA7e-H-1xIl3A

рулевая тяга 6

https://lh3.googleusercontent.com/bWivRFv368jU-3ow2Ad_WaFYcFKwvGKRRZRQOFQ4uVwJc76mI_LLYeG9_kJyBGvOBUYqb4QHANwAUhZAAHAsww7bDmQ6L2dC4oeAoCN7v9fEh1FnaGE

рулевая тяга 9

https://lh4.googleusercontent.com/KvnwP7vf4l43_4Oj3_8jx227hFBKaLIxpnWMx2shMho8sGcySeSx_OtDGIqHSKe1Oqra6JHOEZpD2tC4sboE7j5dDxAslIy-YH7Wm7bvDuLpNlxyxRk

треугольник

https://lh3.googleusercontent.com/xt8r5ChpVUp53Wi3wqWsSJZGvefDldePiNh971MfMm-dwnxZIAa5xwY2zMgrZpYW9t9jiD_4MxCi78dpLnDX0oQPikxCEJNTems2xYsM-iRUQv-wHFs

Шестеренки, передачи

резиновый ремень желтый

https://lh5.googleusercontent.com/1GOXWlXzeYWdXZjaqOMjhq0B-5f0EX3_VJ1xb_PA9w_j_rV2Iz69gsOJ-9OsDP_uPbg12Epon25Gq_gGZQc257Pod_ABvj8RuMdd0dL0Qf9VvOD4LqI

резиновый ремень красный

https://lh3.googleusercontent.com/Ce9BIlybtfrOH5S9XpUnTVnsmyL3q1V2q5Sr_MSz4LFptjEJ3wJzYyymynQU9IybMRTHFWIMJc8h8CbEJDF1A_Lz2pAGcCewW6oCf7kZEmqiXP6Z2h4

шестеренка 8

https://lh5.googleusercontent.com/z3xeMP0wReX7DzL3Ym6o4ufepg0O2HXC3AyfvO49qcd_tR7devVq-NM_YP2DbJK-PvX_z0oAApXWNg6m6Aq5oBoEDYC_L6bTkRChD9HcFX18zB4Aem8

шестеренка коническая 12

https://lh5.googleusercontent.com/xVPjP_GYV8p-BkOLjoa-eZn23OY3q9fWec4j_RHEKjMqBT3R9S3NKZpV6gmZOW4H89560_5LvPJoTGhT0QVD2tJsGUbnP8Z8FdYYIaLGZR-oetKS1eQ

шестеренка коническая двойная 12

https://lh5.googleusercontent.com/VJ_05hmrJO3D0y-Q7vmwNP4BLhAGhPeQHiFI7INYPkSbfSkT72KBuQhFm3nTi3stOl4mwUgX5oD7i9Mx-DAcGKtn_O9Kdn7iq6yYSHbPQ9jKnXAH5Eo

шестеренка 16

https://lh5.googleusercontent.com/OTUGdY5wIz8pS-iRpZWj1zSRlbbBktSwTnPXwovJkccABI2NCl_nTzNqUtlkE4-7Y1L5eJtIHvFZxpP3ZR8FdbOruRZrJRgpyZ5zO2gn9V2yMqHhcH8

шестеренка коническая двойная 20

https://lh6.googleusercontent.com/I8JSUg_aqkROAG5RYugA4DoiDMYOi1IhjhUCHSAGeJhoD_254yo_NIr-nbvKtIfA6A8Ysl5YpxYSwZiN9WgTacgbwPydxhWvxxjOHQM4ThdgkBP43rI

шестеренка 24

https://lh3.googleusercontent.com/vkgkHPz4qmNWFh344P0qSuxXm-fnDE5xxl1pIRzQL5nZm5jfg454marQ4mcqvs7pqrvmGjYH4rP5LLTx7_vTEIgf_r3-RoXK4qycNxEYi6vmDLqCAVE

шестеренка корончатая 24

https://lh5.googleusercontent.com/sK5-4neitJm5kS6ljIZ_y20OFSg8TC9GUKwrKAgl4GLVqHoW1YNnKWA4AgQ03grmfKR5_4wjTSRlvC1u8zoTZbLEszVJKK0cE9GWwKt7A27ICGy49g8

шестеренка коническая двойная 36

https://lh3.googleusercontent.com/ZZGcLVupc6CQbL9Qhkh1vDeNwri6TzcAD3z2eTtM-fc7zFVVjKYFBK_O6KOecqqMDuzo6QaFYmJDqS9hNq7klXugUMz2vryPwAMBinY8gYnsn8KdvWc

шестеренка 40

https://lh4.googleusercontent.com/vdwjdby8TeowxFn550Jv9N7a4VPYaYh0qCUzGO6w3bHZjmQHc9_J4lmR0hW5pfra9GAq0ioWyf1WtP64bQDXovkBWwyGOgQS5t_zGr3TCgHzZTbd6_k

коробка дифференциала

https://lh3.googleusercontent.com/DtsYExZoXoh-wXJuGkdJ-eGjUt6jf_JMMkJ6bUfVCbD61nbZsNHEj-g36tWhnFukpeZ4PHQxsxnHu5Sgt0YRe5hLyxeX4F8iw0_Rbr0oYx34s-HejgQ

угловая шестерня на 4 узла

https://lh5.googleusercontent.com/nLaM6gjpipgKVPE1f-fLzN-R49_sR7zlGZ90sQQ2QN0e6bc-rV5bZIsoNO2Jz6rKTKQXmEqbn7dL1sLmTls2My0ZSxLuXbGcnLv6Wmq8KP-xJkBjVRA

червячная шестерёнка

https://lh3.googleusercontent.com/OpOMma-KhfIC9Pjy3a3JmXbn9zSaoz2E5CyhZZz-XDrf3tIeFEn3oIJcsa92tbXJKXartM6vzdovexRTi52eWKapbJtJFx-7bUAzjk9eycSj_9tm5-w

корпус для червячной передачи

https://lh3.googleusercontent.com/IJusnXmy0D1NNQwX1hGgHWDnP89lc-wxWNwybQpfN1Zu62v9bDI12uZIgTlpcc_gOD_q5b1QVhQbXPA5EY7Pu3zB_iMTxzWvOosKhLcRAB_v-OSChKw

звено цепи

https://lh5.googleusercontent.com/CKclzB3X0BuTtBjpY3OzvS2Sy-VNkyl1JBLkdiFnnyjwmyWqR3JggvnnBTKJHrbVv4lJGUPs_yVE5AR_zfb93Fesc_liKumFT7JStswYq6rPYX5S8Us

зубчатая рейка 1x4

https://lh5.googleusercontent.com/9dVNST_Msa6W74jAj6lLyXUAZZOEV6L6HGdi4Fc_oBwiIDeN6ZuF-yFG2SrgbyNkD-8B8DZWm_sQjU_ReU1DnieCPsHqkhjBUltAnI_FicHE8K3E-fs

зубчатая рейка с отверстиями 1x8

https://lh6.googleusercontent.com/d4AxWOzPDZ0KTyvWe5fpgW54gC7M0sZVg9p9aSyAif4epVoGmZ9KIUWvelALlJbnhk94HKEmcVsqGvQ0VmfDDFI2AeqymEFUw7vPZqzh5HvdBeEFPBk

шкив

https://lh6.googleusercontent.com/Il8ZEVXAg5rzZAD0fpIVR5U1osVmsgEIHBQsUUxv3DMmLsEbRcUnLJ-NAhraIO0hsx_9pijpWzpYYXiV-RqZIQQycmve8bvQDOdpztQ7_7kADszCgpY

Колёса

шина

https://lh6.googleusercontent.com/Yv34paunT4w6qX0gcX2vOl7jODjU0K4RNKvZjcf-E-6XCjEfRHMXGe2b_5ohKtZVDWoVd8fWYqqpj87cBV-QrSbgTst2svsPEmcvkRZzTBApAMe-fw8

шина 43.2x22 ZR

https://lh6.googleusercontent.com/uc9IZhRagfNL2sae4QxUkOLF9U6Qje6JrwUooZ62MCmQXG29bxApL0-xTvp11PMpV18g55jmr1ow0NcfSYFzrXpMr7J_GV1tXE4aOlT_4AQrii0soT0

шина 56x26

https://lh5.googleusercontent.com/IlmvrBuZQfHcMilrWWkwuza6En5noZqm6i8JI_dLKT1CpevWdvBWZ_jRzVd5RMNtYJIlzPoQkvEcOOlllKcI-7QDR9EdkQjHiebaTtQVp6yv9kRyjcs

шина 81.6x15

https://lh3.googleusercontent.com/Kux9G4tIT1tBcMOCHSQsLQzZnnBkeJ71oSzcu7_zlxqK4Fe2lzoR9uEfVPyrUGPxnBOOhnF9AbT2u2x4LWSQ4OC27VWSEydGCAaLpSFBb9tCpY0mvFo

диск 43.2x22

https://lh4.googleusercontent.com/i52KSWkWfd5GX6N7AI6eEE5TSab3zDrZwlisMAvWHqtDqRfHNG4LjDjeiXqWXWA6wJSakF2NmKh9d9-WktZ-ZToDdd4XxgP0q-9SBo56Kr6HvZDoGKA

диск 81.6x15

https://lh5.googleusercontent.com/9tblBzWEI9c6mFXrbXKxocBeysnVyzTdG386fx7kq1ukO2AZwE-CmYiSg6VGgTv0st77fBDWYqVyQFlZdk5GsUytsW8mcZUvPGr-ZuWDjIT3kZ6itsc

Декорации

стрела

https://lh3.googleusercontent.com/bGAFa4Nqy38gRqqjQEJf9SSEAiFpKUD6ekh6EHAGRkehA3NXber7yZiZwQoULJ6wUICRF9sj5EmPvDjmwExYJ1M-1IdmmMtSgToJB4g727xm35YtNgA

пушка

https://lh6.googleusercontent.com/8sVYqe2QxoKnmsJ5seFIg4tO9_2mN6XonKPguKiBrpJvBZtsRvyO6Q-0qYTTzP_73mQtm3gzsmKKQMe4OImM-S317B-NVZGwcflhoURMVZ1JX6wsqjY

зуб бионикла с отверстием для оси

https://lh3.googleusercontent.com/dTgwNdkSprPALEoAl9iRhpYDzdX6KwHLFRItYbQxGLCW9ZzwF-Rh1YHYIECtOWUCze7oOsqbt6u94zg4MK-m83oMCsQla0rd-vcfL2RZOL14EVwE36M

коготь бионикла

https://lh6.googleusercontent.com/NKdLJP7ULAk_bfSbyMGtlQvtoXPV9Wghz4ZRQOcXHtQMkSyjUSdfH2C-DJOxnoev3w-QA8VR8c90n4kY9U98toon9oQDv07gl2tX9_KNpBLEdSUkS1M

крюк большой металлический

https://lh4.googleusercontent.com/BvWHTUTeK1wuTZugztJf7f4B7nf3-MlCWXtThv1qE5Dk0njRtzC5_svTYDzK2NsrFjFMyBQUSId-0bx4RWQ3odwmGKi4TwpKjQ2lJ4u6SGwTpohmptI




Предварительный просмотр:

ГБОУ ЗДТДиМ

Дополнительная общеобразовательная программа «Конструирование механизмов и основы программного управления»

ДЕПАРТАМЕНТ ОБРАЗОВАНИЯ ГОРОДА МОСКВЫ

ЗЕЛЕНОГРАДСКОЕ ОКРУЖНОЕ УПРАВЛЕНИЕ ОБРАЗОВАНИЯ

ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ГОРОДА МОСКВЫ

ЗЕЛЕНОГРАДСКИЙ ДВОРЕЦ ТВОРЧЕСТВА ДЕТЕЙ И МОЛОДЁЖИ

УТВЕРЖДАЮ

Директор ГБОУ ЗДТДиМ

____________ О.Н. Сорокина

"____"______________20__г.

ДОПОЛНИТЕЛЬНАЯ ОБЩЕОБРАЗОВАТЕЛЬНАЯ ПРОГРАММА

«Конструирование механизмов и основы программного управления  »

Направленность - техническая

Уровень - базовый

Для учащихся  5-9 классов

Срок реализации программы –  1 год

Авторы:

педагог дополнительного образования

Косицын Сергей Юрьевич,

методист

Косицына Ольга Георгиевна

МОСКВА – 2014


ПРОТОКОЛ СОГЛАСОВАНИЙ

ДОПОЛНИТЕЛЬНОЙ ОБЩЕОБРАЗОВАТЕЛЬНОЙ ПРОГРАММЫ

«Конструирование механизмов и основы программного управления  »

УТВЕРЖДЕНО

Методическим советом

Протокол №_______

от"____"____________20__г.

Председатель методического  совета__________________/                               /

СОГЛАСОВАНО

Управляющим  советом

Протокол №_______

от"____"____________20__г.

Председатель управляющего  совета__________________/                               /


Содержание

  • Пояснительная записка

Направленность

Новизна и актуальность

Цель и задачи программы

Отличительные особенности

Возраст детей

Сроки реализации. Формы и  режим занятий

Ожидаемые результаты и способы их проверки

Формы подведения итогов

  • Учебно-тематический план
  • Содержание образовательной деятельности
  • Список  статей и каталог файлов
  • Приложения:

№1 Информационная модель объекта

№2 Название деталей конструктора

№3 Положение по проведению открытого  конкурса-викторины  по робототехнике «Новогодняя механика»

№4 Занятие «Программирование ботов с использованием

датчика касания»


Пояснительная записка

Направленность:

Дополнительная базовая  общеобразовательная программа  «Конструирование механизмов и основы программного управления» реализует техническую направленность.  Способствует формированию у обучающихся интереса к технике, развитию  конструкторских способностей и технического мышления.  Предполагает обучение конструированию, моделированию и компьютерному управлению  с использованием образовательных конструкторов LEGO и аппаратно-программного обеспечения.

В основу программы были положены элементы образовательных программ дополнительного образования детей  «Легоконструирование» (Авилова С.Ю. г.Тюмень), «Легоконструирование» (Щетинин Н. А.)  

Данная программа разработана с учетом требований письма от 11 декабря 2006 г. N 06-1844 Министерства образования и науки Российской Федерации «О примерных требованиях к программам дополнительного образования детей» и в соответствии с СанПин 2.4.2. 2821– 10 ст4.12 и СанПин 2.4.4.1251-03

Актуальность и педагогическая целесообразность:

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

Обучение организовано по двум основным направлениям: конструирование  с применением специализированных конструкторов Lego разного уровня сложности и начальное, объектно-ориентированное программирование.

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

Цель и задачи программы

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

 Задачи

образовательные:

  • изучение  основных принципов механики;
  • ознакомление с основами программирования в компьютерной среде моделирования LEGO Mindstorms NXT-G и LabView 2012;
  • знакомство с основами  робототехники;
  • формирование навыков  работы по инструкциям;
  • формирование навыков выполнения творческих проектов;
  • пополнение словарного запаса  техническими терминами;
  • формирование навыков обработки информации;

развивающие:

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

воспитательные:

  • формирование думающего и чувствующего, любящего и активного человека, готового к творческой деятельности в любой области;
  • аккуратность;
  • умение работать в коллективе;
  • воспитывать чувство доброты и взаимовыручки;
  • уважение к чужому мнению;
  • усидчивость.

Отличительные особенности

В сочетании двух предметов (конструирование и программирование), образуется общий курс робототехники, который  предполагает использование компьютеров и специальных интерфейсных блоков совместно с конструкторами. Компьютер используется как средство управления моделью. Его использование направлено на составление управляющих алгоритмов для собранных проектов и моделей мобильных роботов. Обучающиеся получают представление об особенностях составления программ управления, автоматизации процессов, моделировании работоспособных систем.

Возраст детей

Набор в учебные группы ведется из числа учащихся 5-9-х классов (12-15 лет).

Сроки реализации. Формы и  режим занятий

Образовательная программа рассчитана на 1 год обучения.

При реализации предмета «Программирование» вступают в силу правила СанПин по работе на персональном компьютере Компьютерный класс в ГБОУ ЗДТДиМ (каб№ 306) имеет общую площадь 63,2 кв.метра. В соответствии с требованием  СанПиН 2.4.4.1251-03 п4,п.п.4,5 площадь на одно рабочее место должно быть не менее 6,0 кв.м. В связи с этим количество рабочих мест, которое может обеспечить учреждение -10 шт. В соответствии с 9.4.20 на запрет использования  одного ПК для двух и более детей учебная группа может состоять не более чем из 10 человек.

Материальная база робототехнического класса обеспечена 10 индивидуальными и 5 групповыми (на 2-х обучающихся) рабочими комплектами, (включая преподавательский набор). Конструкторы состоят из большого количества мелких деталей, что требует особенно внимательного  педагогического наблюдения за каждым обучающимся на занятии.

Учитывая это учебная группа по робототехнике состоит из 8 человек.

Программа рассчитана на 176  часов в год. Их них  128  часов - аудиторные занятия, и 48 часа - социальная практика

Занятия проводятся 2 раза в неделю по 2 часа. Занятия комбинированного типа (сочетание теории и практики) с применением метода проектно исследовательской деятельности. Структура двух часового занятия по программированию соответствует требованиями СанПиН 2.4.4.1251-03: 5 минут  организационная часть,  15 минут теоретическая часть, 25 минут работа за компьютером, 15мин.-перемена, физкульминутка (легкая разминка для снятия напряжения плечевого пояса, туловища, глаз см. Приложения), 25 минут - работа за компьютером, 10 минут беседа, общее обсуждение результатов работы индивидуальные консультации,  25 минут - работа за компьютером. Компьютерные игры на занятиях не используются, т. к. увеличение времени занятия не способствует хорошему усвоению материала обучающимися, ведет к перегрузке. Структура двух часового занятия по конструированию соответствует требованиями СанПиН 2.4.4.1251-03: 45 минут  организационная и теоретическая часть, 15мин.- физкульминутка (легкая разминка для снятия напряжения плечевого пояса, туловища, глаз см. Приложения), 45 минут работа с конструктором, 15 мин уборка рабочего места разборка моделей.

Ожидаемые результаты и способы их проверки

Учащийся может  знать:

-правила техники безопасности при работе с конструктором и на компьютере;

- названия всех деталей конструктора;

- виды соединений и их характеристики;

- способы соединения деталей.

- определение конструкции, ее элементов;

- основные свойства конструкции;

- примеры жестких конструкций и где они используются.

- условные обозначения деталей.

- приемы повышения жесткости и устойчивости конструкции.

- понятие простого механизма;  понятие точки опоры, точки приложения силы, плечо.

- примеры использования рычагов в различных механизмах.

- правило равновесия рычага.

- определение блоков; области применения блоков.

- приемы передачи движения с помощью блоков.

- виды, способы и области применения ремённых передач.

- определение и  виды зубчатых передач и способы их применения.

- виды зубчатых передач под углом 90°;

- особенности реечной передачи.

- приемы передачи движения с помощью ремённых и зубчатых передач.

- определения энергии и ее формы;

- виды форм энергии; примеры преобразования энергии из одной формы в другую;

- виды аккумуляторов энергии, способы передачи энергии;

- основные блоки и дополнительные устройства компьютера;

- назначение операционной системы.

Обучающий может уметь:

-владеть навыками работы с аппаратными средствами (включать и выключать компьютер;

-запускать различные программы на выполнение; использовать меню; работать с несколькими окнами; работать с файлами и папками (создавать, выделять, копировать, перемещать, переименовывать и удалять);

- соединять детали конструктора различными способами;

- характеризовать различные соединения.

- собирать жесткие и устойчивые конструкции.

- конструировать рычажные механизмы.

- применять правила рычага на практике.

- анализировать конструкции с применением блоков.

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

- самостоятельно конструировать механизмы способные передавать энергию и накапливать энергию.

Формы подведения итогов

Формы подведения итогов реализации программы зависят от сложности изучаемой темы и индивидуального уровня развития воспитанника: творческие работы, самостоятельные работы репродуктивного характера, занятия на повторение и обобщение (после прохождения основных разделов программы), работа обучающихся над творческими проектами. Систематическое наблюдение за детьми в течение всего времени реализации программы, включающее: результативность самостоятельной деятельности, активность, творческий подход к выполнению заданий, степень самостоятельности в их решениях и выполнении, уровень усвоения знаний, умений и навыков, предусмотренных соответствующим разделом программы.  Публичные защиты творческих проектов и исследований. Для фиксирования результатов обучения в течении года используется Сводная индивидуальная карта

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

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

УЧЕБНО-ТЕМАТИЧЕСКИЙ  ПЛАН

Разделы и темы

Теория

Практика

Всего

Конструирование

1.Введение в предмет "Конструирование".

1

1

2

2. Конструкция. Основные свойства конструкции при ее построении.

2

6

8

3. Ознакомление с принципами описания конструкции.

2

8

10

4. Индивидуальный проект  по теме "Конструкции"  

 

8

8

5. "Рычаги". Простые механизмы и их применение.

2

6

8

6.Блоки

2

4

6

7. Индивидуальный проект на тему "Простые механизмы"

 

8

8

8. Передачи.

2

6

8

9. Энергия

4

8

12

Программирование

10. Правила безопасной работы с персональным компьютером. Электробезопасность. Пожаробезопасность

2

 

2

11. Понятие об информации. Представление информации. Информационная деятельность человека

4

 

4

12. Информационные процессы

1

1

2

13. Основные устройства компьютера

2

2

4

14. Системная среда Windows

4

6

10

15. Информационная модель объекта

2

 

2

16. Информационная модель процесса;

2

 

2

17. Понятие виртуального прибора;

2

 

2

18. Программная среда LabView.

2

8

10

19. Программная среда NXT-G.

4

12

16

20 Социальная практика

 

48

48

21. Занятия по промежуточной и итоговой аттестации

4

4

ИТОГО

40

136

176

СОДЕРЖАНИЕ ОБРАЗОВАТЕЛЬНОЙ ДЕЯТЕЛЬНОСТИ

Конструирование.

1.Введение в предмет "Конструирование".

Теория. Правила безопасной работы с  легоконструктором. Ознакомление с конструктором. Названия и назначения всех деталей конструктора. Виды соединений деталей. Изучение типовых соединений деталей.

Практика. Построение моделей с использованием технологических карт

2.Конструкция. Основные свойства конструкции при ее построении.

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

Практика. Построение моделей с использованием технологических карт

3.Ознакомление с принципами описания конструкции.

Теория. Понятие конструирования (постановка задачи). Способы описания конструкции (рисунок, эскиз и чертеж) их достоинства и недостатки. Условные обозначения деталей конструктора.

Практика. Построение моделей с использованием технологических карт

4.Индивидуальный проект  по теме "Конструкции"  

Самостоятельная творческая работа учащихся по заданной теме. 

5. "Рычаги". Простые механизмы и их применение.

Теория. Понятие о простых механизмах и их разновидностях. Примеры применения простых механизмов в быту и технике. Понятие о рычагах. Основные определения. Два вида рычагов. Правило равновесия рычага.

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

Практика. Построение моделей с использованием технологических карт

6.Блоки

Теория. Определение блоков, их виды. Применение блоков в технике. Применение правила рычага к блокам. Построение сложных моделей по теме "Блоки".

Практика. Построение моделей с использованием технологических карт

7.Индивидуальный проект на тему "Простые механизмы"

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

8.Передачи.

Теория. Ременные передачи. Виды ременных передач; сопутствующая терминология. Применение и построение ременных передач в технике. Зубчатые передачи. Назначение зубчатых колес, их виды. Зубчатые передачи, их виды. Применение зубчатых передач в технике. Виды зубчатых передач. Назначение зубчатых колес, их виды. Зубчатые передачи под углом 90°, их виды. Реечная передача. Применение зубчатых передач в технике.

Построение конструкций по теме "Ременные передачи"

Построение конструкций по теме "Зубчатые передачи"

Построение сложных моделей по теме "Зубчатые передачи"

Построение моделей с использованием технологических карт.

Индивидуальный проект  по темам "Ременные и зубчатые передачи"

Практика. Самостоятельная творческая работа учащихся по заданной теме. 

9.Энергия

Теория. Понятие энергии и ее формах. Примеры. Экономия энергии. Преобразование и накопление энергии. Способы накопления энергии и ее передачи в механике

Практика:

Построение конструкций на тему "Энергия"

Построение сложных моделей по теме "Энергия"

Построение моделей с использованием технологических карт. 

Программирование

  1. Правила безопасной работы с персональным компьютером. Электробезопасность. Пожаробезопасность.
  2. Понятие об информации. Представление информации. Информационная деятельность человека

Теория. Свойства информации – быть переданной, храниться, видоизменяться. Средства для передачи информации: язык, письменность, жесты, знаки, почта, телеграф, телефон, телевидение, Компьютерные сети. Способы передачи информации. Курьер, звук (голос), световой симофор, радио передача, телефонная связь. Способы хранения информации. Бумага (Книги, журналы, тетради свитки папирус), каменные плиты, Золотые пластины, магнитные записи, оптические диски…

  1. Информационные процессы

Теория. Восприятие мира по средствам кода. Речь и письмо коды для передачи информации. Особенности восприятия окружающей действительности живыми существами, в том числе человеком. Аналоговое, не кодированное образное восприятие действительности. Каналы для не кодированного восприятия действительности. Ключи кодирования. Средства кодирования информации, коды, использующиеся людьми повседневно. Способы кодирования. Системы счисления. Системы счисления, использующиеся в быту. (Часы, месяцы, недели и т.д.) Системы счисления, использующиеся при программировании компьютеров. (двоичная, восьмиричная, шестнадцатиричная). Алгоритм – способы обработки информации. Линейные алгоритмы.  Не линейные алгоритмы. Трансляция информации, передача данных.  Компьютер как инструмент обработки информации.

Практика. Составление алгоритмов. Решение задач на счисление.

  1. Основные устройства компьютера

Теория: устройства ЭВМ для ввода информации, клавиатура, мышь, сканер, модем, световое перо, сенсорный экран.

Практика. Работа  с устройствами ввода.

  1. Системная среда Windows

Теория. Включение и выключение компьютера. «Окно» Элементы управления. Стандартные пункты меню, назначение и использование. Работа с палитрами инструментов. Вызов контекстного меню, работа с правой кнопкой мышки. Работа в системе с несколькими запущенными задачами одновременно.

Практика. Освоение навыков работы в Windows.

  1. Информационная модель объекта.

Теория. Понятие информационной модели. Минимальный набор необходимых характеристик информационной модели. Достаточный набор. Полный набор.

  1. Информационная модель процесса;

Теория. Понятие информационного процесса. Обязательные, дополнительные и вспомогательные данные информационного процесса.

  1. Виртуальный прибор;

Теория. Понятие виртуального прибора. Входные и выходные данные. Настройки, калибровка виртуального прибора. Способы фиксирования результатов работы прибора.

  1. Программная среда LabView.

Теория. Палитры инструментов.  Линейная программа. Программа с условием. Циклы. Использование переменных. Сбор информации поступающих от датчика звука. Сбор информации поступающих от датчика сонар. Сбор информации поступающих от датчика освещения. Сбор информации поступающих от датчика касания. Сбор информации поступающих от датчика оборотов.

Практика. Программирование в  LabView.

  1. Программная среда NXT-G.

Теория. Палитры инструментов. Линейная программа. Программа с условием. Циклы. Использование переменных.

Практика. Программирование в  NXT-G.

  1. Социальная практика.

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

Участие в качестве зрителей или участников в технических конкурсах, играх, викторинах, праздниках. Экскурсионные поездки  с профильной тематикой или  в общеразвивающем направлении.

  1.   Занятия по промежуточной и итоговой аттестации..

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

Занятие по итоговой аттестации.   Правила безопасной работы с конструктором. Проверка знаний элементной базы конструктора. Самостоятельное программирование ботов. Выполнение творческих заданий. Скоростная сборка-разборка конструкций.  


МЕТОДИЧЕСКОЕ ОБЕСПЕЧЕНИЕ

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

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

Организация педагогического процесса предполагает создание для обучающихся такой среды, в которой они полнее раскрывают свой внутренний мир и чувствуют себя комфортно и свободно. Этому способствуют комплекс методов, форм и средств образовательного процесса.

Формы проведения занятий разнообразны. Это и лекция, и объяснение материала с привлечением обучающихся, и самостоятельная тренировочная работа, и эвристическая беседа, практическое учебное занятие, самостоятельная работа, проектная деятельность.

На занятиях предусматриваются следующие формы организации учебной деятельности: индивидуальная (обучающемуся даётся самостоятельное задание с учётом его возможностей), фронтальная (работа со всеми одновременно, например, при объяснении нового материала или отработке определённого технологического приёма), групповая (разделение обучающихся на группы для выполнения определённой работы).

«Красной нитью» через весь образовательный процесс проходит индивидуальная исследовательская деятельность воспитанников.  Именно это является основной почвой для формирования комплекса образовательных компетенций.

Как правило, 1/3 занятия отводится на изложение педагогом теоретических основ изучаемой темы, остальные 2/3 посвящены практическим работам и повторение материала предыдущего занятия. В ходе этих работ предусматривается анализ действий обучающихся, обсуждение оптимальной последовательности выполнения заданий, поиск наиболее эффективных способов решения поставленных задач.

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

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

Каталог файлов

  1. Robolab 2.9 Rus (PC)

Тоrrent файл на загрузку графической среды программирования Robolab 2.9 Rus (PC) 440(МБ)

  1. MINDSTORMS_NXT_2_RUS

Тоrrent файл на загрузку образа диска графической среды программирования MINDSTORMS NXT 2.0 (RUS) (430МБ)

  1. MINDSTORMS NXT 2.0

Тоrrent файл на загрузку образа диска графической среды программирования MINDSTORMS NXT 2.0 (ENG) (641МБ)

  1.  NI LabView 2012 torrents

Тоrrent файл на загрузку полного набора дисков входящих в графическую среду программирования LabView 2012 для 32-bit и 64-bit версии ОС. (44.5ГБ)

  1. LabView 2012

Тоrrent файл на загрузку графической среды программирования для 32-bit и 64-bit версии ОС. (2.72ГБ)

  1. Программа «Лего-конструирование» в год 64 часа в неделю 2 часа

Муниципальное образовательное учреждение «Средняя общеобразовательная школа №88» Руководитель: Авилова С.Ю. г. Тюмень, 2009

  1. Программа кружка «Лего - конструирование» Муниципального общеобразовательного учреждения  «Хуторская основная общеобразовательная школа» Учитель: Щетинин Николай Алексеевич. Огромная благодарность.
  2. Плакаты с названиями деталей и схемы размещения

Графические файлы с изображением деталей с названиями, а так же удобные схемы размещения для конструкторов 8547 и 9695

  1. Название деталей конструктора лего набора перворобот

Полный перечень деталей конструктора lego 9797 и 9695 упорядоченных по категориям.

Список статей

  1. Программа «Лего-конструирование» в год 64 часа в неделю 2 часа
  2. Муниципальное образовательное учреждение «Средняя общеобразовательная школа №88» Руководитель: Авилова С.Ю. г. Тюмень, 2009
  3. Курс по LEGO-конструированию для 4 класса. Курс составлен Наталией Александровной Быстровой
  4. Курс по LEGO-конструированию для 3 класса.  Курс составлен Анастасией Викторовной Павловой
  5. Конспекты уроков ЛЕГО во втором классе приложения
  6. Курс по LEGO-конструированию для 2 класса. Курс составлен Наталией Александровной Подлесной, г. Москва 
  7. Курс по ЛЕГО-конструированию для 1 класса. Курс составлен преподавателем ГОУ Прогимназии №1781 Людмилой Николаевной Сторублёвой.

Приложение №1

Информационная модель объекта

1.1 Понятие модели

Объекты окружающего нас мира, даже те, которые кажутся самыми простыми, на самом деле необычайно сложны. Чтобы понять, как действует тот или иной объект, иногда приходится вместо реальных объектов рассматривать их упрощенные представления – модели. При построении модели сам объект часто называют оригиналом или прототипом.

Модель – это аналог (заместитель) оригинала, отражающий некоторые его характеристики.

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

Для любого объекта может существовать множество моделей, различных по сложности и степени сходства с оригиналом. Модели могут отражать некоторые характеристики объекта – свойства (внешний облик или вид, основные узлы), действия (совершаемые движения), среду (среда обитания).  Разнообразие моделей определяется разнообразием целей, поставленных при их создании.

Например, цель создания игрушек – познание окружающего мира. А модель корабля, помещённая в бассейн, позволяет изучить его поведение при качке.

Основные формы представления моделей:

А) материальные (предметные)

Б) нематериальные (абстрактные)

Примерами нематериальных моделей могут служить различные формулы или чертежи, модель Солнечной системы.

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

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

1.2 Информационная модель объекта

Для исследования объекта необязательно создавать материальные модели. Представляя цель исследования, достаточно располагать необходимой информацией и представить её в надлежащей форме. В этом случае говорят о создании и использовании информационной модели объекта.

Информационная модель – это целенаправленно отобранная информация об объекте, которая отображает наиболее существенные для исследователя свойства этого объекта.

Познавая окружающий мир, человек формирует своё представление о нём. Ежедневно создаваемые информационные модели реальных объектов помогают человеку в процессе познания. Любая модель создаётся и изменяется на основе имеющейся у человека информации о реальных объектах, процессах или явлениях.

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

Для того, чтобы изучить объект, человек целенаправленно собирает информацию о нём. В зависимости от цели исследования собираемая информация может и должна отличаться.

Пример: Объект «собака».

                Цель 1: Нарисовать собаку.

                Информация 1: Внешние данные, повадки.

                Цель 2: Описать собаку, пригодную для охранной службы.

                Информация 2: Нюх, выносливость, быстрота бега,  дрессировка.

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

Формы представления информационных моделей могут быть различными, например:

  • В виде жестов или сигналов,
  • Устная, словесная,
  • Символьная (текст, числа, специальные символы),
  • Графическая,
  • Табличная.

1.3 Примеры информационных моделей объектов

Рисунок или чертёж – пример графического представления информационных моделей.

Жесты регулировщика – для водителя это информационная модель поведения в сложившейся дорожной ситуации.

Форма представления информации об объекте или процессе часто зависит от инструмента, с помощью которого она будет обрабатываться. В настоящее время всё чаще для обработки информации об объектах используется компьютер. Этот универсальный инструмент позволяет разрабатывать и исследовать модели разнообразных объектов – молекул и атомов, висячих мостов и других архитектурных сооружений, самолётов  автомобилей. Использование современных информационных технологий позволяет рассматривать объект с разных сторон, изучать его форму, состояния, действия, используя для каждого случая конкретную модель.

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

Например, уроки истории дают возможность построить модель развития общества. На уроках астрономии доступными средствами рассказывается о модели Солнечной системы.

 

 


Приложение№2

Название деталей конструктора.

Название

Изображение

Кубики, кирпичики, пластинки

кирпич 1x2

https://lh4.googleusercontent.com/ga7ArlwbcBj9aqXzkFqKlGGtWt9Z3Mr4MBNuX07o2JYMurBPOJSKyzppNFKKCS_ex0RBBsQEWgJgu8a-s7VQogTKFx2ZySlENt40GSufmcJy4LunOEA

кирпич 2x2

https://lh6.googleusercontent.com/X-x9w0rq7HWfPsddwcTvUXr7YtvdMOW0TEu9CjdcTlWZPwQPVHYi2qdZ9Noyp6jos2N32fm3T_tavIoipgfMOPEkvvwYcorhYVP3LnXXUZ2JMEhFrTQ

кирпич круглый с крестовиной

https://lh6.googleusercontent.com/j-vERqIRWZa0zFApUUi_iVkDUC5UlkKarYDIaGkR71sSecnwo001HshcrgR4nf4qGVU6gJGiCHj0uoIR0Pa7rLHvSlrVxMDABh_LoxqqC9idntBOJjA

конус

https://lh5.googleusercontent.com/mB_hHD5IYKLvGi2ieznczCJzKTjJBTfN-ihSgoCzZgWusBNrsFwiDyZ9HEHp8bNlhW0huTCAuEepBC4tzET8Vqk2Hio-iYEICBzR-dFmjTM-ZbGMFoo

пластина 1x2

https://lh4.googleusercontent.com/OcL8xR8STZVUXHL6e9JPV7P7tEzw-HkeWie3kOHqrNyFYQ65puPzS_AFf14xnYNYKhdz2GwWsNfLQlPFvxp0vnfjGc271-p1AkM1FwDra0jGbNPhcOc

гладкая пластина 1х2

https://lh5.googleusercontent.com/t04_x23UB5dUugTt6h0ejOTf9PM28z7GAiyBuIWX58l3QxKIkNwqGgmiHGnHtttUNb67MfHQns2-b6uRsHxeC0PSPktveB-23bE1qf6lQNYLYVra_1c

пластина 1x4

https://lh4.googleusercontent.com/hlf-A-xLv5ql8BWjTUcGDja2ZB82GPFzMoTqSRp8KOVCxtQQqNhoQmjxVbaBt07Ek2AoAcT9FopxMqPeeQ3ghTJDOzj8pLTOXlV23J-0J8NZRsql1-8

пластина 1x6

https://lh6.googleusercontent.com/XDtkLlh2nKitIQIYAAH_KJKXpwnUdaxAj2PuqwSLJ_1d_YjMR0_TDuntvT7vHNN5BeOiFv6e9pWuc6BJ9Ya6gbYv1y77MYyBDXrhPwrtwAFts4gCiZk

пластина 1x8

https://lh5.googleusercontent.com/tVapVsSCztJyuYi2zR4_504sAtshG2pbGhRAwPHm0CY_bjv66q0nzyKsHuG8gedfdU2mdRBAI1CTXitxVS_VUCh3sZqUXCXgAZfypQRE1n56ZPd-2rg

пластина круглая с крестовиной

https://lh5.googleusercontent.com/D5Z0tijvyu6eM_cCgm3hcPjCFX7IAX04BNIhL61P-1-mlni3dJD9XLRNMfmFZjwo4iFJzuKfzVracTcbZ_Ml4VDLu7al5V72wsgeNa9H5owTap2fx14

круглый скользящий башмак

https://lh3.googleusercontent.com/dCuHyTgPXRG4DBdD2CZ0_hL2VtJ6qQ6LkOx10nkD4Z4CA4mGR4x9T166iAqR9uISO2WjWXj_clBfdN25Qs5k0IU0-BrSmZn1VLlQoMQ6jX11A0xD0lw

пластина отверстиями 2x4

https://lh3.googleusercontent.com/ngu0-d77lK4d9U5DLbgEiqcPH5vQ01Q6_f0Cp0i081dZsFwnqoDr09qFQscF1-4CWgU72pjoC31_xOKbxKS5_5DXx7UzCYDpHnoSa0GIMJ3SkCjUlIg

пластина с отверстиями 2x6

https://lh4.googleusercontent.com/19UaeEG_RoJ2og_qm6PHi_XFQLQF6-BSHiI9ZjQboklFMUZEJOkOvCZg7NPRLTH9SyDVQq7WSCY4nXLL0WPqHtg2tX3v8uTMhfmgSoUjoTqt050Kwbg

пластина с отверстиями 2x8

https://lh6.googleusercontent.com/b-Os5qVesEBpBy7yCEyV3RAU3SniCFFWG2oR95KIVI-1tCiZ3NA1fVl88rdamEfBLw6XOPeswZ2tpRQ6Zq4edN29UQPGTt3qGzBrsJFGZj00PDWEIGI

кирпич с отверстием для оси

https://lh4.googleusercontent.com/QK6WNo1PnyxlxzL-pI74CIyu_FKM_366L8-b-iDRYeJ6P_6e5-SgnOVW0jLjjOGAe0KSMDSON8JNSZm6nmkfXYsCBo86Bo4pzA-Z079Z2WPLS7zAqg4

Балки с выступами

балка с выступами 1x2

https://lh4.googleusercontent.com/oxo_wquDlBlBpiZl1MleY17EIPGQfeVrVdOMNAWDR0mxjJPvmzmLkjMoHn9aM2W-kZRiJk3CEMx-qxjJfbnEq3yqnCVg78v8aZZHaKijbRc9zGykW-U

балка с выступами 1x4

https://lh3.googleusercontent.com/P2XVb3a8EvNUTe6Tmu1ghcUJTeDmk7gAyYspMpt8kZPcNGY3W2gb1ZiKmrgPqKCcerB9uMOHD6vnZkcwVi1YEBp-7KOrm63S-p50QyUtKOmhyP24Brw

балка с выступами 1x6

https://lh4.googleusercontent.com/z9kcHC8utQi7GZ4TQY6FPXhbbeOZOa-Eil34jyyWLl-jlqaOioL8eMavEhVyNOlMeaUFTL4khKTWJuAzV6Gpd79ejeQ8HfDPvikhvDA4JqrHEjc2S3E

балка с выступами 1x8

https://lh5.googleusercontent.com/BmHYCKxNEb3JxXFeeMnS5r0fyJyVObx8_XWGz7EJnl-U_niCwJ-SE8ueJlXeaG6O6fmQzpVJJ-qp97OiUQ7LuJvnlKuDLXiBhft5lo2_f5hrgk7Ac0M

балка с выступами 1x12

https://lh5.googleusercontent.com/zKrdYknZVa9OmanK5TtV71FcqLoCYX8Jb1XEFGUqcAUkXFZnxEsbbop8tfbMiOJZBxzAAFhlpIGf65yjNYKsRFYSIxBoxRe1NqT035HqaNyFNLCouWo

балка с выступами 1x14

https://lh6.googleusercontent.com/kbtZpc1uRJQ71LLxQqStI88ZhlOVVSu6otsdwahCqIcpyUSlEMh_rhBQnFTQ0TzBxB7KW9-WdQ4np_k06_yT-tGYG7lkx03eU4NdiRte7Wg-mmNtUrc

Штифты

штифт

https://lh4.googleusercontent.com/l_zX7MOl11U1w0apR_6rQo4HFXyZGOri4y32x2RNPGH8EGWub2_rDN4VCyhHMFZDLpUoWpVeXcUVGTYVUVxusI9a4sBmtcagRg5zSeO0TDnuYAaQ-dY

штифт

https://lh4.googleusercontent.com/8sDj5uoEnkBAxZLjHlptM209M9Yzx9zgtVC_EbiVZyyu5dmB5DUrZJs4nbVb7QJRUX7xaS2BDh9m_pOdXqYeCVpiYOPtZLM1X7IzJE3RxNNRUGoNkxw

штифт с выступом

https://lh6.googleusercontent.com/2Bc4QON9rr3bz8vE0wPkSbvxqpys7NAc_scWNXYONQKya6-EzW0PXLIP0APd2S5fsn9DQHgwkU7xd3hWiEvBtIys656BqT_bCP0dhIDEZyldSeHmUVo

штифт 1/2

https://lh3.googleusercontent.com/CNcl-F_vkrSuMIVOajSNYW1_H7x0Dq0Asp4TtPhsKKjtp2A1xU8qqBot2z_oUBkWkmSKjhw2oxNgU13_3JQsSPDBtSnjSHUI2dErmIRPcgyjUWH7nfU

штифт трехмодульный двойной

https://lh3.googleusercontent.com/xeElXyhCATo2AD_ieo4hAckeoNQW1dnl97IBBmZJsQiSG-8YfoNtiT45F2wEZC-LejhEK51Q316Rsm_3Wo6LOeAGTN7PHQqveN1nBmIOWwjrPIPYso4

штифт, шаровой

https://lh6.googleusercontent.com/lOt06pC5MdcjiP9zJvFC6UUAirsRYPIcvcSSataPzKbnDHG_SCLeH74-nSOgp6qu6WrRsKBHOu3-lumaXJicW428QqALM4OWCVge05T0HYMBED1nw3Q

штифт крестовый

https://lh5.googleusercontent.com/bLcJgNavMHSJoo084SmVUX1rf51xmg9S1krTKa6byC3P6rUHMVqpyWZ4uV0Qo_rmREo2--f0-svMjicAUF6ZJJRcDMSjTWEktd--rput6__Cp3P2uM8

штифт крестовый с выступами

https://lh3.googleusercontent.com/0tIW4rTxqTLIuHY1oIo8Tb6kgEeaiHCedCGtOLa0zQcWNwHkORZiuj7aIv4hJBC8UVF911qYounVC27kRTbT84dXih_fk-gG9MO2V2st4ATayoiT9z0

длинный штифт

https://lh3.googleusercontent.com/61TMU4bGh-aN3dRWZNFs8fFdJElJppPk2YG1KoCr6RjKxNNFdF7UdeWWnTXGxFdStNdOYlLwGqmG_dQnglXwxFh-CH14AzlzNVRSrcUBGzncZ4oUMUg

длинный штифт

https://lh5.googleusercontent.com/OdyN6nHUUoCglgjKMpWfOhHXzWpb1KWXBeXoQxSG5yje9eybNoGL4727w2ill2rvjMFx482M7dstH7syokCyATYyO-acTCqaMska8RUH2OUNaaZhoO4

штифт со втулкой

https://lh3.googleusercontent.com/EqmXROGwxc-0WX-55PBT-FSHU5vskx4dC0GC9SJZqCYQ3OBdLd5s5syTvVYn3i0FgbJA805h04-oXn1txcXPw4um_7VUsx7Kr3th-bZL7Kof_2LnLXg

штифт крестовый с круглой головкой

https://lh6.googleusercontent.com/2MVw3NuJqAKctGTSeYB8xdoCyUML2GSLH0A-utPENEBGy1H-HjdDEWNyu6bu3MDwscaMot9rvlCE_fSaQhFJJG9mAjfyPCmBAApdh36l3dDe_6AgGZo

Оси

ось 2 с канавками

https://lh6.googleusercontent.com/vSsF5YmiJlVACzLF-r9v6tQS3tN1OTObqES7KNQOwQT4n8jzs9iYqazKFJRsJCbpePutfIpg_RPGWCnOuABd1_bb7DFWnSOXmsbt0YTWnl8ePN8qdxo

ось 3

https://lh3.googleusercontent.com/jSILD4zvv_RRB21taJ6PDkutCojpLaUpzZ9AIZHDXxleTJNEueWh6o0pdGRi7mKSHjYfcx669Rkn1clZgAr-vWDQl-ed8bS5x1hLFqBvj9ouF4kvbSI

ось 3 с шипами

https://lh6.googleusercontent.com/L8mY24L-VrsZCGiQFasLVZ-7QxlrhuLfWHSXL10OEXxsqSU_ZxLQsUKDxmRZTjv4wzOsvtMtC_IdMiIdwSaZViYYvE9SiS4h6xbSs1YNIxvQKxA4iw4

ось 4

https://lh5.googleusercontent.com/ercmV8U0AvB4IpGMLcrkEV6ZcgJygBUligMs7iR7yqV5Rj67bU8-MvxQZ86YUnJxGwixccZnXRf7zqGkGjxLb9Fg7g9c1H4x63uwl-Y3qilaArvdr-Y

ось 5

https://lh5.googleusercontent.com/hL059nSTgm2ZG_FOdxul61_l3OgBf796Y496eCfHqQ0UKy9UPonhnqd07iqeKwObhVRAZXaMsUGufzxmwj_d4aZVpkCsxrWHOfX-BaAx499lOi7AxuM

ось 6

https://lh3.googleusercontent.com/-KlVOsOUH3AeODbQcnx2n1uuiWehXrtF6VhWOojGlZj9cMNYye8l3lEH3YatC4vSOms7CeFmx7nNNDns3rsvHzPILZIil_Dyh5ZZF6RLFUrvGuz04ew

ось 7

https://lh4.googleusercontent.com/2WlCZUIaeLx3yHOeecOgmhlxNp8e5sVYsFdFepCadWcHzb1ajObFEvtAsmyLOgWcqZBofh8bx7M30gt-u9Y6MqZTkdGwjyffXZklfHcSyR5YunEbi34

ось 8

https://lh5.googleusercontent.com/oiEb9NRzLD-1IBakrI6Mi3vNuWiphx1jfNykdt7FNWg1wQsGbDvBVFth6a8bqqFZIfz09E88T0NVeIdyQXuRHtQ4eqpYzutR19Qq2uyoZvscOEQMN-8

ось 10

https://lh6.googleusercontent.com/36f96UQzG_W_0ETCcYMDl8r09nVPpi9GSC7cmaQQz_z9UqiQ0cKT7y4g0KAFssz614cHOzy7YgHcm0UDfyR0A0-zhZO_p9C5UQPs9ESMzsHRflSpndk

ось 12

https://lh4.googleusercontent.com/njcQhGj49_ah3vPvk97f56_4BIH5hdJ1FF_lCYJ1vmQWfb-Z8ZhfjAvoElvZiPV0GD_q01ytetCN6CEEji0qtdiXY7l9Za3Eoa012kfuUxIJP7qz_wM

Соединители и втулки для осей

универсальный шарнир

https://lh4.googleusercontent.com/BfxlDHeojusHWcuEpVXCKgV_7cT6ifKp0bSvW0Qqnm33Tub_rInm7seo7N6u4ADvbmj6i6BXjdl_lpvEbtZW3jha_5ZzvvAAmZS_16XOwpCgNSQEdQU

удлинитель оси

https://lh6.googleusercontent.com/26bSMWOBqo0zHVx_nX5L3tO5RfupVb3ouxkmmVi3WxiAeBTuMumVI5rsKvCQl66_VFYw3ADkp8drhTGmGhQC_KQzDrnjvHYDVkiGeiMNqBID6na2WHc

втулка

https://lh3.googleusercontent.com/G_6poDJMt1Vj_Xn2ycJNtLwsJbNyPIa1s6by2q-uF__adS2Wt5J3mA2a6hThEvu2a1S2zLeEBuOUi29jLKgwaZj_FBLwPiFq2K0TbxrtiGaqrFIc5MI

втулка 1/2

https://lh6.googleusercontent.com/Kb-dIlp4Otc_ORvRdFYlXSmmLUfi7Ufpa0olPbQFvUXipvxXDlL4KWxQAfnCD3GqrD5rKpSkUlePLJqDxzP9k6R_7OBApb9QVIpD5K48MVOidPKonLQ

Балки

балка 2

https://lh3.googleusercontent.com/WAzW_klHeDf_BTTxQoN8pPHFEhf1O25FhCfFJZcCw8Jw-PmV4q7Wg2wF2mkQfWer47gSPDXng5KIr2ni2kyhRV9aOtWI4wVTGA063F29VIeWR5ODUlw

балка 3

https://lh5.googleusercontent.com/yrJmlEOeCuZjeqJBYkZg-qgKYUv86g0s5OoKhiMyTzUVAuvc1ePjACwqhXC7Piv1YDCWAAKQVlUA7aup4Q_OeLT2wVWjOF_-SAU1DN_pSZHT_UuNBbI

балка 5

https://lh3.googleusercontent.com/5_navd9GhFhu1tivQ7EAhSWFkwZggCsT_FTkeG6fgRGOZSjmMmRREBpg2AMsqetpkijkBqhsI8kztRBuEHtWXq_BPgzm6gsbxQrJfXOVF7NzVrJUtfY

балка 7

https://lh4.googleusercontent.com/KTvQohc1-T5jV8UgAMS6Zcv4C41DUvAV84yJUV1NMh7fLkNF0oeIgwPYQUp3hSE2ZYyaPZ78s0cfGRQ6HnNcFG9xq-GLv6M8NtQAa7nKi8OqBsfsmyU

балка 9

https://lh4.googleusercontent.com/qfVJJWLFSSd-JSRiJSj5VQzwJwVmA8BgSaAZ3mY9Zny0mFI4m2scuaaaRKXcuQhH5alM8SKa_8H4iCZTa8fcLg66f4e3SC6tqE9O365OkFiFLlJFjco

балка 11

https://lh6.googleusercontent.com/coo2f0IIGXpqymRilhdtRG50Z2-C4Pv8pXNiNSw4GezymePdrr7y0_ic7M8LZm47C5oGmqV9pdv2XMCs4luOp2YdcVuOeo4TqOuaW-sJxb3m8ECXDxM

балка 13

https://lh3.googleusercontent.com/IVNfJ-KYZxGU279NtFUb_kKIPkcalY70SU11Jnkwo0W-lecNa3ZyNe3I8_msENQr0XGWxm096Jd93cXJFm6cGHH29TDo4iEtRWMGumjJfQAn3bKCl6g

балка 15

https://lh3.googleusercontent.com/E5Pwnw_xal3OobxI4P6-8ZZLAejCaivjJVIpdapW2OZaUTEGcceX808skPCy-yUFUx_3tpwZCGYBNXUSgsCAcGZj4w1w7vEyVGXQFpDY0zIZzs_V6JI

балка с 4-мя штифтами

https://lh4.googleusercontent.com/zlpRZJeO5gAYKo25s9a22JJ3tQbzd4N8Ue2Uzj3bMTOj-r-MyRr_ad4XyyQx1NrZgLiDA9GgZ-C96wDNRZ25-P5gODQB-8L8fV-eK_3G80zI4pdcGDw

Изогнутые балки

балка угловая с 4 штифтами

https://lh4.googleusercontent.com/hpqheRlhLEEAV_g89sFI9DoFoXjXGScsoVKioUJvPR5TCTDvNkgLWM9FyVnOCj-REs3BW-0qBh0_gMsNdcmRq0b0m3TewTu6BbNEmlIby7iPEBs19YA

балка  угловая

https://lh5.googleusercontent.com/_K_54ahA-t_VnqWDFfwZDz7tJhB6uhMm9bx4b92XF0cUK6KnzNB8PPz95bGlHalTmwtMY2lwxipPXvhCUwXvfwOXfl3vsXDccoM_oMhl8--l1e-twSA

балка изогнутая 4х4

https://lh5.googleusercontent.com/7pwqkYdrJwJRPW1OBnvnkZOtA7ikrgvAITNnzlX1Sezy7w4rOnUc6GSpTF-g84gKYxgWtE1sK_gEIsTdJtUJPLm3ZiYpyTYua4632f6KoK-sw_3uocg

балка изогнутая 7х3

https://lh3.googleusercontent.com/Iyoe_c4vZTe87s9WVS9ThrgfeZ_r0KwyGfqUqXdK4NPViYzzQEX_ZhjCVLrMjQC6znvwaru4vhx4_faoos-3LgKCBSMOeM0lQplesrn7kMvMi3IiX9g

балка дважды изогнутая

https://lh5.googleusercontent.com/OLfvx_3OU_Qi_BcXKVTDpHav1_WmwSxqqIKZ1VRRW9ji5MzuwNzQ2ybuzuPovQ953N1n7WSOR--N9AZuKIt4pXHdNou4NFdiaGeLpLNqzF5l81P6-BI

балка Г-образная 2x4

https://lh4.googleusercontent.com/YNVckQYyjp0JxdqLRcZMLhZ2qskT0sdC-qpWDejaDLYxLqZflTH6Bpn7zURS2obpX5FZ2gJDHhnygUpZ6cSpGW43yNHsBugJGB4jsPSRiUeHPsKesis

балка Г-образная 3x5

https://lh4.googleusercontent.com/rCj-dxC87F7dWy74G93N_NW9Gd6KHuLZABvqzOSEOk-Wmr5nf_c5E6fTr0kO0kmA3yDQoQnbg3OACbgQ_JR2Q6PAG2EKGl8vM1B64kO3AqyDgp0g5Zz4

Фиксаторы, конекторы

кулачок

https://lh4.googleusercontent.com/SKbrjbDmp2X5cfopMQeC5ZC_C2Z85v_csXz0mvA34bPTJDRNSA-gMedQjozpSpPJIg01MaOCyvdmof9AuL8coZw0CA_s1B91AfBA6zN3IqadokiHly0

амортизатор (демпфер)

https://lh3.googleusercontent.com/OCVurysyFV-j491PXyge21z-eDw1yjJVrrMLd64zvJGI1Kkw6FAhJr9aeJ0zVDpoKY2w7NXLLAD41FY5hq0zEESUmFYTb6Z3cLUqvCqfwC6MPelv_Qg

фиксатор поперечный с осью и отверстием для оси

https://lh5.googleusercontent.com/kWzp58xt7AGKTT3kTSnnLiMIf3OvjUkSxE5YiwreiQkf-xiMlTaxZNsGmORPK5iAEBOy4ZQT5nZH-CUi0O-WVZIgd-pwhWEPNXPfqayAT0rjDGnv2lA

угловой фиксатор 0° (1)

https://lh6.googleusercontent.com/Msxcp-d3tvBaKbX5msMRebJn3iqHxojnj-TSO3FR_KZNW0oXkPTXabJawBxXw1WAcdZiY3G2gWwTeegEOe0JLelnJ05RgvHZwnCIst1OmF2KwXy010c

угловой фиксатор 180° (2)

https://lh3.googleusercontent.com/hT7AQriDJNtJKW8ZgN-GSbLdDTyrTz23-4Ii1wp0K-k2_gISyBMR0p8cM5rvRnDJHCNtVttE01mZutws8MaXmNOKpFXXwZwH2AAXSyQKGV-0jGFhfr0

угловой фиксатор 157,5° (3)

https://lh6.googleusercontent.com/z3DcORnanfVjjlUEsB8XTSOAnj_KaVBdk_6B---pl19HFj5AvfQIRTqvr9hRaKMiXdDqwyTVa3T_lEUKUaFGzVwi4BNU_G2N_9N8PF5peMO4XgBtQa4

угловой фиксатор 135° (4)

https://lh6.googleusercontent.com/FVzA7wcKi4ERBN4Og5lPWndAAnVzP_DtBzfcPg7SjCxOfv2owNYqpaWIhxywW6ka3mag6QNlfJs97SL7HXhxxzVnUX2qGSJNBxNErs926BYWNTrp91w

угловой фиксатор 112,5 (5)

https://lh3.googleusercontent.com/Uq1_AgLihhijGB_Ar4RC8dVducMrGONH44drJUjhfMLF-Z5lYti3caVDwSPscT6mIt-0Js2EalhFVzn8PXJ2ZHl1z_PUn1FMP13f8W4IcnudsxUjjSM

угловой фиксатор 90° (6)

https://lh3.googleusercontent.com/v-JpnPabMRqfYm9tWucPwjUw0WW1EoH5gPQUf7Gb0G6iZFCxlbDmKEM_B2ZAZXktFg52JHuMpkyLT8EVcQykBCxlayGW287uoRwHPW4voQdZyQgiVI8

фиксатор перпендикулярный

https://lh5.googleusercontent.com/smHuCwaU1z7QsLPdbyaU22XlzCCAtJsk-TeSay1YBCw4Y4KfMZZsIzKKvNGUnhHzEfdxNBLkOT1Zsi_wU9jEi10HcjraNDyBoSAs8XlCMNvlu_MIqWI

фиксатор двойной перпендикулярный трехмодульный

https://lh6.googleusercontent.com/UCZluKWoKDIYeAhg07iL96ngSNPn2K2f7K1_5J6YApGuwETSf9kqcsDeYdyR8bdWlFHYiw5zmn-Y0jRI2k9kkTJ7AoTl6XGEt0-9Wj0s_jKeCK5hHrw

фиксатор тройной перпендикулярный трехмодульный

https://lh6.googleusercontent.com/vuQMLW5HRhGN3pMe8Y6B1aluRrwD_ar6i3SVHxHvhQIPzoYxAhvwhoWBi-iCqP1YQ7DuqQJmTtxue2zLQ_7dxuvAqVRkT124GjfUA7Xq7A2sS-Nq9yY

фиксатор перпендикулярный двойной

https://lh6.googleusercontent.com/sFsHK-Hq9S-X7Z5UQLi_MOxfAqelSWhixUoBCwTK5jZ14VXGE7TXC_4HhXD9eQQb82oEphKstxjlxssojQK2QZ66B9hgClV0gkj-ZgHKOZY7z0OFbvY

фиксатор перпендикулярный парный

https://lh3.googleusercontent.com/v3X_xyjhSTYiVvsOhUpgNUxWSLevtYGdr-d3Bsq6-jWIsp8wpwB_cepiS4NZmC_BoX0mkKhGBI-iEziq9C70BVMNiY_OQt3gmhIGsIuXyX_qkl3W1io

фиксатор перпендикулярный с двумя отверстиями

https://lh4.googleusercontent.com/ngaRFQhlZDcGKgCJmBeTLUEP-0xBf__ekaGj_zRnSZMKko5ks3AMrLIo87QSYr0r_Wkq9ayQYtE_xl3WEwJnlxJzlvFbVnsSZ6s9CUBrU2iqqFnQ5iU

фиксатор поперечный с отверстиями для оси

https://lh6.googleusercontent.com/b63uY4uz-b6rhspBEQWwvFoKRIgrbg9zUdO6UJDQoqm9ztyqI-SgoJzl_QErecW3wGa-EHOrjZfrqhJpOhB65EaIbf8QiXmTXwsIiAj-xcMAcDqIs2o

шаровая опора

https://lh6.googleusercontent.com/1hiLIaSFhZwIqV1kfLIjHfcin8YuchDWoLTxcgUqqqSfeSBwFGUKNOVPctpVbkpa3mxr8tQg0BGurj6OrAP4sts-PiMNtI-3DUNfK-cWJG0OLjo66AA

коннектор двойной перпендикулярный

https://lh4.googleusercontent.com/ZXHWyxt_8ZjwT1mKyJWqre5jFM4dF5TrI2Ym2sWCZT1tvGMldDnrHUgmmZudBaRzk0lmvZF341GPNxFuKKllXDTgeCGilkYYNQIduEn005jhaf23v8k

вороток

https://lh6.googleusercontent.com/4sNApuV7qRrmhRyu6XxPHDG3uX-2Ztpocp-K1dCliv-KqLuEH4LJTng2N20fH-9sM5Jrjb0iuIKoMAIVzBpTZ7LtwCUxvInktPeKcvLl8ok0C96MODA

коннектор круглый

https://lh5.googleusercontent.com/2_dQNAyrXAamZO9lKP3AMg3Cfpt926E3a0KjLmPoZHvAx-fPcJWPEDy0DyVT1NpWViV0ljkxcEg_DxX003x9TL-6QrScShd89L-4_UpA7e-H-1xIl3A

рулевая тяга 6

https://lh3.googleusercontent.com/bWivRFv368jU-3ow2Ad_WaFYcFKwvGKRRZRQOFQ4uVwJc76mI_LLYeG9_kJyBGvOBUYqb4QHANwAUhZAAHAsww7bDmQ6L2dC4oeAoCN7v9fEh1FnaGE

рулевая тяга 9

https://lh4.googleusercontent.com/KvnwP7vf4l43_4Oj3_8jx227hFBKaLIxpnWMx2shMho8sGcySeSx_OtDGIqHSKe1Oqra6JHOEZpD2tC4sboE7j5dDxAslIy-YH7Wm7bvDuLpNlxyxRk

треугольник

https://lh3.googleusercontent.com/xt8r5ChpVUp53Wi3wqWsSJZGvefDldePiNh971MfMm-dwnxZIAa5xwY2zMgrZpYW9t9jiD_4MxCi78dpLnDX0oQPikxCEJNTems2xYsM-iRUQv-wHFs

Шестеренки, передачи

резиновый ремень желтый

https://lh5.googleusercontent.com/1GOXWlXzeYWdXZjaqOMjhq0B-5f0EX3_VJ1xb_PA9w_j_rV2Iz69gsOJ-9OsDP_uPbg12Epon25Gq_gGZQc257Pod_ABvj8RuMdd0dL0Qf9VvOD4LqI

резиновый ремень красный

https://lh3.googleusercontent.com/Ce9BIlybtfrOH5S9XpUnTVnsmyL3q1V2q5Sr_MSz4LFptjEJ3wJzYyymynQU9IybMRTHFWIMJc8h8CbEJDF1A_Lz2pAGcCewW6oCf7kZEmqiXP6Z2h4

шестеренка 8

https://lh5.googleusercontent.com/z3xeMP0wReX7DzL3Ym6o4ufepg0O2HXC3AyfvO49qcd_tR7devVq-NM_YP2DbJK-PvX_z0oAApXWNg6m6Aq5oBoEDYC_L6bTkRChD9HcFX18zB4Aem8

шестеренка коническая 12

https://lh5.googleusercontent.com/xVPjP_GYV8p-BkOLjoa-eZn23OY3q9fWec4j_RHEKjMqBT3R9S3NKZpV6gmZOW4H89560_5LvPJoTGhT0QVD2tJsGUbnP8Z8FdYYIaLGZR-oetKS1eQ

шестеренка коническая двойная 12

https://lh5.googleusercontent.com/VJ_05hmrJO3D0y-Q7vmwNP4BLhAGhPeQHiFI7INYPkSbfSkT72KBuQhFm3nTi3stOl4mwUgX5oD7i9Mx-DAcGKtn_O9Kdn7iq6yYSHbPQ9jKnXAH5Eo

шестеренка 16

https://lh5.googleusercontent.com/OTUGdY5wIz8pS-iRpZWj1zSRlbbBktSwTnPXwovJkccABI2NCl_nTzNqUtlkE4-7Y1L5eJtIHvFZxpP3ZR8FdbOruRZrJRgpyZ5zO2gn9V2yMqHhcH8

шестеренка коническая двойная 20

https://lh6.googleusercontent.com/I8JSUg_aqkROAG5RYugA4DoiDMYOi1IhjhUCHSAGeJhoD_254yo_NIr-nbvKtIfA6A8Ysl5YpxYSwZiN9WgTacgbwPydxhWvxxjOHQM4ThdgkBP43rI

шестеренка 24

https://lh3.googleusercontent.com/vkgkHPz4qmNWFh344P0qSuxXm-fnDE5xxl1pIRzQL5nZm5jfg454marQ4mcqvs7pqrvmGjYH4rP5LLTx7_vTEIgf_r3-RoXK4qycNxEYi6vmDLqCAVE

шестеренка корончатая 24

https://lh5.googleusercontent.com/sK5-4neitJm5kS6ljIZ_y20OFSg8TC9GUKwrKAgl4GLVqHoW1YNnKWA4AgQ03grmfKR5_4wjTSRlvC1u8zoTZbLEszVJKK0cE9GWwKt7A27ICGy49g8

шестеренка коническая двойная 36

https://lh3.googleusercontent.com/ZZGcLVupc6CQbL9Qhkh1vDeNwri6TzcAD3z2eTtM-fc7zFVVjKYFBK_O6KOecqqMDuzo6QaFYmJDqS9hNq7klXugUMz2vryPwAMBinY8gYnsn8KdvWc

шестеренка 40

https://lh4.googleusercontent.com/vdwjdby8TeowxFn550Jv9N7a4VPYaYh0qCUzGO6w3bHZjmQHc9_J4lmR0hW5pfra9GAq0ioWyf1WtP64bQDXovkBWwyGOgQS5t_zGr3TCgHzZTbd6_k

коробка дифференциала

https://lh3.googleusercontent.com/DtsYExZoXoh-wXJuGkdJ-eGjUt6jf_JMMkJ6bUfVCbD61nbZsNHEj-g36tWhnFukpeZ4PHQxsxnHu5Sgt0YRe5hLyxeX4F8iw0_Rbr0oYx34s-HejgQ

угловая шестерня на 4 узла

https://lh5.googleusercontent.com/nLaM6gjpipgKVPE1f-fLzN-R49_sR7zlGZ90sQQ2QN0e6bc-rV5bZIsoNO2Jz6rKTKQXmEqbn7dL1sLmTls2My0ZSxLuXbGcnLv6Wmq8KP-xJkBjVRA

червячная шестерёнка

https://lh3.googleusercontent.com/OpOMma-KhfIC9Pjy3a3JmXbn9zSaoz2E5CyhZZz-XDrf3tIeFEn3oIJcsa92tbXJKXartM6vzdovexRTi52eWKapbJtJFx-7bUAzjk9eycSj_9tm5-w

корпус для червячной передачи

https://lh3.googleusercontent.com/IJusnXmy0D1NNQwX1hGgHWDnP89lc-wxWNwybQpfN1Zu62v9bDI12uZIgTlpcc_gOD_q5b1QVhQbXPA5EY7Pu3zB_iMTxzWvOosKhLcRAB_v-OSChKw

звено цепи

https://lh5.googleusercontent.com/CKclzB3X0BuTtBjpY3OzvS2Sy-VNkyl1JBLkdiFnnyjwmyWqR3JggvnnBTKJHrbVv4lJGUPs_yVE5AR_zfb93Fesc_liKumFT7JStswYq6rPYX5S8Us

зубчатая рейка 1x4

https://lh5.googleusercontent.com/9dVNST_Msa6W74jAj6lLyXUAZZOEV6L6HGdi4Fc_oBwiIDeN6ZuF-yFG2SrgbyNkD-8B8DZWm_sQjU_ReU1DnieCPsHqkhjBUltAnI_FicHE8K3E-fs

зубчатая рейка с отверстиями 1x8

https://lh6.googleusercontent.com/d4AxWOzPDZ0KTyvWe5fpgW54gC7M0sZVg9p9aSyAif4epVoGmZ9KIUWvelALlJbnhk94HKEmcVsqGvQ0VmfDDFI2AeqymEFUw7vPZqzh5HvdBeEFPBk

шкив

https://lh6.googleusercontent.com/Il8ZEVXAg5rzZAD0fpIVR5U1osVmsgEIHBQsUUxv3DMmLsEbRcUnLJ-NAhraIO0hsx_9pijpWzpYYXiV-RqZIQQycmve8bvQDOdpztQ7_7kADszCgpY

Колёса

шина

https://lh6.googleusercontent.com/Yv34paunT4w6qX0gcX2vOl7jODjU0K4RNKvZjcf-E-6XCjEfRHMXGe2b_5ohKtZVDWoVd8fWYqqpj87cBV-QrSbgTst2svsPEmcvkRZzTBApAMe-fw8

шина 43.2x22 ZR

https://lh6.googleusercontent.com/uc9IZhRagfNL2sae4QxUkOLF9U6Qje6JrwUooZ62MCmQXG29bxApL0-xTvp11PMpV18g55jmr1ow0NcfSYFzrXpMr7J_GV1tXE4aOlT_4AQrii0soT0

шина 56x26

https://lh5.googleusercontent.com/IlmvrBuZQfHcMilrWWkwuza6En5noZqm6i8JI_dLKT1CpevWdvBWZ_jRzVd5RMNtYJIlzPoQkvEcOOlllKcI-7QDR9EdkQjHiebaTtQVp6yv9kRyjcs

шина 81.6x15

https://lh3.googleusercontent.com/Kux9G4tIT1tBcMOCHSQsLQzZnnBkeJ71oSzcu7_zlxqK4Fe2lzoR9uEfVPyrUGPxnBOOhnF9AbT2u2x4LWSQ4OC27VWSEydGCAaLpSFBb9tCpY0mvFo

диск 43.2x22

https://lh4.googleusercontent.com/i52KSWkWfd5GX6N7AI6eEE5TSab3zDrZwlisMAvWHqtDqRfHNG4LjDjeiXqWXWA6wJSakF2NmKh9d9-WktZ-ZToDdd4XxgP0q-9SBo56Kr6HvZDoGKA

диск 81.6x15

https://lh5.googleusercontent.com/9tblBzWEI9c6mFXrbXKxocBeysnVyzTdG386fx7kq1ukO2AZwE-CmYiSg6VGgTv0st77fBDWYqVyQFlZdk5GsUytsW8mcZUvPGr-ZuWDjIT3kZ6itsc

Декорации

стрела

https://lh3.googleusercontent.com/bGAFa4Nqy38gRqqjQEJf9SSEAiFpKUD6ekh6EHAGRkehA3NXber7yZiZwQoULJ6wUICRF9sj5EmPvDjmwExYJ1M-1IdmmMtSgToJB4g727xm35YtNgA

пушка

https://lh6.googleusercontent.com/8sVYqe2QxoKnmsJ5seFIg4tO9_2mN6XonKPguKiBrpJvBZtsRvyO6Q-0qYTTzP_73mQtm3gzsmKKQMe4OImM-S317B-NVZGwcflhoURMVZ1JX6wsqjY

зуб бионикла с отверстием для оси

https://lh3.googleusercontent.com/dTgwNdkSprPALEoAl9iRhpYDzdX6KwHLFRItYbQxGLCW9ZzwF-Rh1YHYIECtOWUCze7oOsqbt6u94zg4MK-m83oMCsQla0rd-vcfL2RZOL14EVwE36M

коготь бионикла

https://lh6.googleusercontent.com/NKdLJP7ULAk_bfSbyMGtlQvtoXPV9Wghz4ZRQOcXHtQMkSyjUSdfH2C-DJOxnoev3w-QA8VR8c90n4kY9U98toon9oQDv07gl2tX9_KNpBLEdSUkS1M

крюк большой металлический

https://lh4.googleusercontent.com/BvWHTUTeK1wuTZugztJf7f4B7nf3-MlCWXtThv1qE5Dk0njRtzC5_svTYDzK2NsrFjFMyBQUSId-0bx4RWQ3odwmGKi4TwpKjQ2lJ4u6SGwTpohmptI


Приложение №3

Положение

по проведению открытого  конкурса-викторины

по робототехнике «Новогодняя механика»

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

  1. Участники конкурса

К участию в конкурсе приглашаются команды учащихся 4-11 классов. Команда состоит из двух человек. Количество команд от учреждения не ограниченно.

Результаты подводятся по двум возрастным группам:

  • учащиеся 4-7 классов,
  • учащиеся 8-11 классов.
  1. Порядок проведения конкурса-викторины

1 этап: Викторина знатоков «Элементы лего-конструкций и механизмов»

Команды проходят жеребьевку на очерёдность ответа. За правильный точный ответ дается 10 баллов. При не точном или не правильном ответе, право отвечать получает следующая по очереди команда.

2 этап: Конкурс новогодних конструкций

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

Команды представляют свою конструкцию в действии, комментируют ее работу.

Каждая представленная конструкция должна сопровождаться техническим описанием, которое включает в себя:

  1. титульный лист (учреждение, название конструкции, авторы, руководитель),
  2. описание назначения конструкции,
  3. руководство по использованию конструкции
  4. карта сборки и фото конструкции.

Конкурс проводится  21 декабря  2013 года, в 15.00 в БОУ ЗДТДиМ каб № 306

Заявки команд на участие принимаются до 20 декабря по адресу: konkursDVTV@rambler.ru 

В заявке указать учреждение, состав команд, имя руководителя (полностью).

  1. Порядок награждения победителей

Победители награждаются дипломами. Результаты и имена победителей по окончании конкурса будут опубликованы на сайте http://dvtdim.dop.mskobr.ru/

Приложенеи№4

Занятие «Программирование ботов с использованием

датчика касания»

СОДЕРЖАНИЕ

  • Общие сведения, цель, задачи
  • План учебного занятия
  • Технология организации и проведения учебного занятия
  • Материальное обеспечение
  • Литература

Пояснение

После освоения азов программирования ботов, можно приступить к изучению работы  различных датчиков.  Усложнение программ управления происходит медленно и постепенно. Добиться от детей осознанного самостоятельного программирования в данных условиях трудно и долго. Для того что бы,  не растерять  интерес детей к занятиям и при этом обучить их составлять индивидуальные программы управления предлагаются готовые  небольшие программы управления с конкретными функциями и возможностью самостоятельно менять параметры констант. Из этих мини-программ управления учащиеся «собирают»  свои индивидуальные программы управления и отрабатывают их на ботах.

Соревновательный аспект занятия способствуют повышению образовательного качества.

Цель занятия:  создание условий  формирования устойчивых умений навыков программирования.

Задачи

Образовательные:

  • закрепить знания по программированию движения бота;
  • повторение правил установки датчиков в программе в соответствии и их монтажом на ботах;
  • запрограммировать движение бота с использованием дополнительных команд управления и датчика касания.
Развивающие:
  • формирование логического, технического мышления;
  • развитие умения довести начатое дело до конечного результата.

Воспитательные:

  • формирование навыка продуктивного сотрудничества в коллективе;
  • воспитание уважения  к чужому мнению и достижениям.

ПЛАН УЧЕБНОГО ЗАНЯТИЯ

Этап учебного занятия

Длительность

1.

Организационный момент

2 мин.

2.

Формулирование цели и задач занятия

3 мин.

3.

 Теоретическая часть. Повторение команды Off(). Изучение дополнительных команд  остановки сервомоторов команды Float() и Coast(), команд поворота  двигателя на заданный угол RotateMotor(‘ports',‘speed',‘degrees')  RotateMotorEx(‘ports',‘speed',‘degrees',‘turnpct',‘sync', 'stop'). Повторение правил установки датчиков в программе в соответствии и их монтажом на ботах.

20 мин.

4.

Практическая часть: составление мини-программ манёвров ботов. Программы поворота на право и на лево,  с блокировкой одного колеса в перёд и назад, программа «танкового» разворота через движение на право и на лево.

20 мин.

5.

Перемена. Подготовка игровой площадки.

15 мин.

6.

Игра «Робокёрлинг».

40 мин.

7.

Подведение итогов. Уборка учебного оборудования.

5 мин.

ИТОГО:

120 мин.

ТЕХНОЛОГИЯ ОРГАНИЗАЦИИ И ПРОВЕДЕНИЯ УЧЕБНОГО ЗАНЯТИЯ

Этап учебного занятия

Деятельность

Педагога

Деятельность учащихся

Организационный момент

Сбор учащихся на занятие. Подготовка к работе .

Готовят свое рабочее место: тетради,  ручки

Формулирование

цели и задач занятия

Объяснение, что цель занятия, заключается в изучении полного списка команд управления сервомоторами – это нужно для полноценного управления движением ботов и манипуляторов.

Слушают педагога задают вопросы

 Теоретическая часть.

  • Повторение команды Off().

Обращаю внимание на особенность данной команды. Она  блокирует вал и отключает электропитание.  

Проблемное обсуждение не  корректной остановки механизма бота.

  • Выход из проблемной ситуации – применение дополнительной команды  остановки сервомоторов Float().

Наводящие вопросы.

  • Изучение дополнительных команд поворота  двигателя на заданный угол RotateMotor (‘ports',‘speed',‘degrees')  RotateMotorEx (‘ports',‘speed',‘degrees',‘turnpct',‘sync', 'stop').  Лекция.
  • Повторение правил установки датчиков в программе в соответствии и их монтажом на ботах.

Проблемное обсуждение несоответствия программы и монтажа.

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

Слушают и записывают.

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

Практическая часть.

  • Составление мини-программ манёвров ботов.
  • Программы поворота на право и на лево,  с блокировкой одного колеса в перёд и назад,
  • Программа «танкового» разворота через движение на право и на лево

Составляют и тестируют индивидуальные программы.

Перемена..

Проветривание.

Подготовка игровой площадки.

Выдача ботов.

Учащиеся выходят из кабинета.

Игра «Робокёрлинг».

  • Учащиеся разбиваются на две команды.
  • Каждая команда собирается для обсуждения тактики игры.
  • Учащиеся программируют ботов в соответствии с задуманным планом.
  • Учащиеся тестируют и отлаживают программы ботов.
  • Готовые боты  выставляются в техническую зону. Операторы ботов берут каждую машину и производят ход.
  • Педагог записывает результат в таблицу на доске в соответствии с набранными ботом очками.
  • Выигрывает команда набравшая самое большое число очков.

Начисление очков:

Проезд бота с линии старта до касания с препятствием и возврат с остановкой в центре дома +20 очков. Остановка в о внутреннем дворе + 10 очков. Остановка одним колесом в доме вторым во дворе +15. Остановка в поле + 5 очков.

Дополнительные очки начисляются: +5 за касание препятствия в области со знаком «+». Штрафуется на – 5 при касании области со знаком «-».

«Танец прицеливания» с линии старта оценивается:

Поворот  на 360 гр. +5.

Поворот на 180гр. + 10

4 последовательных поворота 90 гр, 0 гр, 90 гр, угол прицеливания +20 очков.

«Танец прицеливания» с линии финиша оценивается:

360гр-+угол прицеливания + 10.

180гр +- угол прицеливания + 15

«Победный танец» - Любая форма +20.

Активно участвуют, программируют движения ботов, помогают друг другу.

Подведение итогов. Уборка учебного оборудования.

Выключение компьютеров, выключение ботов, парковка ботов в ячейки.

Активное участие.

Все довольны

 МАТЕРИАЛЬНОЕ И МЕТОДИЧЕСКОЕ ОСНАЩЕНИЕ

ЛИТЕРАТУРА

1. Пособие по программированию в среде NXC..

2. Cобранные триботы LegoMindstorms из конструктора 9797 «Перворобот»

3. Размеченное поле размером 200Х74 см.

4.  Барьер  размеченный на три участка со знаками «+» и «-».

5. Компьютерный класс с установленным программным обеспечением Bricx Command Center для программирования ботов.



Предварительный просмотр:

ГБОУ ЗДТДиМ

Дополнительная общеобразовательная программа

«Разработка, конструирование и программирование стационарных и мобильных автоматизированных систем»

ДЕПАРТАМЕНТ ОБРАЗОВАНИЯ ГОРОДА МОСКВЫ

ЗЕЛЕНОГРАДСКОЕ ОКРУЖНОЕ УПРАВЛЕНИЕ ОБРАЗОВАНИЯ

ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ГОРОДА МОСКВЫ

ЗЕЛЕНОГРАДСКИЙ ДВОРЕЦ ТВОРЧЕСТВА ДЕТЕЙ И МОЛОДЁЖИ

УТВЕРЖДАЮ

Директор ГБОУ ЗДТДиМ

____________ О.Н. Сорокина

"____"______________20__г.

ДОПОЛНИТЕЛЬНАЯ ОБЩЕОБРАЗОВАТЕЛЬНАЯ ПРОГРАММА

«Разработка, конструирование и программирование стационарных и мобильных автоматизированных систем»

Направленность - техническая

Уровень - базовый

Для учащихся  5-9 классов

Срок реализации программы –  1 год

Авторы:

педагог дополнительного образования

Косицын Сергей Юрьевич,

методист

Косицына Ольга Георгиевна

МОСКВА – 2014


ПРОТОКОЛ СОГЛАСОВАНИЙ

ДОПОЛНИТЕЛЬНОЙ ОБЩЕОБРАЗОВАТЕЛЬНОЙ ПРОГРАММЫ

«Разработка, конструирование и программирование стационарных и мобильных автоматизированных систем»

УТВЕРЖДЕНО

Методическим советом

Протокол №_______

от"____"____________20__г.

Председатель методического  совета__________________/                               /

СОГЛАСОВАНО

Управляющим  советом

Протокол №_______

от"____"____________20__г.

Председатель управляющего  совета__________________/                               /


Содержание

  • Пояснительная записка

Направленность

Новизна и актуальность

Цель и задачи программы

Отличительные особенности

Возраст детей

Сроки реализации. Формы и  режим занятий

Ожидаемые результаты и способы их проверки

Формы подведения итогов

  • Учебно-тематический план
  • Содержание образовательной деятельности
  • Список  статей и каталог файлов
  • Приложения:

№1 Пособие для учащихся «Программированию в среде  NXC»

№2 Положение по проведению соревнований по робототехнике «Фигурное катание»

№3 Занятие «Программирование ботов с использованием

датчика касания»

№4 Примерный календарно-тематический план


Пояснительная записка

Направленность:

Дополнительная базовая  общеобразовательная программа  «Разработка, конструирование и программирование стационарных и мобильных автоматизированных систем» реализует техническую направленность.  Способствует формированию у обучающихся интереса к технике, развитию  конструкторских способностей и технического мышления.  Предполагает обучение конструированию и компьютерному управлению  с использованием образовательных конструкторов LEGO и аппаратно-программного обеспечения.

В основу программы были положены элементы образовательных программ дополнительного образования детей  «Легоконструирование» (Авилова С.Ю. г.Тюмень), «Легоконструирование» (Щетинин Н. А.)  

Данная программа разработана с учетом требований письма от 11 декабря 2006 г. N 06-1844 Министерства образования и науки Российской Федерации «О примерных требованиях к программам дополнительного образования детей» и в соответствии с СанПин 2.4.2. 2821– 10 ст4.12 и СанПин 2.4.4.1251-03

Актуальность и педагогическая целесообразность:

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

Обучение организовано с применением специализированных конструкторов Lego разного уровня сложности и среды программирования NXC/

Цель и задачи программы

Цель  обучение основам конструирования и программирования на базе Lego Mindsrorms NXT-G

 Задачи

образовательные:

  • закрепление  основных принципов механики;
  • изучение  программирования в компьютерной среде NXС;
  • формирование навыков  создания  простейших мобильных систем;
  • закрепление навыков  работы по инструкциям;
  • формирование навыков выполнения творческих проектов;
  • пополнение словарного запаса  техническими терминами;
  • формирование навыков обработки информации;

развивающие:

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

воспитательные:

  • формирование думающего и чувствующего, любящего и активного человека, готового к творческой деятельности в любой области;
  • аккуратность;
  • умение работать в коллективе;
  • воспитывать чувство доброты и взаимовыручки;
  • уважение к чужому мнению;
  • усидчивость.

Отличительные особенности

Программа рассчитана на воспитанников в возрасте  от 12 до 15 лет прошедших обучение по программе «Конструирование механизмов и основы программного управления».  Из двух  представленных предметов (конструирование и программирование), на передний план выходит собственно программирование мобильных систем. В течении года учащимся предлагается для решения несколько игровых задач. Итогом решения данных задач является участие готового робота в соревновании, с конкретно заданными правилами.

Возраст детей

Набор в учебные группы ведется из числа учащихся 7-9-х классов (12-15 лет).

Сроки реализации. Формы и  режим занятий

Образовательная программа рассчитана на 1 год обучения.

При реализации программы вступают в силу правила СанПин по работе на персональном компьютере Компьютерный класс в ГБОУ ЗДТДиМ (каб№ 306) имеет общую площадь 63,2 кв.метра. В соответствии с требованием  СанПиН 2.4.4.1251-03 п4,п.п.4,5 площадь на одно рабочее место должно быть не менее 6,0 кв.м. В связи с этим количество рабочих мест, которое может обеспечить учреждение -10 шт. В соответствии с 9.4.20 на запрет использования  одного ПК для двух и более детей учебная группа может состоять не более чем из 10 человек.

Материальная база робототехнического класса обеспечена 10 индивидуальными и 5 групповыми (на 2-х обучающихся) рабочими комплектами, (включая преподавательский набор). Конструкторы состоят из большого количества мелких деталей, что требует особенно внимательного  педагогического наблюдения за каждым обучающимся на занятии.

Учитывая это учебная группа по робототехнике состоит из 8 человек.

Занятия проводятся 2 раза в неделю по 2 часа, за год -176 часа. Их них  128  часов - аудиторные занятия, и 48 часа - социальная практика.  Занятия комбинированного типа (сочетание теории и практики) с применением метода проектно исследовательской деятельности. Структура двух часового занятия по программированию соответствует требованиями СанПиН 2.4.4.1251-03: 5 минут  организационная часть,  15 минут теоретическая часть, 25 минут работа за компьютером, 15мин.-перемена, физкульминутка (легкая разминка для снятия напряжения плечевого пояса, туловища, глаз см. Приложения), 25 минут - работа за компьютером, 10 минут беседа, общее обсуждение результатов работы индивидуальные консультации,  25 минут - работа за компьютером. Компьютерные игры на занятиях не используются, т. к. увеличение времени занятия не способствует хорошему усвоению материала обучающимися, ведет к перегрузке. Структура двух часового занятия по конструированию соответствует требованиями СанПиН 2.4.4.1251-03: 45 минут  организационная и теоретическая часть, 15мин.- физкульминутка (легкая разминка для снятия напряжения плечевого пояса, туловища, глаз см. Приложения), 45 минут работа с конструктором, 15 мин уборка рабочего места разборка моделей.

Ожидаемые результаты и способы их проверки

Обучающий может знать:

  • Понятие мобильной системы.
  • Принципы программирования автономной мобильной системы.
  • Принципы разработки конструкций для автономных мобильных систем.
  • Интерфейс  Bricx Command Center
  • Синтаксис написания программы на языке NXC
  • Процедуры запуска и остановки моторов, особенности работы различных процедур запуска и остановки.
  • Правила объявления переменных, типы переменных языка NXC, массивы.
  • Использование циклов,
  • Программные управляющие структуры

Обучающий может уметь:

  • Программирование автономной мобильной системы.
  • Разработка конструкций для автономных мобильных систем.
  • Запуск Bricx Command Center,
  • Написание программы на языке NXC,
  • Составление программ с использованием переменных различных типов для сохранения данных и более гибкого управления мобильной системой.
  • Составление программ с использованием циклов.  
  • Составление программ с операторами ветвления и переключателями.
  • Программирование реакция мобильной системы на данные от сенсоров различных типов.

Оптимизация кода программы путём написания процедур и функций

Формы подведения итогов

Формы подведения итогов реализации программы зависят от сложности изучаемой темы и индивидуального уровня развития учащегося: творческие работы, самостоятельные работы репродуктивного характера, занятия на повторение и обобщение (после прохождения основных разделов программы), работа обучающихся над творческими проектами. Систематическое наблюдение за детьми в течение всего времени реализации программы, включающее: результативность самостоятельной деятельности, активность, творческий подход к выполнению заданий, степень самостоятельности в их решениях и выполнении, уровень усвоения знаний, умений и навыков, предусмотренных соответствующим разделом программы.  Публичные защиты творческих проектов и исследований. Для фиксирования результатов обучения в течении года используется Сводная индивидуальная карта

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


УЧЕБНО-ТЕМАТИЧЕСКИЙ  ПЛАН

Название темы

Теория

Практика

Всего

Введение в предмет "Программирование автоматизированных систем

1

Мобильные системы.

1

32

33

Программная среда Bricx Command Center

2

4

6

Синтаксис написания программы на языке NXC

2

4

6

Управление движением

3

4

7

Переменные

2

4

6

Циклы

2

4

6

Программные управляющие структуры

2

6

8

Сенсоры

4

6

10

Задачи и функции

2

6

8

Управление дисплеем

2

6

8

Проигрывание звука

2

8

10

Параллельные задачи

3

12

15

Социальная практика

48

48

Занятия по промежуточной и итоговой аттестации

4

4

Итого

28

148

176

СОДЕРЖАНИЕ ОБРАЗОВАТЕЛЬНОЙ ДЕЯТЕЛЬНОСТИ

  1. Введение в предмет "Программирование автоматизированных систем ".

Теория. Правила безопасной работы в кабинете робототехники. Понятие мобильных автоматизированных систем. Цель обучения.

  1. Мобильные системы.

Теория:
Понятие мобильной системы. Назначение мобильных систем. Применение. Программирование мобильных систем. Автономные мобильные системы. Дистанционно управляемые мобильные системы.
Практика:
Построение мобильной системы для выполнения поставленной задачи. Программирование автономной мобильной системы. Разработка конструкций для автономных мобильных систем.

  1. Программная среда Bricx Command Center

Теория:
Интерфейс  Bricx Command Center,  правила написания программы, запуск программы, проверка программного кода, обработка ошибок.
Практика:
Запуск Bricx Command Center, написание программы на языке NXC, проверка программы, Загрузка программы в блок NXC,  запуск и отладка программы, запись программы на жесткий диск.

  1. Синтаксис написания программы на языке NXC

Теория:

Описание констант, описание макрокоманд, описание переменных, блок написания  процедур и функций, блок автономных программ, основной блок программы.

Практика:

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

  1. Управление движением

Теория:

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

Практика:

Отработка запуска и остановка моторов, поворот одним двигателем, поворот двумя двигателями, распределение мощности при управлении двумя двигателями, отработка плавного старта и остановки моторов, отработка дискретного движения.

  1. Переменные

Теория:

Правила объявления переменных, типы переменных языка NXC, массивы.

Практика:

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

  1. Циклы

Теория:

Использование циклов, циклы с проверкой условия в начале, циклы с проверкой условия в конце, бесконечные циклы, вложенные циклы. Скорость исполнения цикла, Особенности синтаксиса записи циклов на языке NXC.

Практика:

Составление программ с использованием циклов.  

  1. Программные управляющие структуры

Теория:

Оператор «if», «else», «do», «swith», «case», «default» , «break».

Практика:

Составление программ с операторами ветвления и переключателями.

  1. Сенсоры

Теория:

Сенсор освещенности, ультразвуковой дальномер, звуковой сенсор, датчик касания, сенсор вращения, режимы и типы сенсоров, скорость опроса датчиков.

Практика:

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

  1. Задачи и функции

Теория:

Уменьшение кода программы путем вынесения повторяющихся частей в отдельные процедуры и функции, правила объявления процедур и функций, передача параметров в процедуры и функции.

Практика:

Написание процедур и функций для оптимизации команд движения мобильной системы.

  1. Управление дисплеем

Теория:

Функции вывода информации на экран блока NXT.

Практика:

Программирование вывода на экран NXT текстовой и графической информации.

  1. Проигрывание звука

Теория:

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

Практика:

Составление программ использующих функции вывода звуковой информации для более наглядной работы мобильной системы.

  1. Параллельные задачи

Теория:

Способ одновременного запуска нескольких одновременно выполняющихся задач, способы передачи управления между одновременно работающими программами, флаги.

Практика:

Составление программ для мобильных систем с отслеживанием параметров нескольких сенсоров и возможностью реакции на них.

  1. Социальная практика

Участие в соревнованиях по конструированию и программированию мобильных систем, участие в научно технических конференциях, реализация творческих проектов. Обучающимся предлагается самостоятельно разработать конструкцию или механизм  на свободную тему с применением полученных знаний, умений и навыков.

Участие в качестве зрителей или участников в технических конкурсах, играх, викторинах, праздниках. Экскурсионные поездки  с профильной тематикой или  в общеразвивающем направлении. проведение творческих профильных смен.

  1. Занятия по промежуточной и итоговой аттестации..

Занятие по промежуточной аттестации.  Правила безопасной работы в кабинете. Разработка конструкций. Основы программирования на языке NXC Проверка знаний элементной базы конструктора. Скоростная сборка-разборка конструкций.  

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

МЕТОДИЧЕСКОЕ ОБЕСПЕЧЕНИЕ

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

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

Организация педагогического процесса предполагает создание для обучающихся такой среды, в которой они полнее раскрывают свой внутренний мир и чувствуют себя комфортно и свободно. Этому способствуют комплекс методов, форм и средств образовательного процесса.

Формы проведения занятий разнообразны. Это и лекция, и объяснение материала с привлечением обучающихся, и самостоятельная тренировочная работа, и эвристическая беседа, практическое учебное занятие, самостоятельная работа, проектная деятельность.

На занятиях предусматриваются следующие формы организации учебной деятельности: индивидуальная (обучающемуся даётся самостоятельное задание с учётом его возможностей), фронтальная (работа со всеми одновременно, например, при объяснении нового материала или отработке определённого технологического приёма), групповая (разделение обучающихся на группы для выполнения определённой работы).

«Красной нитью» через весь образовательный процесс проходит индивидуальная исследовательская деятельность воспитанников.  Именно это является основной почвой для формирования комплекса образовательных компетенций.

Как правило, 1/3 занятия отводится на изложение педагогом теоретических основ изучаемой темы, остальные 2/3 посвящены практическим работам и повторение материала предыдущего занятия. В ходе этих работ предусматривается анализ действий обучающихся, обсуждение оптимальной последовательности выполнения заданий, поиск наиболее эффективных способов решения поставленных задач.

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

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

Каталог файлов

  1. Robolab 2.9 Rus (PC)

Тоrrent файл на загрузку графической среды программирования Robolab 2.9 Rus (PC) 440(МБ)

  1. MINDSTORMS_NXT_2_RUS

Тоrrent файл на загрузку образа диска графической среды программирования MINDSTORMS NXT 2.0 (RUS) (430МБ)

  1. MINDSTORMS NXT 2.0

Тоrrent файл на загрузку образа диска графической среды программирования MINDSTORMS NXT 2.0 (ENG) (641МБ)

  1.  NI LabView 2012 torrents

Тоrrent файл на загрузку полного набора дисков входящих в графическую среду программирования LabView 2012 для 32-bit и 64-bit версии ОС. (44.5ГБ)

  1. LabView 2012

Тоrrent файл на загрузку графической среды программирования для 32-bit и 64-bit версии ОС. (2.72ГБ)

  1. Программа «Лего-конструирование» в год 64 часа в неделю 2 часа

Муниципальное образовательное учреждение «Средняя общеобразовательная школа №88» Руководитель: Авилова С.Ю. г. Тюмень, 2009

  1. Программа кружка «Лего - конструирование» Муниципального общеобразовательного учреждения  «Хуторская основная общеобразовательная школа» Учитель: Щетинин Николай Алексеевич. Огромная благодарность.
  1. Плакаты с названиями деталей и схемы размещения

Графические файлы с изображением деталей с названиями, а так же удобные схемы размещения для конструкторов 8547 и 9695

  1. Название деталей конструктора лего набора перворобот

Полный перечень деталей конструктора lego 9797 и 9695 упорядоченных по категориям.

Список статей

  1. Программа «Лего-конструирование» в год 64 часа в неделю 2 часа
  2. Муниципальное образовательное учреждение «Средняя общеобразовательная школа №88» Руководитель: Авилова С.Ю. г. Тюмень, 2009
  3. Курс по LEGO-конструированию для 4 класса. Курс составлен Наталией Александровной Быстровой
  4. Курс по LEGO-конструированию для 3 класса.  Курс составлен Анастасией Викторовной Павловой
  5. Конспекты уроков ЛЕГО во втором классе приложения
  6. Курс по LEGO-конструированию для 2 класса. Курс составлен Наталией Александровной Подлесной, г. Москва 
  7. Курс по ЛЕГО-конструированию для 1 класса. Курс составлен преподавателем ГОУ Прогимназии №1781 Людмилой Николаевной Сторублёвой.


Приложение №1

Пособие для учащихся «Программированию в среде  NXC»

Составитель: Косицын С.Ю.

Оглавление

Первая программа        

Постройка робота        

Запуск Bricx Command Center        

Написание программы        

Запуск программы        

Ошибки в программе        

Изменяем скорость        

Подводим итоги        

Более интересная программа        

Учимся делать повороты        

Повторяем команды        

Добавляем комментарии        

Подводим итоги        

Использование переменных        

Движение по спирали        

Случайные числа        

Подводим итоги        

Управляющие структуры        

Оператор "if"        

Оператор "do"        

Подводим итоги        

Сенсоры        

Ждём информацию с сенсора        

Действия при срабатывании сенсора касания        

Сенсор освещенности        

Звуковой сенсор        

Ультразвуковой дальномер        

Подводим итоги        

Задачи и функции        

Задачи        

Функции        

Определяем макрос        

Подводим итоги        

Создаём музыку        

Проигрываем звуковые файлы        

Играем музыку        

Подводим итоги        

Еще раз о моторах        

Плавная остановка        

Дополнительные команды        

ПИД-управление        

Подводим итоги        

Дополнительная информация о сенсорах        

Режимы и типы сенсоров        

Сенсор вращения        

Подключение нескольких сенсоров к одному входу        

Подводим итоги        

Параллельные задачи        

Неправильная программа        

Критические секции и "мьютекс"-переменные        

Использование семафоров        

Подводим итоги        

Коммуникации между роботами        

Отправка сообщений мастер-подчиненный        

Отправка чисел с подтверждением        

Прямые команды        

Подводим итоги        

Дополнительные возможности        

Таймеры        

Дисплей        

Файловая система        

Подводим итоги        

Как определить цвет, когда датчик "врет"?        

NXC: кнопочная интерактивность        

NXC: работаем с датчиками вращения мотора        

NXC: работаем с цветовым сенсором.        

NXC: датчики, енкодеры, кнопки - взаимодействуем с внешним миром        

Пример 1. Датчик расстояния        

Пример 2. Измерение отраженного света.        

Пример 3. Измерение окружающего света        

Пример 4. Использование необработанных данных        

Пример 5. Датчик вращения двигателя (енкодер)        

Пример 6. Скорость опроса датчика расстояния        

Пример 7. Определение цвета        

Пример 8. Опрос датчика цвета в режиме датчика освещенности        

NXC: использование циклов        

Пример 2. while() в одну строчку        

Пример 3. until()        

Пример 4. Скорость исполнения цикла.        

NXC: повороты - практика программирования моторов        

Пример 1. Поворот одним двигателем        

Пример 2. Поворот двумя двигателями        

Пример 3. Распределение мощности при управлении двумя двигателями        

Пример 4. Альтернативный поворот двумя двигателями        

Сортировка данных на NXT        

Пузырьковая сортировка        

Сортировка вставками        

Сортировка Шелла        

Приложение№2

Положение по проведению соревнований по робототехнике «Фигурное катание»

Цель конкурса:

1.1.Формирование творческого потенциала и познавательного интереса к занятиям в объединениях робототехники;

1.2.Развитие творческого интереса в области информационных и компьютерных технологий;

1.3.Приобретение участниками навыков работы с Лего- конструкторами, навыков программирования;

1.4. Развитие абстрактного мышления и способностей к поиску не стандартных решений;

Задачи конкурса:

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

Организация проведения конкурса:

Организаторы конкурса

ГБОУ  Зеленоградский дворец творчества детей и молодёжи;

Отдел технического творчества объединение «Конструктив»

Участники конкурса

  • Обучающиеся образовательных учреждений возрасте от 7 до 17 лет.
  • К участию в соревнованиях приглашаются команды использующие для изучения робототехники конструкторы ЛЕГО Mindstorm.
  • Команда – коллектив учащихся во главе с тренером, осуществляющие занятия по робототехнике (подготовку к состязаниям) в рамках образовательного учреждения. Количество членов команды – не ограничено.
  1. Порядок проведения конкурса-викторины

1. Содержание конкурса

  • В соревнованиях участвуют команды образовательных учреждений с роботами из наборов Mindstorm, робот может быть собран только из деталей указанных наборов.
  • В соревнованиях участвует неограниченное количество роботов от команды.
  • Соревнования состоят из 2 раундов (попыток) и времени отладки.
  • Команды должны поместить готового робота в инспекционную область. После подтверждения судьи, что роботы соответствуют всем требованиям, соревнования могут быть начаты.
  • Операторы могут настраивать робота только во время отладки.
  • Если при осмотре будет найдено нарушение в конструкции робота, то судья даст 3 минуты на устранение нарушения. Однако, если нарушение не будет устранено в течение этого времени, команда не сможет участвовать в состязании.
  • После окончания времени отладки нельзя модифицировать или менять роботов (например: загрузить программу, поменять батарейки). Также команды не могут просить дополнительного времени.
  • По окончании первого раунда будет дано 25 минут на отладку. Участники смогут забрать роботов, чтобы улучшить работу робота и провести испытания. После окончания времени отладки участники должны поместить робота назад, в инспекционную область.
  • После того, как судья повторно подтвердит, что робот отвечает всем требованиям, робот будет допущен к участию во втором раунде.

2. Судейство

  • Организаторы оставляют за собой право вносить в правила состязаний любые изменения.
  • Контроль и подведение итогов осуществляется судейской коллегией в соответствии с приведенными правилами.
  • Судьи обладают всеми полномочиями на протяжении всех состязаний; все участники должны подчиняться их решениям.
  • Если появляются какие-то возражения относительно судейства, команда имеет право в письменном порядке обжаловать решение судей в Оргкомитете не позднее 10 минут после окончания текущего раунда. После окончания раунда претензии не принимаются.
  • Переигровка может быть проведена по решению судей в случае, когда робот не смог закончить  этап из-за постороннего вмешательства, либо когда неисправность возникла по причине плохого состояния игрового поля, либо из-за ошибки, допущенной судейской коллегией.
  • Члены команды и руководитель не должны вмешиваться в действия робота своей команды или робота соперника ни физически, ни на расстоянии. Вмешательство ведет к немедленной дисквалификации.
  • Судья может закончить состязание по собственному усмотрению, если робот не сможет продолжить движение в течение 10 секунд.
  • Распределение мест будет определяться по самому большому числу очков в каждом из видов соревнований (не сумма).

3.Требования к команде

  • Операторы одного робота не могут быть операторами другого робота.
  • В день соревнований на каждого робота команда должна подготовить: все необходимые материалы, такие как: диск с программами, запасные батарейки или аккумуляторы, портативный компьютер.
  • В зоне состязаний разрешается находиться только участникам команд (тренерам запрещено), членам оргкомитета и судьям.
  • После старта попытки запрещается вмешиваться в работу робота. Если после старта оператор коснется робота, покинувшего место старта без разрешения судьи, робот может быть дисквалифицирован.
  • Участникам команды запрещается покидать зону соревнований без разрешения члена оргкомитета.
  • При нарушении командой одного из пунктов правил, команда получит предупреждение. При получении командой 3-х предупреждений команда будет дисквалифицирована.

4. Требования к роботу

  • Конструкция робота должна быть стандартным триботом или одной из его модификаций.
  • Максимальная ширина робота 250 мм, длина 250 мм, высота 250 мм.
  • Робот должен быть автономным, т.е. не допускается дистанционное управление роботом.
  • Роботы должны быть построены с использованием только деталей конструкторов ЛЕГО Mindstorm.
  • В конструкции робота можно использовать только один микрокомпьютер
  • В конструкции робота разрешено использовать только двигатели и датчики конструкторов ЛЕГО Mindstorm.
  • Командам не разрешается изменять любые оригинальные части (например: NXT, двигатель, датчики, детали и т.д.).
  • В конструкции роботов нельзя использовать винты, клеи, веревки или резинки для закрепления деталей между собой.
  • Функция Bluetooth на микрокомпьютере NXT должна быть отключена, загружать программы следует через кабель USB.
  • Робот, не соответствующий требованиям, не будет допущен к участию в соревнованиях, либо результат робота будет аннулирован.

Изображение:Lego_NXT_Tribot.jpg

5. Условия состязания

  • Каждая  команда сдаёт в судейской бригаде таблицу, содержащую заявленную сложность и перечисленные элементы,  записанные по порядку исполнения, а так же файл с музыкальным сопровождением.
  • На выступление дается максимум 3 минуты.
  • Если робот покинет пределы площадки для выступления, он будет дисквалифицирован.
  • Во время проведения состязания участники команд не должны касаться роботов.

6. Площадка для выступления

  • Цвет полигона – белый.
  • Цвет линии – черный.
  • Ширина линии – 50 мм..
  • Минимальный радиус кривизны линии – 300 мм.

D:\Косицын\Робототехника\Поле для фигурного катания.jpg

  • Пример:

8. Правила проведения соревнования

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

2. Победителем будет объявлена команда, потратившая на преодоление дистанции наименьшее время.

3. Процедура старта: робот устанавливается участником на линии перед стартовой линией. До команды «СТАРТ» робот должен находиться на поверхности полигона и оставаться неподвижным. После команды «СТАРТ» участник должен запустить робота и быстро покинуть стартовую зону. Началом отсчета времени заезда является момент пересечения передней частью робота стартовой линии. Окончанием отсчета времени заезда является момент пересечения передней частью робота финишной линии.

  • 4. Если робот покидает поле, он будет дисквалифицирован.

Конкурса проводится  29 марта  2013 года, в 15.00 в ЗБОУ ЗДТДиМ каб № 306

Заявки команд на участие принимаются до 20 марта по адресу: konkursDVTV@rambler.ru 

В заявке указать учреждение, состав команд, имя руководителя (полностью).

  1. Порядок награждения победителей

Победители награждаются дипломами ГБОУ ЗДТДиМ. Результаты и имена победителей по окончании конкурса будут опубликованы на сайте http://dvtdim.dop.mskobr.ru/

Приложенеи№3

Занятие «Программирование ботов с использованием датчика касания»

СОДЕРЖАНИЕ

  • Общие сведения, цель, задачи
  • План учебного занятия
  • Технология организации и проведения учебного занятия
  • Материальное обеспечение
  • Литература

Пояснение

После освоения азов программирования ботов, можно приступить к изучению работы  различных датчиков.  Усложнение программ управления происходит медленно и постепенно. Добиться от детей осознанного самостоятельного программирования в данных условиях трудно и долго. Для того что бы,  не растерять  интерес детей к занятиям и при этом обучить их составлять индивидуальные программы управления предлагаются готовые  небольшие программы управления с конкретными функциями и возможностью самостоятельно менять параметры констант. Из этих мини-программ управления учащиеся «собирают»  свои индивидуальные программы управления и отрабатывают их на ботах.

Соревновательный аспект занятия способствуют повышению образовательного качества.

Цель занятия:  создание условий  формирования устойчивых умений навыков программирования.

Задачи

Образовательные:

  • закрепить знания по программированию движения бота;
  • повторение правил установки датчиков в программе в соответствии и их монтажом на ботах;
  • запрограммировать движение бота с использованием дополнительных команд управления и датчика касания.
Развивающие:
  • формирование логического, технического мышления;
  • развитие умения довести начатое дело до конечного результата.

Воспитательные:

  • формирование навыка продуктивного сотрудничества в коллективе;
  • воспитание уважения  к чужому мнению и достижениям.

ПЛАН УЧЕБНОГО ЗАНЯТИЯ

Этап учебного занятия

Длительность

1.

Организационный момент

2 мин.

2.

Формулирование цели и задач занятия

3 мин.

3.

 Теоретическая часть. Повторение команды Off(). Изучение дополнительных команд  остановки сервомоторов команды Float() и Coast(), команд поворота  двигателя на заданный угол RotateMotor(‘ports',‘speed',‘degrees')  RotateMotorEx(‘ports',‘speed',‘degrees',‘turnpct',‘sync', 'stop'). Повторение правил установки датчиков в программе в соответствии и их монтажом на ботах.

20 мин.

4.

Практическая часть: составление мини-программ манёвров ботов. Программы поворота на право и на лево,  с блокировкой одного колеса в перёд и назад, программа «танкового» разворота через движение на право и на лево.

20 мин.

5.

Перемена. Подготовка игровой площадки.

15 мин.

6.

Игра «Робокёрлинг».

40 мин.

7.

Подведение итогов. Уборка учебного оборудования.

5 мин.

ИТОГО:

120 мин.

ТЕХНОЛОГИЯ ОРГАНИЗАЦИИ И ПРОВЕДЕНИЯ УЧЕБНОГО ЗАНЯТИЯ

Этап учебного занятия

Деятельность

Педагога

Деятельность учащихся

Организационный момент

Сбор учащихся на занятие. Подготовка к работе .

Готовят свое рабочее место: тетради,  ручки

Формулирование

цели и задач занятия

Объяснение, что цель занятия, заключается в изучении полного списка команд управления сервомоторами – это нужно для полноценного управления движением ботов и манипуляторов.

Слушают педагога задают вопросы

 Теоретическая часть.

  • Повторение команды Off().

Обращаю внимание на особенность данной команды. Она  блокирует вал и отключает электропитание.  

Проблемное обсуждение не  корректной остановки механизма бота.

  • Выход из проблемной ситуации – применение дополнительной команды  остановки сервомоторов Float().

Наводящие вопросы.

  • Изучение дополнительных команд поворота  двигателя на заданный угол RotateMotor (‘ports',‘speed',‘degrees')  RotateMotorEx (‘ports',‘speed',‘degrees',‘turnpct',‘sync', 'stop').  Лекция.
  • Повторение правил установки датчиков в программе в соответствии и их монтажом на ботах.

Проблемное обсуждение несоответствия программы и монтажа.

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

Слушают и записывают.

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

Практическая часть.

  • Составление мини-программ манёвров ботов.
  • Программы поворота на право и на лево,  с блокировкой одного колеса в перёд и назад,
  • Программа «танкового» разворота через движение на право и на лево

Составляют и тестируют индивидуальные программы.

Перемена..

Проветривание.

Подготовка игровой площадки.

Выдача ботов.

Учащиеся выходят из кабинета.

Игра «Робокёрлинг».

  • Учащиеся разбиваются на две команды.
  • Каждая команда собирается для обсуждения тактики игры.
  • Учащиеся программируют ботов в соответствии с задуманным планом.
  • Учащиеся тестируют и отлаживают программы ботов.
  • Готовые боты  выставляются в техническую зону. Операторы ботов берут каждую машину и производят ход.
  • Педагог записывает результат в таблицу на доске в соответствии с набранными ботом очками.
  • Выигрывает команда набравшая самое большое число очков.

Начисление очков:

Проезд бота с линии старта до касания с препятствием и возврат с остановкой в центре дома +20 очков. Остановка в о внутреннем дворе + 10 очков. Остановка одним колесом в доме вторым во дворе +15. Остановка в поле + 5 очков.

Дополнительные очки начисляются: +5 за касание препятствия в области со знаком «+». Штрафуется на – 5 при касании области со знаком «-».

«Танец прицеливания» с линии старта оценивается:

Поворот  на 360 гр. +5.

Поворот на 180гр. + 10

4 последовательных поворота 90 гр, 0 гр, 90 гр, угол прицеливания +20 очков.

«Танец прицеливания» с линии финиша оценивается:

360гр-+угол прицеливания + 10.

180гр +- угол прицеливания + 15

«Победный танец» - Любая форма +20.

Активно участвуют, программируют движения ботов, помогают друг другу.

Подведение итогов. Уборка учебного оборудования.

Выключение компьютеров, выключение ботов, парковка ботов в ячейки.

Активное участие.

Все довольны

 МАТЕРИАЛЬНОЕ И МЕТОДИЧЕСКОЕ ОСНАЩЕНИЕ

ЛИТЕРАТУРА

1. Пособие по программированию в среде NXC..

2. Cобранные триботы LegoMindstorms из конструктора 9797 «Перворобот»

3. Размеченное поле размером 200Х74 см.

4.  Барьер  размеченный на три участка со знаками «+» и «-».

5. Компьютерный класс с установленным программным обеспечением Bricx Command Center для программирования ботов.

Приложение №4

Примерный календарно-тематический план

I четверть

  1. Техника безопасности, правила поведения в кабинете информатики, и здании ДТДиМ;
  2. Вводное занятие по программированию мобильных систем. Постановка задачи для проектной деятельности;
  3. Команды для двигателей. Особенности управления двигателями.
  4. Практическое занятие по программированию сервоматоров. Программы движения по прямым, повороты на месте и в движении.
  5. Операторы циклов. Особенности выполнения условий.
  6. Практическое занятие по программированию циклов.
  7. Оператор ветвления. Особенности выполнения программ с ветвлением.
  8. Практическая работа по программированию алгоритмов с ветвлением.
  9. Получение информации для обработки. Датчики. Изучение датчика касания.
  10. Практическая работа с использованием датчика касания.
  11. Изучение свойств датчика освещенности. Программа движения в замкнутом пространстве.
  12. Практическая работа с использованием датчика освещенности.
  13. Изучение работы ультразвукового датчика. Программа обнаружения объекта.
  14. Оформление программ в виде параллельно выполняемых задач.
  15. Передача данных между параллельно выполняющимися задачами.
  16. Заключительное занятие подведение итогов четверти.

II четверть

  1. Вводное занятие. Постановка задачи для проектной деятельности.
  2. Создание системы обрабатывающей данные от двух датчиков одновременно.
  3. Переключатель. Операторы switch, case,  default , break.
  4. Практическая работа по программированию алгоритмов с переключателями.
  5. Изучение одометра. Программа с использованием одометра. (датчик расстояния).
  6. Практическая работа по программированию алгоритмов с использованием данных одометра.
  7. Способ вывода данных на ЖК экран мобильной системы.
  8. Вывод информации о состоянии датчиков на экран.
  9. Практическая работа по созданию программ с выводом информации на экран NXT.
  10. Способы вывода графической информации на экран NXT.
  11. Практическая работа по рисованию графических примитивов на экране NXT.
  12. Способы управления выводом звука. Создание мелодии.
  13. Практическая работа. Программирование звуковой сигнализации.
  14. Проектирование системы для участия в соревновании «Кегельринг».
  15. Программирование и тестирование мобильной системы.
  16. Заключительное занятие подведение итогов четверти.

III четверть

  1. Вводное занятие. Постановка задачи для проектной деятельности.
  2. Способы уменьшения программного кода. Создание подпрограмм.
  3. Практическое занятие по созданию подпрограмм.
  4. Команды для точного управления сервомоторами.
  5. Практическое занятие по использованию программ точного управления сервомоторами.
  6. Способы сохранения и накопления данных в процессе работы системы.
  7. Работа с внутренними переменными выполняемой программы.
  8. Работа с общими переменными.



Предварительный просмотр:

Государственное бюджетное образовательное учреждение города Москвы Зеленоградский дворец творчество детей и молодёжи

ОТКРЫТОЕ ЗАНЯТИЕ

«Программирование ботов с использованием

датчика касания»

 В рамках общеобразовательной дополнительной программы «Робототехника»

Педагог дополнительного образования:

Косицын Сегрей Юрьевич.

Группа первого года обучения

 (для детей 10-14 лет)

Место и время проведения:

24 января  2014 г. каб. 306, в 18.00

Москва


СОДЕРЖАНИЕ

  • Общие сведения, цель, задачи
  • План учебного занятия
  • Технология организации и проведения учебного занятия
  • Материальное обеспечение
  • Литература

Пояснение

После освоения азов программирования ботов, можно приступить к изучению работы  различных датчиков.  Усложнение программ управления происходит медленно и постепенно. Добиться от детей осознанного самостоятельного программирования в данных условиях трудно и долго. Для того что бы,  не растерять  интерес детей к занятиям и при этом обучить их составлять индивидуальные программы управления предлагаются готовые  небольшие программы управления с конкретными функциями и возможностью самостоятельно менять параметры констант. Из этих мини-программ управления учащиеся «собирают»  свои индивидуальные программы управления и отрабатывают их на ботах.

Соревновательный аспект занятия способствуют повышению образовательного качества.

Цель занятия:  создание условий  формирования устойчивых умений навыков программирования.

Задачи

Образовательные:

  • закрепить знания по программированию движения бота;
  • повторение правил установки датчиков в программе в соответствии и их монтажом на ботах;
  • запрограммировать движение бота с использованием дополнительных команд управления и датчика касания.
Развивающие:
  • формирование логического, технического мышления;
  • развитие умения довести начатое дело до конечного результата.

Воспитательные:

  • формирование навыка продуктивного сотрудничества в коллективе;
  • воспитание уважения  к чужому мнению и достижениям.

ПЛАН УЧЕБНОГО ЗАНЯТИЯ

Этап учебного занятия

Длительность

1.

Организационный момент

2 мин.

2.

Формулирование цели и задач занятия

3 мин.

3.

 Теоретическая часть. Повторение команды Off(). Изучение дополнительных команд  остановки сервомоторов команды Float() и Coast(), команд поворота  двигателя на заданный угол RotateMotor(‘ports',‘speed',‘degrees')  RotateMotorEx(‘ports',‘speed',‘degrees',‘turnpct',‘sync', 'stop'). Повторение правил установки датчиков в программе в соответствии и их монтажом на ботах.

20 мин.

4.

Практическая часть: составление мини-программ манёвров ботов. Программы поворота на право и на лево,  с блокировкой одного колеса в перёд и назад, программа «танкового» разворота через движение на право и на лево.

20 мин.

5.

Перемена. Подготовка игровой площадки.

15 мин.

6.

Игра «Робокёрлинг».

40 мин.

7.

Подведение итогов. Уборка учебного оборудования.

5 мин.

ИТОГО:

120 мин.

ТЕХНОЛОГИЯ ОРГАНИЗАЦИИ И ПРОВЕДЕНИЯ УЧЕБНОГО ЗАНЯТИЯ

Этап учебного занятия

Деятельность

Педагога

Деятельность учащихся

Организационный момент

Сбор учащихся на занятие. Подготовка к работе .

Готовят свое рабочее место: тетради,  ручки

Формулирование

цели и задач занятия

Объяснение, что цель занятия, заключается в изучении полного списка команд управления сервомоторами – это нужно для полноценного управления движением ботов и манипуляторов.

Слушают педагога задают вопросы

 Теоретическая часть.

  • Повторение команды Off().

Обращаю внимание на особенность данной команды. Она  блокирует вал и отключает электропитание.  

Проблемное обсуждение не  корректной остановки механизма бота.

  • Выход из проблемной ситуации – применение дополнительной команды  остановки сервомоторов Float().

Наводящие вопросы.

  • Изучение дополнительных команд поворота  двигателя на заданный угол RotateMotor (‘ports',‘speed',‘degrees')  RotateMotorEx (‘ports',‘speed',‘degrees',‘turnpct',‘sync', 'stop').  Лекция.
  • Повторение правил установки датчиков в программе в соответствии и их монтажом на ботах.

Проблемное обсуждение несоответствия программы и монтажа.

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

Слушают и записывают.

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

Практическая часть.

  • Составление мини-программ манёвров ботов.
  • Программы поворота на право и на лево,  с блокировкой одного колеса в перёд и назад,
  • Программа «танкового» разворота через движение на право и на лево

Составляют и тестируют индивидуальные программы.

Перемена..

Проветривание.

Подготовка игровой площадки.

Выдача ботов.

Учащиеся выходят из кабинета.

Игра «Робокёрлинг».

  • Учащиеся разбиваются на две команды.
  • Каждая команда собирается для обсуждения тактики игры.
  • Учащиеся программируют ботов в соответствии с задуманным планом.
  • Учащиеся тестируют и отлаживают программы ботов.
  • Готовые боты  выставляются в техническую зону. Операторы ботов берут каждую машину и производят ход.
  • Педагог записывает результат в таблицу на доске в соответствии с набранными ботом очками.
  • Выигрывает команда набравшая самое большое число очков.

Начисление очков:

Проезд бота с линии старта до касания с препятствием и возврат с остановкой в центре дома +20 очков. Остановка в о внутреннем дворе + 10 очков. Остановка одним колесом в доме вторым во дворе +15. Остановка в поле + 5 очков.

Дополнительные очки начисляются: +5 за касание препятствия в области со знаком «+». Штрафуется на – 5 при касании области со знаком «-».

«Танец прицеливания» с линии старта оценивается:

Поворот  на 360 гр. +5.

Поворот на 180гр. + 10

4 последовательных поворота 90 гр, 0 гр, 90 гр, угол прицеливания +20 очков.

«Танец прицеливания» с линии финиша оценивается:

360гр-+угол прицеливания + 10.

180гр +- угол прицеливания + 15

«Победный танец» - Любая форма +20.

Активно участвуют, программируют движения ботов, помогают друг другу.

Подведение итогов. Уборка учебного оборудования.

Выключение компьютеров, выключение ботов, парковка ботов в ячейки.

Активное участие.

Все довольны

 МАТЕРИАЛЬНОЕ И МЕТОДИЧЕСКОЕ ОСНАЩЕНИЕ

ЛИТЕРАТУРА

1. Пособие по программированию в среде NXC..

2. Cобранные триботы LegoMindstorms из конструктора 9797 «Перворобот»

3. Размеченное поле размером 200Х74 см.

4.  Барьер размеченый на три участка со знаками «+» и «-».

5. Компьютерный класс с установленным программным обеспечением Bricx Command Center для программирования ботов.



Предварительный просмотр:

Положение

по проведению конкурса-викторины по робототехнике

«Новогодняя механика»

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

  1. Участники конкурса

К участию в конкурсе приглашаются команды учащихся 4-11 классов. Команда состоит из двух человек. Количество команд от учреждения не ограниченно.

Результаты подводятся по двум возрастным группам:

  • учащиеся 4-7 классов,
  • учащиеся 8-11 классов.

  1. Порядок проведения конкурса-викторины

1 этап: Викторина знатоков «Элементы легоконструкций и механизмов»

Команды проходят жеребьевку на очерёдность ответа. За правильный точный ответ дается 10 баллов. При не точном или не правильном ответе, право отвечать получает следующая по очереди команда.

2 этап: Конкурс новогодних конструкций

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

Команды представляют свою конструкцию в действии, комментируют ее работу.

Каждая представленная конструкция должна сопровождаться техническим описанием, которое включает в себя:

  1. титульный лист (учреждение, название конструкции, авторы, руководитель),
  2. описание назначения конструкции,
  3. руководство по использованию конструкции
  4. карта сборки и фото конструкции.

Конкурс проводится  21 декабря  2013 года, в 15.00 в ЗБОУ ЗДТДиМ каб № 306

Заявки команд на участие принимаются до 20 декабря по адресу: konkursDVTV@rambler.ru 

В заявке указать учреждение, состав команд, имя руководителя (полностью).

  1. Порядок награждения победителей

Победители награждаются дипломами ГБОУ ЗДТДиМ. Результаты и имена победителей по окончании конкурса будут опубликованы на сайте http://dvtdim.dop.mskobr.ru/



Предварительный просмотр:

Положение

по проведению соревнований по робототехнике. Программирование движения автономной системы

«Фигурное катание»

Цель:

Демонстрация результатов программирования движения роботов выполненных на базе конструкторов ЛЕГО Mindstorm.

Задачи: 

  • Совершенствование практических навыков программирования;
  • Повышение профессионального уровня участников и стимулирование создания ими творческих работ.
  • Выявление и поддержка детей, одаренных в области информационных и компьютерных технологий.
  • Формирование творческого потенциала и познавательного интереса к занятиям в объединениях робототехники;
  • Демонстрация участниками навыков работы и программирования ЛЕГО Mindstorm;
  • Развитие абстрактного мышления и способностей к поиску не стандартных решений;

Соревнования проводятся  29 марта  2014 года, в 12.00 в ЗБОУ ЗДТДиМ мягкое фойе.

Заявки команд на участие принимаются до 20 марта по адресу: konkursDVTV@rambler.ru (см. Приложение 1)

Организатор соревнований:

  • Косицын С.Ю. - педагог дополнительного образования отдела технического творчества объединение «Конструктив» ГБОУ  Зеленоградский дворец творчества детей и молодёжи.

Участники соревнований:

  • обучающиеся образовательных учреждений в возрасте от 7 до 17 лет;
  • команды, использующие для изучения робототехники конструкторы ЛЕГО Mindstorm; (Команда – коллектив учащихся во главе с тренером, осуществляющие занятия по робототехнике (подготовку к состязаниям) в рамках образовательного учреждения. Количество членов команды – не ограничено.).

Порядок проведения соревнований

Подготовка к соревнованиям:

  • соревнования состоят из времени отладки и основного выступления;
  • команды должны поместить готового робота в инспекционную область. После подтверждения судьи, что роботы соответствуют всем требованиям, соревнования могут быть начаты;
  • операторы могут настраивать робота только во время отладки;
  • если при осмотре будет найдено нарушение в конструкции робота, то судья даст 3 минуты на устранение нарушения. Однако, если нарушение не будет устранено в течение этого времени, команда не сможет участвовать в состязании;
  • каждая  команда сдаёт в судейской бригаде таблицу, содержащую заявленную сложность и перечисленные элементы (см. Приложение 2),  записанные по порядку исполнения (см. Приложение 3), а так же файл с музыкальным сопровождением;
  •  на выступление дается максимум 3 минуты.

Правила проведения соревнований: 

  • в соревновании робот участника стартует из стартовой позиции, центрального квадрата. На прохождение дистанции каждой команде дается не более трех минут;
  • процедура старта: робот устанавливается участником в центральный квадрат полигона. До команды «СТАРТ» робот должен находиться на поверхности полигона и оставаться неподвижным. После команды «СТАРТ» участник должен запустить робота и быстро покинуть стартовую зону;
  • робот выполняет заявленную программу; 
  • если робот покидает поле, он будет дисквалифицирован;
  • судейская команда выставляет итоговый балл за выступление;
  • победителем будет объявлена команда, набравшая наибольшее количество баллов.

Требования к команде:

  • в соревнованиях участвуют команды образовательных учреждений с роботами из наборов Mindstorm, робот может быть собран только из деталей указанных наборов;
  • в соревнованиях участвует неограниченное количество роботов от команды;
  • операторы одного робота не могут быть операторами другого робота;
  • в день соревнований на каждого робота команда должна подготовить: все необходимые материалы, такие как: диск с программами, запасные батарейки или аккумуляторы, портативный компьютер;
  • в зоне состязаний разрешается находиться только участникам команд (тренерам запрещено), членам оргкомитета и судьям;
  • после старта попытки запрещается вмешиваться в работу робота. Если после старта оператор коснется робота, покинувшего место старта без разрешения судьи, робот может быть дисквалифицирован;
  • участникам команды запрещается покидать зону соревнований без разрешения члена оргкомитета;
  • во время проведения состязания участники команд не должны касаться роботов;
  • при нарушении командой одного из пунктов правил, команда получит предупреждение. При получении командой 3-х предупреждений команда будет дисквалифицирована.

Требования к роботу:

  • Конструкция робота должна быть стандартным триботом или одной из его модификаций.
  • максимальная ширина робота 250 мм, длина 250 мм, высота 250 мм;
  • робот должен быть автономным, т.е. не допускается дистанционное управление роботом;
  • роботы должны быть построены с использованием только деталей конструкторов ЛЕГО Mindstorm;
  • в конструкции робота можно использовать только один микрокомпьютер;
  • в конструкции робота разрешено использовать только двигатели и датчики конструкторов ЛЕГО Mindstorm;
  • командам не разрешается изменять любые оригинальные части (например: NXT, двигатель, датчики, детали и т.д.);
  • в конструкции роботов нельзя использовать винты, клеи, веревки или резинки для закрепления деталей между собой;
  • функция Bluetooth на микрокомпьютере NXT должна быть отключена, загружать программы следует через кабель USB;
  • робот, не соответствующий требованиям, не будет допущен к участию в соревнованиях, либо результат робота будет аннулирован;
  • после окончания времени отладки нельзя модифицировать или менять роботов (например: загрузить программу, поменять батарейки). Также команды не могут просить дополнительного времени.
  • Пример конструкции трибота:

 Описание: Трибот копия.jpg

Площадка для выступления:

  • цвет полигона – белый;
  • цвет линии – черный.
  • ширина линии – 50 мм;
  • минимальный радиус кривизны линии – 300 мм.

Описание: D:\Косицын\Робототехника\Поле для фигурного катания.jpg

Правила судейства:

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

Порядок награждения победителей

Победители награждаются дипломами  1-3 степени и свидетельствами участия. Подведение итогов и награждение состоится в день проведения соревнований Результаты и имена победителей по окончании конкурса будут опубликованы на сайте http://konstructive.ucoz.ru/

Телефон для справок: 8(903) 125-20-34

Ответственный: Косицын Сергей Юрьевич


Приложение 1.

Заявка на участие в соревновании по робототехнике.

Программирование движения автономной системы «Фигурное катание».

Образовательное учреждение:___________________________________________________

_____________________________________________________________________________

№ 1

 

Ф.И.О.

 

Дата рождения

 

Название комплекса

 

Среда программирования

 

Музыкальное сопровождение

 

Дополнительные сведения

 

  Контактная информация руководителя (педагога):

Ф.И.О.

 

Электронная почта

 

Телефон для связи

 

 


Приложение 2.

Перечень обязательных элементов и критерии оценки.

Название

Схема

Описание

Критерии оценки

1

«Спираль»

Движение по кругу с постепенно уменьшающимся радиусом поворота. Заканчивается движение в точке с обязательной остановкой.

За каждый виток даётся по 1 баллу.

2

«Прямоугольник»

Движение по прямоугольнику со стороной не менее 0.5 метра.

1 балл за остановку в точке начала движения.

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

3

«Окружность»

Движение по окружности радиусом не менее 0.5 метра.

1 балл за остановку в точке начала движения.

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

4

«Треугольник»

Движение по треугольнику со стороной не менее 0.5 метра.

2 балла за остановку в точке начала движения.

5

«Танковый разворот»

Разворот на одном месте с использованием обоих моторов.

Зависит от кратности угла поворота на 90 град. Максимум 360 град. (4 балла)

6

«Разворот во круг неподвижного колеса»

Разворот на месте с использованием одного мотора

Зависит от кратности угла поворота на 90 град. Максимум 360 град. (4 балла)

7

«Дискретное движение»

4 последовательных дискретных передвижения с ярко выраженными паузами.

1 балл.

8

«Манёвры»

4 последовательных поворота на месте на 90 град влево, вправо, вправо, влево с остановкой после каждого движения.

4 балла

9

«Лунная походка (змейка)»

Движение с попеременным усилением мощности на левом и правом двигателях.

1 балл.

Условные обозначения:

- Начальное положение

- Конечное положение

- Направление движения или поворота

- Промежуточная остановка


Приложение №3

Карта прохождения комплекса

 

Ф.И.О.

 

Название комплекса

 

Музыкальное сопровождение

 

Название элемента

Заявлено

Фактически

1

 

 

 

2

 

 

 

3

 

 

 

4

 

 

 

5

 

 

 

6

 

 

 

7

 

 

 

8

 

 

 

9

 

 

 

10

 

 

 

11

 

 

 

12

 

 

 

13

 

 

 

14

 

 

 

15

 

 

 

16

 

 

 

17

 

 

 

18

 

 

 

19

 

 

 

20

 

 

 

 

Итого:

План проведения открытых соревнований по робототехнике

«Фигурное катание»

29 марта 2014года 12.00-15.00

ГБОУ ЗДТДиМ, театральная часть, зимний сад.

 

12.00-12.30

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

 

12.30-12.40

Торжественное открытие соревнований

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

 

12.45-14.00

Проведение соревнований

 

14.00-14.30

Подведение итогов соревнований. 
Анонс следующих соревнований по робототехнике.

Показательные  выступления  роботов.

 

14.30-15.00

Награждение победителей. Торжественное закрытие соревнований.



Предварительный просмотр:


Оглавление

Первая программа        

Постройка робота        

Запуск Bricx Command Center        

Написание программы        

Запуск программы        

Ошибки в программе        

Изменяем скорость        

Подводим итоги        

Более интересная программа        

Учимся делать повороты        

Повторяем команды        

Добавляем комментарии        

Подводим итоги        

Использование переменных        

Движение по спирали        

Случайные числа        

Подводим итоги        

Управляющие структуры        

Оператор "if"        

Оператор "do"        

Подводим итоги        

Сенсоры        

Ждём информацию с сенсора        

Действия при срабатывании сенсора касания        

Сенсор освещенности        

Звуковой сенсор        

Ультразвуковой дальномер        

Подводим итоги        

Задачи и функции        

Задачи        

Функции        

Определяем макрос        

Подводим итоги        

Создаём музыку        

Проигрываем звуковые файлы        

Играем музыку        

Подводим итоги        

Еще раз о моторах        

Плавная остановка        

Дополнительные команды        

ПИД-управление        

Подводим итоги        

Дополнительная информация о сенсорах        

Режимы и типы сенсоров        

Сенсор вращения        

Подключение нескольких сенсоров к одному входу        

Подводим итоги        

Параллельные задачи        

Неправильная программа        

Критические секции и "мьютекс"-переменные        

Использование семафоров        

Подводим итоги        

Коммуникации между роботами        

Отправка сообщений мастер-подчиненный        

Отправка чисел с подтверждением        

Прямые команды        

Подводим итоги        

Дополнительные возможности        

Таймеры        

Дисплей        

Файловая система        

Подводим итоги        

Как определить цвет, когда датчик "врет"?        

NXC: кнопочная интерактивность        

NXC: работаем с датчиками вращения мотора        

NXC: работаем с цветовым сенсором.        

NXC: датчики, енкодеры, кнопки - взаимодействуем с внешним миром        

Пример 1. Датчик расстояния        

Пример 2. Измерение отраженного света.        

Пример 3. Измерение окружающего света        

Пример 4. Использование необработанных данных        

Пример 5. Датчик вращения двигателя (енкодер)        

Пример 6. Скорость опроса датчика расстояния        

Пример 7. Определение цвета        

Пример 8. Опрос датчика цвета в режиме датчика освещенности        

NXC: использование циклов        

Пример 2. while() в одну строчку        

Пример 3. until()        

Пример 4. Скорость исполнения цикла.        

NXC: повороты - практика программирования моторов        

Пример 1. Поворот одним двигателем        

Пример 2. Поворот двумя двигателями        

Пример 3. Распределение мощности при управлении двумя двигателями        

Пример 4. Альтернативный поворот двумя двигателями        

Сортировка данных на NXT        

Пузырьковая сортировка        

Сортировка вставками        

Сортировка Шелла        

Первая программа

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

Постройка робота

Робот, которого мы будем использовать в этом курсе - Tribot - первый колёсный робот, которого инструкция к NXT советует собрать после покупки набора. Единственное отличие будет заключаться в том, что вы должны подключить правый мотор в порт A, левый мотор в порт C, а мотор захвата в порт B.

Изображение:Lego_NXT_Tribot.jpg

Убедитесь, что вы правильно установили драйверы Mindstorms NXT Fantom Drivers, поставляемые с набором.

Запуск Bricx Command Center

Мы будем писать программы используя Bricx Command Center. Запустите его двойным щелчком по иконке BricxCC (я предполагаю, что вы уже установили BricxCC. Если нет, загрузите его с сайта (см. введение) и установите его в любой удобный вам каталог). Программа попросит предоставить ей возможность подключиться к роботу. Включите робота и нажмите "ОК". Программа (скорее всего) автоматически найдёт робота. Ниже приведено избражение интерфейса пользователя, появляющееся после успешного завершения синхронизации (закладки с текстовым окном быть не должно).

Изображение:BricxCCScreenShot1.jpg

Интерфейс выглядит как стандартный текстовый редактор с обычным меню, кнопками для открытия и сохранения файлов, печати, редактирования и т.п. Однако среди них есть несколько специальных меню для компилирования программ и загрузки их в робота, а также для получения отладочной информации; пока вы можете не обращать на них внимание. Сейчас мы хотим написать новую программу, так что нажимайте кнопку "New File" для создания нового окна с текстовым редактором.

Написание программы

Теперь введите текст программы:

task main()

{

OnFwd(OUT_A, 75);

OnFwd(OUT_C, 75);

Wait(4000);

OnRev(OUT_AC, 75);

Wait(4000);

Off(OUT_AC);

}

На первый взгляд выглядит немного сложно, так что давайте разберемся в ней.

Программы NXC состоят из задач ("task"). Наша программа содержит всего одну задачу с именем "main". Любая программа на языке NXC должна содержать задачу с именем "main", которая и будет исполняться роботом (о задачах мы поговорим подробнее в главе 6). Задача состоит из набора команд - операторов. Операторы заключены в фигурные скобки для того, чтобы была ясна их принадлежность к конкретной задаче. Каждый оператор заканчивается точкой с запятой. Это позволяет понять, где кончается один оператор и начинается следующий. В целом задача обычно выглядит следующим образом:

task main()

{

statement1;

statement2;

}

Наша программа содержит 6 операторов. Давайте разберем их по очереди:

OnFwd(OUT_A, 75);

Этот оператор говорит роботу включить выход "A" модуля NXT. Это означает, что мотор, подключенный нами ранее, будет двигать модель вперед. Число, следующее за указанием порта, устанавливает скорость мотора в 75% от максимальной.

OnFwd(OUT_C, 75);

Тот же оператор, но теперь включаем мотор "C". После выполнения этих операторов оба мотора вращаются, и робот едет вперёд.

Wait(4000);

Теперь время немного подождать. Этот оператор говорит нам подождать 4 секунды. Аргумент, которым является число в скобках, указывается в 1/1000 секунды, так что мы можем с большой точностью указать программе необходимую задержку. Следующие 4 секунды программа будет ждать, а робот с включенными двигателями ехать вперед.

OnRev(OUT_AC, 75);

Робот проехал вперед достаточно далеко, так что мы скажем ему ехать в обратном направлении, т.е. назад. Обратите внимание, что мы можем установить режим работы обоих моторов сразу используя аргумент OUT_AC; таким же образом можно заменить первые два оператора задачи.

Wait(4000);

Снова ждём 4 секунды.

Off(OUT_AC);

И наконец, выключаем оба мотора.

Вот и вся программа. Она включает на 4 секунды оба мотора на движение вперед, затем назад и в конце выключает их.

Вы, наверное, заметили при написании программы автоматическое выделение фрагментов кода разными цветами. Эти цвета и стили используемые текстовым редактором можно настроить, если они вам кажутся неудобными.

Запуск программы

После написания программы нам потребуется её скомпилировать (превратить её в двоичные коды, которые робот может разобрать и выполнить) и переслать полученные двоичные коды в робота, используя USB-кабель или Bluetooth-донгл (сокращенно: загрузить программу в робота).

Изображение:BricxCCScreenShot2.jpg

На этой панели расположены кнопки, которые позволяют (слева направо) компилировать программу, загружать её в робота, запускать выполнение программы на роботе и останавливать его.

Нажмите вторую кнопку, и, если вы не сделали ошибок при написании программы, она корректно скомпилируется и загрузится в робота (если вы допустили ошибки, об этом будет выдано сообщение, см. более подробно ниже).

Теперь мы можем запустить нашу программу на выполнение. Чтобы сделать это зайдите в меню "My Files" на модуле, "Software files", и запустите ("run") программу с названием "1_simple". Помните: файлы программ в файловой системе NXT имеют такие же имена, как и исходные NXC-файлы.

Кроме того, ваша программа может запускаться автоматически после загрузки. Используйте комбинацию клавиш CTRL+F5 или после загрузки программы на робота нажмите зелёную кнопку запуска программы.

Делает ли робот то, что мы запрограммировали? Если нет, проверьте соединения проводов.

Ошибки в программе

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

Изображение:BricxCCScreenShot3.jpg

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

Могут быть ошибки, которые не обнаруживаются компилятором. Если мы указали OUT_B в управлении мотором, то будет вращаться не тот двигатель, который нам нужен. Если ваш робот ведёт себя не так, как вы запланировали, скорее всего вы что-то неправильно написали в управляющей им программе.

Изменяем скорость

Как вы заметили, робот перемещается достаточно быстро. Чтобы изменить его скорость, вам потребуется изменить второй параметр внутри круглых скобок. Скорость вращения моторов задаётся числом между 0 и 100: 100 - это самая большая скорость, 0 - полная остановка (сервопривод NXT будет удерживать положение). Вот новая версия нашей программы, под управлением которой робот будет перемещаться медленно:

task main()

{

OnFwd(OUT_AC, 30);

Wait(4000);

OnRev(OUT_AC, 30);

Wait(4000);

Off(OUT_AC);

}

Подводим итоги

В этой главе вы написали свою первую программу на языке NXC, используя среду разработки BricxCC. Теперь вы умеете набирать программу, загружать её в робота и запускать её выполнение. BricxCC может делать многие другие вещи, чтобы получить о них больше информации, прочитайте документацию поставляемую с этим пакетом. Этот обучающий курс в первую очередь направлен на освоение языка NXC и затрагивает только те функции BricxCC, без которых мы не можем обойтись.

Также вы освоили некоторые важные аспекты языка NXC. Прежде всего вы узнали, что каждая программа имеет задачу с именем "main", которая будет выполняться роботом. Также вы изучили 3 простые команды для управления двигателями: OnFwd(), OnRev() и Off(). И наконец, вы узнали об операторе Wait().

Более интересная программа

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

Учимся делать повороты

Вы можете заставить робота поворачиваться путём остановки или включении в обратном направлении одного из двух моторов. Вот пример того, как это можно сделать. Введите его, загрузите полученную программу в робота и запустите. Робот должен проехать немного вперед, после чего повернуться на 90 градусов вправо.

task main()

{

OnFwd(OUT_AC, 75);

Wait(500);

OnRev(OUT_C, 75);

Wait(360);

Off(OUT_AC);

}

Вам может потребоваться попробовать немного другие числа, вместо 360 указанного во втором операторе Wait(), чтобы сделать 90 градусный поворот. Это зависит от типа поверхности по которой перемещается робот. Чтобы не отыскивать в больших программах такие числа, которые могут потребовать настройки существует возможность дать этому числу имя и определить его в начале программы. В языке NXC вы можете определять постоянные значения (константы) так, как показано в следующей программе:

#define MOVE_TIME 500

#define TURN_TIME 360

task main()

{

OnFwd(OUT_AC, 75);

Wait(MOVE_TIME);

OnRev(OUT_C, 75);

Wait(TURN_TIME);

Off(OUT_AC);

}

Первые две строки определяют две константы. Теперь их можно использовать везде в программе вместо этих чисел. Использование констант хорошо по двум причинам: оно делает программы более читаемыми и более удобно менять значения констант, чем искать во всей программе где еще у вас время поворота было прописано как 360 тысячных секунды. Обратите внимание, что BricxCC обозначает операторы define отдельным цветом. Как мы увидим в главе 6, вы можете подобным образом определять не только константы.

Повторяем команды

Теперь давайте попробуем написать программу, которая заставить робота проехать по квадрату. Проехать по квадрату означает: проехать вперед, повернуться на 90 градусов, снова проехать вперед, снова повернуть на 90 градусов и так далее. Мы можем просто написать 4 раза кусок указанного выше кода, но значительно проще это можно сделать с использованием оператора цикла (repeat).

#define MOVE_TIME 500

#define TURN_TIME 360

task main()

{

  repeat(4)

  {

    OnFwd(OUT_AC, 75);

    Wait(MOVE_TIME);

    OnRev(OUT_C, 75);

    Wait(TURN_TIME);

  }

  Off(OUT_AC);

}

Число внутри скобок оператора цикла указывает сколько раз повторить операторы в следующих за оператором фигурных скобках. Обратите внимание, что в приведенной выше программе мы сместили операторы внутри цикла вправо. Это не является обязательным, но делает программу более легко читаемой.

В качестве окончательного примера давайте заставим робота 10 раз проехать по квадрату:

#define MOVE_TIME 500

#define TURN_TIME 360

task main()

{

  repeat(10)

  {

    repeat(4)

    {

      OnFwd(OUT_AC, 75);

      Wait(MOVE_TIME);

      OnRev(OUT_C, 75);

      Wait(TURN_TIME);

    }

  }

  Off(OUT_AC);

}

Теперь у нас один оператор цикла внутри другого. Это называется “вложенный” оператор цикла. Вы можете делать операторы цикла любого уровня вложенности. Внимательно посмотрите на фигурные скобки и отступы, использованные в программе. Задача начинается с первой фигурной скобки и заканчивается последней. Первый оператор цикла начинается содержит операторы внутри второй и пятой фигурных скобок. Вложенный в него оператор цикла содержит операторы между третьей и четвертой фигурной скобкой. Как вы видите фигурные скобки всегда идут парами и кусок программы между ними выделяется отступом слева.

Добавляем комментарии

Чтобы сделать вашу программу еще более читаемой, неплохо бы добавить в неё комментарии. Когда мы пишем в строке // всё что после этих символов компилятор будет считать комментарием и проигнорирует. Длинный комментарий на несколько строк можно размещать между символами /* и */. BricxCC выделяет комментарии отдельным цветом в текстовом редакторе. Полный код программы с комментариями выглядит так:

/* 10 SQUARES

This program make the robot run 10 squares

*/

#define MOVE_TIME 500 // Time for a straight move

#define TURN_TIME 360 // Time for turning 90 degrees

task main()

{

  repeat(10) // Make 10 squares

  {

    repeat(4)

    {

      OnFwd(OUT_AC, 75);

      Wait(MOVE_TIME);

      OnRev(OUT_C, 75);

      Wait(TURN_TIME);

    }

  }

  Off(OUT_AC); // Now turn the motors off

}

Подводим итоги

В этой главе вы освоили использование операторов цикла и использование комментариев. Так же вы увидели зачем используются вложенные фигурные скобки и отступы. С имеющимися на этом этапе знаниями вы уже можете писать программы под управлением которых робот будет двигаться по практически каким угодно траекториям. Рекомендуется перед переходом к следующей главе попробовать самостоятельно запрограммировать робота для движения по разным интересным траекториям. Для этого можете попробовать варьировать программы из этой или предыдущей главы.

Использование переменных

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

Движение по спирали

Предположим, что мы хотим адаптировать приведенную выше программу таким образом, чтобы робот двигался по спирали. Это можно сделать путём увеличения времени которое робот движется прямо после каждого такого движения. То есть мы хотим после каждого такого движения увеличивать значение константы MOVE_TIME. Но как же мы сделаем это? Ведь MOVE_TIME это константа и поэтому не может быть изменена при выполнении программы. Поэтому нам потребуется заменить в нашей программе константу MOVE_TIME на переменную move_time. Как видно из программы, представленной ниже и реализующей движение по спирали, в языке NXC работа с переменными организована очень просто.

#define TURN_TIME 360

int move_time; // define a variable

task main()

{

  move_time = 200; // set the initial value

  repeat(50)

  {

    OnFwd(OUT_AC, 75);

    Wait(move_time); // use the variable for sleeping

    OnRev(OUT_C, 75);

    Wait(TURN_TIME);

    move_time += 200; // increase the variable

  }

  Off(OUT_AC);

}

Наиболее важные строки программы снабжены комментариями. Сначала мы объявляем переменную указывая ключевое слово "int" и следом имя переменной, которое мы выбрали. (Обычно принято использовать нижний регистр для имён переменных и верхний регистр для констант, но это не принципиально для компилятора.) Имя переменной должно начинаться с буквы, но может содержать в себе цифры и символ подчеркивания. Другие символы в именах переменных запрещены. (То же самое касается названий констант, задач и т.д.) Ключевое слово "int" означает "integer", то есть целое число. Только целые числа могут храниться в такой переменной.

Во второй строке мы присваиваем значение 200 нашей только что объявленной переменной. С этого момента при использовании переменной её значение будет 200. Теперь последуем внутрь цикла, в котором мы используем переменную для определения того, сколько времени двигаться вперед, и в конце цикла увеличим значение переменной на 200. Таким образом первый раз робот будет ехать прямо 200/1000=0.2 секунды, второй раз 0.4 секунды, третий раз 0.6 секунды и так далее.

Кроме добавления числа к переменной мы можем умножать её на число используя *=, вычитать из неё число используя -= и делить на число используя /=. (Обратите внимание, что для деления результат будет округлён до ближайшего целого.) Вы можете также добавлять одни переменные к другим и вообще записывать более сложные выражения. Следующий пример программы не будет никаким образом проявлять себя через исполнительные устройства робота, так как мы до сих пор не научились использовать дисплей NXT!

int aaa;

int bbb,ccc;

int values[];

task main()

{

  aaa = 10;

  bbb = 20 * 5;

  ccc = bbb;

  ccc /= aaa;

  ccc -= 5;

  aaa = 10 * (ccc + 3); // aaa is now equal to 80

  ArrayInit(values, 0, 10); // allocate 10 elements = 0

  values[0] = aaa;

  values[1] = bbb;

  values[2] = aaa*bbb;

  values[3] = ccc;

}

Заметим, что во второй строке мы объявили сразу несколько переменных за один раз. Мы можем таким образом объявить все переменные из первой и второй строки в одну строку. Переменная названная "values" является массивом, то есть, эта переменная может содержать больше чем просто число: элементы массива, к которым можно обращаться указывая число в квадратных скобках за переменной-массивом. В языке NXC массивы целых чисел объявляются так:

int name[];

Еще один интересный для нас оператор в приведённой программе - инициализация массива, который определяет, что в массиве values будет 10 элементов и инициализирует их все значением 0:

ArrayInit(values, 0, 10);

Случайные числа

Во всех приведенных ранее программах мы строго определяли что должен делать. Но может быть интересно создать ситуацию, в которой мы не будем знать что именно будет делать робот. Пусть мы хотим внести некую непредсказуемость в его движения. Для таких ситуаций в языке NXC существует возможность получения случайных чисел. Следующая программа показывает как сделать, чтобы робот перемещался случайным образом. Она без конца движется вперед случайное количество времени и потом поворачивается на случайный угол.

int move_time, turn_time;

task main()

{

  while(true)

  {

    move_time = Random(600);

    turn_time = Random(400);

    OnFwd(OUT_AC, 75);

    Wait(move_time);

    OnRev(OUT_A, 75);

    Wait(turn_time);

  }

}

Программа объявляет две переменные, а затем присваивает им случайные значения. Random(600) означает случайное число между 0 и 600 (при этом верхняя граница диапазона не включена во множество возможных ответов, т.е. вернётся число из диапазона 0..599). При каждом вызове функции Random получаемые числа будут отличаться. Обратите внимание, что мы могли избежать использования переменных и напрямую использовать полученное случайное число, написав оператор Wait(Random(600)).

Вы так же можете увидеть в этой программе новый тип цикла. Вместо использования цикла repeat мы использовали цикл while(true). Оператор цикла while повторяет включенные в него операторы до тех пор, пока условие заключенное в круглые скобки остаётся истинным. Специальное ключевое слово "true" всегда истинно, так что операторы этого цикла будут повторяться бесконечно (ну или по крайней мере до того момента, когда вы нажмёте тёмно-серую кнопку на вашем NXT). Больше информации об операторе while вы узнаете в главе 4.

Подводим итоги

В этой главе вы научились использованию переменных и массивов. Вы можете объявлять переменные других типов данных, отличных от "int": это могут быть "short", "long", "byte", "bool" и "string".

Типы данных

Int – целочисленный тип данных диапазон значений: 0 … 65 535

Short, int - целочисленный тип данных диапазон значений: –32 768 … 32 767

Char – целочисленный тип данных, диапазон значений: –128 … 127

Byte – целочисленный тип данных, диапазон значений: 0 … 255

Float – вещественный тип данных, диапазон значений: 3.4*10–38… 3.4*1038

Bool – логический тип данных, принимает значения true и false

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

Управляющие структуры

В предыдущих главах мы видели операторы "repeat" и "while". Эти операторы управляют тем, каким образом выполняются или не выполняются другие операторы программы. Такие операторы называются “управляющие структуры”. В этой главе мы познакомимся с другими управляющими структурами.

Оператор "if"

Иногда возникает необходимость выполнять часть программы только в какой-то ситуации. В этом случае используется оператор "if". Давайте я вам покажу как это делается на примере. Для этого мы добавим новый трюк в программу, с которой мы работали в предыдущей главе. Мы хотим, чтобы робот проезжал прямо, а потом поворачивал случайным образом либо вправо, либо влево. Чтоб добиться такого поведения от робота мы опять будем использовать случайные числа. Мы берём случайное число, которое либо положительное, либо отрицательное. Если это число меньше 0 мы делаем поворот направо, иначе поворот налево. Вот получившаяся программа:

#define MOVE_TIME 500

#define TURN_TIME 360

task main()

{

  while(true)

  {

    OnFwd(OUT_AC, 75);

    Wait(MOVE_TIME);

    if (Random() >= 0)

    {

      OnRev(OUT_C, 75);

    }

    else

    {

      OnRev(OUT_A, 75);

    }

    Wait(TURN_TIME);

  }

}

Оператор "if" выглядит похожим на оператор "while". Если условие внутри круглых скобок истинно, тогда выполняется часть программы заключенная в фигурные скобки. В противном случае, выполняется часть программы заключенная в фигурные скобки после ключевого слова "else". Давайте подробнее взглянем на условие которое мы использовали. Оно выглядит как "Random() >= 0". Это означает что значение Random() должно быть больше или равно 0, чтобы условие считалось истинным. Вы можете сравнивать значения различными способами, вот наиболее важные из них:

  • "==" равно;
  • "<" меньше;
  • "<=" меньше или равно;
  • ">" больше;
  • ">=" больше или равно;
  • "!=" не равно.

Вы можете комбинировать условия используя ключевое связку "&&", которая означает логическое "и", или связку "||", которая означает логическое “или”. Вот некоторые примеры условий:

"true" всегда истинно

"false" никогда не истинно

"ttt != 3" истинно, когда "ttt" не равно 3

"(ttt >= 5) && (ttt <= 10)" истинно, когда "ttt" лежит между 5 и 10 включительно

"(aaa == 10) || (bbb == 10)" истинно, если "aaa" или "bbb" (или и то и другое) равно 10

Обратите внимание, что оператор "if" может имеет два блока кода внутри себя. Часть начинающаяся сразу после условия, которая будет выполнена если условие истинно, и часть после ключевого слова "else", которая будет выполнена в противном случае. Ключевое слово "else" и блок кода после него являются необязательными. Так что вы можете пропустить их, если не нужно ничего делать когда условие ложно.

Оператор "do"

Еще одна управляющая структура - это оператор "do". Его используют следующим образом:

do

{

  statements;

}

while (condition);

Операторы внутри фигурных скобок после "do" выполняются до тех пор, пока условие в круглых скобках истинно. Условие может быть задано тем же способом, что и в операторе "if" рассмотренном выше. Вот пример программы с использованием этого оператора. Под её управлением робот перемещается случайным образом в течение 20 секунд, после чего останавливается.

int move_time, turn_time, total_time;

task main()

{

  total_time = 0;

  do

  {

    move_time = Random(1000);

    turn_time = Random(1000);

    OnFwd(OUT_AC, 75);

    Wait(move_time);

    OnRev(OUT_C, 75);

    Wait(turn_time);

    total_time += move_time;

    total_time += turn_time;

  }

  while (total_time < 20000);

  Off(OUT_AC);

}

Заметим, что оператор "do" практически один в один повторяет оператор "while". Но в операторе "while" условие проверяется перед выполнением блока операторов внутри него, а в операторе "do" это делается после. Таким образом в операторе "while" команды могут вообще не выполниться ни разу, а в операторе "do" они выполнятся 1 раз в любом случае.

Подводим итоги

В этой главе вы познакомились с двумя новыми управляющими структурами - оперторами "if" и "do". Вместе с рассмотренными ранее операторами "repeat" и "while" они управляют тем какие фрагменты программы будут выполняться и в каком порядке. Очень важно, чтобы вы полностью понимали как они это делают. Поэтому будет полезным перед переходом к следующей главе поэкспериментировать с новыми операторами, пока вы не будете уверены, что освоили их использование.

Сенсоры

Разумеется вы можете подключить сенсоры к модулю NXT чтобы робот реагировал на внешние события. Перед тем как я покажу вам, как это сделать, мы должны немного модифицировать робота, добавив ему сенсор касания. Как и ранее, используйте инструкцию по сборке Tribot'а для сборки переднего бампера. Изображение:NXT-Tribot-sens1.jpg

Соедините полученный сенсор касания со входом 1 на модулей NXT.

Ждём информацию с сенсора

Давайте начнем с простой программы по которой робот будет ехать вперед, пока не коснётся чего-нибудь. Вот её текст:

task main()

{

  SetSensor(IN_1,SENSOR_TOUCH);

  OnFwd(OUT_AC, 75);

  until (SENSOR_1 == 1);

  Off(OUT_AC);

}

В этой программе две строки для нас особо интересны. Первая строка программы указывает роботу какой тип сенсора мы используем. IN_1 это номер входа, к которому подключен сенсор. Другие входы для сенсоров имеют названия IN_2, IN_3 и IN_4. Идентификатор SENSOR_TOUCH показывает что это сенсор касания. Для датчика света мы будем использовать SENSOR_LIGHT. После того как мы указали тип сенсора и куда он подключен, программа включает оба мотора и робот начинает ехать вперед. Следующий оператор очень полезен. Он ожидает пока условие внутри его круглых скобок не станет истинным. Указанное там условие говорит что значение сенсора SENSOR_1 должно быть равно 1, что означает, что сенсор нажат. Пока сенсор не будет нажат, значение сенсора будет 0. Таким образом этот оператор ждёт нажатия сенсора. После чего оба мотора выключаются и задача считается завершенной.

Действия при срабатывании сенсора касания

Давайте теперь попытаемся сделать так, чтобы робот избегал препятствия. Когда робот будет сталкиваться с препятствием, мы сделаем чтобы он отъезжал немного назад, поворачивался и продолжал движение. Вот программа, которая это реализует:

task main()

{

  SetSensorTouch(IN_1);

  OnFwd(OUT_AC, 75);

  while (true)

  {

    if (SENSOR_1 == 1)

    {

      OnRev(OUT_AC, 75); Wait(300);

      OnFwd(OUT_A, 75); Wait(300);

      OnFwd(OUT_AC, 75);

    }

  }

}

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

Сенсор освещенности

Кроме датчика касания, у вас в Mindstorms NXT также имеется датчик освещенности, датчик звука и цифровой ультразвуковой дальномер. Датчик освещенности может быть настроен на излучение света или только на приём света. Таким образом мы можем измерять отраженный свет или просто уровень освещенности с какого-то направления. Измерение отраженного света полезно когда мы строим робота, который будет ездить по линии нанесённой на пол. Именно это мы и будем делать в следующем примере. А теперь, чтобы продолжить наши эксперименты, нужно достроить Tribot'a. Соедините датчик освещенности с входом 3, датчик звука ко входу 2 и ультразвуковой дальномер ко входу 4, как указано в инструкции.

Изображение:NXT-Tribot-sens2.jpg

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

#define THRESHOLD 40

task main()

{

  SetSensorLight(IN_3);

  OnFwd(OUT_AC, 75);

  while (true)

  {

    if (Sensor(IN_3) > THRESHOLD)

    {

      OnRev(OUT_C, 75);

      Wait(100);

      until(Sensor(IN_3) <= THRESHOLD);

      OnFwd(OUT_AC, 75);

    }

  }

}

Программа сначала объявляет порт 3 датчиком освещенности. Затем робот включается на движение вперед и запускается бесконечный цикл. В нём, если уровень освещенности больше чем 40 (мы использовали константу, чтобы можно было удобно настраивать робота, так как наш метод отслеживания линии сильно зависит от уровня освещенности помещения, где проводится эксперимент) мы включаем один из моторов в режим обратного хода пока снова не вернемся на линию.

Как можно увидеть из выполнения программы - движение робота не очень плавные. Попробуйте добавить Wait(100); перед оператором until, чтобы немного улучшить движение робота. Обратите внимание, что программа не работает для движения против часовой стрелки. Чтобы можно было двигаться по любому направлению линии потребуется другая, более сложная, программа.

Чтобы получить уровень отраженного освещения с выключенным светодиодом подсветки, настройте сенсор следующим образом:

SetSensorType(IN_3,IN_TYPE_LIGHT_INACTIVE);

SetSensorMode(IN_3,IN_MODE_PCTFULLSCALE);

ResetSensor(IN_3);

Звуковой сенсор

Используя звуковой сенсор вы можете превратить свой дорогостоящий набор NXT в "выключатель по хлопку"! Мы напишем программу, которая ждёт громкого звука, после чего включает робота на движение вперед, пока не услышит еще один громкий звук. Не забудьте проверить подключение звукового сенсора к порту 2, как указано в инструкции по сборке Tribot'a.

#define THRESHOLD 40

#define MIC SENSOR_2

task main()

{

  SetSensorSound(IN_2);

  while(true){

    until(MIC > THRESHOLD);

    OnFwd(OUT_AC, 75);

    Wait(300);

    until(MIC > THRESHOLD);

    Off(OUT_AC);

    Wait(300);

  }

}

Сначала мы определяем константу уровня звука с которого мы будем считать его громким - THRESHOLD и псевдоним для SENSOR_2; в самой задаче мы настраиваем порт 2 на чтение данных со звукового сенсора и запускаем бесконечный цикл.

Используя оператор until программа ждёт уровня звука который будет больше чем объявленный в THRESHOLD: обратите внимание, что SENSOR_2 это не просто имя, а функция, которая возвращает уровень звука замеренный сенсором.

Если будет обнаружен громкий звук робот начнёт движение вперед, пока еще один громкий звук не остановит его.

Операторы wait были добавлены в программу потому что иначе робот будет запускаться и тут же останавливаться: на самом деле NXT настолько быстр, что у него практически не занимает времени выполнение программы между двумя операторами until. Пожалуй, если вы попробуете закомментировать оба оператора wait, вы лучше поймёте о чем идёт речь. Альтернативой использованию оператора until для ожидания событий может быть оператор while. Достаточно поместить в его круглые скобки соответствующее условие, например

while(MIC <= THRESHOLD).

На самом деле не так много нужно помнить про аналоговые сенсоры из набора NXT; просто не забывайте, что оба датчика - освещенности и звуковой возвращают вам число от 0 до 100.

Ультразвуковой дальномер

Ультразвуковой дальномер работает как сонар. Излучая громкий звук он посылает пачку ультразвуковых волн и замеряет время, которое потребовалось им, чтобы отразиться от объектов в поле зрения и вернуться к датчику. Это цифровой сенсор, что означает, что в него встроено устройство для анализа и обработки данных. С этим сенсором вы можете построить робота, который будет избегать препятствий, а не обнаруживать их путём столкновения (как это приходилось делать с датчиком касания).

#define NEAR 15 //cm

task main(){

  SetSensorLowspeed(IN_4);

  while(true){

    OnFwd(OUT_AC,50);

    while(SensorUS(IN_4)>NEAR);

    Off(OUT_AC);

    OnRev(OUT_C,100);

    Wait(800);

  }

}

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

Подводим итоги

В этой главе вы ознакомились с тем, как работать со всеми видами датчиков включенных в набор NXT. Мы также увидели, как полезны операторы while и until при работе с сенсорами.

Я рекомендую вам попробовать самостоятельно написать несколько программ до перехода к следующей главе. Теперь у вас есть все компоненты, чтобы ваш робот показывал достаточно сложное поведение: попробуйте адаптировать под NXC простейшие программы из "Robo Center programming guide", поставляемого с набором.

Задачи и функции

До этого момента все наши программы состояли из просто одной задачи. Но программы на языке NXC могут иметь множественные задачи. Также возможно размещать куски программы в так называемых функциях, которые вы можете использовать в различных местах своей программы. Использование задач и функций делает вашу программу более лёгкой для понимания и более компактной. В этой главе мы рассмотрим эти возможности.

Задачи

Каждая программа NXC может состоять максимум из 255 задач; каждая из которых имеет уникальное имя. Задача с именем "main" всегда должна присутствовать в любой программе, так как это первая задача которая отправляется на выполнение. Другие задачи будут выполняться только если уже запущенная на выполнение задача скажет системе чтобы она их выполнила, или они могут быть неявно запланированы к выполнению; главная задача должна завершиться в этом случае перед тем, как будут выполнены такие задачи. После её завершения запланированные задачи будут выполняться параллельно.

Давайте я покажу вам использование задач на следующем примере. Мы хотим сделать программу по которой робот ездит по квадрату, как и раньше, но если он встречает препятствие - он должен на него среагировать. Это тяжело реализовать в одной задаче, так как робот должен делать две вещи в один и тот же момент - ездить по нужной траектории (т.е. включать\выключать моторы в нужные моменты времени) и следить за сенсорами. Так что лучше мы будем использовать для этого две задачи, первая из которых будет ездить по квадрату, а вторая реагировать на показания датчиков. Вот текст этой программы:

mutex moveMutex;

task move_square()

{

  while (true)

  {

    Acquire(moveMutex);

    OnFwd(OUT_AC, 75); Wait(1000);

    OnRev(OUT_C, 75); Wait(500);

    Release(moveMutex);

  }

}

task check_sensors()

{

  while (true)

  {

    if (SENSOR_1 == 1)

    {

      Acquire(moveMutex);

      OnRev(OUT_AC, 75); Wait(500);

      OnFwd(OUT_A, 75); Wait(500);

      Release(moveMutex);

    }

  }

}

task main()

{

  Precedes(move_square, check_sensors);

  SetSensorTouch(IN_1);

}

Главная задача просто объявляет какой сенсор куда подключен и после этого запускает две другие задачи, планируя их к выполнению, после чего завершает свою работу. Задача "move_square" бесконечно перемещает робота по квадрату. Задача "check_sensors" проверяет, сработал ли датчик касания и, если это так, отводит робота от препятствия.

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

Чтобы избежать таких проблем, мы объявили странный тип переменной, "mutex" (в русском языке этому слову соответствует "мьютекс", это сокращение от "mutual exclusion", т.е. взаимное исключение): мы можем взаимодействовать с таким типом переменных только с помощью функций Acquire и Release, записывая критические куски кода между этими функциями, при этом оставаясь уверенными, что только одна задача в один момент времени имеет полное управление над моторами робота.

Такие "мьютекс"-переменные еще называются семафорами, а такая техника программирования называется конкурентной. Более подробно это обсуждается в 10-й главе.

Функции

Иногда вам нужно один и тот же кусок программы использовать в разных местах. В этом случае вы можете поместить этот кусок программы в функцию и дать ей имя. Тогда вы сможете вызывать этот кусок программы на выполнение просто вызывая это имя из задачи. Давайте взглянем на следующий пример.

sub turn_around(int pwr)

{

  OnRev(OUT_C, pwr); Wait(900);

  OnFwd(OUT_AC, pwr);

}

task main()

{

  OnFwd(OUT_AC, 75);

  Wait(1000);

  turn_around(75);

  Wait(2000);

  turn_around(75);

  Wait(1000);

  turn_around(75);

  Off(OUT_AC);

}

В этой программе мы объявили функцию, которая разворачивает робота на месте. Главная задача вызывает эту функцию три раза. Обратите внимание, что мы вызываем функцию, указывая в круглых скобках числовой аргумент. Если у функции нет параметров - нужно будет просто указывать пустые скобки.

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

Основное преимущество функций в том, что они хранятся в NXT только раз и таким образом экономится память. Но когда функции короткие, может быть лучше использовать встроенные ("inline") функции. Они не хранятся отдельно, а копия их размещается в каждом месте, откуда вызывается функция. Это использует больше памяти, но на количество таких функций ограничения нет. Такие функции могут быть объявлены следующим образом:

inline int Name( Args ) {

  //body;

  return x*y;

}

Определение и вызов встроенных функций делается так же как и для обычных. Смотрите пример использования этих функций ниже:

inline void turn_around()

{

  OnRev(OUT_C, 75); Wait(900);

  OnFwd(OUT_AC, 75);

}

task main()

{

  OnFwd(OUT_AC, 75);

  Wait(1000);

  turn_around();

  Wait(2000);

  turn_around();

  Wait(1000);

  turn_around();

  Off(OUT_AC);

}

В указанном выше примере, мы можем сделать время для разворота аргументом функции, как показано тут:

inline void turn_around(int pwr, int turntime)

{

  OnRev(OUT_C, pwr);

  Wait(turntime);

  OnFwd(OUT_AC, pwr);

}

task main()

{

  OnFwd(OUT_AC, 75);

  Wait(1000);

  turn_around(75, 2000);

  Wait(2000);

  turn_around(75, 500);

  Wait(1000);

  turn_around(75, 3000);

  Off(OUT_AC);

}

Заметим, что при определении в скобках после имени функции мы указываем аргументы этой функции. В этом случае мы показываем, что аргумент функции - целое число (можно выбрать другие типы), а имя этой переменной - "turntime". Когда у функции больше аргументов, вы должны разделять их запятыми. Обратите внимание, что в NXC, ключевое "sub" является синонимом "void"; также, функции могут иметь другой тип, отличный от "void", они могут возвращать целые числа, строковые значения вызывающему, для подробной информации на эту тему смотрите полную инструкцию по языку NXC.

Определяем макрос

Существует еще один способ дать небольшому фрагменту кода собственное имя для обращения. В языке NXC вы можете определить макрос ( не путайте с макросами BricxCC). Мы видели ранее, что можем определять константы используя ключевое слово "#define", назначая им имена. Но на самом деле мы можем таким же образом определить любой кусок кода. Вот та же самая программа, но с использованием макроса для отделения фукнции разворота.

#define turn_around \

OnRev(OUT_B, 75); Wait(3400);OnFwd(OUT_AB, 75);

task main()

{

  OnFwd(OUT_AB, 75);

  Wait(1000);

  turn_around;

  Wait(2000);

  turn_around;

  Wait(1000);

  turn_around;

  Off(OUT_AB);

}

После ключевого слова #define идёт имя turn_around которое будет означать текст указанный следом. Теперь, где бы вы не указали turn_around, это имя будет замещено определенным вами ранее текстом. Обратите внимание, что текст должен быть в одну строку. (Вообще то есть способ использования множественных строк внутри ключевого слова #define, но такой подход не рекомендован к использованию.)  На самом деле возможности #define еще более широкие. Они так же могут иметь аргументы. Например, мы можем сделать время поворота аргументом. Вот пример в котором мы определяем 4 макро: двигаться вперед, двигаться назад, поворачивать налево и поворачивать направо. Каждый из них имеет 2 аргумента - скорость и время выполнения.

#define turn_right(s,t) \

OnFwd(OUT_A, s);OnRev(OUT_B, s);Wait(t);

#define turn_left(s,t) \

OnRev(OUT_A, s);OnFwd(OUT_B, s);Wait(t);

#define forwards(s,t) OnFwd(OUT_AB, s);Wait(t);

#define backwards(s,t) OnRev(OUT_AB, s);Wait(t);

task main()

{

  backwards(50,10000);

  forwards(50,10000);

  turn_left(75,750);

  forwards(75,1000);

  backwards(75,2000);

  forwards(75,1000);

  turn_right(75,750);

  forwards(30,2000);

  Off(OUT_AB);

}

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

Подводим итоги

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

Встроенные функции полезны, когда куски когда используются в различных местах программы в различных задачах, но они занимают память. И наконец макро очень полезны для небольших кусочков кода, которые могут использоваться в различных местах. Кроме того они имеют аргументы, что делает их еще более мощным инструментом.

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

Создаём музыку

Модуль NXT имеет встроенный динамик и может воспроизводить музыку и даже звуковые файлы. Это может быть полезно в том случае, когда вы хотите чтобы NXT сказал вам, что что-то случилось. Но это также может быть просто более интересно, когда робот играет музыку или разговаривает в процессе выполнения заданий.

Проигрываем звуковые файлы

BricxCC содержит в себе встроенную утилиту для преобразования .wav-файлов в .rso-файлы, доступную через меню "Tools" / "Sound conversion".

Завершив преобразование, вы можете сохранить .rso-файлы со звуками во флеш-память NXT при помощи другой утилиты (меню "Tools" / "NXT explorer"), после чего их можно будет воспроизводить командой

PlayFileEx(filename, volume, loop?)

Аргументы команды - имя файла, громкость (число от 0 до 4), и необязательный флаг зацикливания "loop", выставьте его в 1 (или TRUE), если хотите, чтобы файл вопроизвёлся не один раз, выставление его в 0 (или FALSE) воспроизведёт файл один раз.

#define TIME 200

#define MAXVOL 7

#define MINVOL 1

#define MIDVOL 3

#define pause_4th Wait(TIME)

#define pause_8th Wait(TIME/2)

#define note_4th \

PlayFileEx("! Click.rso",MIDVOL,FALSE); pause_4th

#define note_8th \

PlayFileEx("! Click.rso",MAXVOL,FALSE); pause_8th

task main()

{

  PlayFileEx("! Startup.rso",MINVOL,FALSE);

  Wait(2000);

  note_4th;

  note_8th;

  note_8th;

  note_4th;

  note_4th;

  pause_4th;

  note_4th;

  note_4th;

  Wait(100);

}

Эта забавная программа сначала проигрывает звук начала работы, который вы возможно уже слышали, а затем использует стандартный звук "click" чтобы сыграть джингл “Shave and a haircut” который приводит в восторг кролика Роджера! Макрос действительно очень удобен в данном случае для упрощения записи команд в главное задаче: попробуйте модифицировать настройки громкости чтобы сделать мелодию наиболее приятной.

Играем музыку

Чтобы воспроизвести тоновый сигнал вы можете использовать команду PlayToneEx(frequency, duration, volume, loop?) Она имеет 4 параметра. Первый это частота тона в Герцах, второй - продолжительность в 1/1000 секунды (как в операторе "wait"), и последний - такой же флаг зацикливания, как и в предыдущей команде. Кроме того может быть использована команда PlayTone(frequency, duration), в этом случае громкость используется настроенная в меню вашего модуля NXT, а функция зацикливания недоступна.

Вот таблица с полезными частотами музыкальных нот по октавам:

Нота

3

4

5

6

7

8

9

B (Си)

247

494

988

1976

3951

7902

A# (Ля-диез)

233

466

932

1865

3729

7458

A (Ля)

220

440

880

1760

3520

7040

14080

G# (Соль-диез)

415

831

1661

3322

6644

13288

G (Соль)

392

784

1568

3136

6272

12544

F# (Фа-диез)

370

740

1480

2960

5920

11840

F (Фа)

349

698

1397

2794

5588

11176

E (Ми)

330

659

1319

2637

5274

10548

D# (Ре-диез)

311

622

1245

2489

4978

9956

D (Ре)

294

587

1175

2349

4699

9398

C# (До-диез)

277

554

1109

2217

4435

8870

C (До)

262

523

1047

2093

4186

8372

Как и в случае с PlayFileEx, модуль NXT не дожидается когда нота доиграет. Так что если вы хотите воспроизвести подряд несколько нот - вам придётся добавить между ними достаточно долгие команды "wait". Например вот так:

#define VOL 3

task main()

{

PlayToneEx(262,400,VOL,FALSE); Wait(500);

PlayToneEx(294,400,VOL,FALSE); Wait(500);

PlayToneEx(330,400,VOL,FALSE); Wait(500);

PlayToneEx(294,400,VOL,FALSE); Wait(500);

PlayToneEx(262,1600,VOL,FALSE); Wait(2000);

}

Вы можете с легкость создавать музыкальные фрагменты с использованием инструмента "Brick Piano", являющегося частью BricxCC. Если вы хотите, чтобы NXT играл музыку, когда выполнял различные задачи - лучше используйте для этого отдельную задачу. Вот пример достаточно достаточно глупой программы, где NXT ездит взад-вперед и параллельно играет музыку.

task music()

{

  while (true)

  {

    PlayTone(262,400); Wait(500);

    PlayTone(294,400); Wait(500);

    PlayTone(330,400); Wait(500);

    PlayTone(294,400); Wait(500);

  }

}

task movement()

{

  while(true)

  {

    OnFwd(OUT_AC, 75); Wait(3000);

    OnRev(OUT_AC, 75); Wait(3000);

  }

}

task main()

{

  Precedes(music, movement);

}

Подводим итоги

В этой главе вы научились как с помощью NXT проигрывать звуки и музыку. Кроме того вы увидели, как использовать отдельную задачу для воспроизведения музыки.

Еще раз о моторах

Существует несколько дополнительных команд для моторов, которые вы можете использовать для более точного управления моторами. В этой главе мы обсудим эти команды: ResetTachoCount, Coast (Float), OnFwdReg, OnRevReg, OnFwdSync, OnRevSync, RotateMotor, RotateMotorEx, а также основы ПИД-управления.

Плавная остановка

Когда вы используете команду Off(), сервомотор мгновенно останавливается, блокируя вал и удерживая позицию. Существует способ более мягкой остановки мотора не используя блокировку вала. Для этого используйте команды Float() или что то же самое - Coast(), они просто отключают питание моторов. Вот пример, сначала робот останавливается используя блокировку вала, а потом останавливается без использования блокировки. Обратите внимание на разницу. На самом деле для конкретно этого робота разница достаточно незаметна, но для других роботов эта разница будет гораздо больше.

task main()

{

  OnFwd(OUT_AC, 75);

  Wait(500);

  Off(OUT_AC);

  Wait(1000);

  OnFwd(OUT_AC, 75);

  Wait(500);

  Float(OUT_AC);

}

Дополнительные команды

Команды OnFwd() и OnRev() являются простейшими командами для управления моторами.

Сервомоторы из набора NXT имеют встроенные энкодеры, которые позволяют вам достаточно точно контролировать положение вала и скорость его вращения.

Встроенная в NXT прошивка реализует алгоритм ПИД-управления (Пропорциональный Интегральный Дифференциальный - от названия основных трёх его компонент) положением вала и скоростью его вращения с обратной связью через энкодеры.

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

Команда OnFwdReg(‘ports',‘speed',‘regmode') включает двигатели указанные в ‘ports' на движение вперед со скоростью ‘speed' применяя режим регуляции, который может быть OUT_REGMODE_IDLE, OUT_REGMODE_SPEED или OUT_REGMODE_SYNC. Если выбран режим IDLE, ПИД-регулирование будет отключено; если режим SPEED, Модуль NXT будет регулировать скорость отдельных моторов чтобы получить постоянную скорость, даже если нагрузка на мотор меняется; и наконец, если выбран режим SYNC, пара моторов указанная в ‘ports' работают в синхронизированном режиме, как было описано выше.

Команда OnRevReg() работает так же как и выше, только в другую сторону.

task main()

{

  OnFwdReg(OUT_AC,50,OUT_REGMODE_IDLE);

  Wait(2000);

  Off(OUT_AC);

  PlayTone(4000,50);

  Wait(1000);

  ResetTachoCount(OUT_AC);

  OnFwdReg(OUT_AC,50,OUT_REGMODE_SPEED);

  Wait(2000);

  Off(OUT_AC);

  PlayTone(4000,50);

  Wait(1000);

  OnFwdReg(OUT_AC,50,OUT_REGMODE_SYNC);

  Wait(2000);

  Off(OUT_AC);

}

Эта программа показывает различные способы регулирования. Если вы попробуете остановить колёса робота, удерживая их в руках, при первом режиме (IDLE) ничего не будет происходить, во втором режиме (SPEED) попытка замедлить колесо вызовет увеличение мощности подаваемой на этот мотор, так как NXT пытается добиться заданной ему скорости; и наконец, в режиме синхронизации (SYNC), если попытаться остановить одно колесо - второе так же остановится, дожидаясь заблокированного колеса.

OnFwdSync(‘ports',‘speed',‘turnpct') делает то же самое что OnFwdReg() в режиме SYNC, но можно указать 'turnpct' - процент поворота влево\вправо (от -100 до 100).

OnRevSync() делает то же самое что и предыдущая команда, только направления обратные. Следующая программа показывает эти команды в работе: попробуйте менять процент поворота, чтобы увидеть как это влияет на работу двигателей.

task main()

{

  PlayTone(5000,30);

  OnFwdSync(OUT_AC,50,0);

  Wait(1000);

  PlayTone(5000,30);

  OnFwdSync(OUT_AC,50,20);

  Wait(1000);

  PlayTone(5000,30);

  OnFwdSync(OUT_AC,50,-40);

  Wait(1000);

  PlayTone(5000,30);

  OnRevSync(OUT_AC,50,90);

  Wait(1000);

  Off(OUT_AC);

}

И наконец, моторы можно поворачивать на конкретное число градусов (помните, что полный оборот это 360°).

Для обоих следующих команд, вы можете указывать направление вращения моторов или знаком скорости или знаком угла: так что если скорость или знак имеют один и тот же знак - мотор будет крутиться вперед, иначе назад.

RotateMotor(‘ports',‘speed',‘degrees') вращает вал мотора указанного в ‘ports' на ‘degrees' градусов со скоростью ‘speed' (в диапазоне 0-100).

task main()

{

  RotateMotor(OUT_AC, 50,360);

  RotateMotor(OUT_C, 50,-360);

}

RotateMotorEx(‘ports',‘speed',‘degrees',‘turnpct',‘sync', 'stop') это расширение предыдущей команды, которое позволяет синхронизировать два мотора (например, OUT_AC) указывая процент поворота ‘turnpct' (от -100 до 100) и флаг ‘sync' (который может быть или истиной или ложью). Также команда позволяет указать - нужно ли по её завершении блокировать вал двигателя, для этого используется флаг 'stop'.

task main()

{

  RotateMotorEx(OUT_AC, 50, 360, 0, true, true);

  RotateMotorEx(OUT_AC, 50, 360, 40, true, true);

  RotateMotorEx(OUT_AC, 50, 360, -40, true, true);

  RotateMotorEx(OUT_AC, 50, 360, 100, true, true);

}

ПИД-управление

Встроенное программное обеспечение NXT реализует цифровой ПИД-регулятор для точного управления положением и скорости сервомоторов. Этот тип управления один из самых простых и при этом эффективных способов управления с обратной связью, широко используемый во всяких задача автоматизации. Если кратко, он работает так (Я буду говорить об управлении положением вала цифровым контроллером):

Ваша программа задаёт контроллеру требуемое положение R(t); он выдаёт мощность U(t) на двигатель, замеряя положение вала Y(t) встроенными энкодерами и рассчитывает отклонение E(t) = R(t) – Y(t): вот почему это называется контроллер с обратной связью, потому что выходное положение вала мотора возвращается на вход контроллера, чтобы посчитать насколько он сейчас промахивается. Контроллер при этом превращает размер отклонения E(t) в новую команду для двигателя U(t) таким образом:

U(t) = P(t) + I(t) + D(t), где 

P(t) = KP·E(t),

I(t) = KI·( I(t–1) + E(t) )

и D(t) = KD·(E(t) – E(t –1)).

Это может выглядеть достаточно сложно для новичка, но я предприму все усилия, чтобы помочь вам объяснить этот механизм. Команда является суммой трёх частей, Пропорциональной части P(t), интегральной I(t) и дифференциальной D(t).

P(t) даёт контроллеру быстроту реакции, но может мешать стабильности в долгосрочной перспективе;

I(t) даёт контроллеру “память”, в том смысле, что накапливает ошибку и компенсирует её, гарантируя долгосрочную стабилизацию в нужном положении;

D(t) даёт контроллеру “возможность предугадывать” (на основе производной из математики), ускоряя время реакции системы.

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

#define P 50

#define I 50

#define D 50

task main(){

  RotateMotorPID(OUT_A, 100, 180, P, I, D);

  Wait(3000);

}

Функция RotateMotorPID(port,speed, angle, Pgain,Igain,Dgain) позволяет управлять мотором устанавливая различные параметры ПИД-регулятора, отличные от настроек по умолчанию. Попробуйте выставлять следующие значения:

(50,0,0): мотор не поворачивается точно на 180°, так как остаётся нескомпенсированная ошибка

(0,x,x): без пропорциональной части ошибка очень большая

(40,40,0): здесь у нас перелёт, т.е. мотор поворачивается дальше чем надо и потом возвращается

(40,40,90): хорошая точность и время выполнения команд

(40,40,200): вал колеблется, так как дифференциальная часть слишком большая

Попробуйте другие значения, чтобы посмотреть как разные настройки ПИД-регулятора влияют на выполнение команд.

Подводим итоги

В этой главе вы освоили дополнительные команды для управления моторами: Float(),Coast() которые плавно останавливают моторы; OnXxxReg() и OnXxxSync() которые реализуют управление с обратной связью как по скорости, так и по синхронизации со вторым мотором; RotateMotor() и RotateMotorEx() используемые для поворота на нужный угол выходного вала моторов. Вы немного изучили что такое ПИД-регулирование; хотя это было не исчерпывающее объяснение, может быть я вас даже немного запутал, попробуйте поискать материал на эту тему в Интернете!

Дополнительная информация о сенсорах

В главе 5 мы обсудили простейшие приёмы использования сенсоров, но на самом деле с ними можно делать намного больше. В этой главе мы обсудим отличие между режимом и типом сенсора, увидим как использовать старые RCX-совместимые сенсоры и подключать их к блоку NXT используя кабели "Lego converter cable".

Режимы и типы сенсоров

Команда SetSensor(), которую мы видели ранее, реально делает две вещи: она устанавливает тип сенсора и режим, в котором этот сенсор будет работать. Путём установки режима и типа сенсора отдельными полями вы можете более точно контролировать поведение сенсора, что полезно в различных задачах.

Тип сенсора устанавливается командой SetSensorType(). Существует множество различных типов, но я опишу только основные:

  • SENSOR_TYPE_TOUCH, сенсор касания,
  • SENSOR_TYPE_LIGHT_ACTIVE, датчик освещенности (с включенным светодиодом, т.е. работающий по отраженному свету),
  • SENSOR_TYPE_SOUND_DB, датчик звука и
  • SENSOR_TYPE_LOWSPEED_9V - ультразвуковой дальномер.

Установка типа сенсора важна для определения нужно ли подавать питание (включает светодиод в датчике освещенности), или для указания модулю NXT, что сенсор цифровой и надо работать с ним по протоколу I2C. Кроме всего прочего допускается использование с NXT сенсоров из старого набора, поставляемого с модулем RCX:

  • SENSOR_TYPE_TEMPERATURE, датчик температуры,
  • SENSOR_TYPE_LIGHT - старый датчик освещенности,
  • SENSOR_TYPE_ROTATION - датчик положения вала (датчик вращения) - этот тип мы обсудим позже.

Режим датчика задаётся командой SetSensorMode(). Существует 8 различных режимов. Наиболее важный - это SENSOR_MODE_RAW. В этом режиме, значение, которое вы получаете от сенсора является числом и лежит в диапазоне 0..1023. Это исходное значение, которое выдаёт датчик. Что оно означает - зависит от того, какой датчик подключен. Например, для датчика касания, когда он не нажат, значение близко к 1023, а когда полностью нажат - близко к 50. При частичном нажатии значение варьируется между 50 и 1000. Так что если вы установите датчик касания в этот режим, вы сможете определять, когда датчик нажат частично. С датчиком освещенности значение варьируется между 300 (очень светло) и 800 (очень темно). Это даёт гораздо значение большей точности, чем при использовании команды SetSensor(). Для более подробной информации смотрите инструкцию по программированию к языку NXC.

Второй режим работы сенсоров - SENSOR_MODE_BOOL. В этом режиме возвращаемое значение 0 или 1. Оно получается из исходного значения 0..1023 сравнением, если меньше 565, возвращается 0, иначе 1. SENSOR_MODE_BOOL является режимом по умолчанию для датчика касания, но может быть быть применен к любому другому сенсору, чтобы убрать аналоговую информацию и оставить двоичный ответ. Режимы SENSOR_MODE_CELSIUS и SENSOR_MODE_FAHRENHEIT полезны только для датчиков температуры и дают ответ в соответствующих единицах измерения. SENSOR_MODE_PERCENT превращает исходное значение 0..1023 в значение между 0 и 100, просто деля его на 1023. SENSOR_MODE_PERCENT является режимом по умолчанию для датчика освещенности. SENSOR_MODE_ROTATION используется только для сенсора вращения (см. ниже).

Есть еще два интересных режима: SENSOR_MODE_EDGE и SENSOR_MODE_PULSE. Они считают переходы между высоким и низким уровнем сигнала с датчика или наоборот. Например, когда мы нажимаете на датчик касания это вызывает переход с высокого к низкому уровню сигнала. Когда вы отпускаете его это вызывает обратный переход. Когда вы устанавливаете сенсор в режим SENSOR_MODE_PULSE, только переходы с низкого на высокий уровень считаются. Так что каждое нажатие и отпускание сенсора касания считается за 1. А когда вы устанавливаете режим датчика в SENSOR_MODE_EDGE, оба перехода засчитываются, т.е. когда вы нажимаете и отпускаете датчик - счетчик увеличивается на 2. Вы можете использовать этот режим для подсчета того, сколько раз нажимали на датчик касания. Или с датчиком освещенности вы можете посчитать как часто включали/выключали освещение. Разумеется, когда вы считаете количество срабатываний или переходов, у вас должна быть возможность сбросить счетчик в ноль. Для этого используйте команду ClearSensor(), которая сбрасывает счетчик для указанного датчика.

Давайте разберем пример. Следующая программа использует датчик касания для управления роботом. Соедините датчик касания длинным проводом со входом 1. Если быстро нажать датчик касания 2 раза - робот поедет вперед, если нажать 1 раз - остановится.

task main()

{

  SetSensorType(IN_1, SENSOR_TYPE_TOUCH);

  SetSensorMode(IN_1, SENSOR_MODE_PULSE);

  while(true)

  {

    ClearSensor(IN_1);

    until (SENSOR_1 > 0);

    Wait(500);

    if (SENSOR_1 == 1) {Off(OUT_AC);}

    if (SENSOR_1 == 2) {OnFwd(OUT_AC, 75);}

  }

}

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

Сенсор вращения

Сенсор вращения это очень полезный вид датчика, представляющий из себя оптический энкодер, практический такой же, как встроенный в сервомоторы набора NXT. Датчик вращения имеет отверстие, в которое вы можете вставить вал, относительное угловое положение которого он может измеряет. Один полный оборот вала соответствует 16 шагам (или -16, если вращать в другую сторону), т.е. угловое разрешение датчика - 22.5 градуса, достаточно грубо, если сравнивать с разрешением энкодеров сервомоторов в 1 градус. Этот старый датчик вращения можно использовать для отслеживания положения вала без необходимости задействовать для этого сервомотор; кроме того не забывайте, что старый датчик ввиду отсутствия двигателя внутри гораздо легче вращается.

Если вам нужно большее разрешение, чем 16 шагов на оборот - вы всегда можете использовать шестерни, чтобы механически увеличить его.

Следующий пример унаследован из старого курса для RCX.

Одной из типичных ситуаций является размещение двух датчиков вращения на двух колёсах, которыми вы вращаете с помощью установленных на них же двигателей. Для прямолинейного движения вам нужно, чтобы колёса вращались с одинаково быстро. К сожалению, обычно моторы не вращаются одинаково. Используя датчики вращения вы можете отследить ситуацию, когда один мотор обгоняет другой. Вы можете временно приостановить этот мотор (лучше всего - используя команду Float()), пока оба датчика вращения не выдадут одинаковое значение. Следующая программа реализует этот подход к управлению двигателями. Она просто позволяет роботу ехать строго по прямой. Чтобы проверить её на роботе - подключите датчики вращения к моторам. Подцепите сенсоры на входы 1 и 3.

task main()

{

  SetSensor(IN_1, SENSOR_ROTATION); ClearSensor(IN_1);

  SetSensor(IN_3, SENSOR_ROTATION); ClearSensor(IN_3);

  while (true)

  {

    if (SENSOR_1 < SENSOR_3)

      {OnFwd(OUT_A, 75); Float(OUT_C);}

    else if (SENSOR_1 > SENSOR_3)

      {OnFwd(OUT_C, 75); Float(OUT_A);}

    else

      {OnFwd(OUT_AC, 75);}

  }

}

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

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

Подключение нескольких сенсоров к одному входу

Есть смысл сделать небольшое предупреждение перед тем, как вы приступите к чтению этого раздела! Из-за новой структуры улучшенных датчиков платформы NXT и кабелей на 6 линий, эта возможность стала сложнее, чем с RCX-набором подключать больше чем 1 датчик на порт модуля. По моему мнению единственное имеющее смысл и более менее простое применение указанной ниже информации - сборка разветвителя датчика касания с помощью кабеля конвертера. Альтернатива которому - полноценный цифровой мультиплексор, который может работать по протоколу I2C с модулем NXT, но это однозначно не лучшее решение для начинающих.

Модуль NXT имеет 4 входя для подключения датчиков. Когда вы хотите собрать более сложного робота (и купили несколько дополнительных датчиков) этого может оказаться недостаточно для вас. К счастью есть несколько трюков, с помощью которых вы можете подключить два (или даже больше) датчиков к одному входу. Проще всего подключить два датчика касания к одному входу. Когда один (любой) из них нажат (или оба) - значение датчика будет 1, иначе 0. Вы не можете отличить какой датчик сработал, но иногда это и не нужно. Например, когда вы размещаете один датчик спереди, а второй сзади, вы можете понять каким стукнулись о препятствие по тому, куда вы сейчас ехали - вперед или назад. Еще вы можете установить режим сенсора RAW (см. выше). Теперь вы сможете получать больше информации. Если вам повезёт - значения нажатого и не нажатого сенсора будет разным для обоих сенсоров. Тогда вы сможете отличать какой из них нажат. А если нажаты сразу оба - вы получите намного меньшее значение (около 30) и тоже сможете это обнаружить.

Вы можете так же соединить датчик касания и датчик освещенности с одним входом (только для датчиков из набора RCX). Установите при этом тип сенсора "датчик света" (иначе датчик света не будет работать). Установите режим RAW. В этом случае, если нажат датчик касания - вы получите значение ниже 100. Если же он не нажат - вы получите значение датчика освещенности, которое никогда не бывает ниже 100.

Следующая программа использует этот подход. Робот должен быть снабжён датчиком освещенности, направленным вниз и датчиком касания выставленным в качестве бампера вперед. Соедините оба датчика ко входу 1. Робот будет ездить случайным образом по освещенной территории, отъезжая от препятствий. Когда датчик освещенности (значение с датчика > 750) попадает на тёмное место робот немного отъезжает назад. Когда что-то нажимает датчик касания (значение < 100) он делает то же самое. Вот текст это программы:

mutex moveMutex;

int ttt,tt2;

task moverandom()

{

  while (true)

  {

    ttt = Random(500) + 40;

    tt2 = Random();

    Acquire(moveMutex);

    if (tt2 > 0)

      { OnRev(OUT_A, 75); OnFwd(OUT_C, 75); Wait(ttt); }

    else

      { OnRev(OUT_C, 75); OnFwd(OUT_A, 75); Wait(ttt); }

    ttt = Random(1500) + 50;

    OnFwd(OUT_AC, 75); Wait(ttt);

    Release(moveMutex);

  }

}

task submain()

{

  SetSensorType(IN_1, SENSOR_TYPE_LIGHT);

  SetSensorMode(IN_1, SENSOR_MODE_RAW);

  while (true)

  {

    if ((SENSOR_1 < 100) || (SENSOR_1 > 750))

    {

      Acquire(moveMutex);

      OnRev(OUT_AC, 75); Wait(300);

      Release(moveMutex);

    }

  }

}

task main()

{

  Precedes(moverandom, submain);

}

Я надеюсь программа получилась понятная. В ней есть две задачи. Задача "moverandom" заставляет робота случайным образом блуждать. Главная задача запускает "moverandom", потом переходит в своё продолжение "submain" чтобы запустилась "moverandom", настраивает сенсоры и ждет пока что-нибудь случится. Если значения сенсоров будут слишком малы (касание) или слишком велики (выехали из освещенного района) она остановит случайные блуждания, отъедет немного назад и затем снова продолжит случайные движения.

Подводим итоги

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

Параллельные задачи

Как показывалось ранее, задачи в NXC выполняются одновременно, или как обычно говорят - параллельно. Это очень удобно. Такая возможность позволяет вам следить за датчиками в одной задаче, пока вторая задача управляет движением робота, а, скажем, третья задача играет какую-нибудь музыку. Но параллельные задачи могут создавать проблем. Одна задача может начать мешать другой.

Неправильная программа

Разберем следующую программу. В ней одна задача управляет движением робота по квадратам (как мы часто уже делали раньше), а другая задача проверяет датчик касания, когда датчик нажат, она отводит робота немного назад и делает поворот на 90 градусов.

task check_sensors()

{

  while (true)

  {

    if (SENSOR_1 == 1)

    {

      OnRev(OUT_AC, 75);

      Wait(500);

      OnFwd(OUT_A, 75);

      Wait(850);

      OnFwd(OUT_C, 75);

    }

  }

}

task submain()

{

  while (true)

  {

    OnFwd(OUT_AC, 75); Wait(1000);

    OnRev(OUT_C, 75); Wait(500);

  }

}

task main()

{

  SetSensor(IN_1,SENSOR_TOUCH);

  Precedes(check_sensors, submain);

}

Вероятно программа выглядит как совершенно правильная, но если вы попробуете загрузить её в робота вы скорее всего обнаружите некоторое необычное его поведение. Попробуйте следующее, чтобы убедиться в этом: сделайте так, чтобы робот задел что-то бампером при повороте. Он начнет отъезжать назад, но немедленно снова начнет двигаться вперед, снова ударяясь о препятствие. Причина этого в том, что задачи начинают пересекаться. А происходит вот что. Робот едет в повороте и ударяется об препятствие. Он начинает отъезжать назад, но в этот момент главная задача (submain) завершает ожидание конца разворота и даёт команду ехать прямо на препятствие, игнорируя тот факт, что сейчас выполняется маневр отъезда от него. Вторая задача в это время находится в состоянии ожидания и даже не сможет обнаружить столкновение. Это точно не то поведение робота, которое мы хотели бы видеть. Проблема заключается в том, что пока вторая задача ждёт мы забыли, что первая задача продолжает работу и её действия начинают мешать работе задаче избегания препятствий.

Критические секции и "мьютекс"-переменные

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

mutex moveMutex;

task move_square()

{

  while (true)

  {

    Acquire(moveMutex);

    OnFwd(OUT_AC, 75); Wait(1000);

    OnRev(OUT_C, 75); Wait(850);

    Release(moveMutex);

  }

}

task check_sensors()

{

  while (true)

  {

    if (SENSOR_1 == 1)

    {

      Acquire(moveMutex);

      OnRev(OUT_AC, 75); Wait(500);

      OnFwd(OUT_A, 75); Wait(850);

      Release(moveMutex);

    }

  }

}

task main()

{

  SetSensor(IN_1,SENSOR_TOUCH);

  Precedes(check_sensors, move_square);

}

Загвоздка здесь в том, что обе задачи (check_sensors и move_square) контролируют моторы только если другая задача не использует их в данный момент. Это делается с помощью команд Acquire, которые ждут, чтобы "мьютекс"-переменная moveMutex стала свободной, перед тем как начать работать с моторами, после чего команда блокирует эту переменую и передаёт управление следующей команде. Команда Acquire всегда используется на пару с командой Release, которая сообщает системе, что "мьютекс"-переменная освободилась, и теперь другие задачи могут использовать соответствующий общий ресурс, в нашем случае - двигатели робота. Кусок программы внутри пары Acquire - Release называется критической областью программы, в том смысле, что используются общие ресурсы. Это гарантирует что в таких областях задачи не будут конфликтовать друг с другом по объявленным общим ресурсам.

Использование семафоров

Существует возможность собрать самому альтернативу "мьютекс"-переменым, являющуюся явной реализацией команд Acquire и Release.

Стандартный способ решить эту программу - объявить переменную, которая будет указывать, какая задача контроллирует двигатели. Другие задачи не должны использовать двигатели, пока первая задача не объявит их свободными. Такая переменная часто называется семафором. Пусть sem это такой семафор (это то же самое по сути, что и "мьютекс"). Мы будем считать, что значение 0 показывает, что двигатели свободны. Теперь, если задача хочет использовать моторы - она должна выполнить следующие команды:

until (sem == 0);

sem = 1; //Acquire(sem);

// Чего-то делаем с моторами

// (Это критическая область программы)

sem = 0; //Release(sem);

Сначала мы ждем, пока моторы будут свободны, затем забираем этот ресурс себе, выставляя 1. Теперь мы управляем ими. Когда мы всё, что хотели, сделали - пишем в sem снова 0. Ниже можно увидеть программу, реализующую семафор. Когда обнаруживается нажатие датчика касания, семафор выставляется в 1 и выполняется процедура отката назад. Во время неё задача move_square обязана ждать. Когда откат выполнен - семафор выставляется снова в 0 и задача move_square может продолжить.

int sem;

task move_square()

{

  while (true)

  {

    until (sem == 0); sem = 1;

    OnFwd(OUT_AC, 75);

    sem = 0;

    Wait(1000);

    until (sem == 0); sem = 1;

    OnRev(OUT_C, 75);

    sem = 0;

    Wait(850);

  }

}

task submain()

{

  SetSensor(IN_1, SENSOR_TOUCH);

  while (true)

  {

    if (SENSOR_1 == 1)

    {

      until (sem == 0); sem = 1;

      OnRev(OUT_AC, 75); Wait(500);

      OnFwd(OUT_A, 75); Wait(850);

      sem = 0;

    }

  }

}

task main()

{

  sem = 0;

  Precedes(move_square, submain);

}

Вы можете сказать, что не ясно зачем в задаче move_square мы выставляем семафор в 1 и обратно в 0. Но на самом деле это полезно. Причина в том, что команда OnFwd() на самом деле состоит из двух команд (см. главу 8). Если вы не хотите, чтобы эту пару команд прервала другая задача - нужно так же блокировать здесь доступ к устройству.

Семафоры очень полезны и, когда вы пишете достаточно сложные программы с параллельными задачами, они почти всегда будут вам нужны. (Кстати, существует некоторый небольшой шанс, что такой семафор может не сработать. Попробуйте разобраться, почему.)

Подводим итоги

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

Коммуникации между роботами

Если у вас есть больше чем один модуль NXT, тогда эта глава для вас (хотя вообще можно устанавливать связь не только между роботами, но и робота с ПК). Роботы могут связываться друг с другом через радиоканал Bluetooth: так что вы можете иметь нескольких роботов одновременно выполняющих общую задачу (или сражающихся друг с другом), кроме того вы можете построить большого сложного робота из двух NXT, так что можно будет использовать 6 сервомоторов и 8 сенсоров. Для старого доброго RCX, это очень просто: он отправляет ИК-сообщение и все роботы вокруг принимают его.

Но в NXT реализован совершенно другой подход! Во-первых вам нужно соединить два или более NXT (или NXT и ПК) с помощью меню "Bluetooth" на модуле NXT; только тогда вы сможете отправлять сообщения к подключенным устройствам. NXT который инициирует подключение называется Мастером, и может иметь до 3 подчиненных устройств, подключенных к линиям 1,2 и 3. Подчиненный модуль всегда видит мастера на линии 0. Вы можете отправлять сообщения в 10 доступных ячеек.

Отправка сообщений мастер-подчиненный

Ниже приведены 2 программы - одна для мастера, а вторая для подчиненного. Эти простые программы покажут вам, как быстрый непрерывный поток строковых сообщений может быть передан с помощью радиоканала между двумя модулями NXT. Программа для мастера сначала убеждается, что подчиненный правильно подключен на 1 линию (константа BT_CONN) используя функцию BluetoothStatus(conn); после чего создает и отправляет сообщения состоящие из префикса "M" и возрастающих чисел с помощью функции SendRemoteString(conn,queue,string), одновременно получая сообщения от подчиненного функцией ReceiveRemoteString(queue,clear,string) и отображая эту информацию.

//MASTER

#define BT_CONN 1

#define INBOX 1

#define OUTBOX 5

sub BTCheck(int conn){

  if (!BluetoothStatus(conn)==NO_ERR){

    TextOut(5,LCD_LINE2,"Error");

    Wait(1000);

    Stop(true);

  }

}

task main(){

  string in, out, iStr;

  int i = 0;

  BTCheck(BT_CONN); //check slave connection

  while(true){

    iStr = NumToStr(i);

    out = StrCat("M",iStr);

    TextOut(10,LCD_LINE1,"Master Test");

    TextOut(0,LCD_LINE2,"IN:");

    TextOut(0,LCD_LINE4,"OUT:");

    ReceiveRemoteString(INBOX, true, in);

    SendRemoteString(BT_CONN,OUTBOX,out);

    TextOut(10,LCD_LINE3,in);

    TextOut(10,LCD_LINE5,out);

    Wait(100);

    i++;

  }

}

Программа подчиненного модуля очень похожа, но использует функцию SendResponseString(queue,string) вместо SendRemoteString, потому что подчиненный может отправлять сообщения только мастеру, находящемуся на линии 0.

//SLAVE

#define BT_CONN 1

#define INBOX 5

#define OUTBOX 1

sub BTCheck(int conn){

  if (!BluetoothStatus(conn)==NO_ERR){

    TextOut(5,LCD_LINE2,"Error");

    Wait(1000);

    Stop(true);

  }

}

task main(){

  string in, out, iStr;

  int i = 0;

  BTCheck(0); //check master connection

  while(true){

    iStr = NumToStr(i);

    out = StrCat("S",iStr);

    TextOut(10,LCD_LINE1,"Slave Test");

    TextOut(0,LCD_LINE2,"IN:");

    TextOut(0,LCD_LINE4,"OUT:");

    ReceiveRemoteString(INBOX, true, in);

    SendResponseString(OUTBOX,out);

    TextOut(10,LCD_LINE3,in);

    TextOut(10,LCD_LINE5,out);

    Wait(100);

    i++;

  }

}

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

Отправка чисел с подтверждением

Как мы видим в приведенной ниже паре программ: в этот раз мастер отправлять числа командой SendRemoteNumber(conn,queue,number) и останавливается, ожидая подтверждения получения от подчиненного (цикл until, внутри которого мы видим ReceiveRemoteString); только если на той стороне подчиненный работает и отправил нам подтверждение - мастер переходит к отправке следующего сообщения. Подчиненный просто получает числа фукнцией ReceiveRemoteNumber(queue,clear,number) и отправляет подтверждение командой SendResponseNumber. Обе программы должны иметь общий код для подтверждения. В нашем случае я принял 0xFF в качестве такого кода.

Мастер отправляет случайные числа и ждёт подтверждение подчиненного; каждый раз после этого переменная ack должна быть очищена, иначе мастер продолжит отправлять сообщения не ожидая больше никаких подтверждений, потому что мы забыли очистить эту переменну.

Подчиненный в бесконечном цикле проверяет ячейку и если она не пуста, показывает значение на экран и отправляет мастеру подтверждение о получении. В начале программы я отправил подтверждение без информации, которую подтверждаю, чтобы разблокировать мастера. Без этого, если бы мастер запустился раньше - первое его сообщение было бы отправлено в никуда и он бы начал ждать ответа, а подчиненный запустился бы и начал ждать первое сообщение, так что всё бы "зависло", даже если подчиненный нормально запущен. То как мы сделали сейчас - может привести к потере части сообщений, но хотя-бы нет риска зависания пары модулей.

//MASTER

#define BT_CONN 1

#define OUTBOX 5

#define INBOX 1

#define CLEARLINE(L) \

TextOut(0,L," ");

sub BTCheck(int conn){

  if (!BluetoothStatus(conn)==NO_ERR){

    TextOut(5,LCD_LINE2,"Error");

    Wait(1000);

    Stop(true);

  }

}

task main(){

  int ack;

  int i;

  BTCheck(BT_CONN);

  TextOut(10,LCD_LINE1,"Master sending");

  while(true){

    i = Random(512);

    CLEARLINE(LCD_LINE3);

    NumOut(5,LCD_LINE3,i);

    ack = 0;

    SendRemoteNumber(BT_CONN,OUTBOX,i);

    until(ack==0xFF) {

      until(ReceiveRemoteNumber(INBOX,true,ack) == NO_ERR);

    }

    Wait(250);

  }

}

//SLAVE

#define BT_CONN 1

#define OUT_MBOX 1

#define IN_MBOX 5

sub BTCheck(int conn){

  if (!BluetoothStatus(conn)==NO_ERR){

    TextOut(5,LCD_LINE2,"Error");

    Wait(1000);

    Stop(true);

  }

}

task main(){

  int in;

  BTCheck(0);

  TextOut(5,LCD_LINE1,"Slave receiving");

  SendResponseNumber(OUT_MBOX,0xFF); //unblock master

  while(true){

    if (ReceiveRemoteNumber(IN_MBOX,true,in) != STAT_MSG_EMPTY_MAILBOX) {

      TextOut(0,LCD_LINE3," ");

      NumOut(5,LCD_LINE3,in);

      SendResponseNumber(OUT_MBOX,0xFF);

    }

    Wait(10); //take breath (optional)

  }

}

Прямые команды

Вот еще одна отличная возможность доступная при использовании Bluetooth: мастер может напрямую контролировать подчиненных. В этом примере мастер отправляет подчиненным прямые команды для проигрывания звуков, включения двигателей и для подчиненного модуля NXT даже не нужно писать никакой программы. Это всё реализуется встроенным в NXT программным обеспечением!

//MASTER

#define BT_CONN 1

#define MOTOR(p,s) RemoteSetOutputState(BT_CONN, p, s, \

OUT_MODE_MOTORON+OUT_MODE_BRAKE+OUT_MODE_REGULATED, \

OUT_REGMODE_SPEED, 0, OUT_RUNSTATE_RUNNING, 0)

sub BTCheck(int conn){

  if (!BluetoothStatus(conn)==NO_ERR){

    TextOut(5,LCD_LINE2,"Error");

    Wait(1000);

    Stop(true);

  }

}

task main(){

  BTCheck(BT_CONN);

  RemotePlayTone(BT_CONN, 4000, 100);

  until(BluetoothStatus(BT_CONN)==NO_ERR);

  Wait(110);

  RemotePlaySoundFile(BT_CONN, "! Click.rso", false);

  until(BluetoothStatus(BT_CONN)==NO_ERR);

  //Wait(500);

  RemoteResetMotorPosition(BT_CONN,OUT_A,true);

  until(BluetoothStatus(BT_CONN)==NO_ERR);

  MOTOR(OUT_A,100);

  Wait(1000);

  MOTOR(OUT_A,0);

}

Подводим итоги

В этой главе вы изучили некоторые простые аспекты использования Bluetooth для связи между роботами. Мы соединили по радиоканалу 2 модуля NXT, отправляли и принимали строки и числа, ожидали подтверждение получения. Последнее очень важно в случае необходимости в надежном канале передачи информации.

В качестве дополнительной возможности вы также научились отдавать мастером прямые команды для подчиненного модуля NXT.

Дополнительные возможности

NXC имеет несколько сервисных команд. В этой главе мы обсудим три типа таких команд: для работы с таймером, дисплеем и для использования файловой системы NXT.

Таймеры

В модуле NXT есть таймер, который работает в постоянном режиме. Этот таймер увеличивается на единицу каждые 1/1000 секунды. Вы можете получить текущее значение таймера функцией CurrentTick(). Вот пример использования таймера, в котором робот будет двигаться случайным образом 10 секунд.

task main()

{

  long t0, time;

  t0 = CurrentTick();

  do

  {

    time = CurrentTick()-t0;

    OnFwd(OUT_AC, 75);

    Wait(Random(1000));

    OnRev(OUT_C, 75);

    Wait(Random(1000));

  }

  while (time<10000);

  Off(OUT_AC);

}

Можно попробовать сравнить эту программу с приведенной в главе 4, делающей то же самое. На таймере это делается определенно проще.

Таймеры очень полезны в качестве заменителя команд Wait(). Вы можете ожидать нужного момента времени сбросив таймер и ожидая нужного его значения. Но вы так же можете в это время реагировать на происходящие события (например на поступление информации от сенсоров), пока ждете. Следующая простая программа является примером такого использования таймеров. Она двигает робота вперед либо пока не пройдёт 10 секунд, либо пока у него не сработает бампер, упершись во что-нибудь.

task main()

{

  long t3;

  SetSensor(IN_1,SENSOR_TOUCH);

  t3 = CurrentTick();

  OnFwd(OUT_AC, 75);

  until ((SENSOR_1 == 1) || ((CurrentTick()-t3) > 10000));

  Off(OUT_AC);

}

Не забывайте, что таймер работает с шагом 1/1000 секунды, как и команда wait.

Дисплей

Модуль NXT имеет черно-белый графический дисплей с разрешением 100х64 пиксела. К нему есть множество функций API для рисования на нём текста, чисел, точек, линий, прямоугольников, кругов и даже картинок (из .ric-файлов). Следующий пример пытается покрыть все эти случаи. Пиксель (0,0) находится внизу слева экранчика.

#define X_MAX 99

#define Y_MAX 63

#define X_MID (X_MAX+1)/2

#define Y_MID (Y_MAX+1)/2

task main(){

  int i = 1234;

  TextOut(15,LCD_LINE1,"Display", true);

  NumOut(60,LCD_LINE1, i);

  PointOut(1,Y_MAX-1);

  PointOut(X_MAX-1,Y_MAX-1);

  PointOut(1,1);

  PointOut(X_MAX-1,1);

  Wait(200);

  RectOut(5,5,90,50);

  Wait(200);

  LineOut(5,5,95,55);

  Wait(200);

  LineOut(5,55,95,5);

  Wait(200);

  CircleOut(X_MID,Y_MID-2,20);

  Wait(800);

  ClearScreen();

  GraphicOut(30,10,"faceclosed.ric"); Wait(500);

  ClearScreen();

  GraphicOut(30,10,"faceopen.ric");

  Wait(1000);

}

Все эти функции достаточно очевидны, но я всё-таки опишу их параметры детально:

  • ClearScreen() очищает экран;
  • NumOut(x, y, number) выводит число в указанные координаты;
  • TextOut(x, y, string) тоже самое, только выводит строку
  • GraphicOut(x, y, filename) выводит картинку из .ric-файла
  • CircleOut(x, y, radius) выводит окружность с заданными координатами центра и радиусом;
  • LineOut(x1, y1, x2, y2) рисует линию из (x1,x2) в (x2,y2)
  • PointOut(x, y) ставит точку
  • RectOut(x, y, width, height) рисует прямоугольник с нижним левым углом в (x,y) и указанных размеров;
  • ResetScreen() сбрасывает экран.

Файловая система

Модуль NXT может читать и писать файлы, имеющиеся у него в флеш-памяти. Так что вы можете создать лог-файл с датчиков или читать числа во время выполнения программы. Единственное ограничение в количестве и размере файлов - это размер флеш-памяти. Для работы с файлами используются функции API, которые позволяют создавать, переименовывать, удалять и искать файлы, а также с конкретным файлом вы можете читать и писать в него текстовые строки, числа и отдельные байты. В следующем примере мы посмотрим, как создать файл, записать в него несколько строк и переименовать этот файл.

Сначала, программа удаляет файлы с именами, которые мы хотим использовать: вообще это плохая практика (приличнее будет сначала проверить существование файла, вручную удалить его, или выбрать другое имя для нашего рабочего файла), но в нашей простой ситуации мы можем не обращать внимание на это. Дальше программа создает наш файл функцией CreateFile("Danny.txt", 512, fileHandle), указывая имя, размер и переменную, куда NXT поместит свой внутренний идентификатор открытого файла.

После чего программа готовит строки и пишет их в файл с возвратом каретки в конце функцией WriteLnString(fileHandle,string, bytesWritten), в которой все параметры должны быть переменными. И в конце, файл закрывается и переименовывается.

Помните: файл должен быть явно закрыт перед тем как начать следующую операцию, так что если вы создали файл, вы можете писать в него, если вы хотите прочитать из него - надо его закрыть и открыть на чтение командой OpenFileRead(). И перед удалением/переименованием файла он тоже должен быть закрыт.

#define OK LDR_SUCCESS

task main(){

  byte fileHandle;

  short fileSize;

  short bytesWritten;

  string read;

  string write;

  DeleteFile("Danny.txt");

  DeleteFile("DannySays.txt");

  CreateFile("Danny.txt", 512, fileHandle);

  for(int i=2; i<=10; i++ ){

    write = "NXT is cool ";

    string tmp = NumToStr(i);

    write = StrCat(write,tmp," times!");

    WriteLnString(fileHandle,write, bytesWritten);

  }

  CloseFile(fileHandle);

  RenameFile("Danny.txt","DannySays.txt");

}

Чтобы увидеть, что получилось, зайдите через меню "BricxCC => Tools => NXT Explorer", в просмотрщик NXT-флеш-памяти,загрузите файл DannySays.txt на ПК и посмотрите, что внутри.

Посмотрите на следующий пример! Мы создадим таблицу ASCII-символов.

task main(){

  byte handle;

  if (CreateFile("ASCII.txt", 2048, handle) == NO_ERR) {

    for (int i=0; i < 256; i++) {

      string s = NumToStr(i);

      int slen = StrLen(s);

      WriteBytes(handle, s, slen);

      WriteLn(handle, i);

    }

    CloseFile(handle);

  }

}

Правда просто? Эта программа создает файл и если при этом не произошла ошибка - пишет в него числа от 0 до 255 (конвертируя их предварительно в соответствующие символы функцией WriteBytes(handle, s, slen), которая предоставляет путь писать в файл строки без возврата каретки); после чего пишет это же число функцией WriteLn(handle, value), которая уже добавляет в конец записанной строки возврат каретки.

Результат, который вы видите при открытии файла ASCII.txt текстовым редактором (например Блокнотом из Windows), содержит в каждой строке символ и его код записанный в десятичном виде.

Остались еще две важные функции, которые вы должны знать: ReadLnString для чтения строк из файлов и ReadLn для чтения чисел.

Теперь для примера использования первой функции мы создадим программу, в которой из главной задачи будет вызвана функция CreateRandomFile, создающая файл со случайными числами внутри (записанными в строковом представлении); вы можете закомментировать эту строку и использовать любой другой текстовый файл для этого примера.

После этого главная задача откроет этот файл на чтение, и до конца файла будет читать строку из файла, вызывая ReadLnString и показывать прочитанный текст.

В функции CreateRandomFile мы генерируем заданное количество случайных чисел, преобразуем их в строки и пишем их в файл.

Функция ReadLnString в качестве аргументов имеет внутренний идентификатор открытого файла и строковую переменную, в которую после вызова функции будет прочитанная строка, а функция вернет код ошибки, который мы используем для того, чтобы понять, что достигли конца файла.

#define FILE_LINES 10

sub CreateRandomFile(string fname, int lines){

  byte handle;

  string s;

  int bytesWritten;

  DeleteFile(fname);

  int fsize = lines*5;

  //create file with random data

  if(CreateFile(fname, fsize, handle) == NO_ERR) {

    int n;

    repeat(FILE_LINES) {

      int n = Random(0xFF);

      s = NumToStr(n);

      WriteLnString(handle,s,bytesWritten);

    }

    CloseFile(handle);

  }

}

task main(){

  byte handle;

  int fsize;

  string buf;

  bool eof = false;

  CreateRandomFile("rand.txt",FILE_LINES);

  if(OpenFileRead("rand.txt", fsize, handle) == NO_ERR) {

    TextOut(10,LCD_LINE2,"Filesize:");

    NumOut(65,LCD_LINE2,fsize);

    Wait(600);

    until (eof == true){ // read the text file till the end

      if(ReadLnString(handle,buf) != NO_ERR) eof = true;

      ClearScreen();

      TextOut(20,LCD_LINE3,buf);

      Wait(500);

    }

  }

  CloseFile(handle);

}

В последней программе я покажу вам, как читать числа из файла. Кроме того я покажу вам пример условной компиляции. В начале кода мы определим значение, которое не будет использоваться ни как макрос, ни как псевдоним, мы просто определим INT.

Вот директива препроцессора

#ifdef INT

…Code…

#endif

которая сообщает компилятору, что компилировать код внутри "#ifdef" нужно только если предварительно было определено значение INT. Так что если мы в начале программы объявим INT, скомпилируется задача "main" из первой половины кода, а если же мы определим LONG вместо INT, тогда будет скомпилирована вторая версия задачи "main".

Этот метод позволил мне в одной программе показать вам, как работать одной и той же функцией ReadLn(handle,val) с обоими типами чисел - int (16 бит) и long (32 бита).

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

Функция прочитает 2 байта из файла, если переданная переменная типа int, и 4 байта, если переменная типа long. Таким же образом вообще говоря можно читать и писать переменные типа bool.

#define INT // INT or LONG

#ifdef INT

task main () {

  byte handle, time = 0;

  int n, fsize,len, i;

  int in;

  DeleteFile("int.txt");

  CreateFile("int.txt",4096,handle);

  for (int i = 1000; i<=10000; i+=1000){

    WriteLn(handle,i);

  }

  CloseFile(handle);

  OpenFileRead("int.txt",fsize,handle);

  until (ReadLn(handle,in)!=NO_ERR){

    ClearScreen();

    NumOut(30,LCD_LINE5,in);

    Wait(500);

  }

  CloseFile(handle);

}

#endif

#ifdef LONG

task main () {

  byte handle, time = 0;

  int n, fsize,len, i;

  long in;

  DeleteFile("long.txt");

  CreateFile("long.txt",4096,handle);

  for (long i = 100000; i<=1000000; i+=50000){

    WriteLn(handle,i);

  }

  CloseFile(handle);

  OpenFileRead("long.txt",fsize,handle);

  until (ReadLn(handle,in)!=NO_ERR){

    ClearScreen();

    NumOut(30,LCD_LINE5,in);

    Wait(500);

  }

  CloseFile(handle);

}

#endif

Подводим итоги

В этой последней главе мы познакомились с дополнительными функциями модуля NXT: таймером высокого разрешения, графическим дисплеем и файловой системой.

Как определить цвет, когда датчик "врет"?

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

Один из способов, победить такое поведение датчика - снять показания с каждой из трех цветовых компонент: красной, зеленой и синей, так чтобы по их значения самостоятельно (собственным алгоритмом) попытаться определить какого же цвета предмет. Такой способ уже был описан вот в этом материале. Но дело в том, что подразумевается, что у нас есть достаточно много времени для определения цвета, производя последовательно 3 или даже 4 (замер освещенности без подсветки вообще), и датчик и предмет неподвижны относительно друг друга. А это не всегда возможно достичь, особенно в условиях робототехнических состязаний - когда время работы робота является критичной величиной.

Для языка программирования Not eXactly C, тоже есть подобный инструментарий, позволяющий получить значения цветовых компонент за раз. Делается это с помощью функции ReadSensorColorRaw.

task main() {

    SetSensorColorFull(S3);

    unsigned int rawData[];

    int result = ReadSensorColorRaw(S3, rawData);

    NumOut(8, LCD_LINE1, rawData[INPUT_RED]);

    NumOut(8, LCD_LINE2, rawData[INPUT_GREEN]);

    NumOut(8, LCD_LINE3, rawData[INPUT_BLUE]);

    until(ButtonPressed(BTNCENTER));

}

Данный функционал тоже производит измерения достаточно быстро:

task main() {

    SetSensorColorFull(S3);

    unsigned int rawData[];

    int result;

   

    unsigned long strt = CurrentTick();

    for(int i=0; i<5000; i++) {

        result = ReadSensorColorRaw(S3, rawData);

        NumOut(8, LCD_LINE1, rawData[INPUT_RED]);

        NumOut(8, LCD_LINE2, rawData[INPUT_GREEN]);

        NumOut(8, LCD_LINE3, rawData[INPUT_BLUE]);

    }

    NumOut(8, LCD_LINE5, CurrentTick() - strt);

    until(ButtonPressed(BTNCENTER));

}

Результат работы - 5000 итераций за 6,2 секунды.
Если необходимо сделать за один вызов и определение цвета и получить значения компонент, то можно использовать функцию SysColorSensorRead.

NXC: кнопочная интерактивность

Довольно часто те, кто начинает знакомится с языком NXC, сперва обращаются к широкоизвестному NXC Tutorial (на русском), написанному Daniele Benedettelli. Это довольно хорошее для первого знакомства с этим языком программирования пособие и дает представление о многих базовых возможностях языка.

Но тем не менее, некоторые широкоиспользуемые базовые области, к сожалению, пропущены. Например, цветовой сенсор и работа с кнопками NXT блока. И если работа в NXC с цветовым сенсором была уже освещена ранее, то пора закрыть пробел и во взаимодействии с кнопками.

task main ()

{

    //Вторая переменная, чтобы отслеживать изменения первой

    int count = 0, oldcount = -1;

    //Флаг, отслеживающий нажатие центроальной кнопки

    bool flExit = false;

   

    TextOut(0, LCD_LINE2, "Press");

    TextOut(0, LCD_LINE3, "<, > or Enter");

    while (!flExit)

    {

        //Если значение счетчика поменялось - вывести на экран

        if (count != oldcount)

        {

            oldcount = count;

            NumOut(10, LCD_LINE4, count);

        }

       

        //Нажата ли правая кнопка - увеличить счетчик

        if (ButtonPressed(BTNRIGHT, true))

        {

            if (count < 7)

                count++;

        }

        //Нажата ли левая кнопка - уменьшить счетчик

        else if (ButtonPressed(BTNLEFT, true))

        {

            if (count > 0)

                count--;

        }

        //Нажата ли центральная кнопка - выйти из цикла

        else if (ButtonPressed(BTNCENTER, true))

            flExit = true;

        //Небольшая пауза - короткое нажатие различается от долгого

        Wait(200);

    }

}

NXC: работаем с датчиками вращения мотора

При программировании Lego-роботов иногда необходимо проверить на сколько повернулся мотор. Например, чтобы определить не застрял ли он.

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

На самом деле, чаще всего, все ограничится использованием двух из них:

  • MotorRotationCount - позволяет получить текущее значение с датчика вращения соответствующего мотора.
  • ResetRotationCount - сбрасывает текущее значение датчика вращения соответствующего мотора в 0.

Имеет смысл пояснить использование этих двух функций примером.

sub MoveHeadBack()

{

    OnRev(HEAD, HEAD_SPEED_REV);

    int Start;

    do {

        Start = MotorRotationCount(HEAD);

        Wait(100);

    } while (abs(MotorRotationCount(HEAD) - Start) > 5)

    Coast(HEAD);

    Wait(200);

    ResetRotationCount(HEAD);

    Wait(1);

}

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

В конце функции происходит сброс счетчика поворотов мотора (просто для примера, на самом деле он здесь не обязателен).
Заметьте, что после сброса стоит пауза в 1 милисекунду, наличие которой может вызвать обоснованные вопросы.

Дело в том, что подобно функциям
OnFwd() и OnRev(), сброс счетчика имеет асинхронную природу. Функция не дожидается реального сброса показаний сенсора, а просто модифицирует нужную область памяти, подразумевая, что модуль Output, запущенный виртуальной машиной блока NXT, обработает изменение памяти соответствующим образом, что приведет к реальному сбросу счетчиков.
Так вот, по своей природе, виртуальная машина NXT блока позволяет запускаться всем модулям не чаще, чем один раз в 1 мс. И если
 ResetRotationCount() вызывается в самом конце милисекундного интервала, то Output модуль вызовется практически сразу же после этой функции, что приведет почти к мгновенному сбросу счетчиков. А если ResetRotationCount() вызывается в начале этого интервала, то последующий вызов, например, MotorRotationCount() будет показывать старые значения и будет казаться, что ResetRotationCount() как будто бы не работает (англоязычное объяснение, описанного выше, можно найти на багртрекере BricxCC).
Те, кто привык все понимать через анализ рабочего кода, могут рассмотреть два примера:

  • Внешне выглядит, что показания счетчика не сбрасываются
  • OnRev(OUT_A, 50);
  • Wait(1000);
  • TextOut(0, LCD_LINE1, MotorRotationCount(OUT_A));
  • ResetRotationCount(OUT_A);

TextOut(0, LCD_LINE2, MotorRotationCount(OUT_A));

  • Добавление паузы решает проблему
  • OnRev(OUT_A, 50);
  • Wait(1000);
  • TextOut(0, LCD_LINE1, MotorRotationCount(OUT_A));
  • ResetRotationCount(OUT_A);
  • Wait(1);

TextOut(0, LCD_LINE2, MotorRotationCount(OUT_A));

NXC: работаем с цветовым сенсором.

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

Поэтому, если вы программируете на текстовых средах, довольно часто для поиска решения проблемы по работе какого-то сенсора, которая бы на NXT-G не заняла бы у вас и одной минуты, необходимо потратить значительное количество времени.
Так, например, работая с языком NXC, вы еще достаточно легко можете найти готовый код для работы со стандартным цветовым сенсором:

task main()

{

    SetSensorColorFull(S1);

    ColorSensorReadType csr;

    csr.Port = S1;

    while(1)

    {

        SysColorSensorRead(csr);

        if (csr.Result == NO_ERR) {

            NumOut(0, LCD_LINE1, csr.ColorValue);

        }

        Wait(1000);

    }

}

В то время как, поиск примера по работе с ним в режиме светового сенсора займет определенное количество времени.
Чтобы облегчить эту задачу, можете изучить приведенный ниже пример:

task main()

{

    SetSensorColorRed(S1);

    Wait(500);

    while(1)

    {

        NumOut(0, LCD_LINE1, SENSOR_1);

        Wait(300);

    }

}

И на будущее, если у вас возникли какаие-то вопросы связанные с использованием того или иного языка программирования - идите на форум The MindBOARDS Community. И если вы там не найдете готовый ответ - не стесняйтесь, спрашивайте. Там сидит довольно много широко известных в Lego мире разработчиков, которые смогут дать вам квалифицированный ответ.

NXC: датчики, енкодеры, кнопки - взаимодействуем с внешним миром

Программирование робота, в большинстве случаев, - изменение поведения робота как реакция на информацию, пришедшую к управляющему устройству с датчиков и сенсоров. Эта заметка рассматривает примеры опроса датчиков в языке Not eXactly C, а также некоторые особенности, которые необходимо учитывать при работе с ними.

Пример 1. Датчик расстояния
Для датчика расстояния (ультразвуковой) используются специальные функции для его инициализации и опроса.

task main() {

    /*

    Робот ждет пока перед ним не окажется предмет (ближе чем 20 см.), после

    чего отодвигается от предмета на 50 см.

    */

    //Говорим, что медленный (ультразвуковой) сенсор установлен в первый

    //порт.

    SetSensorLowspeed(S1);

    Wait(100);

    while (true) {

        //Опрашиваем порт первый, как ультразвуковой датчик

        //Ждем, пока расстояние до предмета не станет меньше 20 см.

        until (SensorUS(S1) < 20);

        //Отодвигаемся назад до тех пор, пока расстояние до предмета не

        //станет больше 50 см.

        OnRev(OUT_AB, 50);

        until (SensorUS(S1) > 50);

        //Явно останавливаем двигатели

        Off(OUT_AB);

    }

}

Пример 2. Измерение отраженного света.
Работа датчика в режиме измерения отраженного света (пространство перед датчиком дополнительно освещается светодиодом) позволяет повысить его чувствительность. Без использования этого режима, решение такой задачи как распознавание цвета или градаций серого была бы довольно трудно выполнима – обычно окружающий свет не имеет достаточной интенсивности, поэтому соседние градации цветов сливались бы один цвет при измерении. К тому же, измерения при неравномерном освещении давали бы разный результат для одного и того же предмета. Поэтому использование дополнительной подсветки – наиболее частый вариант при управлении роботом с помощью датчика освещенности.

task main() {

    /*

    Робот двигается пока поверхность под световым сенсором не потемнеет.

    */

    //Говорим, что cветовой сенсор установлен в третий порт.

    SetSensorLight(S3);

    Wait(500);

    //Двигаемся вперед, пока значение сенсора в третьем порту не станет

    //меньше 55 процентов.

    OnFwd(OUT_AB, 50);

    until(Sensor(S3) < 55);

    Off(OUT_AB);

}

Пример 3. Измерение окружающего света
В некоторых задачах, дополнительная подсветка только мешает. Например, определить какое место в комнате самое темное. Для этого нужно измерять именно окружающее освещение.

task main() {

    /*

    Робот отображает на экране текущую освещенность.

    */

    //Говорим, что cветовой сенсор установлен в третий порт

    //лампа подсветки - неактивна

    SetSensorType(S3, SENSOR_TYPE_LIGHT_INACTIVE);

    //Сенсор, устанавливаемый через SetSensorType по-умолчанию показывает

    //ненормализованные данные (не путать с RAW). Переводим, его в режим для

    //считывания процентов.

    SetSensorMode(S3, SENSOR_MODE_PERCENT);

    Wait(500);

    while(true) {

       //Выводим на эркан текущие показатели сенсора, перед выводом -

       //очищаем экран (4-ый параметр - true)

       NumOut(0, LCD_LINE1, Sensor(S3), true);

       Wait(50);

    }

}

Пример 4. Использование необработанных данных
По умолчанию, датчики выдают измерения в процентах. В то время как NXC предоставляет возможность использовать необработанные (RAW) данные. Преимущество – очевидно – поскольку необработанные данные могут быть в диапазоне от 0 до 1023, измерения будут в 10 раз чувствительнее.

task main() {

    /*

    Робот отображает на экране показания отраженного света.

   

    Темная поверхность:

        1-ая строка (проценты): значения маленькие (<50%)

        2-ая строка (raw): значения большие (>600)

    Светлая поверхность:

        1-ая строка (проценты): значения маленькие (>50%)

        2-ая строка (raw): значения большие (<400)

    */

   

    //Говорим, что cветовой сенсор установлен в третий порт

    SetSensorLight(S3);

    Wait(500);

    while(true) {

       //Выводим на эркан в первой строке текущие показатели сенсора в

       //процентах, перед выводом - очищаем эркан (4-ый параметр - true)

       NumOut(0, LCD_LINE1, Sensor(S3), true);

       //Выводим на эркан во второй строке текущие необработанные показатели

       //сенсора, экран не очищается (4-ый параметр не указывается - берется

       //значение по-умолчанию false)

       NumOut(0, LCD_LINE2, SensorRaw(S3));

       //Чтобы избежать мерцания цифр на экране, делаем небольшую паузу.

       Wait(50);

    }

}

Пример 5. Датчик вращения двигателя (енкодер)
Поскольку датчик вращения двигателя (енкодер) скрыт от глаз конструктора, часто о его существовании забывают. Тем не менее, с помощью этого датчика можно решать множество задач: для определения столкновения с препятствием, для синхронизированного движения моторов, для контроля положения двигателя в одном положении с использованием регуляторов и т.п.

task main() {

    /*

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

    поворота двигателя с небольшой паузой.

    Поскольку пауза происходит параллельно движению двигателя (использование

    функции OnFwd), оценивается поворот двигателя, произошедший во время

    этой паузы.

    Если поворот меньше ожидаемого, то скорее всего робот наткнулся на

    препятствие - препятствие мешает провернуться двигателю. После

    обнаружения такой ситуации - движение прекращается.

    */

    int Start;

    int Diff;

    int Desired;

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

    //поворот двигателя во время паузы и взять этот поворот за эталон

    int iter = 0;

    OnFwd(OUT_AB, 40);

    do {

        //Считываем показание датчика поворота перед паузой

        Start = MotorRotationCount(OUT_A);

        Wait(100);

        //Считываем показание датчика после паузы и определяем угол поворота

        Diff = MotorRotationCount(OUT_A) - Start;

        //Если это первая итерация цикла - принять угол поворота за эталон

        if (iter == 0) {

            Desired = Diff * 8 / 10;

            //Указать, что больше в этот 'if' заходить не надо

            iter = 1;

        }

    } while (Diff > Desired) //Если угол поворота двигателя меньше эталона

    Off(OUT_AB);

}


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

#define OneSecond 1000

task main() {

    /*

    В каждой итерации цикла опрашивается датчик расстояния. Количество

    итераций определяется выяснением, сколько миллисекунд прошло с начала

    работы программы. Как только количество миллисекунд становится больше

    1000 - цикл прерывается.

    Поскольку ультразвуковой сенсор является низкоскоростным устройством,

    его опрос вызывает задержку.

    Результат показывает, что ультразвуковой сенсор может быть опрошен 34

    раза за одну секунду.

    Т.е. задержка опроса сенсора составляет - 1000/34 = 30 миллисекунд.

    */

    //Указываем, что низкоскоростной сенсор (ультразвуковой) установлен в

    //первый порт

    SetSensorLowspeed(S1);

    Wait(100);

    //Считываем начальное показание внутреннего таймера

    unsigned long Start = CurrentTick();

    unsigned long Diff;

    unsigned long i = 0, value;

    do {

        //Опрашиваем сенсор, его показания не важны для данной программы,

        //важен факт его вызова

        value = SensorUS(S1);

        //Вычисляем разницу между начальным показанием таймера и текущим

        Diff = CurrentTick() - Start;

        i++;

    } while (Diff < OneSecond) //Повторять, пока разница - меньше секунды

    NumOut(0, LCD_LINE1, i);

    Wait(3000);

}

Пример 7. Определение цвета
Работа с датчиком цвета практически не отличается от работы с датчиком освещенности, следует только помнить, что в датчике цвета светодиодов три.

task main()

{

    /Инициализация датчика в первом порту - включить все три светодиода

    SetSensorColorFull(S1);

    while(1)

    {

        //Опрашиваем датчик и выводим на экран определившийся цвет

        NumOut(0, LCD_LINE1, Sensor(S1));

        Wait(1000);

    }

}



Пример 8. Опрос датчика цвета в режиме датчика освещенности
В определенных задачах датчик цвета может заменить датчик освещенности.

task main()

{

    //Инициализация датчика в первом порту - включить красный светодиод

    SetSensorColorRed(S1);

    while(1)

    {

        //Опрашиваем датчик и выводим на экран значения отраженного

        //света в процентах и "сырых" показаниях

        NumOut(0, LCD_LINE1, Sensor(S1));

        NumOut(0, LCD_LINE2, SensorRaw(S1));

        Wait(1000);

    }

}

NXC: использование циклов

http://for-schoolboy.ru/media/images/Operatoryi-organizatsii-tsikla/15.jpg



Как и в обычном C, в NXC поддерживается несколько видов циклов: for, while, do ... while, repeat.

Есть даже не совсем обычная команда until, которая является макросом к использованию while().

В этой заметке основной акцент сделан не на стандартное поведение программы при использовании циклов, а на особенности, существующие в NXC.

Пример 1. while() как функция
В NXC while может быть использован и как стандартный цикл "выполнять пока", внутри которого выполняются различные действия, так и как функция "выполнять пока", которая возвращает управление программе, только тогда когда не выполняется условие, переданное в данную функцию.

task main() {

    /*

    Программа ниже может быть описана следующим образом:

    - начать движение прямо

    - двигаться до тех пор пока до препятствия больше 10 см.

    - остановится как только до препятствия осталось меньше (либо равно)

      10 см.

   

    Следует отметить, что команда "движение вперед" выполняется не цикле, но

    в цикле уже опрашивается сенсор расcтояния.

    */

    SetSensorLowspeed(S1);

    Wait(100);

    OnFwd(OUT_AB, 50);

    while (SensorUS(S1) > 10);

    Off(OUT_AB);

}

Пример 2. while() в одну строчку
Реализация
 while() в NXC также поддерживает вызов с блоком повторения, записанным одной командой.

task main() {

    /*

    Движение будет происходить до тех пор пока расстояние до препятствия

    Больше 10 см. Остановка двигателей (Off) уже на другой строчке - он не

    Выполняется в цикле.

    Поскольку для движения используется RotateMotor(), который отдает

    Управление следующей итерации цикла только после того как повернет

    двигатели на 180 градусов, проверка на расстояние может произойти уже

    когда до препятствия останется уже гораздо меньше расстояния. Т.е. за

    эти 180 градусов, робот может пройти через рубеж в 10 см.

    */

    SetSensorLowspeed(S1);

    Wait(100);

    while (SensorUS(S1) > 10)

        RotateMotor(OUT_AB, 50, 180);

    Off(OUT_AB);

}

Пример 3. until()
Как уже было сказано ранее, until() – макрос к функции while(). По сути, он позволяет выполнять повторять предыдущее действие до тех пор, пока условие неверно.

task main() {

    /*

    Движение назад будет происходить до тех пор, пока расстояние до

    препятствия не станет больше 30 см.

    */

    SetSensorLowspeed(S1);

    Wait(100);

    OnRev(OUT_AB, 50);

    until (SensorUS(S1) > 30);

    Off(OUT_AB);

}

Пример 4. Скорость исполнения цикла.
В данном примере не рассматривается никакая особенность циклов. Зато он предназначен для получения ответа на вопрос "сколько итераций цикла исполняется в течение одной секунды".

#define OneSecond 1000

task main() {

    /*

    Перед началом цикла засекаем текущее состояние таймера (Start).

    Затем, проверяем разницу между этим значением и новым состоянием таймера

    Как только разница - 1000 милисикунд - останавливаем цикл.

    Полученные данные выводим на экран.

    */

    Wait(100);

    unsigned long Start = CurrentTick();

    unsigned long Diff;

    unsigned long i = 0;

    do {

        Diff = CurrentTick() - Start;

        i++;

    } while (Diff < OneSecond)

    //     Координата X

    //     |  Координата Y (задается константой, обозначающей номер строки)

    //     |  |          Значение для вывода на экран

    //     |  |          |

    NumOut(0, LCD_LINE1, Start);

    NumOut(0, LCD_LINE2, i);

    Wait(3000);

}

NXC: повороты - практика программирования моторов

При задании сложных траекторий движения робота развороты и повороты - неотъемлемая часть программы. В этой статье будут рассматриваться способы, как программируются эти элементы движения с помощью функций и команд языка Not eXactly C рассмотренных ранее.

http://upload.wikimedia.org/wikipedia/commons/thumb/e/e5/Korean_Traffic_sign_%28Left_Turn%29.svg/395px-Korean_Traffic_sign_%28Left_Turn%29.svg.png

Пример 1. Поворот одним двигателем
На самом деле в этом примере рассматриваются два способа поворота одним двигателем.
В качестве входных данных для обоих способов, задается необходимость выполнения разворота вправо.

Итак, первый способ.
Поворот одним двигателем вправо. Ось вращения - правое колесо.

task main() {

    /*

    Робот крутится вправо до тех пор, пока расстояние до препятствия не

    станет меньше 20 см. Вращение происходит за счет того, что правый мотор

    (OUT_A) не двигается, а левый мотор (OUT_B) двигается вперед. Поэтому

    робот, как бы крутится вокруг правого колеса.

    */

    SetSensorLowspeed(S1);

    Wait(100);

    //Вместо двух моторов, указываем только один.

    OnFwd(OUT_B, 50);

    until (SensorUS(S1) < 20);

    Off(OUT_AB);

}

Второй способ –
Поворот вправо "задним ходом". Вращение вокруг левого колеса.

task main() {

    /*

    Робот крутится вправо до тех пор, пока расстояние до препятствия не

    станет меньше 20 см. Вращение происходит за счет движения правого мотора

    (OUT_А) назад, в то время как левый мотор (OUT_B) остается неподвижным.

    Поэтому робот, как бы пятится назад вокруг левого колеса.

    */

    SetSensorLowspeed(S1);

    Wait(100);

    //Вместо двух моторов, указываем только один.

    //Мотор двигается назад.

    OnRev(OUT_A, 50);

    until (SensorUS(S1) < 20);

    Off(OUT_AB);

}

Пример 2. Поворот двумя двигателями
Основной недостаток поворота одним двигателем - небольшая скорость: усилия одного двигателя направлены и на перемещение тележки и на преодоление силы сопротивления оказываемой неподвижным колесом. Поэтому, популярностью пользуется быстрый поворот вокруг своей оси (точнее ось вращения проходит между колесами).
В данном примере рассматривается поворот робота двумя двигателями влево.

task main() {

    /*

    Робот крутится влево до тех пор, пока расстояние до преграды не станет

    меньше 20 см. Вращение происходит за счет движения обеими моторами –

    правый мотор двигается вперед, левый мотор двигается назад. За такое

    распределение движения между моторами отвечает третий параметр в

    OnFwdSync().

    */

    SetSensorLowspeed(S1);

    Wait(100);

    //        Двигатели

    //           |    мощность

    //           |    |   распределение нагрузки между моторами

    //           |    |   |

    OnFwdSync(OUT_AB, 50, -100);

    until (SensorUS(S1) < 20);

    Off(OUT_AB);

}

Пример 3. Распределение мощности при управлении двумя двигателями
В прошлом примере вместе с функцией
 OnFwdSync() использовался параметр "распределение нагрузки между моторами". Этот параметр имеет смысл только тогда, когда происходит управление двумя двигателями. Он позволяет в одном числе выразить не только, насколько быстро будет крутиться один мотор относительно другого, но также и направление вращения.

task main() {

    SetSensorLowspeed(S1);

    Wait(100);

    /*

    Первым действием робот вращается влево, правое колесо крутится медленней

    левого.

    */

    //          Двигатели

    //             |      мощность

    //             |      |   угол поворота оси мотора в градусах

    //             |      |   |    распределение движения между моторами

    //             |      |   |    |  синхронизация моторов

    //             |      |   |    |  |     включать торможение после

    //             |      |   |    |  |     |  окончания движения или

    //             |      |   |    |  |     |  останавливаться своим ходом

    RotateMotorEx(OUT_AB, 50, 360, -60, true, true);

    Wait(1000);

    /*

    Сейчас, робот вращается влево, правый мотор стоит, левый мотор двигается

    назад.

    */

    RotateMotorEx(OUT_AB, 50, -360, -50, true, true);

    Wait(1000);

    /*

    Робот вращается влево двигаясь, правый мотор двигается быстрее левого.

    */

    RotateMotorEx(OUT_AB, 50, 360, -25, true, true);

    Wait(1000);

    /*

    Робот двигается без поворотов, оба колеса двигаются одинаково назад.

    */

    RotateMotorEx(OUT_AB, 50, -360, 0, true, true);

}

Пример 4. Альтернативный поворот двумя двигателями
Предыдущий пример показал, что движение при использовании параметра "распределение нагрузки между моторами" по сути – работа двух двигателей с разной скоростью и разным направлением. Следовательно, его можно запрограммировать и без использования этого параметра.

task main() {

    /*

    Робот крутится влево до тех пор, пока расстояние до преграды не станет

    меньше 20 см.

    Вращение вокруг своей оси происходит без использования команд, которые

    принимают парамерт распределения движения между моторами.

    Заместо этого, используется знание того, что команды OnFwd/OnRev отдают

    управление следующим командам сразу после запуска моторов.

    Таким образом, сначала запускается один двигатель, потом сразу же

    запускается второй двигатель. Направление движения каждого двигателя и

    мощность, подаваемая на каждый из них, задают направление и форму

    поворота.

    */

    SetSensorLowspeed(S1);

    Wait(100);

    //Правый мотор двигается вперед

    OnFwd(OUT_A, 50);

    //Левый мотор двигается назад с такой же мощностью как и правый.

    OnRev(OUT_B, 50);

    until (SensorUS(S1) < 20);

    Off(OUT_AB);

}

Сортировка данных на NXT

В начале этой неделе я опубликовал вопрос: как в произвольном тексте найти 10 наиболее часто используемых слов? В программах для NXT обработка кучи данных с сенсоров является обыденным делом, но что если тебе надо узнать только 10 самых больших или маленьких значений? Как ты будешь решать этот вопрос? В языке RobotC нет специальных функций для сортировки; в NXC есть единственная ArraySort функция, упорядочивающая численные массивы по возрастанию. Поэтому в данной статье я решил провести небольшое исследование различных алгоритмов сортировки. Я помню эту классную демонстрацию работы алгоритмов, которая наглядно показывает различия в принципах сортировки. Я подумал, что будет реально здорово, если я сделаю тоже самое на NXC. И я сделал это.

Пузырьковая сортировка


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

for(int i = 0; i < MAX_NUMBERS; i++)

{

  for(int j = 0; j < (MAX_NUMBERS - 1); j++)

  {

    if (arr[j] > arr[j+1])

    {

      temp = arr[j];

      arr[j] = arr[j+1];

      arr[j+1] = temp;

    }

  }

}

№ итерации

Исходный массив

10

5

2

7

1

9

1

5

10

2

7

1

9

2

5

2

10

7

1

9

3

5

2

7

10

1

9

4

5

2

7

1

10

9

5

5

2

7

1

9

10

6

2

5

7

1

9

10

7

2

5

1

7

9

10

8

2

1

5

7

9

10

9

1

2

5

7

9

10

Единственным его недостатком является то, что он достаточно медленный. Его вычислительная сложность равна O(n2). Это означает, что при увеличении массива время работы алгоритма будет расти экспоненциально. Например, массив из 11 показаний сенсоров будет отсортирован на 20% медленнее, чем массив из 10 элементов, а обработка 50 замеров потребуют в 25 раз больше времени.

Сортировка вставками


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

for (i = 1 ; i < MAX_NUMBERS ; i++ )

{

  for (j = 0 ; j < i ; j++ )

  {

    if ( arr[j] > arr[i] )

    {

      temp = arr[j] ;

      arr[j] = arr[i] ;

 

      for (k = i ; k > j ; k-- )

      {

        arr[k] = arr[k - 1] ;

      }

      arr[k + 1] = temp ;

    }

  }

}


В таблице ниже кроме самих итераций алгоритма я покажу, чему равнялась переменная temp.

№ итерации 

temp

Исходный массив

10

5

2

7

1

9

-

1

5

5

2

7

1

9

10

2

5

10

2

7

1

9

-

3

2

10

10

7

1

9

5

4

2

2

10

7

1

9

5

5

2

5

10

7

1

9

-

6

2

5

7

7

1

9

10

7

2

5

7

10

1

9

-

8

1

5

7

10

10

9

2

9

1

5

7

7

10

9

2

10

1

5

5

7

10

9

2

11

1

1

5

7

10

9

2

12

1

2

5

7

10

9

-

13

1

2

5

7

9

9

10

14

1

2

5

7

9

10

Сортировка Шелла


Сортировка Шелла является модификацией алгоритма сортировки вставками. Разница вот в чем: вместо того, чтобы сравнивать соседние элементы, как в сортировке пузырьком, сортировка Шелла несколько раз сравнивает элементы, находящиеся на определенном расстоянии друг от друга (зададим расстояние буквой m). Это расстояние равняется половине размера входного массива и на каждой последующей итерации m уменьшается вдвое.

В нашем примере сначала будут сортироваться между собой элементы, отстоящие друг от друга на расстоянии 3 элемента (6 / 2 = 3), а затем на расстоянии 1-го элемента (3 / 2 = 1 - целочисленное деление).

for(m = MAX_NUMBERS/2 ; m > 0; m /= 2)

{

  for(j = m; j < MAX_NUMBERS; j++)

  {

    for(i = j - m; i >= 0; i -= m)

    {

      if(arr[i + m] >= arr[i])

        break;

      else

      {

        mid = arr[i];

        arr[i] = arr[i + m];

        arr[i + m] = mid;

      }

    }

  }

}


В таблице ниже вы можете увидеть, как это работает:

№ итерации 

Исходный массив

10

5

2

7

1

9

1

7

5

2

10

1

9

2

7

1

2

10

5

9

3

1

7

2

10

5

9

4

1

2

7

10

5

9

5

1

2

7

5

10

9

6

1

2

5

7

10

9

7

1

2

5

7

9

10



Предварительный просмотр:

Положение

по проведению конкурса -защиты творческих проектов   по робототехнике «Мой Луноход»

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

  1. Участники конкурса

К участию в конкурсе приглашаются команды учащихся 4-11 классов. Команда состоит из двух человек. Количество команд от учреждения не ограниченно.

Результаты подводятся по двум возрастным группам:

  • учащиеся 4-7 классов,
  • учащиеся 8-11 классов.

  1. Порядок проведения выставки-конкурса

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

Команды представляют свою конструкцию в действии, комментируют ее работу.

Каждая представленная конструкция должна сопровождаться техническим описанием, которое включает в себя:

  1. титульный лист (учреждение, название конструкции, авторы, руководитель),
  2. описание назначения конструкции,
  3. краткое описание принципа действия конструкции.
  4. фото конструкции.

Конкурса проводится  12 апреля  2014 года, в 15.00 в ЗБОУ ЗДТДиМ каб № 306

Заявки команд на участие принимаются до 10 апреля по адресу: konkursDVTV@rambler.ru 

В заявке указать учреждение, состав команд, имя руководителя (полностью).

  1. Порядок награждения победителей

Победители награждаются дипломами ГБОУ ЗДТДиМ. Результаты и имена победителей по окончании конкурса будут опубликованы на сайте http://dvtdim.dop.mskobr.ru/

Телефон для справок: 8(903) 125-20-34

Ответственный: Косицын  Сергей Юрьевич


Предварительный просмотр:


Подписи к слайдам:

Слайд 1

Тест : Введение в конструирование. Автор педагог дополнительного образования Косицын Сергей Юрьевич 2013 В рамках реализации дополнительной общеобразовательной программы «Робототехника» 1 год обучения

Слайд 2

Вопрос 1 Какую из этих конструкций можно назвать устойчивой? А . Велосипед Б . Подвесной мост В. Карточный домик

Слайд 3

Вопрос 2 Выберите правильный вариант. В независимой подвеске два колеса А. соединены общей осью. Б. подвешены независимо друг от друга. В. Возможны оба варианта (А и Б). Г. соединены ремённой передачей.

Слайд 4

Вопрос 3 Выберите конструкции , в которых присутствует независимая подвеска: Г . магазинная тележка Б . Хаммер Мародер (внедорожник) А . Газонокосилка В . Детская коляска

Слайд 5

Вопрос 4 Выберите верное утверждение: А. Чем длиннее рычаг, тем проще на него нажимать. Б. Чем длиннее рычаг, тем сложнее на него нажимать. В. Сила нажатия не зависит от длины рычага. Г. Сила нажатия зависит от потоков космической радиации.

Слайд 6

Вопрос 5 Какая из этих конструкция дает выигрыш в силе? А. Весы В. Лом Б. рычаг коробки передач в Б угатти В ейрон

Слайд 7

Вопрос 6 Из каких элементов состоит зубчатая передача? А – пятерёнки Б – шестерёнки В – семирёнки Г – восьмирёнки Д - шкивы

Слайд 8

Вопрос 7 У первого зубчатого колеса 10 зубьев, а у второго – 25. Первое зубчатое колесо крутит второе. Как, технически, правильно они называются? Поставьте в соответствие: Первое Второе А. Шестерня Б. Зубчатое колесо В. Ведущее колесо Г. Ведомое колесо

Слайд 9

Вопрос 8 От чего зависит передаточное число шестерни? А – от количества зубьев Б – от радиуса самого колеса В – от скорости его вращения Г – от его веса

Слайд 10

Вопрос 9 Какие из этих предметов водят в состав ремённой передачи? А. Шестерёнка В. Приводной ремень Б. Шкив Г. Цепь

Слайд 11

Вопрос 10 В какой из этих конструкций используется ремённая передача? В. Велосипед А. Конвейерная лента Б. Наручные часы

Слайд 12

Практическое задание A – Зубчатая передача B – Зависимая и независимая подвески C – Рычаг D – Ремённая передача


Предварительный просмотр:


Подписи к слайдам:

Слайд 1

Тест: Информация и её свойства. Информационные процессы. Автор педагог дополнительного образования Косицын Сергей Юрьевич 2013 В рамках реализации дополнительной общеобразовательной программы «Робототехника» 1 год обучения

Слайд 2

Вопрос 1 Что такое информация? А) Данные Б) Факты В) Совокупность образов и знаний Г) Инородная формация

Слайд 3

Вопрос 2 Выберите из предметов датчик воспринимающий информацию: А) микрофон Б) прожектор В) колонки Г) дымовая машина

Слайд 4

Вопрос 3 По способу восприятия человеком информация бывает: А) Визуальная Д) Текстильная Б) Обонятельная Е) Аудиальная В) Обаятельная Ж) Зодиакальная Г) Тактильная З) Вкусовая Выберите несколько вариантов.

Слайд 5

Вопрос 4 Какими свойствами обладает информация? А) Бесполезность и непонятность Б) Объективность и достоверность В) Аккуратность и честолюбие Г) Субъективность и преждевременность

Слайд 6

Вопрос 5 Что такое информация для человека? А) Содержание сигналов из различных источников Б) Машинный код В) Материал из В икипедии - свободной энциклопедии Г) Паспорт

Слайд 7

Вопрос 6 Выберите неверный ответ: А) Если вы собираетесь провести выходной день на природе, то что будет своевременной информацией для вас: с ведения о погоде в такой же день прошлого года п рогноз погоды на выходной день Б) О правилах дорожного движения каждый водитель автомобиля: обязан иметь полную информацию м ожет не иметь никакого представления

Слайд 8

Вопрос 7 Информационные процессы это: А) Изменение и использование информации Б) Поиск информации В) Сокрытие информации Г) Утеря информации

Слайд 9

Вопрос 8 Выберите из списка только основные информационные процессы А) сбор информации Б) кодирование информации В) передача информации Г) кража информации Д) представление информации Е) вывод информации Выберите несколько вариантов

Слайд 10

Вопрос 9 Процесс хранении информации и процесс сохранения информации: А) похожие процессы Б) разные процессы В) бесполезные процессы Г) неизученные процессы

Слайд 11

Вопрос 10 Как выглядит процесс передачи информации? А) Канал связи Б) Приёмник информации В) Кодирующее устройство Г) Декодирующее устройство Д) Источник информации

Слайд 12

Практическое задание Выполните самостоятельную работу



Предварительный просмотр:

Самостоятельная работа

к тесту «Информация и её свойства. Информационные процессы»

В рамках реализации

дополнительной общеобразовательной

программы «Робототехника»

1 год обучения

  1. Включите компьютер.
  2. Откройте папку «Мой компьютер», «Мои документы», «Корзина» и разместить их на рабочем столе.
  3. Запустить стандартные программы операционной системы:
  • Пуск – все программы – стандартные – Paint
  • Пуск – все программы – стандартные – Калькулятор
  • Пуск – все программы – стандартные – WordPad
  • Пуск – все программы – стандартные – Блокнот
  1. Переключиться между работающими программами:
  • Калькулятор – Блокнот – Paint – WordPad
  1. Сверните все окна.
  2. Восстановите все окна.
  3. Разверните все окна на весь экран.
  4. Переключитесь между окнами на панели задач.
  5. Закройте все окна.
  6. Выключите компьютер.

Предварительный просмотр:


Подписи к слайдам:

Слайд 1

ВИКТОРИНА знатоков «Элементы легоконструкций и механизмов» В рамках проведения конкурса по робототехники «Новогодние конструкции». Декабрь 2013 Автор педагог дополнительного образования Косицын Сергей Юрьевич

Слайд 2

Вопрос 1 Какие из представленных деталей называются балками? 4 1 2 5 3

Слайд 3

Вопрос 2 В каждой из конструкций укажите вид передачи: А) Зубчатая Б) Ременная 2 1 3

Слайд 4

Вопрос 3 Какие из представленных деталей называются штивтами ? 4 1 2 5 3

Слайд 5

Вопрос 4 Как называется механизм, изображенный на рисунке? А) Буровой Б) Храповой В) Зубчатый Г) Осевой

Слайд 6

Вопрос 5 Сколько данных штифтов можно вставить в данную изогнутую балку? Написать для каждого отдельно. 1 2

Слайд 7

Вопрос 6 Из предложенных осей выберите ту (те), на которую( ые ) можно нанизать 1 втулку и 2 удлинителя оси. 4 1 2 5 3

Слайд 8

Вопрос 7 Угол какого из этих фиксаторов составляет 90 о ? 4 1 2 5 3 6

Слайд 9

Вопрос 8 Найдите элементы червячной передачи. 4 1 2 5 3

Слайд 10

Вопрос 9 В каком из положений усилие больше? 2 1

Слайд 11

Вопрос 10 В какой из представленных конструкций передаточное число самое низкое? 4 1 2 3



Предварительный просмотр:

Положение

по проведению соревнований по робототехнике. Программирование автономной системы «Робо-сумо»

Цель соревнований:

Демонстрация навыков программирования роботов выполненных на базе конструкторов ЛЕГО Mindstorm для достижения поставленной цели.

Задачи соревнований: 

  • Развитие информационно-коммуникативных компетенций и инженерно-творческого потенциала учащихся.
  • Популяризация возможностей использования конструктора Лего, как одного из средств новых технологий в обучении и развитии детей.
  • Развитие коммуникативной компетентности школьников и дошкольников на основе организации совместной продуктивной деятельности (умения работать над проектом в команде, эффективно распределять обязанности, развитие навыков межличностного общения и коллективного творчества)
  • Предоставить возможность развивать творческие способности детей, познавательный интерес, расширение кругозора, выявлять одарённых, талантливых детей, обладающими нестандартным мышлением, способностями к конструктивной деятельности

Соревнование проводится  15 ноября  2014 года, в 15.00 в ЗБОУ ЗДТДиМ (мягкое фойе).

Регламент соревнований по робо-сумо

К участию в соревнованиях приглашаются школьники в возрасте от 7 до 17 лет, занимающиеся с роботами только из наборов ЛЕГО Mindstorms.

Регистрация участников и инспекция робота.

  1. Регистрация участников соревнований проводится с учетом предварительных заявок  (заявки команд на участие принимаются до 14 ноября по адресу: konkursDVTV@rambler.ru (см. приложение №1)
  2. Во время регистрации участников соревнований проводится процедура  соответствия конструкции робота требованиям предъявляемым в данных соревнованиях.
  3. Участник соревнований должен поместить  своего робота в инспекционную область. После подтверждения судьи, что робот соответствуют всем требованиям, он допускается к соревнованиям. (см. приложение №2 Технические требования к роботу)
  4. Если при осмотре робота будет найдено нарушение в конструкции, то судья даст 3 минуты на устранение нарушения. Однако, если нарушение не будет устранено в течение этого времени, робот не сможет участвовать в состязании.
  5. У одного спортсмена  может быть несколько роботов участников.

Правила проведения соревнований

  1. Состязание проходит между двумя автономными роботами. Цель состязания - вытолкнуть робота-противника за пределы ринга.
  2. Поединок состоит из трех раундов и проводится до 2-х побед одного из роботов.
  3. Чистое игровое время раунда 1,5 минуты (90 секунд), за исключением специального решения судьи. В игровое время не входят технические задержки и игровые паузы. По  требованию  судьи  время раунда может быть продлено.
  4. Робот, выигравший два раунда, выигрывает матч. Если матч не выигран ни одним из роботов, то обоим засчитывается ничья. Победитель/проигравший в матче может быть определен судьями в матче-реванше или посредством голосования судейской коллегией.
  5. Безоговорочно проигравшим раунд считается робот, полностью оказавшийся за пределами ринга.
  6. Во время боя в  зоне состязаний разрешается находиться только участникам соревнований,  членам оргкомитета и судьям (тренерам запрещено).
  7. После начала  раунда и до объявления окончания раунда запрещается вмешиваться в работу робота (дистанционное управление или физические прикосновения).
  8. Во время проведения раунда вокруг ринга должна соблюдаться свободная зона шириной не менее 1 м. Свободная зона вокруг ринга необходима, чтобы не создавать помех роботам. Присутствие участников соревнований в свободной зоне во время раунда наказывается штрафом.

Расстановка роботов

  1. По указанию судьи участники соревнования подходят к рингу, для установки роботов в стартовую позицию.
  2. Игровой крест в центре ринга условно разделяет его на 4 квадранта.
  3. Роботы всегда должны быть размещены в двух противоположных квадрантах.
  4. Каждый робот должен быть направлен в противоположную сторону от противника, как показано стрелками на кресте.
  5. Роботы могут быть размещены в любом месте внутри квадранта.
  6. После того, как судья уберёт крест перемещать роботов больше нельзя.  

Рис. 1. Размещение роботов

Начало поединка

  1. Начало раунда объявляется судьёй.
  2. При получении команды участники раунда одновременно нажимают пусковые кнопки, расположенные на роботах, и немедленно покидают свободную область вокруг ринга.

Завершение поединка

  1. Команду для остановки поединка даёт судья.
  2. Участники раунда забирают роботов из зоны ринга.
  3. По завершению раунда судья объявляет победителя раунда.
  4. По завершению трёх раундов судья объявляет победителя матча.

Раунд может быть переигран при возникновении следующих обстоятельств:

  1. Роботы запутались или вращаются друг относительно друга, без какого либо изменения их положения в течение 5 секунд.
  2. Оба робота остановились  на время, большее 5 секунд.
  3. Оба робота касаются области за рингом одновременно и определить первенство невозможно.

Определение победителя

Победа в раунде  дается в следующих случаях:

  1. Робот соперника вытолкнут за пределы ринга (роботы полностью за пределами ринга).
  2. Робот соперника самостоятельно покинули ринг.
  3.  Один из роботов остановился более чем на 5 секунд раньше другого. В этом случае одно очко присуждается последнему двигающемуся роботу.
  4.  Робот все время вел себя гораздо активней своего соперника. Если один из роботов явно не пытается атаковать своего соперника в течение 10 секунд, то его сопернику может быть присуждена победа в раунде.

Поражение в раунде засчитывается если

  1. Кто-либо из операторов нарушил пределы свободной зоны во время раунда.
  2. Робот начал движение раньше истечения 5 секунд после команды о начале раунда (технический фальстарт).
  3. Фальстарт оператора робота (оператор нажал стартовую кнопку раньше команды судьи).
  4. Высказаны требования об остановке поединка без веских на то оснований.
  5. Задержано начало раунда дольше, чем на 30 секунд без особого распоряжения судьи.
  6. Во время поединка выявлены несоответствия робота техническим требованиям.
  7. Некорректное поведение игрока, в т.ч. - оскорбительное поведение и
  8. оскорбительные высказывания.
  9. При получении двух штрафных очков раунд считается проигранным.

Судейство

  1. Организаторы оставляют за собой право вносить в правила состязаний любые изменения.
  2. Контроль и подведение итогов осуществляется судейской коллегией в соответствии с приведенными правилами.
  3. Судьи обладают всеми полномочиями на протяжении всех состязаний; все участники должны подчиняться их решениям.
  4. Если появляются какие-то возражения относительно судейства, команда имеет право в письменном порядке обжаловать решение судей в Оргкомитете не позднее 10 минут после окончания выступления. По истечении этого времени претензии не принимаются.
  5. Переигровка может быть проведена по решению судей в случае, когда робот не смог закончить  выступление из-за постороннего вмешательства, либо когда неисправность возникла по причине плохого состояния игрового поля, либо из-за ошибки, допущенной судейской коллегией.

Порядок награждения победителей

Победители получают первое, второе и третье место и награждаются дипломами ГБОУ ЗДТДиМ. Результаты и имена победителей по окончании соревнования будут опубликованы на сайте http://konstructive.ucoz.ru/

Организатор соревнования

Косицын С.Ю. - педагог дополнительного образования творческого объединения робототехники «Конструктив» ГБОУ  Зеленоградский дворец творчества детей и молодёжи.

Телефон для справок: 8(903) 125-20-34

Приложение №1.

Заявка на участие в соревновании по робототехнике.

Программирование автономной системы

«Робо-сумо»

Образовательное учреждение:___________________________________________________

_____________________________________________________________________________

№ 1

 

Ф.И.О.

 

Дата рождения

 

Название команды

 

Среда программирования

 

Дополнительные сведения

 

  Контактная информация руководителя (педагога):

Ф.И.О.

 

Электронная почта

 

Телефон для связи

 

 


Приложение №2

Технические требования к роботу

  1. Максимальная ширина робота 250 мм, длина 250 мм, высота 250 мм.
  2. Вес робота не должен превышать 1 кг.
  3. Робот должен быть автономным, т.е. не допускается дистанционное управление роботом.
  4. Роботы должны быть построены с использованием только деталей конструкторов ЛЕГО Mindstorms.
  5. В конструкции роботов нельзя использовать винты, клеи, веревки или резинки для закрепления деталей между собой.
  6. В конструкции робота можно использовать только один микрокомпьютер
  7. В конструкции робота разрешено использовать только двигатели и датчики конструкторов ЛЕГО Mindstorms.
  8. Не разрешается изменять любые оригинальные части (например: NXT, двигатель, датчики, детали и т.д.).
  9.  Функция Bluetooth на микрокомпьютере NXT должна быть отключена, загружать программы следует через кабель USB.
  10. Робот должен быть оснащен пусковой кнопкой «Старт». После нажатия кнопки «Старт» робот должен оставаться на одном месте в течение 5 секунд и лишь затем имеет право переходить к активным действиям.*
  11. По истечении пятисекундной паузы после нажатия пусковой кнопки и до начала активных действий* разрешается самостоятельная трансформация робота (робот может изменить свои размеры - перейти в «разложенное состояние»).
  12. При трансформации робот может увеличиваться в размерах, но физически не должен разделяться на части, а должен оставаться единым целым**.
  13. Запрещается использование устройств, создающих активные помехи для сенсоров противника.
  14. Запрещено использование каких-либо клейких приспособлений на колесах и корпусе робота.
  15. Запрещено использование каких-либо приспособлений, дающих роботу повышенную устойчивость, например, создающих вакуумную среду.
  16. Запрещено использовать жидкие, порошковые и воздушные вещества, в качестве оружия против робота-соперника.
  17. Запрещены любые огнеопасные и взрывоопасные устройства и вещества.
  18. Запрещено использовать конструкции, которые могут причинить физический ущерб рингу или роботу-сопернику.
  19. Во время проведения поединка робот должен быть оснащен легкоразличимой меткой - номером, назначаемым каждому участнику соревнований.

Робот, не соответствующий требованиям, не будет допущен к участию в соревнованиях, либо результат робота будет аннулирован.

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

После окончания времени отладки нельзя модифицировать или менять роботов (например: загрузить программу, изменять конструкцию, менять батарейки). Также команды не могут просить дополнительного времени.

*Под активным действием понимается начало движения робота (в т.ч. – разворот).
**Роботы, развалившиеся на две и более части, проигрывают матч, однако отвалившиеся детали и части конструкции робота с общей массой меньше 5г, не приводят к проигрышу в раунде.


Приложение №3

Спецификация ринга

Ринг представляет собой чёрный круг с белой ограничительной линией толщиной в 5 см. Ринг может быть в виде подиума высотой 10 - 20 мм.

  • Диаметр ринга - 150 см.
  • Цвет ринга - черный.
  • Цвет ограничительной линии - белый.
  • Ширина ограничительной линии - 5 см.

Стартовые зоны определяются судьей.
Во время проведения поединка вокруг ринга должна соблюдаться свободная зона шириной не менее 1 м. Свободная зона вокруг ринга может быть отмечена специальным образом.

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

Рис.2 Ринг.



Предварительный просмотр:

План проведения открытых соревнований по робототехнике «Программирование автоматизированных систем «Робо-сумо»

15 ноября 2014года 15.00-18.00

ГБОУ ЗДТДиМ, театральная часть, зимний сад.

15.00-15.30

Регистрация участников соревнований, жеребьевка, работа инспекционной области (отв. Косицына О.Г.)

15.15-16.00

Проведение мини-соревнований для начинающих конструкторов и гостей по скоростной сборки-разборки  легоконструкций в зоне №1,  тур №1 (начало 15.15) и тур №2 (начало 15.30) тур №3 (начало 15.45).(проводит Басова Т.Н., судья – Суркова В.И.)

15.00-16.00

Работа технической зоны: подготовка роботов к выступлению, пробные бои, консультации с руководителями команд. (ответственный Косицын С.Ю.)

15.30-16.00

Совещание судейской команды по соревнованиям по робо-сумо.

16.00

Торжественное открытие соревнований по робо-сумо (зона №2) (ведущий Косицын С.Ю.)

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

Анонс конкурса зрительских симпатий «Очароботик»

Проведение 1/8  финала соревнований по робо-сумо.

16.40

Подведение итогов мини-соревнований по для начинающих конструкторов и гостей соревнований по скоростной сборки-разборки  легоконструкций, подготовка наградного материала (отв Косицына О.Г.), награждение.
Проведение 1/4 финала соревнований по робо-сумо.

17.20

Проведение  ½ финала соревнований по робо-сумо.

17.30

Проведение   финала соревнований по робо-сумо.

Подведение итогов, подготовка наградного материала (отв Косицына О.Г.)

Награждение победителей в соревнования и робо-сумо и «Очароботик».

Анонсирование следующих соревнований по робототехнике в декабре для начинающих «Новогодние конструкции»..

18.00

Торжественное закрытие соревнований

Техническое обеспечение соревнований

  • Инспекционная зона: весы, габаритная область (отв. Косицына О.Г.);
  • Регистрация: стол, ксерокс. (отв. Косицына О.Г.)
  • Жеребьевка (номерные карточки)
  • Центр музыкальной поддержки: музыкальный центр, микрофон, телевизор (отв. Юсупов В.)
  • Центр технической поддержки:2 стола, 10 стульев, розетки, компьютер, (отв. Косицын С.Ю.)
  • Зона №1 для мини-соревнований для начинающих конструкторов и гостей соревнований по скоростной сборки-разборки  легоконструкций 5 маленьких столов, стол для судьи, микрофон для ведущей, пять лего-наборов. 5 маленьких столов, стол для судьи, микрофон для ведущей, пять лего-наборов (Отв. Басова Т.Н.).
  • Зона №2 открытых соревнований по робототехнике «Программирование автоматизированных систем «Робо-сумо»: татами, стол для судей (отв. Косицын С.Ю.)

Документооборот

  • Протоколы регистрации для робо-сумо и мини-соревнований
  • Протоколы для судей два варианта (смешанная система, олимпийская система)
  • Цифровые карточки участника для жеребьевки
  • Наградной материал: для робо-сумо – 4 шт, для мини-соревнований – 5 шт, для «Очароботика» -2 шт.


Предварительный просмотр:

Предварительный просмотр:

По теме: методические разработки, презентации и конспекты

Доклад на МО "Учебно-методический комплекс по предмету "Технология"

Учебно-методический комплекс по предмету "Технология"...

«ОБРАЗОВАТЕЛЬНО-МЕТОДИЧЕСКИЙ КОМПЛЕКС И ЕГО РОЛЬ В СИСТЕМЕ ДОПОЛНИТЕЛЬНОГО ОБРАЗОВАНИЯ ДЕТЕЙ»

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

Образовательно-методический комплекс "СОВРЕМЕННАЯ ФОТОГРАФИЯ"

Программа предусматривает формирование базовых навыков работы с любительской фототехникой и использование стандартных графических редакторов для оформления фотографий. Благодаря стремительному развити...

«ОБРАЗОВАТЕЛЬНО-МЕТОДИЧЕСКИЙ КОМПЛЕКС В ДОПОЛНИТЕЛЬНОМ ОБРАЗОВАНИИ ДЕТЕЙ».

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

Образовательно-методический комплекс к образовательной программе "Азбука хореографии"

Здесь вы найдёте примерные вопросы для самостоятельной проверки знаний по курсу "Азбукуа хореографии"....

Образовательно-методический комплекс к образовательной программе "Постановка танцевальных номеров"

Необходимый материал. который пригодится при работе с программой "Постановка танцевальных номеров". ...

Образовательно-методический комплекс к образовательной программе "Постановка танцевальных номеров"

Игры-пантомимы, игры-превращения, творческие упражнения на снятие мышечного напряжения, развитие мелкой моторики, развитие пластики рук....