Arduino Nano – это отладочная плата небольшого размера, которая входит в тройку лидеров по популярности среди радиолюбителей-программистов. Несмотря на свой скромный размер, она практически ничем не уступает нашумевшей Arduino Uno по функционалу и может использоваться в проектах, где габариты играют существенную роль.
Ранние версии Arduino Nano базировались на основе микроконтроллера ATmega168. Начиная с версии 3.0, в них установлены более продвинутые ATmega328, с увеличенным объёмом FLASH и EEPROM-памяти, а также с большей тактовой частотой. На рисунке №1 показан внешний вид платы Arduino Nano V3.0.
Рисунок №1 – плата ArduinoNano
Как видно из вышеприведенного рисунка, для общения с внешним миром в этой плате предусмотрены штыревые колодки. Это удобно для макетирования, но при желании их можно не устанавливать. В таком случае провода к нужным выводам припаиваются напрямую. Также штыревые колодки нужны при использовании в проекте специализированных плат расширения (шилдов), которых для данной модификации Arduino придумано огромное множество.
Если внимательно рассмотреть плату Arduino Nano, то на ней можно заметить не только микроконтроллер ATmega328, но и ряд дополнительных компонентов, обеспечивающих «жизнедеятельность» этого аппаратного комплекса в целом. На рисунке №2 можно увидеть, за что отвечает каждый из них.
Рисунок №2 – Состав платы ArduinoNano
Чтобы сэкономить место, разработчики расположили радиоэлементы по обе стороны платы. С лицевой стороны нанесена вся информативная шелкография, установлен микроконтроллер ATmega328, кварцевый резонатор, разъём Mini-USB, кнопка сброса и четыре индикаторных светодиода (TX, RX, PWR и L). Первые два светодиода загораются при обмене данными платы Arduino Nano с другими устройствами через последовательный серийный порт. Индикатор PWR отражает поступление на плату питания, а светодиод L является индикатором общего назначения и загорается в случае подачи высокого сигнала на вывод №13.
Обратная сторона послужила основой для линейного стабилизатора напряжения 5V и преобразователя интерфейса FTDI USB.
Где приобрести комплектующие для Ардуино? Купить платы Arduino вы можете в нашем магазине 3DIY!
Программирование и связь с ПК
Процесс подключения платы Arduino Nano к персональному компьютеру обычно не вызывает затруднений – он полностью аналогичен работе с платой Arduino Uno, за исключением некоторых моментов, о которых будет сказано ниже.
Если работа с платой происходит впервые, скорее всего, потребуется скачать и установить драйвер для микросхемы CH340. Эта микросхема представляет собой USB-to-Serial преобразователь, который обеспечивает общение Arduino Nano с компьютером через USB-кабель. Подобные микросхемы установлены в большинстве модификаций и реплик плат Arduino Nano.
Следующий момент, на котором необходимо заострить внимание – это тип установленного микроконтроллера. Как говорилось выше, их может быть два: ATmega168 и ATmega328. Перед программированием, необходимо выбрать в среде Arduino IDE именно тот, с которым будет вестись работа. Этот нюанс отражён на нижеприведённом рисунке №3.
Рисунок №3 – выбор типа микроконтроллера, установленного на плате Arduino Nano
Если всё сделано правильно, то при соединении Arduino Nano с компьютером во вкладке меню Инструменты-Порт, должен появиться номер виртуального COM-порта, привязанный к текущей плате. С этого момента можно загружать скетч в микроконтроллер путём нажатия всего одной кнопки, в виде смотрящей направо стрелки.
Для продвинутых пользователей предусмотрена возможность внутрисхемного программирования «напрямую» через разъём ICSP. В таком случае не обойтись без стороннего программатора, например USB-ASP, STK500 или AVRISP.
Система питания
- через USB-кабель при подключении к компьютеру или другому источнику питания 5V.
- при помощи внешнего стабилизированного источника питания, напряжение которого должно лежать в диапазоне 6-20V (рекомендуется 7-12V). Данное напряжение подаётся непосредственно на вход VIN платы Arduino Nano.
Что касается портов ввода-вывода, то следует помнить, что они работают с напряжениями 0-5V. Любое превышение, несмотря на встроенные ограничительные диоды, может вывести микроконтроллер из строя. То же самое касается и нагрузочной способности порта. Максимальный ток, который может выдать один вывод, равен 40мА, а суммарный ток всех выводов не должен превышать значение 200мА.
Также плату Arduino Nano можно использовать для питания мелкой периферии. Для этого на ней предусмотрены выводы 5V и 3.3V. Первое напряжение формируется встроенным линейным стабилизатором LM1117IMPX-5.0, а второе берётся с четвёртого вывода микросхемы-конвертора CH340G (у платы Arduino Uno для этого предусмотрен свой отдельный стабилизатор). Следовательно, использовать напряжение 3.3V можно только в случае питания через разъём USB.
Для полноты картины, ниже приведена электрическая схема платы Arduino Nano, на которой наглядно можно увидеть оговоренные ранее моменты (рисунок №4).
Рисунок №4 – электрическая схема Arduino Nano
Порты ввода-вывода
Для пользователя платы ArduinoNano доступно 14 цифровых контактов ввода/вывода. Их обозначение начинается с латинской буквы «D», от английского слова digital-цифровой. Каждый из этих контактов может быть настроен как на вход, так и на выход. Настройка направления осуществляется при помощи функции pinMode(), например:
pinMode(13, OUTPUT); – настройка на выход вывода №13;
pinMode(13, INPUT); – настройка на вход вывода №13;
pinMode(13, INPUT_PULLUP); – настройка на вход вывода №13 с подтяжкой к напряжению питания через внутренний резистор.
Если цифровой пин настроен на выход, он может выдавать два уровня сигнала, которые соответствует логическому нулю или логической единице. Делается это при помощи следующих команд:
digitalWrite(13, LOW); – установить нулевой уровень на выводе №13;
digitalWrite(13, HIGH); – установить 5V на выводе №13;
Также, некоторые из цифровых выводов способны генерировать на своём выходе ШИМ-сигнал с настраиваемой скважностью. Эти выводы помечаются на плате специальным дополнительным символом «*». Для ArduinoNano эти выводы имеют обозначение D3, D5, D6, D9, D10, D11. Ниже даны несколько соответствующих примеров:
analogWrite(3, 0); – установить на выводе №3 ШИМ сигнал с максимальной скважностью (аналогично логическому нулю);
analogWrite(3, 255); – установить на выводе №3 ШИМ сигнал с минимальной скважностью (аналогично логической единице);
analogWrite(3, 128); – установить на выводе №3 ШИМ сигнал со скважностью 50%.
В случае, когда цифровой пин настроен на вход, пользователь может узнать логический уровень, который в данный момент на нём присутствует, например:
- uint8_tlevel=digitalRead(13); – переменной level будет присвоено значение 0 или 1 в зависимости от уровня напряжения на входе №13.
Помимо цифровых контактов, плата ArduinoNano имеет на своём борту 8 аналоговых входов, которые связаны с 10-битным АЦП. Это даёт возможность измерять напряжение в пределах 0-5V с точностью 0,0048V. Расширение диапазона измеряемых напряжений достигается путём использования резистивных делителей.
Обозначение аналоговых входов начинается буквой «А», от английского слова analog. На плате ArduinoNano эти входы маркируются как A0, A1, A2, A3, A4, A5, A6, A7. Первые пять входов могут использоваться в качестве цифровых, работая в оба направления. Пины A6 и A7 способны работать только на вход!!! Это следует помнить при проектировании программного обеспечения. Чтобы оценить уровень напряжения на аналоговом входе, необходимо воспользоваться следующей командой:
- intadc=analogRead(A0); – переменной adc будет присвоено значение от 0 до 1023 в зависимости от величины напряжения на входе.
Ввиду того, что ArduinoNano построена на базе микроконтроллера ATmega328, некоторые её выводы имеют также и альтернативные функции, например шину SPI, I2C, Serial и.т.д. Все эти структуры при необходимости активируются с помощью встроенных в ArduinoIDE библиотек или напрямую через работу с регистрами микроконтроллера.
Чтобы наглядно увидеть возможности этой небольшой платы в комплексе со всеми альтернативными возможностями, на рисунке №5 приведена полная карта распиновки выводов ArduinoNano.
Рисунок №5 – распиновка выводов платы ArduinoNano
Некоторые наиболее из часто используемых в ArduinoIDE альтернативных функций для удобства восприятия сведены в таблицу ниже.
Структура памяти
Память ArduinoNano можно функционально разделить на три разных группы. Такая классификация обусловлена применением микроконтроллера линейки AVR, в котором подобная топология заложена производителем. Каждый подвид памяти выполняет свою функцию, что в комплексе обеспечивает полноценную жизнедеятельность микроконтроллера. Итак, ArduinoNano предоставляет следующие виды памяти:
- Flash-память – служит для хранения программного кода в виде прошивки. Иногда программисты её используют также для хранения каких-либо константных данных с целью экономии места в оперативной памяти. Как пример – текстовые строки для меню и.т.п. Если ArduinoNano выполнена на базе микроконтроллера ATmega168, то объем flash-памяти будет равен 16кБ. В случае с ATmega328 мы получим 32кБ flash-памяти. Следует учитывать, что в обоих случаях 2кБ будет занято программой-загрузчиком!
- EEPROM-память – это энергонезависимая память, значения которой не изменяются даже при отключении питания. Широко используется программистами для сохранения последних настроек в проекте, которые по задумке подвержены периодическому отключению от источника электроэнергии. Как и в предыдущем случае, объем этой памяти зависит от типа используемого микроконтроллера. ATmega168 предоставляет 512 байт EEPROM, а ATmega328 в два раза больше – 1кБ. В ArduinoIDE есть специализированная библиотека, позволяющая удобно работать с энергонезависимой памятью. Подключить её можно следующей строкой: #include<EEPROM.h>
- SRAM-память – оперативная память, которая служит для хранения значений переменных в период выполнения программного кода и полностью обнуляется при отключении ArduinoNano от источника питания. Микроконтроллер ATmega168 имеет SRAM в объеме 1кБ. Это ровно вполовину меньше от того, что даёт микроконтроллер ATmega328 (2кБ). Многие, особенно начинающие программисты сталкиваются с быстрым израсходованием оперативной памяти. Чтобы этого не происходило, следует тщательно следить за типами данных, чтобы избежать избыточности на всех этапах разработки проекта.
Подведение итогов
Несмотря на очень скромный размер (4.3см х 1.85см), ArduinoNano представляет собой полнофункциональное законченное устройство, которое в большинстве случаев базируется на микроконтроллере ATmega328. Плата призвана облегчить процесс макетирования и учитывая её популярность, успешно справляется с этой задачей на протяжении долгого времени. ArduinoNano практически не уступает по возможностям её «старшему собрату» - плате ArduinoUno, которая имеет куда большие габариты и стоимость.
На основании вышеизложенного можно сказать, что универсальность ArduinoNano в комплексе с множеством библиотек и разнообразием технической литературы являются мощным инструментов в умелых руках. С помощью данного комплекса можно решить немало задач по автоматизации в самых различных сферах человеческой деятельности.
Часто задаваемые вопросы
Вопрос: во время прошивки китайской копии ArduinoNanoV3.0 (CH340G) среда ArduinoIDE выдаёт ошибку, хотя показывает, что плата подключена по СОМ3. Соответствующий драйвер тоже установлен.
Ответ: в некоторых подобных случаях необходимо просто выбрать в меню «Инструменты» тип процессора ATmega328 с пометкойOldBootloader, как показано ниже (опция появилась в версиях ArduinoIDE старше 1.6.20):
Вопрос: пропадает шина 3V3 при работе ArduinoNano от внешнего источника питания. От USB-кабеля всё работает как надо.
Ответ: На плате ArduinoNano установлен один линейный стабилизатор на 5V. Напряжение 3V3 берётся с микросхемы преобразователя USB-интерфейса, которая активна только при организации питания через USB-кабель. В случае прямого питания, напряжение 3,3V попросту не выдаётся. В этом случае рекомендуется использовать сторонние модули для преобразования, например AMS117-3.3:
Вопрос: Существует ли шилд под ArduinoNano для ЧПУ-станка?
Ответ: Для ArduinoNano существует большое множество плат расширения и в частности для станка ЧПУ или 3Д-принтера. Выглядит он следующим образом:
Вопрос: Использую ArduinoNano в авто. Необходим более быстрый запуск после включения зажигания. Что посоветуете?
Ответ: Дляускорения запуска необходимо стереть загрузчик и прошивать микроконтроллер напрямую через разъём ICSP любым подходящим программатором.