Ардуино нано аналоговые входы

Содержание

В прошлом уроке мы разобрали измерение и вывод цифрового сигнала с микроконтроллера, а в этом разберём аналоговый сигнал. Как мы уже не раз говорили ранее, у микроконтроллера есть аналоговые входы, т.е. входы, подключенные к АЦП – аналогово-цифровому преобразователю (ADC). На платах Ардуино это пины, маркированные буквой А. Я не просто так написал название в кавычках, потому что не все пины являются только аналоговыми: например на плате Nano пины A0-A5 являются также обычными цифровыми, и у них есть возможность измерять аналоговый сигнал как доп. функция. Пины A6 и A7 являются чисто аналоговыми.

Зачем нужно читать аналоговый сигнал? Микроконтроллер может выступать в роли вольтметра, измерять собственное напряжение питания, например от аккумулятора, может измерять ток через шунт (если вы знаете закон Ома), можно измерять сопротивление, а также работать с потенциометрами (крутильными, линейными, джойстиками), которые являются очень удобными органами управления.

Чтение сигнала

“Аналоговые” пины могут принимать напряжение от 0 (GND) до опорного напряжения и преобразовывать его в цифровое значение, просто в какие-то условные единицы. АЦП у нас имеет разрядность в 10 бит, т.е. мы получаем измеренное напряжение в виде числа от 0 до 1023. Функция, которая оцифровывает напряжение, называется analogRead(pin), данная функция принимает в качестве аргумента номер аналогового пина и возвращает полученное значение. Сам пин должен быть сконфигурирован как INPUT (вход), напомню, что по умолчанию все пины так и настроены. Пин кстати указывается “аналоговый”:

  • Просто номером А-пина (например, )
  • Номером с буквой А (например, А0)
  • Порядковым номером GPIO: А0 – 14 пин, A1 – 15 пин… А7 – 21

Вот пример, опрашивающий пин А0.

Хранить полученное значение разумно в переменной типа int, потому что значение варьируется от 0 до 1023.

Опорное напряжение

Опорное напряжение играет главную роль в измерении аналогового сигнала, потому что именно от него зависит максимальное измеряемое напряжение и вообще возможность и точность перевода полученного значения 0-1023 в Вольты. Изучим следующую функцию – analogReference(mode), где mode:

  • DEFAULT: опорное напряжение равно напряжению питания МК. Активно по умолчанию
  • INTERNAL: встроенный источник опорного на 1.1V для ATmega168 или ATmega328P и 2.56V на ATmega8
  • INTERNAL1V1: встроенный источник опорного на 1.1V ( только для Arduino Mega )
  • INTERNAL2V56: встроенный источник опорного на 2.56V ( только для Arduino Mega )
  • EXTERNAL: опорным будет считаться напряжение, поданное на пин AREF

После изменения источника опорного напряжения (вызова analogReference() ) первые несколько измерений могут быть нестабильными (сильно шумными).

Значение 1023 функции analogRead() будет соответствовать выбранному опорному напряжению или напряжению выше его, но не выше 5.5V, что спалит плату. То есть при режиме DEFAULT мы можем оцифровать напряжение от 0 до напряжения питания. Если напряжение питания 4.5 Вольта, и мы подаём 4.5 Вольт – получим оцифрованное значение 1023. Если подаём 5 Вольт – опять же получим 1023, т.к. выше опорного. Это правило работает и дальше, главное не превышать 5.5 Вольт. Как измерять более высокое напряжение (12 Вольт например) я расскажу в отдельном уроке.

Что касается точности: при питании от 5V и режиме DEFAULT мы получим точность измерения напряжения (5 / 1023

8 мВ) – 8 милливольт. Поставив INTERNAL мы можем измерять напряжение от 0V до 1.1V с точностью (1.1 / 1023

1.2 мВ) – 1.2 милливольта. Весьма неплохо, особенно если баловаться с делителем напряжения.

Что касается внешнего источника опорного напряжения. Нельзя использовать напряжение меньше 0V или выше 5.5V в качестве внешнего опорного в пин AREF. Также при использовании режима EXTERNAL нужно вызвать analogReference(EXTERNAL) до вызова функции analogRead(), иначе можно повредить микроконтроллер. Можно подключить опорное в пин AREF через резистор на

5 кОм, но так как вход AREF имеет собственное сопротивление в 32 кОм, реальное опорное будет например 2.5 * 32 / (32 + 5) =

Простой пример, как измерить напряжение на аналоговом пине и перевести его в Вольты. Плата питается от 5V

Таким образом переменная voltage получает значение в Вольтах, от 0 до 5. Чуть позже мы поговорим о более точных измерениях при помощи некоторых хаков.

Видео

Плата Arduino Nano

Nano – одна из самых миниатюрных плат Ардуино. Она является полным аналогом Arduino Uno – так же работает на чипе ATmega328P (хотя можно еще встретить варианты с ATmega168), но с меньшим форм-фактором. Из-за своих габаритных размеров плата часто используется в проектах, в которых важна компактность. На плате отсутствует вынесенное гнездо внешнего питания, Ардуино работает через USB (miniUSB или microUSB). В остальном параметры совпадают с моделью Arduino Uno.

Описание платы Arduino Nano

Технические характеристики Arduino Nano:

  • Напряжение питания 5В;
  • Входное питание 7-12В (рекомендованное);
  • Количество цифровых пинов – 14, из них 6 могут использоваться в качестве выходов ШИМ;
  • 8 аналоговых входов;
  • Максимальный ток цифрового выхода 40 мА;
  • Флэш- память 16 Кб или 32 Кб, в зависимости от чипа;
  • ОЗУ 1 Кб или 2 Кб, в зависимости от чипа;
  • EEPROM 512 байт или 1 Кб;
  • Частота 16 МГц;
  • Размеры 19 х 42 мм;
  • Вес 7 г.

Питание платы может осуществляться двумя способами:

  1. Через mini-USB или microUSB при подключении к компьютеру;
  2. Через внешний источник питания, имеющий напряжение 6-20 В с низким уровнем пульсаций.

Стабилизация внешнего источника выполняется при помощи схемы LM1117IMPX-5.0 на 5В. При подключении через кабель от компьютера подключение к стабилизатору происходит через диод Шоттки. Схемы обоих типов питания приведены на рисунке.

При подключении двух источников напряжения плата выбирает с наибольшим питанием.

У платы Arduino Nano имеются такие же ограничения по напряжению и току на входы и выходы платы. Все цифровые и аналоговые контакты работают в диапазоне от 0 до 5 В. При подаче питания, выходящего за рамки этих значений, напряжение будет ограничиваться защитными диодами. В этом случае сигнал должен подключаться через резистор, чтобы не вывести контроллер из строя. Наибольшее значение втекающего или вытекающего тока не должно превышать значение 40 мА, а общий ток контактов должен быть не более 200 мА.

На плате имеются 4 светодиода, которые показывают состояние сигнала. Они обозначены как TX, RX, PWR и L. На первых двух светодиод загорается, когда уровень сигнала низкий, и показывает, что сигнал TX или RX активен. Светодиод PWR загорается при напряжении в 5 В и показывает, что подключено питание. Последний светодиод – общего назначения, загорается, когда подается высокий сигнал.

На настоящий момент выпускается несколько видов Arduino Nano. Есть версии 2.X, 3.0., которые отличаются только чипом, на котором они работают. В версии 2.Х. используется чип ATmega168 с меньшим объемом памяти (флэш, энергонезависимой) и пониженной тактовой частотой, версия 3.0. работает на чипе ATmega328.

Где купить Arduino Nano

Традиционно самые низкие цены предлагают зарубежные интернет-магазины. В России цены почти всегда будут выше на 20-200 процентов, но не придется ждать заказа около месяца.

Приведем ссылки на надежных поставщиков Aliexpress:

Распиновка Arduino Nano

Плата Ардуино Нано имеет 14 цифровых контактов, которые помечаются буквой D (цифровой, digital). Контакты используются как входы и выходы, у каждого имеется подтягивающий резистор.

Аналоговые пины обозначаются буквой А и используются как входы. У них отсутствую подтягивающие резисторы, они измеряют поданное на них напряжение и возвращают значение при помощи функции analogRead().

На некоторых цифровых пинах можно увидеть значок

. Такие контакты можно использовать в качестве выходов ШИМ. Ардуино нано оснащена шестью такими контактами – это пины D3, D5, D6, D9, D10, D11. Для работы с ШИМ выводами используется функция analogWrite().

Описание пинов Ардуино Нано

  • Цифровые входы/выходы: D0-D13.
  • Аналоговые входы/выходы: A0-A7 (10-разрядный АЦП).
  • ШИМ: пины 3, 5, 6, 9, 10, 11.
  • UART : D0 и D1 (TX и RX соответственно).
  • I2C: SDA – A4, SCL -A5.
  • SPI: MOSI – 11, MISO – 12, SCK – 13, SS(10).

Пробежимся по пинам:

  • 0 – TX (передача данных UART), D0.
  • 1 – RX (прием данных UART), D1. RX и TX могут использоваться для связи по последовательному интерфейсу или как обычные порты данных.
  • 3, 29 – сброс.
  • 4, 29 – земля.
  • 5 – D2, прерывание INT0.
  • 6 – D3, прерывание INT1 / ШИМ / AIN0.
  • 7 – A4, счетчик T0 / шина I2C SDA / AIN1. AIN0 и AIN1 – входы для быстродействующего аналогового компаратора.
  • 8 – A5, счетчик T1 / шина I2C SCL / ШИМ.
  • 9 – 16 – порты D6-D13, из которых D6 (9й), D9 (12й), D10 (13й) и D11 (14й) используются как выходы ШИМ. D13 (16й пин) – светодиод. Также D10 – SS, D11 – MOSI, D12 – MISO, D13 – SCK используются для связи по интерфейсу SPI.
  • 18 – AREF, это опорное напряжение для АЦП микроконтроллера.
  • 19 – 26: аналоговые входы A0… A7. Разрядность АЦП 10 бит. A4 (SDA), A5 (SCL) – используются для связи по шине I2C. Для создания используется специальная библиотека Wire.

Микроконтроллеры обладают большими функциональными возможностями, но у них есть один недостаток – это ограниченное, по сраyвению с Arduino Mega, число выводов. Поэтому на этапе составления схемы устройства следует продумать, каким образом можно максимально упростить проект, чтобы сократить число нужных для подключения контактов.

Подключение Arduino Nano

Подключение платы Arduino Nano к компьютеру не представляет особого труда – оно аналогично обычной плате Uno. Единственная сложность может возникнуть при работе с платой на базе чипа ATMEGA 168 – в настройках нужно выбрать сперва плату Nano, а затем нужный вариант процессора.

Установка драйвера для CH340

Микросхема CH340 часто используется в платах Ардуино со встроенным USB-to-Serial преобразователем. Она позволяет уменьшить затраты на производство плат, не влияя на ее работоспособность. При помощи этого программатора можно легко прошивать платы Ардуино. Для того, чтобы начать работать с этой микросхемой, нужно установить драйвер на компьютер.

Установка выполняется в несколько этапов:

  • Скачивание архива с драйвером для нужной операционной системы. Для Windows, MacOS и Linux загрузить драйверы можно по ссылке в нашей статье про USB UART.
  • Распаковка архива.
  • Поиск файла SETUP.EXE, его запуск.
  • На мониторе появится окно, в котором нужно нажать кнопку Install. Установка драйвера начнется, после чего можно начинать работу со схемой.

Настройка Arduino IDE

Стандартная среда разработки Arduino IDE используется для работы всех видов Ардуино с компьютером. Чтобы начать работу, нужно сначала скачать Arduino IDE с официального сайта и установить ее. Удобнее скачивать Windows Installer, особенно если среда разработки будет установлена на постоянном рабочем компьютере. Если скачан архив, то его нужно распаковать и запустить файл Arduino.exe.

Как только среда установлена, нужно ее запустить. Для этого нужно подключить к компьютеру саму плату Ардуино через USB. Затем перейти в меню Пуск >> Панель управления >> Диспетчер устройств, найти там Порты COM и LPT. В списке появится установленная плата и указан номер порта, к которому подключается плата.

После этого нужно запустить Arduino IDE, перейти в меню Инструменты >> Порт, и указать порт, к которому присоединена Ардуино. В меня Инструменты>> Платы нужно выбрать модель подключенной платы, в данном случае Arduino Nano. Если у вас плата Nano версии 2.0, то вам нужно также выбрать вариант процессора в соответствующем меню.

Важно помнить, что если к компьютеру будет подключаться другая плата, настройки снова нужно будет поменять на соответствующее устройство.

Примеры проектов с Arduino Nano

Проектов с использованием платы Нано существует огромное количество. По идее, в любой проект для Arduino Uno можно совершенно спокойно внести плату Nano и не придется менять современно ничего в коде. Именно поэтому часто после отладки проекта на “большом и удобном” Uno схему переделывают под нано и используют в рабочем варианте “уменьшенный” контроллер, который легче сделать миниатюрным.

Подключение светодиодов к Arduino Nano

В качестве тестовой программы, проверяющей работу платы, можно использовать мигание светодиодом. На плате имеется встроенный светодиод L, с которым обычно выполняются первые проекты. Но можно подключить и внешний светодиод к выходу D13. Мы, конечно, не забываем, что светодиод обязательно подключать через резистор, чтобы не сжечь его и не повредить плату. Анод светодиода подключается к резистору, который присоединяется к выходу D13. Катод светодиода – к земле. Вот пример схемы:

В Arduino IDE есть пример, который включает мигание светодиода. Для этого нужно перейти в меню Файл>>Образцы>>1. Basics>> Blink и загрузить пример. После выгрузки пода Ардуино будет выполнять программу, мигая светодиодом раз в секунду.

Подключение LCD 1602 к Arduino Nano

Экран LCD 1602 достаточно распространенный, для него существует разнообразные виды шилдов, но также его можно подключить напрямую к Ардуино. Для подключения дисплея к плате нужны Arduino Nano, макетная плата, экран LCD 1602 и соединительные провода.

Выбор пинов, к которым нужно подключать дисплей, может быть любым. Для примера будет выбрана такая конфигурация: контакт RW с дисплея подключается к земле, 4й контакт дисплея – к А0 на Ардуино, 6-й контакт – к Е (Enable), с 11-го по 14-й подключаются к D4-D7. Экран подключен. Для того, чтобы началь писать код, нужно подключить библиотеку LiquidCrystal. В ней также имеется тестовый скетч, который позволит проверить работоспособность установки. Код находится по адресу ArduinolibrariesLiquidCrystalexamplesHelloWorldHelloWorld.ino, в скетче нужно только поменять номера контактов, к которым подключен экран. Если все подключено правильно, на мониторе загорится надпись.

Подключение nrf24l01 к Arduino Nano

Радиомодуль nrf24l01 используется в случаях, когда нужно получать данные от датчиков, которые расположены на удалении от управляющего устройства. Модуль прост в использовании и легко подключается к Ардуино.

Подключение к Ардуино Нано изображено на рисунке. Земля с платы соединяется с землей модуля, напряжение – на 3,3В, 3й контакт (CE) – к D9, с 4 по 7й – к D10-D12. Для 3го контакта и 4-го можно использовать любые пины, главное указать это потом в коде.

К радиомодулю может быть также припаян конденсатор между выходами земля и питание, который позволит уменьшить шумы, и сделает работу устройства более стабильной.

Для работы с модулем существует несколько библиотек. Наиболее распространенные библиотеки – это RF24 и Mirf. Выбор той или иной библиотеки определяется удобством использования.

Обзор популярных шилдов для Arduino Nano

Платы расширения (или arduino shield, шилд) используются для решения различных задач и упрощения проектов. На плате расширения устанавливаются все нужные электронные компоненты, а взаимодействие с другими контроллерами осуществляется через стандартные контакты Ардуино.

Nano Uno shield – это шилд, который позволяет превратить плату Нано в Уно. Платформа имеет различные колодки для подключения, кнопку перезагрузки и гнездо питания.

Arduino Nano Ethernet Shield – используется для обеспечения работы с сетью через Ethernet. Аналогичен такому же шилду для Arduino Uno, но имеет меньшие размеры и гораздо удобнее в реальных проектах.

Arduino Nano Motor Shield – шилд, который используется в робототехнических проектах для подключения моторов и двигателей к плате Ардуино. Его основная задача – обеспечение управления устройствами, которые потребляют большой (по сравнению с Ардуино) ток. Также с помощью шилда можно управлять мощностью мотора и менять его направление вращения. Моделей плат Motor Shield существует множество, у всех имеется в схеме мощный транзистор, теплоотводящие компоненты, схемы для подключения внешнего источника напряжения и разъемы ля подключения двигателей.

Arduino Nano Sensor Shield – самая распространенная платформа. Шилд прост – основной его задачей является обеспечение удобного подключения к плате Ардуино других устройств. На шилде расположены дополнительные разъемы питания и земли, разъемы для подключения внешнего источника напряжения, светодиод и кнопка перезагрузки.

Arduino Data Logging Shield – шилд, который позволяет писать лог данных с датчиков. Также он используется как файловое хранилище или часы реального времени. Для работы с шилдом существует специальная библиотека, которая позволяет логировать информацию на карту памяти.

Arduino Proto Shield – платформа для быстрого прототипирования или создания своего шилда. На этих платах расположены площадки для монтажа нужных компонентов, выведена кнопка сброса, 2 светодиода и разъем для внешнего питания. С их помощью можно повысить компактность устройства.

Итоги

Контроллеры Arduino Nano активно используются в самых разнообразных DIY проектах. Использование миниатюрного контроллера позволяет создавать устройства в небольшом форм-факторе, что является важным для проектов в области автоматизации и робототехники. Эта плата довольно компактная, удобная и обладает всеми возможностями “большой Uno”. Можно рекомендовать ее к использованию даже начинающим ардуинщикам.

Функция analogRead()

Функция считывает значение с указанного аналогового входа. Большинство плат Arduino имеют 6 каналов (8 каналов у платы Mini и Nano, 16 у Mega) c 10-битным аналого-цифровым преобразователем (АЦП). Напряжение поданное на аналоговый вход, обычно от 0 до 5 вольт будет преобразовано в значение от 0 до 1023, это 1024 шага с разрешением 0.0049 Вольт. Разброс напряжение и шаг может быть изменен функцией analogReference().

Считывание значение с аналогового входа занимает примерно 100 микросекунд (0.0001 сек), т.е. максимальная частота считывания приблизительно 10,000 раз в секунду.

Синтаксис
Параметры

pin: номер порта аналогового входа с которого будет производиться считывание (A0..A5 для большинства плат, 0..7 для Mini и Nano и 0..15 для Mega)


Источник: texpm.ru