jueves, 7 de septiembre de 2017

Tutorial: Aprender a usar Wemos D1 Mini (Arduino+Wifi)


Bienvenido a un nuevo tutorial de Lunegate, hoy vamos a prender a usar un Arduino equipado con un modulo Wifi. El Wemos D1 Mini v2.3. Este pequeño controlador, nos ahorrará mucho trabajo y tiempo.

INTRODUCCIÓN

El Wemos D1 mini usa la arquitectura de Arduino, pero cuenta con menos pines de los normal. Aun así es muy barato, versátil y cuenta con una gran cantidad de shields, que nos harán no tener que volvernos locos haciendo circuitos en protoboard, sino simplemente pinchando uno encima de otro.

Un punto a remarcar, es que os recomiendo compraros la versión 2.3, ya que primeramente compre la v1.0.0 y me ha traído bastantes dolores de cabeza.

Las dimensiones son 13cm x 11cm x 1cm y un peso de 22 g. El precio es de 2,98€ más gastos de envió 4,37€.

Para este tutorial, se requerirá
Dificultad:

           Tiempo:  10 minutos (montarlo y programarlo)


MATERIAL NECESARIO

A continuación os describo el material necesario para realizar el tutorial y donde conseguirlo:

Imagen
Nombre producto
Donde comprarlo
Wemos D1 Mini


PROGRAMACIÓN

Para poder hacer funcionar nuestro Wemos, debemos cargar en nuestro IDE de Arduino, las librerías necesarias para hacerle funcionar.

Para ello, abriremos nuestro IDE, e iremos a Archive->Preferencias y donde hay campo llamado, "Gestor de URLs adicionales para tarjetas", debéis pulsar la venta e introducir esta url.

http://arduino.esp8266.com/stable/package_esp8266com_index.json



A continuación, después de introducir la url, pulsaremos en Herramientas ->  Placa -> Gestor de tarjetas. Cargara un rato las nuevas librerías, y cuando haya descargado todas, en el buscador ponéis, wemos. Buscáis la que se llame esp8266 by ESP8266 Communty. La seleccionáis y os aparecerán los botones de selección de versión, pulsáis la última (no recomiendo usar las RC), coged las estables. Pulsáis instalar y cuando acabe cerráis la vista.

Ahora ya desde Herramientas -> Placa -> Encontrareis en mi caso la última que es: Wemos D1 R2 & mini.

Ahora si queremos cargar ejemplos o carlas las librerías en nuestro proyecto, debéis ir a Programa -> incluir librería -> Gestionar librerías.



Además del controlador, los paquetes que habéis instalado traen consigo una batería de ejemplos muy útiles y muy completos. Para ello, iréis a Archivo -> Ejemplos -> ESP8266, y elegiréis Blink.
Pulsáis a cargar y veréis que el led mas cercano a la antena wifi lucirá, yo tengo configurado Wemos a 115200 (ahí es configurarlo como prefiráis, luego el Serial vereis que esta configurado a 74880), y carga el software relativamente rápida.

Una vez que vemos que nuestro hardware funciona, vamos a cargar el software de control para configurar nuestra conexión wifi.

#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>

const char* ssid = "#######";             //Set your wifi network name(ssid)
const char* password = "######";                //Set your router password

int RelayPin = D1;          //Relay Shield is controlled by pin D1
WiFiServer server(80);

void setup() {
  Serial.begin(74880); //change according to your com port baud rate
  delay(10);


  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(RelayPin, LOW);

  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.print("Use this URL : ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
}


void loop() {
 
  
  // Check for an active client
  WiFiClient client = server.available();
  if (!client) {
    return;
  }

  // Wait until client responds
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }

  // Read client request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();

  // Match the request

  int value = LOW;
  if (request.indexOf("/Relay=ON") != -1) {
    digitalWrite(LED_BUILTIN, HIGH);
    value = HIGH;
  }
  if (request.indexOf("/Relay=OFF") != -1){
    digitalWrite(LED_BUILTIN, LOW);
    value = LOW;
  }



  // Return the client response
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  do not forget this one
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");

  client.print("Relay pin is now: ");

  if(value == HIGH) {
    client.print("On"); 
  } else {
    client.print("Off");
  }
  client.println("<br><br>");
  client.println("Click <a href=\"/Relay=ON\">here</a> to turn the Relay ON<br>");
  client.println("Click <a href=\"/Relay=OFF\">here</a> to turn the Relay OFF<br>");
  client.println("</html>");

  delay(1);
  Serial.println("Client disconnected");
  Serial.println("");

}


Bien, vamos a explicar que debemos hacer antes de lanzarlo, tenemos que configurar 2 parámetros, el ssid y el password. El ssid, es el nombre de nuestra red wifi de la casa, si no la hebeis modificado podréis encontrarla debajo del router. Y el password pues exactamente lo mismo.

Una vez cargado abriréis el monitor site, y veréis que carga los Serial.print, que están en la aplicación. Ahí si es todo correcto los datos que has introducido, te mostrará que la conexión ha sido correcta, devolviéndote una dirección IP. Cópia dicha dirección y pégala en tu explorador web. En dicha web, tendrás 2 opciones, encender y apagar, pulsándolas podrás ver como se enciende y se apaga el led de vuestro Wemos.

Bien, con esto acaba nuestro tutorial de iniciación a Wemos, en este caso la comunicación es mono-direccional entre Web y Wemos. en tutoriales próximos, explicaremos como se realiza la comunicación bi-direccional entre web y hardware.

Como siempre, dejo la fuente de donde he obtenido la información: Fuente.

PUNTUACIÓN

Calidad Componentes
4,5
Montaje
4,5
Precio
4,0
Características
4,0
Puntuación Global
4,5


Arduino Driver Tutoriales Wemos

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.




Arduino Domótica fotosensor LCD Nokia 5110 sensor humedad Tutoriales
 

Productos y tecnologias usadas en este blog:

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