jueves, 7 de septiembre de 2017

Tutorial - Domótica: Construir un controlador de humedad (impreso en 3D) para tus plantas con Arduino.

Archivo: Descarga el código aquí.

¡Bienvenido al primer tutorial de domótica de Lunegate!, en este tutorial, vamos a crear una plataforma con la que conocer la humedad de nuestras plantas, y así saber si necesitan ser regadas.


INTRODUCCIÓN

Para este tutorial de domótica, vamos a requerir unos conceptos previos, que ya hemos comentado anteriormente en antiguos tutoriales. Pero, no os preocupeis, a continuación definiré que tutoriales tenéis que echaros un ojo, para poder realizar este tutorial.

Antes de empezar al meollo del asunto, es importante que necesitamos para realizar este tutorial:
    1º) Una impresora 3D o que alguien nos imprima las piezas.
    2º) Un soldador
    3º) Una dremel o una taladradora pequeña
    4º) Los diferentes componentes de electrónica que definiremos en la sección de "Material necesario".

Este no es un tutorial para principiantes, por lo que recomiendo antes empezar con cosas más sencillas antes de ponernos a ello. Sobro todo, necesitaries conocer como se añaden librerías de C++ en Arduino, lo siguiente es como funciona una pantalla LCD y por último como funciona un sensor de humedad.

Para este tutorial, se requerirá
Dificultad:

           Tiempo:  8 horas (imprimiendo), 1 hora montaje y carga de software.


MATERIAL NECESARIO

A continuación, os describo el material necesario para realizar el tutorial y donde conseguirlo (pulsando las imágenes podrás verlas en grande):

Imagen
Nombre producto
Donde comprarlo
Sensor de humedad
Arduino Uno
Conectores universales
LCD Nokia 5110
Resistencia 220 ohms, +/-5%,
Resistencia 1 Kohms, +/-5%,
Resistencia 3k4 ohms, +/-5%,
Resistencia 10 Kohms, +/-5%
Cualquier tienda de electrónica
Resistencia fotosensible
Interruptor
Cualquier tienda de electrónica
Potenciometro


Partes a imprimir:

Imagen
Definición
Descargar
Contenedor principal
Tapa frontal
Tapa superior
Soporte Arduino Uno


MONTAJE

Una vez que disponemos de todos los materiales que necesitamos, primero os dejare el esquema de conexiones y luego iré paso a paso definiendo el montaje.


Una vez impresas las piezas, con una lija o lima fina, puliremos las piezas para que no queden rebabas.

A continuación, empezaremos con la tapa superior.Una vez probado que agarran los tornillos, introduciremos el sensor fotoeléctrico (si vemos que no entra, con un taladro agrandaremos el agujero). Para dejarlo fijado, usaremos super-blu. Realizaremos el mismo sistema con el led de alarma.

Para montar el LCD, cogeremos la tapa superior y superponemos la pantalla LCD (es posible que no entre, así que deberéis lijar un poco). Una vez que entre perfectamente, con un lapicero marcaremos los 4 puntos donde irán los tornillos. Si tenéis tornillos con punta directamente atornillaremos, si no los tenemos, haremos un pequeño taladro (con una Dremel o similar) y probaremos que nuestros tornillos agarran.


A continuación, soldaremos al led rojo la resistencia de 220 ohms (Rojo,rojo,marrón) y al sensor fotoeléctrico con la resistencia de 10 Kohms.

Lo siguiente es fijar el driver para controlar el sensor de humedad. Para ello fijaremos con un tornillo al centro de la tapa delantera.


El siguiente punto seria coger nuestra caja principal y atornillar nuestro porta pilas al fondo de la caja (no lo atornilleis muy fuerte que solo es para ajustar los otros componentes).


Ahora vamos a prodecer a añadir nuestro Arduino Uno, para ellos primero, cogeremos nuestro soporte para Arduino y marcaremos con un rotulador los puntos donde debemos hacer los agujeros para anclarlo a la base. Es importante que nuestro Arduino quede lo más cerca posible del porta pilas, ya que necesitaremos el máximo espacio posible para los cables.


Una ver que tenemos nuestro Arduino sujeto, procedemos ha hacer el agujero para nuestro botón de encendido y apagado. No lo he añadido en el modelo 3D, ya que no sabia que interruptor usareis, así que, yo he pintado aquello que quería cortar, luego he echo un par de agujeros con el taladro y luego con una lima he dejado el espacio correcto para el interruptor (en la imagen veréis ya puesto todos los cables, no os preocupeis, eso lo haréis a continuación, pero antes de poner los cables, tenemos que poner nuestro potenciometro).

Antes de hacer el agujero, comprobad que os entrará el botón de encendido y el potenciometro, así que no pongáis completamente centrado el interruptor que sino no entrara el potenciometro. El potenciometro, lo ajustaremos lo más abajo y pegado a la derecha posible.


Primero antes de poner el potenciometro, si habéis comprado el que he descrito en el listado de componentes, hay que des-soldar sus salidas y soldar unos cables (ya que nuestro tamaño es limitado y no entra).


Una vez que tenemos el potenciometro, verificamos que todo entra correctamente y debería quedar algo así.


Volveremos a colocar el portapilas, (sacando primero el interruptor, sino es posible que no os entre), poned ya las pilas y añadiendo por último el Arduino. Y ahora a cablear como esta descrito en el circuito eléctrico descrito anteriormente.

¡Ya casi hemos acabamos!, ahora toca poner los cables. En la imagen que hay a continuación, como podéis ver hay hasta 4 salidas naciendo desde uno de los GND y de la salida de 5v. hay 2 salidas, esto se ha echo porque necesitamos esas cantidad de salidas. En futuras versiones de tutoriales, crearemos nuestros propios circuitos impresos para que esto no pase.


Y ahora sí, ya solo queda primero, poner la tapa inferior, la taladramos con 2 tornillos y fijamos bien abajo del todo. Y segundo, fijamos bien la posición de la tapa superior y hacemos los 2 agujeros y lo atornillamos bien.

Con esto habríamos acabado el montaje de nuestra pequeña pieza de ingeniería. Lo siguiente es cargarle el código (lo que nos tocará abrir sólo la parte superior de la caja y enganchar el cable usb al ordenador).


PROGRAMACIÓN

Una vez montado todo correctamente (verificar las conexiones que eso trae mucho de cabeza). Conectamos nuestro Arduino a el ordenador y añadimos el código que os pongo a continuación:

#include <LCD.h>

LCD lcd;

int LED_ALARM = 11;
int PHOTOSENSOR = 0;
int HUNIDITY_ANALOGIC = 5;
int POTENCIOMETER_ANALOGIC = 4;
int ON_LCD = 12;

boolean isReset = false;

//-- Creando un dealy propio --
unsigned long previousMillis = 0;
const long interval = 10000;
long auxInterval = 0;
int actualContrast = 0;

void setup()
{
    Serial.begin(9600);
    lcd.drawBox();  // Dibujar marcos
    lcd.printText(0,1,"LUNEGATE.NET");
    lcd.printText(4,3,"Estado:");
}

void loop()
{
   //-- Control si se necesita reiniciar el lcd --
    statusLCD();
    
    //-- Lee valores de humedad --
    int valueHumidity = analogRead(HUNIDITY_ANALOGIC);
  
    //-- Delay no bloqueante --
    unsigned long currentMillis = millis();

    if (currentMillis - previousMillis >= auxInterval)
    {
      auxInterval = interval;
      previousMillis = currentMillis;
    
      //-- Pintando informacion por pantalla --
      printInformation(valueHumidity);
  
      //-- Control Led alarma muy seco --
      statusLedAlarm(valueHumidity);
    }
  
    //-- Control de oscuridad de la pantalla --
    changeDarkness();
    
    //--  Iluminar pantalla --
    ledDisplay();
 }

//-- Private Method --

void changeDarkness()
{
    int valuePotenciometer = analogRead(POTENCIOMETER_ANALOGIC);    
    if (!((actualContrast > (valuePotenciometer-3)) && (actualContrast < (valuePotenciometer+3))))
    {
       actualContrast = valuePotenciometer;
       lcd.changeContrast(valuePotenciometer);
       delay (300);
    }
}

void statusLCD()
{
   int valueLCDStatus = digitalRead(ON_LCD);
 
   if (valueLCDStatus == 0)
   {   
      isReset = true;
   }
 
   if (valueLCDStatus == 1 && isReset)
   {
       isReset = false;
       asm("jmp 0x0000");
       auxInterval = 0;
   }
}

void printInformation(int valueHumidity)
{
      if (valueHumidity < 400)
    {
       lcd.printText(4,4,"Empantanado");
    }
    else if (valueHumidity >= 400 && valueHumidity < 800)
    {
       lcd.printText(4,4,"Humedo");
    }
    else if (valueHumidity >= 800 && valueHumidity < 1000)
    {
       lcd.printText(4,4,"Seco");
    }
    else
    {
       lcd.printText(4,4,"Sequia");
    }
}

void ledDisplay()
{
    int photoSensorValue = analogRead(PHOTOSENSOR);
  
    if (photoSensorValue <400)
    {
        lcd.led(0);  // LCDS encendidos
    }
    else
    {
        lcd.led(1000);  // LCDS apagado
    }
}

void statusLedAlarm(int valueHumidity)
{
    if (valueHumidity > 1000)
    {
       digitalWrite(LED_ALARM, HIGH);
    }
    else
    {
      digitalWrite(LED_ALARM, LOW);
    }
}


Os dejo el link del código a continuación. ControlHumedad.ino

Bien, con esto concluye nuestro primer tutorial de domótica. Solo queda insertar el sensor de humedad en la planta que queráis controlar y la tendréis vigilada.

Solo 2 apuntes a tener en cuenta. Primero, cuando la planta le falte mucha agua, se iluminará el led rojo de alarma. Segundo, el interruptor que tenemos en la parte superior de la caja, solo enciende y apagar la pantalla LCD. Esto se ha echo así, porque el echo de tener la pantalla LCD encendida constamente y que los leds de la pantalla se encendieran de noche todo el tiempo, hacia que pasadas unas horas se quedara sin pilas nuestro sistema de detección de humedad.

Actualización:Se ha añadido una entrada que detecta cuando se pulsa el botón de encendido del LCD, ya que si no detectabamos este evento la pantalla no se iluminaba. En lo referente al contraste de la pantalla, el tiempo de refresco no afectara a la misma.

Actualmente esta puesto a que el sensor mida la humedad cada 10.000ms, o lo que es lo mismo, 10 segundo, si se enciende la pantalla se actualiza automaticamente los datos.

En la foto final, esta sin potenciometro, pero bueno, la hice en la version 1.0 y esta es la 2.0.

Bueno, espero que os haya gustado y que pongáis comentarios de que os parece o que mejoraríais.




Tags: , , , , , ,

Ude

Eduardo Parada Pardo

Soy desarrollador e investigador en robótica, me gusta aprender nuevas tecnologías y todo lo relacionado con el mundo de la robótica. Si te gusta este blog, no dudes en preguntar cualquier duda.

0 comentarios:

 

Productos y tecnologias usadas en este blog:

  • Copyright © LuneGate™ is a registered trademark.
    Designed by Templateism. Hosted on Blogger Platform.