|
Используйте TDS/EC-метр для измерения количества растворённых твёрдых веществ в воде и её удельной электрической проводимости. Датчик пригодится для проверки эффективности очистки питьевой воды в бытовом фильтре, анализа качества дистиллированной воды или приготовления питательного раствора в гидропонных системах.
Видеообзор
Подробности
Сенсор TDS/EC — это солемер и кондуктометр на одной плате.
- Солемер TDS (Total Dissolved Solids) служит для определения общего количества растворённых твердых веществ в воде от 0 до 10'000 ppm.
- Кондуктометр EC (Electrical Conductivity) служит для определения удельной электрической проводимости воды от 0 до 20,000 мСм/см.
По выходным данным TDS и EC можно судить об общей минерализации, жёсткости и солёности воды. Чувствительность датчика позволяет зафиксировать даже 2-3 крупинки пищевой соли растворённой в стакане дистиллированной воды.
Модуль нельзя использовать для определения качества питьевой воды, так как вода может содержать одновременно вредные и полезные для организма минералы.
TDS/EC-метр состоит из погружного щупа и платы управления. Щуп сенсора выполнен в пластиковом герметичном цилиндре с двумя электродами на конце. При погружении в измеряемый раствор между электродами возникает сопротивление, которое фиксирует и обрабатывает плата управления.
TDS/EC-метр относится к серии «Flash», а значит к одной шине I²C можно подключить более 100 модулей. Адрес по умолчанию установлен 0x09.
Рекомендации по измерению
- Перед измерениями протрите электроды щупа спиртом или дистиллированной водой.
- При сильном загрязнении электродов, опустите щуп в дистиллированную воду на пару часов.
- После погружения сенсора в жидкость, поводите щупом в разные стороны, как бы перемешивая жидкость. Это позволит избавиться от пузырьков воздуха, которые могут попасть между контактами электродов в процессе погружения датчика.
- Выжидайте не менее минуты с момента погружения щупа до проведения замеров.
- Не касайтесь руками электродов измерительного щупа.
- Между измерениями разных жидкостей, сполосните щуп в дистиллированной воде или стряхните остатки капель предыдущей жидкости.
- Датчик следует калибровать, как в процессе эксплуатации, так и после каждой замены датчика.
- Постоянное увеличение показаний модуля (>20 ppm в день), означает о испарении жидкости в которую погружён датчик или о наличии в ней микрофлоры.
Подключение и настройка
TDS/EC-метр поддерживает два выходных интерфейса для подключения к контроллеру: аналоговый и цифровой I²C.
Аналоговый интерфейс
Что понадобится
- 1× TDS/EC-метр для воды с щупом
- 1× Arduino Uno
- 1× Соединительные провода «папа-мама»
- 1× Кабель USB (A — B)
- 1× Стакан для воды
Рекомендуем также обратить внимание на дополнительные платы расширения:
- Trema Shield поможет подключить модуль к Arduino с помощью аккуратного шлейфа.
- Trema Set Shield поможет подключить модуль к Arduino без проводов вовсе.
Схема устройства
Схема устройства с Trema Shield
Схема устройства с Trema Set Shield
В завершении опустите измерительный щуп в воду.
Программная настройка
- Настройте плату Arduino Uno в среде Arduino IDE.
- Переходите к примерам работы через аналоговый интерфейс.
Цифровой интерфейс I²C
Что понадобится
- 1× TDS/EC-метр для воды с щупом
- 1× Arduino Uno
- 1× Соединительные провода «папа-мама»
- 1× Кабель USB (A — B)
- 1× Стакан для воды
Рекомендуем также обратить внимание на дополнительные платы расширения:
- Trema Shield поможет подключить модуль к Arduino с помощью аккуратного шлейфа.
- Trema Set Shield поможет подключить модуль к Arduino без проводов вовсе.
Схема устройства
Схема устройства с Trema Shield
Схема устройства с Trema Set Shield
Подключение к программной шине I2C:
При использовании программной шины I2C, модуль можно подключить к любым выводам Arduino, но потребуется дополнительно установить библиотеку iarduino_I2C_Software.h, для создания программной шины I2C, указав номера выбранных вами выводов. О том как это сделать читайте ниже в разделе «Подключение библиотеки», а так же на странице Wiki - Расширенные возможности библиотек iarduino для шины I2C.
В завершении опустите измерительный щуп в воду.
Программная настройка
- Настройте плату Arduino Uno в среде Arduino IDE.
- Скачайте и установите библиотеку iarduino_I2C_TDS. Для инсталляции рекомендуем использовать нашу инструкцию по установке библиотек для Arduino.
- Выполните калибровку датчика.
- Переходите к примерам работы через цифровой интерфейс I²C.
Калибровка датчика
Для повышения точности показаний датчик необходимо калибровать. TDS/EC-метр поддерживает аппаратную и программную калибровку.
Калибровка датчика доступна только на шине I²C, с аналоговым сигналом калибровочные коэффициенты необходимо высчитывать самостоятельно.
Для калибровки понадобиться два буферных раствора с разной концентрацией солей, которые можно купить или приготовить самостоятельно.
Приготовление калибровочных растворов
Рассмотрим процесс приготовления буферных растворов для дальнейшей калибровки TDS/EC-метра. Для примера будем приготавливать растворы с концентрацией 500 ppm и 1500 ppm.
Что понадобится
- 1× Хлорид калия KCl
- 3× Стакан для воды
- 1× Дистиллированная вода (H2O)
- 1× Шприц
- 1× Весы
Если хлорида калия KCl нет, можно использовать хлорид натрия NaCl — это обычная пищевая соль. Однако в обычной поваренной соли содержится много примесей, которые негативно будут влиять на точность показаний.
Инструкция по приготовлению
- Пронумеруйте стаканы цифрами «0», «1» и «2» соответственно.
- В стакане «0» приготовим эталонный раствор хлорида калия с концентрацией 10'000 ppm:
- В стакан «0» насыпьте 1 г (1'000 мг) калиевой соли (KCl).
- В стакан «0» налейте 50-70 мл дистиллированной воды.
Перемешайте содержимое стакана до полного растворения соли. - В стакан «0» долейте дистиллированной воды до получения 100 мл раствора.
Перемешайте содержимое стакана до полной однородности раствора. - В итоге в стакане «0» мы получили эталонный раствор 10'000 ppm.
(1'000 мг / 100 мл = 10'000 мг/л = 10'000 ppm).
- В стакане «1» приготовим первую калибровочную жидкость 500 ppm:
- В стакан «1» перелейте 5 мл эталонного раствора из стакана «0» с помощью шприца.
Теперь в стакане «1» находится 5 мл начального раствора.
(1'000 мг / 100 мл = 50 мг / 5 мл). - В стакан «1» долейте дистиллированной воды до получения 100 мл раствора.
Перемешайте содержимое стакана. - В итоге в стакане «1» мы получили первую калибровочную жидкость 500 ppm.
(50 мг / 100 мл = 500 мг/л = 500 ppm).
- В стакан «1» перелейте 5 мл эталонного раствора из стакана «0» с помощью шприца.
- В стакане «2» приготовим вторую калибровочную жидкость 1'500 ppm:
- В стакан «2» перелейте 15 мл эталонного раствора из стакана «0» с помощью шприца.
Теперь в стакане «2» находится 15 мл начального раствора.
(1'000 мг / 100 мл = 150 мг / 15 мл). - В стакан «2» долейте дистиллированной воды до получения 100 мл раствора.
Перемешайте содержимое стакана. - В итоге в стакане «2» мы получили вторую калибровочную жидкость 1'500 ppm.
(150 мг / 100 мл = 1'500 мг/л = 1'500 ppm).
- В стакан «2» перелейте 15 мл эталонного раствора из стакана «0» с помощью шприца.
- Эталонный раствор в стакане «0» больше не понадобится. А калибровочные растворы в стаканах «1» и «2» должны настояться не менее 2 часов.
- Формула: ШПРИЦ = КОНЦЕНТРАЦИЯ * КОЛИЧЕСТВО / ЭТАЛОН
Эта формула позволяет определить, сколько эталонной жидкости (из стакана «0») нужно взять в шприц для приготовления калибровочной жидкости в любых концентрациях.
- Пример: Нужно создать 100 мл калибровочной жидкости 1'500 ppm из эталонной 10'000 ppm.
- КОНЦЕНТРАЦИЯ = 1'500 ppm.
- КОЛИЧЕСТВО = 100 мл.
- ЭТАЛОН = 10'000 ppm.
- ШПРИЦ = КОНЦЕНТРАЦИЯ * КОЛИЧЕСТВО / ЭТАЛОН = 1'500 * 100 / 10'000 = 15 мл.
Пример показывает почему на 4 пункте инструкции, для приготовления 100 мл жидкости с концентрацией 1'500 ppm, мы переливали шприцом именно 15 мл эталонного раствора.
Аппаратная калибровка
Аппаратная калибровка — это калибровка датчика при помощи кнопки.
Что понадобится
- Подключите и настройте TDS/EC-метр через цифровой интерфейс I²C.
- Приготовьте калибровочные растворы. По умолчанию концентрация первого раствора 500 ppm, а второго — 1500 ppm.
Инструкция
- Протрите электроды щупа спиртом или дистиллированной водой.
- Опустите щуп датчика в первую калибровочную жидкость. В нашем примере концентрация первой калибровочной жидкости установлена в 500 ppm.
- Подождите одну минуту.
- Нажмите кнопку «калибровка». Должен начать мигать светодиод «1».
- Подождите пока не начнут перемигиваться светодиоды «1» и «2».
- Вытащите щуп датчика из первой калибровочной жидкости.
- Протрите электроды щупа спиртом или дистиллированной водой.
- Опустите щуп датчика во вторую калибровочную жидкость. В нашем примере концентрация второй калибровочной жидкости установлена в 1500 ppm.
- Подождите одну минуту.
- Нажмите кнопку «калибровка». Должен начать мигать светодиод «2».
- Подождите пока светодиод «2» не перестанет мигать.
- Если светодиод «2» погас и светодиод «1» не включился, значит калибровка выполнена.
- Одновременное включение двух светодиодов информирует об ошибке калибровки.
Примечания
- Концентрация эталонного раствора для первой стадии — 500 ppm, для второй стадии — 1500 ppm.
- Новые эталонные значения концентрации калибровочных растворов можно установить функцией
setKnownTDS()
. - Температура калибровочных жидкостей должна быть близка к 25 °С. Если температура жидкостей отличается от 25 °С, то её реальное значение необходимо указать функцией
set_t()
. - Об ошибке калибровки указывают не только светодиоды, но и функция
getCalibration()
, см. пример ниже. - Возможные причины ошибки калибровки: неправильно приготовлены калибровочные жидкости, перепутан порядок калибровочных жидкостей (на первой стадии использовали жидкость предназначенную для второй стадии и наоборот), плохой контакт модуля с щупом, неисправен модуль.
Программная калибровка
Программная калибровка — это калибровка датчика без помощи кнопки.
Что понадобится
- Подключите и настройте TDS/EC-метр через цифровой интерфейс I²C.
- Приготовьте калибровочные растворы. По умолчанию концентрация первого раствора 500 ppm, а второго — 1500 ppm.
Инструкция
- Протрите электроды щупа спиртом или дистиллированной водой.
- Опустите щуп датчика в первую калибровочную жидкость. В нашем примере концентрация первой калибровочной жидкости установлена в 500 ppm.
- Подождите одну минуту.
- Вызовите функцию
setCalibration()
с параметрами 1 и концентрацией первого калибровочного раствора. - Вытащите щуп датчика из первой калибровочной жидкости.
- Протрите электроды щупа спиртом или дистиллированной водой.
- Опустите щуп датчика во вторую калибровочную жидкость. В нашем примере концентрация второй калибровочной жидкости установлена в 1500 ppm.
- Подождите одну минуту.
- Вызовите функцию
setCalibration()
с параметрами 2 и концентрацией второго калибровочного раствора. - Вытащите щуп датчика из второй калибровочной жидкости.
Исходный код
#include <Wire.h> // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_I2C_TDS. #include <iarduino_I2C_TDS.h> // Подключаем библиотеку для работы с TDS/EC-метром I2C-flash. iarduino_I2C_TDS tds(0x09); // Создаём объект tds для работы с функциями и методами библиотеки iarduino_I2C_TDS, указывая адрес модуля на шине I2C. // Если объявить объект без указания адреса (iarduino_I2C_TDS tds;), то адрес будет найден автоматически. float val_t = 25.0; // Температура калибровочных жидкостей. // void setup(){ // // Подготовка: // delay(500); // Ждём завершение переходных процессов связанных с подачей питания. Serial.begin(9600); // Инициируем работу с шиной UART для передачи данных в монитор последовательного порта на скорости 9600 бит/сек. tds.begin(&Wire); // Инициируем работу с TDS/EC-метром I2C-flash, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire). tds.set_t(val_t); // Указываем температуру жидкости в °С. Serial.println("ОПУСТИТЕ ДАТЧИК В 1 РАСТВОР (500 ppm)."); // delay(60000); // Ждём 1 минуту. // Запускаем 1 стадию калибровки: // tds.setCalibration(1, 500); // Выполняем 1 стадию калибровки указав известную концентрацию 1 раствора (в примере 500ppm ). Serial.println("КАЛИБРОВКА..."); // while( tds.getCalibration()==1 ){ delay(500); } // Ждём завершения 1 стадии калибровки... // Меняем калибровочные растворы: // Serial.println("СПОЛОСНИТЕ ДАТЧИК."); // delay(30000); // Ждём 30 секунд. Serial.println("ОПУСТИТЕ ДАТЧИК В 2 РАСТВОР (1500 ppm)."); // delay(60000); // Ждём 1 минуту. // Запускаем 2 стадию калибровки: // tds.setCalibration(2, 1500); // Выполняем 2 стадию калибровки указав известную концентрацию 2 раствора (в примере 1500ppm ). Serial.println("КАЛИБРОВКА..."); // while( tds.getCalibration()==2 ){ delay(500); } // Ждём завершения 2 стадии калибровки... // Выводим результат калибровки: // bool f = tds.getCalibration(); // Получаем результат калибровки. Serial.print("КАЛИБРОВКА ВЫПОЛНЕНА "); // if( f==0 ){ Serial.println("УСПЕШНО." ); } // if( f==3 ){ Serial.println("С ОШИБКОЙ."); } // Serial.println("---------------------------------------"); // } // // void loop(){ // // Выводим минерализацию и электропроводность жидкости: // Serial.print((String)"TDS="+tds.getTDS()+"мг/л, " ); // Serial.print((String)"EC="+tds.getEC()+"мСм/см.\r\n"); // delay(1000); // } //
Примечания
- Мы использовали концентрации эталонных растворов для первой стадии — 500 ppm, для второй стадии — 1500 ppm. Однако вы можете указывать свои значения калибровочных растворов в функции
setCalibration()
. - Температура калибровочных жидкостей должна быть близка к 25 °С. Если температура жидкостей отличается от 25 °С, то её реальное значение необходимо указать функцией
set_t()
. - Функция
getCalibration()
возвращает стадию калибровки 1 или 2, сообщает о простое 0, а начиная с версии библиотеки 1.3.0 информирует об ошибке калибровки 3 и позволяет получить дополнительную информацию. - В приведённом коде выполнялось отслеживание стадий калибровки обращением к функции
getCalibration()
с задержками в 500мс т.к. более частые обращения к модулю во время калибровки снижают точность этой калибровки.
Смена адреса модуля на шине 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_TDS. #include <iarduino_I2C_TDS.h> // Подключаем библиотеку для работы с TDS/EC-метром I2C-flash. iarduino_I2C_TDS tds; // Создаём объект tds для работы с функциями и методами библиотеки iarduino_I2C_TDS. // Если при объявлении объекта указать адрес, например, tds(0xBB), то пример будет работать с тем модулем, адрес которого был указан. void setup(){ // Serial.begin(9600); // if( tds.begin(&Wire) ){ // Инициируем работу с TDS/EC-метром, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire). Serial.print("Найден TDS/EC-метр 0x"); // Serial.println( tds.getAddress(), HEX ); // Выводим текущий адрес модуля. if( tds.changeAddress(newAddress) ){ // Меняем адрес модуля на newAddress. Serial.print("Адрес изменён на 0x"); // Serial.println(tds.getAddress(),HEX ); // Выводим текущий адрес модуля. }else{ // Serial.println("Адрес не изменён!"); // } // }else{ // Serial.println("TDS/EC-метр не найден!"); // } // } // // void loop(){ // } //
Данный пример использует библиотеку iarduino_I2C_TDS, которая работает только с модулями TDS/EC-метр, а значит позволяет менять только их адреса.
Смена и сортировка адресов на шине 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 даже если на шине есть устройства с одинаковыми адресами.
Примеры работы
Рассмотрим базовые примеры для работы с TDS/EC-метром.
Для повышения точности показаний — датчик необходимо калибровать.
Аналоговый интерфейс
Выведем данные с датчика через аналоговый интерфейс.
Исходный код
const uint8_t pin_Vm = A0; // Определяем вывод к которому подключён аналоговый выход модуля. // const float Vcc = 5.0f; // Напряжение питания Arduino. const float Vccm = 3.3f; // Напряжение питания ОУ модуля (внутрисхемно используется 3,3В). const float Ka = 1000.0f; // Множитель степенной функции (определяется калибровкой модуля). Можно получить функцией getKa(). const float Kb = -5.0f; // Степень степенной функции (определяется калибровкой модуля). Можно получить функцией getKb(). const float Kt = 0.02f; // Температурный коэффициент (зависит от состава жидкости). const float Kp = 0.5f; // Коэффициент пересчёта (зависит от состава жидкости). const float Kf = 0.85f; // Коэффициент передачи ФВЧ+ФНЧ модуля (зависит от частоты переменного тока используемого для проведения измерений). const float T = 25.0f; // Опорная температура в °C. const float t = 25.0f; // Температура исследуемой жидкости в °C. // void setup(){ // delay(500); // Ждём завершение переходных процессов связанных с подачей питания. Serial.begin(9600); // Инициируем работу с шиной UART для передачи данных в монитор последовательного порта на скорости 9600 бит/сек. } // // void loop(){ // // Получаем напряжение на выходе модуля: // float Vm = analogRead(pin_Vm)*Vcc/1023; // В. // Получаем удельную электропроводность: // float S = Ka*pow((Vccm-Kf*Vm)/2,Kb)/1000; // мСм/см. // Приводим удельную электропроводность // // жидкости к опорной температуре T: // float EC = S / (1+Kt*(t-T)); // мСм/см. // Получаем минерализацию жидкости: // float TDS = EC * Kp; // ppm. // Выводим полученные данные: // Serial.print((String)"S="+S+"мСм/см, "); // Serial.print((String)"EC="+EC+"мСм/см, "); // Serial.print((String)"TDS="+TDS+"мг/л\r\n"); // delay(1000); // } //
Результат работы
После прошивки контроллера, в COM-порт Arduino будет выводиться измеренная электропроводность жидкости S, приведенная электропроводность жидкости EC и количество растворённых твёрдых веществ в жидкости TDS.
Коэффициенты Ka и Kb определяются модулем в процессе калибровки, их значения можно получить функциями getKa()
и getKb()
соответственно.
Цифровой интерфейс I²C
Выведем данные с датчика через цифровой интерфейс I²C.
Исходный код
#include <Wire.h> // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_I2C_TDS. #include <iarduino_I2C_TDS.h> // Подключаем библиотеку для работы с TDS/EC-метром I2C-flash. iarduino_I2C_TDS tds(0x09); // Создаём объект tds для работы с функциями и методами библиотеки iarduino_I2C_TDS, указывая адрес модуля на шине I2C. // Если объявить объект без указания адреса (iarduino_I2C_TDS tds;), то адрес будет найден автоматически. float val_t = 25.0; // Температура исследуемой жидкости. // void setup(){ // delay(500); // Ждём завершение переходных процессов связанных с подачей питания. Serial.begin(9600); // Инициируем работу с шиной UART для передачи данных в монитор последовательного порта на скорости 9600 бит/сек. tds.begin(&Wire); // Инициируем работу с TDS/EC-метром I2C-flash, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire). } // // void loop(){ // tds.set_t(val_t); // Указываем текущую температуру жидкости. Serial.print((String)"Ro=" +tds.getRo() +"Ом, " ); // Выводим общее измеренное сопротивление. Serial.print((String)"S=" +tds.get_S() +"мСм/см, "); // Выводим измеренную удельную электропроводность жидкости. Serial.print((String)"EC=" +tds.getEC() +"мСм/см, "); // Выводим удельную электропроводность жидкости приведённую к опорной температуре. Serial.print((String)"TDS="+tds.getTDS()+"ppm\r\n" ); // Выводим количество растворённых твёрдых веществ в жидкости. delay(1000); // } //
Результат работы
После прошивки контроллера, в COM-порт Arduino будет выводиться общее сопротивление медлу выводами щупа Ro, измеренная электропроводность жидкости S, приведенная электропроводность жидкости EC и количество растворённых твёрдых веществ в жидкости TDS.
Больше примеров вы найдёте из меню Arduino IDE: Файл / Примеры / iarduino_I2C_TDS.
Элементы платы
Датчик TDS/EC состоит из измерительного щупа и платы управления.
Щуп сенсора выполнен в пластиковом герметичном цилиндре с двумя электродами на конце. При погружении в измеряемый раствор или воду между электродами возникает сопротивление, которое фиксирует и обрабатывает плата управления.
Плата управления генерирует переменное напряжение, которое поступает на электроды щупа. При погружении щупа в жидкость, между его электродами возникает сопротивление, которое обратно пропорционально электропроводности жидкости. Далее сигнал усиливается операционным усилителем, считывается цифровой частью схемы, выпрямляется, сглаживается и через еще один операционный усилитель поступает на аналоговый выход датчика.
Модуль построен на базе микроконтроллера STM32F030F4 и двух операционных усилителях LMC7101 и LM358. На плате также распаяна кнопка калибровки, информационные светодиоды и контакты для подключения к контроллеру.
Кнопка калибровки
Кнопка «Калибровка» служит для выполнению аппаратной калибровки модуля. Все подробности по использованию кнопки читайте в разделе калибровка модуля.
Информационные светодиоды
Информационные светодиоды «1» и «2» служат для наглядности выполнения аппаратной и программной калибровки модуля. Все подробности читайте в разделе калибровка модуля.
Trema-контакты
TDS/EC-метр поддерживает два выходных интерфейса для подключения к контроллеру: аналоговый и цифровой I²C.
Аналоговый интерфейс
Контакт | Функция | Подключение |
---|---|---|
S | Выходной сигнал сенсора | Подключите к пину ввода-вывода микроконтроллера с поддержкой АЦП. |
V | Питание | Подключите к питанию микроконтроллера. |
G | Земля | Подключите к земле микроконтроллера. |
Цифровой интерфейс I²C
Контакт | Функция | Подключение |
---|---|---|
SDA | Линия данных шины I²C | Подключите к пину SDA микроконтроллера. |
SCL | Линия тактирования шины I²C | Подключите к пину SCL микроконтроллера. |
V | Питание | Подключите к питанию микроконтроллера. |
G | Земля | Подключите к земле микроконтроллера. |
Формулы и определения
Формулы
- Vout ≈ (Vccm - 2Vm) / Kf
- Ro = (R + Rd ) Xc / (R + Rd + Xc)
- S = Ka * Vout ^ Kb / 1000
- EC = S / ( 1 + Kt * (t - T))
- TDS = EC × Kp × 1000
Определения
- Vccm — напряжение питания ОУ модуля 3,3 В.
- Vm — напряжение на аналоговом выходе модуля.
- Kf — коэффициент передачи ФВЧ+ФНЧ на втором ОУ. Коэффициент используется для получения Vout из Vm. Для измерений на частоте 2кГц (по умолчанию) Kf≈0,85.
- Vout — напряжение на выходе первого ОУ. Можно вычислить из напряжения на выходе модуля Vm или запросить функцией
getVout()
, что даст более точное значение. - S — измеренная удельная электрическая проводимость в мСм/см. Вычисляется из электрической проводимости G (мСм) и постоянной датчика Kd (см-1). Измеренную удельную электропроводность S можно запросить функцией
get_S()
. - EC — приведённая удельная электропроводность жидкости. Электрическая проводимость жидкости S сильно зависит от её текущей температуры t: чем выше температура жидкости, тем выше её электрическая проводимость и соответственно наоборот. По этому удельную электрическую проводимость S измеряют при любой температуре t, а затем результат приводят к опорной температуре T получая EC. Приведённую удельную электропроводность EC можно запросить функцией
get_EC()
. - TDS — количество растворённых твёрдых веществ в ppm (мг/л воды). Это значение определяется умножением приведённой удельной электрической проводимости ЕС (мкСм/см) на коэффициент пересчёта Kp = 0,5 (по умолчанию). Количество растворённых твёрдых веществ TDS можно запросить функцией
get_TDS()
. - t — текущая температура жидкости. Модуль определяет все параметры измеряя сопротивление жидкости, которое сильно зависит от её температуры. По этому модулю требуется указывать текущую температуру жидкости для получения корректных значений. Текущую температуру t нужно установить функцией
set_t()
. - T — опорная температура жидкости, при которой произведение её измеренной удельной электропроводности и коэффициента пересчёта Kp равно концентрации растворённых твёрдых веществ в жидкости TDS. Опорную температуру T можно запросить функцией
get_T()
. - Kt — температурный коэффициент жидкости, который показывает на сколько сильно электрическая проводимость жидкости зависит от её температуры. Температурный коэффициент жидкости Kt используется для приведения удельной электрической проводимости жидкости S измеренной при текущей температуре t к удельной электрической проводимости жидкости EC для опорной температуры T. Температурный коэффициент жидкости Kt можно запросить функцией
getKt()
. - Kp — коэффициент пересчёта для преобразования приведённой удельной электрической проводимости жидкости EC в количество растворённых твёрдых веществ TDS. Коэффициент пересчёта Kp можно запросить функцией
get_Kp()
. - Коэффициенты степенной функции Ka и Kb определяются модулем самостоятельно в процессе калибровки и автоматически сохраняются в его памяти. Калибровка является предпочтительным методом указания коэффициентов Ka и Kb.
Описание функций библиотеки:
В данном разделе описаны функции библиотеки iarduino_I2C_TDS для работы с TDS/EC-метром, I2C-flash.
Библиотека поддерживает работу с датчиком только по шине I²C, с аналоговым сигналом программный модуль работать не будет.
Библиотека iarduino_I2C_TDS может использовать как аппаратную, так и программную реализацию шины I2C. О том как выбрать тип шины I2C рассказано ниже в разделе «Подключение библиотеки», а так же на странице Wiki - расширенные возможности библиотек iarduino для шины I2C.
Подключение библиотеки:
- Если используется аппаратная шина I2C:
#include <Wire.h> // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_I2C_TDS.h #include <iarduino_I2C_TDS.h> // Подключаем библиотеку для работы с модулем. // iarduino_I2C_TDS tds(0x09); // Создаём объект tds для работы с функциями и методами библиотеки iarduino_I2C_TDS, указывая адрес модуля на шине I2C. // iarduino_I2C_TDS tds; // Если адрес модуля не известен, то его можно не указывать, он будет найден автоматически. // Если адрес не указан, то на шине должен находиться только один модуль. void setup(){ // ... // tds.begin(&Wire); // Инициируем работу с модулем, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire). ... // Доступны объекты: &Wire, &Wire1, &Wire2... } //
- Если используется программная шина I2C:
#include <iarduino_I2C_Software.h> // Подключаем библиотеку для работы с программной шиной I2C, до подключения библиотеки iarduino_I2C_TDS.h SoftTwoWire sWire(3,4); // Создаём объект программной шины I2C указав выводы которым будет назначена роль линий: SDA, SCL. // #include <iarduino_I2C_TDS.h> // Подключаем библиотеку для работы с модулем. iarduino_I2C_TDS tds(0x09); // Создаём объект tds для работы с функциями и методами библиотеки iarduino_I2C_TDS, указывая адрес модуля на шине I2C. // iarduino_I2C_TDS tds; // Если адрес модуля не известен, то его можно не указывать, он будет найден автоматически. // Если адрес не указан, то на шине должен находиться только один модуль. void setup(){ // ... // tds.begin(&sWire); // Инициируем работу с модулем, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire). ... // } //
- В обоих примерах сначала подключается библиотека для работы с шиной I2C. Для аппаратной шины библиотека
Wire.h
(предустановлена в Arduino IDE), а для программной шины библиотека iarduino_I2C_Software.h, с созданием объекта которому указываются выбранные вами выводы шины, в примере выводы(3-SDA, 4-SCL)
. - Далее подключается библиотека и создаётся объект для работы с модулем.
- В коде
Setup()
, при инициализации работы с модулем указывается ссылка на объект работы с выбранной шиной I2Cbegin(&ШИНА)
. Остальные строки кода одинаковы для любой шины I2C.
Функция begin()
- Назначение: инициализация работы с модулем.
- Синтаксис:
bool begin()
- Параметры:
- &ШИНА - Ссылка на объект для работы с шиной I2C на которой находится модуль.
- Для аппаратной шины: &Wire, &Wire1, &Wire2..., если подключена библиотека Wire.h
- Для программной шины: ссылка на объект библиотеки iarduino_I2C_Software.h.
- Параметр является не обязательным, по умолчанию используется ссылка &Wire.
-
Возвращаемое значение:
true
: инициализация модуля прошла успешно.false
: инициализация модуля прошла не успешно.
- Примечания: по результату инициализации можно определить наличие модуля на шине.
- Пример:
if (tds.begin()) { Serial.print("Модуль найден и инициирован!"); } else { Serial.print("Инициализация модуля прошла не успешно"); }
Функция reset()
- Назначение: перезагрузка модуля.
- Синтаксис:
bool reset()
- Параметры: нет
-
Возвращаемое значение:
true
: перезагрузка модуля прошла успешно.false
: перезагрузка модуля прошла не успешно.
- Пример:
if (tds.begin()) { Serial.print("Перезагрузка модуля прошла успешно."); } else { Serial.print("Перезагрузка модуля прошла не успешно."); }
Функция changeAddress()
- Назначение: смена адреса модуля на шине I²C.
- Синтаксис:
bool changeAddress(uint8_t newAddr)
-
Параметры:
newAddr
: новый адрес модуля на шине I²C. Доступный диапазон адресов от0x08
до0x7E
.
-
Возвращаемое значение:
true
: адрес модуля изменён успешно.false
: адрес модуля изменён не успешно.
-
Примечания:
- Адрес по умолчанию
0x09
. - Адрес модуля сохраняется и после отключения питания.
- Текущий адрес модуля можно запросить функцией
getAddress()
.
- Адрес по умолчанию
- Пример:
if (tds.changeAddress(0x12)) { Serial.print("Адрес модуля изменён успешно."); } else { Serial.print("Адрес модуля изменён не успешно."); }
Функция getAddress()
- Назначение: запрос текущего адреса модуля на шине I²C.
- Синтаксис:
uint8_t getAddress()
- Параметры: нет.
- Возвращаемое значение: текущий адрес модуля от
0x08
до0x7E
. - Примечания: новый адрес модуля можно установить функцией
changeAddress()
. - Пример:
Serial.print("Адрес модуля на шине I²C: 0x"); Serial.println(tds.getAddress(), HEX);
Функция getVersion()
- Назначение: запрос версии прошивки модуля.
- Синтаксис:
uint8_t getVersion()
- Параметры: нет
- Возвращаемое значение: номер версии прошивки от
0
до255
. - Пример:
Serial.print("Версия прошивки модуля: "); Serial.println(tds.getVersion());
Функция setPullI2C()
- Назначение: управление внутрисхемной подтяжкой линий шины I²C.
- Синтаксис:
bool setPullI2C(bool f)
-
Параметры:
-
f
: флаг состояния внутрисхемной подтяжки. Допустимые значения:true
: установить внутрисхемную подтяжку.false
: снять внутрисхемную подтяжку.
true
.
-
-
Возвращаемое значение:
true
: внутрисхемная подтяжка изменена успешно.false
: внутрисхемная подтяжка изменена не успешно.
-
Примечания:
- Флаг установки внутрисхемной подтяжки сохраняется и после отключения питания.
- Текущее состояния внутрисхемной подтяжки можно запросить функцией
getPullI2C()
. - Внутрисхемная подтяжка линий шины I²C осуществляется до уровня 3,3 В. Однако датчик допускает устанавливать внешние подтягивающие резисторы и модули с подтяжкой до уровня 5 В.
- Пример:
if (tds.setPullI2C()) { Serial.print("Внутрисхемная подтяжка установлена."); } if (tds.setPullI2C(true)) { Serial.print("Внутрисхемная подтяжка установлена."); } if (tds.setPullI2C(false)) { Serial.print("Внутрисхемная подтяжка отключена."); }
Функция getPullI2C()
- Назначение: запрос состояния внутрисхемной подтяжки линий шины I²C.
- Синтаксис:
bool getPullI2C()
- Параметры: нет.
-
Возвращаемое значение:
true
: внутрисхемная подтяжка включена.false
: внутрисхемная подтяжка отключена.
- Примечания: состояния внутрисхемной подтяжки можно установить функцией
setPullI2C()
. - Пример:
if (tds.getPullI2C()) { Serial.print("Внутрисхемная подтяжка включена."); } else { Serial.print("Внутрисхемная подтяжка отключена."); }
Функция setFrequency()
- Назначение: установка частоты переменного тока используемого для измерений.
- Синтаксис:
bool setFrequency(uint16_t frequency)
- Параметры:
frequency
: частота переменного тока от50
до5000
Гц.-
Возвращаемое значение:
true
: установка частоты прошла успешно.false
: установка частоты прошла не успешно.
-
Примечания:
- Значение по умолчанию
2000
Гц. - Указанная частота переменного тока сохраняется и после отключения питания.
- Текущую частоту переменного тока можно запросить функцией
getFrequency()
. - Для модулей версии 6 и выше, частота автоматически определяется в процессе калибровки. Модуль подбирает частоту максимально согласованную с параметрами щупа, кабеля и входного каскада операционного усилителя.
- Значение по умолчанию
- Пример:
// Указываем модулю проводить измерения током с частотой 100 Гц. tds.setFrequency(100);
Функция getFrequency()
- Назначение: запрос частоты переменного тока используемого для измерений.
- Синтаксис:
uint16_t getFrequency()
- Параметры: нет.
- Возвращаемое значение: частота переменного тока от
50
до5000
Гц. - Примечания: новую частоту переменного тока можно установить функцией
setFrequency()
. - Пример:
Serial.print("Модуль использует переменный ток с частотой: "); Serial.print(tds.getFrequency()); Serial.print(" Гц.");
Функция setCalibration()
- Назначение: программная калибровка модуля, т.е. без нажатия на кнопку «калибровка».
- Синтаксис:
bool setCalibration(uint8_t num, uint16_t tds)
- Параметры:
num
: номер стадии калибровки. Допустимые значения1
или2
.tds
: концентрация эталонного раствора используемого для текущей стадии калибровки. Допустимые значения от0
до10000
ppm.-
Возвращаемое значение:
true
: программная калибровка указанной стадии прошла успешно.false
: программная калибровка указанной стадии прошла не успешно.
-
Примечания:
- Концентрации эталонных растворов на первой и второй стадии калибровки должны быть разными.
- Текущую стадию программной калибровки можно запросить функцией
getCalibration
. - Функция
setCalibration
выполняет программную калибровку. Модуль TDS/EC также поддерживает аппаратную калибровку с помощью функцииsetKnownTDS()
и кнопки «Калибровка». - При успешном завершении калибровки изменятся значения Ka и Kb, а в модулях версии 6 и выше, будет определена новая частота переменного тока используемого для измерений. Изменённые значения можно прочитать функциями
getKa
,getKb
иgetFrequency
.
- Пример:
// Выполняем первую стадию калибровки // Устанавливаем концентрацию первого эталонного раствора 750 ppm tds.setCalibration(1, 750); // Ждём 1 минуту delay(60000); // Выполняем вторую стадию калибровки // Устанавливаем концентрацию второго эталонного раствора 3000 ppm tds.setCalibration(2, 3000);
Функция getCalibration()
- Назначение: получение текущей стадии калибровки модуля.
- Синтаксис:
uint8_t getCalibration([& uint8_t])
- Необязательный параметр: адрес переменной для получения дополнительной информации.
- Возвращаемое значение: текущая стадия калибровки модуля.
- 0 - калибровка не выполняется.
- 1 - выполняется 1 стадия калибровки модуля.
- 2 - выполняется 2 стадия калибровки модуля.
- 3 - ошибка калибровки (только для модулей версии 6 и выше).
- Примечания:
- Функция отражает состояние как аппаратной, так и программной калибровки.
- Аппаратная калибровка запускается нажатием кнопки на плате модуля.
- Программную калибровку можно выполнить функцией
setCalibration()
. - Для модулей версии 6 и выше, можно указать в качестве параметра адрес переменной, по которому будет отправляться дополнительная информация о калибровке.
- 0 - нет дополнительной информации.
- 1 - Выполняется поиск частоты (в начале 1 стадии калибровки).
- 2 - Выполняется накопление данных электропроводности (на 1 и 2 стадии).
- 3 - Модуль ожидает запуск 2 стадии калибровки (между 1 и 2 стадиями).
- Слишком частые запросы к модулю в процессе калибровки могут ухудшить результат вычислений. Рекомендуется не отправлять запросы чаще 300...500мс.
- Пример для модулей любой версии:
Serial.print("Текущая стадия калибровки модуля: "); Serial.println(tds.getCalibration());
- Пример для модулей любой версии:
Serial.println("Ждём завершения 2 стадии калибровки..."); while( tds.getCalibration() == 2 ){ delay(500); } Serial.println("2 стадия калибровки завершена.");
- Пример для модулей версии 6 и выше:
i = tds.getCalibration( &j ); if( i==0 ){ Serial.println("КАЛИБРОВКА ВЫПОЛНЕНА УСПЕШНО!" ); } if( i==1 ){ Serial.println("ВЫПОЛНЯЕТСЯ 1 СТАДИЯ КАЛИБРОВКИ..."); } if( i==2 ){ Serial.println("ВЫПОЛНЯЕТСЯ 2 СТАДИЯ КАЛИБРОВКИ..."); } if( i==3 ){ Serial.println("ОШИБКА КАЛИБРОВКИ!" ); } if( j==0 ){ Serial.println("- Нет действий..." ); } if( j==1 ){ Serial.println("- Поиск частоты..." ); } if( j==2 ){ Serial.println("- Накопление данных..." ); } if( j==3 ){ Serial.println("- Ожидание 2 стадии..." ); }
Функция setKnownTDS()
- Назначение: установка новых эталонных значений для аппаратной калибровки модуля с помощью кнопки «калибровка».
- Синтаксис:
bool setKnownTDS(uint8_t num, uint16_t tds)
- Параметры:
num
: номер стадии калибровки. Допустимые значения1
или2
.tds
: концентрация эталонного раствора используемого для калибровки. Допустимые значения от0
до10000
ppm.-
Возвращаемое значение:
true
: запись эталонного значения для указанной стадии аппаратной калибровки прошла успешно.false
: запись эталонного значения для указанной стадии аппаратной калибровки прошла не успешно.
-
Примечания:
- Значения по умолчанию: концентрация эталонного раствора для первой стадии —
500
ppm, для второй стадии —1500
ppm. - Концентрации растворов на первой и второй стадии должны быть разными.
- Указанная концентрация сохраняется и после отключения питания.
- Текущие эталонные значения концентрации калибровочных растворов можно запросить функцией
getKnownTDS()
. - Функция
setKnownTDS()
не выполняет калибровку модуля, а только записывает концентрации растворов для дальнейшей аппаратной калибровки с помощью кнопки «Калибровка». Модуль TDS/EC также поддерживает программную калибровку с помощью функцииsetCalibration()
без кнопки «Калибровка».
- Значения по умолчанию: концентрация эталонного раствора для первой стадии —
- Пример:
// Для первой стадии аппаратной калибровки (кнопкой) // Устанавливаем концентрацию первого эталонного раствора 750 pmm tds.setKnownTDS(1, 750); // Для второй стадии аппаратной калибровки (кнопкой) // Устанавливаем концентрацию второго эталонного раствора 3000 pmm tds.setKnownTDS(2, 3000);
Функция getKnownTDS()
- Назначение: запрос концентрации раствора для аппаратной калибровки модуля с помощью кнопки «калибровка».
- Синтаксис:
uint16_t getKnownTDS(uint8_t num)
- Параметры: нет.
num
: стадия калибровки. Допустимое значение1
или2
.- Возвращаемое значение: требуемая концентрация раствора от
0
до10000
ppm. - Примечания: новые эталонные значения концентрации калибровочных растворов можно установить функцией
setKnownTDS()
. - Пример:
Serial.print("Для калибровки модуля кнопкой требуются растворы с концентрацией "); Serial.print(tds.getKnownTDS(1)); Serial.print(" и " ); Serial.print(tds.getKnownTDS(2)); Serial.print(" ppm.");
Функция getRo()
- Назначение: запрос общего измеренного сопротивления Ro.
- Синтаксис:
uint32_t getRo()
- Параметры: нет.
- Возвращаемое значение: общее измеренное сопротивление Ro от
0
до1000000
Ом. - Пример:
Serial.print("Общее измеренное сопротивление: "); Serial.print(tds.getRo()); Serial.print(" Ом.");
Функция getVout()
- Назначение: запрос напряжения на выходе первого операционного усилителя.
- Синтаксис:
float getVout()
- Параметры: нет.
- Возвращаемое значение: напряжение на выходе первого ОУ от
0.0
до6.5535
В. - Пример:
Serial.print("Напряжение на выходе ОУ: "); Serial.print(tds.getVout());
Функция get_S()
- Назначение: запрос удельной электропроводности жидкости.
- Синтаксис:
uint16_t get_S()
- Параметры: нет.
- Возвращаемое значение: удельная электропроводность жидкости от
0.0
до65.535
мСм/см. -
Примечания:
- Функция имеет синтаксис
get_S
, а неget_σ
для совместимости с таблицей ASCII. - Библиотеки версии ниже 1.3.0 выводили электропроводность в мкСм/см.
- Функция имеет синтаксис
- Пример:
Serial.print("Измеренная удельная электропроводность жидкости: "); Serial.print(tds.get_S()); Serial.print(" мСм/см.");
Функция getEC()
- Назначение: запрос удельной электропроводности жидкости приведённой к опорной температуре T.
- Синтаксис:
uint16_t getEC()
- Параметры: нет.
- Возвращаемое значение: удельная электропроводность жидкости приведённая к опорной температуре. Доступный диапазон от
0.0
до65.535
мСм/см. - Примечания:
- Приведённая удельная электропроводность EC это значение электропроводности S если бы оно было измерено при опорной температуре T °С, а не текущей температуре t °С.
- Библиотеки версии ниже 1.3.0 выводили приведённую электропроводность в мкСм/см.
- Пример:
Serial.print("Приведённая удельная электропроводность жидкости: "); Serial.print(tds.getEC()); Serial.print(" мСм/см.");
Функция getTDS()
- Назначение: запрос количества растворённых твёрдых веществ в жидкости.
- Синтаксис:
uint16_t getTDS()
- Параметры: нет.
- Возвращаемое значение: количество растворённых твёрдых веществ в жидкости от
0
до65535
ppm (мг/л воды). - Пример:
Serial.print("Концентрация раствора: "); Serial.print(tds.getTDS()); Serial.print(" ppm");
Функция set_t()
- Назначение: установка текущей температуры жидкости.
- Синтаксис:
bool set_t(float val_t)
- Параметры:
val_t
: текущая температура жидкости от0
до63.75
°С.-
Возвращаемое значение:
true
: текущая температура модулю отправлена успешно.false
: текущая температура модулю отправлена не успешно.
- Пример:
// Устанавливаем модулю текущую температуру жидкости 23.5 °С tds.set_t(23.5f);
Функция set_T();
- Назначение: установка опорной температуры.
- Синтаксис:
bool set_T(float val_T);
- Параметры:
val_T
: опорная температура от0
до63.75
°С.-
Возвращаемое значение:
true
: применения новой опорной температуры прошло успешно.false
: применения новой опорной температуры прошло не успешно.
-
Примечания:
- Значение по умолчанию
25
°С. - Обычно используют значения
20
или25
°С. - Текущую опорную температуру можно запросить функцией
get_T()
.
- Значение по умолчанию
- Пример:
// Устанавливаем модулю новую опорную температуру 25.0 °С. tds.set_T(25.0f);
Функция get_T();
- Назначение: запрос опорной температуры.
- Синтаксис:
float get_T()
- Параметры: нет.
- Возвращаемое значение: опорная температура от
0
до63.75
°С. - Примечания: новую опорную температуру можно установить функцией
set_T()
. - Пример:
Serial.print("Модуль использует опорную температуру: "); Serial.print(tds.get_T()); Serial.print(" С" );
Функция setKt()
- Назначение: установка температурного коэффициента жидкости Kt.
- Синтаксис:
bool setKt(float val_Kt)
- Параметры:
val_Kt
: значение температурного коэффициента жидкости от0
до6.5535
.-
Возвращаемое значение:
true
: применения нового температурного коэффициента прошло успешно.false
: применения нового температурного коэффициента прошло не успешно.
- Примечания:
- Значение по умолчанию
0.02
. - Текущий температурный коэффициент жидкости можно запросить функцией
getKt()
. - Пример:
// Указываем модулю новый температурный коэффициент жидкости 0.1 tds.setKt(0.1f);
Функция getKt()
- Назначение: запрос температурного коэффициента жидкости Kt.
- Синтаксис:
float getKt()
- Параметры: нет.
- Возвращаемое значение: температурный коэффициент от
0
до6.5535
. - Примечания: новый температурный коэффициент жидкости можно установить функцией
setKt()
. - Пример:
Serial.print("Модуль использует Kt: "); Serial.print(tds.getKt());
Функция setKp()
- Назначение: установка коэффициента пересчёта Kp.
- Синтаксис:
bool setKp(float val_Kp)
- Параметры:
val_Kp
: значение коэффициента пересчёта от0.01
до2.55
.-
Возвращаемое значение:
true
: применения нового коэффициента пересчёта прошло успешно.false
: применения нового коэффициента пересчёта прошло не успешно.
- Примечания:
- Значение по умолчанию
0.5
. - Обычно используют коэффициенты
0.5
,0.64
или0.7
. - Текущий коэффициент пересчёта можно запросить функцией
getKp()
. - Пример:
// Указываем модулю новый коэффициент пересчёта 0.7 tds.setKp(0.7f);
Функция getKp()
- Назначение: запрос текущего коэффициента пересчёта Kp.
- Синтаксис:
float getKp()
. - Параметры: нет.
- Возвращаемое значение: коэффициент пересчёта от
0.01
до2.55
. - Примечания: новый коэффициент пересчёта можно установить функцией
setKp()
. - Пример:
Serial.print("Модуль использует Kp: "); Serial.print(tds.getKp());
Функция setKa()
- Назначение: установка множителя степенной функции Ka.
- Синтаксис:
bool setKa(float val_Ka)
- Параметры:
val_Ka
: множитель степенной функции от0.1
до1677721.5
.-
Возвращаемое значение:
true
: установка степенного множителя прошла успешно.false
: установка степенного множителя прошла не успешно.
- Примечания:
- Значение по умолчанию
1000.0
. - Указанное значение сохраняется и после отключения питания.
- Множитель степенной функции можно запросить функцией
getKa()
. - Библиотеки версии ниже 1.3.0 принимали значение от 0 до 167'772,15.
- Пример:
// Указываем модулю новый множитель степенной функции 2100 tds.setKa(2100.0f);
Функция getKa()
- Назначение: запрос множителя степенной функции Ka.
- Синтаксис:
float getKa()
- Параметры: нет.
- Возвращаемое значение: множитель степенной функции от
0.1
до1677721.5
. - Примечания:
- Новый множитель степенной функции можно установить функцией
setKa()
. - Библиотеки версии ниже 1.3.0 возвращали значение от 0 до 167'772,15.
- Пример:
Serial.print("Модуль использует Ka: "); Serial.print(tds.getKa());
Функция setKb()
- Назначение: установка степени степенной функции Kb.
- Синтаксис:
bool setKb(float val_Kb)
- Параметры:
- val_Kb: степень степенной функции от
-0.01
до-65.535
. -
Возвращаемое значение:
true
: установка новой степени прошла успешно.false
: установка новой степени прошла не успешно.
- Примечания:
- Значение по умолчанию
-5.0.
- Указанное значение сохраняется и после отключения питания.
- Степень степенной функции можно запросить функцией
getKb()
. - Пример:
// Указываем модулю новую степень степенной функции -7.5 tds.setKb(-7.5f);
Функция getKb();
- Назначение: запрос степени степенной функции.
- Синтаксис:
float getKb()
- Параметры: нет.
- Возвращаемое значение: степень степенной функции
-0.01
до-65.535
. - Примечания: новую степень степенной функции можно установить функцией
setKb()
. - Пример:
Serial.print("Модуль использует Kb: "); Serial.print(tds.getKb());
Габаритный чертёж
Характеристики
- Модель: TDS/EC-метр для воды с щупом (Trema-модуль Flash-I²C)
- Напряжение питания Vcc: 3,3–5 В
- Потребляемый ток Icc: до 10 мА
- Диапазон измерений TDS: 0–10'000 ppm
- Диапазон измерений ЕС: 0–20,000 мСм/см
- Точность показаний: ±5%
- Калибровка: аппаратная (с кнопкой) и программная (без кнопки)
-
Аналоговый интерфейс:
- Подключение: контакты S-V-G
- Выходное напряжение: 0–Vcc В
-
I²C интерфейс:
- Подключение: контакты I²C
- I²C-адрес: 0x09 (по умолчанию)
- Чип Flash-I²C: микроконтроллер STM32F030F4
- Длина кабеля щупа: 0,6 м
- Размеры платы: 30×30 мм
- Размеры щупа: 63,2×13×13 мм
Ссылки
- TDS/EC-метр в магазине.
- Руководство по использованию для Raspberry Pi.
- Технический Datasheet для разработчиков.
- Библиотека для Arduino.
- Библиотека для Raspberry Pi.
- Библиотека iarduino_I2C_Software.
- Как установить библиотеки для Arduino.
- Как установить библиотеки для Raspberry Pi.
- Wiki - Расширенные возможности библиотек для Arduino на шине I²C.
- Общие особенности модулей линейки Flash-I²C.
- Wiki - Программная установка адресов модулей FLASH-I2C.
Обсуждение