Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Comunicador de planta

Componentes y suministros

Arduino MKR IoT Bundle
× 1

Aplicaciones y servicios en línea

Zapier
API ThingSpeak

Acerca de este proyecto

Nota:este tutorial podría estar desactualizado, vaya aquí para una versión más actual.

Introducción

Como dijo una vez el poeta inglés William Wordsworth:

"Tu mente es el jardín, tus pensamientos son las semillas, la cosecha puede ser flores o malas hierbas".

Mantener vivas sus plantas puede ser todo un desafío, ya que son muy malas para comunicarse.

Una forma de mantenerlos contentos es llevar sus plantas con usted, pero tal vez no quiera cargar con ese gran cactus o helecho que sobresale de los bolsillos de su chaqueta de invierno. Además, a la mayoría de las plantas no les gusta el frío.

Después de pasar meses tratando de comunicarnos con nuestra planta Spider, nos dimos por vencidos y usamos los componentes MKR IoT Bundle para crear un dispositivo que, en su lugar, inspecciona de forma remota el bienestar de cualquier planta.

En pocas palabras:

En este experimento, aprenderá cómo proteger sus plantas y asegurarse de que sobrevivan, además de usar la magia Arduino.

Al controlar la humedad, la temperatura y la luz, puede asegurarse de que sus plantas estén felices. Puede enviar correos electrónicos y gráficos a diario y notificarle sus necesidades.

Componentes

  • Sensor de temperatura TMP36
  • Fototransistor
  • Sensor de humedad de bricolaje

Objetivos de aprendizaje

  • Presentamos el servicio de Internet Zapier
  • Envío de solicitudes HTTP
  • Gestión del reloj en tiempo real y las alarmas
  • Construyendo un sensor de humedad de bricolaje
  • Trazar valores con thingSpeak #ProTips
  • Diseñe su correo electrónico con HTML y CSS #ProTips
  • Pruebe las API con PostMan #ProTips

¿Quiere saber más?

Este tutorial es parte de una serie de experimentos que lo familiarizarán con MKR1000 e IoT. Todos los experimentos se pueden construir utilizando los componentes incluidos en el MKR IoT Bundle.

  • Almohada Love You
  • Caja de rompecabezas
  • El gato de Pavlov
  • El empollón
  • Comunicador de plantas

Configurar Zapier

Zapier es una herramienta de automatización en línea que puede administrar fácilmente las API de otras aplicaciones para nosotros. Es una gran herramienta para combinar múltiples tareas o si la aplicación que queremos usar tiene una API compleja que no puede ser administrada por un Arduino.

En nuestro caso lo usaremos para enviar un correo electrónico con los datos recuperados del Arduino.

¡Siga estos sencillos pasos para crear su propio zap!

Para continuar, primero debemos probar nuestro gancho copiando la URL proporcionada, luego seleccionando el botón Probar y revisar que aparece cuando presionas Continuar. Agregue estos parámetros a la URL:

custom_webhook_URL? temperature =0 &idity =0 &light =0 &warning =0

Ahora simplemente copie y pegue esta URL en una nueva página del navegador.

Debería ver una respuesta como esta:

¡Felicidades! ¡Acabas de enviar una solicitud http!

Esto es exactamente lo que haremos con nuestra placa Arduino. Pero en lugar de pegar esa URL en una página del navegador, la enviaremos directamente al servidor Zapier. También modificaremos los valores de los parámetros que ahora están puestos a cero con los valores de nuestros sensores.

Para obtener una forma más avanzada de probar y trabajar con API, eche un vistazo a #ProTip al final de la página.

Después de probar su solicitud, puede continuar creando el archivo Zap.

Continúe en la edición con Hacer esto ...

Revise su buzón para ver el correo electrónico generado por Zapier. Será de la cuenta que usó en el primer paso de la configuración de Gmail.

Configurar el tablero

Para implementar todas las funcionalidades vamos a utilizar las siguientes bibliotecas:

  • WiFi101 // para conectarse a Internet y escanear las redes
  • RTCZero // para administrar eventos activados por tiempo

Puede descargarlos del administrador de la biblioteca como se explica en esta guía.

Para utilizar la API de Zapier, primero debemos cargar los certificados en el MKR1000. ¡Esto se aplica a la mayoría de API y servicios en línea!

Cargue el ejemplo del actualizador de firmware de la biblioteca WiFi101 y agregue hooks.zapier.com a los dominios.

 > ejemplos> WiFi101> FirmwareUpdater  

Si está utilizando Arduino Web Editor, esta función aún no está implementada y debe hacerlo a través del Aplicación de escritorio Arduino.

Envío de solicitud HTTP

Ahora estamos listos para enviar la solicitud HTTP desde la placa Arduino.

Por ahora estableceremos un valor arbitrario para nuestro parámetro que luego será sustituido por valores reales del sensor.

  temperatura de flotación =22; int humedad =150; int light =40; String warning ="Este es un mensaje de advertencia"; warning.replace ("", "% 20");  

Tenga en cuenta que la cadena debe estar codificada , ya que los espacios en blanco no se pueden enviar en una solicitud HTTP. Todos los espacios en blanco se sustituyen por el equivalente codificado % 20

Después de configurar nuestros parámetros, llamaremos a send_email () función, que los convertirá todos en cadenas y reconstruirá la misma URL que usamos antes para luego publicarlo en el servidor Zapier.

Complete este boceto con su credencial de WiFi y el fragmento de URL que recibió de Zapier y cárguelo.

  #include  #include  const char * ssid =SECRET_SSID; // el SSID de su red (nombre) const char * contraseña =SECRET_PSWD; // su contraseña de red String httpsRequest =SECRET_REQUEST; // su URL de Zapier const char * host ="hooks.zapier.com"; Cliente WiFiSSLClient; configuración vacía () {Serial.begin (9600); mientras (! Serial); retraso (2000); Serial.print ("Conexión Wifi:"); Serial.println (ssid); while (WiFi.begin (ssid, contraseña)! =WL_CONNECTED) {Serial.print ("."); retraso (500); } Serial.println (""); Serial.println ("WiFi conectado"); } bucle vacío () {temperatura de flotación =22; int humedad =150; int light =40; String warning ="Este es un mensaje de advertencia"; warning.replace ("", "% 20"); send_email (temperatura, humedad, luz, advertencia); delay (20000)} void send_email (temperatura de flotación, humedad int, luz int, advertencia de cadena) {// convertir valores a cadena String _temperature =String (temperatura); String _moisture =String (humedad); String _light =String (ligero); String _warning =advertencia; if (client.connect (host, 443)) {client.println ("POST" + httpsRequest + "? temperature =" + _temperature + "y humedad =" + _moisture + "&light =" + _light + "&warning =" + _warning + "HTTP / 1.1"); client.println ("Host:" + String (host)); client.println ("Conexión:cerrar"); cliente.println (); retraso (1000); while (client.available ()) {// Imprime en la consola la respuesta del servidor char c =client.read (); Serial.write (c); } client.stop (); // Desconectarse del servidor} else {Serial.println ("No se pudo conectar con el cliente"); }}  

Enviará un correo electrónico a la dirección que elija cada 20 segundos.

Tenga cuidado con las solicitudes, Zapier le permite solo 100 solicitudes gratuitas por mes.

RTC y alarmas

Podemos utilizar el reloj de tiempo real del MKR1000 para enviar un correo electrónico todos los días a una hora determinada.

Este boceto establecerá la fecha y la hora a las 16:00 del 4 de diciembre de 2017 y luego activará una alarma todos los días a las 16:01.

Tenga en cuenta que dado que la alarma está adjunta a una interrupción función no podemos incluir retrasos , pero podemos usar una variable booleana para desencadenar acciones en el loop ()

  #include  RTCZero rtc; // crea un objeto RTC / * Cambia estos valores para establecer el tiempo inicial actual * / const byte segundos =0; const byte minutos =0; horas de bytes const =16; / * Cambie estos valores para establecer la fecha inicial actual * / const byte day =4; mes byte constante =12; año byte constante =17; bool email_already_sent =false; configuración vacía () {Serial.begin (9600); mientras (! Serial); retraso (2000); rtc.begin (); // inicializar el formato RTC 24H rtc.setTime (horas, minutos, segundos); rtc.setDate (día, mes, año); rtc.setAlarmTime (16, 1, 0); // Establece la hora para que Arduino envíe el correo electrónico rtc.enableAlarm (rtc.MATCH_HHMMSS); rtc.attachInterrupt (alarmMatch); } bucle vacío () {if (! email_already_sent) {// enviar_email (); email_already_sent =true; }} void alarmMatch () {// se activa cuando la alarma se activa en Serial.println ("Alarm Match!"); email_already_sent =false; }  

Sensor de humedad del suelo de bricolaje

Dos cables colocados en la maceta de tierra forman una resistencia variable, cuya resistencia varía según la humedad del suelo .

Esta resistencia variable está conectada en una configuración de divisor de voltaje y Arduino recolecta un voltaje proporcional a la resistencia entre los 2 cables.

Lo que significa que cuanto más húmedo es el suelo, menos voltaje se medirá desde el Arduino.

Uso de la resistencia de 1 megaohmio y dos cables, ¡podemos crear nuestro sensor de humedad del suelo de bricolaje!

Subiendo el siguiente croquis puedes empezar a leer los valores del sensor, te sugerimos empezar a probarlo primero en un suelo seco y anote el valor que leyó.

Ese valor se utilizará para establecer un umbral para que Arduino sepa cuándo sus plantas necesitan agua y le envíe un correo electrónico de emergencia.

  int humedadPin =A2; // Establezca este umbral de acuerdo con la resistencia que utilizó // La forma más fácil de calibrar este valor es probar el sensor tanto en suelo seco como húmedo int threeshold =800; configuración vacía () {Serial.begin (9600); mientras (! Serial); retraso (2000); } bucle vacío () {Serial.println (get_average_moisture ()); retraso (5000); } int get_average_moisture () {// haga un promedio de 10 valores para ser más precisos int tempValue =0; // variable para almacenar temporalmente el valor de humedad para (int a =0; a <10; a ++) {tempValue + =analogRead (idityPin); retraso (100); } return tempValue / 10; }  

Agregar sensor de temperatura y luz

Vea el esquema a continuación para conectar los dos sensores. Usaremos estas dos funciones para leer valores de los sensores:

  float get_temperature () {lectura int =analogRead (A1); voltaje de flotación =lectura * 3.3; voltaje / =1024.0; // Imprimir temperatura en Celsius temperatura flotante C =(voltaje - 0.5) * 100; // conversión de 10 mv por grado con una compensación de 500 mV // Convertir a temperatura de flotación Fahrenheit F =(temperatura C * 9,0 / 5,0) + 32,0; temperatura de retorno C; } int get_light () {int light_value =analogRead (A0); return light_value; }  

Tenga en cuenta que puede usar las unidades Fahrenheit devolviendo temperatureF en lugar de temperatureC

#ProTip:trazar valores con ThingSpeak

Para todos ustedes, fanáticos del control, aquí están las instrucciones para trazar todos los datos recopilados en un hermoso gráfico como este:

Usaremos la plataforma ThingSpeak para trazar gráficos, siga estos pasos para comenzar.

Descargue la biblioteca ThingSpeak y comencemos. Este boceto a continuación cargará los valores de los sensores en la nube cada minuto, solo ingrese sus credenciales de WiFi y las claves de API de su canal y cárguelas.

  #include  #include  #include "ThingSpeak.h" const char * ssid =SECRET_SSID; // el SSID de su red (nombre) const char * contraseña =SECRET_PSWD; // su contraseña de red WiFiClient ThingSpeakClient; unsigned long myChannelNumber =356392; const char * myWriteAPIKey =SECRET_WRITE_API; int lightPin =A0; // el pin analógico al que está conectado el sensor de luz int tempPin =A1; // el pin analógico del pin Vout (sentido) del TMP36 está conectado a intidityPin =A2; configuración vacía () {Serial.begin (9600); mientras (! Serial); retraso (2000); Serial.print ("Conexión Wifi:"); Serial.println (ssid); while (WiFi.begin (ssid, contraseña)! =WL_CONNECTED) {Serial.print ("."); retraso (500); } Serial.println (""); Serial.println ("WiFi conectado"); ThingSpeak.begin (ThingSpeakClient);} bucle vacío () {ThingSpeak.setField (1, get_light ()); ThingSpeak.setField (2, get_temperature ()); ThingSpeak.setField (3, get_average_moisture ()); ThingSpeak.writeFields (myChannelNumber, myWriteAPIKey); Serial.println ("mensaje enviado a la nube"); retraso (60000); // enviar valores cada 1 minuto} float get_temperature () {lectura int =analogRead (tempPin); voltaje de flotación =lectura * 3.3; voltaje / =1024.0; // Imprimir temperatura en Celsius temperatura flotante C =(voltaje - 0.5) * 100; // conversión de 10 mv por grado con una compensación de 500 mV // Convertir a temperatura de flotación Fahrenheit F =(temperatura C * 9,0 / 5,0) + 32,0; temperatura de retorno C; } int get_average_moisture () {// haga un promedio de 10 valores para ser más precisos int tempValue =0; // variable para almacenar temporalmente el valor de humedad para (int a =0; a <10; a ++) {tempValue + =analogRead (idityPin); retraso (10); } return tempValue / 10; } int get_light () {int light_value =analogRead (A0); return light_value; }  

En el boceto profesional completo a continuación puede ver cómo adjuntar esta carga a una alarma RTC que se activa cada minuto.

Lamentablemente, Gmail no nos permite insertar gráficos y iframes en el cuerpo del correo electrónico, pero podemos enviar el enlace por correo electrónico en un hermoso botón, vea el consejo a continuación.

Elegimos ThingSpeak, ¡pero hay toneladas de alternativas por ahí! Eche un vistazo a Dweet.io y freeboard.io, por ejemplo.

#ProTip:personalice su correo electrónico

Zapier nos permite incrustar código html y css en el cuerpo del correo electrónico. Podemos usar eso para enviar correos electrónicos bastante estilizados como este:

Para lograr este resultado, simplemente cambie el tipo de cuerpo a html en la interfaz de Zapier y agregue su HTML y CSS personalizados.

Copia y pega esta plantilla:

         

¡HOLA!

Aquí está su actualización diaria sobre su jardín y # 9752;

&# 9832; Temperatura:{{querystring__temperature}} C
&# 9748; Humedad:{{_querystring__moisture}}
&# 9728; Light:{{querystring__light}}
{{querystring__warning}}
VER EL GRÁFICO

#ProTip:prueba la API con PostMan

Trabajar con solicitudes HTTP puede ser difícil, afortunadamente hay muchas herramientas que pueden ayudarnos a construir la URL que necesitamos.

El cartero es un gran ejemplo:

Simplemente pegue la URL inicial proporcionada por Zapier, agregue parámetros y envíelo. Imprimirá la respuesta del servidor y redactará la URL por usted.

Código

Bosquejo completo
#ProTips boceto completo

Esquemas


Proceso de manufactura

  1. Componentes del circuito
  2. Fertilizante
  3. Circuito integrado
  4. Predicciones de IoT para plantas en 2018
  5. Presentamos una planta confiable
  6. MOSMusic
  7. ¿Qué es el mantenimiento de planta?
  8. Aprovechar al máximo las plantas químicas a granel
  9. Componentes de la máquina de perforación
  10. Comprender el mantenimiento de la planta
  11. Componentes del motor de combustión interna