Tds es meter hold инструкция на русском языке

Используйте TDS/EC-метр для измерения количества растворённых твёрдых веществ в воде и её удельной электрической проводимости. Датчик пригодится для проверки эффективности очистки питьевой воды в бытовом фильтре, анализа качества дистиллированной воды или приготовления питательного раствора в гидропонных системах.

Видеообзор

Подробности

Сенсор TDS/EC — это солемер и кондуктометр на одной плате.

  • Солемер TDS (Total Dissolved Solids) служит для определения общего количества растворённых твердых веществ в воде от 0 до 10000 ppm.
  • Кондуктометр EC (Electrical Conductivity) служит для определения удельной электрической проводимости воды от 0 до 20000 мкСм/см.

По выходным данным 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.

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

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

  • 1× TDS/EC-метр для воды с щупом
  • 1× Arduino Uno
  • 1× Соединительные провода «папа-мама»
  • 1× Кабель USB (A — B)
  • 1× Стакан для воды

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

  • 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

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

  • 1× TDS/EC-метр для воды с щупом
  • 1× Arduino Uno
  • 1× Соединительные провода «папа-мама»
  • 1× Кабель USB (A — B)
  • 1× Стакан для воды

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

  • 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

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

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.

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

  • 1× Хлорид калия 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».
      • Подождите пока не погаснут светодиоды «1» и «2».
      • Вытащите щуп датчика из второй калибровочной жидкости.

      Примечания

      • Концентрация эталонного раствора для первой стадии — 500 ppm, для второй стадии — 1500 ppm.
      • Новые эталонные значения концентрации калибровочных растворов можно установить функцией setKnownTDS().
      • Температура калибровочных жидкостей должна быть близка к 25 °С. Если температура жидкостей отличается от 25 °С, то её реальное значение необходимо указать функцией set_t().

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

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

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

      1. Подключите и настройте TDS/EC-метр через цифровой интерфейс I²C.
      2. Приготовьте калибровочные растворы. По умолчанию концентрация первого раствора 500 ppm, а второго — 1500 ppm.

      Инструкция

      • Протрите электроды щупа спиртом или дистиллированной водой.
      • Опустите щуп датчика в первую калибровочную жидкость. В нашем примере концентрация первой калибровочной жидкости установлена в 500 ppm.
      • Подождите одну минуту.
      • Вызовите функцию setCalibration() с параметрами 1 и концентрацией первого калибровочного раствора.
      • Вытащите щуп датчика из первой калибровочной жидкости.
      • Протрите электроды щупа спиртом или дистиллированной водой.
      • Опустите щуп датчика во вторую калибровочную жидкость. В нашем примере концентрация второй калибровочной жидкости установлена в 1500 ppm.
      • Подождите одну минуту.
      • Вызовите функцию setCalibration() с параметрами 2 и концентрацией второго калибровочного раствора.
      • Вытащите щуп датчика из второй калибровочной жидкости.

      Исходный код

      // Подключаем библиотеку для работы с TDS/EC-метром на шине I²C
      #include <iarduino_I2C_TDS.h> 
      
      // Создаём объект tds для работы с функциями библиотеки iarduino_I2C_TDS
      // В параметрах явно указываем адрес модуля 0x09
      iarduino_I2C_TDS tds(0x09);
      
      void setup() {
        // Открываем монитор COM-порта
        Serial.begin(9600);
        // Инициируем работу с TDS/EC-метром I2C-flash.
        tds.begin();
        // Указываем текущую температуру жидкости в °C
        tds.set_t(22.5f);
        // Выполняем первую стадию калибровки
        // Устанавливаем концентрацию первого эталонного раствора 500 ppm
        Serial.print("Опустите датчик в первый раствор 500 ppm.");
        tds.setCalibration(1, 500);
        // Ждём 60 секунд
        delay(60000);
        // Ждём завершения первой стадии калибровки
        while (tds.getCalibration() == 1)
            ;
        // Перерыв
        Serial.println("Сполосните щуп датчика.");
        // Ждём 30 секунд
        delay(30000);
        // Выполняем вторую стадию калибровки
        // Устанавливаем концентрацию второго эталонного раствора 1500 ppm
        Serial.print("Опустите датчик во второй раствор 1500 ppm.");
        tds.setCalibration(2, 1500);
        // Ждём 60 секунд
        delay(60000);
        // Ждём завершения второй стадии калибровки
        while (tds.getCalibration() == 2)
            ;
        // Калибровка выполнена
        Serial.println("Калибровка выполнена.");
      }
      
      void loop() {
      }
      

      Примечания

      • Мы использовали концентрации эталонных растворов для первой стадии — 500 ppm, для второй стадии — 1500 ppm. Однако вы можете указывать свои значения калибровочных растворов в функции setCalibration().
      • Температура калибровочных жидкостей должна быть близка к 25 °С. Если температура жидкостей отличается от 25 °С, то её реальное значение необходимо указать функцией set_t().

      Примеры работы

      Рассмотрим базовые примеры для работы с TDS/EC-метром.

      Для повышения точности показаний — датчик необходимо калибровать.

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

      Выведем данные с датчика через аналоговый интерфейс.

      Исходный код

      // Определяем ядро платы Arduino
      // для установки рабочего напряжения
      #if defined(__AVR__)
      #define OPERATING_VOLTAGE 5.0
      #else
      #define OPERATING_VOLTAGE 3.3
      #endif
      
      // GPIO пин с поддержкой АЦП, к которому подключен
      // бесконтактный датчик уровня жидкости
      constexpr auto PIN_SENSOR_TDS = A0;
      // Опорное напряжение Arduino
      constexpr float VCC_ARDUINO = OPERATING_VOLTAGE;
      // Напряжение питания ОУ модуля
      constexpr float VCC_M = 3.3f;
      // Множитель степенной функции,
      // определяется калибровкой модуля
      constexpr float Ka = 1000.0f;
      // Степень степенной функции
      // определяется калибровкой модуля
      constexpr float Kb = -5.0f;
      // Температурный коэффициент, зависит от состава жидкости
      constexpr float Kt = 0.02f;
      // Коэффициент пересчёта, зависит от состава жидкости
      constexpr float Kp = 0.5f;
      // Коэффициент передачи ФВЧ + ФНЧ модуля
      // зависит от частоты переменного тока используемого измерений
      constexpr float Kf = 0.85f;
      // Опорная температура в °C
      constexpr float T = 25.0f;
      
      void setup() {
        // Открываем монитор COM-порта
        Serial.begin(9600);
      }
      
      void loop() {
        // Указываем текущую температуру жидкости в °C
        float t = 25.0f;
        // Получаем напряжение на выходе модуля в вольтах
        float Vm = analogRead(PIN_SENSOR_TDS) * VCC_ARDUINO / 1023;
        // Получаем удельную электропроводность жидкости
        float S = Ka * pow((VCC_M - Kf * Vm) / 2, Kb);
        // Приводим удельную электропроводность жидкости к опорной температуре T
        float EC = S / (1 + Kt * (t - T));
        // Получаем количество растворённых твёрдых веществ в жидкости
        float TDS = EC * Kp;
        // Выводим полученные данные
        Serial.print((String) "S = " + S + "мкСм/смt");
        Serial.print((String) "EC = " + EC + "мкСм/смt");
        Serial.println((String) "TDS =" + TDS + "мг/л");
        // Ждём 1 секунду
        delay(1000);
      }  
      

      Результат работы

      После прошивки контроллера, в COM-порт Arduino будет выводиться измеренная электропроводность жидкости S, приведенная электропроводность жидкости EC и количество растворённых твёрдых веществ в жидкости TDS.

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

      Выведем данные с датчика через цифровой интерфейс I²C.

      Исходный код

      // Подключаем библиотеку для работы с TDS/EC-метром на шине I²C
      #include <iarduino_I2C_TDS.h> 
      
      // Создаём объект tds для работы с функциями библиотеки iarduino_I2C_TDS
      // В параметрах явно указываем адрес модуля 0x09
      iarduino_I2C_TDS tds(0x09);
      
      void setup() {
        // Открываем монитор COM-порта
        Serial.begin(9600);
        // Инициируем работу с TDS/EC-метром I2C-flash.
        tds.begin();
      }
      
      void loop() {
        // Указываем текущую температуру жидкости в °C
        tds.set_t(22.5f);
        // Получаем общее измеренное сопротивление
        float Ro = tds.getRo();
        // Получаем измеренную удельную электропроводность жидкости
        float S = get_S();
        // Получаем приведённую удельную электропроводность жидкости
        float EC = tds.getEC();
        // Получаем количество растворённых твёрдых веществ в жидкости
        float TDS = tds.getTDS();
        // Выводим полученные данные
        Serial.print((String) "Ro = " + Ro + "Омt");
        Serial.print((String) "S = " + S + "мкСм/смt");
        Serial.print((String) "EC = " + EC + "мкСм/смt");
        Serial.println((String) "TDS = " + TDS + "мг/л");
        // Ждём 1 секунду
        delay(1000);
      }
      

      Результат работы

      После прошивки контроллера, в COM-порт Arduino будет выводиться измеренная электропроводность жидкости S, приведенная электропроводность жидкости EC и количество растворённых твёрдых веществ в жидкости 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 Земля Подключите к земле микроконтроллера.

      Формулы и определения

      Формулы

      • Ro = (R + Rd ) Xc / (R + Rd + Xc)
      • S = Ka * (( VCC_M — Kf * V_M ) / 2) ^ Kb.
      • EC = S / ( 1 + Kt * (t — T))
      • TDS = EC × Kp

      Определения

      • VCC_M — напряжение питания ОУ модуля 3,3 В.
      • V_M — напряжение на выходе модуля. Напряжение на выходе модуля V_M можно запросить функцией 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().
      • Kf — коэффициент передачи частоты тока используемого для измерений.
      • Коэффициенты степенной функции Ka и Kb определяются модулем самостоятельно в процессе калибровки и автоматически сохраняются в его памяти. Калибровка является предпочтительным методом указания коэффициентов Ka и Kb.

      Библиотека для Arduino

      Для работы TDS/EC-метра с контроллерами Arduino мы разработали библиотеку iarduino_I2C_TDS. Программный модуль поддерживает аппаратную и программную реализацию I²C, подробности читайте в разделе расширенные возможности библиотек для Arduino на шине I²C.

      Библиотека поддерживает работу с датчиком только по шине I²C, с аналоговым сигналом программный модуль работать не будет.

      Установка

      Для старта скачайте и установите библиотеку iarduino_I2C_TDS. Для инсталляции рекомендуем использовать нашу инструкцию по установке библиотек для Arduino.

      Подключение

      • Назначение: подключение библиотеки.
      • Синтаксис: #include <iarduino_I2C_TDS.h>
      • Примечания:

        • Библиотека подключается в самом начале программы.
        • Подключение библиотеки обязательное действие, иначе функции работать не будут.
      • Примеры:
      // Подключаем библиотеку для работы с TDS/EC-модулем
      #include <iarduino_I2C_TDS.h>
      

      Конструктор

      • Назначение: создание объекта для работы с функциями библиотеки iarduino_I2C_TDS
      • Синтаксис: iarduino_I2C_TDS tds(uint8_t address)
      • Параметры:

        • address: адрес модуля на шине I²C. По умолчанию адрес модуля 0x09. При вызове без параметров — библиотека сама найдет модуль и определит его адрес.
      • Возвращаемое значение: нет
      • Примечания:

        • Конструктор вызывается в самом начале программы.
        • Вызов конструктор обязателен, иначе функции работать не будут.
      • Пример:

      Если адрес модуля известен:

      // Создаём объект tds для работы с функциями библиотеки iarduino_I2C_TDS
      // В параметре конструктора передаём адрес модуля
      iarduino_I2C_TDS tds(0x09);
      

      Если адрес модуля не известен:

      // Создаём объект tds для работы с функциями библиотеки iarduino_I2C_TDS
      // В параметре конструктора не передаём адрес модуля 
      iarduino_I2C_TDS tds;
      

      Функция begin()

      • Назначение: инициализация работы с модулем.
      • Синтаксис: bool begin()
      • Параметры: нет
      • Возвращаемое значение:

        • 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().
        • Так как частота влияет на реактивное сопротивление датчика Xc, то после изменения частоты требуется произвести калибровку модуля.
      • Пример:
      // Указываем модулю проводить измерения током с частотой 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() и кнопки «Калибровка».
      • Пример:
      // Выполняем первую стадию калибровки
      // Устанавливаем концентрацию первого эталонного раствора 750 ppm
      tds.setCalibration(1, 750);
      // Ждём 1 минуту
      delay(60000);
      // Выполняем вторую стадию калибровки
      // Устанавливаем концентрацию второго эталонного раствора 3000 ppm
      tds.setCalibration(2, 3000);
      

      Функция getCalibration()

      • Назначение: получение текущей стадии программной калибровки модуля.
      • Синтаксис: uint8_t getCalibration()
      • Параметры: нет.
      • Возвращаемое значение: текущая стадия программной калибровки модуля — 1 или 2
      • Примечания: программную калибровку модуля можно выполнить функцией setCalibration().
      • Пример:
      Serial.print("Текущая стадия программной калибровки модуля: ");
      Serial.println(tds.getCalibration());
      

      Функция 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()
      • Параметры: нет.
      • Возвращаемое значение: выходное напряжение.
      • Пример:
      Serial.print("Выходное напряжение датчика: ");
      Serial.print(tds.getVout());
      

      Функция get_S()

      • Назначение: запрос удельной электропроводности жидкости.
      • Синтаксис: uint16_t get_S()
      • Параметры: нет.
      • Возвращаемое значение: удельная электропроводность жидкости от 0 до 65536 мкСм/см.
      • Примечания:

        • Функция имеет синтаксис get_S, а не get_σ для совместимости с таблицей ASCII.
      • Пример:
      Serial.print("Измеренная удельная электропроводность жидкости: ");
      Serial.print(tds.get_S());
      Serial.print(" мкСм/см.");
      

      Функция getEC()

      • Назначение: запрос удельной электропроводности жидкости приведённой к опорной температуре T.
      • Синтаксис: uint16_t getEC()
      • Параметры: нет.
      • Возвращаемое значение: удельная электропроводность жидкости приведённая к опорной температуре. Доступный диапазон от 0 до 65536 мкСм/см.
      • Пример:
      Serial.print("Приведённая удельная электропроводность жидкости: ");
      Serial.print(tds.getEC());
      Serial.print(" мкСм/см.");
      

      Функция getTDS()

      • Назначение: запрос количества растворённых твёрдых веществ в жидкости.
      • Синтаксис: uint16_t getTDS()
      • Параметры: нет.
      • Возвращаемое значение: количество растворённых твёрдых веществ в жидкости от 0 до 65536 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.5);
      

      Функция set_T();

      • Назначение: установка опорной температуры.
      • Синтаксис: bool set_T(float val_T);
      • Параметры:
        • val_T: опорная температура от 0 до 63.75 °С.
      • Возвращаемое значение:

        • true: применения новой опорной температуры прошло успешно.
        • false: применения новой опорной температуры прошло не успешно.
      • Примечания:

        • Значение по умолчанию 25 °С.
        • Текущую опорную температуру можно запросить функцией get_T().
      • Пример:
      // Устанавливаем модулю новую опорную температуру 23.5 °С.
      tds.set_T(23.5);
      

      Функция 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.1);
      

      Функция 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.
        • Текущий коэффициент пересчёта можно запросить функцией getKp().
      • Пример:
      // Указываем модулю новый коэффициент пересчёта 0.75
      tds.setKp(0.75);
      

      Функция 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.01 до 167772.15.
      • Возвращаемое значение:

        • true: установка степенного множителя прошла успешно.
        • false: установка степенного множителя прошла не успешно.
      • Примечания:
        • Значение по умолчанию 1000.
        • Множитель степенной функции можно запросить функцией getKa().
      • Пример:
      // Указываем модулю новый множитель степенной функции 2100
      tds.setKa(2100);
      

      Функция getKa()

      • Назначение: запрос множителя степенной функции Ka.
      • Синтаксис: float getKa()
      • Параметры: нет.
      • Возвращаемое значение: множитель степенной функции от 0.01 до 167772.15.
      • Примечания: новый множитель степенной функции можно установить функцией setKa().
      • Пример:
      Serial.print("Модуль использует Ka: ");
      Serial.print(tds.getKa());
      Serial.print(".");
      

      Функция setKb()

      • Назначение: установка степени степенной функции Kb.
      • Синтаксис: bool setKb(float val_Kb)
      • Параметры:
        • val_Kb: степень степенной функции от -0.01 до -65.535.
      • Возвращаемое значение:

        • true: установка новой степени прошла успешно.
        • false: установка новой степени прошла не успешно.
      • Примечания:
        • Значение по умолчанию -5.0.
        • Степень степенной функции можно запросить функцией getKb().
      • Пример:
      // Указываем модулю новую степень степенной функции -7.5
      tds.setKb(-7.5);
      

      Функция getKb();

      • Назначение: запрос степени степенной функции.
      • Синтаксис: float getKb()
      • Параметры: нет.
      • Возвращаемое значение: степень степенной функции -0.01 до -65.535.
      • Примечания: новую степень степенной функции можно установить функцией setKb().
      • Пример:
      Serial.print("Модуль использует Kb: ");
      Serial.print(tds.getKb());
      Serial.print( " см^-1." );
      

      Габаритный чертёж

      TDS/EC Sensor Trema Flash I²C Dimensions

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

      • Модель: TDS/EC-метр для воды с щупом (Trema-модуль Flash-I²C)
      • Напряжение питания Vcc: 3,3–5 В
      • Потребляемый ток Icc: до 10 мА
      • Диапазон измерений TDS: 0–10000 ppm
      • Диапазон измерений ЕС: 0–20000 мкСм/см
      • Точность показаний: ±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.
      • Расширенные возможности библиотек для Arduino на шине I²C.
      • Общие особенности модулей линейки Flash-I²C.
      • Как установить библиотеки для Raspberry Pi.

      Библиотеки

      • Библиотека для Arduino.
      • Библиотека для Raspberry Pi.

      Здравствуйте, сегодня речь пойдет о жесткости воды измеряемой с помощью TDS метра или солемера. Данный прибор уже неоднократно обозревался на сайте, но так как я проживаю в предгорьях Кавказа, была мысль пойти с этим прибором в поход и померить жесткость воды в горной реке, горном ручье, лесном роднике. Поэтому я иду в реальный поход а вас приглашаю в виртуальный. Ну и померяю дождевую, магазинную минеральную, бутелированную не минеральную и водопроводную воду. Интересно? Тогда читаем далее.

      Жёсткость воды — совокупность химических и физических свойств воды, связанных с содержанием в ней растворённых солей щёлочноземельных металлов, главным образом, кальция и магния (так называемых «солей жёсткости»).(wikipedia)

      Вот поэтому этот прибор так же называют солемером. TDS расшифровывается и переводится как Total Dissolved Solids — общее содержание растворенных твердых веществ.
      Жесткость воды это как раз то что отвечает за накипь в чайнике и камни в почках.
      Пробежимся немного по самому прибору.
      Спереди находятся кнопка включения/выключения, кнопка фиксации показаний и дисплей для вывода показаний.

      В низу под колпачком два электрода которые и опускаются в воду

      На тыльной стороне находится клипса и калибровочный винт

      В колпачке с верху встроен батарейный отсек на две батарейки типа LR44

      Замер делается так: Включаем прибор, он показывает 000, опускаем электроды в воду и смотрим значение.
      Индикация трехсегментная, если значение больше 999 то внизу появляется знак х10.
      Прибор измеряет в американских единицах измерения ppm, у нас в России принята единица миллиграмм-эквивалент на литр, мг-экв/л.
      1 мг-экв/л=50,05 ppm
      Согласно Санитарным нормам и правилам за номером СанПиН 2.1.4.1074-01
      максимально допустимая концентрация равна 7 мг-экв/л. или 350ppm
      на это значение и будем опираться, так же приведу еще вот такую таблицу ей тоже можно верить

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

      Auto temperature compensation

      Для начала проведем комнатно стаканные замеры
      Питьевая водопроводная вода из крана

      она же кипяченная, как видно немного меньше содержание солей, кипячение смягчает воду.

      дождевая вода, просто вышел на балкон и набрал сбегающую с крыши воду во время дождя.

      Бутелированная вода из кулера, заявлено что талая, ледниковая, производителя специально не показываю.

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

      Ну а теперь в поход, первая у нас горная река Малая Лаба

      вот так выглядит


      вот такие показания

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

      Зато попалась вот такая плотвичка.

      Следующий это родник в лесу. У нас считается что в этом роднике очень чистая вода, много местных набирают эту воду для питья, и готовят только из нее. Даже ходит байка что кто то отвозил воду из него в какой то научно исследовательский институт, там сделали анализ и сказали что вода уникальная, может мертвого поднять, лично я не верю.
      Меня отвлекли, поэтому сфотографировать забыл, показания были 60 ppm, в низу в видео этот родник есть.
      Что характерно почти такие же как в реке в которой раннее замерил, река от родника протекает примерно в полукилометре, у меня есть подозрения что это одна и та же вода, только за счет фильтрации через почву, в роднике она выглядит кристально чистой.
      Следующее на очереди место, это небольшой горный ручей с маленьким 2-х метровым водопадом.

      Вот такие виды по пути к водопаду

      А вот и сам водопад

      Измерения

      внизу брызги, вода разлетается во все стороны, поэтому замеры было делать не удобно и тем не менее померил и результат сильно удивил, на фото не получилось нормально снять но в итоге результат был за 1000 ppm, внизу с лева мигала надпись x10. Почему такие высокие показания в этом ручье я не знаю, выше он вытекает из пещеры возможно по этому.

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

      Видео похода по водоемам на моем youtube канале, кому интересно обязательно подписывайтесь.

      Так же видео распаковки.

      До свидания.

      Здравствуйте.
      Сегодня о не очень качественном TDS-метре и про то, как я с ним «воевал изучая» жидкости вокруг целых два дня. Покажу, как ему «вправить мозги» (расчленёнка будет) и почему не всё то, что одинаково называется, оказывается одинаковым на самом деле.

      Немного предыстории.
      Закинул мне как-то знакомый книжку умную… приятно напечатано, но есть противоречивости и нюансы, по этому сегодня не про книгу, а про её главное «действующее лицо» — всё про воду, да про воду, вода мол всему голова и чистота её сулит, чуть ли не «бессмертие»… молокопродукты в зрелом возрасте, оказывается, вообще — зло!) в общем проникся.

      Но суть не в этом. На площадке Али, выискивая чем бы её «вкусную» (из местного водопровода) проверить, наткнулся на распродажу TDS-метра (если вкратце — прибор измеряет сопротивление жидкости и её температуру, а на основе полученных данных делает вычисления и выдаёт результат).
      В описании продавца всё класс и с купоном выходит очень дешево — купил…

      Получил долгожданный пакет с приб

      лу

      ором и — понесласьподсветку сознательно выбирал, отключать надеялся можноинструкция вообще «ни о чём», показано как кнопки нажимать и что это прецизионный продукт (погрешность измерения ±2%)на первый взгляд всё совпадает, но есть маленькое (переворачивающее весь смысл прибора) отличие от рекламытермодатчик китайцы в зону измерения не вынесли… у данного прибора черный «пипсюн» с рекламы, почему-то превратился в белый наплыв пластмассы

      Недо измерения
      Уже не мог ждать, начал измерять всю подряд воду, а начал с унитаза…
      Схема в квартире построена так — унитаз прямоток, далее грубой отчистки на рукомойник и потребителей, а на раковине угольный в колбе для питья… в таком порядке и замерял — унитаз/+грубой/+угольный, ну и отдельно измерил покупную «КИССОН» (заявляют обратный осмос — минимальное значение)«выпал в осадок» после таких показателей — 567/596/700/(16 — покупная КИССОН)… самая грязная после всех фильтров, а самая чистая из унитаза!!! ведь вода по сути одной температуры, ну чуть холоднее первые три, но должно погрешность давать, но не такую ведь — 700!!!

      Забились фильтра (три месяца не менял)

      слабонервным не открывать!

      и действительно, нужно менять)
      Купил проверенную «трубу» от Ecosoft, а угольный нашёл толко такой, с жутко вонючими уплотнителями (сразу менять на силиконовые) — ради эксперимента Меняю входной не ожидая, что солёность упадётлучше чем было, но все равно больше, по сравнению с входящей, плюс учитывая другую температуру для пересчёта на приборе.
      Бачок унитаза:после фильтра грубой очистки — нет эффектамаксимальное значения после смены картриджей в обоих фильтрах перестали «700» показывать, но до точности ещё как до луны
      Для воды, производителем «показометра» заявляются вот такие показатели и моя вода по табличке кошмарнавода из крана, получается ядовитая! неужели это правда!?

      Такого быть не должно!
      Вы как и я, очевидно поняли, температуру прибор измеряет воздуха, а по этому брешет просто безбожно при разности температур измеряемой жидкости и даёт погрешность — вскрыватьвыносного термистора естественно нет, но у меня нашёлся вот такойна 10 кОмкак оказалось и сам прибор имеет 10 кОм термистор подписан на плате как NTC1я решил ради хохмы проверить «как это работает» и просто впаял параллельно свой на 10 — вышло ожидаемо не очень) температуру показал вдвое выше нормальной, так как общее сопротивление уменьшилось вдвое (по принципу параллельного включения резисторов)Выпаял родной на 10 (даже канифоль не стал смывать), впаял свой и вставил в технологические отверстия в плате временные «электроды»протестировал на разной температуре воды и всё работает — «16» что при 30°С, что при 50°С, а значит прибор задумывался адекватными людьми и только после упрощен в целях экономии на сборку

      Воодушевлённый тем, что получилось восстановить справедливость, я начал думать как прилично вынести датчик температуры в область измерения, а при этом заглядывать во внутрь — похоже плату в корпус загоняют прогретую, ибо я её еле вытянул изначально, а там внутри остались от неё наплывы расплавленного пластика (жаловались в отзывах на али)Решил использовать родной термистор, вместо своего старого, аккуратно припаяв в его торцы пару проводов такой длины, чтобы плату можно было извлечь, а в корпусе просверлил иглой два отверстия под них
      Огорчила подсветка — не выключается вручную ни как, а просто ухудшает углы обзора, ещё и батарейку разряжает зря ~ 2.32мАпо этому разрезал дорожку вот тут и получил более чёткий экран и всего ~ 1.5мА потребления (просится тумблер для подсветки)
      После всех манипуляций, завёл аккуратно в отверстия провода, чуть углубив в корпус сам резистор и залил всё отвердеваемой UV-смолой так, чтобы и в отверстия она зашла немного, для пущей герметичности. Получилось, как настоящее
      Если вам паять такое не под силу, то можно заказать с али любой другой уже готовый NTC резистор на 10кОм (они имеются там в различных исполнениях и даже в более подходящих), но в моём случае, точность измерения температуры и с родным оказалась нормальнаяну и сама вода в водопроводе, после замены фильтров и на «тюнингованном» приборе стала по показаниям чуть более пригодной к употреблению — 300+, после диких 500+ (схема та же — бачок /+грубой/+угольный):

      начиная со значения 315

      Одно название — разный результат
      Побежал замерял две разные (по цене) воды из 18 литровых привозных бутылей (Киссон и Галактика) и результат не порадовал — «минеральная» она, не пахнет тут осмосом, простая очистка (прийдётся выяснять, на каком этапе «бадяжат»)в описании 7 ступеней очистки (включая обратный осмос) и возможность изготовления на такой воде лекарств, но со значением в «140» это сомнительно… тот-же КИССОН, но из «бачка» в магазине привозной (выше в тестах рядом с водопроводной) показывало стабильно «16», а теперь с исправленным прибором 6-8 и это гораздо ближе к обратному осмосу или к талой воде, за которую можно доплачивать.

      Завершаю повествование.
      Сначала думал, что отсутствие термистора в зоне воды не сильно скажется на показания, но как видите, отличия в показаниях с датчиком и без него просто огромные (550/340).
      По итогу всех замеров и рекомендаций, стал воду пить очищенную из бака в магазине (покупную), а фильтрованную водопроводную только для некоторой готовки. Отказался от частого и безрассудного употребления молокопродуктов (там что-то связано с отложениями кальция, в воде нашего региона его и так чересчур) и уже буквально через пару недель почувствовал результат — наладился желудок и перестала тревожить спина.

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

      На этом точно всё, до свидания.

      и да, вымораживание таки работает!

      P.S. — через полтора года глюканул, остался просто термометр, а значения улетают в х10 даже на тестовом дистилляте. Мусор, купил за 5$ MI-шный TDS pen

      ЧЕРТЕЖ ОЧИСТИТЬ VIEW ТОСТЕР ДВЦ501-- ТОСТЕР ДВTDS & EC METER 2.0
      Руководство пользователяЧЕРТЕЖ ОЧИСТИТЬ VIEW ТОСТЕР ДВТС501-- ТОСТЕР ДВТС501

      Благодарим вас за выбор Health Metric 3-in-1 TDS & EC Meter 2.0. Это профессиональное измерительное устройство упрощает тестирование общего содержания растворенных твердых веществ (TDS), электропроводности (EC) и температуры.

      Следующее руководство дает вам краткую информациюview о том, что такое TDS, как работают TDS-счетчики, где их можно использовать и как ухаживать за вашим TDS-счетчиком. Для получения дополнительной информации и полезных видеоинструкций посетите www.health-metric.com/tds2.

      Если у вас возникнут вопросы, свяжитесь с нами. Мы здесь, чтобы помочь! support@health-metric.com

      ЧЕРТЕЖ ОЧИСТИТЬ VIEW ТОСТЕР ДВТС501 - ДВТС501

      Что такое TDS?

      TDS означает «Общее количество растворенных твердых веществ». Это измерение всех растворенных веществ в воде.ampле Эти «растворенные твердые вещества» в основном представляют собой неорганические соли, такие как катионы натрия, кальция, магния и калия, а также хлорид, бикарбонат, карбонат, фосфат, сульфат и нитрат-анионы. TDS также включает растворенные органические соединения. Действительно точные измерения TDS должны выполняться в аналитической лаборатории. Вода sample взвешивается и затем нагревается в строго контролируемых условиях для испарения воды. Оставшийся вес оставшихся «твердых частиц» используется для расчета TDS в воде s.ampле Единица измерения — части на миллион (ppm), что совпадает с миллиграммами на литр (мг / л). Однако такой уровень точности не требуется для большинства приложений домашнего тестирования. Это дорого и должно выполняться в квалифицированной лаборатории. Использование измерителя TDS — гораздо более быстрый метод.

      Как работают измерители TDS

      Измерители TDS не измеряют напрямую общее количество растворенных твердых частиц. Помните, что TDS определяется путем испарения воды и взвешивания оставшихся твердых частиц. Переносные измерители TDS измеряют электрическую проводимость (ЕС). Единица измерения ЕС — микросименс (мкСм). Растворенные неорганические вещества, такие как соли, минералы, нитраты, фосфаты и металлы, проводят электричество. Чем выше концентрация этих веществ в воде, тем вышеampле, тем выше электропроводность. Измеритель TDS преобразует показания EC в TDS в частях на миллион (ppm). Растворенные органические соединения не проводят электричество и поэтому не обнаруживаются счетчиками TDS. Измерители TDS нельзя использовать для проверки органических веществ, таких как пестициды, бензин и растворители.

      Почему TDS важен?

      TDS — это не измерение вредных веществ или загрязнителей. TDS — это просто измерение всех веществ, растворенных в воде. Дистиллированная вода имеет TDS 0.0 ppm, а океан имеет TDS 10,000 XNUMX ppm. Оба источника воды безопасны. Приемлемый TDS зависит от тестируемой воды и того, для чего она используется. Вот бывшийample: Если вы проверили TDS дистиллированной воды и обнаружили, что она составляет 300 частей на миллион, вы должны знать, что вода не была дистиллированной. Возможно, неисправна система очистки воды или что-то загрязнило дистиллированную воду. Тестирование TDS похоже на сторожевого пса. Он сообщит вам, если все не так, как должно быть. Давайте рассмотрим все способы использования счетчика TDS для проверки качества воды.

      TDS и водопроводная вода

      Водопроводная вода содержит множество минералов и солей, таких как кальций, магний, хлорид и калий. Чем больше в воде минералов и солей, тем выше TDS. Агентство по охране окружающей среды США устанавливает стандарты для питьевой воды в США. Для эстетики рекомендуемая максимальная TDS в питьевой воде составляет 500 ppm. Высокий TDS обычно указывает на то, что источник воды содержит высокий уровень минералов, карбонатов и других солей. Эта вода, вероятно, вызывает коррозию сантехники, труб и приборов. Вода также может иметь неприятный вкус из-за высокого содержания минералов. Однако высокий TDS не обязательно означает, что вода опасна для здоровья.

      Какой уровень TDS в норме?

      «Нормальный» уровень TDS зависит от типа тестируемой воды. Вода обратного осмоса должна иметь низкий уровень TDS, а минеральная родниковая вода обычно имеет более высокий уровень TDS. Мы создали следующую справочную таблицу TDS, чтобы помочь объяснить эту концепцию.ЧЕРТЕЖ ОЧИСТИТЬ VIEW ТОСТЕР ДВТС501-- ТОСТЕР ДВТС5

      TDS и фильтры для воды

      Большинство систем фильтрации воды не влияют на TDS. Это потому, что они удаляют органические соединения и хлорные дезинфицирующие средства, которые вызывают проблемы со вкусом и запахом, но не обнаруживаются измерителями TDS. Хотя тяжелые металлы опасны для здоровья и влияют на TDS, их уровни настолько низкие, что практически не влияют на уровень TDS. В умягчителях воды используется процесс ионного обмена. Гранулы смолы в смягчителе воды обменивают ионы натрия на ионы кальция и магния (что считается жесткостью воды). Минералы кальция и магния удаляются, но вместо них выделяется натрий. В этом случае ЕС не изменился, поэтому измерители TDS практически не показывают снижения TDS. Умягченная вода по-прежнему имеет высокий уровень TDS; Следовательно, TDS-метр не подходит для проверки жесткости воды. Лучший способ контролировать жесткость воды — использовать полоски для измерения показателей жесткости воды.

      Фильтрация с обратным осмосом (RO) действительно снижает TDS, поскольку она физически удаляет соли, минералы и другие токопроводящие ионы из воды. TDS воды обратного осмоса должен быть намного ниже, чем неочищенная вода, подаваемая в систему обратного осмоса. Правильно функционирующая система обратного осмоса удаляет от 70% до 99.9% TDS. Когда система обратного осмоса начинает удалять менее 70% поступающего TDS, пора заменить мембрану обратного осмоса и отдать систему в сервисный центр.

      Example Расчет

      • Входящая вода: 300 ppm TDS.
      • Вода обратного осмоса: 30 ppm TDS
      • 90% TDS удаляется = ОК

      Если вода обратного осмоса = 120 ppm TDS, удаляется только 60% TDS. Системе требуется обслуживание.

      Как проверить TDS водопроводной воды

      Включите холодную воду и дайте ей поработать примерно одну минуту. Возьми водуampле в чистую пластиковую или стеклянную тару. Поместите измеритель TDS до уровня погружения вample и дождитесь стабилизации показаний. Путем осторожного вращения глюкометр поможет предотвратить скопление водяных пузырьков возле двух металлических зондов. Измерители TDS автоматически блокируют и удерживают стабилизированный уровень TDS. Промыть чистой водой и стряхнуть лишнюю воду. Обратитесь к руководству пользователя для получения более подробных инструкций.ЧЕРТЕЖ ОЧИСТИТЬ VIEW ТОСТЕР DVTS501 - ПРОЗРАЧНЫЙ VIEW ТОСТЕР ДВТС501

      Как проверить воду в бутылках

      «Бутилированная вода» — это общий термин, не имеющий другого определения, кроме воды, пригодной для употребления человеком. Родниковая вода, дистиллированная вода, фильтрованная вода и очищенная вода — все это разные типы продуктов питьевой воды. Тестирование TDS бутилированной воды аналогично тестированию водопроводной воды. Дистиллированная вода будет иметь TDS 0. С другой стороны, родниковая, очищенная и фильтрованная вода может содержать высокий уровень минералов и солей, которые влияют на TDS. Для бутилированной воды нет ничего необычного в том, чтобы иметь TDS 100 ppm или выше.

      TDS и аквариумы

      Пресноводные тропические рыбы обитают в самых разных водных биотопах. Южноамериканские речные рыбы и растения прекрасно себя чувствуют в воде, почти не содержащей минералов, что приводит к низкому TDS. Африканские озерные рыбы живут в воде с высоким содержанием кальция, натрия и хлоридов. Если у вас есть рыбы, лучше всего держать их в растворе воды с TDS, аналогичным их естественной среде обитания. Высокий TDS может нанести ущерб, вызывая мутную воду, в которую не может проникнуть солнечный свет, тем самым нанося вред процессу фотосинтеза для водных растений. Это также может повлиять на рост рыб, затруднить их дыхание и сделать их более подверженными болезням. Таким образом, измерение TDS можно использовать для определения частоты замены воды в резервуаре.ЧЕРТЕЖ ОЧИСТИТЬ VIEW TOASTER DVTS501 - TDS и аквариумы

      Exampлески идеального диапазона TDS для аквариумных рыб и декоративных прудовых рыб

      • 350-400 промилле африканских озерных цихлид
      • 200-500 частей на миллион Золотая рыбка, японский кои
      •  100-300 частей на миллион гуппи, меченосцев, моллинезий, колючек
      • 10-100 частей на миллион рыба-ангел, дискус, неоновые тетры

      Тестирование TDS в аквариумной воде

      Просто поместите измеритель в аквариум, желательно рядом с проточной водой. Удерживайте измеритель TDS, пока показания не стабилизируются или не зафиксируются. Тщательно промывайте измеритель после каждого использования. Аквариумная вода содержит соли, водоросли и другие микробы, которые необходимо смывать с зонда после каждого использования. TDS соленой воды составляет около 10,000 XNUMX ppm и не может быть измерен измерителями TDS Health Metric.

      TDS в бассейнах и спа

      Идеальный уровень TDS в бассейнах и спа — предмет дискуссий. Большинство экспертов сходятся во мнении, что максимальная TDS для пресноводного бассейна или спа не должна превышать 1,500 ppm. Но по мере испарения воды и добавления химикатов в бассейн TDS может подняться до 3,000 ppm. Бассейны с морской водой, в которых используется солевой генератор, обычно имеют уровень TDS от 3,500 до 5,000 частей на миллион. Измерение TDS полезно для обнаружения тенденции к увеличению TDS, которая указывает на накопление минералов или загрязняющих веществ в воде. Просто поместите измеритель TDS в воду и произведите измерение. После использования промойте глюкометр пресной водой.ЧЕРТЕЖ ОЧИСТИТЬ VIEW TOASTER DVTS501 - TDS в бассейнах и спа

      Примечание: Измеритель TDS не подходит для измерения жесткости воды. Лучший способ контролировать жесткость воды — использовать полоски для измерения показателей жесткости воды.

      Измерение уровня соли в бассейне

      Измерители TDS могут использоваться для оценки уровня соли с использованием коэффициента преобразования. Умножьте уровень TDS на 0.9, чтобы получить уровень соли в промилле. Это грубое приближение к фактическому уровню NaCl. Счетчики соли в бассейне на самом деле являются счетчиками TDS, которые автоматически выполняют этот расчет. Обратите внимание, что некоторые производители используют другой коэффициент пересчета для расчета уровня соли. Из-за этого фактора вы можете обнаружить, что другой счетчик или магазин для бассейнов предоставит другой уровень соли.

      TDS и электропроводность в гидропонике

      Электропроводность (ЕС) — это показатель прочности питательного раствора. Чем выше проводимость, тем больше растворенных твердых частиц в растворе. Нежные растения, черенки и саженцы могут подгореть от удобрений, если проводимость слишком высока. Когда растения начинают расти, им требуется более сильный питательный раствор, поэтому проводимость необходимо увеличивать, добавляя концентрированные питательные вещества. Некоторые растения предпочитают более умеренную концентрацию питательных веществ, в то время как другие растут лучше и дают более качественные плоды с более высокой концентрацией.

      ЧЕРТЕЖ ОЧИСТИТЬ VIEW TOASTER DVTS501 - TDS и электрика

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

      Если у вас есть рекомендации по питательным веществам для растений в единицах ЕС, режим ЕС удобен (см. Дополнительную информацию о режимах работы в руководстве по продукту). Если ваши рекомендации по питательным веществам для растений указаны в ppm, режим TDS будет проще в использовании.

      Уход за вашим показателем здоровья Метрический измеритель TDS

      • Ваш измеритель TDS Health Metric не следует погружать под воду. В воду следует погружать только секцию зонда.
      • У измерителя TDS есть два металлических зонда и крошечная заглушка в нижней части измерителя. Не трите и не сгибайте датчики.
      • Никогда не окунайте прибор в вещества, которые могут покрыть и повредить датчики. Краска, клей, еда и другие липкие вещества могут повредить датчики.
      •  Никогда не окунайте TDS-метр в кипящие жидкости.
      • Когда вы закончите использовать свой TDS-метр, промойте зонд водой, предпочтительно дистиллированной водой. Цель состоит в том, чтобы смыть любые загрязнения с датчиков.

      Когда калибровать глюкометр?

      • После длительного использования повторная калибровка может помочь повысить точность измерителя.
      • Измерители TDS более точны при калибровке на уровнях, близких к sample проходит испытания. Итак, если вы измеряете sampфайлы, составляющие около 1000 частей на миллион, напримерample, мы рекомендуем вам откалибровать измеритель для этого конкретного значения.

      Свяжитесь с нами

      Войти http://www.health-metric.com/tds2 для получения дополнительной информации, часто задаваемых вопросов и видеоинструкций. Наши эксперты по качеству воды и воздуха готовы оказать поддержку по всем продуктам Health Metric и ответить на ваши вопросы. Если вам нужна помощь, свяжитесь с нами по телефону support@health-metric.com за помощью.ЧЕРТЕЖ ОЧИСТИТЬ VIEW TOASTER DVTS501 - Свяжитесь с нами

      Документы / Ресурсы

      Рекомендации

      • www.health-metric.com
        Ресурсы и часто задаваемые вопросы TDS & EC Meter 2.0 | Показатель здоровья PayPal Venmo

      Используйте 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.

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

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

      • 1× TDS/EC-метр для воды с щупом
      • 1× Arduino Uno
      • 1× Соединительные провода «папа-мама»
      • 1× Кабель USB (A — B)
      • 1× Стакан для воды

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

      • 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

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

      • 1× TDS/EC-метр для воды с щупом
      • 1× Arduino Uno
      • 1× Соединительные провода «папа-мама»
      • 1× Кабель USB (A — B)
      • 1× Стакан для воды

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

      • 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

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

      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.

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

      • 1× Хлорид калия 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.
          #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();                                               // Инициируем работу с TDS/EC-метром I2C-flash.
               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мс т.к. более частые обращения к модулю во время калибровки снижают точность этой калибровки.

          Примеры работы

          Рассмотрим базовые примеры для работы с 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.
          #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();                                          // Инициируем работу с TDS/EC-метром I2C-flash.
          }                                                          //
                                                                     //
          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.

          Элементы платы

          Датчик 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.

          Библиотека для Arduino

          Для работы TDS/EC-метра с контроллерами Arduino мы разработали библиотеку iarduino_I2C_TDS. Программный модуль поддерживает аппаратную и программную реализацию I²C, подробности читайте в разделе расширенные возможности библиотек для Arduino на шине I²C.

          Библиотека поддерживает работу с датчиком только по шине I²C, с аналоговым сигналом программный модуль работать не будет.

          Установка

          Для старта скачайте и установите библиотеку iarduino_I2C_TDS. Для инсталляции рекомендуем использовать нашу инструкцию по установке библиотек для Arduino.

          Подключение

          • Назначение: подключение библиотеки.
          • Синтаксис: #include <iarduino_I2C_TDS.h>
          • Примечания:

            • Библиотека подключается в самом начале программы.
            • Подключение библиотеки обязательное действие, иначе функции работать не будут.
          • Примеры:
          // Подключаем библиотеку для работы с TDS/EC-модулем
          #include <iarduino_I2C_TDS.h>
          

          Конструктор

          • Назначение: создание объекта для работы с функциями библиотеки iarduino_I2C_TDS
          • Синтаксис: iarduino_I2C_TDS tds(uint8_t address)
          • Параметры:

            • address: адрес модуля на шине I²C. По умолчанию адрес модуля 0x09. При вызове без параметров — библиотека сама найдет модуль и определит его адрес.
          • Возвращаемое значение: нет
          • Примечания:

            • Конструктор вызывается в самом начале программы.
            • Вызов конструктор обязателен, иначе функции работать не будут.
          • Пример:

          Если адрес модуля известен:

          // Создаём объект tds для работы с функциями библиотеки iarduino_I2C_TDS
          // В параметре конструктора передаём адрес модуля
          iarduino_I2C_TDS tds(0x09);
          

          Если адрес модуля не известен:

          // Создаём объект tds для работы с функциями библиотеки iarduino_I2C_TDS
          // В параметре конструктора не передаём адрес модуля 
          iarduino_I2C_TDS tds;
          

          Функция begin()

          • Назначение: инициализация работы с модулем.
          • Синтаксис: bool begin()
          • Параметры: нет
          • Возвращаемое значение:

            • 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 мм

          Ссылки

          • TDS/EC-метр в магазине.
          • Руководство по использованию для Raspberry Pi.
          • Технический Datasheet для разработчиков.
          • Библиотека для Arduino.
          • Библиотека для Raspberry Pi.
          • Как установить библиотеки для Arduino.
          • Как установить библиотеки для Raspberry Pi.
          • Расширенные возможности библиотек для Arduino на шине I²C.
          • Общие особенности модулей линейки Flash-I²C.

          Понравилась статья? Поделить с друзьями:
        1. Compound phlai balm инструкция по применению
        2. Ответственность перед руководство
        3. Должностная инструкция медсестры онкологического кабинета поликлиники
        4. Максигриппин инструкция по применению шипучий детский
        5. Onkyo tx sr601e инструкция на русском