Текст книги "Знакомство с Arduino (перевод книги "Getting Started with Arduino")"
Автор книги: Автор Неизвестен
Жанр:
Компьютерное "железо"
сообщить о нарушении
Текущая страница: 2 (всего у книги 5 страниц)
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, и выберите папку DriversFTDI USB Drivers. Нажмите "ОК" и "Далее".
Windows Vista сначала попробует найти драйвер на сервере Windows Update; и если не получится, вы сможете указать папку DriversFTDI 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
Это единственное правило, который вам надо запомнить и выучить, поскольку в большинстве ваших работ оно единственное вам и понадобится.