Содержание
- Обзор
- Программирование и связь с ПК
- Система питания
- Порты ввода/вывода
- Память
- Подведение итогов
- Часто Задаваемые вопросы
Обзор
Arduino UNO представляет из себя отладочный комплекс, выполненный на базе микроконтроллера ATMega328. Проще говоря – это обычная плата, которая является «посредником» между пользователем и микроконтроллером, позволяя удобно цепляться к его ножкам и загружать в него прошивку прямо из среды программирования. Помимо всего прочего, плата наделена некоторыми дополнительными функциями, которые будут подробно рассмотрены в данной статье. Продуманное исполнение, небольшой размер, множество библиотек и примеров кода, позволили Arduino UNO завоевать симпатии миллионов разработчиков электронных устройств. На сегодняшний день в Интернете можно найти огромное количество проектов, в которых данная плата взята за основу.
Arduino UNO была разработана итальянскими инженерами как одна из основных плат, имеющих открытую архитектуру. По мере увеличения популярности, у платы появилось множество «клонов», полностью совместимых по программной и аппаратной части. На рисунке №1 показан внешний вид платы Arduino UNO с обеих сторон.
Рисунок №1 – плата Arduino Uno
Как видно из рисунка, подключение к пинам микроконтроллера выполняется через штыревые линейки, распаянные по обе стороны платы. Таким образом разработчик может связать ATMega328 с внешними устройствами при помощи макетных проводов. Также под топологию Arduino Uno создано огромное количество шилдов, обеспечивающих дополнительный функционал путём их каскадного включения. Пример такого включения показан на рисунке №2.
Рисунок №2 – Arduino Uno и шилд для ЧПУ
Такой подход позволяет значительно ускорить процесс создания прототипов тех или иных устройств, превращая рутинную работу в непринуждённую сборку электронного конструктора. Существуют шилды с набором датчиков, шилды-клавиатуры, шилды-экраны, шилды-расширители портов, радио-шилды и многое другое, что только может прийти в голову самому изощренному ардуинщику.
Удобно организованный доступ к портам микроконтроллера – это хорошо, но что ещё содержит Arduino Uno на своём борту? Разобраться в дополнительных деталях поможет рисунок №3, на котором обведены и подписаны все основные элементы платы и дана общая характеристика для штыревых контактов.
Те, кто хочет дополнительно расширить свой кругозор, может ознакомиться с принципиальной схемой платы перейдя по этой ссылке.
Рисунок №3 – распиновка платы Arduino Uno
Программирование и связь с ПК
В левом верхнем углу (рисунок №3) расположен USB-разъём. Он выполняет две функции. Первая – организация канала обмена данными между микроконтроллером и ПК и вторая – запись прошивки в ATMega328.
На аппаратном уровне за связь с компьютером отвечает модуль последовательного интерфейса передачи данных (UART), который встроен в ATMega328 и выведен на контактах 0(RX) и 1(TX) платы Arduino Uno. Однако просто передавать данные на компьютер не получиться. Посредником между ATmega328 и компьютером выступает отдельно установленный микроконтроллер ATMega16. Его специальная прошивка позволяет определять плату Arduino Uno как виртуальный СОМ-порт, когда та подключается к ПК. Обмен данными будет сопровождаться миганием соответствующих светодиодов RX и TX, расположенных справа от ATMega16.
Что касается записи прошивки, то этот процесс максимально упрощён и сводится к нажатию всего одной кнопки в среде Arduino IDE. Такая простота обусловлена тем, что Arduino Uno выпускается со встроенным прошитым загрузчиком, работающем по протоколу STK500. Следовательно, во внешнем программаторе нет никакой необходимости. Тем не менее, для любителей прошить контроллер напрямую, на плате предусмотрена колодка ICSP (справа посередине) для внутрисхемного программирования в обход загрузчика. Сам DFU-загрузчик находиться в ATMega16 и также может быть переписан путём внутрисхемного программирования через аналогичную колодку в верхней левой части платы.
Система питания
Для того, чтобы плата Arduino Uno могла функционировать, на неё необходимо подать питание. Сделать это можно несколькими способами, а именно:
- Запитать непосредственно через USB-разъём с помощью шнура для программирования или связи с ПК;
- Запитать от AC/DC адаптера с выходным напряжением 7-12В, подключившись через специальный разъём внешнего питания.
- Подать напряжение 7-12В напрямую на вход Vin, который расположен на штыревой колодке питающей группы. При этом минусовой контакт источника питания следует соединить с одним из контактов GND платы.
Также, плата Arduino Uno, предоставляет пользователю два контакта, на которых присутствуют напряжения 5В и 3,3В. Эти напряжения формируются встроенными линейными стабилизаторами при любом из вышеперечисленных способов питания. Максимальный ток, который способен обеспечить вывод 3,3В равен 50мА. Некоторые «умельцы» питают плату через один из этих выводов, однако это чревато выходом последней из строя, так как входное напряжение идёт в обход стабилизатора и любой скачок просто-напросто спалит микроконтроллер.
Вывод GND говорит сам за себя и является общим минусом. Все выводы GND на плате соединены между собой. Следует обратить внимание, что большинство странных глюков в работе с платой Arduino Uno связаны с тем, что разработчик проекта забывает соединить вывод GND платы Arduino с соответствующими выводами других модулей и датчиков, которые используются в проекте.
Вывод IOREF, служит для информирования подключаемых к Arduino Uno модулей или шилдов об уровне бортового напряжения. Если подключаемый модуль имеет возможность работать как с 5В, так и с 3,3В, то прочитав значение на выводе IOREF, он может выбрать для себя соответствующий режим работы.
Порты ввода/вывода
Arduino Uno предоставляет пользователю 14 цифровых и 6 аналоговых выводов. Цифровые выводы имеют нумерацию от 0 до 13 и способны работать в двух направлениях, т.е. каждый из них может быть как входом, так и выходом. Направление определяется функцией pinMode(). Помимо этого, для каждого цифрового пина имеется возможность программно включить подтягивающий резистор, соединённый с плюсом питания микроконтроллера. Номинал подтягивающего резистора лежит в диапазоне 20-50кОм. Следует учитывать, что максимальное выходное напряжение одного вывода составляет 5В, а максимальный ток - 40мА. Превышение допустимой нагрузки способно вывести микроконтроллер из строя.
Аналоговые выводы имеют обозначения А0-А5. Каждый из них соединён со встроенным 10-битным АЦП микроконтроллера ATMega328. Это означает, что мы можем одновременно измерять 6 напряжений и получать по 1024 значения для каждого канала. По умолчанию диапазон измеряемого напряжения равен 0-5В, т.е. при 0В значение АЦП будет равно 0, а при 5В значение АЦП станет равным 1023. Этот диапазон можно изменить подачей на вывод AREF своего опорного напряжения, которое станет верхней границей измерения. Если в аналоговых выводах нет необходимости, они без проблем могут использоваться как цифровые.
Помимо первичных функций, некоторые выводы Arduino Uno имеют дополнительные. Например:
- выводы 3, 5, 6, 9, 10 и 11 способны формировать широтно-импульсную модуляцию (ШИМ) с помощью функции analogWrite().
- выводы A4(SDA) и A5(SCL) представляют интерфейс связи по протоколу I2C.
- выводы 10(SS), 11(MOSI), 12(MISO), 13(SCK) обеспечивают связь по SPI-интерфейсу.
- выводы 0(RX) и 1(TX) - обеспечивают последовательный интерфейс передачи данных.
- к выводу 13 подключен smd-светодиод, расположенный на плате.
- RESET – подача низкого уровня на этот вывод приведёт к сбросу микроконтроллера.
Для удобства восприятия целесообразно всё свести в таблицу, которую можно использовать как «шпаргалку» при создании собственных проектов:
Пин Arduino Uno | Название пина в скетче | Альтернативная функция | Генерация ШИМ |
Цифровой пин №0 | 0 | Serial (RX) |
|
Цифровой пин №1 | 1 | Serial (TX) |
|
Цифровой пин №2 | 2 | Вход для внешних прерываний |
|
Цифровой пин №3 | 3 | Вход для внешних прерываний | есть |
Цифровой пин №4 | 4 |
|
|
Цифровой пин №5 | 5 |
| есть |
Цифровой пин №6 | 6 |
| есть |
Цифровой пин №7 | 7 |
|
|
Цифровой пин №8 | 8 |
|
|
Цифровой пин №9 | 9 |
| есть |
Цифровой пин №10 | 10 | SPI (SS) | есть |
Цифровой пин №11 | 11 | SPI (MOSI) | есть |
Цифровой пин №12 | 12 | SPI (MISO) |
|
Цифровой пин №13 | 13 | SPI (SCK) + светодиод |
|
Аналоговый пин №А0 | А0 |
|
|
Аналоговый пин №А1 | А1 |
|
|
Аналоговый пин №А2 | А2 |
|
|
Аналоговый пин №А3 | А3 |
|
|
Аналоговый пин №А4 | А4 | I2C (SDA) |
|
Аналоговый пин №А5 | А5 | I2C (SCL) |
|
Полная карта выводов Arduino Uno показана на рисунке №4. На ней отражены все основные и альтернативные функции для каждого пина в отдельности, а также приведено соответствие физическим выводам ATMega328.
Рисунок №4 – карта выводов Arduino Uno
Память
Так как основой платы Arduino Uno является микроконтроллер ATMega328, пользователь получает в своё распоряжение три типа памяти, которые присущи всей линейке микроконтроллеров AVR, а именно:
FLASH-память. Данная память используется для хранения прошивок, создаваемых программистом. Именно сюда будут записываться скомпилированные скетчи из среды программирования. Для Arduino Uno объём flash-памяти равен 32кб, два из которых отведены на специальную программу-загрузчик (bootloader). Bootloader нужен для упрощения процесса записи кода в микроконтроллер.
Энергонезависимая память EEPROM. Данный вид память даёт возможность сохранять данные, которые не будут удалены при отключении питания Arduino Uno. Для данной модификации платы, объём памяти EEPROM равен 1кБ. Зачастую эту память используют для сохранения всевозможных настроек. Следует помнить, что ресурс перезаписи EEPROM ограничен, поэтому следует грамотно оформлять код, чтобы увеличить срок службы памяти. Не стоит беспорядочно писать в ячейки новые данные. Делать это нужно как можно реже и только при необходимости. Для работы с энергонезависимой памятью в среде программирования Arduino IDE есть удобная библиотека, которая называется EEPROM.h.
Оперативная память SRAM. Эта память предназначена для хранения переменных и объектов, созданных во время выполнения программы. В распоряжении программиста имеется 2кБ памяти SRAM. В отличие от EEPROM, здесь все данные будут полностью удалены при отключении питания. На практике, особенно у неопытных программистов, эта память быстро заканчивается, и разработчик не может дальше развивать свой проект. Следует с самого начала грамотно планировать расход оперативной памяти, например, поменьше использовать глобальных переменных, следить за типами данных, а также хранить большие однотипные объёмы данных в памяти программ.
Подведение итогов
На основании вышеизложенного можно сделать вывод, что плата Arduino Uno является оптимальным вариантом как для начинающего, так и для опытного разработчика. Имея скромные размеры 7см на 5,5см, пользователь получает довольно широкий функционал, который может удовлетворить требования большинства проектов. Также огромным плюсом является бесчисленное множество библиотек с примерами, документации и обучающих материалов, что позволит в кратчайшие сроки реализовать задуманное на практике.
Часто задаваемые вопросы FAQ
Ответ: Да, некоторая защита имеется. Например, на плате установлены восстанавливаемые предохранители, предназначенные для защиты USB-порта персонального компьютера от перегрузок и замыканий. Порог срабатывания предохранителей равен 500мА. Если уровень потребления становиться выше – предохранители размыкаются.
Ответ: Существует. В начале программы прописываем следующую функцию:
и в нужном месте программы вызываем строку:
resetFunc();
Ответ: Как один из вариантов можно использовать PlatformIO.
Ответ: Производитель заявляет 100000 циклов перезаписи, которые должна гарантированно выдержать каждая ячейка.
Ответ: 13-й вывод соединён со светодиодом на плате через резистор 220 Ом, поэтому использовать этот вывод для питания нагрузок не стоит.