Компоненты · 13 мин чтения

Распиновка Arduino Uno: цифровые, PWM, аналоговые пины и питание

Распиновка Arduino Uno в одной таблице: цифровые пины 0–13, PWM ~3, 5, 6, 9, 10, 11, аналоговые A0–A5, Vin, 5V, 3.3V, I2C, SPI, пины прерываний и предел 20 mA на пин.

Распиновка Arduino Uno — это 32 точки подключения на чёрных гнёздах вдоль двух длинных краёв платы: 14 цифровых пинов ввода-вывода (0–13), 6 из которых умеют выдавать PWM (~3, 5, 6, 9, 10, 11), 6 аналоговых входов (A0–A5) и пины питания, которые питают плату или подают питание на другие детали (Vin, 5V, 3.3V, GND, IOREF, AREF, RESET). У каждого пина есть основная задача, но у многих есть и вторая: A4 и A5 — это ещё и шина I2C, 10–13 образуют шину SPI, 2 и 3 — пины прерываний, а 0 и 1 — последовательная линия, по которой плата общается с компьютером.

Правильный выбор пина — это разница между проектом, который работает с первого раза, и часами отладки. С таблицами из этой статьи легко понять, почему PWM на пинах 9 и 10 перестаёт работать после подключения сервопривода, почему скетч не загружается при подключённом Bluetooth-модуле и почему горстка светодиодов может перегрузить плату. В конце есть тестовый скетч, который проверяет все типы пинов сразу, пример плана распределения пинов и различия в пинах между Uno R3 и R4.

Плата Arduino Uno R3 и её пины
Arduino Uno R3: цифровые пины (0–13) вдоль верхнего края, пины питания и аналоговые входы (A0–A5) вдоль нижнего края, разъём ICSP 2×3 на правом краю.

Схема пинов Arduino Uno: где какой пин?

Положи плату перед собой так, чтобы USB-разъём и гнездо питания были слева. На двух колодках вдоль верхнего края — цифровые пины; номера растут справа налево, так что крайний правый пин — 0 (RX), а крайний левый цифровой — 13. Вдоль нижнего края на левой колодке пины питания, на правой — аналоговые входы. Знак ~ (тильда) рядом с номером означает, что пин умеет выдавать PWM. Группа штырьков 2×3 на правом краю платы — это разъём ICSP.

КолодкаПины (слева направо)Назначение
Сверху слева (10 пинов)SCL, SDA, AREF, GND, 13, 12, ~11, ~10, ~9, 8Копия I2C, аналоговый опорный вход, SPI и цифровые пины
Сверху справа (8 пинов)7, ~6, ~5, 4, ~3, 2, TX→1, RX←0Цифровые пины, пины прерываний и последовательная линия
Снизу слева (8 пинов)Не используется (NC), IOREF, RESET, 3.3V, 5V, GND, GND, VinПины питания
Снизу справа (6 пинов)A0, A1, A2, A3, A4, A5Аналоговые входы (A4/A5 — ещё и I2C)
Правый край (2×3)1 MISO, 2 5V, 3 SCK, 4 MOSI, 5 RESET, 6 GNDРазъём программирования ICSP
ПараметрArduino Uno R3
МикроконтроллерATmega328P, 16 MHz
Рабочее (логическое) напряжение5 V
Входное напряжение (гнездо / Vin)Рекомендуется 7–12 V, предел 6–20 V
Цифровые входы-выходы14 пинов (D0–D13)
Выход PWM6 пинов: 3, 5, 6, 9, 10, 11
Аналоговый вход6 пинов (A0–A5), 10 бит (0–1023)
Ток на пинРекомендуется 20 mA, абсолютный максимум 40 mA
Суммарный ток (VCC/GND)200 mA
Ток пина 3.3VМаксимум 50 mA
Память32 КБ флеш-памяти (0,5 КБ загрузчик), 2 КБ SRAM, 1 КБ EEPROM

Большая таблица пинов: D0–D13 и A0–A5

ПинПортОсновная функцияДополнительная функцияПримечание
D0 (RX)PD0Цифровой ввод-выводUART RX (порт Serial)Подключён к USB-UART-преобразователю, лучше не занимать
D1 (TX)PD1Цифровой ввод-выводUART TX (порт Serial)Подключён к USB-UART-преобразователю, лучше не занимать
D2PD2Цифровой ввод-выводВнешнее прерывание INT0Кнопки, энкодеры, подсчёт оборотов
D3 ~PD3Цифровой ввод-вывод, PWM 490 HzВнешнее прерывание INT1, таймер Timer2PWM сбивается, пока играет tone()
D4PD4Цифровой ввод-вывод-Без доп. функций, свободен
D5 ~PD5Цифровой ввод-вывод, PWM 980 HzТаймер Timer0Тот же таймер, что у millis()
D6 ~PD6Цифровой ввод-вывод, PWM 980 HzТаймер Timer0Тот же таймер, что у millis()
D7PD7Цифровой ввод-вывод-Без доп. функций, свободен
D8PB0Цифровой ввод-вывод-Без доп. функций, свободен
D9 ~PB1Цифровой ввод-вывод, PWM 490 HzТаймер Timer1Библиотека Servo отключает его PWM
D10 ~PB2Цифровой ввод-вывод, PWM 490 HzSPI SS, таймер Timer1При работе с SPI должен оставаться выходом
D11 ~PB3Цифровой ввод-вывод, PWM 490 HzSPI MOSI, таймер Timer2Есть и на разъёме ICSP
D12PB4Цифровой ввод-выводЛиния SPI MISOЕсть и на разъёме ICSP
D13PB5Цифровой ввод-выводЛиния SPI SCKНа этом пине встроенный светодиод L
A0PC0Аналоговый входЦифровой 14-
A1PC1Аналоговый входЦифровой 15-
A2PC2Аналоговый входЦифровой 16-
A3PC3Аналоговый входЦифровой 17-
A4PC4Аналоговый входI2C SDA, цифровой 18Пока используется I2C, аналоговые измерения недоступны
A5PC5Аналоговый входI2C SCL, цифровой 19Пока используется I2C, аналоговые измерения недоступны
При необходимости аналоговые пины работают и как обычные цифровые: A0 = 14, A1 = 15 … A5 = 19. Можно написать pinMode(A2, OUTPUT), чтобы зажечь светодиод, или читать кнопку через digitalRead(A3), так что всего у Uno 20 цифровых пинов. Столбец «Порт» в таблице — настоящее имя пина внутри ATmega328P (цифровой 13 = PB5); оно пригодится, когда пишешь быстрый код с прямым доступом к портам. A6 и A7 есть только на платах вроде Nano и Pro Mini.

Как работают цифровые пины (0–13)?

Каждый цифровой пин настраивается как вход или выход функцией pinMode(). В режиме выхода digitalWrite(pin, HIGH) поднимает пин примерно до 5 V, а LOW опускает до 0 V. В режиме входа digitalRead() сравнивает напряжение с порогом: у ATmega328P при питании 5 V всё выше 3,0 V — гарантированный HIGH, всё ниже 1,5 V — гарантированный LOW, а промежуток между ними не определён. Поэтому выход датчика на 3,3 V обычно читается на Uno как HIGH; но выход Uno на 5 V нельзя подавать прямо на вход модуля на 3,3 V — между ними нужен преобразователь логических уровней.

Входной пин, ни к чему не подключённый, «висит в воздухе» и читает случайные HIGH и LOW, даже если просто поднести руку. Решение — притянуть пин резистором к определённому уровню: pinMode(pin, INPUT_PULLUP) включает резистор 20–50 kΩ внутри чипа, а кнопка ставится между пином и GND. Подробности — в статье Как подключить кнопку к Arduino. Пин 13 соединён со встроенным светодиодом L; на оригинальной R3 этот светодиод управляется через буфер на операционном усилителе, так что использовать пин как вход можно без проблем, но на некоторых клонах светодиод и его резистор висят прямо на пине и могут мешать чтению кнопки со встроенной подтяжкой.

Пины PWM (~3, 5, 6, 9, 10, 11) и таймеры

Uno не умеет выдавать настоящий аналоговый сигнал; вместо этого шесть пинов дают PWM — меандр, который очень быстро включается и выключается. Функцией analogWrite(pin, value) задаётся, какую часть периода сигнал включён, от 0 до 255: 0 — полностью выключен, 127 — примерно половина, 255 — полностью включён. Так управляют яркостью светодиода, скоростью мотора и вентилятора. Шесть пинов PWM попарно привязаны к трём аппаратным таймерам, и именно отсюда конфликты с некоторыми библиотеками. Идея PWM и расчёт коэффициента заполнения объяснены в статье Что такое PWM?

ТаймерПины PWMЧастотаКто использует этот таймер?
Timer0 (8 бит)5, 6Около 980 Hzmillis(), delay() и micros()
Timer1 (16 бит)9, 10Около 490 HzБиблиотека Servo
Timer2 (8 бит)3, 11Около 490 Hztone() и библиотеки вроде IRremote
Как только используется библиотека Servo, analogWrite() перестаёт работать на пинах 9 и 10, даже если сервопривод к ним не подключён. Пока зуммер играет через tone(), сбивается и PWM на 3 и 11. Если в проекте есть и сервопривод, и зуммер, безопасные пины PWM — 5 и 6. Поскольку PWM на этих двух пинах идёт от того же таймера, что и millis(), очень малые значения (0–10) могут держаться включёнными чуть дольше ожидаемого.

Аналоговые пины (A0–A5) и AREF

Аналоговые пины измеряют напряжение от 0 до 5 V с разрешением 10 бит, а analogRead() возвращает число от 0 до 1023. Один шаг — около 4,9 mV; чтобы перевести число в вольты, используй напряжение = значение × 5.0 / 1023, так что показание 512 означает примерно 2,5 V. Все шесть пинов по очереди используют один АЦП, а одно измерение занимает около 100 µs, что даёт примерно 10 000 измерений в секунду. Для точных результатов выходное сопротивление датчика не должно превышать 10 kΩ; если оно больше, измерения двух пинов подряд могут влиять друг на друга, и помогает отбросить первое измерение и взять второе. Чтобы измерять напряжения выше 5 V, подбери резисторы в калькуляторе делителя напряжения.

Пин AREF позволяет изменить верхнюю границу аналогового измерения. analogReference(DEFAULT) использует 5 V, analogReference(INTERNAL) — внутренний опорный источник чипа 1,1 V, а analogReference(EXTERNAL) — напряжение, поданное на пин AREF (0–5 V), как верх диапазона. С датчиком, который выдаёт 0–1 V, опорное 1,1 V уменьшает шаг примерно до 1,1 mV и делает измерение примерно в 4,5 раза точнее. К этим пинам подключают потенциометры, фоторезисторы и датчики влажности почвы; подробности аналого-цифрового преобразования — в статье об АЦП, а практический пример — в статье о потенциометре.

Если подаёшь на пин AREF внешнее напряжение, всегда вызывай analogReference(EXTERNAL) до первого analogRead(). Иначе внутренний опорный источник чипа и внешнее напряжение окажутся закорочены, и микроконтроллер может пострадать. И никогда не подавай на аналоговые пины больше 5 V или отрицательное напряжение.

Пины питания: Vin, 5V, 3.3V, GND, IOREF и RESET

ПинЧто делаетПределы и предостережения
VinВыдаёт напряжение с гнезда питания или питает плату от 7–12 VМинует защитный диод от переполюсовки, следи за полярностью
5VВыход 5 V от стабилизатора или USBПредохранитель 500 mA на USB; подавать только стабилизированные 5 V
3.3VВыход 3,3 V от встроенного стабилизатораМаксимум 50 mA; для небольших модулей вроде RC522
GNDОбщая земля (2 снизу, 1 сверху)Сюда должен приходить GND каждого внешнего источника
IOREFСообщает шилдам логическое напряжение платыНа Uno соединён с 5V, не для питания
RESETПерезапускает плату, если притянуть к LOWЕго используют кнопки сброса на шилдах
AREFВнешний опорный вход для аналоговых измерений0–5 V; сначала вызови analogReference(EXTERNAL)
NC (пин без подписи)На R3 зарезервирован на будущееНи к чему не подключён

Uno можно питать тремя способами. По USB плата берёт 5 V прямо от компьютера, а порт компьютера защищает самовосстанавливающийся предохранитель на 500 mA. Если подать 7–12 V через гнездо питания или Vin, встроенный стабилизатор понижает их до 5 V; если подключено и то и другое, плата автоматически переходит на внешний источник, как только Vin поднимается выше примерно 6,6 V. Стабилизатор превращает лишнее напряжение в тепло, поэтому при входе 12 V ток в несколько сотен mA с пина 5V быстро его нагревает. Самый здоровый подход — питать нагрузки вроде сервоприводов, моторов и светодиодных лент от отдельного источника и соединять только GND. Батарею и время работы поможет выбрать калькулятор времени работы от батареи, а обо всех способах питания читай в статье Как питать Arduino.

Никогда не подавай на пин 5V больше 5 V: стабилизатор при этом обходится, и всё, что выше 6 V, может уничтожить ATmega328P. Случайно подключённая к пину 5V батарейка на 9 V — один из самых частых способов, которыми новички убивают плату. Батарею всегда подключай к гнезду питания или к пину Vin.

Почему пины 0 и 1 лучше не занимать?

Пины 0 (RX) и 1 (TX) — единственный аппаратный последовательный порт ATmega328P, и на плате они через резисторы 1 kΩ соединены с микросхемой USB-UART-преобразователя (ATmega16U2). Компьютер использует эти два пина при загрузке кода и при отправке текста в монитор порта. Если к пину 0 подключена линия TX Bluetooth-модуля или любой другой сигнал, два источника борются за одну линию, и загрузка останавливается с ошибкой avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00 (нет синхронизации). Кроме того, пин 1 быстро переключается при каждом вызове Serial.print(), так что подключённые к нему светодиод или реле срабатывают случайно.

Поэтому не занимай 0 и 1, пока не закончатся другие пины. Если нужно подключить последовательный модуль, например HC-05, GPS или MP3-плеер, библиотека SoftwareSerial создаёт второй последовательный порт на двух других пинах. Скетч ниже подключает модуль к пинам 8 (RX) и 7 (TX); он передаёт модулю всё, что вводишь в мониторе порта, а компьютеру — всё, что присылает модуль. С модулями на логике 3,3 V, такими как HC-05, подключай выход TX Uno (пин 7) к пину RX модуля через делитель напряжения. Все способы решить проблемы с загрузкой — в статье Код не загружается в Arduino, а логика последовательной связи — в статье Последовательная связь UART.

C++ (Arduino IDE)
1#include <SoftwareSerial.h>
2
3SoftwareSerial moduleSerial(8, 7);   // RX = 8, TX = 7; 0 ve 1 boş kalır / 0 and 1 stay free
4
5void setup() {
6  Serial.begin(9600);                // USB üzerinden bilgisayar / computer over USB
7  moduleSerial.begin(9600);          // HC-05 veri modu hızı / HC-05 data mode baud rate
8  Serial.println(F("Seri kopru hazir / Serial bridge ready"));
9}
10
11void loop() {
12  if (moduleSerial.available()) {
13    Serial.write(moduleSerial.read());   // modülden bilgisayara / module to computer
14  }
15  if (Serial.available()) {
16    moduleSerial.write(Serial.read());   // bilgisayardan modüle / computer to module
17  }
18}

Пины связи: I2C (A4/A5), SPI (10–13) и пины прерываний (2, 3)

I2C позволяет подключить десятки устройств к одной шине всего по двум проводам (SDA и SCL); его используют LCD-дисплеи, OLED, модули часов RTC и датчики вроде BME280. На Uno SDA = A4, а SCL = A5. На платах R3 пины SDA и SCL рядом с AREF — не отдельная шина, они внутри соединены с A4 и A5, поэтому пока используется I2C, брать A4 и A5 для аналоговых измерений нельзя. Библиотека Wire по умолчанию работает на 100 kHz, а через Wire.setClock(400000) можно поднять частоту до 400 kHz. Адреса, подтягивающие резисторы и скетч I2C-сканера разобраны в статье Что такое I2C?, а практический пример — в статье Дисплей I2C LCD.

SPI быстрее, но требует больше проводов: MOSI = 11, MISO = 12, SCK = 13 и SS (CS) = 10. SPI используют модули SD-карт, RFID-считыватели и TFT-дисплеи. Несколько устройств могут делить шину: MOSI, MISO и SCK общие, а у каждого устройства свой пин CS. Важная деталь: пока SPI работает в режиме ведущего, пин 10 должен оставаться выходом; если сделать пин 10 входом и его притянет к LOW, ATmega328P сам переключится в режим ведомого, и SPI остановится. MISO, MOSI и SCK есть и на разъёме ICSP, и некоторые шилды берут SPI оттуда. Подробнее — в статьях Что такое SPI? и RFID RC522.

Прерывание позволяет мгновенно поймать изменение на пине, чем бы ни был занят loop() в этот момент. На Uno внешние прерывания есть только на пинах 2 (INT0) и 3 (INT1): пишется attachInterrupt(digitalPinToInterrupt(2), function, FALLING), а режим срабатывания может быть LOW, CHANGE, RISING или FALLING. На эти пины ставят энкодеры, датчики оборотов, датчики расхода воды и кнопки, нажатие которых нельзя пропустить. У остальных пинов тоже есть «прерывания по изменению пина» (PCINT), но пины одного порта делят одну функцию прерывания, и коду приходится выяснять, какой именно пин изменился. Правила и примеры — в статье Прерывания в Arduino.

ФункцияArduino UnoESP32 (DevKit)Raspberry Pi Pico
I2C SDA / SCLA4 / A5GPIO 21 / 22GP4 / GP5
SPI MOSI / MISO / SCK / CS11 / 12 / 13 / 10GPIO 23 / 19 / 18 / 5GP19 / GP16 / GP18 / GP17
UART TX / RX1 / 0GPIO 1 / 3 (подключены к USB)GP0 / GP1
Внешнее прерываниеТолько 2 и 3Все GPIOВсе GPIO
PWM6 пиновПочти все пины, способные работать на выходВсе GPIO
Аналоговый вход6 пинов, 10 битADC1: GPIO 32–39, 12 битGP26, GP27, GP28; 12 бит
Логический уровень5 V3,3 V (не выдерживает 5 V)3,3 V (не выдерживает 5 V)
Ток на пин20 mA (максимум 40 mA)Рекомендуется около 20 mA4 mA по умолчанию, максимум 12 mA

При переходе на ESP32 или Pico главное отличие — напряжение: обе платы работают на 3,3 V, и их пины не выдерживают 5 V, поэтому модулям на 5 V, которые на Uno подключаются напрямую, может понадобиться преобразователь уровней. Зато у этих плат прерывания и PWM есть почти на каждом пине, а шины I2C и SPI можно перенести на другие пины. Сравнение плат — в статье Arduino Uno или ESP32, карты пинов — в утилите распиновки, а сами платы описаны в статьях Что такое ESP32? и Что такое Raspberry Pi Pico?

Для чего нужен разъём ICSP?

ICSP (In-Circuit Serial Programming, внутрисхемное программирование) — разъём 2×3, через который микроконтроллер программируют напрямую по линиям SPI, без USB и загрузчика. ICSP на правом краю платы относится к ATmega328P, а маленький ICSP1 рядом с USB-разъёмом — к микросхеме USB-UART (ATmega16U2). В обычной работе его не трогают, но ICSP нужен, когда загрузчик повреждён, когда записываешь загрузчик в новый ATmega328P или загружаешь код программатором вроде USBasp. Если превратить вторую Uno в программатор с помощью примера ArduinoISP, пины 10, 11, 12 и 13 программатора идут к линиям RESET, MOSI, MISO и SCK целевой платы, а конденсатор 10 µF между RESET и GND на Uno-программаторе не даёт ей автоматически сбрасываться. Чтобы понять, не повреждена ли плата, загляни в статью Сгорел ли мой Arduino?

Пин ICSPСигналАналог на Uno
1MISOD12
2VCC (+5 V)5V
3SCKD13
4MOSID11
5RESETRESET
6GNDGND

20 mA на пин, 200 mA всего: пределы тока

Безопасный ток пина Uno — не больше 20 mA. Значение 40 mA из даташита ATmega328P — это абсолютный максимум, за которым чип может необратимо повредиться, а не рабочее значение. Суммарный ток через пины VCC и GND чипа не должен превышать 200 mA. Даташит ещё и делит пины на группы: при отдаче тока (HIGH) D0–D4 вместе с A0–A5 и D5–D13 между собой должны оставаться ниже 150 mA каждая; при приёме тока (LOW) группы D0–D4, D5–D13 и A0–A5 — каждая ниже 100 mA. Если питать красный светодиод от 5 V через резистор 220 Ω, ток равен (5 − 2) / 220 ≈ 13,6 mA. Десять одновременно горящих светодиодов дают 136 mA; это меньше 200 mA, но если все они в одной группе, получается очень близко к пределу группы в 150 mA. Если светодиоды подключены так, что горят при LOW на пине (резистор от 5V к пину), и большинство из них в одной группе, предел 100 mA превышается. Распредели светодиоды по группам или увеличь резистор до 330–470 Ω. Нужный резистор найдёшь в калькуляторе резистора для светодиода или в калькуляторе закона Ома.

  • Моторы: даже небольшой DC-мотор потребляет сотни mA и создаёт выбросы напряжения; используй драйвер мотора вроде L298N или транзистор.
  • Катушки реле: катушка реле на 5 V потребляет около 70–90 mA; используй модуль реле с транзистором и диодом.
  • Сервоприводы: сигнальный провод можно подключить к пину, но питание сервопривода должно идти от отдельного источника, а не от пина 5V; подробности в статье о сервоприводе.
  • Светодиодные ленты и мощные светодиоды: лентам на 12 V и светодиодам на 1 W нужен MOSFET с логическим уровнем управления.
  • Короткие замыкания: если соединить выход в состоянии HIGH прямо с GND, через пин пойдёт намного больше 40 mA, и он выйдет из строя навсегда.

Тестовый скетч: цифровые, PWM, аналоговые пины и прерывания вместе

  1. Подключи светодиод к пину 9 через резистор 220 Ω: длинная ножка к резистору, короткая к GND.
  2. Крайние выводы потенциометра подключи к 5V и GND, а средний — к A0.
  3. Кнопку поставь между пином 2 и GND; отдельный резистор не нужен, используется встроенная подтяжка.
  4. Загрузи скетч, открой монитор порта и выставь скорость 9600 бод.
  5. Покрути потенциометр: яркость светодиода на пине 9 меняется, встроенный светодиод L (пин 13) загорается, когда напряжение превышает 2,5 V, а счётчик увеличивается на единицу при каждом нажатии кнопки.
C++ (Arduino IDE)
1const byte BUTTON_PIN = 2;    // kesme pini INT0 / interrupt pin INT0
2const byte PWM_LED    = 9;    // ~9: PWM çıkışı / PWM output
3const byte STATUS_LED = 13;   // kart üzerindeki L LED'i / onboard L LED
4const byte POT_PIN    = A0;   // analog giriş / analog input
5
6volatile unsigned int pressCount = 0;   // ISR içinde değişir / changed inside the ISR
7
8void onButton() {
9  static unsigned long lastPressMs = 0;
10  unsigned long now = millis();
11  if (now - lastPressMs > 50) {         // 50 ms sıçrama filtresi / 50 ms debounce
12    pressCount++;
13    lastPressMs = now;
14  }
15}
16
17void setup() {
18  Serial.begin(9600);                   // 0 ve 1 numaralı pinleri kullanır / uses pins 0 and 1
19  pinMode(STATUS_LED, OUTPUT);
20  pinMode(PWM_LED, OUTPUT);
21  pinMode(BUTTON_PIN, INPUT_PULLUP);    // dahili pull-up direnci / internal pull-up resistor
22  attachInterrupt(digitalPinToInterrupt(BUTTON_PIN), onButton, FALLING);
23}
24
25void loop() {
26  int raw = analogRead(POT_PIN);        // 0-1023 arası ham değer / raw value 0-1023
27  float volts = raw * 5.0 / 1023.0;     // volta çevir / convert to volts
28  analogWrite(PWM_LED, raw / 4);        // 0-255 arası PWM / PWM from 0 to 255
29  digitalWrite(STATUS_LED, volts > 2.5 ? HIGH : LOW);   // 2,5 V eşiği / 2.5 V threshold
30
31  noInterrupts();                       // sayacı güvenle kopyala / copy the counter safely
32  unsigned int presses = pressCount;
33  interrupts();
34
35  Serial.print(F("A0: "));
36  Serial.print(raw);
37  Serial.print(F("  V: "));
38  Serial.print(volts, 2);
39  Serial.print(F("  Buton / Button: "));
40  Serial.println(presses);
41  delay(200);
42}

Скетч одновременно использует четыре типа пинов Uno. analogRead(A0) читает значение от 0 до 1023, а raw / 4 сжимает его до диапазона 0–255, который ожидает analogWrite(). Чтобы не считать дребезг контактов, функция прерывания игнорирует сигналы, пришедшие меньше чем через 50 мс после последнего нажатия. Счётчик, который меняется в прерывании, объявлен как volatile, а loop() копирует его, ненадолго приостановив прерывания: 8-битная Uno читает 16-битное число в два приёма, и прерывание между ними могло бы дать неверное значение. Пины 0 и 1 заняты только Serial, поэтому к ним больше ничего не подключено.

Пример плана пинов: какую деталь на какой пин?

Если в проекте с несколькими деталями раскидывать пины наугад, начнутся конфликты. Сначала расставь детали с особыми ролями (I2C, SPI, прерывания, PWM) на их пины, а потом раздай простые цифровые задачи свободным пинам. Ниже пример плана для дверного замка с RFID-картой: считыватель RC522, I2C LCD, сервопривод, зуммер, кнопка и два светодиода. Поскольку сервопривод и tone() используются вместе, PWM на 3, 9, 10 и 11 и так недоступен, и план это учитывает.

ДетальПин UnoПочему этот пин?
RC522 SDA (SS)10Пин SS шины SPI; должен оставаться выходом
RC522 SCK / MOSI / MISO13 / 11 / 12Пины аппаратного SPI изменить нельзя
RC522 RST9Подойдёт любой цифровой пин; PWM на 9 из-за сервопривода всё равно недоступен
RC522 VCC3.3VМодуль работает от 3,3 V, и его ток ниже предела 50 mA
I2C LCD SDA / SCLA4 / A5Единственная шина I2C у Uno
Сигнал сервопривода6Библиотека Servo работает на любом пине; питание от внешних 5 V
Зуммер8tone() работает на любом пине, так что пин PWM не тратится
Кнопка2Пин прерывания; с INPUT_PULLUP резистор не нужен
Зелёный / красный светодиод4 / 7Простые цифровые пины без доп. функций
Оставлены свободными0, 1, 3, 5, A0–A3Последовательная линия свободна; 3 для второго прерывания, 5 для PWM, A0–A3 для датчиков

Различия в пинах Arduino Uno R3 и R4

ПараметрUno R3Uno R4 (Minima / WiFi)
МикроконтроллерATmega328P, 8 бит, 16 MHzRenesas RA4M1, 32 бита, 48 MHz
Расположение пиновСтандартное для UnoТо же; шилды подходят
Ток на пин20 mA8 mA
Аналоговое разрешение10 бит10 бит по умолчанию, до 14 бит
Настоящий аналоговый выход (ЦАП)Нет12-битный ЦАП на A0
Пины 0 и 1Общие с USB (Serial)Отдельно от USB (Serial1)
Диапазон VinРекомендуется 7–12 V6–24 V
USBUSB-B, через ATmega16U2USB-C; на Minima напрямую к процессору, на WiFi через мост ESP32-S3

Короче говоря, номера и функции пинов на R4 остаются прежними (PWM ~3, 5, 6, 9, 10, 11; I2C A4/A5; SPI 10–13; прерывания 2, 3), но ток на пин падает до 8 mA. Светодиоду, который на R3 питался прямо от пина, на R4 нужен резистор побольше (например, 1 kΩ примерно на 3 mA) или транзистор. Подробное сравнение — в статье Arduino Uno R4. Если ищешь плату поменьше, помогут статьи Распиновка Arduino Nano и Какой Arduino купить?

Частые ошибки и как их исправить

СимптомПричинаРешение
Скетч не загружается, ошибка «not in sync»К пину 0 или 1 подключён модульОтключай модуль на время загрузки или перенеси его на другие пины через SoftwareSerial
После добавления сервопривода яркость светодиода не меняетсяБиблиотека Servo отключила PWM на 9 и 10Перенеси светодиод на 3, 5, 6 или 11
Скорость мотора сбивается, пока играет зуммерtone() использует Timer2, который влияет на 3 и 11Перенеси PWM на 5, 6, 9 или 10
Аналоговое значение само уплываетПин висит в воздухе или сопротивление источника слишком великоНадёжно подключи датчик, при необходимости читай дважды
Кнопка будто нажимается самаВходной пин висит в воздухеИспользуй INPUT_PULLUP или добавь резистор 10 kΩ
При подключённом I2C-дисплее A4/A5 читают неверные значенияA4/A5 общие с шиной I2CПодключи аналоговый датчик к A0–A3
SPI-модуль не отвечаетПин 10 сделан входом или неверный CSДержи пин 10 выходом, дай каждому устройству свой CS
Плата греется или сама перезагружаетсяС пинов или пина 5V берётся слишком большой токПитай нагрузки от отдельного источника и соедини GND
Перед началом проекта набросай на бумаге небольшой план пинов: деталь, пин, назначение. В начале кода объяви пины именованными константами вроде const byte LED_PIN = 9;, чтобы перенос детали на другой пин требовал изменения всего одной строки. Если плата неожиданно перезагружается, пройди шаги диагностики из статьи Arduino постоянно перезагружается.

Когда пины Arduino Uno понятны, запоминать, куда подключается каждая деталь, не нужно: смотришь, что нужно детали, и самостоятельно выбираешь подходящий пин. Если хочешь ещё раз пройтись по основам, начни со статьи Что такое Arduino? В приложении BlueGrays есть проекты вроде зажигания светодиода, чтения кнопки, измерения света фоторезистором, RGB-светодиода с PWM, I2C LCD, RFID и двух Arduino, общающихся по последовательной линии, — каждый пошагово, со схемами, которые показывают, почему выбран каждый пин, и с готовым кодом.

Частые вопросы

Сколько пинов у Arduino Uno?

У Arduino Uno R3 14 цифровых пинов ввода-вывода (0–13) и 6 аналоговых входов (A0–A5); поскольку аналоговые пины можно использовать и как цифровые, всего получается 20 сигнальных пинов. Шесть цифровых пинов умеют PWM. Кроме того, есть пины питания и управления: Vin, 5V, 3.3V, GND, IOREF, AREF и RESET, а также 6-контактный разъём ICSP.

Какие пины Arduino Uno поддерживают PWM?

Пины PWM — 3, 5, 6, 9, 10 и 11, на плате рядом с их номерами стоит знак ~. Пины 5 и 6 работают на частоте около 980 Hz, остальные — около 490 Hz. На PWM пинов 9 и 10 влияет библиотека Servo, а на PWM пинов 3 и 11 — функция tone().

Можно ли использовать аналоговые пины Arduino как цифровые?

Да. На Uno пины A0–A5 работают как обычные цифровые с pinMode, digitalWrite и digitalRead и соответствуют номерам 14–19. Так что к A0 можно подключить светодиод, а к A3 — кнопку. Единственное исключение: пока используется I2C, A4 и A5 заняты шиной.

Какой ток может отдать пин Arduino Uno?

С одного пина безопасно брать 20 mA; 40 mA — абсолютный максимум, превышение может необратимо повредить пин. Суммарный ток всех пинов не должен превышать 200 mA. Поэтому светодиоды подключают через резисторы, а нагрузками вроде моторов и реле управляют через транзистор, MOSFET или модуль драйвера.

Можно ли использовать пины 0 и 1 на Arduino Uno?

Можно, но не рекомендуется. Эти пины подключены к микросхеме USB-UART, и компьютер использует эту линию при загрузке кода и работе монитора порта. С модулем на пине 0 загрузка может сорваться с ошибкой «not in sync», поэтому занимай эти пины в последнюю очередь или переходи на другие пины через SoftwareSerial.

Что такое пины SDA и SCL на Arduino Uno?

На Uno линия SDA шины I2C — это пин A4, а SCL — пин A5. На платах R3 рядом с AREF есть ещё два пина с подписями SDA и SCL, но они внутри соединены с A4 и A5 и не являются отдельной шиной. На ESP32 пины I2C по умолчанию — GPIO 21 и 22; на Raspberry Pi Pico I2C можно перенести на многие пины, и самый частый выбор — GP4 (SDA) и GP5 (SCL).

Все проекты
Мигающий светодиод
#1Новичок

Мигающий светодиод

Самое первое «привет» в электронике: включение и выключение одного светодиода. Arduino включает и выключает светодиод через короткие промежутки, поэтому свет быстро мигает. Ты самым простым способом в

4.6(188)
1127
Управление светодиодом кнопкой (удержание)
#9Новичок

Управление светодиодом кнопкой (удержание)

Как дверной звонок: свет горит, пока ты нажимаешь, и гаснет, когда отпускаешь. Arduino всё время слушает кнопку; пока она нажата, светодиод горит, а как только ты убираешь палец, он гаснет. Эта просте

4.8(113)
229
Измерение освещённости с LDR
#11Новичок

Измерение освещённости с LDR

Хочешь увидеть яркость своей комнаты в виде числа? LDR — маленькая деталь, реагирующая на свет, — измеряет освещённость вокруг, а Arduino каждые полсекунды выводит значение на экран компьютера. Закрой

4.6(81)
139
Измерение расстояния HC-SR04 (вывод в порт)
#27Новичок

Измерение расстояния HC-SR04 (вывод в порт)

Датчик HC-SR04 работает совсем как летучая мышь, которая находит дорогу в темноте: он посылает звук, которого ты не слышишь, слушает эхо и измеряет, насколько далеко предмет перед ним. Arduino каждые

4.6(46)
71
Плавная смена цвета RGB-светодиода
#40Новичок
Premium

Плавная смена цвета RGB-светодиода

Один RGB-светодиод медленно переходит от красного к зелёному, от зелёного к синему и обратно к красному, без остановки прокручивая радугу. Каждый переход длится около двух с половиной секунд, а жёлтый

4.8(58)
76
LCD-экран с I2C
#32Новичок
Premium

LCD-экран с I2C

Дай своему Arduino собственный экран и заставь его написать первое сообщение. Двухстрочный LCD-экран подключается всего несколькими проводами; в верхней строке появляется приветствие, затем второе соо

4.8(53)
70
Чтение значения RFID
#53Новичок
Premium

Чтение значения RFID

В брелоке от подъезда или карте доступа спрятан секретный идентификационный номер, и этот проект его читает. Поднеси карту к считывателю RFID, и Arduino выведет номер карты на экран компьютера. Первый

4.7(47)
61
Односторонняя связь между двумя Arduino
#57Средний
Premium

Односторонняя связь между двумя Arduino

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

4.4(37)
50