SmartAgro
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 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Производственный процесс
- Датчик Arduino - типы и приложения
- Создание сети беспроводных датчиков в вашем доме
- Мониторинг CO2 с помощью датчика K30
- Какой ты рост?
- Простой датчик препятствий с Arduino
- Емкостной датчик отпечатков пальцев с Arduino или ESP8266
- Башня датчика облаков Arduino
- Водяной пистолет с датчиком движения
- Как создать веб-сайт, взаимодействующий с Arduino с помощью PHP
- Мини-радар с Arduino