Arduino:Основы/Цифровые контакты
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Цифровые контакты[1]
Контакты Arduino можно сделать и входными, и выходными. В этой статье объясняется, как контакты функционируют в двух этих режимах. Хотя в заголовке статьи указаны цифровые контакты, стоит отметить, что многие аналоговые контакты Arduino (ATmega) можно настроить, а затем использовать также, как и цифровые.
Свойства контактов, настроенных в режим INPUT
По умолчанию контакты Arduino (ATmega) настроены на ввод данных, поэтому вам не нужно специально объявлять их входными при помощи функции pinMode(). Про контакты, настроенные таким образом, говорят, что они находятся в «высоко-импедансном состоянии». Входные контакты крайне нетребовательны к цепи, данные которой они считывают – это равнозначно добавочному резистору на 100 МОм, поставленному перед контактом. Это значит, что контакту нужно очень мало тока, чтобы переключиться из одного состояния в другое. Благодаря этому контакты можно использовать для емкостных сенсорных датчиков, считывать данные со светодиода как с фотодиода или считывать данные с аналогового датчика со схемой вроде RCTime.
Впрочем, это также значит, что если контакт настроен как pinMode(pin, INPUT), но к нему ничего не подключено или провода, присоединенные к нему, никуда не подключены, то этот контакт будет сообщать, возможно, случайные изменения – из-за того, что будет считывать электрический шум окружающего пространства, или из-за емкостной связи с близлежащим контактом.
Подтягивающие резисторы, подключенные к контактам, настроенным как INPUT
Если на входной контакт не идет никаких данных, то его будет не лишним «подтянуть» к нужному состоянию. Это можно сделать подключением к входному контакту подтягивающего (к линии +5V) или стягивающего (к «земле») резистора. Для этих целей неплохо подойдет резистор на 10 кОм.
Свойства контактов, настроенных в режим INPUT_PULLUP
В чип ATmega встроены подтягивающие резисторы на 20 кОм, и доступ к ним можно получить при помощи специального кода. Для этого в функции pinMode() нужно указать параметр INPUT_PULLUP. Это инвертирует поведение режима INPUT: если датчик выключен, контакт будет возвращать значение HIGH, а если включен – LOW.
Номинал подтягивающего резистора зависит от используемого микроконтроллера. На большинстве AVR-плат это значение составляет от 20 до 50 кОм. На Arduino Due оно составляет от 50 до 150 кОм. Чтобы узнать точное значение, загляните в даташит, соответствующий вашей плате.
Если вы подключаете датчик к контакту, настроенному как INPUT_PULLUP, то другой конец этого датчика должен быть подключен к «земле». Если в качестве примера взять простой переключатель, то контакт будет возвращать HIGH, если кнопка будет отпущена, и LOW, если она будет нажата.
Подтягивающие резисторы пропускают немного тока, которого хватает, чтобы светодиод, подключенный к входному контакту, хоть и горел, но тускло. Поэтому, если в вашем проекте есть светодиод, который вроде бы светит, но очень тускло, то происходит именно это – ток к нему, скорее всего, идет через подтягивающий резистор.
Подтягивающие резисторы управляются теми же регистрами (т.е. участками памяти на внутреннем чипе), которые управляют состоянием контакта – HIGH или LOW. Следовательно, если контакт находится в режиме INPUT и у него включен подтягивающий резистор, то при переключении в режим OUTPUT при помощи функции pinMode() получит значение HIGH. Верно и обратное – если контакт, настроенный в режим OUTPUT и оставленный в состоянии HIGH, будет переключен в режим INPUT, то у него включится подтягивающий резистор.
До выхода IDE Arduino версии 1.0.1 встроенные подтягивающие резисторы можно было настроить следующим образом:
pinMode(pin, INPUT); // выставляем контакт в режим INPUT
digitalWrite(pin, HIGH); // включаем подтягивающие резисторы
Примечание: Цифровой контакт 13 сложнее использовать в качестве входного цифрового контакта, чем остальные цифровые контакты, потому что на большинстве плат Arduino к нему подключены светодиод и резистор. Если включить этот подтягивающий резистор на 20 кОм, то напряжение на этом контакте будет 1,7 вольта вместо ожидаемых 5 вольт, потому что светодиод и добавочный резистор притягивают напряжение к нижней границе вольтового диапазона, из-за чего этот контакт будет всегда возвращать LOW. Если вам все же нужно воспользоваться цифровым контактом 13, выставьте его в режим INPUT при помощи функции pinMode() и подключите к внешнему стягивающему резистору.
Свойства контактов, настроенных в режим OUTPUT
Про контакты, которые настроены в режим OUTPUT при помощи функции pinMode(), говорят, что они находятся в «низко-импедансном состоянии». Это значит, что они могут обеспечить цепи, к которым подключены, большим количеством тока. Контакты ATmega могут быть и источниками (движение тока в положительном направлении), и потребителями тока (движение в отрицательном направлении) до 40 мА (миллиампер) для других девайсов/цепей. Этого тока достаточно, к примеру, чтобы светодиод горел с максимальной яркостью (не забудьте про добавочный резистор), а также для работы множества датчиков, но недостаточно для работы большинства реле, электромагнитов и моторов.
Короткие замыкания на Arduino (или, другими словами, попытки использовать Arduino для управления сильноточными устройствами) могут повредить или разрушить выходные транзисторы на контакте или даже повредить чип ATmega. Зачастую такие попытки заканчиваются «смертью» контакта на микроконтроллере, но оставшаяся часть чипа продолжает работать в нормальном режиме. По этой причине контакты в режиме OUTPUT есть смысл подключать к другим девайсам, имеющим резисторы на 470 Ом или 1 кОм, разве что ваш проект не требует, чтобы от этих контактов шел максимальный ток.
См.также
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |