Sistema de monitoramento de jardim IoT baseado em Arduino

Sistema de monitoreo de jardines IoT basado en Arduino

La jardinería es un pasatiempo común para los amantes de la naturaleza. Las plantas necesitan cuidados continuos y un estrecho seguimiento. A veces esto se convierte en una responsabilidad. Así como cuando el cuidador de un jardín necesita estar ausente por un tiempo, el jardín puede permanecer desatendido durante algún tiempo o incluso mucho tiempo. El Internet de las cosas puede ofrecer una solución viable para esto. El jardín se puede modernizar con tecnología electrónica que monitorea continuamente las condiciones de las plantas y del suelo para que las plantas puedan recibir riego y sombra según sea necesario. Todo ello se puede controlar y monitorizar online con la aplicación IoT.
En este proyecto se diseña un sencillo sistema de monitorización de jardines basado en el Internet de las Cosas. Un dispositivo IoT construido sobre Arduino UNO y equipado con sensores como el sensor de temperatura y humedad DHT-11, el sensor de humedad y el sensor LDR está diseñado para enviar datos ambientales a la plataforma ThingSpeak IoT conectándose a un punto de acceso Wi-Fi ESP8266 Wi. -El módem Fi interactúa con Arduino para conectarse a un punto de acceso Wi-Fi. El dispositivo también interactúa con una bomba de agua controlada por el controlador de motor IC L293D. La bomba de agua se controla automáticamente en función de los valores de diversos factores ambientales. En el panel de Freeboard.io se pueden controlar varios factores ambientales, como la temperatura, la humedad, la humedad del suelo y la intensidad de la luz.
De hecho, muchos de estos dispositivos pueden instalarse para vigilar un gran jardín. El Arduino Sketch que se ejecuta en el dispositivo implementa las diversas funcionalidades del proyecto, como leer datos del sensor, convertirlos en cadenas, pasarlos a la plataforma IoT, recibir comandos de la plataforma IoT para controlar la bomba de agua y controlar el agua. bomba. 'agua para regar las plantas de manera oportuna. . Sketch se escribe, compila y carga utilizando ArduinoIDE. La plataforma de IoT utilizada es ThingSpeak y Freeboard.io se utiliza para crear el panel de IoT.
Protótipo de sistema de monitoramento IoT Garden baseado em Arduino
Figura 1: Prototipo de sistema de monitoreo de jardines IoT basado en Arduino
Componentes necesarios –
Lista de componentes necessários para o sistema de monitoramento IoT Garden baseado em Arduino
Fig. 2: Lista de componentes necesarios para el sistema de monitoreo de jardines IoT basado en Arduino
Diagrama de bloques -
Diagrama de blocos do sistema de monitoramento IoT Garden baseado em Arduino
Fig. 3: Diagrama de bloques del sistema de monitoreo de jardines IoT basado en Arduino
Conexiones de circuito –
El dispositivo de monitoreo de jardín está construido sobre Arduino UNO. Por lo tanto, el lector debe tener conocimientos de Cómo empezar con Arduino. Arduino UNO es una de las placas de creación de prototipos más populares, comúnmente utilizada incluso en proyectos de IoT. Varios sensores como DHT-11, sensor de humedad y LDR, módem Wi-Fi ESP8266 e interfaz IC del controlador del motor L293D con Arduino.
Imagem mostrando conexões de circuito do sistema de monitoramento IoT Garden baseado em Arduino
Fig. 4: Imagen que muestra las conexiones del circuito del sistema de monitoreo de jardines IoT basado en Arduino
El dispositivo IoT basado en Arduino tiene las siguientes conexiones de circuito:
Arduino UNO : Arduino UNO es una placa de microcontrolador basada en ATmega328. Es una de las placas de creación de prototipos más populares. La placa viene con un gestor de arranque Arduino integrado. Tiene 14 pines GPIO, 6 pines PWM, 6 entradas analógicas e interfaces UART, SPI y TWI integradas, un resonador integrado, un botón de reinicio y orificios para montar cabezales de pines. Mientras se programa la placa, se puede conectar a la PC mediante el puerto USB y la placa puede funcionar con alimentación USB. El Arduino UNO dispone de memoria Flash de 32 Kb, EEPROM de 1 Kb y SRAM de 2 Kb. La placa se puede conectar a diferentes Arduino Shields para conectividad de red Ethernet, Bluetooth, Wi-Fi, Zigbee o celular y se puede conectar a la mayoría de las plataformas IoT. El controlador ATmega328 tiene la siguiente configuración de pines:
Tabela de listagem de configuração de pinos do Arduino Uno
Fig. 5: Tabla de listado de configuración de pines de Arduino Uno
En este proyecto, los dos pines de entrada analógica de la placa se usan para interconectar el LDR y el sensor de humedad, un GPIO se usa para interconectar el sensor DHT-11, dos GPIO se usan para interconectar la interfaz del módulo ESP8266 donde se configuran los pines. usando software serial y 2 pines GPIO se usan para interactuar con el IC del controlador del motor L293D.
Sensor DHT-11 : DHT-11 es un sensor de temperatura y humedad. El sensor DHT11 consta de dos componentes principales: uno es el componente de detección de humedad y el otro es el sensor de temperatura NTC (o termistor). El termistor es en realidad una resistencia variable que cambia su resistencia con los cambios de temperatura. Ambos detectan la temperatura y la humedad del área y proporcionan salida al IC (que está ubicado en la parte posterior del sensor). El sensor tiene cuatro pines: VCC, Tierra, salida de datos y NC. Los pines VCC y Tierra están conectados al VCC y Tierra comunes respectivamente. El pin Data Out del sensor está conectado al pin 3 de la placa Arduino.
Sensor LDR : el LDR se utiliza para detectar la intensidad de la luz. El sensor está conectado al pin A1 de la placa Arduino. El sensor está conectado a un circuito divisor de potencial. El LDR proporciona un voltaje analógico que el ADC integrado convierte en una lectura digital.
Sensor de humedad : en el proyecto se utiliza un sensor de humedad del suelo compatible con Arduino. El sensor mide el contenido volumétrico de agua del suelo con la ayuda de una sonda sensora que debe colocarse en el suelo. El módulo del sensor funciona entre un voltaje de 3,3 V a 5 V. Dispone de comparador LM393 integrado. El módulo tiene cuatro terminales: VCC, Tierra, Salida de datos y Salida analógica. Los pines VCC y Tierra están conectados al VCC y Tierra comunes respectivamente. El pin de salida analógica del sensor está conectado al pin A0 de la placa Arduino.
Módulo ESP8266 : el módulo Wi-Fi ESP8266 es un SOC independiente con una pila de protocolo TCP/IP integrada que puede acceder a una red Wi-Fi. El ESP8266 es capaz de alojar una aplicación o descargar todas las funciones de la red Wi-Fi desde otro procesador de aplicaciones. Cada módulo ESP8266 viene preprogramado con el firmware del conjunto de comandos AT. El módulo está disponible en dos modelos: ESP-01 y ESP-12. El ESP-12 tiene 16 pines disponibles para interconexión, mientras que el ESP-01 solo tiene 8 pines disponibles para su uso. El ESP-12 tiene la siguiente configuración de pines:
Tabela de listagem de configuração de pinos do modem ESP8266 ESP-12
Fig. 6: Tabla de configuración de pines del listado del módem ESP8266 ESP-12
En el proyecto se utiliza el modelo ESP-01. El modelo ESP-01 tiene la siguiente configuración de pines:
Tabela de listagem de configuração de pinos do modem ESP8266 ESP-01
Fig. 7: Tabla de configuración de pines del listado del módem ESP8266 ESP-01
Los pines RESET y VCC del módulo están conectados a 3,3 V CC mientras que el pin de tierra está conectado a tierra común. Los pines Tx y Rx del módulo están conectados a los pines 10 y 11 del Arduino UNO.
IC del controlador del motor de CC L293D: el L293D es el IC del controlador del motor. Tiene 16 pines con la siguiente configuración de pines:
Tabela de listagem de configuração de pinos do IC do driver do motor L293D
Fig. 8: Tabla que enumera la configuración de pines del CI del controlador del motor L293D
Una bomba de agua se controla en el circuito usando L293D que está conectado entre los pines 3 y 6 del IC.
El IC L293D controla cualquier motor de CC según las siguientes tablas de verdad:
Tabela verdade do IC do driver do motor L293D
Fig. 9: Tabla de verdad del CI del controlador del motor L293D
Los pines 2 y 7 del L293D están conectados a los pines 6 y 7 de la placa Arduino y permiten controlar la rotación de la bomba. Los pines 1 y 16 (VSS) están conectados a 5 VCC y el pin 8 (VS) está conectado a una alimentación de 12 VCC. Los pines 4 y 5 están conectados a tierra. Los pines 12 y 13 del IC del controlador del motor también están conectados a tierra.
Fuente de alimentación: el circuito requiere 5 V CC para su funcionamiento, mientras que el CI del controlador del motor también necesita 12 V CC. La red eléctrica de CA se utiliza como fuente primaria de energía. La alimentación de red se reduce mediante un transformador y se rectifica mediante un puente rectificador completo. La salida rectificada se regula a 5 V y 12 V mediante circuitos integrados 7805 y 7812. El pin 1 de ambos circuitos integrados reguladores de voltaje está conectado al ánodo de la batería y el pin 2 de ambos circuitos integrados está conectado a tierra. Las respectivas salidas de voltaje se toman del pin 3 de los respectivos circuitos integrados reguladores de voltaje. También se conecta un LED junto con una resistencia pull-up de 10 K Ω entre la tierra común y el pin de salida para obtener una señal visual de la continuidad de la energía.
Cómo funciona el circuito –
Este dispositivo IoT basado en Arduino se puede instalar en cualquier lugar del jardín. Una vez instalado y encendido correctamente, se conecta a Internet a través de un módem Wi-Fi y comienza a leer datos de los sensores interconectados: sensor de temperatura y humedad DHT-11, sensor de humedad y sensor LDR.
El sensor de temperatura y humedad DHT11 es un sensor digital con un termistor y un sensor de humedad capacitivo incorporados. Transmite una lectura de temperatura y humedad en tiempo real cada 2 segundos. El sensor funciona con una fuente de alimentación de 3,5 a 5,5 V y puede leer temperaturas entre 0° C y 50° C y humedad relativa entre 20% y 95%.
El sensor no se puede conectar directamente a un pin digital de la placa, ya que funciona con el protocolo de 1 cable que solo debe implementarse en el firmware. Primero, el pin de datos se configura para la entrada y se le envía una señal de inicio. La señal de inicio comprende un BAJO durante 18 milisegundos seguido de un ALTO durante 20 a 40 microsegundos seguido de un BAJO nuevamente durante 80 microsegundos y un ALTO durante 80 microsegundos. Después de enviar la señal de inicio, el pin se configura para salida digital y se bloquean los datos de 40 bits que consisten en la lectura de temperatura y humedad. De los datos de 5 bytes, los primeros dos bytes son la parte entera y decimal de la lectura de humedad relativa respectivamente, el tercer y cuarto bytes son la parte entera y decimal de la lectura de temperatura, y el último es el byte de suma de verificación.
Para Arduino, ya está disponible la biblioteca estándar para el sensor DHT-11. Los datos del sensor se pueden preparar fácilmente llamando al método read11 de la clase DHT.
El sensor LDR está conectado a un circuito divisor de potencial e introduce un voltaje en el pin de entrada analógica del controlador. El voltaje se lee y digitaliza utilizando el canal ADC integrado.
El sensor de humedad también tiene una salida analógica que se detecta en el pin A0 del Arduino UNO y se convierte a un valor calibrado mediante el ADC integrado. El sensor de humedad emite un voltaje analógico en el rango de 0 a 4,2 V. El Arduino tiene un canal ADC de 10 bits, por lo que el voltaje detectado se convierte a un valor en el rango de 0 a 1024. Cuanto más seco esté el suelo, mayor es el voltaje de salida del sensor. La humedad se puede expresar como porcentaje calibrando la salida de voltaje del sensor en suelo seco y húmedo.
Arduino recopila datos de todos los sensores y convierte los valores en cadenas. El módulo Wi-Fi ESP8266 conectado al Arduino carga los datos al servidor ThingSpeak. Para mostrar y monitorear los datos cargados en el servidor ThingSpeak, se requiere un panel digital o un corredor de datos. En este proyecto, se utiliza un panel digital llamado Freeboard.io para monitorear visualmente los datos del sensor en línea. Freeboard.io utiliza el archivo JASON para visualizar datos de ThingSpeak. Ofrece tres elementos para construir un tablero:
1) Fuentes de datos : las fuentes de datos obtienen datos de fuentes externas. Estas fuentes externas pueden ser servicios de intermediación de datos, aplicaciones JavaScript o archivos JSON que reciben contenido de un servidor HTTP. En este proyecto, la fuente de datos es un archivo JSON que recibe datos del servidor ThingSpeak.
2) Widgets : los widgets ayudan a mostrar datos en forma textual o gráfica. Hay muchos widgets disponibles en Freeboard.io, como texto, gráficos, medidores, etc.
3) Paneles : se utilizan para organizar widgets.
Freeboard.io requiere registro y se pueden crear widgets posteriores a la señal.
Captura de tela da página de inscrição do Freeboard
Fig. 10: Captura de pantalla de la página de registro de Freeboard
Regístrate en Freeboard.io
Hay cuatro widgets tipo medidor diseñados para monitorear la temperatura, la humedad, la intensidad de la luz y la humedad del suelo.
El panel de control de Freeboard.io se puede crear de la siguiente manera:
1. Acceda al sitio web freeboard.io y regístrese con una nueva cuenta.
2. Ingrese el nombre y haga clic en el botón crear, después de ingresar a la nueva ventana, haga clic en crear fuente de datos y seleccione el tipo JASON.
Captura de tela dos widgets de tipo de medidor na API Freeboard
Fig. 11: Captura de pantalla de widgets de tipo medidor en la API de Freeboard
Selección de fuente de datos de Freeboard.io
3. Luego complete los campos para indicar la plataforma IoT. En la pestaña URL, cambie el número 392797 con la identificación del canal respectivo.
4. Después de crear la fuente de datos, haga clic en agregar panel y seleccione Medidor.
Captura de tela da criação de fonte de dados na API Freeboard
Fig. 12: Captura de pantalla de la creación de la fuente de datos en la API de Freeboard
Creación de widgets de Freeboard.io
5. En el panel, después de seleccionar el medidor, seleccione lo siguiente como se muestra a continuación y cree los widgets.
Captura de tela de como fazer a seleção da fonte de dados na API Freeboard
Figura 13: Captura de pantalla de cómo seleccionar la fuente de datos en la API de Freeboard

Creación del widget del medidor Freeboard.io

De esta manera, los datos del sensor se pueden cargar en el servidor ThingSpeak y verse en línea en el panel de Freeboard.io. Se puede acceder al tablero desde cualquier dispositivo como teléfono inteligente, computadora portátil o PC con conexión a Internet.
La bomba de agua se controla automáticamente en función de los valores de factores ambientales detectados por Arduino. Si el nivel de humedad es inferior al 80%, la bomba se enciende y continúa funcionando hasta que se retiene el nivel de humedad.
La placa Arduino necesita conectarse a un punto de acceso Wi-Fi para conectarse a Internet. El nombre y la contraseña del punto de acceso Wi-Fi están codificados en el boceto de Arduino. La inicialización de la conexión Wi-Fi se realiza dentro de la función de configuración de Arduino Sketch, que se ejecuta tan pronto como se enciende la placa.
La configuración de la conexión Wi-Fi se realiza pasando comandos AT al módem Wi-Fi ESP8266. El módem está conectado a los pines GPIO del Arduino que están configurados como pines de transmisor y receptor UART utilizando la biblioteca serial del software. El Wi-Fi se inicializa pasando los siguientes comandos AT al módulo ESP:
NO : este comando se pasa para comprobar si el módem funciona correctamente.
AT+GMR: este comando se pasa para imprimir la versión del firmware.
AT+CWMODE=3 : este comando se pasa para configurar el modo Wi-Fi tanto para el modo AP como para el modo Estación.
AT+RST: este comando se pasa para reiniciar el módem.
Después de reiniciar, el módem verifica las direcciones IP de los puntos de acceso disponibles. El módem ESP puede conectarse al punto de acceso cuyo SSID y contraseña están codificados en Arduino Sketch. Se pasa el siguiente comando AT para conectarse al punto de acceso:
AT+CWJAP
Una vez que el módem está conectado a un punto de acceso, obtiene la dirección IP ejecutando el siguiente comando:
AT+CIFSR: Este comando se utiliza para obtener la dirección IP del módulo ESP como cliente.
La dirección IP se almacena en una cadena y se confirma en la placa Arduino. Una vez que se recopilan los datos del sensor, los siguientes comandos AT se pasan al módulo ESP para enviarlos a la nube:
AT+CIPSTART=4”,TCP”,”184.106.153.149″,80 : este comando se pasa para iniciar una conexión TCP a la dirección IP proporcionada en el puerto especificado (80).
AT+CIPSEND=4, String(getStr.length) : este comando se pasa para enviar datos en la dirección IP mencionada anteriormente con el número de conexiones de transmisión establecidas en 4 y la longitud de los datos (que puede ser un máximo de 2048 bytes) especificada. .
Así, el Arduino se conecta al servidor mediante módem ESP y los datos enviados se pueden observar gráficamente en Freeboard.io.
Guía de programación –
El boceto de Arduino puede recopilar datos del DHT-11, el sensor de humedad y el sensor LDR, convertir los valores del sensor en cadenas, controlar la bomba de agua a través de L293D IC y pasar datos al servidor ThingSpeak. Primero, se importa la biblioteca estándar de código abierto Arduino para la interfaz con el DHT11 y la biblioteca serial del software para la comunicación serial con el módulo Wi-Fi. Se inicializan las variables que representan conexiones de pines para leer los datos del sensor.
Captura de tela da inicialização do código Arduino para o sistema de monitoramento IoT Garden
Fig. 14: Captura de pantalla de la inicialización del código Arduino para el sistema de monitoreo de IoT Garden
Primeros pasos con Arduino Sketch para el sistema de monitoreo de jardines IoT
Se llama a la función de configuración en la que la velocidad en baudios de comunicación en serie para la comunicación con el módem Wi-Fi se establece en 9600. El modo Wi-Fi y la conectividad de red se establecen mediante comandos AT con algunos retrasos. El retraso se debe dar según el tiempo que tarde en conectarse a la red.
Captura de tela da função de configuração no código Arduino para sistema de monitoramento IoT Garden
Fig. 15: Captura de pantalla de la función de configuración en código Arduino para el sistema de monitoreo de jardines IoT
Función de configuración en Arduino Sketch para monitoreo de jardines IoT
Se llama a la función de bucle en la que los datos del sensor se obtienen y almacenan en las variables inicializadas. La bomba de agua se controla pasando la lógica digital apropiada a los pines de entrada del IC del controlador del motor L293D. Se llama a la función esp8266 para transmitir datos a la nube.
Captura de tela da função Loop no código Arduino para sistema de monitoramento IoT Garden
Fig. 16: Captura de pantalla de la función Loop en código Arduino para el sistema de monitoreo de jardín IoT
Función de bucle en Arduino Sketch para el sistema de monitoreo de jardines IoT
En la función esp8266, se pasan comandos AT para establecer la conexión TCP y luego se proporciona la clave API de ThingSpeak para transmitir los datos al canal registrado. Cada 16 segundos, los datos se actualizan para el canal ThingSpeak.
Captura de tela da função de gerenciamento de comunicação IoT no Arduino Sketch para sistema de monitoramento IoT Garden
Fig. 17: Captura de pantalla de la función de gestión de comunicaciones de IoT en Arduino Sketch para el sistema de monitoreo de jardines de IoT
Función Gestión de la comunicación IoT en Arduino Sketch para el sistema de monitoreo de jardines IoT
Esto completa el boceto de Arduino para el sistema de monitoreo de jardines basado en IOT. Consulte el Arduino Sketch en la sección de códigos para probarlo.
Este proyecto es fácil de construir y se puede instalar en cualquier parte del jardín. Permite el mantenimiento automático del jardín y el monitoreo remoto con la ayuda de IoT.

Código fuente del proyecto

###

 //Programa para


 /*================================================= ===========================*/

 /*Biblioteca estándar */

 /*================================================= ===========================*/

 #incluir

 #incluir


 /*================================================= ===========================*/

 /*Inicialización de variables para pines Señor */

 /*================================================= ===========================*/

 dhtDHT;

 #definir DHT11_PIN 3

 #definir RM_1 6

 #definir RM_2 7


 flotar t=0;

 flotar h=0;


 intsen_val = 0;
 
int lig_val = 0;


 datos de caracteres = 0;


 #definir MOS_SEN A0

 #definir LDR_SEN A1

 /*================================================= ===========================*/

 /*Clave API para cosas que hablan y cambian con tu API */

 /*================================================= ===========================*/


 Cadena apiKey = "CAM10KIK7YH2HAO0";


 /*================================================= ===========================*/

 /*Pines seriales para conectar el módulo WiFi */

 /*================================================= ===========================*/

 SoftwareSerial be(10,11); // RX, TX


 /*================================================= ===========================*/

 /*Función de configuración que se ejecuta primero */

 /*================================================= ===========================*/

 configuración vacía

 {

 Serie.begin(9600);

 pinMode(MOS_SEN, ENTRADA);

 pinMode(LDR_SEN, ENTRADA);

 pinMode(RM_1, SALIDA);

 pinMode(RM_2, SALIDA);



 ser.begin(9600);


 
// restablecer la conexión WiFi ESP8266 AT+CIPMUX=1 AT+CWJAP

 /*================================================= ==========================*/

 /*Comandos AT para establecer conexión WiFi */

 /*================================================= ==========================*/

 ser.println("EN");

 retraso(1000);

 ser.println("AT+GMR");

 retraso(1000);

 ser.println("AT+CWMODE=3");

 retraso(1000);

 ser.println("AT+RST");

 retraso(5000);

 ser.println("AT+CIPMUX=1");

 retraso(1000);

 String cmd="AT+CWJAP="Garaje de ingenieros","egP@$$w0rd?"";

 ser.println(cmd);

 retraso(1000);

 ser.println("AT+CIFSR");

 retraso(1000);

 }


 /*================================================= ==========================*/

 /*Funciones de bucle que se ejecutan infinitamente y recopilan datos del sensor */

 /*================================================= ==========================*/

 bucle vacío

 {

 retraso(1000);

 int chk = DHT.read11(DHT11_PIN);

 Serial.print("Temperatura = ");

 t = DHT.temperatura;

 Serial.println

 Serial.print("Humedad = ");

 h = DHT.humedad;
 
Serie.println(h);

 lig_val = analogRead(LDR_SEN);

 int mos_val = leer_mos;



 si(mos_val > 80)

 {

 Serial.println("Inicio");

 escritura digital (RM_1, ALTA);

 escritura digital (RM_2, BAJO);

 }

 de lo contrario si (read_mos <80)

 {

 Serial.println("Detener");

 escritura digital (RM_1, BAJO);

 escritura digital (RM_2, BAJO);

 }

 Serial.println(sen_val);

 retraso(500);

 Serial.print("Intensidad de la luz = ");

 Serial.println(lig_val);

 retraso(500);


 esp_8266;

 }


 /*================================================= ==========================*/

 /*esp8266 función que sube datos a la web */

 /*================================================= ==========================*/

 vacío esp_8266

 {

 // conexión TCP AT+CIPSTART=4,"TCP","184.106.153.149",80

 Cadena cmd = "AT+CIPSTART=4,"TCP","";

 cmd += "184.106.153.149"; //api.thingspeak.com

 cmd += "",80";

 ser.println(cmd);

 Serie.println(cmd);

 si(ser.find("Error"))

 {

 Serial.println("Error AT+CIPSTART");

 devolver;

 }

 // preparar GET cadena GET
 
Cadena getStr = "GET /update?api_key=";

 getStr += apiKey;

 getStr +="&field1=";

 getStr +=String(h);

 getStr +="&field2=";

 getStr +=Cadena

 getStr +="&field3=";

 getStr +=String(sen_val);

 getStr +="&field4=";

 getStr +=String(lig_val);

 getStr += "rnrn";



 // enviar longitud de datos

 cmd = "AT+CIPSEND=4,";

 cmd += String(getStr.length);

 ser.println(cmd);

 Serie.println(cmd);

 retraso(1000);

 ser.print(getStr);

 Serial.println(getStr);

 //thingspeak necesita un retraso de 15 segundos entre actualizaciones

 retraso(15000);

 }


 int lectura_mos

 {

 sen_val = analogRead(MOS_SEN);

 Serial.print("Humedad = ");

 sen_val = mapa(sen_val,0,1023,0,255);

 devolver sen_val;

 }

###

Diagramas de circuito

Diagrama de circuito basado en Arduino-IoT-Garden-Monitoring-System-

Vídeo del proyecto

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.