Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Мониторинг бассейна в реальном времени: Arduino MKR1000 и Samsung ARTIK Cloud

Компоненты и материалы

Arduino MKR10001 шт.
Перемычкинабор
pH-метр DFRobot1 шт.
Резистор 4.75 кОм1 шт.
Температурный зонд (DS18B20)1 шт.

Приложения и сервисы

О проекте

I. Цель

Основная цель — использовать Samsung ARTIK Cloud для мониторинга уровня pH и температуры воды в бассейнах.

II. Настройка ARTIK Cloud

Шаг 1. Создание типа устройства

  1. Зарегистрируйтесь в ARTIK Cloud. Перейдите на портал разработчика и создайте новый «Device Type».
  2. Задайте отображаемое и уникальное имя.
  3. Создайте новый Manifest (манифест). Добавьте поля: ph (число), temp (число).
  4. Нажмите «Save», затем перейдите на вкладку «Activate Manifest» и активируйте.
Мониторинг бассейна в реальном времени: Arduino MKR1000 и Samsung ARTIK Cloud

Шаг 2. Создание приложения

  1. Перейдите в раздел «Applications», создайте новое.
  2. Укажите имя и Redirect URL (например, https://localhost/index/).
  3. Настройте права доступа: Read и Write для вашего устройства.
Мониторинг бассейна в реальном времени: Arduino MKR1000 и Samsung ARTIK Cloud

Шаг 3. Подключение устройства

  1. В разделе «My Devices» нажмите «Connect another device».
  2. Выберите созданный тип устройства и подключите.
  3. Запишите Device ID и Device Token — они понадобятся в коде.
Мониторинг бассейна в реальном времени: Arduino MKR1000 и Samsung ARTIK Cloud

III. Подключение датчиков к MKR1000

Шаг 1. Схема подключения

Мониторинг бассейна в реальном времени: Arduino MKR1000 и Samsung ARTIK Cloud
Мониторинг бассейна в реальном времени: Arduino MKR1000 и Samsung ARTIK Cloud

Для удобства автор добавил аудиоджек для быстрого отключения температурного зонда (опционально).

Мониторинг бассейна в реальном времени: Arduino MKR1000 и Samsung ARTIK Cloud

Шаг 2. Установка библиотек

В Arduino IDE добавьте поддержку платы MKR1000 (Инструменты → Плата → Менеджер плат → Arduino SAMD Boards).

Установите библиотеки через Менеджер библиотек:

Мониторинг бассейна в реальном времени: Arduino MKR1000 и Samsung ARTIK Cloud

Шаг 3. Загрузка программы

Подключите MKR1000 к ПК. Скачайте код с GitHub. Замените в коде:

Загрузите скетч. Важно: WiFi должен иметь доступ в интернет.

Мониторинг бассейна в реальном времени: Arduino MKR1000 и Samsung ARTIK Cloud

IV. Полевые испытания

Устройство тестировалось в частном, публичном и школьном бассейнах. Собранные данные позволили оценить работоспособность.

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

Мониторинг бассейна в реальном времени: Arduino MKR1000 и Samsung ARTIK Cloud
Мониторинг бассейна в реальном времени: Arduino MKR1000 и Samsung ARTIK Cloud

V. Результаты

Проект помогает построить собственный прибор для мониторинга качества воды в бассейне. Надеемся, это повысит осведомлённость о безопасности воды — часто внимания уделяют удобствам, а не качеству. Устройство делает тестирование эффективным и ресурсосберегающим.

Удачной сборки! :)

Полный код (C/C++ для Arduino MKR1000)

/******************** Water Quality Monitoring for ARTIK Cloud ********************/
#include 
#include 
#include 
#include 
#include 
#include 
#include 

/** Temperature Sensor **/
#define ONE_WIRE_BUS 1
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

/** ARTIK Cloud REST **/
char server[] = "api.artik.cloud";
int port = 443;
char buf[200];
String deviceID = "your_device_id";
String deviceToken = "your_device_token";

/** pH Meter **/
#define SensorPin A1
#define Offset 0.00
#define samplingInterval 20
#define ArrayLength 40
int pHArray[ArrayLength];
int pHArrayIndex = 0;

int status = -1;
unsigned long millis_start;

#define WIFI_AP "your_wifi_ssid"
#define WIFI_PWD "your_wifi_password"

WiFiSSLClient wifi;
HttpClient client = HttpClient(wifi, server, port);

void setup() {
  millis_start = millis();
  Serial.begin(9600);
  startWifi();
}

void loop() {
  // Температура
  float celsius = 0;
  sensors.requestTemperatures();
  celsius = sensors.getTempCByIndex(0);
  sensors.requestTemperatures();
  celsius = sensors.getTempCByIndex(0);

  // pH
  static unsigned long samplingTime = millis();
  static unsigned long printTime = millis();
  static float pHValue, voltage;

  if (millis() - samplingTime > samplingInterval) {
    pHArray[pHArrayIndex++] = analogRead(SensorPin);
    if (pHArrayIndex == ArrayLength) pHArrayIndex = 0;
    voltage = avergearray(pHArray, ArrayLength) * 5.0 / 1024;
    pHValue = 3.5 * voltage + Offset;
    samplingTime = millis();
  }

  Serial.println("===========================================");
  Serial.println("Sending JSON:");
  Serial.print("data: { ph: "); Serial.print(pHValue);
  Serial.print(" , temp: "); Serial.print(celsius); Serial.println("} ");

  String contentType = "application/json";
  String AuthorizationData = "Bearer " + deviceToken;
  int len = loadBuffer(celsius, pHValue);

  Serial.println("Sending temp: " + String(celsius) + " and ph: " + String(pHValue));
  Serial.println("POST to ARTIK Cloud API");

  client.beginRequest();
  client.post("/v1.1/messages");
  client.sendHeader("Authorization", AuthorizationData);
  client.sendHeader("Content-Type", "application/json");
  client.sendHeader("Content-Length", len);
  client.endRequest();
  client.print(buf);

  int statusCode = client.responseStatusCode();
  String response = client.responseBody();
  Serial.print("Status: "); Serial.println(statusCode);
  Serial.print("Response: "); Serial.println(response);

  delay(1000);
}

void startWifi() {
  Serial.println("Connecting MKR1000 to WiFi...");
  while (status != WL_CONNECTED) {
    Serial.print("Attempting: "); Serial.println(WIFI_AP);
    WiFi.begin(WIFI_AP, WIFI_PWD);
    delay(10000);
    status = WiFi.status();
  }
}

double avergearray(int* arr, int number) {
  if (number <= 0) return 0;
  if (number < 5) {
    long amount = 0;
    for (int i = 0; i < number; i++) amount += arr[i];
    return (double)amount / number;
  } else {
    int min, max;
    long amount = 0;
    if (arr[0] < arr[1]) { min = arr[0]; max = arr[1]; }
    else { min = arr[1]; max = arr[0]; }
    for (int i = 2; i < number; i++) {
      if (arr[i] < min) { amount += min; min = arr[i]; }
      else if (arr[i] > max) { amount += max; max = arr[i]; }
      else amount += arr[i];
    }
    return (double)amount / (number - 2);
  }
}

int loadBuffer(float temp, float ph) {
  StaticJsonBuffer<200> jsonBuffer;
  JsonObject& root = jsonBuffer.createObject();
  root["sdid"] = deviceID;
  root["type"] = "message";
  JsonObject& data = root.createNestedObject("data");
  data["temp"] = temp;
  data["ph"] = ph;
  root.printTo(buf, sizeof(buf));
  return root.measureLength();
}

Схемы

Мониторинг бассейна в реальном времени: Arduino MKR1000 и Samsung ARTIK Cloud

Производственный процесс

  1. Навигация в SaaS и облаке: почему тщательное управление данными критично
  2. Расширение облачных горизонтов: новые зоны, контейнеры и мультиоблачные стратегии
  3. Мастерство мониторинга облачных приложений: инсайты для ИТ-лидеров
  4. Почему Cloud Linux бустит безопасность, стабильность и производительность в shared hosting
  5. Создание удалённого датчика температуры на Raspberry Pi и Python — пошаговое руководство
  6. Домашний энергетический центр: мониторинг солнечных панелей, тепловых коллекторов и температуры комнат на Ra…
  7. Самодельная система термостатирования для домашнего пивоварения: мониторинг и регулирование на Arduino
  8. Удалённый мониторинг погоды на Raspberry Pi 3 с PubNub
  9. Умная система мониторинга качества воздуха и заполненности мусорных баков
  10. Как решения для мониторинга газа повышают безопасность в промышленных и автомобильных средах