Páginas

lunes, 4 de febrero de 2013

Nuevo Proyecto


 

  

 

 

 

 

 

 

 

 

 

Nuevo Proyecto

Voy a empezar un proyecto nuevo, una pequeña cadena de música, con sintonizador de Radio FM, reproducción de MP3, etc ... controlado por un Arduino Nano.

Si alguien está interesado en colaborar en el proyecto o ir avanzando conmigo que me lo comenté y le envío los componentes exactos con los que voy a trabajar.

Saludos 

 

domingo, 3 de febrero de 2013

RTC DS1307 y LCD I2C Arduino


 

  

 

 

 

 

 

 

 

 

 

Reloj RTC DS1307 y LCD I2C

Para comprobar la potencia del BUS I2C vamos ha hacer un peuqeño ejemplo de conectar un RTC DS1307 y una pantalla LCD I2C.

Conectamos los 2 dispositivos al BUS I2C según la tabla que ya vimos con anterioridad:


 

I2C
Arduino
Arduino Mega
VCC
5V
5V
GND
GND
GND
SCL
A5
D21
SDA
A4
D20
 
En un Arduino UNO quedaría algo así:


El código de este ejemplo está basado en el que puse en el post del RTC, añadiendo las librerías necesarias para el LCD. Y lo más interesante una función que nos refresca la hora y la fecha sin refrescar toda la pantalla.



[...]
// Función de refresco de la hora por LCD
void printDate(){
 
  RTC.getTime();
  
  int second = RTC.second;
  int minute = RTC.minute;
  int hour = RTC.hour; //24 hour time
  int monthDay = RTC.day;
  int month = RTC.month;
  int year = RTC.year;
  
  
  dia = vacia + monthDay; if (dia.length() == 1) {dia = "0" + dia;}
  mes = vacia + month; if (mes.length() == 1) { mes = "0" + mes;}
  anno = vacia + year; if (anno.length() == 1) { anno = "0" + anno; }
  hora = vacia + hour; if (hora.length() == 1) { hora = "0" + hora; }
  minuto = vacia + minute; if (minuto.length() == 1) { minuto = "0" + minuto; }
  segundo = vacia + second; if (segundo.length() == 1) {segundo = "0" + segundo;}
 
  fechaChar = dia + "/" + mes + "/" + anno;
  horaChar  = hora + ":" + minuto + ":" + segundo;
  
     
  horaChar.toCharArray(horaC,10);
  fechaChar.toCharArray(fechaC,11); 
  
   lcd.setCursor(0,3);
   
   if (monthDay != monthDay_old) {
     if (monthDay < 10){
       lcd.print("0");
       lcd.setCursor(1,3);
       lcd.print(monthDay);
     }
     else {
       lcd.print(monthDay);
     }
     monthDay = monthDay_old;
     lcd.setCursor(2,3);
     lcd.print("/");
     lcd.setCursor(3,3);
   }
   
   if (month != month_old) {
     if (month < 10){
       lcd.print("0");
       lcd.setCursor(4,3);
       lcd.print(month);
     }
     else {
       lcd.print(month);
     }
     lcd.setCursor(5,3);
     lcd.print("/");
     lcd.setCursor(6,3);
     month = month_old;
   }
   if (year != year_old) {
     if (year < 10){
       lcd.print("0");
       lcd.setCursor(7,3);
       lcd.print(year);
     }
     else {
       lcd.print(year);
     }
     year = year_old;
   }

   lcd.setCursor(12,3);
   if (hour < 10){
     lcd.print("0");
     lcd.setCursor(13,3);
     lcd.print(hour);
   }
   else {
     lcd.print(hour);
   }

   lcd.setCursor(14,3);
   lcd.print(":");
   lcd.setCursor(15,3);
   if (minute < 10){
     lcd.print("0");
     lcd.setCursor(16,3);
     lcd.print(minute);
   }
   else {
     lcd.print(minute);
   }
   

   lcd.setCursor(17,3);
   lcd.print(":");
   lcd.setCursor(18,3);
   if (second < 10){
     lcd.print("0");
     lcd.setCursor(19,3);
     lcd.print(second);
   }
   else {
     lcd.print(second);
   }

}
[...]







Una vez cargado el ejemplo tenemos un Display LCD con la fecha y la hora como este:




Este ejemplo lo iré completando con más elementos.

viernes, 1 de febrero de 2013

Sensor Ultrasonico HC-SR04 Arduino


 

  

 

 

 

 

Sensor Ultrasonico HC-SR04

Vamos a ver un sensor muy curioso y muy sencillo de utilizar. Es el sensor de baja frecuencia o ultrasónica HC-SR04. Que nos permite medir la distancia hasta un obstáculo. 


La idea es muy sencilla enviar una señal sonora casi inaudible (para la mayoría totalmente inaudible), que rebote en el obstáculo y al regresar de nuevo al sensor medir cuanto ha tardado en hacer el trayecto. De esta forma se puede medir la distancia.


Velocidad del Sonido a 20ºC 340 metros por segundo. 340 m/s
El eco tiene que ir y volver.
Sabemos que el eco ha tardado t segundos.
Entonces tenemos que la distancia en metros d es igual:

2d = 340 * t de donde obtenemos d = (340 * t) / 2


Esto es la teoría y no nos va a hacer falta para utilizar este sensor ya que hay una librería que nos devuelve la distancia en centímetros o en pulgadas. La cual se puede bajar de este enlace. Librería Ultrasonic (URL Alternativa Librería Ultrasonic)


Hay que bajarla y descomprimirla en el directorio libreries del compilador IDE. Este sensor dispone de 4 patillas de entrada VCC a 5V, GND a GND, TRING y ECHO estas 2 van a 2 entradas digitales a nuestras elección. Para el ejemplo que os pongo yo las he conectado el TRING a la 7 y el ECHO a la 8.




Podemos ver un sencillo ejemplo:


// Sensor ultrasonico HR-SC04  
  
// Conectamos el sensor de la siguiente forma:  
// GND    -> GND  
// VCC    -> 5V  
// TRING  -> D7
// ECHO   -> D8
// Por ejemplo conectamos a las entradas Digitales 7 y 8  
// http://arubia45.blogspot.com.es/  
  
// Librerias necesarias  
#include "Ultrasonic.h"

// Declaramos el sensor ultrasonico
// En los Pins Digitales elegidos
Ultrasonic ultrasonico(7,8);  

void setup() {
  Serial.begin(9600);
  Serial.println("arubia45.blogspot.com.es");  
}

void loop()
{
  Serial.print("Distancia: ");
  Serial.print(ultrasonico.Ranging(CM)); 
  Serial.println(" cm");
  Serial.print("Distancia: ");
  Serial.print(ultrasonico.Ranging(INC)); 
  Serial.println(" inc");
  delay(1000);
}


Bajar Ejemplo (URL alternativa Bajar Ejemplo



Esta librería tal cual viene tiene un timeout o tiempo de espera de 3ms por lo que la distancia máxima que medirá será de 51cm algo escaso para mi gusto. La ventaja de tener un timeout tan bajo es que se pueden hacer muchas mediciones en poco tiempo. Si como yo os parece poco podéis cambiarlo en el fichero:  Ultrasonic.cpp


Buscamos Time_out= que estará a 3000 y ponemos por ejemplo 30000 para 5 metros y grabamos.





Os dejo otro ejemplo sacando la medición de distancia por LCD.

Ejemplo con LCD:


// Sensor ultrasonico HR-SC04  
  
// Conectamos el sensor de la siguiente forma:  
// GND    -> GND  
// VCC    -> 5V  
// TRING  -> D7
// ECHO   -> D8
// Por ejemplo conectamos a las entradas Digitales 7 y 8  
// http://arubia45.blogspot.com.es/  
  
// Librerias necesarias  
#include "Ultrasonic.h"
#include "Wire.h"  
#include "LiquidCrystal_I2C.h"  

// Declaramos el sensor ultrasonico
// En los Pins Digitales elegidos
LiquidCrystal_I2C lcd(0x27,20,4);  

Ultrasonic ultrasonico(7,8); 

void setup() {
//Initializar el lcd  
  lcd.init();                        
  lcd.backlight();  
  lcd.home();  
  lcd.setCursor (0,1);
  lcd.print("arubia45.");  
  lcd.setCursor (5,2);
  lcd.print("blogspot.com.es");
  delay (3000);  
}

void loop()
{
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Distancia: ");
  lcd.print(ultrasonico.Ranging(CM));  
  lcd.print(" cm");
  lcd.setCursor(0,2);
  lcd.print("Distancia: ");
  lcd.print(ultrasonico.Ranging(INC)); 
  lcd.print(" inc");
  delay(1000);
}


Tal como he comentado este sensor se puede comprar por menos de 1,5€. Por ejemplo en eBay. Comprar eBay. (URL alternativa Comprar eBay)


 
 

¿Te gusta mi blog?
Comprame una cerveza…