В уроке мы покажем вам, как сделать свою собственную плату Arduino Uno своими руками, используя микроконтроллер ATmega328p IC. В итоге вы сможете понимать как в дальнейшем делать аналоги любых плат, плюс создавать свои. Может быть вы даже откроете свою компанию по производству плат и микроконтроллеров.
Так как Ардуино является платформой с открытым исходным кодом, довольно легко узнать о внутренностях и деталях всего того, что делает Arduino тем, чем она является. Таким образом, в этом уроке мы рассмотрим схему Arduino Uno, немного изменим ее в соответствии с нашими потребностями, изготовим под нее печатную плату и припаяем необходимые компоненты для создания финального продукта.
Мы не будем использовать какие-либо SMD-компоненты для создания своей версии Arduino Uno, потому что не у всех есть паяльная станция, а иногда найти SMD-компоненты очень сложно. Кроме того, наш метод в большинстве случаев дешевле, чем компоненты SMD. Для тех кто, только начинает разбираться в электронике — технологию поверхностного монтажа печатных плат также называют ТМП (технология монтажа на поверхность), SMT (англ. surface mount technology) и SMD
-технология (от англ. surface mounted device — прибор, монтируемый на поверхность), а
компоненты
для поверхностного монтажа также называют «чип-компонентами».
Прошивка и память Arduino v3 0 CH340G
Стандартный вариант платы Arduino Nano, работающий на микросхеме ATmega328P, можно прошить исключительно через программатор с SPI-интерфейсом.
Кроме того, производится модель AN, на которой дополнительно установлена микросхема CH340G. Преимущество данной сборки в том, что плата может быть прошита без подключения SPI-программатора через USB-порт. Это позволяет сделать встроенный загрузчик и преобразователь USB-COM.
При необходимости такую Nano-модель можно прошить и через SPI-интерфейс.
Чтобы загружать прошивки через mini-USB, потребуется:
- Подсоединить плату к ПК через USB. Система определит устройство как USB 2.0 SERIAL.
- Скачать и установить драйвер CH340G.
Как только драйвер будет установлен, система определит плату корректно и ее можно будет прошить через программатор. На плате загорится светодиод ON, а светодиод LED будет мигать.
Виды памяти
ATmega328P поддерживает 3 вида памяти:
- Flash. Она выступает в качестве постоянного запоминающего устройства.
- ОЗУ.
- EEPROM. Эта память также является постоянным запоминающим устройством, но ее можно перепрограммировать.
В микроконтроллере от Atmel 32 Кб Flash-памяти (свободно 30 Кб, т. к. 2 Кб занято загрузчиком), 2 Кб ОЗУ и 1 Кб EEPROM.
Особенности программирования
Написание кода для Arduino Uno осуществляется в среде программирования Arduino IDE. Ее можно скачать на официальном сайте Arduino Software. Интерфейс программы полностью переведен на русский язык. После установки Arduino IDE нужно в настройках выбрать необходимую платформу.
Для этого необходимо выполнить следующий алгоритм действий:
- В верхнем меню найти меню «Инструменты».
- Открыть вкладку «Плата».
- Из предложенного списка нужно выбрать Arduino Uno.
После настройки среды программирования пользователь может создать новый проект, писать и компилировать код. Загружать программу в плату необходимо при помощи USB-порта. Для этого необходимо подсоединить ПК к плате и нажать кнопку «Загрузить». Для экономии времени можно загрузить дополнительные библиотеки с готовыми программами для Arduino IDE.
Примеры проектов с Arduino Nano
Реализовывать проекты на AN удобно из-за наличия библиотек, упрощающих написание кода.
Подключение светодиодов к Arduino Nano
Запитать LED-диод можно, например, с помощью пина 13 через ограничительный резистор на 220 Ом. Чтобы этим диодом мигать, следует написать такой код:
1 2 3 4 5 6 7 8 9 10 | 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 Гц} |
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
|
#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 платы GND GND VCC 3.3 В CE D9 CSN D10 SCK D13 MOSI D11 MISO D12 IRQ Не подключается
Выводы
Макетные платы breadboard оптимальны для создания прототипов и цифровых схем не очень высокой сложности. В своей практике их часто используют как новички, познающие основы схемотехники, так и опытные профессионалы ввиду простоты монтажа и достаточно высокого качества соединения рабочих контактов. С помощью таких плат можно быстро и без лишней пайки создать прототип, протестировать его и затем уже собрать устройство с более надежным вариантом соединения.
Несмотря на большое количество плюсов, у макетных плат есть и минусы. Они не позволяют сделать надежное устройство, эксплуатируемое в сложных условиях. Они не предназначены для сборки аналоговых схем, с высокой чувствительностью к величине сопротивления, т.к. сопротивление в месте контакта завсит от многих факторов и может меняться. Платы нельзя подключать к линии с высоким напряжением. Наконец, такие платы тоже стоят денег – монтажные платы с пайкой обойдутся дешевле.
В любом случае, для первых проектов у ардуинщика каких-то альтернатив нет. Кроме того, подключение макетной платы способствует развитию абстрактного мышления – а это никогда не бывает лишним.
Основные характеристики
Плата Arduino Uno версии R3 обладает следующими характеристиками:
- Максимальная величина выходного тока пина с напряжением 5V: 0,8 А.
- Тактовая частота кварцевого процессора: 16 МГц.
- Количество аналоговых и цифровых портов ввода-вывода: 20.
- Число портов, поддерживающих широтно-импульсную модуляцию: 6.
- Разрядность аналого-цифрового преобразователя: 10 бит.
- Максимально допустимая величина тока с пина ввода-вывода: 0,04 А.
- ОЗУ микроконтроллера: 2 КБ.
- Флэш-память: 32 КБ (0.5 КБ которых отведены под bootloader).
- Размерные параметры устройства: 6,9×5,3 см.
- Допустимое входное напряжение на разъеме питания: 7-12 В.
- Электрически стираемое перепрограммируемое ПЗУ EEPROM: 1 кб.
- Количество встроенных светодиодов: 1 (расположен на 13 порту).
Для платы разрабатываются дополнительные модификации, повышающие ее технические характеристики. Последний пакет обновлений был выпущен 15 марта 2022 г.
Введение
Робот — это машина, которая способна принимать информацию из внешней среды с помощью системы датчиков, самостоятельно обрабатывать ее и менять характер своих действий в соответствии с этим. Самое главное все эти операции должны происходить без участия человека. Именно по этой причине телеуправляемая модель, даже если она конструктивно сложна и имеет антропоморфный вид, не может считаться роботом, в то время как простой термостат или даже плавкий предохранитель в этом смысле являются простейшими роботами.
Конструирование робототехнической системы — это многоплановая задача, требующая знаний по широкому кругу научных и технических вопросов. Изготовление электромеханических исполнительных узлов, например, ходовой части робота, потребует знаний по общей механике, электротехнике. Создание алгоритма действий для робототехнической системы, требует знаний по информатике, в первую очередь навыков программирования. Для получения информации из внешней среды роботу необходимы различные датчики, использование которых потребует знания физических принципов работы этих датчиков. Создание всей системы в целом невозможно без знания электроники. Таким образом, процесс создания робототехнической системы потребует в процессе работы получения большого объема информации по различным естественно научным и физико-математическим дисциплинам, выходящего далеко за пределы объема школьной программы.
В настоящее время существует несколько основных путей позволяющих приступить к воплощению робототехнической системы. Первый использование готовых наборов для конструирования роботов, такие наборы изготовляет известный производитель конструкторов для детей фирма Lego. Они содержат все необходимые компоненты для изготовления робота: блок микроконтроллера, электродвигатели, датчики. Несомненное достоинство этого пути в том, что сконструировать робота на основе готового набора можно просто и быстро.
Все необходимое программное обеспечение прилагается к роботу и имеет интуитивно понятный интерфейс. Однако стоимость таких наборов неоправданно высока, за не слишком большой набор датчиков и исполнительных механизмов, а также за набор стандартных пластмассовых деталей придется отдать весьма значительную сумму. Таким образом, подобные конструкторы лучше всего подходят для младшей возрастной группы. Если в кружке в основном занимаются старшеклассники, то разумнее средства отпускаемы на оснащение кружка технического творчества, пустить на приобретение измерительных приборов, инструментов, материалов и комплектующих, а не на приобретение подобных наборов.
Второй путь это создание полностью оригинальной робототехнической системы, используя выпускаемые промышленностью микроконтроллеры, дискретные радиоэлементы, электродвигатели и т.п.. Действуя таким путем можно получить на выходе устройство, не уступающее по своим функциональным возможностям устройству, изготовленному в заводских условиях. Правда это потребует досконального знания выбранного микроконтроллера и Ассемблера специфичного для данного микроконтроллера. И это не говоря о наличии хотя бы минимального станочного парка, для обслуживания которого нужны специалисты с профильным образованием. В условиях кружка технического творчества этот путь мало реализуем, во всяком случае, если кружок только приступает к изучению вопросов робототехники.
Кроме приведенных выше вариантов, существует и третий путь – использование вычислительной платформы Arduino. Ее основой является специальная плата с микроконтроллером, а также специализированная среда разработки Wiring, созданная на основе языка C++.
Программное обеспечение полностью бесплатное, его можно скачать с официального сайта производителя. Имеются версии для всех основных операционных систем Windows, Linux, MacOS. При разработке программной части комплекса в данной среде от нас скрываются многие рутинные операции, что упрощает разработку. Однако с другой стороны программа пишется на языке высокого уровня, по этому при компиляции в машинные коды, полученная программа не будет оптимальной по размеру и времени выполнения.
Иными словами программа, написанная на языке Ассемблер, будет занимать места меньше, а выполняться быстрее. Если конструируется учебный робот, или бытовое электронное устройство, в большинстве случаев это не столь важно, в самом деле, если сигнализация среагирует на разбитое окно не через 0,1 с, а через 0,2 с, это ничего принципиально не изменит. Однако в ответственных случаях объем памяти требуемый для программы, и особенно, скорость работы могут стать критически важными, по этому среди специалистов по разработке аппаратно-программных комплексов отношение к данной платформе как минимум неоднозначное. Впрочем, в системах жизнеобеспечения, промышленных, авиационных и космических системах использовать Arduino никому и не придет в голову, к тому же любители крайне редко сталкиваются с необходимостью создания подобных систем.
В любительской же среде Arduino фактически стала стандартом. Применение законченных функциональных блоков Arduino очень сильно упрощает и, следовательно, ускоряет изготовление устройств. Нам важно как тот или иной блок реагирует на определенные сигналы и воздействия, но не принципиально его внутренне устройство. Фактически узлы Arduino являются, с точки зрения кибернетики, «черными ящиками». Однако, есть мнение, что Arduino – это своеобразный радиолюбительский фаст фуд, использование которого недостойно настоящего радиолюбителя.
На это можно возразить, что практически любое электронное устройство собирается из деталей заводского изготовления. В конечном счете, что такое любая микросхема, как не «черный ящик», нам важно как микросхема отвечает на тот или иной электронный сигнал, при этом ее внутреннее устройство, как правило, неизвестно, или мы его знаем только приблизительно. Если отрицать использование готовых узлов можно прийти к тому, что настоящий радиолюбитель должен сам делать радиолампы (как изготовить в кустарных условиях транзистор я не представляю) или, вообще, сначала осваивать добычу медной руды, выплавку метала и волочение проволоки.
В общем, Arduino позволяет с одной стороны изучить основы работы с микроконтроллерами и конструировать законченные устройства, с другой объем первоначальных знаний, необходимых для начала работы не слишком велик, и вполне доступен школьнику.
Что такое Arduino?
Arduino – это семейство электронных платформ, предназначенных для изучения проектирования электроники.
Arduino NANO – компактная платформа для прототипирования микроэлектронных устройств, предназначенная для использования с макетной платой. Функционал устройства во многом схож с Arduino UNO и отличается от нее лишь размерами платы и отсутствием отдельного разъема для питания.
Основа Arduino Nano – микроконтроллер на базе ATmega328, логическая микросхема для обработки данных с тактовой частотой 16 МГц, имеющая на борту 8 аналоговых и 14 цифровых контактов общего назначения, а также все необходимые интерфейсы: I2C, SPI и UART.
Установка драйверов
В Windows драйверы будут установлены автоматически, при подключении платы, если вы использовали установщик. Если вы загрузили и распаковали Zip архив или по какой-то причине плата неправильно распознана, выполните приведенную ниже процедуру.
Описание пинов/Распиновка Arduino Nano
Каждый из 14 цифровых выводов Nano, используя функции pinMode(), digitalWrite(), и digitalRead(), может настраиваться как вход или выход. Выводы работают при напряжении 5 В. Каждый вывод имеет нагрузочный резистор 20-50 кОм и может пропускать до 40 мА. Некоторые выводы имеют особые функции:
- Последовательная шина: 0 (RX) и 1 (TX). Выводы используются для получения (RX) и передачи (TX) данных TTL. Данные выводы подключены к соответствующим выводам микросхемы последовательной шины FTDI USB-to-TTL.
- Внешнее прерывание: 2 и 3. Данные выводы могут быть сконфигурированы на вызов прерывания либо на младшем значении, либо на переднем или заднем фронте, или при изменении значения. Подробная информация находится в описании функции attachInterrupt().
- ШИМ: 3, 5, 6, 9, 10, и 11. Любой из выводов обеспечивает ШИМ с разрешением 8 бит при помощи функции analogWrite().
- SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Посредством данных выводов осуществляется связь SPI, которая, хотя и поддерживается аппаратной частью, не включена в язык Arduino.
- LED: 13. Встроенный светодиод, подключенный к цифровому выводу 13. Если значение на выводе имеет высокий потенциал, то светодиод горит.
На платформе Nano установлены 8 аналоговых входов, каждый разрешением 10 бит (т.е. может принимать 1024 различных значения). Стандартно выводы имеют диапазон измерения до 5 В относительно земли, тем не менее имеется возможность изменить верхний предел посредством функции analogReference(). Некоторые выводы имеют дополнительные функции:
- I2C: A4 (SDA) и A5 (SCL). Посредством выводов осуществляется связь I2C (TWI). Для создания используется библиотека Wire.
Дополнительная пара выводов платформы:
- AREF. Опорное напряжение для аналоговых входов. Используется с функцией analogReference().
- Reset. Низкий уровень сигнала на выводе перезагружает микроконтроллер. Обычно применяется для подключения кнопки перезагрузки на плате расширения, закрывающей доступ к кнопке на самой плате Arduino.
Распиновка платы Arduino Nano
На рисунке указаны номера и назначения выводов Arduino Nano (вид со стороны, на которой расположен микроконтроллер Atmega328):
Расшифровка цвета:
– серый цвет – физический пин микроконтроллера Atmega328;
– светло серый цвет (PD0, PD1 и т.д.) – номер порта микроконтроллера, который доступен из программ на ассемблере;
– зеленый цвет (ADC0 и т.д.) – номера аналогивых выводов;
– голубой цвет – пины портов UART и SPI.
Назначение и обозначения выводов:
USB – USB-порт, предназначенный для подключения ардуины к компьютеру через USB-кабель (нужен Mini-B USB разъем).
VIN – сюда может подается питание от внешнего источника питания на 7-12 В (блок питания покупается отдельно). Напряжение будет подаваться на стабилизатор и понижаться до 5 В. Поэтому оптимально подавать на этот пин около 9 В.
5V – через этот пин также можно запитывать плату от источника питания на 5 вольт, однако напряжение должно быть более-менее стабильным, поскольку оно подается непосредственно на микроконтроллер (стабилизатор не задействован), и поэтому высокое напряжение может убить основной микроконтроллер.
3.3V – на этом пине будет висеть напряжение 3.3 В, которое формируется от внутреннего стабилизатора платы. Этот пин нужен для подключения некоторых внешних устройств, которым для работы требуется 3.3 В – обычно это всякие ЖК-дисплеи. Однако максимальный ток вывода при этом не должны превышать 50 мА.
GND – земля (Ground Pin).
AREF – опорное напряжение для аналоговых входов. Используется по необходимости (настраивается с помощью analogReference()).
IOREF – позволяет узнать рабочее напряжение микроконтроллера. Используется редка. На китайских платах отсутствует вовсе.
Reset – выполняет сброс микроконтроллера, подать низкий уровень на этот вход.
SDA, SCL – пины интерфейса TWI/I2C.
D0…D13 – цифровые входы/выходы. На вывод D13 висит встроенный светодиод, который загорается, если на вывод D13 подан уровень HIGH.
0 (RX), 1 (TX) – выводы порта UART (последовательный порт Serial).
A1…A5 – аналоговые входы (могут использоваться и в качестве цифровых).
Внешний вид платы Arduino Nano с подписанными выводами:
Здесь:
RX+TX LEDs – светодиоды – моргают, когда передаются данные через последовательный порт Serial UART (пины RX и TX).
Reset Button – кнопка для перезапуска микроконтроллера;
(остальные обозначения смотри выше)
FTDI USB chip – микросхема FTDI FT323RL, которая используется для связи ардуины с компьютером через USB-кабель. Со стороны ардуины это serial-интерфейс. На компьютер этот интерфейс будет доступен в виде виртуального COM-порта (должны быть установлены драйвера для чипа FTDI – обычно входят в состав IDE Arduino).
Схематически это выглядит так:
Номер пина, имя, тип и описание выводов:
GPIO
Начнем с пинов, которых больше всего, это GPIO, с англ. General Purpose Input-Output, входы-выходы общего назначения, на плате они подписаны как D0–D13 и A0–A5. По картинке распиновки они называются PD*, PB* и PC*, (вместо звёздочки – цифра) отмечены тёмно-бежевым цветом. Почему “официально” они называются PD/PB/PC? Потому что пины объединены в пОрты по несколько штук (не более 8), на примере Нано есть три порта: D, B и C, соответственно пины так и подписаны: PD3 – Port D 3 – третий выход порта D. Это цифровые пины, способные выдавать логический сигнал (0 или VCC) и считывать такой же логический сигнал. VCC это напряжение питания микроконтроллера, при обычном использовании обычной платы Ардуино это 5 Вольт, соответственно это 5 вольтовая логика: 0V – сигнал низкого уровня (LOW), 5V – высокого уровня (HIGH). Напряжение питания микроконтроллера играет очень большую роль, об этом мы ещё поговорим. GPIO имеют несколько режимов работы: вход (INPUT), выход (OUTPUT) и вход с подтяжкой к питанию встроенным в МК резистором на 20 кОм (INPUT_PULLUP). Подробнее о режимах поговорим в отдельном уроке.
Все GPIO пины в режиме входа могут принять сигнал с напряжением от 0 до 5 вольт (на самом деле до 5.5 вольт, согласно даташиту на микроконтроллер). Отрицательное напряжение или напряжение, превышающее 5.5 Вольт приведёт к выходу пина или даже самого МК из строя. Напряжение 0-2.5 вольта считается низким уровнем (LOW), 2.5-5.5 – высоким уровнем (HIGH). Если GPIO никуда не подключен, т.е. “висит в воздухе”, он принимает случайное напряжение, возникающее из за наводок от сети (провода 220в в стенах) и электромагнитных волн на разных частотах, которыми пронизан современный мир.
GPIO в режиме выхода (OUTPUT) являются транзисторными выходами микроконтроллера и могут выдать напряжение 0 или VCC (напряжение питания МК). Стоит отметить, что микроконтроллер – логическое, а не силовое устройство, его выходы рассчитаны на подачу сигналов другим железкам, а не на прямое их питание. Максимальный ток, который можно снять с GPIO выхода ардуино – 40 мА. Если попытаться снять больше – пин выйдет из строя (выгорит выходной транзистор и всё). Что такое 40 мА? Обычный 5мм одноцветный светодиод потребляет 20 мА, и это практически единственное, что можно питать напрямую от Ардуино. Также не стоит забывать о максимальном токе со всех пинов, он ограничен 200 мА, то есть не более 10 светодиодов можно запитать от платы на полную яркость…
Интерфейсы
Большинство GPIO имеют дополнительные возможности, так как к ним подключены выводы с других систем микроконтроллера, с ними вы уже знакомы из предыдущего урока:
- ADC (АЦП, аналогово-цифровой преобразователь) – зелёные подписи ADC* на распиновке
- UART (интерфейс связи) – голубые TXD и RXD на распиновке
- Выводы таймеров, они же ШИМ пины – светло-фиолетовые OC*A и OC*B, где * номер таймера
- SPI (интерфейс связи) – голубые SS, MOSI, MISO, SCK
- I2C (интерфейс связи) – голубые SDA и SCL
- INT (аппаратные прерывания) – розовые INT0 и INT1, а также PCINT* – PinChangeInterrupt
АЦП
ADC пины (с АЦП) помечены на плате буквой A. Да, пины A6 и A7 на плате Нано имеют только вход на АЦП и не являются GPIO пинами! АЦП – аналогово-цифровой преобразователь, позволяет измерять напряжение от 0 до VCC (напряжения питания МК) или опорного напряжения. На большинстве плат Ардуино разрядность АЦП составляет 10 бит (2^10 = 1024), что означает следующее: напряжение от 0 до опорного преобразуется в цифровую величину от 0 до 1023 (1024-1 так как отсчёт идёт с нуля). Опорное напряжение играет очень большую роль: при опорных 5V один шаг измерения АЦП составит 4.9 милливольта (0.00488 В), а при опорных 1.1В – 1.1 мВ (0.00107 В). Вся суть в точности, я думаю вы поняли. Если опорное напряжение установлено ниже напряжения питания МК, то оцифровывая напряжение выше опорного мы получим 1023. Подавая на АЦП напряжение выше 5.5 Вольт получим выгоревший порт. Подавать отрицательное напряжение также не рекомендуется. На ардуино есть несколько режимов опорного напряжения: оно может быть равно VCC (напряжению питания), 1.1V (от встроенного в МК стабилизатора) или получать значение с внешнего источника в пин Aref, таким образом можно настроить нужный диапазон и получить нужную точность. У других моделей Ардуино (например у Меги) есть и другие встроенные режимы. Опорное напряжение рекомендуется заводить на плату через резистор, например на 1 кОм. Для измерения напряжений выше 5.5 вольт необходимо использовать делитель напряжения на резисторах.
Таймеры (ШИМ)
Выводы таймеров: в микроконтроллере, помимо обычного вычислительного ядра, с которым мы работаем, находятся также “хардварные” счётчики, работающие параллельно со всем остальным железом. Эти счётчики также называют таймерами, хотя к таймерам они не имеют никакого отношения: счётчики буквально считают количество тиков, которые делает кварцевый генератор, задающий частоту работы для всей системы. Зная частоту генератора (обычно 16 МГц) можно с очень высокой точностью определять интервалы времени и делать что-то на этой основе. Какой нам прок от этих счётчиков? “Из коробки” под названием Arduino IDE мы имеем несколько готовых, основанных на таймерах инструментов (функции времени, задержек, измерения длин импульсов и другие).
В этой статье речь идёт о пинах и выходах, о них и поговорим: у каждого счётчика есть два выхода на GPIO. У нано (у МК ATmega328p) три счётчика, соответственно 6 выходов. Одной из возможностей счётчиков является генерация ШИМ сигнала, который и выводится на соответствующие GPIO. Для нано это D пины 5 и 6 (счётчик 0), 9 и 10 (таймер 1) и 3 и 11 (таймер 2). ШИМ сигналу посвящен отдельный урок, сейчас просто запомним, что с его помощью можно управлять яркостью светодиодов, скоростью вращения моторчиков, мощностью нагрева спиралей и многим другим. Но нужно помнить, что ограничение по току в 40 мА никуда не делось и питать от пинов ничего мощнее светодиодов нельзя.
Прерывания
Аппаратные прерывания позволяют процессору мгновенно переключаться на некий блок действий (функция обработчик прерывания) при изменении уровня сигнала на пине. Подробнее об этом, а также о PinChangeInterrupts поговорим в другом уроке.
Другие пины
- Пин 3.3V может быть использован для питания маломощных датчиков и модулей: максимальный ток, который можно снять с пина 3.3V составляет 150 мА, что с головой хватает для любых датчиков и модулей, кроме пожалуй радиомодулей nrf25L01.
- Пины GND – земля питания, все GND связаны между собой
- Пин 5V – питание от источника с напряжением до 5.5V (подробнее о питании смотри в следующем уроке)
- Пин Vin – питание от источника с напряжением 7-15V (подробнее о питании смотри в следующем уроке)
- RST – перезагрузка МК. Также этот пин выведен на кнопку
Описание задачи
При сборке собственных электронных устройств (управляемых роботов или станков с ЧПУ) оказывается, что расположение выводов на стандартных платах «Ардуино» не удовлетворяет техническим требованиям. Например, между контактами приходится прокладывать много проводов. Это снижает надежность работающей схемы, а также повышает ее стоимость.
Чтобы избавиться от проблемы, можно сделать собственный аналог Arduino (любой модели) с нужным расположением элементов.
Принципиальная схема платы Arduino Nano
Часть схемы возле микроконтроллера Atmega328P:
Часть схемы возле чипа FT323 (но на китайских платах в место него будет стоять CH340):
Стабилизатор питания:
Схема разъема ISCP (подробнее здесь ):
Схема всей платы Arduino Nano:
Схема Arduino Nano ISCP
Наконец, надо сказать о подключении программатора. Для программирования контроллеров Atmel, на котором собран модуль Arduino, используется интерфейс ICSP. Для Arduino Nano icsp распиновка выглядит выглядит следующим образом (см. верхнюю часть предыдущего рисунка):
- MISO (ведущий принимает от ведомого);
- SCK (тактовый импульс);
- MOSI (ведущий передает ведомому);
- RESET (сброс);
- GND (земля).
+5V (питание);
Первый пин 6-контактного разъема имеет в основании форму квадратика и нумеруется по часовой стрелке, если смотреть сверху. Чтобы не возникало сомнений по порядку нумерации выводов коннектора, ниже приводится фрагмент принципиальной схемы платы Ардуино:
Этот разъем подключается к программатору с интерфейсом SPI (интерфейс последовательного программирования контроллеров Atmel). Кроме того, прошивка контроллера может меняться из среды программирования через кабель USB, так что приобретать программатор становится необязательным (он нужен только в том случае, если отсутствует программа загрузчика).
О плате
Ардуино Нано – это аналог Arduino Uno, которая также работает на чипе ATmega328P, но отличается формфактором платы, которая в 2-2,5 раза меньше, чем Уно (53 х 69 мм). Размеры подобны пачке сигарет, и позволяют легко собирать сложные схемы навесным монтажом, но после стадии создания макета идёт сборка действующих экземпляров, а для этого лучше подходит как раз Нано.
Размер Arduino Nano: 19 x 43 мм
Сравнение плат Arduino Uno и Arduino Nano
Отличие такой миниатюрной платы, заключается в отсутствии вынесенного гнезда для внешнего питания, но вместо него с легкостью можно подключиться напрямую к пинам. В плате используется чип FTDI FT232RL для USB-Serial преобразования и примененяется mini-USB кабель для связи с ардуино вместо стандартного. Связь с различными устройствами обеспечивают UART, I2C и SPI интерфейсы.
В остальном, способы взаимодействия и характеристики чипов совпадают с базовой моделью Уно, которая больше подходит для экспериментов, чем для реальных проектов. Нет более насущной проблемы для любителя электроники, чем желание красиво и компактно оформить своё устройство.
Платформа имеет контакты в виде пинов, поэтому ее легко устанавливать на макетную плату. Arduino Nano используется там где важна компактность, а возможностей Mini либо не хватает, либо не хочется заниматься пайкой.
Описание элементов платы Arduino Nano V3
- USB Jack – разъем USB Mini-B для подключения устройств USB;
- Analog Reference Pin – для определения опорного напряжения АЦП;
- Ground – земля;
- Digital Pins (2-13) – цифровые выводы;
- TXD – пин передачи данных по UART;
- RXD – пин приема данных по UART;
- Reset Button – кнопка перезагрузки микроконтроллера;
- ISCP (In-Circuit Serial Programmer) – контакты для перепрограммирования платы;
- Microcontroller ATmega328P – микроконтроллер — главный элемент на плате;
- Analog Input Pins (A0-A7) – аналоговые входы;
- Vin – вход используется для подачи питания от внешнего источника;
- Ground Pins – земля;
- 5 Volt Power Pin – питание 5 В;
- 3 Volt Power Pin – питание 3.3 В;
- RST – вход для перезагрузки;
- SMD Crystal – кварцевый резонатор (жарг. «кварц») — прибор, в котором пьезоэлектрический эффект и явление механического резонанса используются для построения высокодобротного резонансного элемента электронной схемы;
- TX LED (White) – светодиод — индикатор отправления данных по UART;
- RX LED (Red) – светодиод — индикатор приёма данных по UART;
- Power LED (Blue) – светодиод — индикатор питания;
- Pin 13 LED (Wellow) – подключенный светодиод к 13-му пину.
Способы индикации
Для индикации, откладки и проверки правильности написания программного кода Arduino Uno используется встроенный светодиод. При подаче сигнала высокого уровня на контакт №13, светодиод включается, загораясь красным цветом. При подаче низкого сигнала устройство выключается. При обмене данных между платой и ПК светодиод мигает. Этот способ индикации позволяет быстро фиксировать и исправлять ошибки в программном коде.