Подключение недорогого датчика содержания влаги/электропроводности/температуры TDR к NodeMCUv3 – Наука в гидропонике

связанныйrssYouTubeинстаграм

В прошлом я подробно обсуждал датчики содержания влаги. Я писал посты об использовании емкостных датчиков влажности для измерения объемного содержания влаги, в том числе о том, как создавать сенсорные станции и как их калибровать. Однако в то время как емкостные датчики содержания влаги могут быть недорогой альтернативой для мониторинга содержания влаги с низким разрешением, более точные приложения требуют использования датчиков более высокой точности, таких как датчики рефлектометрии во временной области (TDR). В этом посте я покажу вам, как подключить недорогой микроконтроллер (NodeMCUv3) к недорогому датчику влажности TDR. Обратите внимание, что некоторые из приведенных ниже ссылок на продукты являются партнерскими ссылками Amazon, которые помогают поддерживать этот блог без каких-либо дополнительных затрат с вашей стороны.

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

В то время как популярные датчики, такие как датчики Teros-12, стоят сотни долларов, китайские производители создали более дешевые альтернативы. Используя этот репозиторий github от пользователя git Kromadg, я смог связать некоторые из этих недорогих датчиков TDR с NodeMCUv3. NodeMCUv3 — это очень недорогой микроконтроллер, который можно приобрести менее чем за 5 долларов США за штуку. Он также поддерживает WiFi, поэтому этот проект можно расширить для отправки данных через Wi-Fi для использования в приложениях регистрации данных или управления. Для этого проекта вам понадобятся следующие вещи:

  1. Кабель микро-USB
  2. NodeMCUv3
  3. Датчик THC-S RS485 (Обязательно приобретите модель THC-S)
  4. Плата связи TTL с RS485
  5. Макетная плата и соединительные кабели для выполнения соединений или кабели и набор для пайки для окончательного соединения.

На приведенной выше схеме показано, как подключить датчик, плату связи TTL-to-RS485 и NodeMCUv3. Вам также нужно убедиться, что вы установили последовательную библиотеку программного обеспечения ESP в свою среду разработки Arduino IDE, поскольку обычная библиотека последовательного программного обеспечения не будет работать. Вы можете сделать это, загрузив заархивированную библиотеку с github, а затем используя пункт меню Sketch->Include Library. После этого вы можете загрузить следующий код в свой NodeMCUv3.

#include <SoftwareSerial.h>
#include <Wire.h>

// This code is a modification of the code found here (https://github.com/kromadg/soil-sensor)

#define RE D2
#define DE D3

const byte hum_temp_ec[8] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x03, 0x05, 0xCB};
byte sensorResponse[12] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
byte sensor_values[11];

SoftwareSerial mod(D6, D5); // RX, TX

void setup() {
    Serial.begin(115200);
    pinMode(RE, OUTPUT);
    pinMode(DE, OUTPUT);
    digitalWrite(RE, LOW);
    digitalWrite(DE, LOW);
    delay(1000);
    mod.begin(4800);
    delay(100);
}

void loop() {
    /************** Soil EC Reading *******************/
    digitalWrite(DE, HIGH);
    digitalWrite(RE, HIGH);
    memset(sensor_values, 0, sizeof(sensor_values));
    delay(100);
    
    if (mod.write(hum_temp_ec, sizeof(hum_temp_ec)) == 8) {
        digitalWrite(DE, LOW);
        digitalWrite(RE, LOW);
        for (byte i = 0; i < 12; i++) {
            sensorResponse[i] = mod.read();
            yield();
        }
    }

    delay(250);

    // get sensor response data
    float soil_hum = 0.1 * int(sensorResponse[3] << 8 | sensorResponse[4]);
    float soil_temp = 0.1 * int(sensorResponse[5] << 8 | sensorResponse[6]);
    int soil_ec = int(sensorResponse[7] << 8 | sensorResponse[8]);

    /************* Calculations and sensor corrections *************/

    float as_read_ec = soil_ec;

    // This equation was obtained from calibration using distilled water and a 1.1178mS/cm solution.
    soil_ec = 1.93*soil_ec - 270.8;
    soil_ec = soil_ec/(1.0+0.019*(soil_temp-25));

    // soil_temp was left the same because the Teros and chinese sensor values are similar

    // quadratic aproximation
    // the teros bulk_permittivity was calculated from the teros temperature, teros bulk ec and teros pwec by Hilhorst 2000 model
    float soil_apparent_dieletric_constant = 1.3088 + 0.1439 * soil_hum + 0.0076 * soil_hum * soil_hum;

    float soil_bulk_permittivity = soil_apparent_dieletric_constant;  /// Hammed 2015 (apparent_dieletric_constant is the real part of permittivity)
    float soil_pore_permittivity = 80.3 - 0.37 * (soil_temp - 20); /// same as water 80.3 and corrected for temperature

    // converting bulk EC to pore water EC
    float soil_pw_ec;
    if (soil_bulk_permittivity > 4.1)
        soil_pw_ec = ((soil_pore_permittivity * soil_ec) / (soil_bulk_permittivity - 4.1) / 1000); /// from Hilhorst 2000.
    else
        soil_pw_ec = 0;

    Serial.print("Humidity:");
    Serial.print(soil_hum);
    Serial.print(",");
    Serial.print("Temperature:");
    Serial.print(soil_temp);
    Serial.print(",");
    Serial.print("EC:");
    Serial.print(soil_ec);
    Serial.print(",");
    Serial.print("READEC:");
    Serial.print(as_read_ec);
    Serial.print(",");
    Serial.print("pwEC:");
    Serial.print(soil_pw_ec);
    Serial.print(",");
    Serial.print("soil_bulk_permittivity:");
    Serial.println(soil_bulk_permittivity);
    delay(5000);
}

Обратите внимание, что RE и DE не размещены на цифровых контактах 2 и 3, так как другие контакты в NodeMCUv3 выполняют другие функции, и плата не будет инициализирована, если через эти контакты подключен коммуникатор RS485-to-TTL. Контакты R0 и RI подключены к цифровым контактам D5 и D6, потому что в NodeMCUv3 контакты D7 и D8 используются в последовательной связи командой Serial swap и, следовательно, создают конфликты, если вы используете их с SoftwareSerial. Приведенное выше цифровое распределение контактов является одним из немногих, которые хорошо работают. Обратите внимание, что подключение RE или DE к цифровому контакту 4 также работает, но это означает, что синий светодиод на NodeMCUv3 загорается каждый раз, когда есть последовательная связь, что может быть нежелательным эффектом, если вы заинтересованы в питании устройства от батареи.

Теперь плата должна печатать все измерения вашего последовательного соединения, поэтому вы сможете видеть показания через Serial Monitor в Arduino IDE. В будущем я расскажу, как расширить этот код, чтобы включить связь WiFi и MQTT с сервером MyCodo.

Если вы используете этот код, поделитесь своим опытом в комментариях ниже!

Фейсбуктвиттерреддитпинтерестсвязанный