SlideShare a Scribd company logo
Arduino и бионика

          Введение в микроконтроллеры с Arduino




          Занятие 4

20 ноября 2007 - machineproject — Тод Е. Курт

Перевод на русский язык
13 апреля 2012 — robofreak.ru — Татьяна Волкова
Программа на сегодня

• Про ШИМ
• Управление сервомашинками
• Про шину I2C
• Использование I2C с Arduino
• Про акселерометры
• Нунчак Nintendo Wii как устройство ввода
Повторение:
            мигающий светодиод
            Удостоверьтесь, что всё
            по-прежнему работает



                                                                компиляция




                                                                 загрузка


Загрузите                                                       TX/RX мигают
«File/Sketchbook/Examples/Digital/Blink»
                                                                  скетч
                                                                  стартует
Измените значение в «delay()», чтобы изменить частоту мигания
Широтно-импульсная
       модуляция
• Часто называется просто «ШИМ»
• Компьютеры не могут выдавать
 аналоговое напряжение
 • Только цифровое (0 вольт либо 5 вольт)
• Но вы можете его изобразить
 • если усредните цифровой сигнал,
   скачущий между напряжениями
• Например...
ШИМ
  Выходное напряжение — среднее между
  временем включения и выключения
выходное напряжение = (время_вкл / время_выкл) * максимальное_напряжение

           5 вольт
                                                                3.75 вольт
           0 вольт
                       75%    25%    75%    25% 75%       25%


           5 вольт
                                                                2.5 вольт
           0 вольт
                      50%    50%    50%    50%    50%    50%


           5 вольт


           0 вольт                                              1.0 вольт
                     20%    80%    20%    80%    20%    80%
ШИМ
         • Используется везде
            • Регуляторы яркости ламп, управление
               скоростью мотора, подача питания,
               создание звука

         • Три характеристики ШИМ-сигнала
            • Ширина импульса (мин/макс)
            • Период импульса
              (= 1/число импульсов в сек.)           ширина

            • Уровни напряжения
               (к примеру, 0-5В)            высота


                                                      период
Вы уже делали схемы с использованием ШИМ.
Сервомоторы
   •Могут принимать
      положение
      от 0 до 180º (обычно)
  •   Внутренняя схема
      с обратной связью
      и редуктором
      сама делает всё
      сложное за Вас
  •   Простой интерфейс
      ШИМ 5В из 3-х
      проводов
Точнее, это сервомашинки, используемые в авиамоделировании, энтузиастами в качестве
хобби.
Вообще говоря, «сервомотор» - это мотор с внутренним механизмом обратной связи,
который позволяет отправлять команды «принять позицию» без необходимости Вам
считывать текущую позицию.
Сервомашинки прекрасны
    • Мотор постоянного тока
    • Редуктор с большим моментом
    • Потенциометр,
        считывающий позицию
    • Схема с обратной связью
        считывает потенциометр
        и управляет мотором
    • Всё встроено, Вам только
        нужно скормить ей ШИМ-сигнал

У таких небольших синих сервомашинок можно посмотреть на внутренности.
Для чего хороши сервы?

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


Даже в одежде сейчас используются сервы:
http://www.technologyreview.com/read_article.aspx?id=17639&ch=infotech :
Сервомашинки
  • Бывают всех размеров
   • От сверх-миниатюрных             9г
   • до двигающих-машину
  • Но у всех один и тот же
       3-проводной интерфейс
  • Сервы определяются через:
                Вес: 9 г
            Скорость: 12с/60° @ 6В
             Момент: 1.5кг/см @ 6В
                                     157 г
          Напряжение: 4.6~6В
              Размер: 21x11x28 мм
http://rctoys.com/
http://hobbypeople.net/
Крепление и
              удлинение сервы

Множество способов
прикрепить серву




 И превратить её
 вращательное движение
 в другие типы движения

Скоба для крепления:   http://www.sierragiant.com/prod28.html
Управление сервой
                          Земля (0В)
180º                      Питание (+5В)
                          Управление
                             (ШИМ)

  • Частота ШИМ - 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(),
         ничто другое выполняться не может
     • Серве не выдаются периодические
         импульсы для удержания позиции
  • Нужно выполнять две разных “задачи”:
   • Считывание с последовательного порта
   • Управление сервомашинкой
Если серве не говорят постоянно, что делать, она расслабляется и не
поднимает/толкает/тянет.
Более продвинутый
      вариант управления сервой

“ServoSerialBetter”
     Работает как
   ServoSerialSimple
       (но лучше)


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

       Вызывает “millis()”,
       чтобы узнать время

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

• Технология updateServo() может
 применяться к нескольким сервам
• Единственное ограничение — число
 свободных цифровых выходов
• Проблемы начинаются, когда количество
 сервомашинок превышает 8
«Многозадачность»
            Концепция updateServo()
       полезна, когда нужно «делать много
       дел одновременно» в скетче Arduino:

         • Определите задачу
         • Разбейте её на несколько частей, основываясь на
             времени выполнения («кванты времени»)

         • Поместите эти участки кода в отдельные функции
         • С помощью millis() определяйте, какой участок
             должен сейчас выполняться

         • Вызывайте функции из loop()
Внутри участков кода избегайте использования delay(), циклов for и других языковых
конструкций, которые заставляют код выполняться слишком долго внутри кванта времени.
Это называется “кооперативная многозадачность”, и так работали ОС в 80-е.
ШИМ в Arduino
          почему всё программно, разве
               в Arduino нет ШИМ?

        • В Arduino есть встроенный ШИМ
        • На выходах 9, 10, 11

        • Используйте analogWrite(pin,value)
        • частоте (поэтому не годен для серв)
          Работает на высокой, фиксированной


        • светодиодов и моторов
          Но отлично подходит для


        • чипа ATmega8 -» не нужно дополнительного
          Использует встроенные электрические цепи ШИМ

            программирования
Частота ШИМ, используемая в analogWrite() в настоящий момент по умолчанию равна
450Гц или 30 кГц. Я точно не помню, но её нельзя изменить, пока Вы не поймёте на более
глубоком уровне работу AVR.
Так что при программировании AVR-чипов вне среды Arduino, скорость ШИМ может быть
назначена практически любой.
Перерыв
Последовательная
                      коммуникация
Асинхронная коммуникация                     Синхронная коммуникация

                    TX   RX                                      такт
                                                               данные A->B
     Устройство А             Устройство B      Устройство А                 Устройство B
                                                               данные B->A
                    RX   TX




асинхронный – без тактирования               синхронный – с тактированием
Данные передаются установкой                 Данные передаются установкой
уровней HIGH/LOW в нужное время              HIGH/LOW, когда изменяется
                                             тактовый сигнал

                                             Один провод для тактирования
Разные провода для передачи и приёма
                                             и провод для каждого направления,
                                             передачи данных, как и раньше

   Оба устройства должны иметь               Ни одному из устройств не нужен устойчивый
   устойчивый «ритм»                         ритм, но одно из них является дирижёром
Какой из них лучше? Зависит от конкретного приложения. Асинхронный хорош, когда
имеются только два устройства, и они заранее настроены так, чтобы быть согласованными
по скорости (как в ваших скетчах Arduino).
Синхронный в целом лучше для высоких скоростей (потому что не требуется точное
тактирование, достаточно лишь следить за тактовым проводом).
I2C, также известная как
 «Два провода» (Two-wire)
               Синхронная последовательная шина
               с общей линией данных
               маленькая сеть для Ваших устройств

                              SCK                                             такт
                  Ведущее
                 устройство
                              SDA                                             данные


                                    Перифе-     Перифе-           Перифе-
                                    рийное      рийное      •••   рийное
                                    устр-во 1   устр-во 2         устр-во N




         •До 127 устройств на одной шине
         •Скорость передачи данных до 1Мб/сек
         •Очень простой протокол (по сравнению с USB,Ethernet, и т.д)
         •Встроен во многие микроконтроллеры
Общая линия данных означает, что устройства должны соглашаться о том, когда их
очередь «говорить». Как в радиосвязи гражданского диапазона (CB), когда Вы говорите
«Приём», чтобы показать, что Вы закончили говорить и готовы слушать собеседника.

См. “Введение в I2C”: http://www.embedded.com/story/OEG20010718S0073
“I2C” расшифровывается как “Inter-Integrated Circuit”, но никто её так не называет
И если Ваш микроконтроллер не имеет встроенной аппаратной поддержки I2C, можно
запрограммировать её вручную
(это всё равно приходится делать для управляющих устройств)
Множество устройств с 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.
Акселерометр?
• Измеряет ускорение
  (изменение скорости)

• Как в машине, когда вас
  вдавливает в кресло

• Сила притяжения — тоже ускорение
• Поэтому, в том числе, измеряет наклон

                   горизонтально   наклон вправо   наклон влево
Акселерометр в Нунчаке




                           Оси акселерометра
                           Wii-пульта и Нунчака
Я не уверен, что правильно изобразил оси Нунчака..

Изображение осей Wiimote с сайта:   http://www.wiili.org/index.php/Wiimote
I2C в Arduino

• I2C встроен в чип Arduino
  ATmega168

• Используйте библиотеку
  “Wire” для доступа к нему

• Аналоговый вход 4 —
  сигнал SDA

• Аналоговый вход 5 —
  сигнал SCK
Библиотека Arduino “Wire”
                           Отправление данных
   Загрузить
библиотеку Wire
Подключиться
  к шине I2C
(как ведущий (master))

 Начать посылку
 Послать данные
Закончить посылку




О том, что делают разные команды, можно прочитать в инструкции/документации к
конкретному устройству.
Библиотека Arduino “Wire”
                            Получение данных

    Подключиться
      к шине I2C
   (как ведущий (master))


Запросить данные
  с устройства

   Получить данные



 Типы возможных взаимодействий зависят от устройства, с
 которым Вы общаетесь
              У большинства устройств есть несколько “команд”

А о том, что делают разные команды, можно прочитать в инструкции/документации к
конкретному устройству.
Подключение Нунчака
Мы можем отрезать разъём и подключиться
непосредственно к проводам
                                 Но вместо этого,
                                 используем эту
                                 маленькую
                                 плату-адаптер
Адаптер Wii-Нунчака
   Расположение                              Расположение
   выводов Нунчака                           выводов адаптера
            SCK         GND
                  n/c                                                 GND      SDA




                  n/c                                                +V      SCK
          +V             SDA


     (если смотреть внутрь
     разъёма Нунчака)




Внимание! На адаптере есть обозначения, но они неправильные. Так что Вам придётся
положиться на вышеприведённые диаграммы.
Сборка схемы
               SCK (пин 5)
                 SDA (пин 4)




+5V    SCK
 GND     SDA
Подключение Нунчака
Пробуем Нунчак
  “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 и т.д.
В итоге
Вы изучили множество разных физических деталей




             переключатели/кнопки
                                    резистивные датчики
светодиоды



         пьезоэлементы

        моторы         акселерометры сервомашинки
В итоге
    И вы изучили множество программных деталей

                       коммуникация через
                       последовательный порт
широтно-импульсная
модуляция                              I2C
        аналоговый ввод-вывод
управляемый        цифровой ввод-вывод
данными код
(data driven                 частотная
code)                        модуляция
            многозадачность
В итоге

Надеемся, Вам понравилось, продолжайте
играть с Arduino!



  Не стесняйтесь писать мне,
  чтобы пообщаться обо всем этом.
КОНЕЦ занятия 4


            http://todbot.com/blog/bionicarduino/




                              Тод Е. Курт
                             tod@todbot.com

Не стесняйтесь писать мне на почту, если есть вопросы

More Related Content

Viewers also liked

Iot meetup 07.10.15
Iot meetup 07.10.15Iot meetup 07.10.15
Raspberry pi lnl
Raspberry pi lnlRaspberry pi lnl
Raspberry pi lnl
Don Doerres
 
Гирлянда для программистов
Гирлянда для программистовГирлянда для программистов
Гирлянда для программистов
GetDev.NET
 
01
0101
Arduino training day 1
Arduino training day 1Arduino training day 1
Arduino training day 1
Binod Thapa
 
Arduino – это просто!
Arduino – это просто!Arduino – это просто!
Arduino – это просто!
Marat Lukyanov
 
Лабораторная работа по программирования pic32 ChipKIT Uno32 в среде Arduino
Лабораторная работа по программирования pic32 ChipKIT Uno32 в среде ArduinoЛабораторная работа по программирования pic32 ChipKIT Uno32 в среде Arduino
Лабораторная работа по программирования pic32 ChipKIT Uno32 в среде Arduino
Anton Moiseev
 
Компьютерная графика в Processing, часть 5. Анимация
Компьютерная графика в Processing, часть 5. АнимацияКомпьютерная графика в Processing, часть 5. Анимация
Компьютерная графика в Processing, часть 5. Анимация
Tatiana Volkova
 
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 Arduino
GlobalLogic Ukraine
 
Подготовка к производству
Подготовка к производствуПодготовка к производству
Подготовка к производству
Sasha Kulam
 
Смерть тайм-менеджмента
Смерть тайм-менеджментаСмерть тайм-менеджмента
Смерть тайм-менеджмента
Sasha Kulam
 
Подборка лучших мировых диджитал-продакшн студий и агентств
Подборка лучших мировых диджитал-продакшн студий и агентствПодборка лучших мировых диджитал-продакшн студий и агентств
Подборка лучших мировых диджитал-продакшн студий и агентств
Sasha Kulam
 
Echelon Indonesia 2016 - Innovation Through Opportunities in IoT & Arduino
Echelon Indonesia 2016 - Innovation Through Opportunities in IoT & ArduinoEchelon Indonesia 2016 - Innovation Through Opportunities in IoT & Arduino
Echelon Indonesia 2016 - Innovation Through Opportunities in IoT & Arduino
Andri Yadi
 
Internet of Things - Technological Perspective
Internet of Things - Technological PerspectiveInternet of Things - Technological Perspective
Internet of Things - Technological Perspective
Andri Yadi
 
Arduino projects list about 2342 arduino list of projects use arduino for p...
Arduino projects list   about 2342 arduino list of projects use arduino for p...Arduino projects list   about 2342 arduino list of projects use arduino for p...
Arduino projects list about 2342 arduino list of projects use arduino for p...
Ashraf11111
 
Школа Tech-In.RU: Cеминар 1. Основы работы с Ардуино (Аrduino) и Обзор hardwa...
Школа Tech-In.RU: Cеминар 1. Основы работы с Ардуино (Аrduino) и Обзор hardwa...Школа Tech-In.RU: Cеминар 1. Основы работы с Ардуино (Аrduino) и Обзор hardwa...
Школа Tech-In.RU: Cеминар 1. Основы работы с Ардуино (Аrduino) и Обзор hardwa...
Mikhail Rozhkov
 
CodeRage XI international Conference: Arduino + Delphi Mobile Apps
CodeRage XI international Conference: Arduino + Delphi Mobile Apps CodeRage XI international Conference: Arduino + Delphi Mobile Apps
CodeRage XI international Conference: Arduino + Delphi Mobile Apps
Vic Fernandes
 
02.10 arduino-scratchduino
02.10 arduino-scratchduino02.10 arduino-scratchduino
02.10 arduino-scratchduino
Alexander Chemeris
 
Arduino introduction
Arduino introductionArduino introduction
Arduino introduction
Abdelrahman Elewah
 

Viewers also liked (20)

Iot meetup 07.10.15
Iot meetup 07.10.15Iot meetup 07.10.15
Iot meetup 07.10.15
 
Raspberry pi lnl
Raspberry pi lnlRaspberry pi lnl
Raspberry pi lnl
 
Гирлянда для программистов
Гирлянда для программистовГирлянда для программистов
Гирлянда для программистов
 
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
 
Компьютерная графика в Processing, часть 5. Анимация
Компьютерная графика в Processing, часть 5. АнимацияКомпьютерная графика в Processing, часть 5. Анимация
Компьютерная графика в Processing, часть 5. Анимация
 
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
 
Подготовка к производству
Подготовка к производствуПодготовка к производству
Подготовка к производству
 
Смерть тайм-менеджмента
Смерть тайм-менеджментаСмерть тайм-менеджмента
Смерть тайм-менеджмента
 
Подборка лучших мировых диджитал-продакшн студий и агентств
Подборка лучших мировых диджитал-продакшн студий и агентствПодборка лучших мировых диджитал-продакшн студий и агентств
Подборка лучших мировых диджитал-продакшн студий и агентств
 
Echelon Indonesia 2016 - Innovation Through Opportunities in IoT & Arduino
Echelon Indonesia 2016 - Innovation Through Opportunities in IoT & ArduinoEchelon Indonesia 2016 - Innovation Through Opportunities in IoT & Arduino
Echelon Indonesia 2016 - Innovation Through Opportunities in IoT & Arduino
 
Internet of Things - Technological Perspective
Internet of Things - Technological PerspectiveInternet of Things - Technological Perspective
Internet of Things - Technological Perspective
 
Arduino projects list about 2342 arduino list of projects use arduino for p...
Arduino projects list   about 2342 arduino list of projects use arduino for p...Arduino projects list   about 2342 arduino list of projects use arduino for p...
Arduino projects list about 2342 arduino list of projects use arduino for p...
 
Школа Tech-In.RU: Cеминар 1. Основы работы с Ардуино (Аrduino) и Обзор hardwa...
Школа Tech-In.RU: Cеминар 1. Основы работы с Ардуино (Аrduino) и Обзор hardwa...Школа Tech-In.RU: Cеминар 1. Основы работы с Ардуино (Аrduino) и Обзор hardwa...
Школа Tech-In.RU: Cеминар 1. Основы работы с Ардуино (Аrduino) и Обзор hardwa...
 
CodeRage XI international Conference: Arduino + Delphi Mobile Apps
CodeRage XI international Conference: Arduino + Delphi Mobile Apps CodeRage XI international Conference: Arduino + Delphi Mobile Apps
CodeRage XI international Conference: Arduino + Delphi Mobile Apps
 
02.10 arduino-scratchduino
02.10 arduino-scratchduino02.10 arduino-scratchduino
02.10 arduino-scratchduino
 
Arduino introduction
Arduino introductionArduino introduction
Arduino introduction
 

Similar to Bionic arduino class4_russian

Arduino и бионика (Bionic Arduino). Часть 4. ШИМ, сервомашинки, I2C, акселеро...
Arduino и бионика (Bionic Arduino). Часть 4. ШИМ, сервомашинки, I2C, акселеро...Arduino и бионика (Bionic Arduino). Часть 4. ШИМ, сервомашинки, I2C, акселеро...
Arduino и бионика (Bionic Arduino). Часть 4. ШИМ, сервомашинки, I2C, акселеро...
Tatiana Volkova
 
Arduino и бионика (Bionic Arduino). Часть 3. Моторы, транзисторы, Processing,...
Arduino и бионика (Bionic Arduino). Часть 3. Моторы, транзисторы, Processing,...Arduino и бионика (Bionic Arduino). Часть 3. Моторы, транзисторы, Processing,...
Arduino и бионика (Bionic Arduino). Часть 3. Моторы, транзисторы, Processing,...
Tatiana Volkova
 
Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...
Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...
Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...
Tatiana Volkova
 
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Ontico
 
Доклад на Highload-2012
Доклад на Highload-2012Доклад на Highload-2012
Доклад на Highload-2012Alex Tutubalin
 
SIMD - что это такое?
SIMD - что это такое?SIMD - что это такое?
SIMD - что это такое?
Nikita Sivukhin
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладка
Sergey Platonov
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Alex Tutubalin
 
Алексей Федоров
Алексей ФедоровАлексей Федоров
Алексей Федоров
CodeFest
 
ARM vs Intel microarchitecture
ARM vs Intel microarchitectureARM vs Intel microarchitecture
ARM vs Intel microarchitectureIlya Kryukov
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
Mikhail Kurnosov
 
Unity_ Handmade graphics optimizations by Roman Chehowski
Unity_ Handmade graphics optimizations by Roman ChehowskiUnity_ Handmade graphics optimizations by Roman Chehowski
Unity_ Handmade graphics optimizations by Roman ChehowskiRoman Chehowski
 
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Unigine Corp.
 
Лекция 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
 
High performance computing - принципы проектирования сети
High performance computing - принципы проектирования сетиHigh performance computing - принципы проектирования сети
High performance computing - принципы проектирования сетиMUK
 
Как взломать телеком и остаться в живых
Как взломать телеком и остаться в живыхКак взломать телеком и остаться в живых
Как взломать телеком и остаться в живых
qqlan
 
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Ontico
 
Новая платформа Cisco ASA 5500-X
Новая платформа Cisco ASA 5500-XНовая платформа Cisco ASA 5500-X
Новая платформа Cisco ASA 5500-XCisco Russia
 
Alexander Shigin Slides
Alexander Shigin SlidesAlexander Shigin Slides
Alexander Shigin Slidesguest092df8
 

Similar to Bionic arduino class4_russian (20)

Arduino и бионика (Bionic Arduino). Часть 4. ШИМ, сервомашинки, I2C, акселеро...
Arduino и бионика (Bionic Arduino). Часть 4. ШИМ, сервомашинки, I2C, акселеро...Arduino и бионика (Bionic Arduino). Часть 4. ШИМ, сервомашинки, I2C, акселеро...
Arduino и бионика (Bionic Arduino). Часть 4. ШИМ, сервомашинки, I2C, акселеро...
 
Arduino и бионика (Bionic Arduino). Часть 3. Моторы, транзисторы, Processing,...
Arduino и бионика (Bionic Arduino). Часть 3. Моторы, транзисторы, Processing,...Arduino и бионика (Bionic Arduino). Часть 3. Моторы, транзисторы, Processing,...
Arduino и бионика (Bionic Arduino). Часть 3. Моторы, транзисторы, Processing,...
 
Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...
Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...
Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...
 
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
 
Доклад на Highload-2012
Доклад на Highload-2012Доклад на Highload-2012
Доклад на Highload-2012
 
SIMD - что это такое?
SIMD - что это такое?SIMD - что это такое?
SIMD - что это такое?
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладка
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12
 
Async Python
Async PythonAsync Python
Async Python
 
Алексей Федоров
Алексей ФедоровАлексей Федоров
Алексей Федоров
 
ARM vs Intel microarchitecture
ARM vs Intel microarchitectureARM vs Intel microarchitecture
ARM vs Intel microarchitecture
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
Unity_ Handmade graphics optimizations by Roman Chehowski
Unity_ Handmade graphics optimizations by Roman ChehowskiUnity_ Handmade graphics optimizations by Roman Chehowski
Unity_ Handmade graphics optimizations by Roman Chehowski
 
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
 
High performance computing - принципы проектирования сети
High performance computing - принципы проектирования сетиHigh performance computing - принципы проектирования сети
High performance computing - принципы проектирования сети
 
Как взломать телеком и остаться в живых
Как взломать телеком и остаться в живыхКак взломать телеком и остаться в живых
Как взломать телеком и остаться в живых
 
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
 
Новая платформа Cisco ASA 5500-X
Новая платформа Cisco ASA 5500-XНовая платформа Cisco ASA 5500-X
Новая платформа Cisco ASA 5500-X
 
Alexander Shigin Slides
Alexander Shigin SlidesAlexander Shigin Slides
Alexander Shigin Slides
 

More from srgksch

Sound Art in Russia by sergey kasich (2014)
Sound Art in Russia by sergey kasich (2014)Sound Art in Russia by sergey kasich (2014)
Sound Art in Russia by sergey kasich (2014)
srgksch
 
SA))_2012 presentation
SA))_2012 presentationSA))_2012 presentation
SA))_2012 presentation
srgksch
 
Вариант классификации современного искусства в РФ и т.д.
Вариант классификации современного искусства в РФ и т.д.Вариант классификации современного искусства в РФ и т.д.
Вариант классификации современного искусства в РФ и т.д.
srgksch
 
Атональная Архитектоника №1
Атональная Архитектоника №1Атональная Архитектоника №1
Атональная Архитектоника №1
srgksch
 
kasich interview for "baltic broadway" magazine 2014
kasich interview for "baltic broadway" magazine 2014kasich interview for "baltic broadway" magazine 2014
kasich interview for "baltic broadway" magazine 2014srgksch
 
SA))_VPWeeks: Визуальное Программирование в MAX (by sergey kasich)
SA))_VPWeeks: Визуальное Программирование в MAX (by sergey kasich)SA))_VPWeeks: Визуальное Программирование в MAX (by sergey kasich)
SA))_VPWeeks: Визуальное Программирование в MAX (by sergey kasich)
srgksch
 
Shanzai photos
Shanzai photosShanzai photos
Shanzai photossrgksch
 
Bionic arduino class3_russian
Bionic arduino class3_russianBionic arduino class3_russian
Bionic arduino class3_russian
srgksch
 
Hackspace {neuron} - first in Russia
Hackspace {neuron} - first in RussiaHackspace {neuron} - first in Russia
Hackspace {neuron} - first in Russia
srgksch
 
Xinchejian by David Li
Xinchejian by David LiXinchejian by David Li
Xinchejian by David Li
srgksch
 

More from srgksch (10)

Sound Art in Russia by sergey kasich (2014)
Sound Art in Russia by sergey kasich (2014)Sound Art in Russia by sergey kasich (2014)
Sound Art in Russia by sergey kasich (2014)
 
SA))_2012 presentation
SA))_2012 presentationSA))_2012 presentation
SA))_2012 presentation
 
Вариант классификации современного искусства в РФ и т.д.
Вариант классификации современного искусства в РФ и т.д.Вариант классификации современного искусства в РФ и т.д.
Вариант классификации современного искусства в РФ и т.д.
 
Атональная Архитектоника №1
Атональная Архитектоника №1Атональная Архитектоника №1
Атональная Архитектоника №1
 
kasich interview for "baltic broadway" magazine 2014
kasich interview for "baltic broadway" magazine 2014kasich interview for "baltic broadway" magazine 2014
kasich interview for "baltic broadway" magazine 2014
 
SA))_VPWeeks: Визуальное Программирование в MAX (by sergey kasich)
SA))_VPWeeks: Визуальное Программирование в MAX (by sergey kasich)SA))_VPWeeks: Визуальное Программирование в MAX (by sergey kasich)
SA))_VPWeeks: Визуальное Программирование в MAX (by sergey kasich)
 
Shanzai photos
Shanzai photosShanzai photos
Shanzai photos
 
Bionic arduino class3_russian
Bionic arduino class3_russianBionic arduino class3_russian
Bionic arduino class3_russian
 
Hackspace {neuron} - first in Russia
Hackspace {neuron} - first in RussiaHackspace {neuron} - first in Russia
Hackspace {neuron} - first in Russia
 
Xinchejian by David Li
Xinchejian by David LiXinchejian by David Li
Xinchejian by David Li
 

Bionic arduino class4_russian

  • 1. Arduino и бионика Введение в микроконтроллеры с Arduino Занятие 4 20 ноября 2007 - machineproject — Тод Е. Курт Перевод на русский язык 13 апреля 2012 — robofreak.ru — Татьяна Волкова
  • 2. Программа на сегодня • Про ШИМ • Управление сервомашинками • Про шину I2C • Использование I2C с Arduino • Про акселерометры • Нунчак Nintendo Wii как устройство ввода
  • 3. Повторение: мигающий светодиод Удостоверьтесь, что всё по-прежнему работает компиляция загрузка Загрузите TX/RX мигают «File/Sketchbook/Examples/Digital/Blink» скетч стартует Измените значение в «delay()», чтобы изменить частоту мигания
  • 4. Широтно-импульсная модуляция • Часто называется просто «ШИМ» • Компьютеры не могут выдавать аналоговое напряжение • Только цифровое (0 вольт либо 5 вольт) • Но вы можете его изобразить • если усредните цифровой сигнал, скачущий между напряжениями • Например...
  • 5. ШИМ Выходное напряжение — среднее между временем включения и выключения выходное напряжение = (время_вкл / время_выкл) * максимальное_напряжение 5 вольт 3.75 вольт 0 вольт 75% 25% 75% 25% 75% 25% 5 вольт 2.5 вольт 0 вольт 50% 50% 50% 50% 50% 50% 5 вольт 0 вольт 1.0 вольт 20% 80% 20% 80% 20% 80%
  • 6. ШИМ • Используется везде • Регуляторы яркости ламп, управление скоростью мотора, подача питания, создание звука • Три характеристики ШИМ-сигнала • Ширина импульса (мин/макс) • Период импульса (= 1/число импульсов в сек.) ширина • Уровни напряжения (к примеру, 0-5В) высота период Вы уже делали схемы с использованием ШИМ.
  • 7. Сервомоторы •Могут принимать положение от 0 до 180º (обычно) • Внутренняя схема с обратной связью и редуктором сама делает всё сложное за Вас • Простой интерфейс ШИМ 5В из 3-х проводов Точнее, это сервомашинки, используемые в авиамоделировании, энтузиастами в качестве хобби. Вообще говоря, «сервомотор» - это мотор с внутренним механизмом обратной связи, который позволяет отправлять команды «принять позицию» без необходимости Вам считывать текущую позицию.
  • 8. Сервомашинки прекрасны • Мотор постоянного тока • Редуктор с большим моментом • Потенциометр, считывающий позицию • Схема с обратной связью считывает потенциометр и управляет мотором • Всё встроено, Вам только нужно скормить ей ШИМ-сигнал У таких небольших синих сервомашинок можно посмотреть на внутренности.
  • 9. Для чего хороши сервы? • Они в ходу у робототехников, авторов киноспецэффектов и марионеточников • Везде, где Вам нужно управляемое, повторяемое движение. • Можно превратить вращение в линейное движение при помощи хитрых механических рычагов. Даже в одежде сейчас используются сервы: http://www.technologyreview.com/read_article.aspx?id=17639&ch=infotech :
  • 10. Сервомашинки • Бывают всех размеров • От сверх-миниатюрных 9г • до двигающих-машину • Но у всех один и тот же 3-проводной интерфейс • Сервы определяются через: Вес: 9 г Скорость: 12с/60° @ 6В Момент: 1.5кг/см @ 6В 157 г Напряжение: 4.6~6В Размер: 21x11x28 мм http://rctoys.com/ http://hobbypeople.net/
  • 11. Крепление и удлинение сервы Множество способов прикрепить серву И превратить её вращательное движение в другие типы движения Скоба для крепления: http://www.sierragiant.com/prod28.html
  • 12. Управление сервой Земля (0В) 180º Питание (+5В) Управление (ШИМ) • Частота ШИМ - 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. Более продвинутый вариант управления сервой “ServoSerialBetter” Работает как ServoSerialSimple (но лучше) Обновляет позицию сервы, когда нужно, а не просто в момент вызова. Вызывает “millis()”, чтобы узнать время Скетч в раздаточном материале. Жертвует временем (дополнительные переменные) ради более удобной логики. Можно вызывать updateServo() как угодно часто, серва перемещается только тогда, когда это необходимо.
  • 22. Несколько сервомашинок • Технология updateServo() может применяться к нескольким сервам • Единственное ограничение — число свободных цифровых выходов • Проблемы начинаются, когда количество сервомашинок превышает 8
  • 23. «Многозадачность» Концепция updateServo() полезна, когда нужно «делать много дел одновременно» в скетче Arduino: • Определите задачу • Разбейте её на несколько частей, основываясь на времени выполнения («кванты времени») • Поместите эти участки кода в отдельные функции • С помощью millis() определяйте, какой участок должен сейчас выполняться • Вызывайте функции из loop() Внутри участков кода избегайте использования delay(), циклов for и других языковых конструкций, которые заставляют код выполняться слишком долго внутри кванта времени. Это называется “кооперативная многозадачность”, и так работали ОС в 80-е.
  • 24. ШИМ в Arduino почему всё программно, разве в Arduino нет ШИМ? • В Arduino есть встроенный ШИМ • На выходах 9, 10, 11 • Используйте analogWrite(pin,value) • частоте (поэтому не годен для серв) Работает на высокой, фиксированной • светодиодов и моторов Но отлично подходит для • чипа ATmega8 -» не нужно дополнительного Использует встроенные электрические цепи ШИМ программирования Частота ШИМ, используемая в analogWrite() в настоящий момент по умолчанию равна 450Гц или 30 кГц. Я точно не помню, но её нельзя изменить, пока Вы не поймёте на более глубоком уровне работу AVR. Так что при программировании AVR-чипов вне среды Arduino, скорость ШИМ может быть назначена практически любой.
  • 26. Последовательная коммуникация Асинхронная коммуникация Синхронная коммуникация TX RX такт данные A->B Устройство А Устройство B Устройство А Устройство B данные B->A RX TX асинхронный – без тактирования синхронный – с тактированием Данные передаются установкой Данные передаются установкой уровней HIGH/LOW в нужное время HIGH/LOW, когда изменяется тактовый сигнал Один провод для тактирования Разные провода для передачи и приёма и провод для каждого направления, передачи данных, как и раньше Оба устройства должны иметь Ни одному из устройств не нужен устойчивый устойчивый «ритм» ритм, но одно из них является дирижёром Какой из них лучше? Зависит от конкретного приложения. Асинхронный хорош, когда имеются только два устройства, и они заранее настроены так, чтобы быть согласованными по скорости (как в ваших скетчах Arduino). Синхронный в целом лучше для высоких скоростей (потому что не требуется точное тактирование, достаточно лишь следить за тактовым проводом).
  • 27. I2C, также известная как «Два провода» (Two-wire) Синхронная последовательная шина с общей линией данных маленькая сеть для Ваших устройств SCK такт Ведущее устройство SDA данные Перифе- Перифе- Перифе- рийное рийное ••• рийное устр-во 1 устр-во 2 устр-во N •До 127 устройств на одной шине •Скорость передачи данных до 1Мб/сек •Очень простой протокол (по сравнению с USB,Ethernet, и т.д) •Встроен во многие микроконтроллеры Общая линия данных означает, что устройства должны соглашаться о том, когда их очередь «говорить». Как в радиосвязи гражданского диапазона (CB), когда Вы говорите «Приём», чтобы показать, что Вы закончили говорить и готовы слушать собеседника. См. “Введение в I2C”: http://www.embedded.com/story/OEG20010718S0073 “I2C” расшифровывается как “Inter-Integrated Circuit”, но никто её так не называет И если Ваш микроконтроллер не имеет встроенной аппаратной поддержки I2C, можно запрограммировать её вручную (это всё равно приходится делать для управляющих устройств)
  • 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. Акселерометр в Нунчаке Оси акселерометра Wii-пульта и Нунчака Я не уверен, что правильно изобразил оси Нунчака.. Изображение осей Wiimote с сайта: http://www.wiili.org/index.php/Wiimote
  • 33. I2C в Arduino • I2C встроен в чип Arduino ATmega168 • Используйте библиотеку “Wire” для доступа к нему • Аналоговый вход 4 — сигнал SDA • Аналоговый вход 5 — сигнал SCK
  • 34. Библиотека Arduino “Wire” Отправление данных Загрузить библиотеку Wire Подключиться к шине I2C (как ведущий (master)) Начать посылку Послать данные Закончить посылку О том, что делают разные команды, можно прочитать в инструкции/документации к конкретному устройству.
  • 35. Библиотека Arduino “Wire” Получение данных Подключиться к шине I2C (как ведущий (master)) Запросить данные с устройства Получить данные Типы возможных взаимодействий зависят от устройства, с которым Вы общаетесь У большинства устройств есть несколько “команд” А о том, что делают разные команды, можно прочитать в инструкции/документации к конкретному устройству.
  • 36. Подключение Нунчака Мы можем отрезать разъём и подключиться непосредственно к проводам Но вместо этого, используем эту маленькую плату-адаптер
  • 37. Адаптер Wii-Нунчака Расположение Расположение выводов Нунчака выводов адаптера SCK GND n/c GND SDA n/c +V SCK +V SDA (если смотреть внутрь разъёма Нунчака) Внимание! На адаптере есть обозначения, но они неправильные. Так что Вам придётся положиться на вышеприведённые диаграммы.
  • 38. Сборка схемы SCK (пин 5) SDA (пин 4) +5V SCK GND SDA
  • 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. В итоге И вы изучили множество программных деталей коммуникация через последовательный порт широтно-импульсная модуляция I2C аналоговый ввод-вывод управляемый цифровой ввод-вывод данными код (data driven частотная code) модуляция многозадачность
  • 49. В итоге Надеемся, Вам понравилось, продолжайте играть с Arduino! Не стесняйтесь писать мне, чтобы пообщаться обо всем этом.
  • 50. КОНЕЦ занятия 4 http://todbot.com/blog/bionicarduino/ Тод Е. Курт tod@todbot.com Не стесняйтесь писать мне на почту, если есть вопросы