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

SmartAgro

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

Arduino MKR GSM 1400
× 1
SORACOM Air Global IoT SIM
× 1
Arduino MKR MEM Shield
× 1
GY21 Температура и влажность
× 1
УФ-датчик Adafruit SI1145
× 1
Датчик влажности почвы SparkFun (с винтовыми клеммами)
× 1
Цифровой датчик температуры Adafruit Waterproof DS18B20
× 1
Перемычки (общие)
× 1

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

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

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

Обзор

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

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

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

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

Видео

Изображение

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

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

Затем данные записываются в файл .csv на SD-карте и отправляются на серверную часть, где данные визуализируются на панели управления. Проект состоит из фронтенда и бэкенда.

Внешний интерфейс

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

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

SDCard

Устройство будет записывать данные, полученные от датчиков, на прикрепленную к нему SD-карту. Данные будут добавлены в файл .csv, который затем можно будет загрузить.

В настройках устройство определяет, доступен ли файл .csv для записи, и присоединяется к нему, если он уже существует. Он создаст новый файл, если он не существует. Ниже приведены некоторые изображения файла.

Батарея

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

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

Отправка данных

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

  {"Широта":53.3570404, "Долгота":- 6.2609935, "почвенная температура":20.56, "почвенная влажность":40, "atmoTemp":22.12, "atmoHumidity":62, "uvLight":0.00, "irLight":257, "deviceName":"device1"}  

Бэкэнд

Серверная часть приложения относится к Soracom. Данные принимаются Soracom, обрабатываются и затем отображаются на панели управления.

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

Информационная панель проекта размещена в Soracom Lagoon. Данные поступают в Soracom Air в серверной части, Soracom Harvest собирает данные, а затем Lagoon запрашивает их у Harvest.

Расположение каждого устройства в парке и все данные датчиков отображаются на приборной панели. Ниже приведены скриншоты панели управления.

Оповещения

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

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

Пользователь, работающий над этим проектом, получит много преимуществ:

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

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

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

Для этого проекта требуется список датчиков и других материалов. Полный список необходимых материалов приведен ниже.

  • 1, Arduino MKR GSM
  • 1, Arduino MEM Shield
  • 1, модуль температуры и влажности GY-21
  • 1, водонепроницаемый датчик температуры
  • 1, УФ-датчик SI-1145
  • 1, датчик влажности почвы
  • Батарейный ящик 1, 2AA (с батареями) или LiPo аккумулятор
  • 1, сим-карта Soracom
  • 1, SD-карта
  • Проволочные перемычки

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

Паяльник понадобится, чтобы спаять все компоненты вместе. Схемы показаны в файле fritzing ниже.

Не забудьте прикрепить экран MEM к плате!

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

Необходимо подготовить Arduino MKR GSM. Я запитал плату от 2-х батареек АА через порт VIN. Шаги приведены ниже.

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

В коде, используемом для проекта, есть 4 основных раздела.

  • Подготовить SD
  • Сбор данных
  • Записать данные на SD
  • Отправить данные в Soracom

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

Подготовьте SD

  bool createFile () {// создать файл .csv на SD-карте Serial.println ("Создание файла"); Serial.println («ОК - создание и открытие файла»); Файл dataFile =SD.open ("datalog.csv", FILE_WRITE); if (dataFile) {Serial.println («ОК - файл создан»); Serial.println («ОК - добавление легенды к файлу»); Serial.print («ОК - добавление»); Serial.println (легенда); dataFile.println (легенда); dataFile.close (); Serial.println («Успех - добавлены данные»); } else {Serial.println («Ошибка - файл не обнаружен»); Serial.println («ОК - повторная попытка через 5 секунд»); Serial.println («________________________________________»); Serial.println (""); dataFile.close (); задержка (5000); вернуть ложь; } Serial.println («________________________________________»); Serial.println (""); return true;} void checkFile () {Serial.println ("Проверка .csv"); Serial.println («________________________________________»); Serial.println («Настройка файла»); Serial.println («ОК - проверка наличия файла»); if (SD.exists ("datalog.csv")) // проверяем, существует ли файл .csv {// добавляем к существующему файлу, существует ли он Serial.println ("OK - файл существует"); Serial.println («ОК - добавит в существующий файл»); Serial.println («________________________________________»); Serial.println (""); } else {// создаем новый файл для добавления к Serial.println («ОК - файл отсутствует»); Serial.println («ОК - создание файла»); Serial.println (""); while (! createFile ()) {}; }}  

checkFile () функция проверяет, существует ли файл .csv, к которому устройство должно добавить. Если файл существует, функция завершается, в противном случае она вызывает createFile () который создает новый файл .csv для добавления к нему.

CollectData

  void collectData () {Serial.println ("Сбор данных"); Serial.println («________________________________________»); Serial.println («Получение данных от датчиков»); Serial.println («ОК - связь со всеми датчиками»); // собираем данные со всех датчиков грунтSens.requestTemperatures (); почваТемп =почваСенс.getTempCByIndex (0); Влажность почвы =analogRead (A1); почвенная влажность =карта (почвенная влажность, 1023, 0, 0, 100); atmoTemp =gy21.readTemperature (); atmoHumidity =gy21.readHumidity (); visibleLight =uv.readVisible (); irLight =uv.readIR (); rawUVLight =uv.readUV (); uvLight =(rawUVLight / 100); Serial.println («ОК - данные собраны»); Serial.println («ОК - выгрузка данных»); Serial.print ("[Свет] Видимый"); Serial.println (visibleLight); Serial.print («[Свет] Инфракрасный»); Serial.println (irLight); Serial.print («[Свет] Ультрафиолет»); Serial.println (uvLight); Serial.print ("[Атмо] Температура"); Serial.println (atmoTemp); Serial.print ("[Атмо] Влажность"); Serial.println (атмосферная влажность); Serial.print («Температура [почвы]»); Serial.println (температура почвы); Serial.print («[Почва] Влажность»); Serial.println (влажность почвы); Serial.println («Успех - данные сброшены»); Serial.println («________________________________________»); Serial.println ("");}  

Этот раздел кода собирает данные со всех датчиков на борту. Он контактирует с датчиками атмосферной температуры и влажности, влажности и температуры почвы, а также УФ-индекса, значения ИК-освещенности и видимого света.

Записать данные на SD

  bool burnData (Строковые данные) {Serial.println ("Данные записи"); Serial.println («________________________________________»); Serial.println («Запись данных на SD-карту»); Serial.println («ОК - открытие файла»); Файл dataFile =SD.open ("datalog.csv", FILE_WRITE); if (dataFile) {Serial.println («ОК - файл присутствует»); Serial.print («ОК - добавление»); Serial.println (данные); Serial.println («ОК - данные записи»); dataFile.println (данные); // записываем данные на SD-карту dataFile.close (); Serial.println («Успех - добавлены данные»); Serial.println («________________________________________»); Serial.println (""); } else {Serial.println ("Ошибка - файл отсутствует"); Serial.println («ОК - повторная попытка через 5 секунд»); Serial.println («________________________________________»); Serial.println (""); задержка (5000); } Serial.println ("");}  

Эта функция записывает данные, которые ранее были скомпилированы в строку файла .csv, на SD-карту. Данные добавляются в файл на карте.

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

  void parseData (String dataToSend) {Serial.println («Отправка данных»); Serial.println («________________________________________»); Serial.println («Отправка данных в Сораком»); Serial.println («ОК - Настройка соединения»); if (client.connect (url, 80)) // подготавливаем соединение и форматируем send {Serial.println ("OK - соединение установлено, данные анализа"); client.println ("POST / HTTP / 1.1"); client.println ("Хост:урожай.soracom.io"); client.println («Пользовательский агент:Arduino / 1.0»); client.println ("Соединение:закрыть"); client.print ("Длина содержимого:"); 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); } если (! client.connected ()) {перерыв; }} Serial.println («Успех - данные проанализированы»); Serial.println («________________________________________»); Serial.println ("");}  

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

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

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

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

  • deviceName представляет собой настраиваемое имя устройства. Он отправляется вместе с полезной нагрузкой в ​​Soracom, это полезно для идентификации устройств по отдельности при управлении парком устройств.
  • время сна - время (в миллисекундах), в течение которого устройство будет спать между чтениями. Устройство будет переходить в спящий режим между чтениями, чтобы уменьшить расход заряда батареи.
  • proDebug имеет значение true, если ошибка, и false в противном случае. Если proDebug включен, устройство должно быть подключено к компьютеру с включенным последовательным монитором для работы. Установите значение true при отладке, но убедитесь, что оно установлено в значение false, если оно находится в поле. Обратите внимание, что устройство по-прежнему будет печатать на серийный номер, даже если proDebug имеет значение false;

Шаг 5. Установка SD-карты

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

Шаг 6. Загрузите код

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

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

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

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

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

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

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

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

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

Библиотеки

  • ArduinoLowPower (c) 2016 Arduino LLC GNU Lesser General Public License. Эта библиотека находится в общественном достоянии.
  • MKRGSM (c) 2016 Arduino AG GNU Lesser General Public License. Эта библиотека находится в общественном достоянии.
  • Wire (c) Николас Замбетти, 2006 г., Стандартная общественная лицензия ограниченного применения GNU, эта библиотека находится в общественном достоянии.
  • OneWire (c) Стандартная общественная лицензия GNU Джима Стадта, 2007 г., эта библиотека находится в общественном достоянии.
  • Стандартная общественная лицензия DallasTempera GNU, эта библиотека находится в общественном достоянии.
  • RTCZero (c) 2015 Arduino LLC GNU Lesser General Public License, эта библиотека находится в общественном достоянии.
  • SPI (c) 2015 Hristo Gochkov Lesser GNU Lesser General Public License. Эта библиотека находится в общественном достоянии.
  • SD (C) 2010 SparkFun Electronics GNU General Public License, эта библиотека находится в общественном достоянии.

Финал

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

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

Использование модуля SD-карты

Я решил использовать экран Arduino MKR MEM, так как он прост в использовании и довольно компактен. Также можно использовать модуль SD-карты, хотя большинство из них работают с напряжением 5 В, в то время как MKR GSM может обеспечивать только 3,3 В, поэтому для повышения напряжения с 3,3 В до 5 В необходим преобразователь уровня.

Фон

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

Поэтому я решил использовать недорогую Arduino для мониторинга нескольких параметров на ферме и позволить любой ферме, большой или маленькой, вступить в эпоху Интернета вещей и интеллектуального земледелия.

Код

SmartAgro
The Full Code

Схема

schematics_rrBJ3HiIfc.fzz

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

  1. Датчик Arduino - типы и приложения
  2. Создание сети беспроводных датчиков в вашем доме
  3. Мониторинг CO2 с помощью датчика K30
  4. Какой ты рост?
  5. Простой датчик препятствий с Arduino
  6. Емкостной датчик отпечатков пальцев с Arduino или ESP8266
  7. Башня датчика облаков Arduino
  8. Водяной пистолет с датчиком движения
  9. Как создать веб-сайт, взаимодействующий с Arduino с помощью PHP
  10. Мини-радар с Arduino