Интерфейсы Arduino.

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

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

Любое устройство подключается к контроллеру посредствам какого-либо интерфейса. Они могут быть как простые, так и более сложные. Сначала рассмотрим простые и перейдем к более сложным.

Цифровые входы/выходы

Практически любой пин ардуино может выступать цифровым входом или выходом. Это конфигурируется в конкретном скетче в секции setup() с помощью конструкции pinMode(<пина>, <режим>);

Это наиболее простой интерфейс для подключения устройств к контроллеру. Датчики, которые подключаются по этому интерфейсу к цифровому входу, могут выдать контроллеру только два значения: вкл/выкл. Самым простым датчиком такого типа может быть кнопка. Она имеет только два положения: включена или выключена.

Выходы так же могут только включиться либо выключиться. К цифровому выходу можно подключить реле, диод, либо любое другое устройство, которое должно просто включаться или выключаться.

В ардуино почти все пины можно сконфигурировать как цифровые входы/выходы.

Подключается с помощью одного сигнального провода.

Аналоговые входы

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

В ардуино такие входы помечаются как A0, A1 и т.д

Подключается с помощью одного сигнального провода.

PWM (аналоговые выходы)

Ардуино может считывать аналоговый сигнал, а как же обстоят дела с выводом аналогового сигнала? Если нам необходимо вывести не дискретный сигнал, а некоторое значение, которое позволит плавно управлять некоторым устройством, к примеру скорость вращения электромотора или интенсивность свечения лампочки, то следует воспользоваться выводом, который поддерживает широтно-импульсную модуляцию (ШИМ).

Если кратко, то ШИМ – это возможность плавно менять значение на цифровом выходе. Классический пример с вентилятором. Допустим, есть вентилятор. Если мы будем подавать на него напряжение все время – то он будет крутиться с максимальной скоростью. Но если мы будем 0,5 секунды подавать напряжение, а на 0,5 секунды обесточивать – то можно сказать, что он будет крутиться в 2 раза медленнее, чем когда подача напряжения идет непрерывно. Если мы будем подавать напряжение 0,25 секунды, а 0,75 не подавать – то замедлим его в 4 раза. Если пересчитать это на герцы – то у нас получится 4 Гц, то есть в секунду мы можем изменить состояние 4 раза (каждые 0,25 секунды). Но наш контроллер обычно имеет частоту от 8МГц, то есть в секунду он может изменить состояние такого выхода 8млн. раз. На такой частоте изменений мы просто не будем замечать переключений.  А диапазон регулирования увеличивается в разы.

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

Как пример, к такому пину подключается потенциометр. Он выдает значение в некотором диапазоне, которое считывается ардуино.

Подключается с помощью одного сигнального провода.

PWM интерфейс
Рисунок 1. Распиновка PWM на arduino nano.
Более сложные интерфейсы
Интерфейс UART (Serial communication)

Наверно, это один из наиболее распространенных интерфейсов. Универсальный асинхронный интерфейс передачи данных.

В этом интерфейсе устройства обмениваются информацией и не ждут подтверждения ее приема. Для его работы нужно два пина устройства. Обозначаются эти пины как RX и TX (Reciever и Transmitter соответственно). Причем нужно соединять пин RX на контроллере с пином TX на устройстве и наоборот. У устройств должна быть общая земля. К шине можно подключить только одно устройство.

Пример устройств, которые используют данный интерфейс: GSM-модули, GPS-модули.

Подключается с помощью двух сигнальных проводов. Должна быть общая земля.

UART-интерфейс
Рисунок 2. Распиновка UART на arduino nano.
Интерфейс I2C (Wire)

Этот интерфейс представляет собой последовательную, ассиметричную, низкоскоростную шину для связи между устройствами. Интерфейс использует двунаправленные линии связи, помеченные как SDL (может обозначаться как D) и SCL (может обозначаться как C, SCK). Подробно с принципом работы данного интерфейса можно познакомится в википедии.

Все что нужно знать: к шине можно подключить до 128 устройств с уникальными адресами. Подключать к контроллеру нужно в одноименные пины.

Можно подключать экраны, акселерометры, гироскопы.

Подключается с помощью двух сигнальных проводов. Должна быть общая земля.

Пример сборки с использованием I2C тут.

I2C-интерфейс
Рисунок 3. Распиновка I2C на arduino nano.
Интерфейс SPI

Этот интерфейс является высокоскоростной синхронной шиной данных. Подключается с помощью 4 – сигналов:

  • MOSI (SDI, DI, DIN, SI) – для передачи сигнала от контроллера к устройству
  • MISO (SDO, DO, DON, SO) – для передачи сигнала от устройства к контроллеру
  • SCLK (SCK, CLK, SPC) – тактовый сигнал
  • CS (SS, RCK) – выбор ведомого

Сигналы MOSI и MISO используются для передачи данных от контроллера к устройству и наоборот соответственно. Сигнал SCLK передает тактовый импульс. А пин CS служит для выбора устройства, с которым будет «общаться» контроллер.

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

Можно подключить экраны, радиопередатчики NRF и т.д.

Подключается с помощью 4-х сигнальных проводов. Каждое новое устройство добавляет одно новое соединение свободного цифрового пина микроконтроллера и пина CS.

Пример сборки с интерфейсом SPI тут.

SPI-интерфейс
Рисунок 4. Распиновка SPI на arduino nano.
Выводы

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

Оставьте комментарий