Páginas

miércoles, 24 de febrero de 2016

Sensor apertura Ventana/Puerta

 

  

 

 

 

 

 

 

 

 

 

Sensor apertura Ventana/Puerta

Hoy vamos a ver un ejemplo muy simple que detecta la apertura de una puerta o ventana, para ello necesitamos un  interruptor magnético como este:




Tiene un patilla que va a tierra y la otra a la salida digital 3 del Arduino, como vamos a utilizar las interrupciones no puede ir a cualquier entrada digital, para más información Mira este enlace

Cargamos este ejemplo:


// ######################################
// # Sensor al Digital 3 y a GND
// # Interruptor D3 Interrupcion 1
// # http://arubia45.blogspot.com.es
// ######################################


// Definiciones
boolean abierto = false;
int cambios;

// Rutina de Interrupción
void interrupcion()
{
  abierto = true;
//  Serial.print("cambio ");
  if (cambios == 0)
    cambios ++;
  else {
    cambios = 0;
    abierto = false;
  }
  //Serial.println(cambios);
}

void setup() {
  Serial.begin(9600);
  // Interruptor D3 Interrupcion 1
  digitalWrite(3, HIGH);
  attachInterrupt(1,interrupcion,HIGH); // Attaching the ISR to INT0 
}

void loop() {
  delay (1000);
  if (abierto)
    Serial.println("Abierto");
  else
    Serial.println("Cerrado");
}



Bajar Ejemplo

Es un ejemplo muy simple que requiere que cuando arranquemos la ejecución el interruptor magnético se encuentre cerrado. 




Espero que os sea útil.

martes, 9 de febrero de 2016

Emvio de eMail (SMTP)


  

 

 

 

 

Envio de eMail (SMTP)


Hoy os traigo un par de temas con los que estoy trabajando y que me parecen muy interesantes. Y es trabajar con nuestro Arduino mediante una red ethernet. Para esto tenemos que utilizar un shield ethernet, el más extendido y estandar es el W5100 Más información.


Hay varias formas de enviar mail con nuestro Arduino, hay componentes que nos hacen de intermediarios (como Temboo), mediante telnet a un PC que envie el mail o directamente mediante un servidor de correo smtp.

Esta última opción es la que a mi parecer es la más sencilla y limpia. Ya que sólo dependemos de nuestro Arduino para enviar el mail. Existen algunas restricciones para que podamos utilizar el servidor smtp directamente desde el Arduino, servicios de correo como Google o Yahoo no utilizan puertos estandar y además piden hacer conexiones seguras, algo complicadas para nuestro Arduino. Por lo tanto es necesario buscar un servidor de correo smtp que utilice el puerto estándar 25 sin seguridad. Tras buscar por la red me he decantado por una web de correo que está bastante bien y se ajusta a lo que necesitamos. Se trata de Mail India su datos del servidor smtp son servidor: smtp.india.com y puerto: 25

Sólo nos falta darnos de alta una cuenta y empezar a utilizarlo. Él código original es del PlayGround de Arduino: Código original yo lo he modificado un poco para hacerlo más utilizable.


  1. // Red W5100  
  2. #include "SPI.h"  
  3. #include "Ethernet.h"  
  4.   
  5. // Le asignamos los datos de Red Mac, IP y Puerto.  
  6. byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  
  7. IPAddress ip( 192, 168, 0, 133 ); 
  8. IPAddress gateway( 192, 168, 0, 1 );
  9. IPAddress subnet( 255, 255, 255, 0 );

  10. // Servidor Mail (mail.india.com)  -> smtp puerto 25
  11. char server_smtp[] = "smtp.india.com";
  12. int port = 25;


Primero en nuestro código añadimos las librerías necesarias, configuramos la conexión a nuestra red, en este caso le damos la IP 192.168.0.133 al Arduino y por último ponemos los datos del servidor de correo.


  1. void setup()  
  2. {  
  3.   Serial.begin(9600);  
  4.   // Inicializamos la conexión Ethernet  
  5.   Ethernet.begin(mac, ip, gateway, gateway, subnet); 
  6.   delay(2000); 
  7. }  

En la función setup inicializamos la conexión para conectarnos a la red. De esta forma ya se conectaría el Arduino a nuestra red ethernet .



  1. byte enviaEmail(String email)
  2. {
  3.   
  4.   //LAN
  5.   String mi_ip    = "192.168.0.133";
  6.   String mi_mail  = "XXXXXX@india.com";

  7.   byte thisByte = 0;
  8.   byte respCode;
  9.   email = "RCPT To: <" + email + ">";
  10.   char mail_char[50];
  11.   email.toCharArray(mail_char,30);


  12.   Serial.print(F("Envio Mail ALRO: "));
  13.   Serial.println(email);
  14.  
  15.   if(client.connect(server_smtp,port) == 1) {
  16.     if (debug >= 2)
  17.       Serial.println(F("conectado servidor SMTP"));
  18.   } else {
  19.     if (debug >= 1)
  20.       Serial.println(F("conexion servidor SMTP Error"));
  21.     return 0;
  22.   }
  23.  
  24.   if(!eRcv_smtp()) return 0;

  25.   if (debug >= 2)
  26.     Serial.println(F("Enviando hola"));
  27.   client.print("EHLO ");
  28.   client.println(mi_ip);
  29.   if(!eRcv_smtp()) return 0;

  30.   if (debug >= 2)
  31.     Serial.println(F("Enviando autorizacion login"));
  32.   client.println("auth login");
  33.   if(!eRcv_smtp()) return 0;

  34.   if (debug >= 2)
  35.     Serial.println(F("Enviando Usuario"));
  36. // Cambiar codificado en Base64
  37.   client.println("VAaW43ft5kaWE0s2");
  38.   if(!eRcv_smtp()) return 0;

  39.   if (debug >= 2)
  40.     Serial.println(F("Enviando contraseña"));
  41. // Cambiar codificado en Base64
  42.   client.println("UGoeVTk3Mr58w==");
  43.  
  44.   if(!eRcv_smtp()) return 0;
  45.  
  46.   if (debug >= 2)
  47.     Serial.println(F("Enviando desde"));
  48.   
  49.   client.print("MAIL From: <");
  50.   client.print(mi_mail);
  51.   client.println(">");
  52.   if(!eRcv_smtp()) return 0;
  53.  
  54.   if (debug >= 2)
  55.     Serial.println(F("Enviando a"));
  56.   
  57.   
  58.   client.println(mail_char);
  59.   if(!eRcv_smtp()) return 0;
  60.  
  61.   if (debug >= 2)
  62.     Serial.println(F("Enviando Datos"));
  63.   client.println("DATA");
  64.   if(!eRcv_smtp()) return 0;
  65.  
  66.   if (debug >= 2)
  67.     Serial.println(F("Enviando email"));
  68.  
  69.   client.print("To: ALRO <");
  70.   client.print(email);
  71.   client.println(">");
  72.  
  73.   client.print("MAIL From: <");
  74.   client.print(mi_mail);
  75.   client.println(">");
  76.  
  77.   client.println("Subject: Arduino email test\r\n");
  78.  
  79.   client.println("El Arduino te mandan un mail de prueba."); 
  80.   client.println("Espero que te guste del blog arubia45.blogspot.com.es");
  81.  
  82.   client.println(".");
  83.  
  84.   if(!eRcv_smtp()) return 0;
  85.  
  86.   if (debug >= 2)
  87.     Serial.println(F("Enviando QUIT"));
  88.   client.println("QUIT");
  89.   if(!eRcv_smtp()) return 0;
  90.  
  91.   client.stop();
  92.  
  93.   if (debug >= 2)
  94.     Serial.println(F("desconectado"));
  95.  
  96.   return 1;
  97. }

Insertamos nuestro código, algo parecido a esto que os pongo (faltan algunas funciones que se llaman que lo puedes ver en el post original de Arduino PlayGround que pongo más arriba). El usuario y contraseña se ha de codificar en Base64 UTF-8, lo podéis hacer desde esta web: Encode Base64

  1. void loop() {  
  2.     enviaEmail("xxxx@gmail.com"))
  3. }

Espero que esta entrada os haya sido util y que os ayude a mejorar con nueva funcionalidad los desarrollos en Arduino.

jueves, 4 de febrero de 2016

Sensor DHT22, RTC DS1307 y LCD I2C


  

 

 

 

 

Sensor DHT22, RTC DS1307 y LCD I2C


En esta entrada de mi blog continuo con el sensor de humedad DHT22, para ver lo que se puede hacer con todos los componentes visto hasta ahora os dejo un ejemplo montando el sensor con un reloj y sacando las mediciones por un LCD I2C.


La pantalla que he utilizado es una I2C, con las nuevas versiones de Arduino IDE (>1.5) hay que utilizar la versión 1.2.1. La cual puedes descargar desde Aquí




El ejemplo lo puedes descargar y codificarlo.  Descarga

lunes, 1 de febrero de 2016

Sensor de humedad y temperatura DHT22


  

 

 

 

 

Sensor de humedad y temperatura DHT22


Hola vamos a ver el funcionamiento de la evolución del DHT11, se trata del DHT22 un sensor muy compacto y de muy facil utilización para poder medir tanto la humedad como la temperatura. La fiabilidad de esta evolución es mayor y el precio el mismo.



Este sensor cuenta con 4 patillas de las que sólo se utilizan 3, la primera es el voltaje 5v, la segunda se conecta a la entrada digital 2 (puede ser cualquiera, simplemente habría que modificar el programa) y la cuarta va a la tierra de nuestro Arduino.



El esquema de conexiones se puede ver mejor aquí:
Para trabajar con este sensor (al igual que con el DHT11) existen varias librerías pero de la que yo he probado la que más me gusta es esta Librería DHT11_22 


Cargamos este ejemplo:


// Sensor DHT22

// Conectamos el sensor de la siguiente forma:
// GND -> 4
// 5V  -> 1
// D2  -> 2
// http://arubia45.blogspot.com.es

#include "DHT.h" //Librería DHT11_22
#define DHTPIN 2 //Pin Digital del Sensor D2
#define DHTTYPE DHT22 
DHT dht(DHTPIN, DHTTYPE); 
void setup() {
  Serial.begin(9600); 
  dht.begin(); 
}
void loop() {
  float h = dht.readHumidity(); //Obtener humedad
  float t = dht.readTemperature(); //Obtener temperatura
  //Se imprimen las variables
  Serial.print("Humedad: "); 
  Serial.print(h);
  Serial.print(" Temperatura: ");
  Serial.println(t);
  delay(5000); 
}

Este ejemplo nos mostrará en la salida del Monitor Serial los valores de la humedad y temperatura cada 5 segundos:



Para trabajar con el DHT11 es exactamente igual, aunque la fiabilidad de las lecturas es menor.