Важно: Не протирайте стеклянный наконечник датчика и не касайтесь его руками. Для очистки датчика споласкивайте его в дистиллированной воде. Не допускайте высыхание наконечника датчика. Храните датчик при надетом колпачке заполненном раствором для хранения.
Не допускайте контакта жидкости с выводами GND или VCC модуля во время измерений.
Общие сведения:
Модуль - ORP-метр, FLASH-I2C - является устройством для измерения окислительно-восстановительного потенциала жидкости (англ. ORP, рус. ОВП). Данный потенциал так же называют редокс-потенциалом, он характеризует окислительную способность вещества, обозначается символами Eh и выражается в милливольтах (мВ).
- ОВП определяется как разность потенциалов между окислителями и восстановителями, в качестве которых выступают атомы или ионы веществ.
- У жидкостей с положительным ОВП преобладает окислительная способность, они принимают электроны тех веществ, с которыми вступают в реакцию (окисляют вещества, а сами восстанавливаются). Чем выше ОВП тем выше окислительная способность жидкости.
- У жидкостей с отрицательным ОВП преобладает восстановительная способность, они отдают электроны тем веществам, с которыми вступают в реакцию (восстанавливают вещества, а сами окисляются). Чем ниже ОВП тем выше восстановительная способность жидкости.
Модуль можно использовать для анализа жидкостей используемых в аквариумах, колодцах, бассейнах, для полива растений, оценке качества питьевой воды и т.д.
Управление модулем осуществляется по шине I2C, а чтение показаний модуля можно осуществлять, либо по шине I2C, либо по аналоговому выходу модуля.
К одной шине I2C можно подключить более 100 модулей. Адрес модуля на шине I2C (по умолчанию 0x09) назначается программно и хранится в его энергонезависимой памяти.
Видео:
Редактируется...
Спецификация:
- Напряжение питания: 3,3 В или 5 В, поддерживаются оба напряжения.
- Ток потребляемый модулем: до 5 мА.
- Интерфейс: I2C.
- Скорость шины I2C: 100 кбит/с.
- Адрес на шине I2C: устанавливается программно (по умолчанию 0x09).
- Уровень логической 1 на линиях шины I2C: Vcc (толерантны к 5В).
- Диапазон измерений ОВП: от 0 до ±1600 мВ.
- Рабочая температура: от 0 до +60 °С.
- Габариты: 30 х 30 мм.
- Вес: 9 г.
Все модули линейки "Trema" выполнены в одном формате
Подключение:
Модуль подключается к шине I2C или к аналоговому входу Arduino.
У модуля имеются три колодки выводов: разъем I2C (GND, Vcc, SDA, SCL), разъем A (G, V, S) и разъем посередине платы используемый для подключения датчика.
- SCL - вход/выход линии тактирования шины I2C.
- SDA - вход/выход линии данных шины I2C.
- S (Signal) - аналоговый выход.
- Vcc - вход питания от 3,3 до 5 В (вывод VCC соединён с выводом V).
- GND - общий вывод питания (вывод GND соединён с выводом G).
Колодка A позволяет подключить модуль к аналоговому входу Arduino.
Колодка I2C используется для подключения модуля к шине I2C.
Способ - 1: Используя проводной шлейф и Piranha UNO
Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO.
Способ - 2: Используя Trema Set Shield
Модуль можно подключить к любому из I2C входов Trema Set Shield.
Способ - 3: Используя проводной шлейф и Shield
Используя 4-х проводной шлейф, к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.
Способ - 4: Подключение к программной шине I2C
При использовании программной шины I2C, модуль можно подключить к любым выводам Arduino, но потребуется дополнительно установить библиотеку iarduino_I2C_Software.h, для создания программной шины I2C, указав номера выбранных вами выводов. О том как это сделать читайте ниже в разделе «Подключение библиотеки», а так же на странице Wiki - Расширенные возможности библиотек iarduino для шины I2C.
Питание:
Входное напряжение питания модуля 3,3В или 5В постоянного тока (поддерживаются оба напряжения питания), подаётся на выводы Vcc и GND.
Подробнее о модуле:
Модуль построен на базе микроконтроллера STM32F030F4, операционного усилителя LMC7101, снабжён кнопкой калибровки, светодиодами информирующими о стадии калибровки, и собственным стабилизатором напряжения. Модуль способен определять ОВП в диапазоне от 0 до ±1600мВ и работать с различными датчиками, подключаемыми к разъему в центре платы.
Принцип действия модуля основан на измерении величины ЭДС электродной системы, значение которой пропорционально окислительной способности исследуемой жидкости. Сигнал с датчика проходит через повторитель напряжения и поступает, как на микроконтроллер модуля, так и на аналоговый выход модуля.
ОВП можно прочитать по шине I2C или определить по напряжению на аналоговом выходе модуля. Напряжение выше половины от 3.3В указывает на преобладание окислительной способности жидкости (Eh>0), а всё что ниже, на преобладание восстановительной способности (Eh<0). Точное значение определяется по формуле Eh=K(Vout-1650), где K=1, Vout - напряжение на аналоговом выходе модуля в мВ.
Модуль следует калибровать, как в процессе эксплуатации, так и после каждой замены датчика (если таковые будут выполняться).
Модуль позволяет:
- Менять свой адрес на шине I2C.
- Управлять внутренней подтяжкой линий шины I2C (по умолчанию включена).
- Узнать версию прошивки модуля.
- Указать ОВП жидкостей используемых для калибровки.
- Выполнить калибровку модуля как кнопкой на плате, так и по шине I2C.
- Узнать ОВП жидкости в которую погружен датчик.
- Узнать или изменить поправочный коэффициент.
- Узнать напряжения на входе датчика и выходе модуля.
Для работы с Trema модулем ORP-метр Flash-I2C, предлагаем воспользоваться разработанной нами библиотекой iarduino_I2C_ORP позволяющей реализовать все возможности модуля.
Подробнее про установку библиотеки читайте в нашей инструкции.
Проведение измерений:
Перед измерениями подготовьте датчик модуля к работе. Снимите колпачок содержащий буферную жидкость с датчика. Сполосните датчик модуля в дистиллированной воде, смыв остатки буферной жидкости.
Опустите датчик в исследуемую жидкость, при этом стеклянный наконечник датчика должен быть полностью погружён в жидкость.
Рекомендуется выждать не менее минуты с момента погружения датчика до проведения замеров.
Не протирайте стеклянный наконечник датчика и не касайтесь его руками.
Между измерениями разных жидкостей сполосните датчик в дистиллированной воде или стряхните остатки капель предыдущей жидкости с датчика.
Модуль следует калибровать, как в процессе эксплуатации, так и после каждой замены датчика (если таковые будут выполняться).
Получить данные с модуля можно по шине I2C, для этого предлагаем воспользоваться библиотекой iarduino_I2C_ORP. А так же ОВП жидкости можно получить с аналогового выхода датчика.
Важно: Жидкость в которую погружается датчик не должна контактировать с потенциалами источника питания модуля.
При контакте жидкости с выводом GND, показания ОВП-метра значительно уменьшатся.
При контакте жидкости с выводом VCC, показания ОВП-метра значительно увеличатся.
Это справедливо даже при контактах жидкости через высокоомные сопротивления.
Если в жидкость погружены датчики ORP-метра и TDS-метра, то не менее чем за минуту до начала измерений ОВП, необходимо извлекать датчик TDS-метра из жидкости, или отключать оба вывода этого датчика от модуля TDS при помощи электромагнитного реле.
Стоит избегать и одновременной работы ORP-метра с металлическими термометрами, корпуса которых не изолированы от потенциалов питания. Или извлекать такие термометры из жидкости не менее чем за минуту до начала измерений ОВП.
Жидкости контактирующие с воздухом окисляются находящимся в нём кислородом. При проведении измерений жидкостей с низким или отрицательным ОВП, можно видеть как со временем повышается их ОВП (проверено).
Теоретически жидкости помещённые в атмосферу водорода должны восстанавливаться с понижением ОВП (данная теория не проверялась нами на практике).
Калибровка модуля кнопкой:
Для калибровки потребуются дистиллированная вода и калибровочная (буферная) жидкость, с ОВП (ORP, Eh) = 246мВ. Все жидкости должны иметь температуру при которой планируется выполнять дальнейшие измерения.
Нужно выполнить следующие действия:
- Сполоснуть датчик в дистиллированной воде.
- Опустить датчик в калибровочную жидкость.
- Поводить датчиком избавляясь от пузырьков воздуха и подождать около 5 минут.
- Нажать на кнопку «калибровка».
- Начнут быстро поочерёдно мигать два светодиода на плате модуля, информируя о выполнении калибровки. Это займёт несколько секунд.
- При успешной калибровке оба светодиода одновременно включатся и потухнут.
- Если калибровка не выполнена, то оба светодиода одновременно мигнут 3 раза и потухнут.
- Достаньте датчик из калибровочной жидкости, встряхните его избавившись от крупных капель.
- Опустите датчик в стакан с дистиллированной водой, поводите датчиком споласкивая его, достаньте датчик и встряхните, избавившись от крупных капель.
ОВП калибровочной жидкости (по умолчанию 246мВ) можно изменить обратившись к функции setKnownEh()
. Изменение сохранится и после отключения питания.
Смена адреса модуля на шине I2C:
По умолчанию все модули FLASH-I2C имеют установленный адрес 0х09. Если вы планируете подключать более 1 модуля на шину I2C, необходимо изменить адреса модулей таким образом, чтобы каждый из них был уникальным. Более подробно о том, как изменить адрес, а также о многом другом, что касается работы FLASH-I2C модулей, вы можете прочесть в этой статье.
В первой строке скетча необходимо записать в переменную newAddress адрес, который будет присвоен модулю. После этого подключите модуль к контроллеру и загрузите скетч. Адрес может быть от 0х07 до 0х7F.
uint8_t newAddress = 0x09; // Назначаемый модулю адрес (0x07 < адрес < 0x7F). // #include <Wire.h> // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_I2C_ORP. #include <iarduino_I2C_ORP.h> // Подключаем библиотеку для работы с ORP-метром I2C-flash. iarduino_I2C_ORP sensor; // Создаём объект sensor для работы с функциями и методами библиотеки iarduino_I2C_ORP. // Если при объявлении объекта указать адрес, например, iarduino_I2C_ORP sensor(0xBB), то пример будет работать с тем модулем, адрес которого был указан. void setup(){ // Serial.begin(9600); // if( sensor.begin(&Wire) ){ // Инициируем работу с модулем, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire). Serial.print("Найден модуль 0x"); // Serial.println(sensor.getAddress(), HEX); // Выводим текущий адрес модуля. if( sensor.changeAddress(newAddress) ){ // Меняем адрес модуля на newAddress. Serial.print("Адрес изменён на 0x"); // Serial.println(sensor.getAddress(),HEX);// Выводим текущий адрес модуля. }else{ // Serial.println("Адрес не изменён!"); // } // }else{ // Serial.println("Модуль не найден!"); // } // } // // void loop(){} //
Данный пример использует библиотеку iarduino_I2C_ORP, которая работает только с модулями ORP-метр, а значит позволяет менять только их адреса.
Смена и сортировка адресов на шине I2C:
Изменить адрес любого I2C модуля серии «Flash» можно аппаратно, используя установщик адресов FLASH-I2C. Это модуль подключаемый к шине I2C, на плате которого размещён дисплей и кнопки управления, при помощи которых можно узнать количество любых устройств на шине I2C, и менять адреса модулей Flash-I2C не отключая их от шины, что значительно сократит время сборки ваших проектов. Модуль оснащён разъемом USB через который можно запитать как сам модуль, так и шину I2C, или можно запитать шину I2C без использования разъема USB на плате модуля. Установщик адресов пригодиться в проектах с большим количеством модулей Flash-I2C.
Изменить адрес любого I2C модуля серии «Flash» можно программно, о том как это сделать рассказано в статье Wiki - Программная установка адресов модулей FLASH-I2C. В этой статье рассмотрены примеры с использованием библиотеки iarduino_I2C_Address, которая позволяет получать адреса любых устройств на шине I2C, менять адреса модулей Flash-I2C не отключая их от шины, получать название, номер модели, версию прошивки модулей Flash-I2C, а главное - автоматически сортировать адреса модулей Flash-I2C даже если на шине есть устройства с одинаковыми адресами.
Примеры:
В данном разделе раскрыты примеры работы с модулем при использовании библиотеки iarduino_I2C_ORP. Сама библиотека содержит больше примеров, доступных из меню Arduino IDE: Файл / Примеры / iarduino_I2C_ORP.
Получение данных от модуля:
Данный пример демонстрирует получение ОВП жидкости.
#include <Wire.h> // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_I2C_ORP. #include <iarduino_I2C_ORP.h> // Подключаем библиотеку для работы с ORP-метром I2C-flash. iarduino_I2C_ORP sensor(0x09); // Создаём объект sensor для работы с функциями и методами библиотеки iarduino_I2C_ORP, указывая адрес модуля на шине I2C. // Если объявить объект без указания адреса (iarduino_I2C_ORP sensor;), то адрес будет найден автоматически. void setup(){ // Serial.begin(9600); // Инициируем работу с шиной UART для передачи данных в монитор последовательного порта на скорости 9600 бит/сек. sensor.begin(&Wire); // Инициируем работу с ORP-метром I2C-flash, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire). } // // void loop(){ // Serial.print( "Eh = " ); // Serial.print( sensor.getEh() ); // Выводим ОВП жидкости. Serial.print( " мВ.\r\n" ); // delay(1000); // } //
ОВП жидкости выводится в монитор последовательного порта.
Получение данных с аналогового выхода модуля:
Пример позволяет получать данные с модуля без использования библиотеки и без подключения модуля к шине I2C.
void setup(){ // Serial.begin(9600); // Инициируем работу с шиной UART для передачи данных в монитор последовательного порта на скорости 9600 бит/сек. } // // void loop(){ // float K = 1.0000f; // Поправочный коэффициент (значение по умолчанию). int Vout = (int)(analogRead(A0)*5.0f/1.0240f); // Получаем напряжение на входе A0 в мВ. int Eh = (int)(K*(float)(Vout-1650)); // Вычисляем Eh. Serial.print( "Eh = " ); // Serial.print( Eh ); // Выводим ОВП жидкости. Serial.print( " мВ.\r\n" ); // delay(1000); // } //
В коде loop()
используется поправочный коэффициент K=1.0000
, его реальное значение определяется в процессе калибровки модуля. Это значение можно получить по шине I2C используя функцию getK()
, описанную ниже.
Eh = K(Vout-1650), где К=1, Vout (напряжение на аналоговом выходе) указано в мВ.
Калибровка модуля без кнопки:
Пример позволяет выполнить калибровку модуля без нажатия на кнопку «калибровка».
#include <Wire.h> // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_I2C_ORP. #include <iarduino_I2C_ORP.h> // Подключаем библиотеку для работы с ORP-метром I2C-flash. iarduino_I2C_ORP sensor(0x09); // Создаём объект sensor для работы с функциями и методами библиотеки iarduino_I2C_ORP, указывая адрес модуля на шине I2C. // Если объявить объект без указания адреса (iarduino_I2C_ORP sensor;), то адрес будет найден автоматически. void setup(){ // Serial.begin(9600); // Инициируем работу с шиной UART для передачи данных в монитор последовательного порта на скорости 9600 бит/сек. sensor.begin(&Wire); // Инициируем работу с ORP-метром I2C-flash, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire). Serial.print("ОПУСТИТЕ ДАТЧИК В "); // Serial.print("КАЛИБРОВОЧНУЮ ЖИДКОСТЬ.\r\n"); // delay(300000); // Ждём 5 минут. sensor.setCalibration(246); // Выполняем калибровку указав ОВП калибровочной жидкости (в примере 246 мВ). while(!sensor.getCalibration()){delay(500);} // Ждём завершение калибровки. if( sensor.getCalibration()>0 ){ // Если калибровка выполнена успешно... Serial.println("КАЛИБРОВКА ВЫПОЛНЕНА!"); // }else{ // Если калибровка закончилась провалом... Serial.println("ОШИБКА КАЛИБРОВКИ!"); // } // } // // void loop(){} //
Для калибровки модуля требуется наличие дистиллированной воды и калибровочной (буферной) жидкости, с известным ОВП. Все жидкости должны иметь температуру при которой планируется выполнять дальнейшие измерения. Нужно выполнить следующие действия:
- Опустить датчик в калибровочную жидкость.
- Подождать около 5 минут.
- Запустить калибровку функцией
setCalibration()
указав ОВП жидкости. - О завершении калибровки свидетельствует ненулевое значение
getCalibration()
. - Функция
getCalibration()
возвращает +1 при успехе и -1 при провале. - Стряхнуть с датчика остатки капель и сполоснуть его в дистиллированной воде.
Указанное функцией setCalibration()
значение ОВП может отличаться от приведённого в скетче. Функция позволяет воспользоваться любой имеющейся у вас калибровочной жидкостью, ОВП которой лежит в диапазоне от 0 до ±1600мВ. Это значение не сохраняется в памяти модуля и используются только во время обращения к функции.
Настройка калибровки модуля кнопкой:
По умолчанию для калибровки кнопкой необходима буферная жидкость с ОВП = 246мВ.
Модуль позволяет изменить ОВП этой калибровочной жидкости, сохранив новое значение в своей энергонезависимой памяти, для дальнейших калибровок кнопкой.
#include <Wire.h> // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_I2C_ORP. #include <iarduino_I2C_ORP.h> // Подключаем библиотеку для работы с ORP-метром I2C-flash. iarduino_I2C_ORP sensor(0x09); // Создаём объект sensor для работы с функциями и методами библиотеки iarduino_I2C_ORP, указывая адрес модуля на шине I2C. // Если объявить объект без указания адреса (iarduino_I2C_ORP sensor;), то адрес будет найден автоматически. void setup(){ // sensor.begin(&Wire); // Инициируем работу с ORP-метром I2C-flash, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire). sensor.setKnownEh(457); // Устанавливаем ОВП жидкости для калибровки модуля кнопкой от 0 до ±1600 мВ. } // Указанное значение сохранятся и после отключения питания. // void loop(){} //
Данный скетч не выполняет калибровку, он указывает новое значение ОВП калибровочной жидкости, которая должна использоваться для всех последующих калибровок модуля кнопкой.
После загрузки данного скетча, калибровка модуля кнопкой будет осуществляться при помощи буферной жидкости с Eh=457мВ, даже после отключения питания.
Функция setKnownEh()
позволяет указать модулю какой калибровочной жидкостью вы желаете пользоваться при калибровке модуля кнопкой.
Получение настроек модуля:
Пример выводит значения используемые модулем для вычислений.
#include <Wire.h> // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_I2C_ORP. #include <iarduino_I2C_ORP.h> // Подключаем библиотеку для работы с ORP-метром I2C-flash. iarduino_I2C_ORP sensor(0x09); // Создаём объект sensor для работы с функциями и методами библиотеки iarduino_I2C_ORP, указывая адрес модуля на шине I2C. // Если объявить объект без указания адреса (iarduino_I2C_ORP sensor;), то адрес будет найден автоматически. void setup(){ // Serial.begin(9600); // Инициируем работу с шиной UART для передачи данных в монитор последовательного порта на скорости 9600 бит/сек. sensor.begin(&Wire); // Инициируем работу с ORP-метром I2C-flash, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire). Serial.print("Eh = " ); // Serial.print(sensor.getKnownEh() ); // Выводим требуемый ОВП жидкости для калибровки модуля кнопкой от 0 до ±1600 мВ. Serial.print("мВ.\r\n" ); // Serial.print("K = " ); // Serial.print(sensor.getK() ,4 ); // Выводим поправочный коэффициент от 0 до 6,5535. Serial.print("\r\n" ); // Serial.print("Vin = " ); // Serial.print(sensor.getVin() ,4 ); // Выводим напряжение на входе датчика. Serial.print("В.\r\n" ); // Serial.print("Vout = " ); // Serial.print(sensor.getVout() ,4 ); // Выводим напряжение на выходе модуля. Serial.print("В.\r\n" ); // } // // void loop(){} //
- KnownEh - Требуемый ОВП калибровочной жидкости для калибровки кнопкой.
- K - Поправочный коэффициент.
- Vin - Напряжение на входе датчика.
- Vout Напряжение на выходе модуля.
Описание функций библиотеки:
В данном разделе описаны функции библиотеки iarduino_I2C_ORP для работы с Trema модулями ORP-метр, Flash-I2C.
Библиотека iarduino_I2C_ORP может использовать как аппаратную, так и программную реализацию шины I2C. О том как выбрать тип шины I2C рассказано ниже в разделе «Подключение библиотеки», а так же на странице Wiki - расширенные возможности библиотек iarduino для шины I2C.
Подключение библиотеки:
- Если используется аппаратная шина I2C:
#include <Wire.h> // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_I2C_ORP.h #include <iarduino_I2C_ORP.h> // Подключаем библиотеку для работы с модулем. // iarduino_ORP sensor(0x09); // Создаём объект sensor для работы с функциями и методами библиотеки iarduino_I2C_ORP, указывая адрес модуля на шине I2C. // iarduino_ORP sensor; // Если адрес модуля не известен, то его можно не указывать, он будет найден автоматически. // Если адрес не указан, то на шине должен находиться только один модуль. void setup(){ // ... // sensor.begin(&Wire); // Инициируем работу с модулем, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire). ... // Доступны объекты: &Wire, &Wire1, &Wire2... } //
- Если используется программная шина I2C:
#include <iarduino_I2C_Software.h> // Подключаем библиотеку для работы с программной шиной I2C, до подключения библиотеки iarduino_I2C_ORP.h SoftTwoWire sWire(3,4); // Создаём объект программной шины I2C указав выводы которым будет назначена роль линий: SDA, SCL. // #include <iarduino_I2C_ORP.h> // Подключаем библиотеку для работы с модулем. iarduino_ORP sensor(0x09); // Создаём объект sensor для работы с функциями и методами библиотеки iarduino_I2C_ORP, указывая адрес модуля на шине I2C. // iarduino_ORP sensor; // Если адрес модуля не известен, то его можно не указывать, он будет найден автоматически. // Если адрес не указан, то на шине должен находиться только один модуль. void setup(){ // ... // sensor.begin(&sWire); // Инициируем работу с модулем, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire). ... // } //
- В обоих примерах сначала подключается библиотека для работы с шиной I2C. Для аппаратной шины библиотека
Wire.h
(предустановлена в Arduino IDE), а для программной шины библиотека iarduino_I2C_Software.h, с созданием объекта которому указываются выбранные вами выводы шины, в примере выводы(3-SDA, 4-SCL)
. - Далее подключается библиотека и создаётся объект для работы с модулем.
- В коде
Setup()
, при инициализации работы с модулем указывается ссылка на объект работы с выбранной шиной I2Cbegin(&ШИНА)
. Остальные строки кода одинаковы для любой шины I2C.
Функция begin();
- Назначение: Инициализация работы с модулем.
- Синтаксис: begin();
- Параметры:
- &ШИНА - Ссылка на объект для работы с шиной I2C на которой находится модуль.
- Для аппаратной шины: &Wire, &Wire1, &Wire2..., если подключена библиотека Wire.h
- Для программной шины: ссылка на объект библиотеки iarduino_I2C_Software.h.
- Параметр является не обязательным, по умолчанию используется ссылка &Wire.
- Возвращаемое значение: bool - результат инициализации (true или false).
- Примечание: По результату инициализации можно определить наличие модуля на шине.
- Пример:
if( sensor.begin() ){ Serial.print( "Модуль найден и инициирован!" ); } else { Serial.print( "Модуль не найден на шине I2C" ); }
Функция reset();
- Назначение: Перезагрузка модуля.
- Синтаксис: reset();
- Параметры: Нет.
- Возвращаемое значение: bool - результат перезагрузки (true или false).
- Пример:
if( sensor.reset() ){ Serial.print( "Модуль перезагружен" ); } else { Serial.print( "Модуль не перезагружен" ); }
Функция changeAddress();
- Назначение: Смена адреса модуля на шине I2C.
- Синтаксис: changeAddress( АДРЕС );
- Параметры:
- uint8_t АДРЕС - новый адрес модуля на шине I2C (целое число от 0x08 до 0x7E)
- Возвращаемое значение: bool - результат смены адреса (true или false).
- Примечание: Текущий адрес модуля можно узнать функцией getAddress().
- Пример:
if( sensor.changeAddress(0x12) ){ Serial.print( "Адрес модуля изменён на 0x12" ); } else { Serial.print( "Не удалось изменить адрес" ); }
Функция getAddress();
- Назначение: Запрос текущего адреса модуля на шине I2C.
- Синтаксис: getAddress();
- Параметры: Нет.
- Возвращаемое значение: uint8_t АДРЕС - текущий адрес модуля на шине I2C (от 0x08 до 0x7E)
- Примечание: Функция может понадобиться если адрес модуля не указан при создании объекта, а обнаружен библиотекой.
- Пример:
Serial.print( "Адрес модуля на шине I2C = 0x"); Serial.println( sensor.getAddress(), HEX );
Функция getVersion();
- Назначение: Запрос версии прошивки модуля.
- Синтаксис: getVersion();
- Параметры: Нет
- Возвращаемое значение: uint8_t ВЕРСИЯ - номер версии прошивки от 0 до 255.
- Пример:
Serial.print( "Версия прошивки модуля "); Serial.println( sensor.getVersion(), HEX );
Функция setPullI2C();
- Назначение: Управление внутрисхемной подтяжкой линий шины I2C.
- Синтаксис: setPullI2C( [ФЛАГ] );
- Параметры:
- bool ФЛАГ требующий установить внутрисхемную подтяжку линий шины I2C (true или false).
- Возвращаемое значение:
- bool - результат включения / отключения внутрисхемной подтяжки (true или false).
- Примечание:
- Вызов функции без параметра равносилен вызову функции с параметром true - установить.
- Флаг установки внутрисхемной подтяжки сохраняется в энергонезависимую память модуля, а значит будет действовать и после отключения питания.
- Внутрисхемная подтяжка линий шины I2C осуществляется до уровня 3,3 В, но допускает устанавливать внешние подтягивающие резисторы и иные модули с подтяжкой до уровня 3,3 В или 5 В, вне зависимости от состояния внутрисхемной подтяжки модуля.
- Пример:
if( sensor.setPullI2C(true ) ){ Serial.print( "Внутрисхемная подтяжка установлена." ); } if( sensor.setPullI2C(false) ){ Serial.print( "Внутрисхемная подтяжка отключена." ); }
Функция getPullI2C();
- Назначение: Запрос состояния внутрисхемной подтяжки линий шины I2C.
- Синтаксис: getPullI2C();
- Параметры: Нет.
- Возвращаемое значение: bool - ФЛАГ включения внутрисхемной подтяжки (true или false).
- Пример:
if( sensor.getPullI2C() ){ Serial.print( "Внутрисхемная подтяжка включена." ); } else { Serial.print( "Внутрисхемная подтяжка отключена." ); }
Функция getEh();
- Назначение: Запрос ОВП жидкости.
- Синтаксис: getEh();
- Параметры: Нет.
- Возвращаемое значение: число int16_t определяющее ОВП жидкости от 0 до ±1600 мВ.
- Пример:
Serial.print("Eh = " ); Serial.print(sensor.getEh() ); Serial.print(" мВ." );
Функция setCalibration();
- Назначение: Выполнение калибровки модуля без нажатия на кнопку «калибровка».
- Синтаксис: setCalibration( ОВП );
- Параметры:
- int16_t известное ОВП калибровочной жидкости от 0 ±1600 мВ.
- Возвращаемое значение:
- bool - результат запуска калибровки (true или false).
- Примечание:
- Ранее описан метод калибровки модуля при помощи кнопки. Вместо нажатия на кнопку вызывается функция.
- В отличии от калибровки кнопкой, функция позволяет указывать ОВП жидкости используемой для калибровки.
- Пример:
sensor.setCalibration( 457 ); // Выполняем калибровку жидкостью с ОВП 457мВ.
Функция getCalibration();
- Назначение: Отслеживание состояния и результата калибровки модуля.
- Синтаксис: getCalibration();
- Параметры: Нет.
- Возвращаемое значение:
- int8_t - статус калибровки (0:выполняется, +1:завершена успешно, -1:завершена провалом).
- Примечание:
- Функция отслеживает калибровку запущенную как программно, так и кнопкой.
- Пока калибровка выполняется, функция возвращает 0.
- По завершении калибровки, функция возвращает +1 или -1 информируя о результате последней калибровки.
- Пример:
while( !sensor.getCalibration() ){ delay(500); } // Ждём завершение калибровки. if( sensor.getCalibration()>0 ) { ... ; } // Если калибровка выполнена успешно... else { ... ; } // Если калибровка закончилась провалом...
Функции настройки модуля:
В данном разделе описаны функции настройки работы модуля. Модуль использует поправочный коэффициент и значения для вычислений. По умолчанию они установлены в стандартные значения и не требуют изменений.
Важно: Все значения устанавливаемые функциями настройки модуля сохраняются в энергонезависимую память модуля, а значит действуют и после отключения питания!
Функция setK();
- Назначение: Установка поправочного коэффициента.
- Синтаксис: setK( КОЭФФИЦИЕНТ );
- Параметры:
- float поправочный КОЭФФИЦИЕНТ от 0,0001 до 6,5535.
- Возвращаемое значение:
- bool - результат применения нового коэффициента (true или false).
- Примечание:
- Значение по умолчанию 1,0000.
- Поправочный коэффициент компенсирует влияние температуры, компонентов схемы и износа датчика на результат вычислений: Eh = K(Vout-Vin).
- Точное значение поправочного коэффициента определяется и сохраняется модулем в процессе калибровки: K = Eh/(Vout-Vin), где Eh - известный ОВП калибровочной жидкости в мВ, Vin и Vout - напряжения на входе датчика и выходе модуля в мВ. Значения Vin и Vout можно получить функциями
getVin()
иgetVout()
. - Предпочтительней устанавливать поправочный коэффициент запуском калибровки.
- Пример:
sensor.setK( 1.02 ); // Устанавливаем новый поправочный коэффициент.
Функция getK();
- Назначение: Запрос поправочного коэффициента.
- Синтаксис: getK();
- Параметры: Нет.
- Возвращаемое значение: float поправочный КОЭФФИЦИЕНТ от 0,0001 до 6,5535.
- Пример:
Serial.print( "Модуль использует K = " ); Serial.print( sensor.getK() );
Функция setKnownEh();
- Назначение: Установка ОВП калибровочной жидкости для калибровки модуля кнопкой.
- Синтаксис: setKnownEh( ОВП );
- Параметры:
- int16_t значение ОВП калибровочной жидкости от 0 до ±1600 мВ.
- Возвращаемое значение:
- bool - результат применения нового ОВП калибровочной жидкости (true или false).
- Примечание:
- По умолчанию для калибровки используется жидкость с ОВП = 246 мВ.
- Для калибровки датчик опускают в эту жидкость (Eh=246мВ) и нажимают на кнопку.
- Функция позволяет изменить ОВП жидкости используемой для калибровки модуля кнопкой.
- Пример:
tds.setKnownEh( 457 ); // Указываем модулю что калибровка кнопкой будет выполняться калибровочной жидкостью 457мВ.
Функция getKnownEh();
- Назначение: Запрос ОВП жидкости используемой для калибровки кнопкой.
- Синтаксис: getKnownEh();
- Параметры: Нет.
- Возвращаемое значение:
- int16_t ОВП жидкости используемой для калибровки кнопкой от 0 до ±1600мВ.
- Пример:
Serial.print( "Для калибровки модуля кнопкой требуется жидкость с Eh = " ); Serial.print( tds.getKnownEh() ); Serial.print( " мВ." );
Функция getVin();
- Назначение: Запрос напряжения поданного на вход датчика.
- Синтаксис: getVin();
- Параметры: Нет.
- Возвращаемое значение: float НАПРЯЖЕНИЕ на входе датчика, от 0 В до 6,5535 В.
- Примечание:
- Напряжение на входе датчика устанавливается резистивными делителями и должно соответствовать значению: 3.3 В / 2 = 1.65 В.
- Функция возвращает не расчётное, а реальное напряжение на входе датчика.
- Пример:
Serial.print( "На вход датчика подано напряжение Vin = " ); Serial.print( sensor.getVin() ); Serial.print( " В" );
Функция getVout();
- Назначение: Запрос напряжения на аналоговом выходе модуля.
- Синтаксис: getVout();
- Параметры: Нет.
- Возвращаемое значение: float НАПРЯЖЕНИЕ на выходе модуля, от 0 В до 6,5535 В.
- Примечание:
- Напряжение на аналоговый выход модуля подаётся с выхода операционного усилителя, вход которого подключён к выходу датчика.
- Коэффициент усиления операционного усилителя равен 1 (повторитель напряжения), значит напряжение на выходе модуля равно напряжению на выходе датчика.
- ОВП жидкости это разность потенциалов на входе и выходе датчика: Eh = K(Vout-Vin).
- Пример:
Serial.print( "Напряжение на аналоговом выходе модуля Vout = " ); Serial.print( sensor.getVout() ); Serial.print( " В" );
Обсуждение