Seguimiento del agua y luz que recibe una planta
Eres un amante de las plantas y tienes que viajar a algún lugar. Le pides a tu hermano a que cuide las plantas de tu casa. Pero, ¿qué pasa si tu hermano se olvida de regar o de cuidarlos? Bueno, no te preocupes, te tengo una solución para ti. Con algunos conceptos simples y geniales de IoT, puede evitar que eso suceda. Aquí la idea básica es enviarle mensajes programados por correo electrónico o un mensaje normal que le diga si el nivel de humedad y la cantidad de luz solar que recibe la planta son buenos o bajos. ¡Déjame enseñarte como!
Componentes de hardware requeridos
Sensor de humedad del suelo
Módulo Wifi Bolt IoT
Sensor LDR
Resistencia – 10k ohmios
Cargador de teléfono inteligente
Cables de puente, macho a hembra
Conector hembra / Pin de encabezado
Aplicaciones / servicios utilizados :
- Bolt Cloud
Los datos recopilados por los sensores se envían a la nube donde se procesan y analizan.
- Integromat
Con el enfoque interactivo de Integromat, se puede observar en tiempo real cómo se ejecuta su automatización y, en consecuencia, activar mensajes programados en su teléfono. Saber más en integromat.com
- Twilio
Twilio se utiliza para canales de comunicación como voz, texto, chat, video y correo electrónico al virtualizar la infraestructura de comunicaciones del mundo a través de API que son lo suficientemente simples para que las use cualquier desarrollador. Aquí usamos solo la función de mensaje de texto. Conozca más en twilio.com.
Conexiones de hardware
- Inserte un cable del LDR en el pin 3v3 del módulo de conexiones. Inserte otro cable del LDR en el pin A0
- Inserte una pata de la resistencia de 10k Ohm en el pin GND. Inserte la otra pata de la resistencia también en el pin A0.
- Conecte la sonda del sensor de suelo al circuito del amplificador usando los cables de puente hembra a hembra.
- Ahora, conecte el VCC, GND, DO (Pin de salida digital) del circuito amplificador a 3.3V, GND, 0 (pin GPIO / Pin digital) del módulo Wifi BOLT respectivamente. Conecte el cable USB al Módulo Wifi BOLT, antes de encender el dispositivo asegúrese de que los pines o cables de 3.3V y GND que salen de ellos no se toquen entre sí.
Construyendo la lógica en Integromat
- Si no tiene una cuenta en Integromat, utilice el siguiente link enlace.
- En la sección del tablero en la esquina superior derecha, haga clic en «Crear nuevo escenario» para crear un nuevo escenario.
- Ahora cree el siguiente flujo lógico como se muestra a continuación.
- Después de construir la lógica, ahora necesitamos ingresar las credenciales para los servicios que se están utilizando. Es decir, el ID del dispositivo Bolt y la clave API para el servicio BoltIoT y SSID, número de token de autenticación, número del remitente para el servicio Twilio. Puede encontrar todos estos en cloud.boltiot.com y twilio.com respectivamente. Mire las imágenes a continuación para obtener más ayuda.
- Adjunte el controlador de errores de reanudación a ambos servicios BoltIoT para evitar que Integromat detenga el escenario automáticamente en caso de cualquier error. En el controlador, use cualquier número que deba asignarse al Pin en caso de error. Por ej. 12345 (en el caso de nuestro) como se muestra en la imagen siguiente.
Códigos
nano conf.py
Este código de Python consta de las configuraciones
SSID = ‘Puede encontrar SSID en su Panel de Twilio’
AUTH_TOKEN = ‘Puede encontrarlo en su panel de Twilio’
FROM_NUMBER = ‘Este es el no. generado por Twilio. Puede encontrar esto en su Panel de Twilio ‘
TO_NUMBER = ‘Este es su número. Asegúrese de agregar +91 al principio ‘
API_KEY = ‘Esta es la clave API de su cuenta de Bolt Cloud’
DEVICE_ID = ‘Este es el ID de su dispositivo Bolt’
FRAME_SIZE = 10
MUL_FACTOR = 6
sudo nano anomaly_detection.py
import conf, json, time, math, statistics from boltiot import Sms, Bolt def compute_bounds(history_data,frame_size,factor): if len(history_data)<frame_size : return None if len(history_data)>frame_size : del history_data[0:len(history_data)-frame_size] Mn=statistics.mean(history_data) Variance=0 for data in history_data : Variance += math.pow((data-Mn),2) Zn = factor * math.sqrt(Variance / frame_size) High_bound = history_data[frame_size-1]+Zn Low_bound = history_data[frame_size-1]-Zn return [High_bound,Low_bound] mybolt = Bolt(conf.API_KEY, conf.DEVICE_ID) sms = Sms(conf.SSID, conf.AUTH_TOKEN, conf.TO_NUMBER, conf.FROM_NUMBER) history_data=[] while True: response = mybolt.analogRead('A0') data = json.loads(response) if data['success'] != 1: print("There was an error while retriving the data.") print("This is the error:"+data['value']) time.sleep(10) continue print ("This is the value "+data['value']) sensor_value=0 try: sensor_value = int(data['value']) except e: print("There was an error while parsing the response: ",e) continue bound = compute_bounds(history_data,conf.FRAME_SIZE,conf.MUL_FACTOR) if not bound: required_data_count=conf.FRAME_SIZE-len(history_data) print("Not enough data to compute Z-score. Need ",required_data_count," more data points") history_data.append(int(data['value'])) time.sleep(10) continue try: if sensor_value > bound[0] : print ("The light level increased suddenly. Sending an SMS.") response = sms.send_sms("Someone turned on the lights") print("This is the response ",response) elif sensor_value < bound[1]: print ("The light level decreased suddenly. Sending an SMS.") response = sms.send_sms("Someone turned off the lights")
Excelente proyecto, muchas gracias.