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

Беспроводной датчик влажности почвы с гелием и DFRobot

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

Модуль Helium Atom Xbee
× 1
Точка доступа к элементу гелия
× 1
DFRobot Gravity:аналоговый емкостной датчик влажности почвы
× 1
Адаптер Helium Arduino / mbed
× 1
Arduino UNO
× 1

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

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

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

Дайте вашим растениям голос с помощью беспроводного датчика влажности почвы

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

Что мы расскажем

Все это руководство от конца до конца должно занять у вас около 60 минут. Вот что мы обсудим:

  • Создание полноценного зонда влажности почвы с использованием емкостного датчика влажности почвы DF Robot Gravity, модуля прототипирования атома гелия, адаптера Arduino гелия и платы Arduino (мы использовали UNO);
  • Регистрация элемента гелия и модуля прототипирования атома гелия на панели управления гелием; и построение собственной маломощной глобальной беспроводной сети;
  • Программирование датчика влажности почвы с помощью Arduino IDE. Попутно мы также установим Гелий и ArduinoJson Библиотеки Arduino;
  • Измерение и отправка данных о влажности почвы практически в реальном времени с вашего завода на панель управления гелием; и подключите его к HTTP-каналу Helium.

Хорошо. Давайте перейдем к этому. Нам нужно спасти папоротники.

Изготовление зонда влажности почвы

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

Чтобы построить это:

  • Сначала прикрепите модуль прототипирования атома гелия к адаптеру Helium Arduino, а затем подключите этот комбинированный модуль к выбранной плате Arduino. Обязательно настройте RX и TX перемычки соответственно в зависимости от того, какую доску вы используете. Полную информацию о том, как соединить все эти платы вместе, а также правильную конфигурацию перемычек можно найти здесь. Посмотри, заверши это и возвращайся.
  • Затем нам нужно подключить датчик фактической влажности почвы к гелиевому адаптеру Arduino с помощью трехжильного кабеля-перемычки, поставляемого с датчиком влажности почвы робота DF. Три цвета проводов: черный . , красный и синий . На гелиевом адаптере Arduino черный провод подключается к GND ; красный провод подключается к 5V ; и синий провод подключается к ADO заголовок. Есть отличная диаграмма от команды DFRobot, показывающая, как здесь работает это соединение. Наша плата выглядит так, когда проводка сделана правильно:

  • Наконец, подсоедините белый разъем на соединительном кабеле к датчику влажности почвы робота DF. Хотя это может быть немного сложно, оно должно быть выполнено с минимальными усилиями.

Развертывание элемента гелия

Пришло время построить свою собственную сеть Helium Network. Это занимает около 30 секунд. (Если вы хотите узнать больше о том, как создается сквозное приложение на Helium и как мы обрабатываем компонент беспроводной сети, начните с этого обзора архитектуры.)

Чтобы развернуть Element и создать сетевое покрытие для ваших датчиков на основе Atom, просто подключите его к источнику питания и действующему порту Ethernet с помощью прилагаемых шнуров. ( Примечание. Если у вас есть элемент с поддержкой сотовой связи, использование подключения Ethernet необязательно, но рекомендуется в качестве резервного. ) После подключения вы увидите некоторую активность светодиода. Ваш Element будет подключен, когда индикатор на передней панели станет зеленым . ( сигнализация подключения к сети Ethernet ) или бирюзовый ( для сотовой связи ). Вы можете посмотреть короткое видео об Element и о том, как его подключить, здесь.

Регистрация элемента и атома гелия на панели управления гелием

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

  • Сначала создайте учетную запись Helium Dashboard, если вы еще этого не сделали.
  • Чтобы зарегистрировать свой Atom, сначала выберите New Atom . . В пользовательском интерфейсе добавьте название (например, Fern Saver ), затем введите последние четыре его MAC-адреса и его четырехзначный код HVV . Нажмите Сохранить . и вы сделали.
  • Регистрация элемента производится точно так же. Выберите Новый элемент . затем укажите имя, последние четыре его MAC-адреса и его четырехзначный код HVV . Также убедитесь, что вы указали местоположение для вашего Элемента, чтобы Dashboard могла отображать его на карте.

Вы можете убедиться, что ваш элемент находится в сети, просмотрев его Статус и сигнал в Личном кабинете:

Развертывание HTTP-канала Helium

Основная особенность Helium Platform - это каналы. Это готовые соединители для веб-сервисов (например, AWS IoT, Google Cloud IoT и Azure IoT) и протоколов (например, MQTT и HTTP ). Благодаря каналам Helium сделал за вас всю тяжелую работу, когда дело доходит до интеграции с одним из этих веб-сервисов или протоколов. Для Fern Saver, нашего датчика влажности почвы, давайте развернем HTTP-канал. Это позволит нам передавать данные любой веб-службе, которая принимает данные через HTTP. Например, вы можете использовать канал HTTP для отправки этих данных в IFTTT и, в свою очередь, получать текст каждый раз, когда Fern Saver сообщает о влажности ниже определенного уровня.

В этом примере мы настроим HTTP-канал, который отправляет данные на requestb.in, удобный бесплатный веб-сервис для тестирования HTTP-сервисов. Обратите внимание, что ниже, когда мы загружаем Sketch в Arduino, мы будем ссылаться на это имя канала, HTTP . в коде, чтобы мы знали, куда отправлять данные.

Вот как быстро и легко настроить этот канал:

Настройка IDE Arduino и загрузка эскиза

Теперь мы можем перейти к настройке вашей Arduino IDE и импорту необходимых библиотек. Для начала:

  • Убедитесь, что у вас установлена ​​последняя версия Arduino IDE. При необходимости возьми его здесь.
  • Затем нам нужно будет добавить две библиотеки: Helium и ArduinoJson . Вы можете добавлять библиотеки из среды IDE, перейдя в Sketch . -> Включить библиотеку -> Управление библиотеками. Найдите "гелий", выберите его и нажмите Установить . . Выполните тот же процесс установки для библиотеки «ArduinoJson». (Нам нужна эта библиотека, потому что дата влажности почвы, которую мы будем записывать, отформатирована как JSON.)

Как только это будет сделано, пришло время заняться программированием на Arduino. Полный исходный код Sketch, который мы будем загружать, можно найти здесь, на GitHub. Ниже приводится полный Soil_Humidity.ino эскиз.

  / * * Copyright 2017, Helium Systems, Inc. * Все права защищены. Информацию о лицензии см. В файле LICENCE.txt * * Измерение влажности с помощью емкостного * датчика влажности SEN0192. Инструкции по подключению:* https://www.dfrobot.com/wiki/index.php/Capacitive_Soil_Moisture_Sensor_SKU:SEN0193 * * Установите следующие библиотеки через Sketch-> Управление библиотеками:* - ArduinoJson * - Helium * / #include "Board.h "#include  #include  #include  #include  // Имя этого канала должно соответствовать каналу, который вы развернули в Helium // Dashboard для приема этого данные. #define CHANNEL_NAME "HTTP" // Задержка на одну секунду #define CHANNEL_DELAY 5000 // Отправка очень 60 циклов (секунд) #define CHANNEL_SEND_CYCLE 12 Гелий гелий (&atom_serial); Канал канал (&гелий); int channel_counter; void report_status (int status, int result =0) {if (helium_status_OK ==status) {if (result ==0) {Serial.println (F ("Успешно")); } else {Serial.print (F ("Ошибка -")); Serial.println (результат); }} else {Serial.println (F ("Ошибка")); }} void connect () {while (! helium.connected ()) {Serial.print (F ("Подключение -")); int status =helium.connect (); report_status (статус); если (helium_status_OK! =статус) {задержка (1000); }}} void channel_create (const char * channel_name) {int8_t result; int status; do {// Убедитесь, что мы подключены connect (); Serial.print (F («Создание канала -»)); status =channel.begin (имя_канала, &результат); // Распечатать статус и результат report_status (status, result); если (helium_status_OK! =статус) {задержка (1000); }} while (helium_status_OK! =статус || результат! =0); } void channel_send (const char * channel_name, void const * data, size_t len) {int status; int8_t результат; do {// Пытаемся отправить Serial.print (F ("Отправка -")); status =channel.send (данные, длина, &результат); report_status (статус, результат); // Создаем канал, если будут возвращены какие-либо служебные ошибки if (status ==helium_status_OK &&result! =0) {channel_create (channel_name); } иначе, если (статус! =helium_status_OK) {задержка (1000); }} while (helium_status_OK! =статус || результат! =0); } void setup () {Serial.begin (9600); Serial.println (F («Запуск»)); helium.begin (HELIUM_BAUD_RATE); channel_create (CHANNEL_NAME); channel_counter =0; } #define DRY_VALUE 536 // Снято в воздухе #define WET_VALUE 303 // Снято в воде #define HUM_RANGE (DRY_VALUE - WET_VALUE) void loop () {Serial.print (F ("Чтение -")); чтение с плавающей запятой =analogRead (A0); процент с плавающей запятой =100 * (1 - (чтение - WET_VALUE) / HUM_RANGE); Serial.print (чтение); Serial.print ("-"); Serial.println (проценты); если (--channel_counter <=0) {StaticJsonBuffer  jsonBuffer; JsonObject &root =jsonBuffer.createObject (); корень [F ("значение")] =чтение; корень [F ("процент")] =процент; буфер символов [HELIUM_MAX_DATA_SIZE]; size_t used =root.printTo (buffer, HELIUM_MAX_DATA_SIZE); channel_send (CHANNEL_NAME, буфер, используется); channel_counter =CHANNEL_SEND_CYCLE; } задержка (CHANNEL_DELAY); }  

С помощью гелия и ArduinoJson установленных библиотек, создайте новый скетч ( Файл -> Новый из среды Arduino IDE) и вставьте приведенный выше код. Затем, подключив полный комплект оборудования датчика влажности почвы к вашей рабочей станции через USB-кабель, нажмите Загрузить кнопка.

Светодиоды на вашем модуле прототипирования Atom должны начать мигать через несколько секунд. Это Атом, подключающийся к сети Helium (через элемент, который мы развернули ранее). Если Arduino IDE не выдает ошибок при загрузке кода, значит, это было успешно, и датчик влажности почвы теперь выдает показания.

Примечание о данных о влажности почвы

Как отмечалось выше, этот набросок будет собирать данные о влажности почвы и кодировать их как JSON . перед отправкой на платформу Helium. Используя приведенный выше эскиз, одна точка данных будет выглядеть примерно так (как JSON ):

  {"значение":433, "процент":55,5}  

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

Проверка подключения датчика и данных в Helium Dashboard

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

  • Если ваш Atom подключен к сети, на панели инструментов будет отображаться Статус и сигнал . , наряду с другими метаданными о его статусе. Это будет выглядеть примерно так:
  • Далее в том же интерфейсе Atom мы также отображаем журнал событий . отображение каждой точки данных от датчика и того, была ли она успешно передана в гелиевый канал. Как мы отметили выше, это предварительно созданные соединители для веб-служб или необработанных протоколов. Ранее мы развернули HTTP-канал для вашей организации Helium. И в приведенном выше эскизе датчик влажности почвы отправляет данные по этому каналу, который называется HTTP . . Однако в этом примере, изображенном ниже, мы отправляем наши данные в канал HTTP Helium:
  • Мы также предлагаем Отладку интерфейс для каждого атома, который будет отображать ваши показания по мере их поступления (после того, как вы включите эту опцию). Вот некоторые данные о влажности почвы в программе просмотра отладки Dashboard:

Дальнейшие действия и справка

Поздравляю! Это конец этого руководства. Теперь вы подготовили свой папоротник к будущему с помощью беспроводного датчика влажности почвы. Это большое дело. Твои папоротники спасибо тебе.

Если вы хотите узнать больше о гелии и о том, как создать прототип своих датчиков с использованием этого оборудования и программного обеспечения, начните здесь:

  • Документация разработчика Helium
  • Helium Developer Slack
  • Форум разработчиков Helium

Код

  • Soil_Humidity.ino
Soil_Humidity.ino C / C ++
Полный эскиз Arduino для начала отправки данных о влажности почвы с вашего датчика в гелиевый канал.
 / * * Copyright 2017, Helium Systems, Inc. * Все права защищены. Информацию о лицензии см. В файле LICENCE.txt * * Измерение влажности с помощью емкостного * датчика влажности SEN0192. Инструкции по подключению:* https://www.dfrobot.com/wiki/index.php/Capacitive_Soil_Moisture_Sensor_SKU:SEN0193 * * Установите следующие библиотеки через Sketch-> Управление библиотеками:* - ArduinoJson * - Helium * / # include "Board.h "#include  #include  #include  #include  #define CHANNEL_NAME" Helium MQTT "// Задержка на одну секунду #define CHANNEL_DELAY 5000 // Отправка очень 60 циклов (секунд) #define CHANNEL_SEND_CYCLE 12Helium helium (&atom_serial); Channel channel (&helium); int channel_counter; voidreport_status (int status, int result =0) {if (helium_status_OK ==status) {if (result ==0) { Serial.println (F («Успешно»)); } else {Serial.print (F ("Ошибка -")); Serial.println (результат); }} else {Serial.println (F ("Ошибка")); }} voidconnect () {while (! helium.connected ()) {Serial.print (F ("Подключение -")); int status =helium.connect (); report_status (статус); если (helium_status_OK! =статус) {задержка (1000); }}} voidchannel_create (const char * channel_name) {int8_t result; int status; do {// Убедитесь, что мы подключены connect (); Serial.print (F («Создание канала -»)); status =channel.begin (имя_канала, &результат); // Распечатать статус и результат report_status (status, result); если (helium_status_OK! =статус) {задержка (1000); }} while (helium_status_OK! =status || результат! =0);} voidchannel_send (const char * channel_name, void const * data, size_t len) {int status; int8_t результат; do {// Пытаемся отправить Serial.print (F ("Отправка -")); status =channel.send (данные, длина, &результат); report_status (статус, результат); // Создаем канал, если будут возвращены какие-либо служебные ошибки if (status ==helium_status_OK &&result! =0) {channel_create (channel_name); } иначе, если (статус! =helium_status_OK) {задержка (1000); }} while (helium_status_OK! =статус || результат! =0);} voidsetup () {Serial.begin (9600); Serial.println (F («Запуск»)); helium.begin (HELIUM_BAUD_RATE); channel_create (CHANNEL_NAME); channel_counter =0;} # define DRY_VALUE 536 // Снято в воздухе # define WET_VALUE 303 // Снято в воде #define HUM_RANGE (DRY_VALUE - WET_VALUE) voidloop () {Serial.print (F ("Чтение -")); чтение с плавающей запятой =analogRead (A0); процент с плавающей точкой =100 * (1 - (чтение - WET_VALUE) / HUM_RANGE); Serial.print (чтение); Serial.print ("-"); Serial.println (проценты); если (--channel_counter <=0) {StaticJsonBuffer  jsonBuffer; JsonObject &root =jsonBuffer.createObject (); корень [F ("значение")] =чтение; корень [F ("процент")] =процент; буфер символов [HELIUM_MAX_DATA_SIZE]; size_t used =root.printTo (buffer, HELIUM_MAX_DATA_SIZE); channel_send (ИМЯ_КАНАЛА, буфер, используется); channel_counter =CHANNEL_SEND_CYCLE; } задержка (CHANNEL_DELAY);} 

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

  1. Работа и применение датчика влажности почвы
  2. Контроль доступа с помощью QR, RFID и проверки температуры
  3. Датчик влажности почвы Raspberry Pi
  4. Аэропоника с Raspberry Pi и датчиком влажности
  5. Создание роботов с Raspberry Pi и Python
  6. Настойчивость и настойчивость в руководстве
  7. Датчик Portenta и термопары (с MAX6675)
  8. Управление серводвигателем с помощью Arduino и MPU6050
  9. u-blox LEA-6H 02 GPS-модуль с Arduino и Python
  10. Стандартная цифровая камера и искусственный интеллект для контроля влажности почвы