Пины Aрдуино: описание, характеристики, примеры скетчей
На плате Ардуино есть несколько видов пинов (с английского pin — контакт, вывод). Их количество может отличаться на разных платах, но всегда присутствуют следующие типы: пины питания, цифровые пины, аналоговые пины. О предназначении этих выводов и работе с ними и пойдёт речь в статье.
Краткое содержание:
- Пины питания
- Цифровые пины в режиме входа
- Как подключить светодиод к Ардуино
- Цифровой пин в режиме входа
- Как подключить кнопку к Ардуино
- Подтягивающий резистор
- ШИМ-пины
- Аналоговые пины
- Аналоговые пины в режиме цифровых
- Ограничение по току. Подключение мощной нагрузки
- Пины коммуникации
Пины Ардуино на примере Arduino UNO
Пины питания
Режим работы пинов питания жестко задан, его нельзя поменять программно. Сюда входят:
- GND — это «земля» (англ. ground), ноль, общий провод. Таких пинов может быть несколько. Сюда подключается минусовой вывод источника питания.
- Vin — Пин для подключения плюса от внешнего источника питания. Напряжение может быть от 5 до 12 В.
- 5v — стабилизированные 5 вольт, которые выдаёт плата. Сюда можно подключить маломощных внешних потребителей, которые требуют стабильное питание (датчики и т.п.)
- 3.3v — стабилизированные 3.3 вольта.
Заметим также, что Ардуино может получать питание и через usb-разъем, в этом случае не нужно подключать внешний источник.
Цифровые пины. Режим выхода
Эта группа пинов обозначена на плате словом digital (по-английски digital - цифровой).
Цифровой пин работает с двумя состояниями: 0 (эквивалентно земле) и 1 (эквивалентно напряжению питания). Причём любой цифровой пин может работать и как вход, и как выход.
Сначала разберёмся с режимом «выход». Соберём вот такую простенькую схему, где цифровой pin №5 будет управлять свечением светодиода:
Схема 1. Подключение светодиода к цифровому пину Ардуино
Номинал резистора в этой схеме зависит от модели светодиода. Обычно для тех светодиодов, что идут в различных наборах Ардуино, требуется резистор 330 Ом.
А вот скетч для этой схемы:
void setup() { // Код в этом методе выполнится только один раз, при запуске Arduino
pinMode(5, OUTPUT); // Переключаем пин №5 в режим выхода
}
void loop() { // Код в этом методе будет выполняться в цикле бесконечное количестово раз
digitalWrite(5, HIGH); // Устанавливаем высокий уровень — светодиод загорается
delay(500); // Задержка в миллисекундах. Всё это время светодиод горит.
digitalWrite(5, LOW); // Устанавливаем низкий уровень — светодиод гаснет
delay(500); // И снова задержка
}
Если всё правильно собрано, светодиод будет моргать с частотой примерно 1 Гц (цикл горит - не горит занимает 1 секунду).
Ну и давайте сразу привыкать программировать правильно. В нашем скетче в трёх местах используется «магическое число» 5 — номер нашего пина. А если мы решили изменить схему и подключить светодиод к пину 6? Хорошо, когда скетч такой вот небольшой, и можно быстро найти все места, где упоминается пятёрка и поменять её на 6. А если скетч большой? Можно, во-первых, забыть где-то поменять номер пина, а, ещё хуже, случайно заменить постороннюю пятёрку, которая имела совсем другой смысл.
Всё это приводит к ошибкам в программе. Но есть способ уменьшить вероятность их появления. В данном конкретном случае можно запомнить номер пина в переменной, и затем везде использовать её.
int ledPin = 5; // пин подключения светодиода
int dl = 500; // задержка
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin, HIGH);
delay(dl);
digitalWrite(ledPin, LOW);
delay(dl);
}
Теперь мы можем при необходимости менять параметры в секции инициализации и не трогать весь остальной код. Да и саму программу читать легче — по имени переменной становится понятно, что происходит в той или иной строчке кода.
Цифровой пин в режиме входа
Как говорилось выше, цифровой пин может работать в режиме входа. С него можно считывать его текущее состояние с помощью метода digitalRead(<номер пина>). Но, поскольку вариантов всего два (1 и 0), то и подключить к нему можно какое-то устройство, которое имеет два состояния, типа кнопки (нажата / не нажата).
И снова разберём на примере. Покажем, как подключить кнопку к Ардуино:
Схема 2. Подключение кнопки к цифровому входу Ардуино
int ledPin = 13; // Пин 13 - это пин встроенного светодиода
int buttonPin = 2; // Пин, к которому подключена кнопка
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop() {
if (digitalRead(buttonPin) == HIGH) { // Проверяем: если есть высокий уровень на входе (кнопка нажата)...
digitalWrite(ledPin, HIGH); // … то включам светодиод ...
} else { // … иначе ...
digitalWrite(ledPin, LOW); // … светодиод выключаем
}
}
При нажатии кнопки должен загораться светодиод на плате Ардуино.
Подтягивающий резистор
Вы вправе спросить, зачем в схеме резистор? Это так называемый подтягивающий резистор, с помощью которого можно задать состояние на входе «по-умолчанию».
Дело в том, что входы Ардуино имеют очень высокое входное сопротивление. Поэтому, ни к чему не подключённый, «висящий» вход может оказаться в состоянии 1 за счёт, к примеру, статического электричества. Это приведёт к ложным срабатываниям: кнопка не нажата, но программа считывает с пина высокий уровень.
Чтобы этого избежать, вход подтягивают (в данном случае, к нулю) резистором номиналом 10-20кОм. Когда кнопка отпущена, этот резистор устанавливает 0 на входе. Но, при этом его сопротивление слишком велико, чтобы помешать нажатой кнопке установить на входе 1: ток через резистор будет очень мал, и, в совокупности с большим входным сопротивлением пина на нём установится практически напряжение питания.
К слову, микроконтроллер ATmega имеет программируемые встроенные подтягивающие резисторы 20 кОм. Включение данных резисторов осуществляется так:
pinMode(buttonPin, INPUT); // переключаем пин в режим входа
digitalWrite(buttonPin, HIGH); // включаем подтягивающий резистор — в данном случае, подтягиваем к 1
ШИМ-пины
Вы могли обратить внимание, что на плате напротив некоторых цифровых пинов стоит знак ~ (тильда).
Так обозначены пины, которые могут работать в режиме ШИМ - широтно-импульсной модуляции (по-английски PWM).
То есть, на такой пин можно вывести псевдо-аналоговое напряжение. Технически, это будут прямоугольные импульсы частотой 488,28 Гц и амплитудой 5 вольт. Но, за счёт регулировки скважности (соотношения длины импульса и паузы между импульсами), можно плавно регулировать эффективную мощность на нагрузке. Тема ШИМ заслуживает отдельной статьи, а пока, возможно, вышесказанное станет чуть понятнее из рисунка:
График ШИМ-сигнала. В данном случае пауза длиннее импульса в три раза, то есть период заполнен импульсом на 25%. Это соответствует постоянному напряжению 0.25 * 5 = 1.25 Вольт
Для установления ШИМ-режима на пине служит метод analogWrite(<номер пина>, <значение>).
Значение может меняться от 0 до 255, причём 255 соответствует напряжению питания. Таким образом, например, 128 — это половина напряжения питания, 2.5 В.
Давайте заставим наш светодиод из первого примера плавно набирать яркость и также плавно гаснуть:
int ledPin = 5; // пин подключения светодиода
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
for(int i=0;i<=255;i++) { // Плавное включение светодиода. Переменная i последовательно принимает все значения от 0 до 255
analogWrite(ledPin, i); // устанавливаем текущие значение переменной i
delay(10); // небольшая задержка для плавности включения светодиода
}
for(int i=255;i>=0;i--) { // Плавное выключение светодиода. Перебираем все значения от 255 до 0
analogWrite(ledPin, i);
delay(10);
}
}
Аналоговые пины
В их обозначении присутствует буква А: А0, А1 и т.д. Работают эти пины на вход, так что нет необходимости задавать режим через pinMode(). Чтобы считать показания, применяется метод analogRead(<номер пина>). По сути, этот метод измеряет напряжение на аналоговом пине, разбив диапазон от нуля до напряжения питания на 1024 кусочка. К примеру, если analogRead вернул значение 512 — это соответствует половине напряжения питания.
Аналоговые пины в режиме цифровых
Все аналоговые пины можно переключить в режим цифрового выхода (но не в режим ШИМ-выхода). Достаточно переключить пин в режим OUTPUT:
pinMode(A3, OUTPUT); // переключаем пин A3 в режим цифрового выхода
К слову, можно пользоваться чисто цифровой нумерацией, без букв. Пину A0 соответствует цифровой пин 14, A1 — 15 и так далее.
Ограничение по току
При работе пинов в режиме выходов нужно не забывать об ограничениях по максимальному току. Для одного пина оно составляет 40 мА (или 50 мА для плат, работающих от питания 3.3 В). А суммарный ток со всех пинов не должен превышать 200 мА, иначе Ардуинка может выйти из строя.
Если нужно подключить к плате Ардуино более мощного потребителя, превышающего указанные предельные токи, следует подключать его через релейные модули или усилительные ключи с использованием внешнего источника питания:
Пример подключения мощной нагрузки к Ардуино через релейный блок: реле подключает к нагрузке внешний источник питания, от него же питается сама плата Ардуино.
Пины коммуникации
Для полноты картины осталось упомянуть о пинах коммуникации.
Пины SDA и SCL используются для подключения устройств, поддерживающих протокол I2C. Аналогично, пины TX и RX используются для коммуникаций по протоколу UART.
Комментарии (4)
Чё такое I2C и UART?
UART - Universal Asynchronous Reciver-Transmitter интерфейс на пинах RX, TX
На Ардуино коммуникация просходит с помощью класса Serial.
Если не подключать компьютер, то можно , например подключить блютуз-модуль.
I2C - протокол синхроннной связи, позволяющий подключить к одной шине из двух проводов (SDA и SDL) несколько устройств. Например модуль GPS и/или жк-дисплей. Master-источник сигнала один.
На Ардуино - класc Wire, A4 - SDA, A5 - SCL
Добавить комментарий