Плата Arduino Nano v 3.0 : распиновка, схемы, драйвер


Существует несколько версий плат Arduino nano. Есть версия 2.X, а есть версия 3.0. Отличаются эти версии самим микроконтроллером. В младшей версии этой ардуинки используется чип ATmega168. Этот чип обладает меньшим объемом flash-памяти, энергонезависимой памяти, а так же пониженной тактовой частотой. Так как цена разных версий Arduino nano практически не отличается мы не будем рассматривать младшую из них. Arduino nano v 3.0 снабжена микроконтроллером ATmega328P. В отличии от своего младшего собрата, он имеет вдвое большие объемы энергонезависимой и flash памяти. И может похвастаться тактовой частотой в 16 МГц.

Ардуино нано имеет практически те же возможности, что и Ардуино Уно, несмотря на вдвое меньший размер. Многие любители используют именно эту плату в качестве основной, так как ее можно удобно разместить на беспаечной макетной плате вместе с другими элементами проекта. Да и в конечном проекте тоже можно использовать эту ардуинка потому что она маленькая (42 мм * 19 мм) и имеет низкое энергопотребление.


Элементы Arduino Nano V3

Распиновка платы Arduino Nano

По обеим сторонам платы располагаются контакты пинов, с каждой стороны по 15 штук.

Назначение контактов:

  • 1, 2: работа с UART-интерфейсом;
  • 3, 28: сброс микроконтроллера;
  • 4, 29: общий провод;
  • 5: внешнее прерывание;
  • 6: внешнее прерывание / создание сигнала с широтно-импульсной модуляцией;
  • 7: работа с I2C-интерфейсом / таймер-счетчик 0;
  • 8: работа с I2C-интерфейсом / создание ШИМ-сигнала / таймер-счетчик 1;
  • 9, 12: создание ШИМ-сигнала;
  • 10, 11: цифровые пины ввода/вывода, специальных функций нет;
  • 13, 14, 15: работа с SPI-интерфейсом / создание ШИМ-сигнала;
  • 16: подключение светодиода / работа с SPI-интерфейсом;
  • 17: питание 3,3 В;
  • 18: опорное напряжение для АЦП;
  • 19-26: аналоговые входы (AP) для АЦП;
  • 27: питание 5 В;
  • 30: входной сигнал VIN 7-12 В.

У Arduino Nano 14 цифровых портов (DP) и 8 AP.

Дополнительные детали

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

  • сама плата ардуино nano
  • резисторы (220 Ом и других емкостей)
  • светодиоды

  • макетная плата (иногда называют макетками)
  • провода-перемычки

Таким образом, у вас должен получиться примерно такой комплект:

Технические характеристики платы

Питание5 В
Входной сигнал7-12 В (DC)
Количество DP14 (6 для ШИМ)
Количество AP8
Максимальный ток DP40 мА
Память формата Flash16 / 32 Кб
Оперативная память1 / 2 Кб
Память формата EEPROM512 байт / 1 Кб
Тактовая частота работы микроконтроллера16 МГц
ГабаритыШирина — 19 мм, длина — 42 мм
Вес7 г

Подробный обзор возможностей платы приведен в Datasheet — технической документации. Там же указаны детальные характеристики и описание AN.

Другие пины

  • Пин 3.3V может быть использован для питания маломощных датчиков и модулей: максимальный ток, который можно снять с пина 3.3V составляет 150 мА, что с головой хватает для любых датчиков и модулей, кроме пожалуй радиомодулей nrf25L01.
  • Пины GND – земля питания, все GND связаны между собой
  • Пин 5V – питание от источника с напряжением до 5.5V (подробнее о питании смотри в следующем уроке)
  • Пин Vin – питание от источника с напряжением 7-15V (подробнее о питании смотри в следующем уроке)
  • RST – перезагрузка МК. Также этот пин выведен на кнопку

Схема электрическая

Важнейшими элементами платы Arduino Nano являются программатор (ISCP-разъем) и микроконтроллер (ATmega328P). Знать их структурные, принципиальные схемы и назначение контактов необходимо каждому, кто собирается работать с данной платой.

Схема ISCP «Ардуино Нано»

ISCP-разъем (или SPI) — программатор, через который скетч (код для микроконтроллера платы) загружается в ATmega328P. У него 6 контактов. Отверстие первого из них выполнено в форме квадрата для удобства отсчета.

Распиновка разъема:

  1. MISO: вход ведущего, выход ведомого при передаче данных.
  2. +VCC: напряжение питания.
  3. SCK: последовательный тактовый сигнал.
  4. MOSI: выход ведущего, вход ведомого при передаче данных.
  5. Reset: сброс.
  6. GND: общий провод.

Принципиальная схема контроллера платы

Контроллер платы — ATmega328P. Ядро микросхемы — CPU, к которому идут 2 шины (шина данных и шина ввода/вывода данных), элементы управления (например, пин Reset, ответственный за сброс микроконтроллера) и памяти.

Типы памяти в контроллере:

  • SRAM;
  • Flash;
  • EEPROM.

К шине данных идут следующие элементы:

  1. Сторожевой таймер.
  2. АЦП.
  3. Внешнее прерывание.
  4. Первый и второй таймеры-счетчики.
  5. USART и I2C (у Atmel этот интерфейс называется TWI).

К шине ввода/вывода данных подключены:

  1. Порты ввода/вывода.
  2. Нулевой таймер-счетчик.
  3. SPI-интерфейс.

Контроллер может быть выполнен как в MLF-, так и в PDIP-корпусе. В Arduino Nano установлен MLF-вариант микроконтроллера.

Покупаем Ардуино

Ардуино всё больше захватывает наш мир. Стоит ли покупать дорогостоящие устройства, когда многие вещи для дома можно сделать своими руками? Мы уже даже успели смастерить на основе Ардуино и Raspberry рабочий ноутбук. С учетом всего этого микроконтроллеры набирают всё большую и большую популярность.

Остановимся на стоимости платы для нашего мастер-класса. Данная плата очень миниатюрная и является полноценным аналогом многим другим платам и именно поэтому мы выбрали Nano для данного мастер-класса.

Купить Нано можно во многих интернет-магазинах. Так, для примера, стоимость Arduino Nano 3.0 на конец марта 2022 года в разных магазинах составила:

  • iarduino.ru — 525 рублей
  • amperka.ru — 1490 рублей
  • duino.ru — 325 рублей
  • smartelements.ru — 590 рублей

Но даже это не предел, стоимость полноценных аналогов на всем известном aliexpress.com может быть в диапазоне 150-200 рублей. Для тех кто решил совершить покупку на АлиЭкспресс может ознакомиться с нашей небольшой пошаговой инструкцией.

Порты ввода/вывода и питание

К портам ввода/вывода относят:

  • цифровые разъемы;
  • аналоговые разъемы;
  • разъемы, выводящие ШИМ-сигнал;
  • разъемы для работы с АЦП, I2C (TWI), SPI, UART.

Для работы с каждым интерфейсом в языке C для Arduino предусмотрена отдельная библиотека, что облегчает работу программисту, который пишет код.

Питание к плате модели «Нано» можно подключить 3 способами:

  1. Через разъем mini-USB. Этот способ удобен тем, что разработчику не надо подводить к плате дополнительный ток. Подобный источник питания поддерживает системы, позволяющие регулировать значение входного тока.
  2. Через нерегулируемые источники на 6-20 В.
  3. Через регулируемый источник питания 5 В.

Плата Arduino Nano запрограммирована таким образом, что в случае подключения питания ко всем доступным пинам микроконтроллер выберет сигнал с наибольшей величиной напряжения, а остальные выводы питания заблокирует.

Питание от внешнего источника

Питание через нерегулируемые источники на 6-20 В обеспечивается подсоединением блока источника сигнала к пину 30 и общему проводу соответственно.

Метод подключения питания через регулируемый источник на 5 В наиболее популярен среди разработчиков. Чтобы его использовать, необходимо дополнительно включить в цепь преобразователь с выходным напряжением 5 В, а преобразование энергии всегда влечет дополнительные потери и ухудшение качества сигнала. Подсоединение такого источника обеспечивается через пин 27 и общий провод.

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

Лок-биты (Pro)

Лок-биты (lock-bits) позволяют управлять доступом к памяти микроконтроллера, что обычно используется для защиты устройства от копирования. Лок-биты собраны опять же в конфигурационный лок-байт, который содержит: BOOTLOCK01, BOOTLOCK02, BOOTLOCK11, BOOTLOCK12, LOCKBIT1, LOCKBIT2 (для ATmega328). Калькулятор лок-битов можно использовать этот. BOOTLOCK биты позволяют запретить самому МК запись (самопрограммирование) во flash память (область программы и область загрузчика)

А вот локбиты LOCKBIT позволяют запретить запись и чтение flash и EEPROM памяти извне, при помощи программатора, т.е. полностью защитить прошивку от скачивания и копирования:

Таким образом включив LOCKBIT1 (лок-байт будет 0x3E) мы запретим внешнюю запись во Flash и EEPROM память, т.е. при помощи ISP программатора, а включив LOCKBIT1 и LOCKBIT2 (лок-байт: 0x3C) полностью заблокируем заодно и чтение данных из памяти микроконтроллера. Повторюсь, всё описанное выше относится к ATmega328p, для других моделей МК читайте в соответствующих даташитах.

Прошивка и память Arduino v3 0 CH340G

Стандартный вариант платы Arduino Nano, работающий на микросхеме ATmega328P, можно прошить исключительно через программатор с SPI-интерфейсом.

Кроме того, производится модель AN, на которой дополнительно установлена микросхема CH340G. Преимущество данной сборки в том, что плата может быть прошита без подключения SPI-программатора через USB-порт. Это позволяет сделать встроенный загрузчик и преобразователь USB-COM.

При необходимости такую Nano-модель можно прошить и через SPI-интерфейс.

Чтобы загружать прошивки через mini-USB, потребуется:

  1. Подсоединить плату к ПК через USB. Система определит устройство как USB 2.0 SERIAL.
  2. Скачать и установить драйвер CH340G.

Как только драйвер будет установлен, система определит плату корректно и ее можно будет прошить через программатор. На плате загорится светодиод ON, а светодиод LED будет мигать.

Виды памяти

ATmega328P поддерживает 3 вида памяти:

  1. Flash. Она выступает в качестве постоянного запоминающего устройства.
  2. ОЗУ.
  3. EEPROM. Эта память также является постоянным запоминающим устройством, но ее можно перепрограммировать.

В микроконтроллере от Atmel 32 Кб Flash-памяти (свободно 30 Кб, т. к. 2 Кб занято загрузчиком), 2 Кб ОЗУ и 1 Кб EEPROM.

Фьюзы (Pro)

Фьюзы (фьюз-биты) являются низкоуровневыми настройками микроконтроллера, которые хранятся в специальном месте в памяти и могут быть изменены только при помощи ISP программатора. Это такие настройки как выбор источника тактирования, размер области памяти под загрузчик, настройка отсечки по напряжению и прочее. Фьюз-биты собраны по 8 штук в байты (т.н. байты конфигурации), как типичный регистр микроконтроллера AVR. Таких байтов может быть несколько, они называются low fuses, high fuses, extended fuses. Для конфигурации байтов рекомендуется использовать калькулятор фьюзов (например, вот такой), в котором просто ставятся галочки на нужных битах, и на выходе получается готовый байт в hex виде. Рассмотрим на примере ATmega328p:

Важный момент: в AVR биты у нас инверсные, то есть 1 это выкл, 0 это вкл. Расставляя галочки в калькуляторе, мы формируем байт, галочка стоит – бит включен, но в результирующем байте включенные биты являются нулями. Об этом стоит задумываться при ручном составлении фьюз-байта, при использовании калькулятора можете об этом даже не вспоминать. Что позволяют настроить биты?

  • CKSEL0CKSEL3 – выбор источника и частоты тактирования (уточняй в даташите на свой МК, какая конфигурация за что отвечает)
  • SUT0SUT1 – задержка старта МК после перезагрузки
  • CKOUT – дублирование тактирования на один из пинов (см. в даташите на какой)
  • CKDIV8 – делит тактовую частоту на 8
  • BOOTRST – если включен, МК запускается с загрузчика
  • BOOTSZ0BOOTSZ1 – задаёт размер сектора загрузчика
  • EESAVE – защита EEPROM от стирания во время выполнения полной очистки чипа
  • WDTON – если включить, то Watchdog будет принудительно включен без возможности отключения
  • SPIEN – опасный бит, при его отключении пропадает возможность прошивки через ISP, и возможность выключить этот бит в том числе*
  • DWEN – вкл/выкл отладочный интерфейс DebugWire. На других моделях бывает и JTAG, и его бит – JTAGEN
  • BODLEVEL0BODLEVEL3 – настройка контроля напряжения (МК сбросится при падении ниже установленного напряжения)

* – прошивка возможна при помощи высоковольтного программатора

Элементы платы

Arduino Nano состоит из множества элементов, в числе которых:

  • микросхемы;
  • пассивные элементы (резисторы, конденсаторы, диоды);
  • разъемы;
  • регуляторы.

Микросхема платы FT232R

Микросхема позволяет подключать плату через USB. Чип, установленный в AN, не может работать напрямую с USB-интерфейсом, поэтому FT232R преобразует его в UART-интерфейс.

Сердце платформы — микроконтроллер ATmega328P

ATmega328P — главный элемент управления платой. В него загружается написанный программистом скетч, и контроллер рассылает команды различным элементам платы. Например, микроконтроллер заставляет диоды мигать, реле — переключаться, а пьезоэлемент — издавать звуки.

Светодиодная индикация

В плату встроено 4 светодиода, у каждого из которых свое назначение:

  1. RX- и TX-светодиоды мигают, когда происходит передача данных по UART.
  2. L-диод зажигается, когда на него подается высокий уровень сигнала, и гасится при низком уровне.
  3. ON-светодиод горит при наличии питания на плате.

Дополнительно практически на любой пин микроконтроллера можно завести другие светодиоды, 7-сегментные индикаторы или даже дисплеи.

Разъем mini-USB

С помощью разъема mini-USB плату можно подключить к персональному компьютеру. Также AN может получать через этот интерфейс питание от внешних источников.

Линейный понижающий регулятор напряжения 5 В

В качестве регулятора используется микросхема LM1117MPX-5.0. Она обеспечивает преобразование сигнала питания AN в сигнал питания микроконтроллера ATmega и других логических элементов, которые не поддерживают питание более 5 В. Например, элементы транзисторно-транзисторной логики (ТТЛ) запитываются от сигнала такой величины.

ICSP-разъем для ATmega328

Этот интерфейс позволяет загружать прошивку в микроконтроллер стандартным способом. Специальный шлейф одним концом подключается к программатору, подсоединенному к ПК, а другим — к ICSP-разъему.

Что такое протокол I2C и как он работает

Термин IIC расшифровывается как “Inter Integrated Circuits” и часто обозначается как I2C или даже как TWI (2-wire interface protocol), но во всех случаях за этими обозначениями скрывается один и тот же протокол. I2C представляет собой протокол синхронной связи – это значит что оба устройства, которые обмениваются информацией с помощью данного протокола должны использовать общий сигнал синхронизации. Поскольку в этом протоколе используются всего 2 линии (провода), то по одной из них должен передаваться сигнал синхронизации, а по другой – полезная информация.

Впервые протокол I2C был предложен фирмой Phillips. Протокол в самом простом случае соединяет с помощью 2-х линий 2 устройства, одно из устройств должно быть ведущим, а другое – ведомым. Связь возможна только между ведущим и ведомым. Преимуществом протокола (интерфейса) I2C является то, что к одному ведущему можно подключить несколько ведомых.

Схема связи с помощью протокола I2C представлена на следующем рисунке.

Назначение линий данного интерфейса:

  • Serial Clock (SCL): по ней передается общий сигнал синхронизации, генерируемый ведущим устройством (master);
  • Serial Data (SDA): по ней осуществляется передача данных между ведущим и ведомым.

В любой момент времени только ведущий может инициировать процесс обмена данными. Поскольку в этом протоколе допускается несколько ведомых, то ведущий должен обращаться к ним, используя различные адреса. То есть только ведомый с заданным (указанным) адресом должен отвечать на сигнал ведущего, а все остальные ведомые в это время должны «хранить молчание». Таким образом, мы можем использовать одну и ту же шину (линию) для обмена данными с несколькими устройствами.

Уровни напряжений для передаваемых сигналов в интерфейсе I2C жестко не определены. В этом плане I2C является достаточно гибким, то есть если устройство запитывается от напряжения 5v, оно для связи с помощью протокола I2C может использовать уровень 5v, а если устройство запитывается от напряжения 3.3v, то оно для связи с помощью протокола I2C может использовать уровень 3v. Но что делать если с помощью данного протокола необходимо связать между собой устройства, работающие от различных питающих напряжений? В этом случае используются преобразователи/переключатели напряжения (voltage shifters).

Существует несколько условий для осуществления передачи данных в протоколе I2C. Инициализация передачи начинается с падения уровня на линии SDA, которое определяется как условие для начала передачи (‘START’ condition) на представленной ниже диаграмме. Как видно из этого рисунка, в то время как на линии SDA происходит падение уровня, в это же самое время на линии SCL ведущий поддерживает напряжение высокого уровня (high).

То есть, как следует из рисунка, падение уровня на линии SDA является аппаратным триггером для условия начала передачи. После этого все устройства на этой шине переключаются в режим прослушивания.

Аналогичным образом, повышение уровня на линии SDA останавливает передачу данных, что на представленной диаграмме обозначено как условие окончания передачи данных (‘STOP’ condition). В это же самое время ведущим на линии SCL поддерживается напряжение высокого уровня (high).

На следующем рисунке представлена структура адреса ведомого в протоколе I2C.

Бит R/W показывает направление передачи следующих за ним байт, если он установлен в HIGH – это значит что будет передавать ведомый (slave), а если он установлен в low – это значит что будет передавать ведущий (master).

Каждый бит передается в своем временном цикле, то есть нужно 8 временных циклов чтобы передать байт информации. После каждого переданного или принятого байта 9-й временной цикл используется для подтверждения/не подтверждения (ACK/NACK) приема информации. Этот бит подтверждения (ACK bit) формируется либо ведомым, либо ведущим в зависимости от ситуации. Для подтверждения приема информации (ACK) на линии SDA ведущим или ведомым устанавливается низкий уровень (low) в 9 временном цикле, в противном случае происходит не подтверждение приема информации (NACK).

На следующем рисунке представлена структура передаваемого сообщения в протоколе I2C.

Особенности установки драйверов

При установке драйверов для Arduino Nano на Windows OS система обнаружит необходимый софт автоматически, если при этом использовался установочный файл с официального сайта Arduino.

Если же драйверы не были обнаружены и установлены системой, необходимо:

  1. Открыть панель управления.
  2. Перейти в раздел «Система и безопасность».
  3. Попасть во вкладку «Система».
  4. Открыть диспетчер устройств.
  5. Открыть вкладку с COM- и LPT-портами.
  6. Если во вкладке нет порта FT232R USB UART или раздела с COM- и LPT-разъемами, перейти во вкладку «Другие устройства» и зайти в раздел «Неизвестное устройство».
  7. Кликнуть ПКМ на FT232R USB UART.
  8. Выбрать «Обновить драйверы».
  9. Нажать «Выполнить поиск драйверов на компьютере».
  10. Выбрать FTDI USB Drivers в папке Drivers от Arduino.

Если все действия выполнены правильно, то система сама завершит установку программного обеспечения для AN.

Интерфейсы связи

Arduino Nano поддерживает интерфейс I2C для связи с различными устройствами и периферией. Один из часто встречающихся способов применения – это связь с дисплеем через шину I2C. Благодаря особой технологии вы можете выводить наборы символов и данных на дисплей, используя всего лишь 2 пина, в Нано это пины D4 SDA) и D5 (SCL).

На официальном сайте есть специальная библиотека для работы с ним. При написании программ не забудьте подключить её директивой:

#include SPI.h

Теперь можно организовывать систему связи.

Запуск Arduino Nano

Чтобы начать работать с платой, необходимо подключить ее через USB к ПК. Через этот же порт будет поступать сигнал питания. Как только оно будет подведено к плате, загорится индикаторный светодиод синего цвета (в модели v.2.x он находится в нижней части платы, в модели v.3.x — в верхней).

Настройка Arduino

Чтобы настроить плату для работы с написанным кодом, нужно в среде программирования:

  • зайти в Tools;
  • перейти в Board;
  • выбрать пункт Arduino Duemilanove or Nano w/ *модель микроконтроллера* (для v.2.x — ATmega168, для v.3.x — ATmega328);
  • перейти в Tools;
  • зайти в Serial Port;
  • нажать Upload.

После нажатия кнопки Upload микроконтроллер сбросится, а новый скетч будет загружен.

Если появятся какие-либо проблемы при прошивке, нужно зайти в раздел «Устранение неполадок» и изучить методы их решения.

Резюмируя

Теперь по сути дела: датчики, их куча кучная, измерять можно ну просто всё, что вообще измеряется. Электроника: напряжение, ток, сопротивление, работа с переменным током, поля. Параметры микроклимата: температура, влажность, давление, содержание газов, скорость ветра, освещенность, что угодно. Интересных модулей тоже очень много: Bluetooth, сотовая связь, GPS, дисплеи различных типов и размеров, датчики присутствия, как ИК, так и микроволновые, модули для беспроводной связи ардуинок и многое другое.

Можно управлять абсолютно любой железкой, которая выполняет свою функцию просто при подаче питания: лампочка, светодиодная лента, электронагреватель, мотор или любой электропривод, электромагнит, соленоид-толкатель, и это все с любым напряжением питания. Но тут нужно кое что понять: Ардуино (точнее микроконтроллер) – логическое устройство, то есть по-хорошему она должна только отдавать команды другим устройствам, или принимать их от них. Это я к тому, что напрямую от ардуино не работают ни лампочки, ни моторчики, ни нагреватели, ни-хуче-го. Максимум – светодиод. С пониманием этого идём дальше. Чтобы ардуино включила или выключила (подала питание) на другое устройство, нужно устройство – посредник, например реле или транзистор. Ардуино управляет реле, а реле в свою очередь включает любую нужную нагрузку с любым напряжением питания и все такое, подробнее об этом поговорим отдельно.

Как суть всего выше написанного – возможности Ардуино по подключению и управлению различными железками практически безграничны, можно воплотить любую идею, даже самую безумную. Датчики что то измеряют, исполнительные устройства что то контролируют, в это же время ведётся отсылка данных куда-нибудь, что-то отображается на дисплее и контролируется при помощи кнопок. Романтика!

У меня в каталоге ссылок на Ардуино-компоненты можно найти практически все существующие датчики, модули и прочие железки для Ардуино, и практически у каждого есть ссылка на статью с примером и библиотекой. Пользуйтесь!

Способы программирования

Запрограммировать плату можно с помощью как рукописного, так и графического кода.

Графический метод программирования заключается в применении плагина ArduBlock (поддерживает русский язык), который встраивается в Arduino IDE. Программа изначально оформляется в виде блок-схемы, а затем автоматически конвертируется в код Arduino IDE (подойдет для начинающих программистов).

Чтобы установить плагин Arduino IDE, следует:

  1. Установить среду программирования Arduino IDE (доступна на официальном сайте Arduino).
  2. Скачать плагин ArduBlock с сайта разработчиков.
  3. Переименовать скачанный файл в ardublock-all.
  4. Создать в разделе «Документы» папки Arduino, затем tools, ArduBlock и tool.
  5. В папку tool переместить скачанный и переименованный файл.

Чтобы работать с этим плагином, нужно:

  1. Запустить среду программирования.
  2. Зайти во вкладку «Инструменты».
  3. Нажать на раздел ArduBlock.

Под программированием платы подразумевают и способы загрузки прошивки в микроконтроллер. Самым популярным методом является внутрисхемное программирование (ISP), при котором ATmega прошивается через программатор, подключенный через SPI-интерфейс к плате и через USB-кабель к ПК. Этим же методом можно перепрошить AN.

Платы, использующие в составе микросхему CH340, могут прошиваться через USB.

Проверить работоспособность кода можно в таких программах, как:

  • Proteus;
  • AutoCAD 123D;
  • Tinkercad.

У всех утилит удобный графический интерфейс и большой набор компонентов. В «Протеусе» и AutoCAD можно проектировать печатные платы. Для работы с Tinkercad потребуются только браузер и устойчивое интернет-соединение, т. к. этот софт запускается онлайн.

Важные страницы

  • Набор GyverKIT – большой стартовый набор Arduino моей разработки, продаётся в России
  • Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress у проверенных продавцов
  • Подборка библиотек для Arduino, самых интересных и полезных, официальных и не очень
  • Полная документация по языку Ардуино, все встроенные функции и макросы, все доступные типы данных
  • Сборник полезных алгоритмов для написания скетчей: структура кода, таймеры, фильтры, парсинг данных
  • Видео уроки по программированию Arduino с канала “Заметки Ардуинщика” – одни из самых подробных в рунете
  • Поддержать автора за работу над уроками
  • Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту ([email protected])

5 / 5 ( 16 голосов )

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

Реализовывать проекты на AN удобно из-за наличия библиотек, упрощающих написание кода.

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

Запитать LED-диод можно, например, с помощью пина 13 через ограничительный резистор на 220 Ом. Чтобы этим диодом мигать, следует написать такой код:

1 2 3 4 5 6 7 8 9 10void setup() { // инициализация элементов кода (аналог int main() в C) pinMode(13, OUTPUT); // объявление пина 13 как выхода } void loop() { // бесконечный цикл (аналог while (1) в C) digitalWrite(13, HIGH); // включение LED-диода delay(1000); // обеспечение мигания с частотой 1 Гц digitalWrite(13, LOW); // выключение LED-диода delay(1000); // обеспечение мигания с частотой 1 Гц }

void setup() { // инициализация элементов кода (аналог int main() в C) pinMode(13, OUTPUT); // объявление пина 13 как выхода } void loop() { // бесконечный цикл (аналог while (1) в C) digitalWrite(13, HIGH); // включение LED-диода delay(1000); // обеспечение мигания с частотой 1 Гц digitalWrite(13, LOW); // выключение LED-диода delay(1000); // обеспечение мигания с частотой 1 Гц }
Для создания пиксельного изображения, где пиксель — это 1 диод, используется адресная лента WS2812.

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

LCD 1602 — это монохромный программируемый дисплей. Для его подключения к плате нужно написать такой скетч:

1 2 3 4 5 6 7 8 9 10 11 12#include LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup(){ lcd.init(); // инициализация экрана lcd.backlight(); // активация подсветки lcd.setCursor(0,0); // установка курсора в начало первой строки lcd.print(«text»); // набор текста на первой строке lcd.setCursor(0,1); // установка курсора в начало второй строки lcd.print(«text»); // набор текста на второй строке }

#include LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup(){ lcd.init(); // инициализация экрана lcd.backlight(); // активация подсветки lcd.setCursor(0,0); // установка курсора в начало первой строки lcd.print(«text»); // набор текста на первой строке lcd.setCursor(0,1); // установка курсора в начало второй строки lcd.print(«text»); // набор текста на второй строке }

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

NRF24L01 — радио-модуль, который часто используется для создания интернета вещей. Он заводится на плату следующим образом:

Пин модуляPinout платы
GNDGND
VCC3.3 В
CED9
CSND10
SCKD13
MOSID11
MISOD12
IRQНе подключается

Объяснение скетча для мастера

Основная часть кода как для ведущего, так и для ведомых устройств — это то, что я называю логическим кодом мигания. Чтобы мигнуть светодиодом 13 на Ардуино, мы должны сделать следующее:

  • Добавим глобальные переменные byte i2c_rcv, int time_start, stat_LED и byte value_pot в верхней части нашего скетча
  • Инициализируйте значения глобальных переменных внутри функции setup()
  • Инициализируйте контакт 13 Arduino как выходной контакт внутри setup() с помощью pinMode()
  • Добавим код логики мигания внутри функции loop()

Библиотека Wire

Для использования встроенного интерфейса I2C Arduino мы будем использовать библиотеку Wire.

Эта библиотека поставляется в стандартной комплектации с Arduino IDE. Как и в других библиотеках Arduino, библиотека Wire имеет готовые I2C функции, чтобы сделать кодирование проще для нас.

Чтобы использовать функции библиотеки Wire, мы должны добавить его сначала в наш эскиз. В эскизе выше, у нас есть следующая строка в верхней части:

#include

После включения библиотеки мы можем использовать встроенные функции библиотеки.

Первое, что нужно сделать, это подключить устройство к шине I2C. Синтаксис для этого — Wire.begin(address). Адрес является необязательным для мастер-устройств. Итак, для эскиза мастера Arduino, мы просто добавляем код Wire.begin(); внутри setup().

Теперь мы переходим к циклу loop(). Наш код заставит Arduino прочитать значение потенциометра, подключенного к контакту A0, и сохранить его в переменной value_pot.

Отправка данных

После сохранения значения с пина A0 в переменную value_pot, мы можем отправить значение по I2C. Отправка данных по I2C включает в себя три функции:

  • Wire.beginTransmission()
  • Wire.write()
  • Wire.endTransmission()

Wire.beginTransmission()

Мы инициируем команду отправки, сначала информируя устройства на шине о том, что мы будем отправлять данные.

Для этого мы вызываем функцию Wire.beginTransmission(address). Адрес — это I2C-адрес ведомого прибора, который будет принимать данные. Эта функция делает две вещи:

  1. Она информирует шину о том, что мы будем посылать данные.
  2. Он информирует предполагаемого получателя о том, что данные готовы к получению.

Wire.write()

А затем мы отправим значение переменной value_to_send с помощью функции Wire.write(value).

Wire.endTransmission()

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

Наше ведущее устройство также должно получить положение потенциометра от ведомого устройства. Мы делаем это с помощью Wire.requestFrom(), Wire.available() и Wire.read().

Wire.requestFrom()

Полным синтаксисом запроса данных от ведомого устройства является Wire.requestFrom(адрес, количество).

Адрес — это I2C-адрес ведомого устройства, от которого мы должны получить данные, а количество — это количество байтов, которое нам нужно. Для нашего проекта, адрес ведомого устройства 0x08 и нам нужен один байт.

Внутри loop() мы используем Wire.requestFrom(0x08, 1); для запроса одного байта данных от ведомого устройства 0x08.

После выдачи команды Wire.requestFrom(0x08, 1), за ней должна следовать команда чтения для получения ответа от шины I2C.

Write.available()

Сначала мы проверяем, есть ли данные на шине. Это делается с помощью функции Write.available() внутри условного оператора if(). Функция Write.available() возвращает количество байт, ожидающих чтения.

Wire.read();

Для получения доступных данных мы используем функцию Wire.read() и сохраняем возвращаемое значение в переменную i2c_rcv. Каждый вызов функции Wire.read() получает только один байт данных из шины I2C.

Популярные шилды для Arduino Nano

Шилдом называется плата-дополнение.

К популярным шилдам для модели Nano относятся:

  • Nano Uno Shield: расширяет AN до варианта Uno;
  • Arduino Motor: позволяет подключать к плате двигатели (например, с помощью драйвера DRV8825 можно подключить шаговый двигатель и собрать свой автомобиль);
  • Arduino Sensor: шилд для подключения любых модулей (например, драйвера, объектом управления которого является механическая рука).

Рейтинг
( 1 оценка, среднее 4 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]