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

UnifiedWater v1

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

Arduino MKR GSM 1400
× 1
Кольцо Adafruit NeoPixel:светодиод WS2812 5050 RGB
× 1
GY21 Температура и влажность
× 1
Датчик мутности, выход фототранзистора
× 1
Цифровой датчик температуры Adafruit Waterproof DS18B20
× 1
DFRobot Gravity:комплект аналогового датчика / измерителя pH на наконечнике копья
× 1
Кнопочный переключатель SparkFun, 12 мм
× 1
Перемычки (общие)
× 1
Резистор 220 Ом
× 1

Необходимые инструменты и машины

Паяльник (универсальный)

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

Веб-редактор Arduino
Платформа подключения SORACOM Air IoT
SORACOM Harvest
лагуна SORACOM

Об этом проекте

Обзор

Реки. Необходим для нашего выживания, торговли и так далее. За последнее десятилетие были предприняты большие усилия по снижению загрязнения водоемов мира. Реки являются источником загрязнения, так как люди не идут в море, чтобы выбрасывать мусор. Сбрасывают в реки.

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

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

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

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

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

Система WaterAid собирает данные о температуре, pH и влажности воды, а также о температуре и влажности атмосферы и снабжена всеми датчиками, которые могут понадобиться для отслеживания загрязнения реки.

Видео

Изображения

Функциональность

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

Спереди Конец

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

MKR GSM используется для внешнего интерфейса, поскольку он прост в использовании и надежен. Он также может получить доступ к Soracom через GSM. Ниже приведены шаги, предпринимаемые устройством при сборе данных.

Батарея

Устройство можно запитать несколькими способами. Он может питаться от LiPo-аккумулятора через предусмотренный порт на устройстве, от блока питания или путем подключения аккумулятора через порт VIN на устройстве.

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

светодиод Кольцо

Устройство также оснащено светодиодным кольцом. Это дает пользователю обратную связь о том, что устройство делает в данный момент. Есть 3 режима, в которых может быть кольцо.

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

Взятие образца

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

Анализ данных

Данные должны быть отправлены в Soracom в виде строки JSON. Это дает всем используемым ключам значение. После этого данные можно будет легко интерпретировать серверной частью. Ниже приведен пример отправляемой полезной нагрузки.

  {
"Широта":53.3474617,
"Долгота":- 6.2514529,
"waterpH":7.30,
"waterTurbidity":94,
«waterTemp»:12.10,
«atmoTemp»:14.50,
«atmoHum»:82,
«deviceID»:1,
«deviceName»:«device1»,
«эпоха»:1559392636,
«режим»:2
}

Бэкэнд

Бэкэнд проекта относится к Soracom. Данные собираются и визуализируются в серверной части на информационных панелях. Эти информационные панели созданы с помощью Soracom Lagoon.

Панель управления

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

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

Масштабируемость

Устройство можно легко масштабировать, и все данные можно собирать и отображать на одной панели. Несколько устройств могут передавать данные в Soracom и отображать данные на панели управления.

Цена устройства и исключительная простота сборки и программирования позволяют легко использовать целый парк устройств. Эти устройства также можно легко зарегистрировать в Soracom с помощью таких инструментов, как Soracom Krypton.

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

Преимущества

Частное лицо или компания, использующие этот продукт, выиграют:

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

Создание проекта

Шаг 1. Необходимое оборудование

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

  • 1, Arduino MKR GSM
  • 1, 16 светодиодов RGB LED кольцо
  • 1, модуль температуры и влажности GY-21
  • 1, датчик мутности
  • 1, водонепроницаемый датчик температуры
  • 1, датчик pH и модуль
  • 1, кнопка
  • 1, резистор (220 Ом)
  • Проволочные перемычки

Шаг 2. Подключение цепи

Компоненты следует спаять вместе. Чтобы облегчить понимание схем, была использована макетная плата. схемы ниже.

Подготовка MKR GSM

После того, как датчики будут припаяны к устройству, к устройству необходимо прикрепить SIM-карту, антенну GSM и аккумулятор. Я питаю плату от 2-х батареек АА через порт VIN. Шаги приведены ниже.

Шаг 3. Подтверждение кода

В коде проекта 4 основных раздела.

  • Сбор данных с датчиков
  • Получить время и дату.
  • Данные процесса
  • Отправить данные

Все эти разделы описаны и подробно описаны ниже.

Сбор данных с датчиков

  Serial.println ("Взятие пробы"); 
Serial.println ("________________________________________");
Serial.println ("Взятие пробы");
Serial.println («ОК - Разминка»);
задержка (6000); // задержка калибровки датчика
colourLED (50);
Serial.println ("OK - Take Sample");
Serial.print ("");
for (int i =0; i <16; i ++)
{
if (mode ==1)
{
strip.setPixelColor (i, strip.Color (0, 255, 0 ));
strip.show ();
}
else
{
strip.setPixelColor (i, strip.Color (0, 0, 255));
strip.show ();
}
// собираемся взять несколько проб воды - датчики не очень точны
waterTurbidity + =getWaterTurbidity ();
waterPh + =getWaterPh ();
if (i> 14)
{
// взять один образец для высокоточных датчиков
waterTemperature =getWaterTemp ();
atmoTemperature =getAtmoTemp ();
atmoHumidity =getAtmoHumidity ();
}
Serial.print (".");
delay (500);
}
Последовательный .println ("");
Serial.println ("Успешно - образцы взяты");
for (int i =0; i <=16; i ++)
{
strip.setPixelColor (i, strip.Color (0, 0, 0));
strip.show ();
задержка (30);
}
Serial.println ("________________________________________");
Serial.println ("");
задержка (500);

Раздел кода выше начинается с ожидания 6 секунд для калибровки датчиков в воде. Затем устройство зацикливается 16 раз, при этом новый светодиод включает кольцо при каждой петле.

Данные от датчиков, которые имеют колеблющиеся значения, собираются 16 раз, после чего определяется среднее значение. Датчики высокой точности считываются в последнем цикле.

Получить время и дату

  void getCredentials () 
{
Serial.println ("[1/2] Time");
Serial.println ("OK - получение времени из RTC");
currentEpoch =processTime ();
colourLED (50);
Serial.println ("[2/2] Geolocation");
Serial.println ("OK - получение Геолокация по GPRS ");
while (! GetLocation ());
Serial.print (" Успешно - Геолокация есть "); Serial.print (широта, 7); Serial.print (","); Serial.println (longitude, 7);
colourLED (50);
}

bool getLocation ()
{
if (location.available ( ))
{
latitude =location.latitude ();
longitude =location.longitude ();
delay (500);
return true;
}
else
{
delay (500);
return false;
}
}

Первый цикл обрабатывает учетные данные. Время извлекается из встроенных часов реального времени, поскольку оно было синхронизировано с сетью GSM при настройке. Геолокация извлекается из GPRS.

Данные процесса

  void processData () 
{
Serial.println («ОК - определение среднего значения pH и мутности воды»);
waterPh =(waterPh / 16);
waterTurbidity =(waterTurbidity / 16);
Serial.println ("ОК - выгрузка данных в последовательный");
Serial.println ("");
Serial.print ("[ Вода] pH »); Serial.println (waterPh);
Serial.print («[Вода] Мутность»); Serial.println (водная мутность);
Serial.print («Температура [воды]»); Serial.println (температура воды);
Serial.print ("[Атмо] Температура"); Serial.println (атмоТемпература);
Serial.print («[Атмо] Влажность»); Serial.println (atmoHumidity);
Serial.println ("");
Serial.println ("Успешно - данные обработаны");
colourLED (50);
}

String makeLine ()
{
Serial.println ("OK - Создание строки");
String dataReturned; dataReturned + ="{"; dataReturned + ="\ n";
dataReturned + ="\" Широта \ ":" + String (latitude, 7); dataReturned + =", \ n";
dataReturned + ="\" Долгота \ ":" + String (longitude, 7); dataReturned + =", \ n";
dataReturned + ="\" waterpH \ ":" + String (waterPh); dataReturned + =", \ n";
dataReturned + ="\" waterTurbidity \ ":" + String (waterTurbidity); dataReturned + =", \ n";
dataReturned + ="\" waterTemp \ ":" + String (waterTemperature); dataReturned + =", \ n";
dataReturned + ="\" atmoTemp \ ":" + String (atmoTemperature); dataReturned + =", \ n";
dataReturned + ="\" atmoHum \ ":" + String (atmoHumidity); dataReturned + =", \ n";
dataReturned + ="\" deviceID \ ":" + String (deviceID); dataReturned + =", \ n";
dataReturned + ="\" deviceName \ ":"; dataReturned + =String ("\" "); dataReturned + =String (deviceName); dataReturned + =String (" \ ""); dataReturned + =", \ n";
dataReturned + ="\" эпоха \ ":" + String (currentEpoch); dataReturned + =", \ n";
dataReturned + ="\" режим \ ":" + String (режим); dataReturned + ="\ n";
dataReturned + ="}";
Serial.println ("OK - данные ниже");
Serial.println ("");
Serial.println (dataReturned);
Serial.println ("");
Serial.println ("Успешно - строка готова");
colourLED (50);
return dataReturned;
}

processData () получает среднее значение данных, собранных с датчиков, которые имели тенденцию к колебаниям, а затем выгружает все данные в Serial Monitor.

makeLine () компилирует все данные в строку JSON, которая отправляется в Soracom. Все значения анализируются в буфере JSON, готовом к отправке на серверную часть.

Отправить данные

  void parseData (String dataToSend) 
{
Serial.println ("OK - Установка соединения");
if (client.connect (url, 80))
{
Serial.println ("OK - соединение установлено, данные анализа");
client.println ("POST / HTTP / 1.1");
client.println ("Host :gather.soracom.io ");
client.println (" User-Agent:Arduino / 1.0 ");
client.println (" Connection:close ");
client.print ("Content-Length:");
client.println (dataToSend.length ());
client.println ("");
client.println (dataToSend);
Serial.println ("ОК - данные проанализированы");
}
Serial.println ("ОК - получение ответа");
Serial.println ("");
while (1)
{
if (client.available ())
{
char c =client.read ();
Serial.print (c);
}
if (! client.connected ())
{
break;
}
}
Serial.println ("Успешно - Данные анализируются ");
}

Наконец, данные отправляются в Soracom. Устройство установило соединение с сервером, а затем подготовит учетные данные. Затем данные отправляются на сервер, а ответ выводится на монитор последовательного порта.

Затем устройство переходит в спящий режим, пока триггер не разбудит его, повторяя шаги снова.

Шаг 4. Настройка переменных

Есть определенные переменные, которые необходимо отредактировать, прежде чем проект можно будет использовать. Они перечислены ниже. Инструкции по их настройке также приведены ниже.

  • режим режим устройства определяет, будет ли он брать пробы периодически или же он берет пробы нажатием кнопки. Если для этой переменной установлено значение 1, устройство нужно будет активировать с помощью кнопки. Если установлен режим 2, устройство будет периодически брать пробы.
  • deviceID и deviceName это пользовательские переменные, которые используются для идентификации устройства, если используется целый парк устройств. Каждому используемому устройству следует дать уникальный идентификатор и имя, чтобы их можно было легко идентифицировать.
  • время сна хранит количество времени, в течение которого устройство находится в спящем режиме между чтениями, оно установлено на 5 секунд в коде, который подходит для тестирования, но должен быть изменен при использовании его в полевых условиях. Образец можно брать с интервалом в 15 минут.
  • proDebug используется при отладке, в коде для него установлено значение false, но если при отладке требуется монитор последовательного порта, его следует установить в значение true. Обратите внимание, что устройство по-прежнему будет печатать на серийный номер, даже если отладка отключена. Если отладка включена, устройство не будет работать, если не будет включен последовательный монитор.

Шаг 5. Загрузка кода

Перед настройкой серверной части данные должны быть отправлены на нее.

Для этого подключите ваш MKR GSM к компьютеру и загрузите код на устройство, убедитесь, что режим устройства установлен на 1 для этой настройки. После загрузки кода поместите все датчики в воду.

Теперь нажмите кнопку на устройстве и дождитесь сбора и отправки данных. Повторите это несколько раз, чтобы заполнить Soracom Air.

Шаг 6. Настройка Soracom

Этот шаг разделен на 2 раздела:первый будет посвящен созданию учетной записи в Soracom и регистрации вашей SIM-карты, а второй - настройке Soracom Harvest для сбора данных из Air. Если у вас уже есть учетная запись в Soracom, пропустите первый раздел.

Раздел 1. Создание учетной записи

Раздел 2:Группы и урожай

Шаг 7. Настройка Lagoon

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

Calibration Problems

The turbidity and pH sensors have to be calibrated to be used precisely, you might find that when running the code, the turbidity might by 105% or the pH of water 3. In this case, the sensors have to be calibrated. A quick guide into calibrating them is below.

  • pH Sensor The pH sensor can be calibrated using the potentiometers on the module, place the probe in still bottled water of pH 7 and wait for 5 minutes, now develop a code that prints the pH from the sensor to the serial monitor. Twist the potentiometer until the pH is 7.
  • Turbidity Sensor The turbidity sensor is not very precise and so a relative percentage, compared to pure water is taken. To refine the value of pure water, if your readings exceed 100% turbidity, you will need to place the turbidity sensor in pure water and develop a code that prints the voltage on the analog pin of the pH sensor to the serial monitor. A variable named calibration is found in sensors.h , change the value of that variable to the voltage received when the probe was placed in pure water.

Libraries

  • ArduinoLowPower (c) 2016 Arduino LLC GNU Lesser General Public Licence this library is in the public domain
  • Adafruit_Neopixel (c) Phil Burges Lesser General Public Licence this library is in the public domain
  • MKRGSM (c) 2016 Arduino AG GNU Lesser General Public Licence this library is in the public domain
  • Wire (c) 2006 Nicholas Zambetti GNU Lesser General Public Licence this library is in the public domain
  • OneWire (c) 2007 Jim Studt GNU General Public Licence this library is in the public domain
  • DallasTemperature GNU General Public Licence this library is in the public domain
  • RTCZero (c) 2015 Arduino LLC GNU Lesser General Public Licence this library is in the public domain

Final

Finally, I got an enclosure done for the project that could be easily portable but be fixed to collect samples both in mode 1 and 2. Steps are below.

Finally, ensure that the mode is set accordingly and start using the device on the field. Check out your local river or lake and see how clean it is. Play around with the dashboard and see what other widgets it has.

Background

Today, data is the new currency and collecting it easily and efficiently is key to a better environment. By measuring the pollution of rivers and lakes collectively, we can raise awareness that the waters are getting dirtier and something has to be done.

I was thinking of an idea for the Soracom contest and I felt like I had to make something beneficial for the environment, the idea of people and companies working together on collective dashboards to visualise the status of rivers and lakes globally inspired me to take this project on.

What will you do to stop water pollution? Because action has to be taken today, and tomorrow is a day too late.


Код

Код
The repo for the projecthttps://github.com/Andrei-Florian/UnifiedWater-v1

Схема

schematics_e7TRP6KJKI.fzz

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

  1. Что такое датчик O2?
  2. Датчик движения с использованием Raspberry Pi
  3. Датчик влажности почвы Raspberry Pi
  4. Тест датчика DS18B20
  5. Датчик температуры Raspberry Pi
  6. Сенсорная телеметрия 2.0.1
  7. Датчик эмоций / ЭЭГ
  8. Windows 10 IoT Core на Raspberry Pi 2 - данные датчика Adafruit
  9. MyRiver
  10. Башня датчика облаков Arduino