КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

TDS/EC-метр для воды с щупом: руководство по использованию для Arduino



Используйте 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 Sensor Trema Flash I²C Info 1

TDS/EC-метр относится к серии «Flash», а значит к одной шине I²C можно подключить более 100 модулей. Адрес по умолчанию установлен 0x09.

Рекомендации по измерению

  • Перед измерениями протрите электроды щупа спиртом или дистиллированной водой.
  • При сильном загрязнении электродов, опустите щуп в дистиллированную воду на пару часов.
  • После погружения сенсора в жидкость, поводите щупом в разные стороны, как бы перемешивая жидкость. Это позволит избавиться от пузырьков воздуха, которые могут попасть между контактами электродов в процессе погружения датчика.
  • Выжидайте не менее минуты с момента погружения щупа до проведения замеров.
  • Не касайтесь руками электродов измерительного щупа.
  • Между измерениями разных жидкостей, сполосните щуп в дистиллированной воде или стряхните остатки капель предыдущей жидкости.
  • Датчик следует калибровать, как в процессе эксплуатации, так и после каждой замены датчика.
  • Постоянное увеличение показаний модуля (>20 ppm в день), означает о испарении жидкости в которую погружён датчик или о наличии в ней микрофлоры.

Подключение и настройка

TDS/EC-метр поддерживает два выходных интерфейса для подключения к контроллеру: аналоговый и цифровой I²C.

Аналоговый интерфейс

Что понадобится

Рекомендуем также обратить внимание на дополнительные платы расширения:

  • Trema Shield поможет подключить модуль к Arduino с помощью аккуратного шлейфа.
  • Trema Set Shield поможет подключить модуль к Arduino без проводов вовсе.

Схема устройства

TDS/EC Sensor Trema Flash I²C WiringWiring 1.1

Схема устройства с Trema Shield

TDS/EC Sensor Trema Flash I²C Wiring 1.2

Схема устройства с Trema Set Shield

TDS/EC Sensor Trema Flash I²C Wiring 1.3

В завершении опустите измерительный щуп в воду.

TDS/EC Sensor Trema Flash I²C Wiring 1.4

Программная настройка

  1. Настройте плату Arduino Uno в среде Arduino IDE.
  2. Переходите к примерам работы через аналоговый интерфейс.

Цифровой интерфейс I²C

Что понадобится

Рекомендуем также обратить внимание на дополнительные платы расширения:

  • Trema Shield поможет подключить модуль к Arduino с помощью аккуратного шлейфа.
  • Trema Set Shield поможет подключить модуль к Arduino без проводов вовсе.

Схема устройства

TDS/EC Sensor Trema Flash I²C Wiring 2.1

Схема устройства с Trema Shield

TDS/EC Sensor Trema Flash I²C Wiring 2.2

Схема устройства с Trema Set Shield

TDS/EC Sensor Trema Flash I²C Wiring 2.3

Подключение к программной шине I2C:

При использовании программной шины I2C, модуль можно подключить к любым выводам Arduino, но потребуется дополнительно установить библиотеку iarduino_I2C_Software.h, для создания программной шины I2C, указав номера выбранных вами выводов. О том как это сделать читайте ниже в разделе «Подключение библиотеки», а так же на странице Wiki - Расширенные возможности библиотек iarduino для шины I2C.

В завершении опустите измерительный щуп в воду.

TDS/EC Sensor Trema Flash I²C Wiring 2.4

Программная настройка

  1. Настройте плату Arduino Uno в среде Arduino IDE.
  2. Скачайте и установите библиотеку iarduino_I2C_TDS. Для инсталляции рекомендуем использовать нашу инструкцию по установке библиотек для Arduino.
  3. Выполните калибровку датчика.
  4. Переходите к примерам работы через цифровой интерфейс I²C.

Калибровка датчика

Для повышения точности показаний датчик необходимо калибровать. TDS/EC-метр поддерживает аппаратную и программную калибровку.

Калибровка датчика доступна только на шине I²C, с аналоговым сигналом калибровочные коэффициенты необходимо высчитывать самостоятельно.

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

Приготовление калибровочных растворов

Рассмотрим процесс приготовления буферных растворов для дальнейшей калибровки TDS/EC-метра. Для примера будем приготавливать растворы с концентрацией 500 ppm и 1500 ppm.

Что понадобится

  • Хлорид калия KCl
  • 3× Стакан для воды
  • 1× Дистиллированная вода (H2O)
  • 1× Шприц
  • 1× Весы

Если хлорида калия KCl нет, можно использовать хлорид натрия NaCl — это обычная пищевая соль. Однако в обычной поваренной соли содержится много примесей, которые негативно будут влиять на точность показаний.

Инструкция по приготовлению

  1. Пронумеруйте стаканы цифрами «0», «1» и «2» соответственно.
  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)
      .
  3. В стакане «1» приготовим первую калибровочную жидкость 500 ppm:
    • В стакан «1» перелейте 5 мл эталонного раствора из стакана «0» с помощью шприца.
      Теперь в стакане «1» находится 5 мл начального раствора.
      (1'000 мг / 100 мл = 50 мг / 5 мл)
      .
    • В стакан «1» долейте дистиллированной воды до получения 100 мл раствора.
      Перемешайте содержимое стакана.
    • В итоге в стакане «1» мы получили первую калибровочную жидкость 500 ppm.
      (50 мг / 100 мл = 500 мг/л = 500 ppm)
      .
  4. В стакане «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)
      .
  5. Эталонный раствор в стакане «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 мл эталонного раствора.

      Аппаратная калибровка

      Аппаратная калибровка — это калибровка датчика при помощи кнопки.

      Что понадобится

      1. Подключите и настройте TDS/EC-метр через цифровой интерфейс I²C.
      2. Приготовьте калибровочные растворы. По умолчанию концентрация первого раствора 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(), см. пример ниже.
      • Возможные причины ошибки калибровки: неправильно приготовлены калибровочные жидкости, перепутан порядок калибровочных жидкостей (на первой стадии использовали жидкость предназначенную для второй стадии и наоборот), плохой контакт модуля с щупом, неисправен модуль.

      Программная калибровка

      Программная калибровка — это калибровка датчика без помощи кнопки.

      Что понадобится

      1. Подключите и настройте TDS/EC-метр через цифровой интерфейс I²C.
      2. Приготовьте калибровочные растворы. По умолчанию концентрация первого раствора 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);                                               //
      }                                                               //
      

      Примечания

      1. Мы использовали концентрации эталонных растворов для первой стадии — 500 ppm, для второй стадии — 1500 ppm. Однако вы можете указывать свои значения калибровочных растворов в функции setCalibration().
      2. Температура калибровочных жидкостей должна быть близка к 25 °С. Если температура жидкостей отличается от 25 °С, то её реальное значение необходимо указать функцией set_t().
      3. Функция getCalibration() возвращает стадию калибровки 1 или 2, сообщает о простое 0, а начиная с версии библиотеки 1.3.0 информирует об ошибке калибровки 3 и позволяет получить дополнительную информацию.
      4. В приведённом коде выполнялось отслеживание стадий калибровки обращением к функции 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 состоит из измерительного щупа и платы управления.

      TDS/EC Sensor Trema Flash I²C Annotation 1

      Щуп сенсора выполнен в пластиковом герметичном цилиндре с двумя электродами на конце. При погружении в измеряемый раствор или воду между электродами возникает сопротивление, которое фиксирует и обрабатывает плата управления.

      TDS/EC Sensor Trema Flash I²C Annotation 2

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

      TDS/EC Sensor Trema Flash I²C Annotation 3

      Модуль построен на базе микроконтроллера 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(), при инициализации работы с модулем указывается ссылка на объект работы с выбранной шиной I2C begin(&ШИНА). Остальные строки кода одинаковы для любой шины 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 Sensor Trema Flash I²C Dimensions

      Характеристики

      • Модель: 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 мм

      Ссылки




      Обсуждение

      Гарантии и возврат Используя сайт Вы соглашаетесь с условями