Модуль используют, если не хватает аналоговых входов/выходов на контроллере – подключаем его и получаем данные с датчиков. Если сравнивать с АЦП Arduino, то данный модуль проигрывает по разрешению (у Ардуиновского АЦП 10-битное разрешение), однако можно сравнивать не просто поступающее напряжение, как в Arduino (от 0 до 5 В), а сравнивать между собой напряжения из разных источников (например, для контроля уровня батарей), когда на один вход подается напряжение с одного источника, на второй – с другого и сравниваем результат. Также, можно замерить напряжение на всех 4 входах одновременно и затем получить 4 байта со значением по каждому входу (Arduino так тоже не умеет).

На плате расположены: потенциометр (подстроечный резистор), термистор (датчик температуры) и фоторезистор (датчик освещенности), которые подключены к аналоговым входам с помощью перемычек. С ними можно поэкспериментировать для знакомства с платой, а потом снять перемычки и подать на входы другие источники. Джампер P4 подключает вход AIN1 к термистору, джампер P5 подключает вход AIN0 к фоторезистору, а джампер P6 подключает вход AIN3 к потенциометру 10 кОм. Также на плате есть два светодиода – красный для индикации питания, зеленый для индикации сигнала на аналоговом выходе AOUT (чем ярче горит, тем выше напряжение на выходе).
На плате модуля имеется три джампера, обозначенных P4, P5 и P6:
- Джампер P4 подключает к аналоговому входу AIN1 термистор (датчик температуры), с помощью которого можно контролировать температуру вокруг модуля. Если джампер P4 установлен, то на аналоговый вход AIN1 нельзя подключить какое либо устройство. Если джампер P4 не установлен, то вход AIN1 исполняет свои обычные функции и к нему можно подключить сигнал с какого либо устройства.
- Джампер P5 подключает к аналоговому входу AIN0 фоторезистор (датчик освещенности), с помощью которого можно контролировать степень освещенности вокруг модуля. Если джампер P5 установлен, то на аналоговый вход AIN0 нельзя подключить какое либо устройство. Если джампер P5 не установлен, то вход AIN0 исполняет свои обычные функции и к нему можно подключить сигнал с какого либо устройства.
- Джампер P6 подключает к аналоговому входу AIN3 потенциометр (построечный резистор) с сопротивлением 10 кОм, с помощью которого можно изменять значение аналогового сигнала на входе AIN3. Если джампер P6 не установлен, то вход AIN3 исполняет свои обычные функции.
Аналоговый вход AIN2 не зависит от джамперов и постоянно исполняет свои обычные функции. Джамперы можно устанавливать в любом нужном сочетании или не устанавливать совсем. Также на плате модуля есть аналоговый выход AOUT. Он связан с зеленым светодиодом D1 – чем ярче горит светодиод, тем выше потенциал (напряжение) сигнала на выходе.
Пример подключения
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
// Подключение библиотеки Adafruit для работы с PCF8591 #include <Adafruit_PCF8591.h> // Определение опорного напряжения для АЦП (в вольтах) #define ADC_REFERENCE_VOLTAGE 5.0 // Создание экземпляра модуля PCF8591 Adafruit_PCF8591 pcf = Adafruit_PCF8591(); // Переменная для хранения значения аналогового входа AIN0 uint8_t AIN0; void setup() { // Инициализация последовательного порта на скорости 9600 бод Serial.begin(9600); // Вывод сообщения о начале работы Serial.println("# Демонстрация работы с Adafruit PCF8591"); // Проверка подключения модуля PCF8591 if (!pcf.begin()) { // Вывод сообщения об ошибке и остановка программы Serial.println("# PCF8591 не найден!"); while (1) delay(10); } // Вывод сообщения об успешном обнаружении модуля Serial.println("# PCF8591 обнаружен"); // Включение ЦАП (цифро-аналогового преобразователя) модуля pcf.enableDAC(true); // Пояснение: DAC позволяет модулю выдавать аналоговое напряжение // В данном режиме модуль может работать как как АЦП, так и ЦАП } void loop() { // Чтение аналогового значения с канала AIN0 (0-255) AIN0 = pcf.analogRead(0); // Запись считанного значения обратно в ЦАП pcf.analogWrite(AIN0); // Вывод сырого значения и значения в вольтах для AIN0 Serial.print("AIN0: "); Serial.print(AIN0); // Вывод цифрового значения (0-255) Serial.print(", "); Serial.print(int_to_volts(AIN0, 8, ADC_REFERENCE_VOLTAGE)); // Вывод в вольтах Serial.println("V"); // Закомментированный код для чтения других каналов: // Serial.print("AIN1: "); // Serial.print(int_to_volts(pcf.analogRead(1), 8, ADC_REFERENCE_VOLTAGE)); // Serial.println("V"); // // Serial.print("AIN2: "); // Serial.print(int_to_volts(pcf.analogRead(2), 8, ADC_REFERENCE_VOLTAGE)); // Serial.println("V"); // // Serial.print("AIN3: "); // Serial.print(int_to_volts(pcf.analogRead(3), 8, ADC_REFERENCE_VOLTAGE)); // Serial.println("V"); // Задержка 500 мс перед следующим измерением delay(500); } // Функция преобразования цифрового значения в напряжение // Параметры: // dac_value - цифровое значение (0-255 для 8 бит) // bits - разрядность (битность) преобразования // logic_level - опорное напряжение float int_to_volts(uint16_t dac_value, uint8_t bits, float logic_level) { // Формула преобразования: (значение / макс. значение) × опорное напряжение return (((float)dac_value / ((1 << bits) - 1)) * logic_level); } |










