Páginas

martes, 29 de enero de 2013

Reloj RTC DS1307 Arduino


 

  

 

 

 

 

Reloj RTC DS1307

Cuando nos ponemos a hacer un proyecto grande con Arduino, nos damos cuenta (sobretodo si siempre has programado en lenguajes de alto nivel) de que no disponemos de un reloj interno, ya sea para programar periodos de tiempo como para saber que horas es y actuar en consecuencia.

Eso tiene una solución muy sencilla, utilizar un pequeño y económico módulo RTC DS1307, es un módulo muy utilizado y no sólo con Arduino.


El diagrama del módulo es bastante sencillo, por lo que nos lo podemos hacer nosotros:



En este enlace se pueden ver los pasos del montaje paso a paso Montaje RTC DS1307



Aunque lo podemos encontrar en el mercado por menos de 2€, por ejemplo Comprar eBay 

La única pega que yo he encontrado de los que venden es la batería, los componentes más económicos no taren un alojamiento adecuado y la pila a poco que lo toques se cae. Y deja de estar en hora el reloj. 



Por lo que yo recomiendo un módulo con un soporte adecuado de este estilo:

Una ventaja que tiene este módulo es que utiliza el interface I2C el mismo que vimos para las pantallas LCD que vimos hace unos dias.

Aquí tenemos la tabla de conexión distinguiendo entre el Arduino Mega y el resto:

 

I2C
Arduino
Arduino Mega
VCC
5V
5V
GND
GND
GND
SCL
A5
D21
SDA
A4
D20
Podemos tener varios dispositivos utilizando este interface, por lo que no son incompatibles la pantalla LCD y el RTC al mismo tiempo conectados.


Lo conectamos según la tabla a un Arduino Uno:
Para trabajar con el RTC DS1307 tenemos que incluir las librería:

#include "Wire.h"          
#include "DS1307new.h"

Estas librerías vienen con el compilador de Arduino, por lo que no es necesario bajarlas. Si no tienes la librería DS1307new la puedes bajar de aquí: Librería DS1307.

Os dejo un ejemplo de Oliver Kraus que yo he utilizado como base en los proyectos donde utilizo el RTC. es muy interesante ya que nos da mucha funcionalidad sobre el Reloj. Ejemplo RTC DS1307 (URL Alternativa Ejemplo RTC DS1307)

Subimos este scketch al Arduino y vemos la interactuación que podemos hacer con el reloj.


A partir de este ejemplo ya podemos modificarlo de manera que podamos programar horarios para lecturas de sensores, poner en hora via web, etc ... 

lunes, 28 de enero de 2013

ENC28J60 Ethernet Shield para Arduino Nano


 

  

 

 

 

ENC28J60 Ethernet Shield para Arduino Nano

Ayer navegando por Internet vi este Shield de red para el Arduino Nano y me pareció muy interesante.






Las librerías y ejemplos los puedes ver en el post anterior: ENC28J60 Módulo ethernet Arduino


Averías Arduino Nano 3.0


 



 

  

 

 

 

 

Averías Arduino Nano v3.0


Existen un par de averías bastante frecuentes en el Arduino Nano sobretodo en la versión 3.0. 

Este es el más delicado de los Arduinos ya que su diseño y tamaño está llevado a la mínima expresión.

El síntoma claro de que el Arduino Nano tiene un problemas es que de repente Windows (o Linux) deja de reconocerlo. Por mucho que lo enchufemos y desenchufemos del puerto USB no hay manera.

Entre otros muchos problemas que pueden surgir, hay 2 que tienen solución.

El Arduino Nano no es reconocido por el PC y no funciona. Lo más probable es que se haya fundido un diodo que hace de fusible y que se encuentra en la parte inferior del Nano, el MBR0520. Este fusible es un componente bastante económico aunque el mayor problema reside en su reducido tamaño y lo complicado que puede ser soldarlo si no tenemos experiencia.






Este fusible se puede fundir por muchos motivos pero principalmente es una medida de seguridad cuando se sobrecarga el Arduino con una fuente externa o desde un USB defectuoso. También es posible sustituirlo por un fusible no SMD de mayor tamaño y de iguales características pero ya no queda igual de limpio.









Ver que efectivamente es esto lo que le pasa al Arduino Nano es sencillo, ya que el olor del componente quemado es inconfundible. En esta ilustración se puede ver donde está situado el diodo aunque su posición puede variar según el fabricante y versión.

El Arduino Nano no es reconocido por el PC pero sigue funcionando. Esto puede ser por un bug de diseño que existe y que en algunos casos puede dejarnos inservible el Arduino. Para ello lo que que hay que hacer es soldar entre si las patillas 25 (AGND) y 26 (TETS) del Chip FT232RL.



Como en el caso anterior el problema reside en poder hacer esta soldadura bien ya que las patillas de este componente son muy pequeñas.

sábado, 26 de enero de 2013

LAN ENC28J60 y LCD I2C Arduino


 



 

  

 

 

 

 

LAN ENC28J60 y LCD I2C


Os dejo un pequeño ejemplo de montar una web muy simple con un LCD I2C, donde podremos ver la IP y el número de petciones recibidas via web.





// Modulo Ethernet ENC28J60 y LCD I2C

// http://arubia45.blogspot.com.es/

// Librerias necesarias LAN
#include "etherShield.h"
#include "ETHER_28J60.h" 
// Librerias necesarias LCD
#include "Wire.h"  
#include "LiquidCrystal_I2C.h"   

// Le asignamos una máscara de red única.
static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; 

// Le damos una IP dentro del rango de nuestra red 
static uint8_t ip[4] = {192, 168, 1, 15}; 

// Por último definimos un puerto para la web, el 80 es el de por defecto. 
static uint16_t port = 80; 
ETHER_28J60 ethernet;

// Definición del tipo de LCD  
// 20 caracteres por línea y 4 líneas.    
LiquidCrystal_I2C lcd(0x27,20,4);   
// Contador 
int i;

void setup()
{ 
  // Iniciar LAN
  ethernet.setup(mac, ip, port);
  // Iniciar LCD  
  lcd.init();                        
  lcd.backlight();  
  lcd.home();  
  lcd.print("Hola Mundo");  
  delay (3000);  
  lcd.clear();
}

void loop()
{
  lcd.setCursor(0,0);
  lcd.print("IP: 192.168.1.15");
  if (ethernet.serviceRequest())
  {
    ethernet.print("Hola Mundo ");
    ethernet.print("Peticiones: ");
    ethernet.print(i);
    ethernet.respond();
    lcd.setCursor(2,2);
    lcd.print("Peticiones: ");
    lcd.print(i);
    i++;
  }
  delay(100);
}





Bajar Ejemplo

 

Pantallas LCD Arduino


 



 

  

 

 

 

 

 Pantallas LCD


Las pantallas LCD son una solución muy interesante para hacer autónomo al Arduino, ya que permite que el Arduino pueda mostrar datos, errores, mensajes, etc ... sin necesidad de tenerlo conectado por el USB al Ordenador.

Es una forma muy económica y simple. En el mercado existen de dos tipos, las gráficas GLCD y las de caracteres LCD. Las gráficas nos dan mucha libertad a la hora de trabajar con ella, de forma que no sólo podemos motrar mensajes de texto si no también dibujos y gráficos. Pero esta libertad tiene un precio muy alto a mi entender y es que la cantidad de cables que hay que utilizar para conectar la pantalla al Arduino es exagerada.

Aquí os dejo por ejemplo el esquema de conexión de una GLCD con un Arduino Uno.


Con el Arduino Mega sería:


Quedando montado sobre un Arduino Mega así:



Para trabajar con estas pantallas necesitas la librería "glcd.h" puedes descargarla aquí. Con la librería vienen algunos ejemplos.

Por otro lado tenemos las pantallas de texto LCD que nos limitan a mostrar caracteres y poco más pero que la conexión con el Arduino es muy sencilla. Sobretodo porque podemos utilizar el bus IIC o I2C. Para ellos se coloca un pequeño controlador que se pone entre el LCD y el Arduino. Por ser mucho más práctico nos vamos a centrar en las pantallas LCD I2C.

El bus I2C (Inter Integrated Circuit) es un bus de comunicación en serie, utilizado para comunicar circuitos integrados los cuales se encuentran en una misma placa impresa.



Utiliza 4 líneas, la de tierra o masa (GND), la de voltaje (VCC), la de Datos (SDA) y una de señal de reloj (SCL). Como es un bus de comunicación en serie, nos permite utilizar varios dispositivos a la vez. Con este mismo bus se puede conectar el Arduino a un reloj por ejemplo. Que vremos en próximos post.

Así que a una pantalla LCD de líneas como esta:
  

 Le colocamos un pequeño controlador I2C, ya podemos manejar desde el Arduino:

Aquí tambien tenemos que distinguir entre el Arduino Mega y el resto:
 


I2C
Arduino
Arduino Mega
VCC
5V
5V
GND
GND
GND
SCL
A5
D21
SDA
A4
D20


Quedando en un Arduino Uno así:


Una vez conectado tenemos que utilizar las librerías (con Arduino IDE < 1.5):

// LCD IIC/I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

Hay 2 versiones de esta librería, la 1.1 y la 2, las cuales puedes descargar de aquí:

LiquidCrystal_I2C V1.1

LiquidCrystal_I2C V2

Una nos permite utilizar varios dispositivos y la otra es específica para LCD.

Ya que lo tenemos conectado, subimos este scketch de ejemplo:

 
// Pantalla LCD 20x4 I2C
// Conectamos el sensor de la siguiente forma:  
// GND -> GND  
// VCC -> 5V  
// SCL -> A5
// SDA -> A4
// UNO pin 4 y 5 MEGA 20 y 21 
// http://arubia45.blogspot.com.es/  
  
// Librerias necesarias  
#include "Wire.h"
#include "LiquidCrystal_I2C.h"

// Definición del tipo de LCD
// 20 caracteres por línea y 4 líneas.  
LiquidCrystal_I2C lcd(0x27,20,4); 

//Contador
int i; 

void setup()
{
//Initializar el lcd
  lcd.init();                      
  lcd.backlight();
  lcd.home();
  lcd.print("Hola Mundo");
  delay (3000);
}

void loop() {
   lcd.clear();
   lcd.print("  Arduino de ALRO");
   // Posicionar en la pantalla (caracter,linea)
   lcd.setCursor(5,2);
   // Con print sin salto de línea
   lcd.print("Contador: ");
   lcd.print(i);
   delay(1000);
   i++;
}



Bajar Ejemplo 


En la nueva versión de Arduino IDE (1.6.7 por ejemplo) esta librería ha dejado de funcionar, hay que utilizar esta otra LiquidCristal_I2C_1.1 en vez de declarar el LCD con la sentencia LiquidCrystal_I2C lcd(0x27, 20,4);  utilizamos esta LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); y en la función setup sustituimos el lcd.init(); por lcd.begin(20,4);


 
Y vemos que el LCD hace una cuenta progresiva.




 

En el mercado hay pantallas de 2 y 4 líneas y su precio es bastante económico. Unos 6€ las de 2 líneas. LCD 16x02 en eBay o por unos 12€ las de 4 líneas. LCD 20x04 en eBay.

Para las pantallas GLCD he visto que están empezando a comercializar controladores para Arduino parecidos al de I2C pero con algunos pins más. Yo aún no los he probado pero si lo hago lo comentaré.