SlideShare a Scribd company logo
1 of 50
Download to read offline
Arduino и бионика
Введение в микроконтроллеры с Arduino
Занятие 4
Перевод на русский язык
13 апреля 2012 — robofreak.ru — Татьяна Волкова
20 ноября 2007 - machineproject — Тод Е. Курт
Программа на сегодня
•Про ШИМ
•Управление сервомашинками
•Про шину I2C
•Использование I2C с Arduino
•Про акселерометры
•Нунчак Nintendo Wii как устройство ввода
Повторение:
мигающий светодиод
Удостоверьтесь, что всё
по-прежнему работает
Измените значение в «delay()», чтобы изменить частоту мигания
компиляция
загрузка
TX/RX мигают
скетч
стартует
Загрузите
«File/Sketchbook/Examples/Digital/Blink»
Широтно-импульсная
модуляция
•Часто называется просто «ШИМ»
•Компьютеры не могут выдавать
аналоговое напряжение
•Только цифровое (0 вольт либо 5 вольт)
•Но вы можете его изобразить
•если усредните цифровой сигнал,
скачущий между напряжениями
•Например...
ШИМ
0 вольт
5 вольт
50% 50% 50% 50% 50%
2.5 вольт
0 вольт
5 вольт
20% 80%
1.0 вольт
50%
20% 80% 20% 80%
0 вольт
5 вольт
75% 25%
3.75 вольт
75% 25% 75% 25%
= ( _ / _ ) * _выходное напряжение время вкл время выкл максимальное напряжение
Выходное напряжение — среднее между
временем включения и выключения
ШИМ
•Используется везде
•Регуляторы яркости ламп, управление
скоростью мотора, подача питания,
создание звука
•Три характеристики ШИМ-сигнала
• Ширина импульса (мин/макс)
• Период импульса
(= 1/число импульсов в сек.)
• Уровни напряжения
(к примеру, 0-5В)
ширина
период
высота
Вы уже делали схемы с использованием ШИМ.
Сервомоторы
•Могут принимать
положение
от 0 до 180º (обычно)
•Внутренняя схема
с обратной связью
и редуктором
сама делает всё
сложное за Вас
•Простой интерфейс
ШИМ 5В из 3-х
проводов
Точнее, это сервомашинки, используемые в авиамоделировании, энтузиастами в качестве
хобби.
Вообще говоря, «сервомотор» - это мотор с внутренним механизмом обратной связи,
который позволяет отправлять команды «принять позицию» без необходимости Вам
считывать текущую позицию.
Сервомашинки прекрасны
•Мотор постоянного тока
•Редуктор с большим моментом
•Потенциометр,
считывающий позицию
•Схема с обратной связью
считывает потенциометр
и управляет мотором
•Всё встроено, Вам только
нужно скормить ей ШИМ-сигнал
У таких небольших синих сервомашинок можно посмотреть на внутренности.
Для чего хороши сервы?
•Они в ходу у робототехников, авторов
киноспецэффектов и марионеточников
•Везде, где Вам нужно управляемое,
повторяемое движение.
•Можно превратить вращение в
линейное движение при помощи
хитрых механических рычагов.
Даже в одежде сейчас используются сервы:
http://www.technologyreview.com/read_article.aspx?id=17639&ch=infotech:
Сервомашинки
•Бывают всех размеров
•От сверх-миниатюрных
•до двигающих-машину
•Но у всех один и тот же
3-проводной интерфейс
•Сервы определяются через:
157 г
9 г
Вес: 9 г
Скорость: 12с/60° @ 6В
Момент: 1.5кг/см @ 6В
Напряжение: 4.6~6В
Размер: 21x11x28 мм
http://rctoys.com/
http://hobbypeople.net/
Крепление и
удлинение сервы
Множество способов
прикрепить серву
И превратить её
вращательное движение
в другие типы движения
Скоба для крепления: http://www.sierragiant.com/prod28.html
Управление сервой
180º Питание (+5В)
Земля (0В)
Управление
(ШИМ)
•Частота ШИМ - 50 Гц (каждые 20 мс)
•Ширина импульса от 1 до 2 миллисекунд
•1 мс = крайняя позиция против часовой
•2 мс = крайняя позиция по часовой
Движение сервы
0 градусов 90 градусов 180 градусов
1000 микросекунд 1500 микросекунд 2000 микросекунд
На практике ширина импульса может быть от 500
до 2500 микросекунд
(добавим метку из провода к серве, как на картинке выше)
Поставьте красную «руку» на Вашу серву. Для этого нужна отвёртка.
Многие покупные серводрайверы имеют калибровку, чтобы справляться с различными
сервами.
Серва и Arduino
Добавьте несколько проводов к разъёму сервы
Земля
Питание
ШИМ-управление
Советую подбирать цвета проводов согласно общепринятой маркировке, насколько это
возможно.
Серва и Arduino
Подключите
управляющий провод
к 7 цифровому пину
Подключите
питание
Двигаем сервомашинку
Перемещает серво-
машинку в доступных
ей пределах
“ServoSimple”
Функцией
delayMicroseconds()
задаётся ширина импульса
Функцией
delay()
задаётся частота импульса
Скетч есть в раздаточном материале
Написана специальная функция для выдачи импульсов на сервомашинку.
Новая функция “delayMicroseconds()”. Как “delay()”, но задержка в микросекундах (µs), а
не миллисекундах (ms).
На самом деле, просто ждать 20 миллисекунд не вполне правильно. Должно быть:
20 — (ширина_импульса/1000)
(1000 микросекунд = 1 миллисекунда, и 1000 миллисекунд = 1 секунда)
Серва, управляемая через
последовательный порт
Последний пример с
сервомашинкой, к
которому добавлен
стандартный
последовательный ввод
Управляйте
сервомашинкой,
нажимая на клавиши
с цифрами.
“ServoSerialSimple”
Скетч есть в раздаточном материале.
Зачем этот цикл «for»? Потому что сервомашинке требуется время, чтобы перейти на
нужную позицию, а памяти у неё нет.
Шаг в сторону:
управление Arduino
•Любая программа на компьютере, не
только программы для Arduino, могут
управлять платой Arduino
•В Unix-системах, таких как Mac OS X и
Linux, можно даже из командной строки:
demo% export PORT=/dev/tty.usbserial-A3000Xv0
demo% stty -f $PORT 9600 raw -parenb -parodd cs8 -hupcl -cstopb clocal
demo% printf "1" > $PORT # rotate servo left
demo% printf "5" > $PORT # go to middle
demo% printf "9" > $PORT # rotate servo right
Unix — это нереально круто.
Идея роботизированной
игрушки для кошки
Приклейте скотчем ёршик, и,
используя случайное поведение,
аналогичное «пламени свечи»,
сделайте случайно двигающуюся
игрушку для кошки
Удостоверьтесь, что надёжно закрепили сервомашинку перед тестовыми запусками. У
кошек очень хорошо получается разбирать электронные прототипы.
Проблемы со временем
•Две проблемы с последним скетчем
•Когда выполняется servoPulse(),
ничто другое выполняться не может
•Серве не выдаются периодические
импульсы для удержания позиции
•Нужно выполнять две разных “задачи”:
•Считывание с последовательного порта
•Управление сервомашинкой
Если серве не говорят постоянно, что делать, она расслабляется и не
поднимает/толкает/тянет.
Более продвинутый
вариант управления сервой
Работает как
ServoSerialSimple
(но лучше)
Вызывает “millis()”,
чтобы узнать время
Обновляет позицию
сервы, когда нужно,
а не просто в
момент вызова.
“ServoSerialBetter”
Скетч в раздаточном материале.
Жертвует временем (дополнительные переменные) ради более удобной логики.
Можно вызывать updateServo() как угодно часто, серва перемещается только тогда,
когда это необходимо.
Несколько сервомашинок
•Технология updateServo() может
применяться к нескольким сервам
•Единственное ограничение — число
свободных цифровых выходов
•Проблемы начинаются, когда количество
сервомашинок превышает 8
«Многозадачность»
• Определите задачу
• Разбейте её на несколько частей, основываясь на
времени выполнения («кванты времени»)
• Поместите эти участки кода в отдельные функции
• С помощью millis() определяйте, какой участок
должен сейчас выполняться
• Вызывайте функции из loop()
Концепция updateServo()
полезна, когда нужно «делать много
дел одновременно» в скетче Arduino:
Внутри участков кода избегайте использования delay(), циклов for и других языковых
конструкций, которые заставляют код выполняться слишком долго внутри кванта времени.
Это называется “кооперативная многозадачность”, и так работали ОС в 80-е.
ШИМ в Arduino
•В Arduino есть встроенный ШИМ
•На выходах 9, 10, 11
•Используйте analogWrite(pin,value)
•Работает на высокой, фиксированной
частоте (поэтому не годен для серв)
•Но отлично подходит для
светодиодов и моторов
•Использует встроенные электрические цепи ШИМ
чипа ATmega8 -» не нужно дополнительного
программирования
почему всё программно, разве
в Arduino нет ШИМ?
Частота ШИМ, используемая в analogWrite() в настоящий момент по умолчанию равна
450Гц или 30 кГц. Я точно не помню, но её нельзя изменить, пока Вы не поймёте на более
глубоком уровне работу AVR.
Так что при программировании AVR-чипов вне среды Arduino, скорость ШИМ может быть
назначена практически любой.
Перерыв
Последовательная
коммуникация
Разные провода для передачи и приёма
Асинхронная коммуникация
асинхронный – без тактирования
Данные передаются установкой
уровней HIGH/LOW в нужное время
Синхронная коммуникация
синхронный – с тактированием
Данные передаются установкой
HIGH/LOW, когда изменяется
тактовый сигнал
Один провод для тактирования
и провод для каждого направления,
передачи данных, как и раньше
TX
RX
RX
TX
BУстройство
такт
A->Bданные
B->Aданные
Оба устройства должны иметь
устойчивый «ритм»
Ни одному из устройств не нужен устойчивый
ритм, но одно из них является дирижёром
Какой из них лучше? Зависит от конкретного приложения. Асинхронный хорош, когда
имеются только два устройства, и они заранее настроены так, чтобы быть согласованными
по скорости (как в ваших скетчах Arduino).
Синхронный в целом лучше для высоких скоростей (потому что не требуется точное
тактирование, достаточно лишь следить за тактовым проводом).
Устройство АBУстройствоУстройство А
I2C, также известная как
«Два провода» (Two-wire)
-Перифе
рийное
- 1устр во
• • •
данныеSDA
тактSCK
Синхронная последовательная шина
с общей линией данных
маленькая сеть для Ваших устройств
•До 127 устройств на одной шине
•Скорость передачи данных до 1Мб/сек
•Очень простой протокол (по сравнению с USB,Ethernet, и т.д)
•Встроен во многие микроконтроллеры
Общая линия данных означает, что устройства должны соглашаться о том, когда их
очередь «говорить». Как в радиосвязи гражданского диапазона (CB), когда Вы говорите
«Приём», чтобы показать, что Вы закончили говорить и готовы слушать собеседника.
См. “Введение в I2C”: http://www.embedded.com/story/OEG20010718S0073
“I2C” расшифровывается как “Inter-Integrated Circuit”, но никто её так не называет
И если Ваш микроконтроллер не имеет встроенной аппаратной поддержки I2C, можно
запрограммировать её вручную
(это всё равно приходится делать для управляющих устройств)
Ведущее
устройство
-Перифе
рийное
- 2устр во
-Перифе
рийное
- Nустр во
Множество устройств с I2C
датчик
касания
компас
FM-передатчик
энергонезависимая
память
ЖК-дисплей
датчик
температуры
и влажности
И многие другие
(гироскопы,клавиатуры,
моторы,...)
Изображения со Sparkfun.com, кроме ЖК-экрана с matrixorbital.com
Обязательная
реклама BlinkM
Умный светодиод с I2C
Сам делает всю сложную работу по генерации ШИМ
Это можно купить со Sparkfun.com.
Нунчак Nintendo Wii
• Стандартный интерфейс I2C
• 3-осевой акселерометр
с 10-битным разрешением
• 2-осевой аналоговый джойстик
с 8-битным А/Ц преобразователем
• 2 кнопки
• $20
Если Вы взглянете на архитектуру Nintendo Wii и периферийные устройства, Вы увидите нехарактерное
для Nintendo следование стандартам. Wii-контроллер - самый яркий пример. Подключение к нему
осуществляется через стандартную шину I2C.
Дистанционные Wii-устройства общаются через Bluetooth HID с приставкой Wii (или Mac, или PC).
Нунчак легко соединить с Arduino, Basic Stamp и с большинством других микроконтроллеров, так как
он использует стандартный интерфейс I2C.
См: http://www.wiili.org/index.php/Wiimote/Extension_Controllers/Nunchuk
и: http://www.windmeadow.com/node/42
и: http://todbot.com/blog/2007/10/25/boarduino-wii-nunchuck-servo/
Обратите внимание на Wii Remote - кроме Bluetooth HID-интерфейса, в нём есть ещё акселерометры,
кнопки, динамик, память, и он является ведущим (master) в шине I2C.
Акселерометр?
•Измеряет ускорение
(изменение скорости)
•Как в машине, когда вас
вдавливает в кресло
•Сила притяжения — тоже ускорение
•Поэтому, в том числе, измеряет наклон
горизонтально наклон вправо наклон влево
Акселерометр в Нунчаке
Я не уверен, что правильно изобразил оси Нунчака..
Изображение осей Wiimote с сайта: http://www.wiili.org/index.php/Wiimote
Оси акселерометра
Wii-пульта и Нунчака
I2C в Arduino
•I2C встроен в чип Arduino
ATmega168
•Используйте библиотеку
“Wire” для доступа к нему
•Аналоговый вход 4 —
сигнал SDA
•Аналоговый вход 5 —
сигнал SCK
Библиотека Arduino “Wire”
Отправление данных
Начать посылку
Подключиться
к шине I2C
(как ведущий (master))
Послать данные
Загрузить
библиотеку Wire
Закончить посылку
О том, что делают разные команды, можно прочитать в инструкции/документации к
конкретному устройству.
Получение данных
Запросить данные
с устройства
Получить данные
Типы возможных взаимодействий зависят от устройства, с
которым Вы общаетесь
У большинства устройств есть несколько “команд”
Библиотека Arduino “Wire”
Подключиться
к шине I2C
(как ведущий (master))
А о том, что делают разные команды, можно прочитать в инструкции/документации к
конкретному устройству.
Подключение Нунчака
Мы можем отрезать разъём и подключиться
непосредственно к проводам
Но вместо этого,
используем эту
маленькую
плату-адаптер
Адаптер Wii-Нунчака
SCK GND
+V SDA
n/c
n/c
Расположение
выводов Нунчака
(если смотреть внутрь
разъёма Нунчака)
Расположение
выводов адаптера
+V SCK
SDAGND
Внимание! На адаптере есть обозначения, но они неправильные. Так что Вам придётся
положиться на вышеприведённые диаграммы.
Сборка схемы
GND SDA
+5V SCK
SDA (пин 4)
SCK (пин 5)
Подключение Нунчака
Пробуем Нунчак
“NunchuckPrint”
Считываем показания
Нунчака каждую
1/10-ю секунды
и выводим на экран
все данные:
- положение джойстика (x,y)
- акселерометр (x,y,z)
- кнопки Z,C
Использует основы библиотеки Arduino, которую я сейчас пишу.
Добавляем сервомашинку
Перемещайте
серву движением
своей руки
“NunchuckServo”
Вы - киборг!
Нажимайте кнопку Z,
чтобы мигать светодиодом
на 13-м выводе
Используется разделение на кванты времени, упомянутое ранее.
Нунчак и сервомашинка
Поверните
Нунчак
И серва повторит
Ваши движения
Эмулятор Сегвэя
— , NunchuckServo.В основе тот же код что и в
: http://todbot.com/blog/2007/10/25/boarduino-wii-nunchuck-servo/Подробнее
Идём дальше
•Сервомашинки
•Соедините их вместе - получится
рука робота с несколькими
степенями свободы.
•Сделайте “серво-запись”: переводите
движения руки в положения сервы,
и затем проигрывайте эти записи.
•Отлично годится для развлекательной
аниматроники
Идём дальше
•Устройства с I2C
•Попробуйте другие устройства
•Подключите их к тем же проводам,
что и Нунчак.
•Кооперативная многозадачность
•Попробуйте сделать терменвокс
из Нунчака и пьезоэлемента
•Можно ли заставить предыдущие
примеры реагировать быстрее?
Идём дальше
•Нунчак
•Пространственный датчик движения.
Управляйте чем угодно, как если бы
Вы махали волшебной палочкой!
•Как насчёт джойстика? У нас даже не
было времени с ним поиграть.
•Альтернативное устройство ввода
для Вашего компьютера: управляйте
программами на Processing и т.д.
В итоге
Вы изучили множество разных физических деталей
светодиоды
моторы акселерометры сервомашинки
пьезоэлементы
резистивные датчики
переключатели/кнопки
В итоге
И вы изучили множество программных деталей
широтно-импульсная
модуляция
коммуникация через
последовательный порт
цифровой ввод-вывод
аналоговый ввод-вывод
управляемый
данными код
(data driven
code)
частотная
модуляция
многозадачность
I2C
В итоге
Надеемся, Вам понравилось, продолжайте
играть с Arduino!
Не стесняйтесь писать мне,
чтобы пообщаться обо всем этом.
Тод Е. Курт
tod@todbot.com
КОНЕЦ занятия 4
http://todbot.com/blog/bionicarduino/
Не стесняйтесь писать мне на почту, если есть вопросы

More Related Content

Viewers also liked

Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...
Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...
Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...Tatiana Volkova
 
Компьютерная графика в Processing, часть 5. Анимация
Компьютерная графика в Processing, часть 5. АнимацияКомпьютерная графика в Processing, часть 5. Анимация
Компьютерная графика в Processing, часть 5. АнимацияTatiana Volkova
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingTatiana Volkova
 
Компьютерная графика в Processing, часть 7. 3D в Processing
Компьютерная графика в Processing, часть 7. 3D в ProcessingКомпьютерная графика в Processing, часть 7. 3D в Processing
Компьютерная графика в Processing, часть 7. 3D в ProcessingTatiana Volkova
 
Компьютерная графика в Processing, часть 4. Преобразования на плоскости
Компьютерная графика в Processing, часть 4. Преобразования на плоскостиКомпьютерная графика в Processing, часть 4. Преобразования на плоскости
Компьютерная графика в Processing, часть 4. Преобразования на плоскостиTatiana Volkova
 
Arduino и бионика (Bionic Arduino). Часть 2. RGB-светодиоды, аналоговый вход,...
Arduino и бионика (Bionic Arduino). Часть 2. RGB-светодиоды, аналоговый вход,...Arduino и бионика (Bionic Arduino). Часть 2. RGB-светодиоды, аналоговый вход,...
Arduino и бионика (Bionic Arduino). Часть 2. RGB-светодиоды, аналоговый вход,...Tatiana Volkova
 
Arduino и бионика (Bionic Arduino). Часть 3. Моторы, транзисторы, Processing,...
Arduino и бионика (Bionic Arduino). Часть 3. Моторы, транзисторы, Processing,...Arduino и бионика (Bionic Arduino). Часть 3. Моторы, транзисторы, Processing,...
Arduino и бионика (Bionic Arduino). Часть 3. Моторы, транзисторы, Processing,...Tatiana Volkova
 
Компьютерная графика в Processing, часть 6. Взаимодействие.
Компьютерная графика в Processing, часть 6. Взаимодействие.Компьютерная графика в Processing, часть 6. Взаимодействие.
Компьютерная графика в Processing, часть 6. Взаимодействие.Tatiana Volkova
 
Презентация к конкурсу "Школьный урок технологии - 2035"
Презентация к конкурсу "Школьный урок технологии - 2035"Презентация к конкурсу "Школьный урок технологии - 2035"
Презентация к конкурсу "Школьный урок технологии - 2035"Tatiana Volkova
 
Компьютерная графика в Processing, часть 3. Изображения и текст
Компьютерная графика в Processing, часть 3. Изображения и текстКомпьютерная графика в Processing, часть 3. Изображения и текст
Компьютерная графика в Processing, часть 3. Изображения и текстTatiana Volkova
 
Круглый стол "Кружок электроники для школьников 21 века. Опыт, проблемы и пер...
Круглый стол "Кружок электроники для школьников 21 века. Опыт, проблемы и пер...Круглый стол "Кружок электроники для школьников 21 века. Опыт, проблемы и пер...
Круглый стол "Кружок электроники для школьников 21 века. Опыт, проблемы и пер...Tatiana Volkova
 
Raspberry pi lnl
Raspberry pi lnlRaspberry pi lnl
Raspberry pi lnlDon Doerres
 
Гирлянда для программистов
Гирлянда для программистовГирлянда для программистов
Гирлянда для программистовGetDev.NET
 
Arduino training day 1
Arduino training day 1Arduino training day 1
Arduino training day 1Binod Thapa
 
Arduino – это просто!
Arduino – это просто!Arduino – это просто!
Arduino – это просто!Marat Lukyanov
 
Лабораторная работа по программирования pic32 ChipKIT Uno32 в среде Arduino
Лабораторная работа по программирования pic32 ChipKIT Uno32 в среде ArduinoЛабораторная работа по программирования pic32 ChipKIT Uno32 в среде Arduino
Лабораторная работа по программирования pic32 ChipKIT Uno32 в среде ArduinoAnton Moiseev
 
Zybo ile Ultrasonik Sensör Uygulaması (Distance Measurement by Ultrasonic Sen...
Zybo ile Ultrasonik Sensör Uygulaması (Distance Measurement by Ultrasonic Sen...Zybo ile Ultrasonik Sensör Uygulaması (Distance Measurement by Ultrasonic Sen...
Zybo ile Ultrasonik Sensör Uygulaması (Distance Measurement by Ultrasonic Sen...Melek Sönmez
 
How to Upgrade a Coffee Machine Using Arduino
How to Upgrade a Coffee Machine Using ArduinoHow to Upgrade a Coffee Machine Using Arduino
How to Upgrade a Coffee Machine Using ArduinoGlobalLogic Ukraine
 

Viewers also liked (20)

Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...
Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...
Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...
 
Компьютерная графика в Processing, часть 5. Анимация
Компьютерная графика в Processing, часть 5. АнимацияКомпьютерная графика в Processing, часть 5. Анимация
Компьютерная графика в Processing, часть 5. Анимация
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в Processing
 
Компьютерная графика в Processing, часть 7. 3D в Processing
Компьютерная графика в Processing, часть 7. 3D в ProcessingКомпьютерная графика в Processing, часть 7. 3D в Processing
Компьютерная графика в Processing, часть 7. 3D в Processing
 
Компьютерная графика в Processing, часть 4. Преобразования на плоскости
Компьютерная графика в Processing, часть 4. Преобразования на плоскостиКомпьютерная графика в Processing, часть 4. Преобразования на плоскости
Компьютерная графика в Processing, часть 4. Преобразования на плоскости
 
Arduino и бионика (Bionic Arduino). Часть 2. RGB-светодиоды, аналоговый вход,...
Arduino и бионика (Bionic Arduino). Часть 2. RGB-светодиоды, аналоговый вход,...Arduino и бионика (Bionic Arduino). Часть 2. RGB-светодиоды, аналоговый вход,...
Arduino и бионика (Bionic Arduino). Часть 2. RGB-светодиоды, аналоговый вход,...
 
Arduino и бионика (Bionic Arduino). Часть 3. Моторы, транзисторы, Processing,...
Arduino и бионика (Bionic Arduino). Часть 3. Моторы, транзисторы, Processing,...Arduino и бионика (Bionic Arduino). Часть 3. Моторы, транзисторы, Processing,...
Arduino и бионика (Bionic Arduino). Часть 3. Моторы, транзисторы, Processing,...
 
Компьютерная графика в Processing, часть 6. Взаимодействие.
Компьютерная графика в Processing, часть 6. Взаимодействие.Компьютерная графика в Processing, часть 6. Взаимодействие.
Компьютерная графика в Processing, часть 6. Взаимодействие.
 
Презентация к конкурсу "Школьный урок технологии - 2035"
Презентация к конкурсу "Школьный урок технологии - 2035"Презентация к конкурсу "Школьный урок технологии - 2035"
Презентация к конкурсу "Школьный урок технологии - 2035"
 
Компьютерная графика в Processing, часть 3. Изображения и текст
Компьютерная графика в Processing, часть 3. Изображения и текстКомпьютерная графика в Processing, часть 3. Изображения и текст
Компьютерная графика в Processing, часть 3. Изображения и текст
 
Круглый стол "Кружок электроники для школьников 21 века. Опыт, проблемы и пер...
Круглый стол "Кружок электроники для школьников 21 века. Опыт, проблемы и пер...Круглый стол "Кружок электроники для школьников 21 века. Опыт, проблемы и пер...
Круглый стол "Кружок электроники для школьников 21 века. Опыт, проблемы и пер...
 
Raspberry pi lnl
Raspberry pi lnlRaspberry pi lnl
Raspberry pi lnl
 
Гирлянда для программистов
Гирлянда для программистовГирлянда для программистов
Гирлянда для программистов
 
Iot meetup 07.10.15
Iot meetup 07.10.15Iot meetup 07.10.15
Iot meetup 07.10.15
 
01
0101
01
 
Arduino training day 1
Arduino training day 1Arduino training day 1
Arduino training day 1
 
Arduino – это просто!
Arduino – это просто!Arduino – это просто!
Arduino – это просто!
 
Лабораторная работа по программирования pic32 ChipKIT Uno32 в среде Arduino
Лабораторная работа по программирования pic32 ChipKIT Uno32 в среде ArduinoЛабораторная работа по программирования pic32 ChipKIT Uno32 в среде Arduino
Лабораторная работа по программирования pic32 ChipKIT Uno32 в среде Arduino
 
Zybo ile Ultrasonik Sensör Uygulaması (Distance Measurement by Ultrasonic Sen...
Zybo ile Ultrasonik Sensör Uygulaması (Distance Measurement by Ultrasonic Sen...Zybo ile Ultrasonik Sensör Uygulaması (Distance Measurement by Ultrasonic Sen...
Zybo ile Ultrasonik Sensör Uygulaması (Distance Measurement by Ultrasonic Sen...
 
How to Upgrade a Coffee Machine Using Arduino
How to Upgrade a Coffee Machine Using ArduinoHow to Upgrade a Coffee Machine Using Arduino
How to Upgrade a Coffee Machine Using Arduino
 

Similar to Arduino и бионика (Bionic Arduino). Часть 4. ШИМ, сервомашинки, I2C, акселерометры

R0boCamp2016 Михайло Ях'яєв: Використання Arduino для керування роборукою, аб...
R0boCamp2016 Михайло Ях'яєв: Використання Arduino для керування роборукою, аб...R0boCamp2016 Михайло Ях'яєв: Використання Arduino для керування роборукою, аб...
R0boCamp2016 Михайло Ях'яєв: Використання Arduino для керування роборукою, аб...Lviv Startup Club
 
Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "...
Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "...Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "...
Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "...Lenvendo
 
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Ontico
 
Доклад на Highload-2012
Доклад на Highload-2012Доклад на Highload-2012
Доклад на Highload-2012Alex Tutubalin
 
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013Unigine Corp.
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаSergey Platonov
 
iRZ routers compare ru
iRZ routers  compare ruiRZ routers  compare ru
iRZ routers compare ruiRZ
 
Крадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диодКрадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диодAndrew Aksyonoff
 
Hioki pw3198 rus
Hioki pw3198 rusHioki pw3198 rus
Hioki pw3198 rushiokirus
 
Hioki pw3198
Hioki pw3198Hioki pw3198
Hioki pw3198hiokirus
 
Дизайн беспроводных сетей для мобильных приложений
Дизайн беспроводных сетей для мобильных приложенийДизайн беспроводных сетей для мобильных приложений
Дизайн беспроводных сетей для мобильных приложенийCisco Russia
 
Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...
Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...
Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...Ontico
 
Скорость с доставкой до пользователя
Скорость с доставкой до пользователяСкорость с доставкой до пользователя
Скорость с доставкой до пользователяAnatoliy Orlov
 
High performance computing - принципы проектирования сети
High performance computing - принципы проектирования сетиHigh performance computing - принципы проектирования сети
High performance computing - принципы проектирования сетиMUK
 
2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователя
2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователя2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователя
2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователяHappyDev
 
Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)Ontico
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Mikhail Kurnosov
 
Домашнее задание к 3 уроку
Домашнее задание к 3 урокуДомашнее задание к 3 уроку
Домашнее задание к 3 урокуSergey Savkin
 
Alexander shigin slides
Alexander shigin slidesAlexander shigin slides
Alexander shigin slidesrit2010
 
Hioki pw3336 rus
Hioki pw3336 rusHioki pw3336 rus
Hioki pw3336 rushiokirus
 

Similar to Arduino и бионика (Bionic Arduino). Часть 4. ШИМ, сервомашинки, I2C, акселерометры (20)

R0boCamp2016 Михайло Ях'яєв: Використання Arduino для керування роборукою, аб...
R0boCamp2016 Михайло Ях'яєв: Використання Arduino для керування роборукою, аб...R0boCamp2016 Михайло Ях'яєв: Використання Arduino для керування роборукою, аб...
R0boCamp2016 Михайло Ях'яєв: Використання Arduino для керування роборукою, аб...
 
Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "...
Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "...Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "...
Конференция Highload++ 2014, "Отказоустойчивый микрокластер своими руками", "...
 
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
 
Доклад на Highload-2012
Доклад на Highload-2012Доклад на Highload-2012
Доклад на Highload-2012
 
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладка
 
iRZ routers compare ru
iRZ routers  compare ruiRZ routers  compare ru
iRZ routers compare ru
 
Крадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диодКрадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диод
 
Hioki pw3198 rus
Hioki pw3198 rusHioki pw3198 rus
Hioki pw3198 rus
 
Hioki pw3198
Hioki pw3198Hioki pw3198
Hioki pw3198
 
Дизайн беспроводных сетей для мобильных приложений
Дизайн беспроводных сетей для мобильных приложенийДизайн беспроводных сетей для мобильных приложений
Дизайн беспроводных сетей для мобильных приложений
 
Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...
Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...
Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...
 
Скорость с доставкой до пользователя
Скорость с доставкой до пользователяСкорость с доставкой до пользователя
Скорость с доставкой до пользователя
 
High performance computing - принципы проектирования сети
High performance computing - принципы проектирования сетиHigh performance computing - принципы проектирования сети
High performance computing - принципы проектирования сети
 
2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователя
2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователя2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователя
2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователя
 
Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
 
Домашнее задание к 3 уроку
Домашнее задание к 3 урокуДомашнее задание к 3 уроку
Домашнее задание к 3 уроку
 
Alexander shigin slides
Alexander shigin slidesAlexander shigin slides
Alexander shigin slides
 
Hioki pw3336 rus
Hioki pw3336 rusHioki pw3336 rus
Hioki pw3336 rus
 

Arduino и бионика (Bionic Arduino). Часть 4. ШИМ, сервомашинки, I2C, акселерометры

  • 1. Arduino и бионика Введение в микроконтроллеры с Arduino Занятие 4 Перевод на русский язык 13 апреля 2012 — robofreak.ru — Татьяна Волкова 20 ноября 2007 - machineproject — Тод Е. Курт
  • 2. Программа на сегодня •Про ШИМ •Управление сервомашинками •Про шину I2C •Использование I2C с Arduino •Про акселерометры •Нунчак Nintendo Wii как устройство ввода
  • 3. Повторение: мигающий светодиод Удостоверьтесь, что всё по-прежнему работает Измените значение в «delay()», чтобы изменить частоту мигания компиляция загрузка TX/RX мигают скетч стартует Загрузите «File/Sketchbook/Examples/Digital/Blink»
  • 4. Широтно-импульсная модуляция •Часто называется просто «ШИМ» •Компьютеры не могут выдавать аналоговое напряжение •Только цифровое (0 вольт либо 5 вольт) •Но вы можете его изобразить •если усредните цифровой сигнал, скачущий между напряжениями •Например...
  • 5. ШИМ 0 вольт 5 вольт 50% 50% 50% 50% 50% 2.5 вольт 0 вольт 5 вольт 20% 80% 1.0 вольт 50% 20% 80% 20% 80% 0 вольт 5 вольт 75% 25% 3.75 вольт 75% 25% 75% 25% = ( _ / _ ) * _выходное напряжение время вкл время выкл максимальное напряжение Выходное напряжение — среднее между временем включения и выключения
  • 6. ШИМ •Используется везде •Регуляторы яркости ламп, управление скоростью мотора, подача питания, создание звука •Три характеристики ШИМ-сигнала • Ширина импульса (мин/макс) • Период импульса (= 1/число импульсов в сек.) • Уровни напряжения (к примеру, 0-5В) ширина период высота Вы уже делали схемы с использованием ШИМ.
  • 7. Сервомоторы •Могут принимать положение от 0 до 180º (обычно) •Внутренняя схема с обратной связью и редуктором сама делает всё сложное за Вас •Простой интерфейс ШИМ 5В из 3-х проводов Точнее, это сервомашинки, используемые в авиамоделировании, энтузиастами в качестве хобби. Вообще говоря, «сервомотор» - это мотор с внутренним механизмом обратной связи, который позволяет отправлять команды «принять позицию» без необходимости Вам считывать текущую позицию.
  • 8. Сервомашинки прекрасны •Мотор постоянного тока •Редуктор с большим моментом •Потенциометр, считывающий позицию •Схема с обратной связью считывает потенциометр и управляет мотором •Всё встроено, Вам только нужно скормить ей ШИМ-сигнал У таких небольших синих сервомашинок можно посмотреть на внутренности.
  • 9. Для чего хороши сервы? •Они в ходу у робототехников, авторов киноспецэффектов и марионеточников •Везде, где Вам нужно управляемое, повторяемое движение. •Можно превратить вращение в линейное движение при помощи хитрых механических рычагов. Даже в одежде сейчас используются сервы: http://www.technologyreview.com/read_article.aspx?id=17639&ch=infotech:
  • 10. Сервомашинки •Бывают всех размеров •От сверх-миниатюрных •до двигающих-машину •Но у всех один и тот же 3-проводной интерфейс •Сервы определяются через: 157 г 9 г Вес: 9 г Скорость: 12с/60° @ 6В Момент: 1.5кг/см @ 6В Напряжение: 4.6~6В Размер: 21x11x28 мм http://rctoys.com/ http://hobbypeople.net/
  • 11. Крепление и удлинение сервы Множество способов прикрепить серву И превратить её вращательное движение в другие типы движения Скоба для крепления: http://www.sierragiant.com/prod28.html
  • 12. Управление сервой 180º Питание (+5В) Земля (0В) Управление (ШИМ) •Частота ШИМ - 50 Гц (каждые 20 мс) •Ширина импульса от 1 до 2 миллисекунд •1 мс = крайняя позиция против часовой •2 мс = крайняя позиция по часовой
  • 13. Движение сервы 0 градусов 90 градусов 180 градусов 1000 микросекунд 1500 микросекунд 2000 микросекунд На практике ширина импульса может быть от 500 до 2500 микросекунд (добавим метку из провода к серве, как на картинке выше) Поставьте красную «руку» на Вашу серву. Для этого нужна отвёртка. Многие покупные серводрайверы имеют калибровку, чтобы справляться с различными сервами.
  • 14. Серва и Arduino Добавьте несколько проводов к разъёму сервы Земля Питание ШИМ-управление Советую подбирать цвета проводов согласно общепринятой маркировке, насколько это возможно.
  • 15. Серва и Arduino Подключите управляющий провод к 7 цифровому пину Подключите питание
  • 16. Двигаем сервомашинку Перемещает серво- машинку в доступных ей пределах “ServoSimple” Функцией delayMicroseconds() задаётся ширина импульса Функцией delay() задаётся частота импульса Скетч есть в раздаточном материале Написана специальная функция для выдачи импульсов на сервомашинку. Новая функция “delayMicroseconds()”. Как “delay()”, но задержка в микросекундах (µs), а не миллисекундах (ms). На самом деле, просто ждать 20 миллисекунд не вполне правильно. Должно быть: 20 — (ширина_импульса/1000) (1000 микросекунд = 1 миллисекунда, и 1000 миллисекунд = 1 секунда)
  • 17. Серва, управляемая через последовательный порт Последний пример с сервомашинкой, к которому добавлен стандартный последовательный ввод Управляйте сервомашинкой, нажимая на клавиши с цифрами. “ServoSerialSimple” Скетч есть в раздаточном материале. Зачем этот цикл «for»? Потому что сервомашинке требуется время, чтобы перейти на нужную позицию, а памяти у неё нет.
  • 18. Шаг в сторону: управление Arduino •Любая программа на компьютере, не только программы для Arduino, могут управлять платой Arduino •В Unix-системах, таких как Mac OS X и Linux, можно даже из командной строки: demo% export PORT=/dev/tty.usbserial-A3000Xv0 demo% stty -f $PORT 9600 raw -parenb -parodd cs8 -hupcl -cstopb clocal demo% printf "1" > $PORT # rotate servo left demo% printf "5" > $PORT # go to middle demo% printf "9" > $PORT # rotate servo right Unix — это нереально круто.
  • 19. Идея роботизированной игрушки для кошки Приклейте скотчем ёршик, и, используя случайное поведение, аналогичное «пламени свечи», сделайте случайно двигающуюся игрушку для кошки Удостоверьтесь, что надёжно закрепили сервомашинку перед тестовыми запусками. У кошек очень хорошо получается разбирать электронные прототипы.
  • 20. Проблемы со временем •Две проблемы с последним скетчем •Когда выполняется servoPulse(), ничто другое выполняться не может •Серве не выдаются периодические импульсы для удержания позиции •Нужно выполнять две разных “задачи”: •Считывание с последовательного порта •Управление сервомашинкой Если серве не говорят постоянно, что делать, она расслабляется и не поднимает/толкает/тянет.
  • 21. Более продвинутый вариант управления сервой Работает как ServoSerialSimple (но лучше) Вызывает “millis()”, чтобы узнать время Обновляет позицию сервы, когда нужно, а не просто в момент вызова. “ServoSerialBetter” Скетч в раздаточном материале. Жертвует временем (дополнительные переменные) ради более удобной логики. Можно вызывать updateServo() как угодно часто, серва перемещается только тогда, когда это необходимо.
  • 22. Несколько сервомашинок •Технология updateServo() может применяться к нескольким сервам •Единственное ограничение — число свободных цифровых выходов •Проблемы начинаются, когда количество сервомашинок превышает 8
  • 23. «Многозадачность» • Определите задачу • Разбейте её на несколько частей, основываясь на времени выполнения («кванты времени») • Поместите эти участки кода в отдельные функции • С помощью millis() определяйте, какой участок должен сейчас выполняться • Вызывайте функции из loop() Концепция updateServo() полезна, когда нужно «делать много дел одновременно» в скетче Arduino: Внутри участков кода избегайте использования delay(), циклов for и других языковых конструкций, которые заставляют код выполняться слишком долго внутри кванта времени. Это называется “кооперативная многозадачность”, и так работали ОС в 80-е.
  • 24. ШИМ в Arduino •В Arduino есть встроенный ШИМ •На выходах 9, 10, 11 •Используйте analogWrite(pin,value) •Работает на высокой, фиксированной частоте (поэтому не годен для серв) •Но отлично подходит для светодиодов и моторов •Использует встроенные электрические цепи ШИМ чипа ATmega8 -» не нужно дополнительного программирования почему всё программно, разве в Arduino нет ШИМ? Частота ШИМ, используемая в analogWrite() в настоящий момент по умолчанию равна 450Гц или 30 кГц. Я точно не помню, но её нельзя изменить, пока Вы не поймёте на более глубоком уровне работу AVR. Так что при программировании AVR-чипов вне среды Arduino, скорость ШИМ может быть назначена практически любой.
  • 26. Последовательная коммуникация Разные провода для передачи и приёма Асинхронная коммуникация асинхронный – без тактирования Данные передаются установкой уровней HIGH/LOW в нужное время Синхронная коммуникация синхронный – с тактированием Данные передаются установкой HIGH/LOW, когда изменяется тактовый сигнал Один провод для тактирования и провод для каждого направления, передачи данных, как и раньше TX RX RX TX BУстройство такт A->Bданные B->Aданные Оба устройства должны иметь устойчивый «ритм» Ни одному из устройств не нужен устойчивый ритм, но одно из них является дирижёром Какой из них лучше? Зависит от конкретного приложения. Асинхронный хорош, когда имеются только два устройства, и они заранее настроены так, чтобы быть согласованными по скорости (как в ваших скетчах Arduino). Синхронный в целом лучше для высоких скоростей (потому что не требуется точное тактирование, достаточно лишь следить за тактовым проводом). Устройство АBУстройствоУстройство А
  • 27. I2C, также известная как «Два провода» (Two-wire) -Перифе рийное - 1устр во • • • данныеSDA тактSCK Синхронная последовательная шина с общей линией данных маленькая сеть для Ваших устройств •До 127 устройств на одной шине •Скорость передачи данных до 1Мб/сек •Очень простой протокол (по сравнению с USB,Ethernet, и т.д) •Встроен во многие микроконтроллеры Общая линия данных означает, что устройства должны соглашаться о том, когда их очередь «говорить». Как в радиосвязи гражданского диапазона (CB), когда Вы говорите «Приём», чтобы показать, что Вы закончили говорить и готовы слушать собеседника. См. “Введение в I2C”: http://www.embedded.com/story/OEG20010718S0073 “I2C” расшифровывается как “Inter-Integrated Circuit”, но никто её так не называет И если Ваш микроконтроллер не имеет встроенной аппаратной поддержки I2C, можно запрограммировать её вручную (это всё равно приходится делать для управляющих устройств) Ведущее устройство -Перифе рийное - 2устр во -Перифе рийное - Nустр во
  • 28. Множество устройств с I2C датчик касания компас FM-передатчик энергонезависимая память ЖК-дисплей датчик температуры и влажности И многие другие (гироскопы,клавиатуры, моторы,...) Изображения со Sparkfun.com, кроме ЖК-экрана с matrixorbital.com
  • 29. Обязательная реклама BlinkM Умный светодиод с I2C Сам делает всю сложную работу по генерации ШИМ Это можно купить со Sparkfun.com.
  • 30. Нунчак Nintendo Wii • Стандартный интерфейс I2C • 3-осевой акселерометр с 10-битным разрешением • 2-осевой аналоговый джойстик с 8-битным А/Ц преобразователем • 2 кнопки • $20 Если Вы взглянете на архитектуру Nintendo Wii и периферийные устройства, Вы увидите нехарактерное для Nintendo следование стандартам. Wii-контроллер - самый яркий пример. Подключение к нему осуществляется через стандартную шину I2C. Дистанционные Wii-устройства общаются через Bluetooth HID с приставкой Wii (или Mac, или PC). Нунчак легко соединить с Arduino, Basic Stamp и с большинством других микроконтроллеров, так как он использует стандартный интерфейс I2C. См: http://www.wiili.org/index.php/Wiimote/Extension_Controllers/Nunchuk и: http://www.windmeadow.com/node/42 и: http://todbot.com/blog/2007/10/25/boarduino-wii-nunchuck-servo/ Обратите внимание на Wii Remote - кроме Bluetooth HID-интерфейса, в нём есть ещё акселерометры, кнопки, динамик, память, и он является ведущим (master) в шине I2C.
  • 31. Акселерометр? •Измеряет ускорение (изменение скорости) •Как в машине, когда вас вдавливает в кресло •Сила притяжения — тоже ускорение •Поэтому, в том числе, измеряет наклон горизонтально наклон вправо наклон влево
  • 32. Акселерометр в Нунчаке Я не уверен, что правильно изобразил оси Нунчака.. Изображение осей Wiimote с сайта: http://www.wiili.org/index.php/Wiimote Оси акселерометра Wii-пульта и Нунчака
  • 33. I2C в Arduino •I2C встроен в чип Arduino ATmega168 •Используйте библиотеку “Wire” для доступа к нему •Аналоговый вход 4 — сигнал SDA •Аналоговый вход 5 — сигнал SCK
  • 34. Библиотека Arduino “Wire” Отправление данных Начать посылку Подключиться к шине I2C (как ведущий (master)) Послать данные Загрузить библиотеку Wire Закончить посылку О том, что делают разные команды, можно прочитать в инструкции/документации к конкретному устройству.
  • 35. Получение данных Запросить данные с устройства Получить данные Типы возможных взаимодействий зависят от устройства, с которым Вы общаетесь У большинства устройств есть несколько “команд” Библиотека Arduino “Wire” Подключиться к шине I2C (как ведущий (master)) А о том, что делают разные команды, можно прочитать в инструкции/документации к конкретному устройству.
  • 36. Подключение Нунчака Мы можем отрезать разъём и подключиться непосредственно к проводам Но вместо этого, используем эту маленькую плату-адаптер
  • 37. Адаптер Wii-Нунчака SCK GND +V SDA n/c n/c Расположение выводов Нунчака (если смотреть внутрь разъёма Нунчака) Расположение выводов адаптера +V SCK SDAGND Внимание! На адаптере есть обозначения, но они неправильные. Так что Вам придётся положиться на вышеприведённые диаграммы.
  • 38. Сборка схемы GND SDA +5V SCK SDA (пин 4) SCK (пин 5)
  • 40. Пробуем Нунчак “NunchuckPrint” Считываем показания Нунчака каждую 1/10-ю секунды и выводим на экран все данные: - положение джойстика (x,y) - акселерометр (x,y,z) - кнопки Z,C Использует основы библиотеки Arduino, которую я сейчас пишу.
  • 41. Добавляем сервомашинку Перемещайте серву движением своей руки “NunchuckServo” Вы - киборг! Нажимайте кнопку Z, чтобы мигать светодиодом на 13-м выводе Используется разделение на кванты времени, упомянутое ранее.
  • 42. Нунчак и сервомашинка Поверните Нунчак И серва повторит Ваши движения
  • 43. Эмулятор Сегвэя — , NunchuckServo.В основе тот же код что и в : http://todbot.com/blog/2007/10/25/boarduino-wii-nunchuck-servo/Подробнее
  • 44. Идём дальше •Сервомашинки •Соедините их вместе - получится рука робота с несколькими степенями свободы. •Сделайте “серво-запись”: переводите движения руки в положения сервы, и затем проигрывайте эти записи. •Отлично годится для развлекательной аниматроники
  • 45. Идём дальше •Устройства с I2C •Попробуйте другие устройства •Подключите их к тем же проводам, что и Нунчак. •Кооперативная многозадачность •Попробуйте сделать терменвокс из Нунчака и пьезоэлемента •Можно ли заставить предыдущие примеры реагировать быстрее?
  • 46. Идём дальше •Нунчак •Пространственный датчик движения. Управляйте чем угодно, как если бы Вы махали волшебной палочкой! •Как насчёт джойстика? У нас даже не было времени с ним поиграть. •Альтернативное устройство ввода для Вашего компьютера: управляйте программами на Processing и т.д.
  • 47. В итоге Вы изучили множество разных физических деталей светодиоды моторы акселерометры сервомашинки пьезоэлементы резистивные датчики переключатели/кнопки
  • 48. В итоге И вы изучили множество программных деталей широтно-импульсная модуляция коммуникация через последовательный порт цифровой ввод-вывод аналоговый ввод-вывод управляемый данными код (data driven code) частотная модуляция многозадачность I2C
  • 49. В итоге Надеемся, Вам понравилось, продолжайте играть с Arduino! Не стесняйтесь писать мне, чтобы пообщаться обо всем этом.
  • 50. Тод Е. Курт tod@todbot.com КОНЕЦ занятия 4 http://todbot.com/blog/bionicarduino/ Не стесняйтесь писать мне на почту, если есть вопросы