Рубрики
Проекты на Raspberry Pi

Подключение модуля АЦП/ЦАП PCF8591 к Raspberry Pi

Аналого-цифровое преобразование (АЦП, на англ. ADC — аnalog to digital conversion) играет важную роль в современных электронных системах. Многие современные датчики (температуры, влажности, силы и т.д.) обеспечивают на своем выходе аналоговое значение, а микроконтроллеры, являющиеся, как правило, «сердцем» встраиваемых систем, могут работать только с цифровыми значениями. Поэтому чтобы подавать аналоговое значение с датчиков на цифровые входы микроконтроллеров необходимо выполнить аналого-цифровое преобразование этих значений. Для выполнения этой задачи используются устройства, которые называют аналого-цифровыми преобразователями.

Некоторые современные микроконтроллеры, такие как AVR, MSP430, PIC, плата Arduino имеют в своем составе встроенные аналого-цифровые преобразователи (АЦП), но в плате Raspberry Pi встроенные АЦП отсутствуют, поэтому для подключения к ней аналоговых устройств необходимо использовать внешние модули АЦП. Ранее на нашем сайте мы уже рассматривали подключение к плате Raspberry Pi простейшего модуля АЦП ADC0804. В этой же статье мы рассмотрим подключение к плате Raspberry Pi модуля АЦП/ЦАП PCF8591, обладающего возможностью работы по интерфейсу I2C. Ранее мы рассматривали подключение этого модуля АЦП/ЦАП к плате Arduino.

Необходимые компоненты

  1. Плата Raspberry Pi (купить на AliExpress).
  2. PCF8591 ADC Module (модуль АЦП) (купить на AliExpress).
  3. Потенциометр 100 кОм (купить на AliExpress).
  4. Соединительные провода.

Модуль АЦП/ЦАП (ADC/DAC) PCF8591

PCF8591 представляет собой 8-битный аналого-цифровой или цифро-аналоговый преобразователь, то есть аналоговому значению соответствует число от 0 до 256. Также на плате модуля PCF8591 имеются фоторезистор (LDR) и терморезистор. Модуль имеет 4 аналоговых входа и 1 аналоговый выход. Он работает по протоколу I2C, поэтому он содержит также контакты SCL и SDA данного интерфейса. Модуль работает на напряжения питания 2.5-6V и имеет низкий ток потребления в режиме ожидания.

Управлять чувствительностью аналогового входа модуля можно с помощью потенциометра 10 кОм, имеющегося в его составе. Также на плате модуля PCF8591 имеется 3 переключателя (джампера). Переключатель J4 обеспечивает доступ к цепи терморезистора (термистора), переключатель J5 обеспечивает доступ к цепи фоторезистора, а переключатель J6 – доступ к цепи регулировки уровня входного напряжения. Также на плате модуля имеется два светодиода: D1 показывает уровень выходного напряжения, а D2 – уровень питающего напряжения. Чем больше уровни этих напряжений, тем ярче соответственно горят светодиоды D1 и D2. Протестировать работу этих светодиодов можно подключив потенциометр к контактам VCC или AOUT модуля.

Внешний вид и назначение контактов (распиновка) модуля PCF8591 показаны на следующем рисунке.

Контакты I2C в плате Raspberry Pi

Для подключения модуля PCF8591 к плате Raspberry Pi первым делом необходимо узнать где располагаются контакты интерфейса I2C в плате Raspberry Pi и включить использование этого интерфейса в плате.

На следующей распиновке платы Raspberry Pi показано расположение контактов интерфейса I2C: GPIO2 (SDA) и GPIO3 (SCL).

Включение интерфейса I2C в Raspberry Pi

По умолчанию интерфейс I2C отключен в плате Raspberry Pi. Чтобы его включить необходимо выполнить следующую последовательность действий:

  1. В окне терминала ввести команду sudo raspi-config чтобы войти в панель настроек платы Raspberry Pi.
  2. В панели настроек выбрать настройки подключения (Interfacing options) и в них включить использование интерфейса I2C (enable the I2C).
  3. После включения использования I2C перезагрузите плату Raspberry Pi.

Определение адреса I2C модуля PCF8591 с помощью Raspberry Pi

Чтобы начать взаимодействие с модулем PCF8591 плате Raspberry Pi необходимо знать его адрес I2C. Для его определения подключите контакты SDA и SCL модуля PCF8591 к контактам SDA и SCL платы Raspberry Pi. Также подключите контакты +5V и GND.

После этого откройте окно терминала и введите в нем следующую команду чтобы узнать адрес I2C модуля PCF8591:

После этого вам в окно терминала будет выведена таблица с адресами I2C подключенных к плате Raspberry Pi устройств.

Схема проекта

Схема подключения модуля АЦП/ЦАП PCF8591 к плате Raspberry Pi представлена на следующем рисунке.

Как видите, схема достаточно проста. Мы будем считывать аналоговое значение, подаваемое на один из аналоговых входов модуля PCF8591, и отображать его в окне терминала платы Raspberry Pi. Изменять подаваемое на вход модуля PCF8591 аналоговое значение мы будем с помощью потенциометра 100 кОм. Также в схему можно добавить ЖК дисплей 16×2 чтобы отображать на нем считываемое аналоговое значение.

Внешний вид собранной конструкции проекта показан на следующем рисунке.

Объяснение программы для Raspberry Pi

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Первым делом в программе подключим (импортируем) необходимые библиотеки: smbus для работы с протоколом I2C и time для организации временных задержек в программе.

Далее инициализируем необходимые нам переменные: address – в ней будет храниться адрес шины I2C, A0 – в ней будет храниться адрес первого аналогового входного контакта.

Далее создадим объект для работы с шиной I2C.

После этого в бесконечном цикле while мы будем давать команду модулю PCF8591 произвести измерение значения на его первом аналоговом входном контакте. Вторая команда в этом цикле сохраняет считанное с аналогового контакта значение в переменной value. Затем мы выводим значение value в окно терминала.

Теперь сохраним код нашей программы на python в файле с расширением .py и запустим эту программу на выполнение с помощью команды:

Перед запуском программы на выполнение убедитесь в том, что у вас сделаны все соединения в схеме и в настройках платы Raspberry Pi включено использование интерфейса I2C, иначе в результате выполнения программы будут выдаваться ошибки. Считываемые аналоговые значения будут показываться в окне терминала как на приведенном ниже рисунке. Вращайте рукоятку потенциометра и вы увидите как будет изменяться значения на экране. Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.

Исходный код программы на Python

Видео, демонстрирующее работу проекта

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *