Платформа Ардуино. ардуино. Ардуино
Скачать 33.13 Kb.
|
Тема: Ардуино Введение Ардуино (Arduino) – это название комплекса аппаратно-программных средств для создания простых электронных систем автоматики и робототехники. Название компании и платформы происходит от названия одноимённой рюмочной в Ивреа, часто посещавшейся учредителями проекта, которая, в свою очередь, была названа в честь короля Италии Ардуина Ивреаского. Система имеет полностью открытую архитектуру и ориентирована на непрофессиональных пользователей. Она может служить для разработки автономных интерактивных устройств и работает под управлением ПО, установленного на соединенном с ним компьютера. Arduino можно собрать самостоятельно вручную, а можно приобрести в готовом виде. Интегрированную среду разработки с открытым кодом можно загрузить бесплатно с веб-сайта http://www.arduino.cc История История проекта начинается с курсов человеко-машинного интерфейса под брендом Interaction Design Institute Ivrea, существовавших в начале 2000-х годов в городке Ивреа в Италии. Для обучения использовались модули под брендом BASIC Stamp, стоившие около 50 USD. В 2003 году Эрнандо Барраган (Hernando Barragán) в рамках учебной работы создает первоначальную версию новой программно-аппаратной платформы Wiring. Целью проекта было создание дешевой и простой среды для начального обучения программированию. В том же году Массимо Банци (руководитель Эрнандо Баррагана), Дэвид Меллис и Давид Куартиллье делают форк Wiring, назвав его Arduino. Первоначальная команда Ардуино состояла из Массимо Банци, Давида Куартиллье, Тома Иго, Джанлука Мартино и Дэвида Меллиса. В начале 2008 года пять соучредителей проекта Arduino создали компанию Arduino LLC, которой принадлежали авторские права и торговые марки компании, зарегистрированные в США. Производством занимались другие компании, перечислявшие Arduino LLC платежи за использование авторских прав. В том же году Джанлука Мартино, втайне от компаньонов, регистрирует на свою компанию Smart Projects (позднее переименованную в Arduino SRL) часть торговых марок Ардуино в некоторых странах. В 2015 году начинаются судебные тяжбы Arduino LLC против Arduino SRL. В 2016 году конфликт разрешается путем слияния обеих компаний с образованием компании Arduino AG. Платформа ардуино Arduino представляет собой небольшую плату, на которую устанавливается микроконтроллер с прошитым в него загрузчиком. С помощью загрузчика записывается программа в микроконтроллер из персонального компьютера без применения аппаратных программаторов. 14 цифровых разъемов ввода-вывода (контакты 0-13) Это могут быть как входы, так и выходы, что задается программным модулем, который создается в интегрированной среде разработки Arduino IDE. Цифровые контакты помечены буквой D (digital). 8 аналоговых входов (контакты A0-A7) На эти входы от разных датчиков подаются, которые затем преобразуются в цифровые значения в диапазоне от 0 до 1023. Обозначены на плате буквой A (analog). 6 аналоговых выходов (контакт 3, 5, 6,9,10,11) В действительности это шесть цифровых выводов, которые можно перепрограммировать в условно аналоговые (диапазон принимаемых значений от 0 до 255, что соответствует значениям напряжения от 0 до 5 Вольт). Arduino Nano. Arduino Nano – платформа, построенная на микроконтроллере Atmega 328 (Arduino Nano 3.0) или Atmega 168 (Arduini Nano 2.х). Ее особенностями являются: небольшие размеры, что позволяет создавать компактные устройства; отсутствие разъема постоянного тока; работа через MiniUSB. Некоторые технические характеристики: 14 цифровых пинов, 6 из которых могут использоваться в качестве выходов ШИМ; 8 входов аналогового сигнала; флеш-память 16 Кб или 32 Кб в зависимости от микроконтроллера; ОЗУ 1 Кб или 2 Кб, в зависимости от микроконтроллера; Контакты аналогового и цифрового ввода и вывода работают в диапазоне от 0 до 5В, а протекающий ток не должен превышать 40 мА. Также на плате установлены 4 светодиода, являющихся индикаторами сигнала. Они обозначены как TX и RX (индикаторы передачи данных), PWR (индикатор питания платы) и L (светодиод общего назначения). Среда разработки Программная часть Ардуино представлена интегрированной программной среды (IDE), позволяющей писать, компилировать программы, а также загружать их в аппаратуру. Для программировании Ардуино используется язык C/C++ с некоторыми особенностями. Установка необходимого ПО. Программная часть платформы Arduino представлена интегрированной средой разработки Arduino IDE. Установленная на компьютере, она позволяет составлять программные модули для платы Arduino. Среду разработки можно свободно скачать с сайта http://www.arduino.cc. После распаковки файла и установки программы, следует обеспечить возможность общения платы и компьютера через USB-порт. Для этого необходимо установить драйвер, в случае с Arduino Nano, входящих в наборы конструктора компании «ЛАРТ» это будет CH340. После запуска Arduini IDE следует в меню Инструменты/Плата выбрать плату, с которой вы собираетесь работать, а также в Инструменты/Порт выбрать порт, который соответствует плате. Структура языка. Как правило, тело программы состоит из двух основных блоков: void setup() - фрагмент программы, содержащий код инициализации — блок команд, устанавливающий плату в состояние, необходимое для запуска основного цикла программы. void loop() - основной блок программы. Состоит из набора команд, которые повторяются до тех пор, пока не будет выключено питание платы. Константы В языке Arduino имеется ряд предопределенных ключевых слов, каждому из которых соответствует свое значение. Наиболее часто встречаются: INPUT/OUTPUT – константы, служащие для назначения пина на вход или выход; константы HIGH/LOW используются для обозначения подачи питания на пин или его отсутствия; true/false -логические константы, соответствуют логическим 1 и 0; Переменные Переменные являются именованными областями памяти платы Arduino, где хранятся данные, которые можно использовать и обрабатывать в пользовательской программе. Переменные подразделяются на локальные (работают только в пределах функции или цикла, где были объявлены) и глобальные (работают во всех функциях программы). При первом обращении к переменной указывают ее тип. Наиболее часто используют: boolean – логический тип, переменные могут принимать два значения: true или false; boolean a = true; // присваивает переменной a значение true; boolean b = 0; // присваивает переменной b значение false; boolean c = 1; // присваивает переменной c значение true; boolean d = 5; // присваивает переменной d значение true; char – тип переменной, содержащей один символ, хранится в виде числа от -128 до 127. Символьный тип может быть использован для хранения чисел; char a = ‘A’; char b = 65; // Эквивалентные записи byte – численный тип, может принимать значения от 0 до 255; byte x = 35; // переменные типов int, unsigned int, long, unsigned long, float; int – целочисленный тип, используется для записи чисел от -32765 до 32767; unsigned int – целочисленный тип, используется для записи чисел от 0 до 65535 long – целочисленный тип, используется для записи чисел от -2 147 483 648 до 2 147 483 645 unsigned long – целочисленный тип, используется для записи чисел от 0 до 4 294 967 295 float число с плавающей запятой. Позволяет хранить числа, записанные в виде десятичной дроби array – массив, то есть список переменных, к которым можно получить организованный доступ посредством индекса. Массив может состоять из переменных требуемого типа, в зависимости от поставленной задачи. int array a[5] ={2, 4, 5, 2, 7}; // Объявлен массив переменных типа int String – массив символов; char sting_1[4] = {‘l’, ‘a’, ‘r’, ‘t’}; char sting_2[4] = “lart’; // Эквивалентные записи Управляющие конструкции if...else – оператор условия. После if в круглых скобках задается логическое выражение. Если выражение верно, выполняется блок программы, следующий за этим условием (он должен быть заключен в фигурные скобки), или, если выражение ложно, выполняется блок после else; if (x >=255) {x = 0; Serial.println(‘counter is full’); } else {x = x + 10; delay(100);} switch case – условный оператор, который может иметь более двух различных алгоритмов действия, в зависимости от значения некой заданной переменной switch(var) { case 1: // выполняется, когда var равно 1 break; case 2: // выполняется, когда var равно 2 break; default: // выполняется, если не выбрана ни одна альтернатива (default не обязателен) for – оператор цикла. Используется, когда заранее известно, сколько раз необходимо выполнить зацикленный алгоритм; for (int i = 0; i <=255; i++){ analogWrite(x, I); delay(10); } while – оператор цикла с условием. Блок программы выполняется снова и снова, пока некоторое заданное выражение не примет значение TRUE. Проверка осуществляется на входе цикла; while (x < 255){ x++; delay(10); } do while — оператор цикла с условием. Аналогичен while, за исключением того, что оценка условия происходит после выполнения программного кода. Эта конструкция используется, когда нужно, чтобы код внутри блока выполнился хотя бы раз до проверки условием; do { x++; delay(10);} while (x < 255) Оператор присваивания В языке Ардуино знак «=» играет роль оператора присваивания. Используется он следующим образом: переменной, указанной левее оператора присваивания присваивается значение выражения, указанного правее. Например: b = 21; // переменной b присвоен значение 21 b = b + 30; // значение переменной b увеличится на 30 b = min (x, y); // переменной b присвоено минимальное значение из x и y Арифметика, формулы Помимо стандартных арифметических операций — сложение (+), вычитание(-), умножение(*), деление (/) - существуют некоторые дополнительные операторы. Например, Modulo (%), возвращает остаток целочисленного деления. Также удобно использовать инкремент (++) и декремент(--). Операторы сравнения == - равно; != - не равно; <, > - меньше, больше; >=, <= - больше или равно, меньше или равно; Логические операторы && - логическое И; || - логическое ИЛИ; ! - логическое отрицание. Функции для входов и выходов pinMode( pin, INPUT/ OUTPUT) - функция, задающая конфигурацию для цифрового пина в качестве входа (INPUT) или выхода (OUTPUT); digitaiWrite (pin, LOW/HIGH) – функция управления напряжением на цифровом пине. Для ее использования необходимо предварительно назначить пин на выход при помощи функции pinMode; digitalRead(pin) – функция считывания состояния входного контакта. Принимает значение HIGH при наличии напряжении на цифровом входе и LOW при его отсутствии; analogRead(pin) – функция, считывающая напряжение на аналоговом входе. Возвращает значение от 0 до 1023, которое соответствует напряжению от 0 до 5 В; analogWrite(pin, value) — функция, изменяющая частоту широтно-импульсной модуляции на одном из пинов с ШИМ. Аргумент value может принимать значение от 0 до 255, что соответствует напряжению от 0 до 5 В. Функции времени delay (mSec) – функция, останавливающая исполнение кода программы на указанное число миллисекунд; millis() - функция, возвращающая время, прошедшее с момента запуска программы в миллисекундах. Математические функции min(x, y), (max(x, y)) – функции поиска минимума (максимума) из двух чисел x и y; abs(x) – функция, возвращающая модуль числа x; constrain(x, a, b) – возвращает число x, если оно принадлежит отрезку [a,b], число a, если х меньше, чем a, и число b, если х больше, чем b; map(x, a1, a2, b1, b2) — функция, отображающая значение x из диапазона[a1,a2] в диапазон [b1,b2]. Ту же операцию можно выполнить алгебраически. pow(a, x) — возводит основание а в степень х; sqrt(x) – извлекает квадратный корень из х; sin(x), cos(x), tan(x) – определяет синус/косинус/тангенс от х, выраженного в радианах; Последовательный интерфейс USB-порт на плате Arduino используется не только для загрузки программного кода с компьютера, но и для передачи данных в компьютер по протоколу последовательного интерфейса. Именно для этого применяется объект Serial. Некоторые функции последовательного интерфейса: Serial.begin(speed) – функция, задающая работу последовательного интерфейса. Обычно используют значение скорости 9600 (бит/сек); Serial.print(данные), Serial.print(данные, кодировка) — функция, отправляющая данные в последовательный порт. Возможно изменение кодировки; Serial.println(данные), Serial.println(данные, кодировка) — тоже функция, отправляющая данные в последовательный порт, но добавляются символы перехода на новую строку и возврата каретки. Архитектура ардуино Основные сведения. Arduino Uno - это устройство на основе микроконтроллера ATmega328 (datasheet). В его состав входит все необходимое для удобной работы с микроконтроллером: 14 цифровых входов/выходов (из них 6 могут использоваться в качестве ШИМ-выходов), 6 аналоговых входов, кварцевый резонатор на 16 МГц, разъем USB, разъем питания, разъем для внутрисхемного программирования (ICSP) и кнопка сброса. Для начала работы с уcтройством достаточно просто подать питание от AC/DC-адаптера или батарейки, либо подключить его к компьютеру посредством USB-кабеля. В отличие от всех предыдущих плат Ардуино, Uno в качестве преобразователя интерфейсов USB-UART использует микроконтроллер ATmega16U2 (ATmega8U2 до версии R2) вместо микросхемы FTDI. На плате Arduino Uno версии R2 для упрощения процесса обновления прошивки добавлен резистор, подтягивающий к земле линию HWB микроконтроллера 8U2. Изменения на плате версии R3 перечислены ниже: Распиновка 1.0: добавлены выводы SDA и SCL (возле вывода AREF), а также два новых вывода, расположенных возле вывода RESET. Первый - IOREF - позволяет платам расширения подстраиваться под рабочее напряжение Ардуино. Данный вывод предусмотрен для совместимости плат расширения как с 5В-Ардуино на базе микроконтроллеров AVR, так и с 3.3В-платами Arduino Due. Второй вывод ни к чему не подсоединен и зарезервирован для будущих целей. Улучшена помехоустойчивость цепи сброса. Микроконтроллер ATmega8U2 заменен на ATmega16U2. Характеристики. Микроконтроллер ATmega328 Рабочее напряжение 5В Напряжение питания (рекомендуемое) 7-12В Напряжение питания (предельное) 6-20В Цифровые входы/выходы - 14 (из них 6 могут использоваться в качестве ШИМ-выходов) Аналоговые входы - 6 Максимальный ток одного вывода - 40 мА Максимальный выходной ток вывода 3.3V - 50 мА Flash-память - 32 КБ (ATmega328) из которых 0.5 КБ используются загрузчиком SRAM - 2 КБ (ATmega328) EEPROM - 1 КБ (ATmega328) Тактовая частота - 16 МГц Питание. Arduino Uno может быть запитан от USB либо от внешнего источника питания - тип источника выбирается автоматически. В качестве внешнего источника питания (не USB) может использоваться сетевой AC/DC-адаптер или аккумулятор/батарея. Штекер адаптера (диаметр - 2.1мм, центральный контакт - положительный) необходимо вставить в соответствующий разъем питания на плате. В случае питания от аккумулятора/батареи, ее провода необходимо подсоединить к выводам Gnd и Vin разъема POWER. Напряжение внешнего источника питания может быть в пределах от 6 до 20 В. Однако, уменьшение напряжения питания ниже 7В приводит к уменьшению напряжения на выводе 5V, что может стать причиной нестабильной работы устройства. Использование напряжения больше 12В может приводить к перегреву стабилизатора напряжения и выходу платы из строя. С учетом этого, рекомендуется использовать источник питания с напряжением в диапазоне от 7 до 12В. Ниже перечислены выводы питания, расположенные на плате: VIN. Напряжение, поступающее в Arduino непосредственно от внешнего источника питания (не связано с 5В от USB или другим стабилизированным напряжением). Через этот вывод можно как подавать внешнее питание, так и потреблять ток, когда устройство запитано от внешнего адаптера. 5V. На вывод поступает напряжение 5В от стабилизатора напряжения на плате, вне независимости от того, как запитано устройство: от адаптера (7 - 12В), от USB (5В) или через вывод VIN (7 - 12В). Запитывать устройство через выводы 5V или 3V3 не рекомендуется, поскольку в этом случае не используется стабилизатор напряжения, что может привести к выходу платы из строя. 3V3. 3.3В, поступающие от стабилизатора напряжения на плате. Максимальный ток, потребляемый от этого вывода, составляет 50 мА. GND. Выводы земли. IOREF. Этот вывод предоставляет платам расширения информацию о рабочем напряжении микроконтроллера Ардуино. В зависимости от напряжения, считанного с вывода IOREF, плата расширения может переключиться на соответствующий источник питания либо задействовать преобразователи уровней, что позволит ей работать как с 5В, так и с 3.3В-устройствами. Память. Объем флеш-памяти ATmega328 составляет 32 КБ (из которых 0.5 КБ используются загрузчиком). Микроконтроллер также имеет 2 КБ памяти SRAM и 1 КБ EEPROM (из которой можно считывать или записывать информацию с помощью библиотеки EEPROM). Входы и выходы. С использованием функций pinMode(), digitalWrite() и digitalRead() каждый из 14 цифровых выводов может работать в качестве входа или выхода. Уровень напряжения на выводах ограничен 5В. Максимальный ток, который может отдавать или потреблять один вывод, составляет 40 мА. Все выводы сопряжены с внутренними подтягивающими резисторами (по умолчанию отключенными) номиналом 20-50 кОм. Помимо этого, некоторые выводы Ардуино могут выполнять дополнительные функции: Последовательный интерфейс: выводы 0 (RX) и 1 (TX). Используются для получения (RX) и передачи (TX) данных по последовательному интерфейсу. Эти выводы соединены с соответствующими выводами микросхемы ATmega8U2, выполняющей роль преобразователя USB-UART. Внешние прерывания: выводы 2 и 3. Могут служить источниками прерываний, возникающих при фронте, спаде или при низком уровне сигнала на этих выводах. Для получения дополнительной информации см. функцию attachInterrupt(). ШИМ: выводы 3, 5, 6, 9, 10 и 11. С помощью функции analogWrite() могут выводить 8-битные аналоговые значения в виде ШИМ-сигнала. Интерфейс SPI: выводы 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). С применением библиотеки SPI данные выводы могут осуществлять связь по интерфейсу SPI. Светодиод: 13. Встроенный светодиод, подсоединенный к выводу 13. При отправке значения HIGH светодиод включается, при отправке LOW - выключается. В Arduino Uno есть 6 аналоговых входов (A0 - A5), каждый из которых может представить аналоговое напряжение в виде 10-битного числа (1024 различных значения). По умолчанию, измерение напряжения осуществляется относительно диапазона от 0 до 5 В. Тем не менее, верхнюю границу этого диапазона можно изменить, используя вывод AREF и функцию analogReference(). Помимо этого, некоторые из аналоговых входов имеют дополнительные функции: TWI: вывод A4 или SDA и вывод A5 или SCL. С использованием библиотеки Wire данные выводы могут осуществлять связь по интерфейсу TWI. Помимо перечисленных на плате существует еще несколько выводов: AREF. Опорное напряжение для аналоговых входов. Может задействоваться функцией analogReference(). Reset. Формирование низкого уровня (LOW) на этом выводе приведет к перезагрузке микроконтроллера. Обычно этот вывод служит для функционирования кнопки сброса на платах расширения Смотрите также соответствие выводов Arduino и ATmega328. Распиновка для микроконтроллеров ATmega8, 168 и 328 идентична. Связь. Arduino Uno предоставляет ряд возможностей для осуществления связи с компьютером, еще одним Ардуино или другими микроконтроллерами. В ATmega328 имеется приемопередатчик UART, позволяющий осуществлять последовательную связь посредством цифровых выводов 0 (RX) и 1 (TX). Микроконтроллер ATmega16U2 на плате обеспечивает связь этого приемопередатчика с USB-портом компьютера, и при подключении к ПК позволяет Ардуино определяться как виртуальный COM-порт. Прошивка микросхемы 16U2 использует стандартные драйвера USB-COM, поэтому установка внешних драйверов не требуется. На платформе Windows необходим только соответствующий .inf-файл. В пакет программного обеспечения Ардуино входит специальная программа, позволяющая считывать и отправлять на Ардуино простые текстовые данные. При передаче данных через микросхему-преобразователь USB-UART во время USB-соединения с компьютером, на плате будут мигать светодиоды RX и TX. (При последовательной передаче данных посредством выводов 0 и 1, без использования USB-преобразователя, данные светодиоды не задействуются). Библиотека SoftwareSerial позволяет реализовать последовательную связь на любых цифровых выводах Arduino Uno. В микроконтроллере ATmega328 также реализована поддержка последовательных интерфейсов I2C (TWI) и SPI. В программное обеспечение Ардуино входит библиотека Wire, позволяющая упростить работу с шиной I2C; для получения более подробной информации см. документацию. Для работы с интерфейсом SPI используйте библиотеку SPI. Автоматический (программный) сброс. Чтобы каждый раз перед загрузкой программы не требовалось нажимать кнопку сброса, Arduino Uno спроектирован таким образом, который позволяет осуществлять его сброс программно с подключенного компьютера. Один из выводов ATmega8U2/16U2, участвующий в управлении потоком данных (DTR), соединен с выводом RESET микроконтроллера ATmega328 через конденсатор номиналом 100 нФ. Когда на линии DTR появляется ноль, вывод RESET также переходит в низкий уровень на время, достаточное для перезагрузки микроконтроллера. Данная особенность используется для того, чтобы можно было прошивать микроконтроллер всего одним нажатием кнопки в среде программирования Ардуино. Такая архитектура позволяет уменьшить таймаут загрузчика, поскольку процесс прошивки всегда синхронизирован со спадом сигнала на линии DTR. Однако эта система может приводить и к другим последствиям. При подключении Uno к компьютерам, работающим на Mac OS X или Linux, его микроконтроллер будет сбрасываться при каждом соединении программного обеспечения с платой. После сброса на Arduino Uno активизируется загрузчик на время около полсекунды. Несмотря на то, что загрузчик запрограммирован игнорировать посторонние данные (т.е. все данные, не касающиеся процесса прошивки новой программы), он может перехватить несколько первых байт данных из посылки, отправляемой плате сразу после установки соединения. Соответственно, если в программе, работающей на Ардуино, предусмотрено получение от компьютера каких-либо настроек или других данных при первом запуске, убедитесь, что программное обеспечение, с которым взаимодействует Ардуино, осуществляет отправку спустя секунду после установки соединения. На плате Uno существует дорожка (отмеченная как "RESET-EN"), разомкнув которую, можно отключить автоматический сброс микроконтроллера. Для повторного восстановления функции автоматического сброса необходимо спаять между собой выводы, расположенные по краям этой дорожки. Автоматический сброс также можно выключить, подключив резистор номиналом 110 Ом между выводом RESET и 5В; для получения более подробной информации см. соответствующую ветку форума. Защита USB от перегрузок. В Arduino Uno есть восстанавливаемые предохранители, защищающие USB-порт компьютера от коротких замыканий и перегрузок. Несмотря на то, что большинство компьютеров имеют собственную защиту, такие предохранители обеспечивают дополнительный уровень защиты. Если от USB-порта потребляется ток более 500 мА, предохранитель автоматически разорвет соединение до устранения причин короткого замыкания или перегрузки. Физические характеристики. Максимальная длина и ширина печатной платы Uno составляет 6.9 см и 5.4 см соответственно, с учетом разъема USB и разъема питания, выступающих за пределы платы. Четыре крепежных отверстия позволяют прикреплять плату к поверхности или корпусу. Обратите внимание, что расстояние между цифровыми выводами 7 и 8 не кратно традиционным 2.54 мм и составляет 4 мм. Структура и применение. Места использования можно перечислять долго, так как возможности ее ничем не ограничены. С помощью этого устройства можно спроектировать множество различных систем, которые будут помогать человеку в бытовых условиях, а также в промышленном производстве, медицине и других областях нашей жизни. В настоящее время в мире наблюдается «ардуиномания». Этому миниатюрному устройству посвящено множество статей и форумов в интернете. Вот некоторые популярные области использования этого устройства: • Система «умный дом». • Всевозможные датчики. • Робототехника. • Автоматические вентиляторы. • Светофоры. • Охранные системы. • Мини метеостанции. • Мультитестеры. • Квадрокоптеры. |