Квадрокоптер в Израиле Quadrocopter in Israel
Главная | Каталог статей | Регистрация | Вход
Суббота
18.05.2024
22:27
Приветствую Вас Гость | RSS
Главная » Статьи » Мои статьи

Введение Arduino = контроллер для всего. Книга начинающим.
Глава 1. Введение Arduino - физическая вычислительная платформа и открытым исходным кодом,
основанная на просто плате ввода-вывода и среда разработки, которая использует язык Processing
(http://www.processing.org/).

Arduino может применяться для разработки самостоятельных интерактивных обьектов или может быть
связана с программой на вашем компьютере (такой как Flash, Processing, VVVV, или Max/MSP).
Платы могут быть собраны самостоятельно или куплены уже собранными;
среда разработки (далее IDE) может быть загружена бесплатно с сайта http://www.arduino.cc/
Arduino отличается от других платформ на рынке тем, следующими возможностями:
Это многоплатформенная среда, она может работать на Windows, Macintosh, и Linux.
Она основана на IDE языка Processing, лёгкой в использовании среде разработки,
для использования художниками и дизайнерами. Она программируется через кабель USB,
а не через последовательный порт. Это полезно, так как многие современные компьютеры
не имеют последовательных портов. Это открытые аппаратное и программное обеспечение -
если хотите, вы можете скачать схему, купить все компоненты и сделать всё сами, без оплаты разработчикам Arduino.
Компоненты недорогие. Плата USB стоит около €10 (в настоящее время около US$7-12) и замена сгоревшей микросхемы
на плате легка и стоит не более €5 или US$4. Так что вы можете ошибаться.

1.1 Целевая аудитория
Эта книга была написана для "настоящих" пользователей Arduino: дизайнеров и художников.
Поэтому она пытается объяснять вещи таким образом, который может свести некоторых инженеров с ума.
Вообще-то, один из них назвал вступительные главы моего первого проекта отстоем.
В этом-то и дело. Посмотрим правде в глаза: большинство инженеров не в состоянии объяснить то,
что они делают другим инженерам, не говоря уже об обычных людях. Примечание: Arduino опирается на
тезисную работу Эрнандо Баррагана, которую он сделал на платформе Wiring во время учебы под
началом Casey Reas и меня в IDII Ivrea.Существует множество определения дизайна взаимодействия, но я предпочитаю следующее:

1.1.1 Конструирование взаимодействия
- это дизайн любого опыта взаимодействия В сегодняшнем мире дизайн взаимодействия касается значимого
опыта между нами (людьми) и обьектами. Это хороший способ изучить возможность создания красивых и,
может быть, даже спорных опытов между нами и технологией. Дизайн взаимодействия предлагает разработку
путем интерактивного процесса, основанного на прототипах все возрастающей верности.
Такой подход - также часть некоторых типов "обычной" разработки - может быть расширен до
включения прототипирования с помощью технологии; в частности, прототипирование в электронике.
Конкретной областью дизайна взаимодействия, которой занимается Arduino, являются физические вычисления
(или физический дизайн взаимодействия).

1.2 Что такое физические вычисления?
Физические вычисления используют электронику для прототипирования новых материалов для дизайнеров и художников.
Он включает разработку интерактивных объектов, которые могут общаться с людьми с применением датчиков и
исполнительных механизмов, управляемых поведеним, которое реализовано в виде программного обеспечения,
запущенного в микроконтроллере (небольшом компьютере на одной микросхеме).
В прошлом использовать электронику означало всё время иметь дело с инженерами и создавать один маленький
компонент в то-же время. Эти вопросы отделяли творческих людей от игр с окружающей средой напрямую.
Большинство инструментов были предназначены для инженеров и требовали обширных знаний. В последние
годы микроконтроллеры стали более дешевы и легки в применении, позволяя создавать более лучшие инструменты.
Прогресс, который мы сделали с Arudino, должен приблизить эти инструменты на шаг ближе к новичкам,
позволяя людям начать создание вещей после двух-трёх дней учёбы.

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

Глава 2.
Путь Arduino Философия Arduino основана на создании проектов вместо разговоров о них.
Это постоянный поиск более быстрых и ярких способов строить лучшие прототипы.
Мы изучили множество способов прототипирования и создали способы мышления с применением рук.
Классический инжиниринг полагается на строгий процесс получения А из Б, а прелесть пути Arduino -
возможность уйти с этого пути и вместо него получить В. Это процесс рукоделия, который мы так любим -
играть с окружающей средой в бесконечном поиске и находить неожиданное.
В этом поиске путей постройки лучших прототипов мы также выбрали ряд программных пакетов,
которые обеспечили этот процесс постоянного манипулирования средой программного и
аппаратного обеспечения. Следующие несколько разделов представляют несколько философий,
событий и пионеров, которые вдохновили на Путь Arduino.

2.1 Прототип-ирование
Прототип...ирование - сердце пути Arduino: мы делаем вещи и создаём обьекты, которые взаимодействуют с другими обьектами,
людьми и сетями. Мы стремимся найти более простой и быстрый путь создания прототипа наиболее дешёвёвым способом.
Многим новичкам, который знакомятся с электроникой в первый раз, кажется что они должны научиться строить всё с нуля.
Это пустая трата энергии: что вам надо, так это очень быстро просто удостовериться в том, что что-то работает,
так-что вы сможете мотивировать себя предпринять следующий шаг или даже мотивировать кого-то ещё дать вам
побольше денег для реализации задуманного. Именно поэтому мы разработали "оппортунистическое прототипирование":
зачем тратить время и энергию, строить с нуля (процесс, который требует времени и глубоких технических знаний),
когда можно взять готовые устройства и взломать их чтобы использовать большую работу, проделанную крупными
компаниями и хорошими инженерами? Наш герой - Джеймс Дайсон, который создал 5127 прототипов своего пылесоса
прежде чем удовлетворился в том, что сделал всё как надо (www.international.dyson.com/jd/1947.asp).
 
2.2 Самоделкины Мы полагаем, что для работы с технологиями важно изучать различные возможности прямо на
аппаратном и программной обеспечении иногда без точно определённой цели. Повторное применение существующей
технологии - наилучший путь для самоделкина. Получить дешёвые игрушки или списанное оборудование и взломать
их для того, чтобы заставить их сделать что-то новое - один из способов достижения великих результатов.
(даже мистер Спок любит Ардуино!)
 
2.3 Сшивание Я всегда был очарован модульностью и возможность построения сложных систем соединением простых устройств.
Этот процесс очень хорошо показан Робертом Мугом и его аналоговыми синтезаторами. Музыканты создавали звуки,
пробую бесконечные комбинации "сшивая" различные модули при помощи кабелей. При таком подходе синтезатор выглядит
как старинный телефонный коммутатор, но в соединении со множеством кнопок, это прекрасная платформа для экспериментов
со звуком и инновационной музыкой. Муг определил это как процесс между "свидетельством и открытием" .
Я уверен, что большинство музыкантов не знали что делают все эти сотни кнопок, но они пробовали и пробовали,
перерабатывая собственный стиль безостановочным потоком.
 
2.4 Искажение схем
Искажение схемы - одна из наиболее интересных форм творчества..
Это творческое короткое замыкание низковольтных аудиоприборов с питанием от батарей, таких как педали гитарных эффектов,
детские игрушки и небольшие синтезаторы для получения новых музыкальных инструментов и генераторов звука. Сердце этого процесса -
"искусство шанса". Оно было начато Ридом Газала, который случайно закоротил гитарный усилитель железякой в своём ящике стола,
что вызвало поток необычных звуков. Что мне нравится в искажателях схем - это то, что они могут создать самые дикие устройства
при помощи технологий без понимания что они собственно делают с теоретической стороны.
Если вы приобретёте детектор движения и подключите его к своей клавиатуре, вы увидите, что как только кто-то пройдёт мимо
компьютера, будет "нажата" клавиша. Свяжите его с вашей любимой программой, и вы сделаете свой компьютер умнее писсуара. Изучение хаков клавиатуры - ключевой кирпичик прототипирования и физических вычислений.
 
2.6 Мы любим мусор! В настоящее время люди выбрасывают множество техники: старые принтеры, компьютеры, странные
офисные машины, техническое оборудование и даже множество военных устройств. Это всегда было большим рынком для такой
продвинутой технологии, особенно среди молодых и/или бедных хакеров, которые только начинают свой путь. Этот рынок стал
очевидным в Иври, где мы разрабатывали Arduino. В городе расположен главный офис компании Оливетти. Они производят компьютеры
с 1960-х годов; в середине 1990-х они выбросили всё на свалки района. Они были полны компьютерных частей, электронных
компонентов и странных устройств различных видов.
2.7 Хакайте игрушки Игрушки - фантастический источник дешёвых технологий для хака и повторного использования, об этом
свидетельствует практика искажения схем, упомянутая ранее. При нынешнем притоке очень дешёвых высокотехнологичных
игрушек из Китая вы можете быстро реализовать идеи при помощи нескольких мяукающих котов или световых мечей. Я делал это несколько лет для того чтобы заставить понять моих студентов что технология - не страшна, и не сложна в понимании. Один из моих любимых источников -
это буклет "Низкотехнологичные сенсоры и актюаторы" авторов Usman Haque и Adam Somlai-Fischer. Я думаю, что они прекрасно описали эту технику в своей книге, и я использую это при любом удобном случае.
 
2.8 Сотрудничество Сотрудничество между пользователями является одним из их ключевых принципов мира Arduino -
через форум на http://www.arduino.cc/ люди из разных уголков мира помогают друг другу в изучении платформы.
Команда Arduino побуждает людей к сотрудничеству на местном уровне, а также помогая им создавать группы пользователей в
каждом городе, который они посещают. Мы также создали Wiki, названную "Детская площадка" (www.arduino.cc/playground),
где пользователи документируют свои результаты. Это так удивительно видеть, как много знаний эти люди вываливают в сеть
для всех пользователей. Эта культура обмена опытом и помощи друг другу - одна из вещей, которыми я больше всего горжусь в связи с Arduino.
 
Глава 3.
 Платформа Arduino Arduino состоит из двух основных частей - платы Arduino, которая является частью аппаратного обеспечения,
над которым вы работаете при создании собственных обьектов; и среды разработки (IDE) Arduino - программного обеспечения,
которое вы запускаете на своём компьютере. Вы используете IDE для создания скетчей (маленьких компьютерных программ),
которые выгружаются на плату Arduino. Скетч говорит плате что делать. Не так давно работа на аппаратным обеспечением означала
создание схем с нуля, используя сотни различных компонентов со странными названиями, такими как резисторы, конденсаторы,
индуктивности, транзисторы и тому подобными. Каждая схема была спаяна для выполнения одного специфического приложения и
изменения требовали отрезания проводов, перепайки соединений и т.п. С появленияем цифровых технологий и микропроцессоров эти функции, ранее реализованные проводами, заменены программами. Программное обеспечение легче менять, чем аппаратное. Несколькими нажатиями вы можете радикально изменить логику устройства и испытать две или три её версии за то-же время, которое потребуется на перепайку нескольких резисторов.
 
 
3.1. Аппаратное обеспечение Arduino Плата Arduino - небольшая плата микроконтроллера, состоящая из небольшой схемы,
содержащей целый компьютер в маленьком чипе (микроконтроллер). Этот компьютер по крайней мере в тысячу раз менее мощный
чем MacBook, на котором я пишу эту книгу, но он намного дешевле и очень полезен для постройки интересных устройств. Посмотрите на
плату Arduino - вы увидите чёрный чип с 28 "ножками" - это ATmega168, сердце вашей платы. Мы (команда Arduino разместили на этой
плате все компоненты, требуемые для нормальной работы и связи с компьютером этого микроконтроллера. Существует много версий этой
платы; та, которую мы описываем в книге - ArduinoDuemilanove, сама простая в использовании и наилучшая для изучения.
 
Однако эти-же инструкции подходят к ранним версиям платы, включая последнюю Arduino Diecimila и более старую Arduino NG. На рис. 3-1 показана Arduino Duemilanove, на рис. 2 - Arduino NG. На иллюстрациях ниже вы видите плату Arduino. Во-первых, все эти разъёмы могут немного напугать. Вот пояснение того, что делает каждый элемент платы: 3.1.1 14 контактов цифрового ввода-вывода (контакты 0-13) Они могут быть как входами, так и выходами, что определяется вашим скетчем. 3.1.2 6 контактов аналогового входа (контакты 0–5) Эти отдельные контакты для аналогового входа получают аналоговые значения (например, величину напряжение в датчике) и преобразовывают их в цифры от 0 до 1023. 3.1.3
Контакты аналогового выхода (контакты 3, 5, 6, 9, 10 и 11) Шесть цифровых контактов, которые могут быть запрограммированы на аналоговый выход при помощи вашего скетча. Плата может быть запитана от USB-порта компьютера, большинства USB-зарядных устройств, или от AC-адаптера (рекомендуется напряжением 9 вольт, разъём 2,1мм, плюс в центре). Если в разъём питания не подключён источник, плата получает питания от USB-разъёма, но как только вы подключите источник питания, она автоматически переключится на него. Примечание: Если вы используете старую Arduino-NG или Arduino Diecimila, вам надо установить перемычку выбора питания (помеченную на плате PWR_SEL) на отметку EXT (внешнее) или USB-питание. Эта перемычка расположена между разъмёмом для AC-адаптера и USB-портом. Рис. 3-1. Arduino Duemilanove Рис. 3-2. Arduino NG 3.2 Интегрированная среда разработки (IDE) IDE (интегрированная среда разработки) - это специальная программа, работающая на вашем копьютере, которая позволяет вам писать скетчи для платы Arduino на простом языке по образцу языка Processing. Когда вы нажмёте кнопку выгрузки скетча на плату, случится волшебство - код, который вы написали, будет транслирован в язык C (который немного сложен для начинающих), и будет передан компилятору avr-gcc, важной части открытого программного обеспечения, который и произведёт финальную трансляцию в язык, понятный микроконтроллеру. Последний шаг очень важен, так как Arduino упрощает вам жизнь, скрывая все возможны есложности программирования микроконтроллеров. Цикл программирования Arduino упрощённо выглядит так: Подключите вашу плату в USB-порт своего компьютера. Напишите скетч, оживляющий плату Выгрузите этот скетч на плату через USB-соединение и подождите несколько секунд для перезапуска платы Плата выполнит написанный вами скетч. Примечание: Установка Arduino на Linux в настоящее время немного усложнена. См. полные инструкции на www.arduino.cc/playground/Learning/Linux.
 
3.3. Установка Arduino на ваш компьютер Чтобы запрограммировать вашу плату Arduino, сначала вы должны скачать среду разработки (IDE) отсюда: www.arduino.cc/en/Main/Software. Выберите подходящую версию для своей операционной системы. Скачайте файл и дважды щёлкните на нём для распаковки; он создаст папку с именем arduino-[версия], например, arduino-0012. Перетащите эту папку в любое удобное вам место: на рабочий стол, в свою папку или папку приложений (на Mac), или в папку C:\Program Files (на Windows). Теперь, когда вы захотите запустить среду разработки Arduino, откройте эту папку и дважды щёлкните на иконке Arduino. Пока-что не делайте этого, нам требуется выполнить ещё один шаг. Примечание: Если у вас есть проблемы с запуском Arduino IDE, см. Главу 7, Устранение неполадок. Теперь вам требуется установить драйверы, которые позволят вашему компьютеру общаться с платой через порт USB.
 
3.4 Установка драйверов: Macintosh Загляните в папку Drivers внутри папки arduino-0012 и дважды щёлкните на файле FTDIUSBSerialDriver_x_x_x.dmg (x_x_x означает номер версии драйвера, например, FTDIUSBSerialDriver_v2_2_9_Intel.dmg). Дважды щёлкните на файле .dmg для того, чтобы примонтировать его. Примечание: Если вы используете Mac на платформе Intel, такой как MacBook, MacBook Pro, MacBook Air, Mac Pro или Mac Mini на базе Intel, или iMac, удостоверьтесь что вы устанавливаете драйвер с текстом "Intel" в его имени, например FTDIUSBSerialDriver_v2_2_9_Intel.dmg. Если ваш Mac не на базе Intel, устанавливайте файл без текста "Intel" в названии. Далее установите пакет FTDIUSBSerialDriver при помощи двойного щелчка на нём. Следуйте инструкциям, которые показывает программа установки и введите пароль администратора когда он будет запрошен. В конце процесса перезапустите машину чтобы удостовериться в том, что драйверы установлены корректно. Теперь подключите плату к компьютеру. На плате должен загореться светодиод "PWR", а жёлтый светодиод, обозначенный "L", должен начать мигать. Если этого не произошло, смотрите Главу 7, Устранение неполадок.
 
3.5 Установка драйверов: Windows Подключите плату Arduino к компьютеру; когда появится окно помощника "Найдено новое оборудование", Windows попробует найти драйвер на сайте Windows Update. Windows XP спросит вас, проверять-ли сайт Windows Update - если вы не хотите этого делать, выберите "Нет, не в этот раз" и нажмите "Далее". На следующем экране выберите "Установить из указанного места" и нажмите "Далее". Отметьте галочкой опцию "Искать в следующих местах", нажмите "Обзор", выберите папку, в которую вы установил Arduino, и выберите папку Drivers\FTDI USB Drivers. Нажмите "ОК" и "Далее". Windows Vista сначала попробует найти драйвер на сервере Windows Update; и если не получится, вы сможете указать папку Drivers\FTDI USB Drivers. Вам придётся пройти эту процедуру дважды, так как сначала компьютер установит драйвер низкого уровня, а затем установит часть кода, которая заставляет плату выглядет как последовательный порт компьютера. После того, как драйверы установлены, вы можете запускать Arduino IDE и начинать использовать Arduino. Далее, вы должны узнать, какой порт назначен плате Arduino - эта информация понадобится вам в дальнейшем. Инструкции по получению этой информации следуют ниже.
 
3.6 Идентификация порта: Macintosh Из меню "Tools" в среде разработки Arduino, выберите "Serial Port" и выберите порт, который начинается с /dev/cu.usbserial-; это имя, которое компьютер использует для обращения к плате Arduino. Рис 3-3 показывает список портов. Рис. 3.3 Список портов в Arduino IDE 3.7 Идентификация порта: Windows В Windows процесс чуть сложнее - по крайней мере, в начале. Откройте Диспетчер устройств: щёлкнув кнопку "Пуск", правой кнопкой щёлкните "Компьютер" (Vista) или "Мой компьютер" (XP), и выбрав "Свойства". Для Windows XP, щёлкните "Оборудование" и выберите "Диспетчер устройств". В Vista, щёлкните на "Диспетчер устройств" (в списке приложений в левой части окна). Найдите устройство Arduino в списке "Порты (COM и LPT)". Arduino будет видна как последовательный порт USB и будет иметь имя вида COM3, как показано на рис. 3.4. Рис. 3.4 Диспетчер устройств Windows показывает все доступные последовательные порты Примечание: На некоторых машинах с Windows порт COM может получить номер больше 9; такая нумерация создаёт некоторые проблемы при попытках общения с Arduino.
 
В Главе 7. Устранение неполадок описано решение этой проблемы. После того, как вы определили COM-порт, вы можете выбрать его из меню "Tools" > "Serial Port" в IDE Arduino. Теперь ваша среда разработки Arduino может общаться с платой Arduino и программировать её. Глава 4. Знакомство с Arduino - теперь точно! Теперь вы научитесь как создавать программу и программировать интерактивное устройство. 4.1 Анатомия интерактивного устройства Все обьекты, которые мы построим с применением Arduino, следуют простому шаблону, который назовём "интерактивное устройство". Интерактивное устройство - это электронная схема, которая может "ощущать" окружающую среду, используя сенсоры (электронные компоненты, которые преобразуют измерения реального мира в электрические сигналы) . Устройство обрабатывает информацию, полученную от этих датчиков образом, определённым в программном обеспечении. Устройство может взаимодействовать с окружением посредством актюаторов - электронных компонентов, которые преобразуют электрические сигналы в физические действия. Рис. 4-1. Интерактивное устройство 4.2 Сенсоры и актюаторы Сенсоры и актюаторы - это электронные компоненты, которые позволяют электронике взаимодействовать с окружающим миром. Так как микроконтроллер - это очень простой компьютер, он может обрабатывать только электрические сигналы (похоже на электрические импульсы, которые посылаются между нейронами в нашем мозге). Для того, чтобы определить освещённость, температуру, или другие физические величины, ему требуется что-то для преобразования их в электричество. В нашем теле, для примера, глаз преобразовывает свет в сигналы, которые отправляются в мозг при помощи нервов. В электронике мы можем использовать простой прибор, называемый светочувствительный резистор (или фоторезистор), который может измерить количество света, попадающего на него и передать это как понятный микроконтроллеру сигнал. После того, как датчик будет прочитан, устройство имеет информацию, требуемуя для определения своего поведения. Процесс выбора решения выполняется микроконтроллером, а действие выполняется актюатором. В нашем теле, например, мускулы получают электрические сигналы от мозга и преобразуют их в движение. В мире электроники эти функции могут быть выполнены лампой или электродвигателем. В следующих разделах вы научитесь считывать датчики различных типов и управлять разными актюаторами.
 
4.3 Мигание светодиодом Скетч, мигающий светодиодом - первая программа, которую вам следует запустить для проверки того, что плата Arduino работает и настроена правильно. Это также самое первое программное упражнение, которое выполняет каждый изучающий программирование микроконтроллеров. Светоизлучающий диод (светодиод) - это маленький электрический компонент, который похож на лампочку, но более эффективен и требует меньшего напряжения для работы. Ваша плата Arduino уже имеет установленный светодиод. Он обозначен "L". Вы также можете добавить свой собственный светодиод - подключите его как показано на рис. 4-2. "К" обозначает катод (отрицательный вывод), или более короткий вывод; "А" обозначает анод (положительный вывод), более длинный вывод. После того, как светоидод подключён, вам надо сказать плате Arduino что делать. Это делается кодом - списком команд, которые мы даём микроконтроллеру чтобы он делал то что мы хотим. Рис. 4.2 Подключение светодиода к Arduino Откройте папку, в которую вы поместили IDE Arduino на своём компьютере. Дважды щёлкните на значке Arduino для запуска, выберите "File" > "New". У вас запросят имя папки со скетчами: это место, где будет храниться скетч Arduino. Введите имя Blinking_LED и нажмите "ОК".
 
Затем введите следующий текст (пример 4-1) в редакторе скетчей (в главном окне IDE Arduino). Вы также можете загрузить его со страницы www.makezine.com/getstartedarduino. Он должен выглядеть как на рис. 4-3. Пример 4-1. Мигающий светодиод #define LED 13 // LED connected to // digital pin 13 void setup() { pinMode(LED, OUTPUT); // sets the digital // pin as output } void loop() { digitalWrite(LED, HIGH); // turns the LED on delay(1000); // waits for a second digitalWrite(LED, LOW); // turns the LED off delay(1000); // waits for a second } Рис. 4-3. Среда разработки Arduino со скетчем Теперь, когда ваш код находится в IDE, вам надо проверить его. Нажмите кнопку "Verify" (рис. 4-3 показывает где она находится); если всё верно, вы увидите внизу окна сообщение "Done compiling". Это сообщение говорит о том, что IDE Arduino оттранслировала ваш скетч в выполняемую программу, которая может быть запущена на плате, почти как .exe-файлы в Windows или файлы .app на Mac. Теперь вы можете выгрузить скетч на плату: нажмите кнопку "Upload to I/O Board" (см. рис. 4-3). Произойдт перезапуск платы, который заставляет плату остановить выполнение кода и слушать инструкции по порту USB. IDE Arduino отправляет текущий скетч на плату, которая сохраняет его в своей памяти и в конце концов выполняет его. Вы увидите несколько сообщений в чёрной области внизу экрана IDE, и прямо над этой областью вы увидите сообщение "Done uploading". Это означает, что процесс выгрузки успешно завершён. На плате установлено два светодиода, обозначенные " RX" и "TX"; они мигают всякий раз при отправке или получении байта платой. Во время выгрузки они мерцают. Если вы не видите что светодиоды мерцают, или получаете сообщение об ошибке вместо "Done uploading", значит существует проблема связи между вашим компьютером и Arduino. Удостоверьтесь что выбран верный COM-порт в меню "Tools" > "Serial Port"
 
(см. главу 3). Также проверьте пункт меню "Tools" > "Board" - в нём должна быть выбрана верная модель Arduino. Если вы всё ещё испытываете проблемы, см. Главу 7. Устранение неполадок. После того, как ваш код был выгружен в Arduino, он будет оставаться в ней до тех пор, пока не будет выгруден следующий скетч. Скетч останется на месте если плата будет перезапущена или выключена, почти как на жёстком диске вашего компьютера. Допустим что скетч был выгружен успешно, вы видите включающийся на одну секунду светодиод "L", а затем на то-же время выключающийся. Если вы установили отдельный светодиод как показано на рис. 4-2, этот светодиод также будет мигать. То, что вы только-что написали и запустили, и есть "компьютерная программа", или скетч, как называются программы Arduino. Arduino, как мы определили раньше, это маленький компьютер и она может быть запрограммирована делать то что вы хотите. Это делается при помощи написания последовательности инструкций на языке программирования в среде разработки Arduino, которая преобразует эту последовательность в выполняемый код для платы Arduino. Далее я покажу вам как понять скетч. Во-первых, Arduino выполняет код сверху вниз, так-что первая строка сверху будет прочтена первой; затем движется вниз. ПАналогия - ползунок текущей позиции в программе-видеоплейере (QuickTime Player или Windows Media Player), он движется слева направо, показывая ваше положение в фильме.
 
4.4 Передайте мне пармезан Уделите внимание фигурным скобкам, которые использованы для группировки строк кода. Они, в частности, полезны когда вы хотите дать имя группе инструкций. Если в обед вы просите кого-нибудь "Передай мне пармезан, пожалуйста", ваша фраза описывает серию действий. Поскольку мы люди, всё это происходит естественно, но все отдельные крошечные требуемые действия должны быть сообщены плате Arduino по причине того что плата не така мощная как наш разум. Так-что для группировки команд установите { перед началом вашего кода и добавьте } после него. Вы можете увидеть два блока кода, выделенного как мы только-что описывали. Перед каждым из них стоит странная команда void setup() Эта строка даёт имя блоку кода. Если вы пишете иструкцию плате для подачи пармезана, вам стоит написать void passTheParmesan() в начале блока и этот блок станет инструкцией, которую вы сможете вызывать из любого места в коде Arduino. Такие блоки называются функциями. После этого, если вы напишете passTheParmesan() в любом месте кода, Arduino выполнит эти инструкции и продолжит работу с того места, где прервалась. 4.5 Arduino не остановить Arduino ожидает наличия двух функций - одна называется setup(), а вторая - loop(). В функции setup() вам следует располагать код, который вы хотите выполнить один раз при запуске своей программы, а loop() содержит ядро программы, которое выполняется снова и снова. Это сделано из-за того, что Arduino - не обычный компьютер - она не может выполнять много программ одновременно и программы не могут быть завершены. Когда вы подаёте питание на плату - программа запускается, когда вы хотите её остановить - просто выключите плату.
 
4.6 Настоящие самоделкины пишут комментарии Любой текст, начинающийся с "//", игнорируется Arduino. Эти строки являются комментариями, т.е. заметками, которые вы оставляете в программе сами для пояснения что вы делаете, написав этот код для себя или кого-то ещё. Очень часто (я знаю потому что и сам так делаю всё время) мы пишем код, загружаем его в плату и думаем: "ОК, я больше не буду иметь дело с этой фигнёй", и только через полгода понимаем, что в программе надо исправить баг. Теперь откройте программу, и если вы не оставили никаких комментариев, ваша мысль будет: "Блин, и с чего мне начать?". По мере нашего продвижения вперёд вы увидите некоторые трюки для того чтобы сделать свои программы более читабельными и лёгкими в обслуживании. 4.7 Код, шаг за шагом Во-первых, вы можете посчитать подобные пояснения ненужными, почти как когда я был в школе и должен был изучать Божественную комедию Данте (каждый итальянский студент должен пройти через это, как и через другую книгу - "I promessi sposi", или "Невеста" - о, кошмар). Для каждой строфы в поэме было написано тысячи строк комменнтариев! Однако, пояснения будут более полезными когда вы начнёте писать свои собственные программы. // Example 01 :Blinking LED Комментарий полезен для записи небольших заметок. Предыдущий комментарий просто напоминает что это за программа
 
 
 - Пример 4-1, мигающая светодиодом. #define LED 13 // LED connected to // digital pin 13 #define - эта директива подобна автоматическому поиску и замене в вашем коде; в данном случае она говорит Arduino вставить заменить на число 13 все слова LED в коде. Такая замена - первое, что происходит когда вы нажимаете кнопку "Verify" или "Upload to I/O Board" (вы не увидите результатов этой замены, т.к. она происходит "за сценой"). Мы используем эту команду для того, чтобы показать, что светодиод, которым мы будем мигать, подключён к 13 выводу платы Arduino. void setup() Эта строка говорит Arduino, что следующий блок кода будет называться setup(). { - с такой открывающей скобкой начинается блок кода. pinMode(LED, OUTPUT); // sets the digital // pin as output И, наконец, действительно интересная команда. pinMode сообщает Arduino как настроить отдельный вывод. Цифровые выводы могут использоваться как ВХОД (INPUT) и как ВЫХОД (OUTPUT). В данном случае нам требуется вывод для управления светодиодом, так-что мы указываем в скобках номер вывода 13 и его режим OUTPUT. pinMode - это функция, а слова (числа) в её скобках - аргументы. INPUT и OUTPUT - это константы языка Arduino (подобно переменным, константам назначены величины, только величина константы предопределена и никогда не изменяется). } - закрывающая скобка обзначает конец функции setup(). void loop() { loop() - это функция, где вы определяете основное поведение вашего интерактивного устройства. Она будет повторяться снова и снова до выключения платы. digitalWrite(LED, HIGH); // turns the LED on Как видно из комментария, digitalWrite() может включить (или выключить) любой вывод, настроенный как ВЫХОД (OUTPUT). Первый аргумент (в данном случае, LED) указывает какой вывод должен быт ьвключён или выключен (помните, LED - это константа со значением, которое указывает на вывод 13,
так-что переключаться будет именно он). Второй аргумент может включить вывод (HIGH) или выключить его (LOW). Представьте себе, что каждый вывод - это крошечная электрическая розетка, такая как те что есть на стенах вашей квартиры. У европейцев там 230 вольт, у американцев - 110 вольт, а Arduino работает с 5 В. В этот момент и происходит волшебство - когда программное обеспечение превращается в аппаратное. Когда вы пишете digitalWrite(LED, HIGH), эта функция подаст на вывод 5 вольт, и если вы подключите к нему светодиод, он загорится. Итак, в этом месте вашего кода инструкция программы влияет на физический мир посредством управления потоком электричества на выводе. Включение и выключение вывода по желанию даёт нам возможность перевести это в что-то видимое для человека; светодиод - наш актюатор. delay(1000); // waits for a second Arduino имеет очень простую структуру. Поэтому, если вы хотите чтобы всё происходило с определённой регулярностью, вы говорите: "сиди тихо и ничего не делай до тех пор, пока не придёт время следующего шага". delay() указывает процессору сидеть и ничего не делать столько миллисекунд, сколько было указано в аргументе. Миллисекунды - это тысячные доли секунды; поэтому 1000 миллисекунд равно одной секунде. Итак, светодиод будет включён на одну секунду. digitalWrite(LED, LOW); // turns the LED off Эта инструкция выключает светодиод, подобно тому как мы его включили раньше. зачем использовать HIGH и LOW? Это старое соглашение в электронике. HIGH означает что вывод включён, и в случае с Arduino на него будет подано 5 В.
LOW означает 0 В. Мысленно вы можете заменить эти аргументы на ВКЛ и ВЫКЛ. delay(1000); // waits for a second Здесь мы производим ещё одну задержку. Светодиод будет выключен одну секунду. } - эта закрывающая скобка обозначает конец функции loop. Подводя итоги, наша программа делает вот что: Включает вывод 13 на вывод (только один раз в начале программы) Входит в цикл loop Переключает светодиод, подключённый к выводу 13 Ожидает одну секунду Выключает светодиод на выводе 13 Ожидает одну секунду Возвращается к началу цикла Надеюсь, это было несложно. Вы узначете больше о программировании в следующих примерах. Перед тем как мы перейдём к следующему разделу, я хочу чтобы вы поиграли с кодом. Например, уменьшите величину задержки используя различные цифры для команд включения и выключения, и вы увидите различные виды мигания. В частности, вы должны увидеть что происходит если вы сделаете задержку очень маленькой, но используете разные величины для задержек при включенном светодиоде и при выключенном... будет момент, когда произойдёт странная вещь; это "нечто" будет нам очень полезно когда мы будет изучать широтно-импульсную модуляцию. 4.8 Что мы будем создавать Меня всегда очаровывали свет и возможность управлять разными источниками света при помощи технологии. Мне посчастливилось работать над интересными проектами, которые включают управление светом и его взаимодействие с людьми. Arduino действительно хороша в этом. В этой книге мы будем работать над вопросом разработки "интерактивного света ", используя Arduino как способ понять основы построения интерактивных устройств. В следующем разделе я постараюсь пояснить основы электричества способом, скучным инженеру, но не отпугивающим начинающих программистов Arduino. 4.9 Что такое электричество? Если вы делали что-нибудь по дому, электроника вам не покажется сложной для понимания. Чтобы понять как работают электричество и электрические схемы, лучше всего представлять вещи как "водяная аналогия". Давайте создадим простое устройство, такое как портативный вентилятор с питанием от батарей (рис. 4-4). Рис. 4-4.
 
Портативный вентилятор Если разобрать вентилятор на части, мы увидим что он состоит из маленькой батарейки, нескольких проводов и электромоторчика. Один из проводов, идущих от батареи к моторчику, разорван выключателем. Если у вас новая батарейка и вы включите выключатель, моторчик начнёт крутиться, охлаждая вас. Как это работает? Представьте себе что батарейка - это водяной резерувар с насосом, выключатель - кран, а электромотор - колесо, подобное тем что вы видели у водяных мельниц. Когда вы откроете кран, вода потечёт из насоса и будет приводить водяное колесо в движение. Рис. 4-5. Гидравлическая система Вы быстро поймёте что если вам надо вращать колесо быстрее, требуется увеличить размер труб (но это работает только до определённого предела) и увеличить давление насоса. Увеличение диаметра труб позволит пройти через них большему потоку воды; увеличивая трубу мы уменьшаем её сопротивление потоку. Это работает до определённого предела, при котором колесо не будет крутиться ещё быстрее, так как давленые воды недостаточно велико. Когда мы достигнет этой точки, нам надо насос помощнее. Такой метод ускорения водяной мельницы работает также до некоторой точки, в которой водяное колесо сломается из-за слишком сильного напора воды. Другая вещь, которую вы можете заметить, это что ось колеса немного нагревается, поскольку незавимо от того насколько точно мы установили колесо, трение между осью и колесом будет создавать тепло. Важно понять что в подобной системе не вся энергия насоса будет превращена в движение колеса, некоторая часть будет потеряна из-за неэффективности системы и превратится в основном в тепло в некоторых её частях. Итак, какие часты системы важны? Давление, поизводимое насосом; сопротивление труб и колеса потоку воды, и, собственно, сам поток воды (определяемый литрами воды, которая вытекает за секунду) и другие.
 Электричество работает подобно воде. У вас есть что-то подобное насосу (любой источник электричества, такой как батарейка или розетка в стене), который толкает электрические заряды (представим их как "капельки" электричества) по трубам, которые мы можем представить как провода, и устройства, способные производить тепло (пример - термоодеяло), свет (лампа в вашей комнате), звук (ваша стереосистема), движение (вентилятор) и многое другое. Теперь, если вы прочтёте на батерейке "9 В", думайте об этом как о давлении воды, которое может выдать наш "насос". Напряжение измеряется в вольтах - единицах названных в честь Александра Вольта, создателя первой батареи. В точности как давление воды имеет эквивалент в электричестве, скорость потока воды также его имеет. Он называется током, который измеряется в амперах (по имени Андре Мари Ампера, первооткрывателя электромагнетизма). Связь между напряжением и током может быть показана если мы вернёмся к водяному колесу: если большее напряжение (давление) позволяет вам крутить колесо быстрее, то больший поток воды (ток) позволяет крутить большее колесо.
И, наконец, сопротивление, противостоящее течению электричества на его пути, через который ток проходит, называется - вы знали это! - соротивлением, и измеряется в омах (по имени немецкого физика Георга Ома). Герр Ом также виновен в формулировке самого важного закона в электричестве, и вам надо запомнить только одну его формулу. Он смог показать, что напряжение, ток и сопротивление в цепи связаны друг с другом, и, в частности, что сопротивление цепи определяет количество тока, который будет течь через неё при определенном напряжении питания. Это легко понять если вы задумаетесь. Возьмите батарейку на 9 вольт и включите её в простую схему. Измеряя ток, вы увидите что чем с большим сопротивлением резистор вы добавите в схему, тем меньший ток будет проходить через него.Возвращаясь к аналогии с водой, при данном насосе, если я установлю клапан (который соотносится с сопротивлением в электронике), то чем больше я буду закручивать этот клапан - увеличивая сопротивление потоку воды - тем меньше воды протечёт по трубе. Ом подвёл итог своего закона в формулу: R (сопротивление) = V (напряжение) / I (ток) V = R * I I = V / R Это единственное правило, который вам надо запомнить и выучить, поскольку в большинстве ваших работ оно единственное вам и понадобится. 4.10 Использование кнопки для управления светодиодом Мигать светодиодом несложно, но я не думаю что вам понравится если настольная лампа будет
бесконечно мигать тогда как вы пытаетесь читать книгу. Поэтому вам надо понять как управлять ею. В нашем предыдущем примере светодиод был актюатором и Arduino управляла им. Чего не хватает для полноты картины, так это сенсора. В данном случае мы будем использовать простейший из доступных сенсоров - кнопку. Если вы разберёте кнопку на части, вы увидите что это очень простое устройство: два кусочка металла, разделённые пружинкой, и пластиковый наконечник, который при нажатии соединяет эти контакты. Когда металлические части разделены, ток через кнопку не протекает (она подобна закрытому крану для воды); когда мы нажимаем её, мы осуществляем соединение. Чтобы узнать состояние выключателя, существует новая для нас команда Arduino, которую нам следует изучить: функция digitalRead(). digitalRead() проверяет, подключено-ли напряжение к контакту, который вы указали в скобках, и возвращает значение "HIGH" или "LOW".
 
Другие инструкции, которые мы использовали до этого, не возвращали никакой информации - они просто выполняли то что мы просили. Но такой тип функций немного ограничен, так как они заставляют нас придерживаться предсказуемой, строго определённой последовательности команд, без ввода данных из окружения. С функцией digitalRead() мы можем "задать вопрос" Arduino и получить ответ, который можно сохранить где-нибудь в памяти и принять решение немедленно или позже. Составьте схему по рис. 4-6. Для этого у вас должны быть некоторые детали (и они потребуются в следующих проектах): Беспаечная макетная плата. ПриложениеA - инструкция по применению такой платы. Набор нарезанных проводов Резистор на 10 кОм Кнопка Рис. 4-6. Подключение кнопки Примечание: чтобы не покупать набор проводов, вы можете купить небольшую катушку провода 22 AWG (диаметр 0.65 мм), нарезать куски требуемой длины и зачистить концы самостоятельно. Давайте рассмотрим код, который используется для управления светодиода кнопкой: Пример 4-2. Включение светодиода при нажатии кнопки #define LED 13 // the pin for the LED #define BUTTON 7 // the input pin where the // pushbutton is connected int val = 0; // val will be used to store the state // of the input pin void setup() { pinMode(LED, OUTPUT); // tell Arduino LED is an output pinMode(BUTTON, INPUT); // and BUTTON is an input } void loop(){ val = digitalRead(BUTTON); // read input value and store it // check whether the input is HIGH (button pressed) if (val == HIGH) { digitalWrite(LED, HIGH); // turn LED ON } else { digitalWrite(LED, LOW); } } В среде Arduino выберите "File" > "New" (если у вас уже был открыт какой-то скетч, сохраните его). Когда Arduino спросит у вас имя папки для нового скетча, введите PushButtonControl. Напечатайте код Примера 4-2 в Arduino (или скачайте его с www.makezine.com/getstartedarduino).
Если всё сделано правильно, светодиод будет загораться когда вы нажмёте кнопку. 4.11 Как это работает? В этом примере программы я показал две новых концепции: функция, которая возвращает результат своей работы, и выражение "if". Выражение "if" - возможно, самая важная инструкция в языке программирования, так как она позволяет компьютеру (а мы помним что Arduino - это маленький компьютер) делать выбор. После ключевого слова "if" вы должны написать "вопрос" в круглых скобках, и если "ответ", или результат, верен, будет выполнен первый блок кода; и напротив, если ответ неверен, будет выполнен блок кода после "else". Обратите внимание, что я использовал символ "==" вместо "=". Первый используется при сравнении двух значений и возвращает "TRUE" (ИСТИНА) или "FALSE" (ЛОЖЬ); второй присваивает значение переменной.
 
Удостоверьтесь что вы пользуетесь ими правильно, так как очень легко совершить подобную ошибку и использовать простое равно. В этом случае программа никогда не будет работать. Я знаю это по опыту 25 лет программирования и всё ещё могу ошибиться. Держать палец на кнопке пока вам надо свет - не очень практично. Хотя это заставило-бы вас задуматься о том, сколько энергии тратися впустую когда вы оставляете лампу включённой, нам надо подумать о том, как-бы сделать чтобы кнопка "залипала". 4.12 Одна схема, тысяча применений Огромное преимущество цифровой программируемой электроники над классической стало теперь очевидным: я покажу вас как реализовать множество различных "поведений" с использованием той-же электрической схемы из предыдущего раздела, просто изменяя программу. Как мы поняли раньше, непрактично держать палец на кнопке чтобы свет оставался включённым. Поэтому мы должны осуществить что-то похожее на "память" в виде механизма программы, который будет запоминать что мы нажали кнопку и продолжать светить даже елси мы отпустим её. Чтобы сделать это, нам придётся использовать нечто, называемое переменной (мы уже использовали её, но я не пояснял ничего о ней). Переменная - это место в памяти Arduino, в котором мы можем хранить данные.
 
Думайте о ней как о липкой бумаге для заметок, которую вы иногда используете для записи чего-нибудь: например, телефонного номера - вы берёте листик, пишете на ней "Аня, 02 555 1212" и приклеиваете на компьютер. В языке Arduino это так-же легко: вы просто определяете тип данных, которые будут храниться (например, число или какой-то текст), даёте ей имя, и теперь при надобности вы можете сохранить в переменной данные, или получить их. Например: int val = 0; "int" означает, что в переменной будет храниться целое число, "val" - это имя переменной, а "= 0" - назначение переменной нулевого начального значения. Переменная, как следует из названия, может быть изменена в любом месте вашего кода, так-что позднее в своей программе вы можете написать: val = 112; что изменит значение переменной с нуля на 112. Примечание: Вы заметили, что Arduino каждая инструкция, кроме #define, заканчивается точкой с запятой? Это делается для того чтобы компилятор (часть Arduino, которая превращает ваш скетч в программу, которую может выполнить микроконтроллер) знал где заканчивается одно ваше выражение и начинается другое. Не забудьте использовать точку с запятой (кроме тех строк, которые начинаются с #define). #define заменяются компилятором перед трансляцией кода в исполняемую программу. В следующей программе val используется для хранения результата функции digitalRead(); что-бы ни получала Arduino со входа попадает в переменную и остаётся там до тех пор, пока другая строка кода не изменит её. Отметьте, что эти переменные хранятся в оперативной памяти, называемой (RAM).
Она очень быстрая, но когда вы выключите свою плату, все данные в оперативной памяти будут потеряны (что означает что все переменные будут сброшены в начальные значения при включании платы). Ваша программа хранится во флеш-памяти (такой-же тип памяти используется в сотовых телефонах для хранения записной книжки) которая не изменяется при отключении платы от питания. Давайте используем другую переменную для запоминания должен-ли светодиод оставаться включённым когда мы отпускаем кнопку. Пример 4-3 - это наша первая попытка: Пример 4-3. Включить светодиод при нажатии кнопки и оставить его включённым при отпускании кнопки #define LED 13 // the pin for the LED #define BUTTON 7 // the input pin where the // pushbutton is connected int val = 0; // val will be used to store the state // of the input pin int state = 0; // 0 = LED off while 1 = LED on void setup() { pinMode(LED, OUTPUT); // tell Arduino LED is an output pinMode(BUTTON, INPUT); // and BUTTON is an input } void loop() { val = digitalRead(BUTTON); // read input value and store it // check if the input is HIGH (button pressed) // and change the state if (val == HIGH) { state = 1 - state; } if (state == 1) { digitalWrite(LED, HIGH); // turn LED ON } else { digitalWrite(LED, LOW); } } Попробуйте запустить этот код. Вы увидите что оно работает ... как-то. Вы увидите что светодиод изменяет своё состояние так быстро, что правильно установить его нажатием кнопки тяжело. Посмотри на интересную часть кода: state - это переменная, которая хранит значение 0 или 1 для запоминания включён светодиод или нет. После отпускания кнопки мы устанавливаем её в 0 (светодиод выключен). Далее мы считываем текущее состояние кнопки, и если она нажата (val == HIGH), мы изменяем state с 0 на 1, или наоборот.
 
Поскольку state может быть равна только 1 или 0, используем небольшой трюк. Он заключается в маленьком математическом выражении, идея которого состоит в том, что 1 - 0 = 1, а 1 - 1 = 0: state = 1 - state; Такая строка не имеет смысла в математике, но он есть при программировании. Знак "=" означает "присвоить результат выражения после меня переменной передо мной" - в данном случае, новое значение state будет вычислено как единица минус старое значение state. Далее в программе вы видите, что мы используем state для выяснения должен-ли светодиод быть включён или выключен. Как я говорил, это приводит к странному результату. Результат странный из-за способа считывания кнопки. Arduino очень быстрая; она выполняет свои команды со скоростью 16 миллионов в секунду - вполне может быть, что и несколько миллионов строк кода за секунду. Это означает что пока ваш палец нажимает кнопку, Arduino может снять данные с кнопки несколько сотен раз и изменить столько-же раз состояние светодиода. Результат непредсказуем; светодиод может остаться выключённым когда вы хотите его включить и наоборот.
 
Поскольку даже сломанные часы показывают верное время дважды в день, программа может выдавать верный результат каждый раз какое-то время, но и долгое время - неправильный. Как ним исправить эту ситуацию? Требуется определить момент нажатися конпки - именно в этот момент следует изменять state. Способ, который мне нравится, таков - хранить старое значение val перед считыванием нового; это позволяет мне сравнить текущее положение кнопки с предыдущим и изменить state только когда кнопка стала "HIGH" после того, как была "LOW". Пример 4-4 содержит следующий код: Пример 4-4. Включить светодиод при нажатии кнопки и оставить его включённым после отпускания кнопки с новой, улучшеной формулой! #define LED 13 // the pin for the LED #define BUTTON 7 // the input pin where the // pushbutton is connected int val = 0; // val will be used to store the state // of the input pin int old_val = 0; // this variable stores the previous // value of "val" int state = 0; // 0 = LED off and 1 = LED on void setup() { pinMode(LED, OUTPUT); // tell Arduino LED is an output pinMode(BUTTON, INPUT); // and BUTTON is an input } void loop(){ val = digitalRead(BUTTON); // read input value and store it // yum, fresh // check if there was a transition if ((val == HIGH) && (old_val == LOW)){ state = 1 - state; } old_val = val; // val is now old, let's store it if (state == 1) { digitalWrite(LED, HIGH); // turn LED ON } else { digitalWrite(LED, LOW); } }
 
Попробуйте код, мы почти закончили! Возможно вы заметили, что результат не отличный из-за другой проблемы механических переключателей. Кнопки очень простые устройства - два кусочка металла разделены пружинкой. При нажатии кнопки эти контакты соединяются и через них может протекать электричество. Это звучит красиво и просто, но в реальной жизни соединения не так прекрасны, особенно если кнопка нажата не полностью, и генерируют ложные сигналы, называемые дребезг. Когда кнопка "дребезжит", Arduino видит быструю последовательность сигналов включения и выключения. Существует множество видов антидребезга, но для нашего, простого коде, я заметил что достаточно добавить 10...50-миллисекундную задержку чтобы код определил изменение. Окончательный код показан в примере 4-5. Пример 4-5. Включить светодиод при нажатии кнопки и оставить его включённым после отпускания кнопки, включая простой антидребезг.
 
Теперь с новой, улучшенной формулой! #define LED 13 // the pin for the LED #define BUTTON 7 // the input pin where the // pushbutton is connected int val = 0; // val will be used to store the state // of the input pin int old_val = 0; // this variable stores the previous // value of "val" int state = 0; // 0 = LED off and 1 = LED on void setup() { pinMode(LED, OUTPUT); // tell Arduino LED is an output pinMode(BUTTON, INPUT); // and BUTTON is an input } void loop(){ val = digitalRead(BUTTON); // read input value and store it // yum, fresh // check if there was a transition if ((val == HIGH) && (old_val == LOW)){ state = 1 - state; delay(10); } old_val = val; // val is now old, let's store it if (state == 1) { digitalWrite(LED, HIGH); // turn LED ON } else { digitalWrite(LED, LOW); } 5. Продвинутый ввод-вывод Всё, что мы изучили в четвёртой главе - в большинстве простейшие операции, которые мы можем делать с Arduino: управлять цифровым выводом и читать цифровод ввод. Если-бы Arduino был разговорным языком, это было-бы всего-лишь двумя буквами алфавита. Учитывая то, что в этом алфавите всего пять букв, вы можете увидеть сколько еще работы надо сделать чтобы писать поэмы на Arduino. 5.1 Пробуем другие датчики включения-выключения 5.1.1 Выключатели То-же самое что и кнопка, но не изменяет автоматически своё состоянии при отпускании. 5.1.2 Термостаты Выключатель, который срабатывает при достижении установленной температуры. 5.1.3 Магнитные переключатели, также известные как "герконы" Имеют два контакта, которые соединяются если рядом расположить магнит, используются в сигнализация против взлома для определения открытого окна. 5.1.4 Ковровые переключатели Маленькие пластинки, которые можно положить под ковёр чтобы определить присутствие человека (или тяжёлого кота). 5.1.5 Датчики наклона Простой электронный компонент, сделанный из двух контактов и маленького металлического шарика (или капельки ртути, но я не рекомендую использовать такие). Рис. 5-1 показывает внутренности типичной модели.
Когда датчик расположен вертикально, шарик замыкает оба контакта, и устройство работает как если-бы вы нажати кнопку. Когда вы наклоняете датчик, шарик движется и контакты размыкаются, как если-бы вы отпустили кнопку. Используя такой простой компонент, вы можете создавать, например, интерфейсы управления жестами, которые реагируют на движения или встряхивание обьекта. Рис. 5-1. Конструкция датчика наклона Другой датчик, который вы можете захотеть испытать, это инфракрасный датчик от охранной сигнализации (также известный как пассивный инфракрасный датчик, или ИК-датчик, см. рис. 5-2). Эти маленькие устройства срабатывают когда человек (или животное) движется в пределах его видимости. Это простой способ определить движение. Рис. 5-2. Типичный инфракрасный датчик Теперь вы можете поэкспериментировать, найдя всевозможные устройства, имеющие два замыкающихся контакта, такие как термостат, управляющий температурой в комнате (используйте старый, который не подключён к системе), или просто расположив рядом два контакта и капнув на них водой. Например, используя пример из главы 4 и ИК-датчик, вы можете создать лампу, которая реагирует на присутствие человека, или вы можете применить датчик наклона чтобы она включалась при наклоне в определённую сторону.
 
5.2 Управление светом при помощи ШИМ С пониманием того что вы уже изучили, можно создать интерактивную лампу, которая управляется, а не только скучно включается и выключается, и более элегантно. Одно из ограничений примера с мигающий светодиодом - это то, что вы можете только включить или выключить его. Хорошая интерактивная лампа должна иметь плавную регулировку. Чтобы решить эту проблему, мы можем использовать маленький трюк, который делает возможным множество таких вещей, как телевидение или кино: инерцию зрительного восприятия. Как я подсказывал в первом примере главы 4, если вы измените цифры в функции задержки чтобы светодиод перестал мигать, вы заметите что светодиод, похоже, светится в половину своей нормальной яркости. Теперь измените цифры так, чтобы светодиод был включен на четверть того времени, пока он выключен. Запустите скетч и вы увидите, что яркость понизилась до 25%. Такая техника называется широтно-импульсная модуляция (ШИМ) - фантастический способ, определяемый так: если мигать светодиодом достаточно быстро, вы не увидите самих миганий, но вы можете изменять яркость светодиода меняя отношение между временем его включенного и выключеного состояния. Рис. 5-3 показывает как это работает. Такая техника работает не только со светодиодами. Например, таким-же способом вы можете изменять скорость электордвигателя. Экспериментируя, вы увидите, что мигать светодиодом, расставляя задержка в коде, немного неудобно, так как когда вам понадобится считать датчик или отправить данные по последовательному порту, светодиод будет мерцать из-за задержек чтения датчика. К с частью, процессор на плате Arduino, имеет аппаратную часть, которая может очень эффективно мигать тремя сетодиодами в то время, когда ваш скетч делает что-то другое. Эта часть реализована на выводах 9, 10 и 11, которые могут управляться командой analogWrite().
 

Далее - часть вторая.
Категория: Мои статьи | Добавил: griory (22.11.2013)
Просмотров: 1683 | Комментарии: 3 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа
Категории раздела
Мои статьи [6]
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Copyright MyCorp © 2024
    Бесплатный хостинг uCoz