Создание беспроводной сенсорной станции pH/EC для MyCodo с использованием Arduino MKR Wifi 1010 — Наука в гидропонике

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

В Интернете доступно несколько проектов с открытым исходным кодом для создания станций измерения pH / EC для гидропоники. Однако все те, что я нашел, используют один Arduino или Raspberry Pi для выполнения измерений и хранения любых данных, что делает их непригодными для приложений, где требуется большая гибкость. Например, объекту, использующему несколько разных резервуаров для хранения питательных веществ, может потребоваться несколько станций датчиков pH/EC, а одноплатные проводные установки не смогут обеспечить это без дополнительных дополнительных разработок. В этом посте я собираюсь показать вам простую станцию ​​измерения pH/EC, которую я построил с помощью Arduino MKR Wifi 1010, которая может обмениваться данными с сервером MyCodo с использованием протокола MQTT. Можно построить несколько станций датчиков, и все они могут обмениваться данными с одним и тем же сервером MyCodo.

Создание беспроводной сенсорной станции pH/EC для MyCodo с использованием Arduino MKR Wifi 1010 — Наука в гидропонике
Моя сенсорная станция на базе Arduino MKR Wi-Fi 1010 с использованием плат uFire pH и EC в небольшой проектной коробке.

В этом проекте используются небольшие платы pH/EC, поставляемые uFire, которые имеют меньшую стоимость по сравнению с платами таких компаний, как Atlas, но имеют достаточную электрическую изоляцию, чтобы избежать проблем с показаниями, когда несколько электродов помещаются в один и тот же раствор. Это существенное улучшение по сравнению с другими недорогими платами, где использование нескольких пробников может вызвать сильный электрический шум и помехи. Для того, чтобы построить этот проект, вам потребуются следующие материалы:

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

  1. Ардуино МКР Wi-Fi 1010
  2. pH-зонд uFire
  3. ЕС-зонд uFire
  4. Прочный pH-зонд с разъемом VNC
  5. Прочный датчик EC с разъемом VNC
  6. Два разъема Qwiic-Qwiic
  7. Один разъем Qwiic-вилка
  8. Коробка для проекта, чтобы положить все внутрь (необязательно)
  9. Кабель микро-USB

Код проекта показан ниже:

#include <uFire_EC.h>
#include <uFire_pH.h>
#include <WiFiNINA.h>
#include <ArduinoMqttClient.h>

#define SECRET_SSID "ENTER WIFI SSID HERE"
#define SECRET_PASS "ENTER WIFI PASSWORD HERE"

//calibration solutions used
#define PH_HIGH_SOLUTION_PH 7.0
#define PH_LOW_SOLUTION_PH  4.0
#define EC_HIGH_SOLUTION_EC 10.0
#define EC_LOW_SOLUTION_EC  1.0
#define CALIBRATION_TEMP    20.0

// topics for the mqtt sensors
// Make sure all stations have different topics
#define EC_TOPIC       "EC1"
#define PH_TOPIC       "PH1"
#define CALIB_TOPIC    "CALIB1"
#define MQTT_BROKER    "ENTER MQTT SERVER IP HERE"
#define MQTT_PORT      1883

int status = WL_IDLE_STATUS;     // the Wifi radio's status
String message;

uFire_pH ph;
uFire_EC ec;
WiFiClient wifiClient;
MqttClient mqttClient(wifiClient);

void check_connection()
{
  if (!mqttClient.connected()) {
    WiFi.end();
    status = WiFi.begin(SECRET_SSID, SECRET_PASS);
    delay(10000);
    if (!mqttClient.connect(MQTT_BROKER, MQTT_PORT)) {
      Serial.print("MQTT connection failed! Error code = ");
      Serial.println(mqttClient.connectError());
      delay(100);
    }
    mqttClient.subscribe(CALIB_TOPIC);
  }
}

void setup()
{
  Serial.begin(9600);
  while (!Serial);

  // connect to wifi and mqtt broker
  check_connection();
  
  // coorectly initialize the uFire sensors
  // note the Wire.begin() statement is critical
  Wire.begin();
  ec.begin();
  ph.begin();
}

void loop()
{
  // mqtt keep alive
  mqttClient.poll();

  // read messages 
  message = "";
  while (mqttClient.available()) {
      message += (char)mqttClient.read();    
    }

  // execute calibration if requested
  Serial.println(message);
  if (message == "EC1_HIGH") ec.calibrateProbeHigh(EC_HIGH_SOLUTION_EC, CALIBRATION_TEMP);
  if (message == "EC1_LOW")  ec.calibrateProbeLow(EC_LOW_SOLUTION_EC, CALIBRATION_TEMP);
  if (message == "PH1_HIGH") ph.calibrateProbeHigh(PH_HIGH_SOLUTION_PH);
  if (message == "PH1_LOW") ph.calibrateProbeLow(PH_LOW_SOLUTION_PH);

  // Measure EC 
  ec.measureEC();
  Serial.println((String) "mS/cm: " + ec.mS);

  // Measure pH
  ph.measurepH();  
  Serial.println((String) "pH: " + ph.pH);

  // Ensure the wifi and mqtt connections are alive
  check_connection();

  // post EC to MQTT server
  mqttClient.beginMessage(EC_TOPIC);
  mqttClient.print(ec.mS);
  mqttClient.endMessage();

  // post pH to MQTT server
  mqttClient.beginMessage(PH_TOPIC);
  mqttClient.print(ph.pH);
  mqttClient.endMessage();

  // ensure sensors are not probed too frequently
  delay(1000);

}

Как только вы получите все материалы, вы должны сначала собрать компоненты. Соедините плату pH и EC вместе с помощью разъема Qwiic-to-Qwiic, затем используйте разъем Qwiic-to-male, чтобы подключить одну из этих плат к Arduino (не имеет значения, какую именно). Подсоедините черный кабель к земле, красный кабель к 5В, синий кабель к SDA и желтый кабель к SCL. Настройте плату в соответствии с инструкциями на странице начала работы с Arduino MKR wifi 1010, измените приведенный выше код, чтобы он правильно включал информацию о вашей сети Wi-Fi, решениях для калибровки и сервере MQTT, а затем загрузите код. Arduino подключится к вашим серверам Wi-Fi и MQTT и автоматически переподключится при возникновении проблем с подключением.

Приведенный выше код также будет публиковать показания датчиков pH и EC в темах PH1 и EC1 соответственно. Если вы добавите входные данные в MyCodo для сбора этих показаний, вы сможете сохранить их и выполнять управляющие действия с помощью интерфейса MyCodo. Кроме того, код Arduino будет отвечать на запросы о калибровке, опубликованные в теме «CALIB1». Например, если вы хотите откалибровать свой датчик EC методом двухточечной калибровки со стандартным раствором с EC 10 мСм/см, вы должны поместить электрод в калибровочный раствор, а затем отправить сообщение «EC1_HIGH» на CALIB1. теме, и Arduino выполнит задачу в соответствии с запросом. Код предполагает, что вы захотите выполнить калибровку по 2 точкам как для EC, так и для pH, при этом события калибровки инициируются EC1_HIGH, EC1_LOW, PH1_HIGH и PH1_LOW. Обратите внимание, что определение значений EC и pH калибровочных растворов должно быть изменено на растворы, которые вы будете использовать в коде. Высокие/низкие значения в коде, как есть, составляют 10 мСм/см|1 мСм/см для EC и 7|4 для pH.

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