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

Plant Communicator

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

Пакет Arduino MKR IoT
× 1

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

Zapier
ThingSpeak API

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

Примечание. Это руководство может быть устаревшим, перейдите здесь для более актуальной версии .

Введение

Как однажды сказал английский поэт Уильям Вордсворт:

«Ваш разум - это сад, ваши мысли - семена, урожай может быть как цветами, так и сорняками».

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

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

Проведя месяцы в попытках связаться с нашим Spider Plant, мы отказались и использовали компоненты MKR IoT Bundle для создания устройства, которое вместо этого удаленно обследует состояние любого завода.

Вкратце:

В этом эксперименте вы узнаете, как защитить свои растения и убедиться, что они выживают, а также с помощью магии Arduino.

Контролируя влажность, температуру и свет, вы можете быть уверены, что ваши растения счастливы. Он может ежедневно отправлять электронные письма и графики и уведомлять вас о своих потребностях.

Компоненты

  • Датчик температуры TMP36
  • Фототранзистор
  • Датчик влажности своими руками

Цели обучения

  • Представляем интернет-сервис Zapier
  • Отправка HTTP-запросов
  • Управление часами реального времени и будильниками
  • Изготовление датчика влажности своими руками.
  • Отображение значений с помощью thingSpeak #ProTips
  • Создайте стиль письма с помощью HTML и CSS #ProTips
  • Тестирование API с помощью PostMan #ProTips

Хотите узнать больше?

Это руководство является частью серии экспериментов, знакомящих вас с MKR1000 и IoT. Все эксперименты могут быть построены с использованием компонентов, содержащихся в MKR IoT Bundle.

  • Подушка Love You
  • Головоломка
  • Кот Павлова
  • Ботан
  • Заводской коммуникатор

Настроить Zapier

Zapier - это онлайн-инструмент автоматизации, который может легко управлять API других приложений за нас. Это отличный инструмент для объединения нескольких задач или если приложение, которое мы хотим использовать, имеет сложный API, которым нельзя управлять с помощью Arduino.

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

Выполните несколько простых шагов, чтобы создать свой собственный zap!

Чтобы продолжить, нам нужно протестировать наш хук, сначала скопировав указанный URL, а затем нажав кнопку «Проверить и просмотреть», которая появляется при нажатии «Продолжить». Добавьте эти параметры в URL:

custom_webhook_URL? temperature =0 &влажность =0 &light =0 &warning =0

Теперь просто скопируйте и вставьте этот URL-адрес на новую страницу браузера.

Вы должны увидеть такой ответ:

Поздравляю! Вы только что отправили http-запрос!

Это именно то, что мы будем делать с нашей платой Arduino. Но вместо того, чтобы вставлять этот URL-адрес на страницу браузера, мы отправим его прямо на сервер Zapier. Также мы изменим значения параметров, которые теперь равны нулю, с помощью значений наших датчиков.

Для более продвинутого способа тестирования и работы с API ознакомьтесь с #ProTip внизу страницы.

После того, как вы проверили свой запрос, вы можете продолжить создание Zap.

Перейдите в редактирование с помощью кнопки Сделать…

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

Настроить доску

Для реализации всех функций мы будем использовать следующие библиотеки:

  • WiFi101 // для подключения к Интернету и сканирования сетей
  • RTCZero // для управления событиями, запускаемыми по времени

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

Чтобы использовать API Zapier, нам сначала нужно загрузить сертификаты . на MKR1000. Это применимо к большинству онлайн-сервисов и API!

Загрузите пример средства обновления микропрограммы из библиотеки WiFi101 и добавьте hooks.zapier.com . в домены.

 > примеры> WiFi101> FirmwareUpdater  

Если вы используете веб-редактор Arduino, эта функция еще не реализована, и вам нужно сделать это через Настольное приложение Arduino.

Отправка HTTP-запроса

Теперь мы готовы отправить HTTP-запрос с платы Arduino.

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

  температура поплавка =22; внутренняя влажность =150; int light =40; String warning ="Это предупреждающее сообщение"; warning.replace ("", "% 20");  

Обратите внимание, что строка должна быть закодирована , поскольку в HTTP-запросе нельзя отправить пробелы. Все пробелы заменяются кодированным эквивалентом % 20

После настройки наших параметров мы вызовем send_email () функция, которая преобразует их все в строки и восстановит тот же URL, который мы использовали раньше чтобы затем отправить его на сервер Zapier.

Заполните этот эскиз своими учетными данными Wi-Fi и фрагментом URL, который вы получили от Zapier и загрузите.

  #include  #include  const char * ssid =SECRET_SSID; // SSID вашей сети (имя) const char * password =SECRET_PSWD; // ваш сетевой пароль String httpsRequest =SECRET_REQUEST; // ваш URL Zapier const char * host ="hooks.zapier.com"; Клиент WiFiSSLClient; void setup () {Serial.begin (9600); в то время как (! серийный); задержка (2000); Serial.print ("Подключение Wi-Fi:"); Serial.println (ssid); while (WiFi.begin (ssid, пароль)! =WL_CONNECTED) {Serial.print ("."); задержка (500); } Serial.println (""); Serial.println («WiFi подключен»); } void loop () {температура поплавка =22; внутренняя влажность =150; int light =40; String warning ="Это предупреждающее сообщение"; warning.replace ("", "% 20"); send_email (температура, влажность, свет, предупреждение); delay (20000)} void send_email (float temperature, int влажности, int light, String warning) {// преобразовываем значения в String String _temperature =String (temperature); String _moisture =String (влажность); String _light =String (светлый); Строка _warning =предупреждение; if (client.connect (host, 443)) {client.println ("POST" + httpsRequest + "? temperature =" + _temperature + "&влага =" + _moisture + "&light =" + _light + "&warning =" + _warning + «HTTP / 1.1»); client.println ("Хост:" + String (хост)); client.println ("Соединение:закрыть"); client.println (); задержка (1000); while (client.available ()) {// Вывести на консоль ответ сервера char c =client.read (); Serial.write (c); } client.stop (); // Отключаемся от сервера} else {Serial.println ("Не удалось подключиться к клиенту"); }}  

Он будет отправлять электронное письмо на выбранный вами адрес каждые 20 секунд.

Будьте осторожны с запросами, Zapier разрешает вам только 100 бесплатных запросов в месяц.

RTC и сигналы тревоги

Мы можем использовать часы реального времени MKR1000 для отправки электронной почты каждый день в определенный час.

В этом скетче время и дата будут установлены на 16:00 4 декабря 2017 г. , а затем будет срабатывать будильник каждый день в 16:01 .

Обратите внимание, что поскольку сигнал тревоги привязан к прерыванию функция мы не можем включать какие-либо задержки , но мы можем использовать логическую переменную для запуска действий в loop ()

  #include  RTCZero rtc; // создаем объект RTC / * Измените эти значения, чтобы установить текущее начальное время * / const byte seconds =0; const byte minutes =0; const byte hours =16; / * Измените эти значения, чтобы установить текущую начальную дату * / const byte day =4; const byte month =12; const byte year =17; bool email_already_sent =false; void setup () {Serial.begin (9600); в то время как (! серийный); задержка (2000); rtc.begin (); // инициализируем 24-часовой формат RTC rtc.setTime (часы, минуты, секунды); rtc.setDate (день, месяц, год); rtc.setAlarmTime (16, 1, 0); // Устанавливаем время для Arduino, чтобы отправить электронное письмо rtc.enableAlarm (rtc.MATCH_HHMMSS); rtc.attachInterrupt (alarmMatch); } void loop () {if (! email_already_sent) {// send_email (); email_already_sent =правда; }} void alarmMatch () {// срабатывает, когда тревога переходит в Serial.println ("Alarm Match!"); email_already_sent =ложь; }  

Датчик влажности почвы своими руками

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

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

Это означает, что чем влажнее почва, тем меньшее напряжение будет измеряться Arduino.

Использование резистора 1 МОм и два провода, мы можем создать наш датчик влажности почвы своими руками!

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

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

  int влажностьPin =A2; // Установите эту тройку в соответствии с используемым сопротивлением // Самый простой способ откалибровать это значение - проверить датчик как на сухой, так и на влажной почве int threeshold =800; void setup () {Serial.begin (9600); в то время как (! серийный); задержка (2000); } void loop () {Serial.println (get_average_moisture ()); задержка (5000); } int get_average_moisture () {// делаем в среднем 10 значений для большей точности int tempValue =0; // переменная для временного хранения значения влажности для (int a =0; a <10; a ++) {tempValue + =analogRead (влагопин); задержка (100); } return tempValue / 10; }  

Добавить датчик температуры и освещенности

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

  float get_temperature () {int reading =analogRead (A1); плавающее напряжение =показание * 3,3; напряжение / =1024,0; // Вывести температуру в градусах Цельсия. Float temperatureC =(Voltage - 0.5) * 100; // преобразование из 10 мВ на градус со смещением 500 мВ // Преобразование в поплавок по Фаренгейту F =(temperatureC * 9.0 / 5.0) + 32.0; температура возврата C; } int get_light () {int light_value =аналоговое чтение (A0); return light_value; }  

Обратите внимание, что вы можете использовать единицы Фаренгейта, вернув temperatureF вместо temperatureC

#ProTip:график значений с помощью ThingSpeak

Для всех, кто контролирует уродов, вот инструкции по нанесению всех собранных данных на красивый график, подобный этому:

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

Загрузите библиотеку ThingSpeak и приступим. В приведенном ниже эскизе значения датчиков будут загружаться в облако каждую минуту, просто введите свои учетные данные WiFi и ключи API вашего канала и загрузите.

  #include  #include  #include «ThingSpeak.h» const char * ssid =SECRET_SSID; // SSID вашей сети (имя) const char * password =SECRET_PSWD; // ваш сетевой пароль WiFiClient ThingSpeakClient; unsigned long myChannelNumber =356392; const char * myWriteAPIKey =SECRET_WRITE_API; int lightPin =A0; // аналоговый вывод, к которому подключен датчик освещенности int tempPin =A1; // аналоговый вывод Vout (смыслового) TMP36 подключен к int влагаPin =A2; void setup () {Serial.begin (9600); в то время как (! серийный); задержка (2000); Serial.print ("Подключение Wi-Fi:"); Serial.println (ssid); while (WiFi.begin (ssid, пароль)! =WL_CONNECTED) {Serial.print ("."); задержка (500); } Serial.println (""); Serial.println («WiFi подключен»); ThingSpeak.begin (ThingSpeakClient);} недействительный цикл () {ThingSpeak.setField (1, get_light ()); ThingSpeak.setField (2, get_tempera ()); ThingSpeak.setField (3, get_average_moisture ()); ThingSpeak.writeFields (myChannelNumber, myWriteAPIKey); Serial.println («сообщение отправлено в облако»); задержка (60000); // отправляем значения каждые 1 минуту} float get_tempera () {int reading =analogRead (tempPin); плавающее напряжение =показание * 3,3; напряжение / =1024,0; // Вывести температуру в градусах Цельсия. Float temperatureC =(Voltage - 0.5) * 100; // преобразование из 10 мВ на градус со смещением 500 мВ // Преобразование в поплавок по Фаренгейту F =(temperatureC * 9.0 / 5.0) + 32.0; температура возврата C; } int get_average_moisture () {// делаем в среднем 10 значений для большей точности int tempValue =0; // переменная для временного хранения значения влажности для (int a =0; a <10; a ++) {tempValue + =analogRead (влагопин); задержка (10); } return tempValue / 10; } int get_light () {int light_value =аналоговое чтение (A0); return light_value; }  

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

К сожалению, Gmail не позволяет нам встраивать графики и iframe в теле письма, но мы можем отправить ссылку по электронной почте в красивой кнопке, см. совет ниже.

Мы выбрали ThingSpeak, но есть масса альтернатив! Взгляните, например, на Dweet.io и freeboard.io.

#ProTip:стиль письма

Zapier позволяет нам встраивать код HTML и CSS в тело электронного письма. Мы можем использовать это для отправки довольно стилизованного электронного письма, например:

Для достижения этого результата просто измените тип тела на html . в интерфейсе Zapier и добавьте свой собственный HTML и CSS.

Скопируйте и вставьте этот шаблон:

         

ПРИВЕТ!

Вот ваши ежедневные новости о вашем саду и # 9752;

&# 9832; Температура:{{querystring__temperature}} C
&# 9748; Влажность:{{_querystring__moisture}}
&# 9728; Light:{{querystring__light}}
{{querystring__warning}}
ПОСМОТРЕТЬ ГРАФИК

#ProTip:тестируйте API с помощью PostMan

Работа с HTTP-запросом может быть сложной, к счастью, есть много инструментов, которые могут помочь нам создать нужный нам URL.

Почтальон - отличный пример:

Просто вставьте исходный URL-адрес, указанный Zapier, добавьте параметры и отправьте его. Он распечатает ответ сервера и составит для вас URL.

Код

Полный набросок
#ProTips полный набросок

Схема


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

  1. Компоненты схемы
  2. Удобрение
  3. Интегральная схема
  4. Представляем надежный завод
  5. MOSMusic
  6. Что такое техническое обслуживание растений?
  7. Получение максимальной отдачи от заводов по производству сыпучих химических веществ
  8. Компоненты сверлильного станка
  9. Понимание ухода за растениями
  10. Компоненты двигателя внутреннего сгорания