jueves, 23 de enero de 2014

RFID SPI y LCD 16x2 I2C

Buenas,


Hace mucho que no escribo nada,, ya que estuve muy ocupado con el trabajo, y luego las fiestas y las vacaciones,

Any way,, hace poco me llego un modulo RFID por SPI que habia comprado y me puse a probarlo,

Para ello utilce tambien un display LCD de 16x2 al cual le agregue un conversor a I2C, de esta manera lo controlamos solo con dos hilos (SDA, SCL), pines A4 y A5 en el Arduino uno.




El modulo RFID es un RC522





Algunas imagenes mas:










En cuanto al codigo,,

Use un ejemplo de la libreria RFID,, y lo modifique para ver los valores leidos en el display, lo cual quedó algo asi:




#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <RFID.h>

RFID rfid(10,5); 

#define I2C_ADDR    0x27 // aca la direccion,, mejor usar el I2C_Scanner !
#define BACKLIGHT_PIN     3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7

int n = 1;

LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);



void setup() {
  Serial.begin(9600);
  SPI.begin(); 
  rfid.init();
  
   lcd.begin (16,2); //  Aca ponen el tipo de LCD, en mi caso, 16x2

lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
lcd.home (); // go home

  lcd.print("Lector RFID. v1"); 
  lcd.setCursor (0, 2 );
  lcd.print("****************");
  
  delay(3000);
  
  lcd.clear();
  
}

void loop() {
  
  
 
 
 if (rfid.isCard())
 {
   Serial.println("Es Una Tarjeta!");
  if (rfid.readCardSerial()) {
   
   Serial.println(" ");
                        Serial.println("El numero de serie de la tarjeta es  : ");
   Serial.print(rfid.serNum[0],HEX);
                        Serial.print(" , ");
   Serial.print(rfid.serNum[1],HEX);
                        Serial.print(" , ");
   Serial.print(rfid.serNum[2],HEX);
                        Serial.print(" , ");
   Serial.print(rfid.serNum[3],HEX);
                        Serial.print(" , ");
   Serial.print(rfid.serNum[4],HEX);
                        Serial.println(" ");
         
   
  }   
 }
     
     lcd.setCursor (0, 0);
         lcd.print("**Tarjeta S/N:**");
        lcd.setCursor (0, 1);
lcd.print(rfid.serNum[0],HEX);  
lcd.setCursor (3, 1);
lcd.print(rfid.serNum[1],HEX);
lcd.setCursor (6, 1);
lcd.print(rfid.serNum[2],HEX);
lcd.setCursor(9, 1);
lcd.print(rfid.serNum[3],HEX);
lcd.setCursor(12, 1);
lcd.print(rfid.serNum[4],HEX);



}
Y el video de como queda funcionando:






Bueno, eso fue todo por hoy!

Espero escribir mas seguido,


Saludos!


lunes, 4 de noviembre de 2013

Arduino y Bluetooth

Conexion de un modulo Bluetooth a Arduino con un display 7 segmentos.



Buenas!,

Como comente anteriormente, me llego un modulo bluetooth que pedi por ebay, y ya pude hacer las primeras pruebas,, destaco que es super sencillo utilizarlo, asi que en esta ocasión la idea era que los numeros que escribiera en el computador, se vean reflejados en un display 7-segmentos de un dígito con conexión serial via Bluetooth.








Pueden ver como funciona aca:








Y finalmente el codigo:

char val; 
int ledpin = 13; 

int G = 8;
int F = 7;
int A = 2;
int B = 3;
int E = 6;
int D = 5;
int C = 4;
int dp = 9;

void setup()

{
  
  pinMode(ledpin, OUTPUT);  
  Serial.begin(9600);       
  
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(dp, OUTPUT);
  
}

void np() {
  digitalWrite(dp, HIGH);
}

void n1() {
  
  digitalWrite(B, HIGH);
  digitalWrite(C, HIGH);
  
}

void n2() {
  digitalWrite(A, HIGH);
  digitalWrite(G, HIGH);
  digitalWrite(D, HIGH);
  digitalWrite(B, HIGH);
  digitalWrite(E, HIGH);
}


void n3() {
  digitalWrite(A, HIGH);
  digitalWrite(G, HIGH);
  digitalWrite(D, HIGH);
  digitalWrite(B, HIGH);
  digitalWrite(C, HIGH);
}
  
  
  void n4() {
    digitalWrite(F, HIGH);
    digitalWrite(G, HIGH);
    digitalWrite(B, HIGH);
    digitalWrite(C, HIGH);
  }
  
  
  void n5() {
    
  digitalWrite(A, HIGH);
  digitalWrite(G, HIGH);
  digitalWrite(D, HIGH);
  digitalWrite(F, HIGH);
  digitalWrite(C, HIGH);
  }
    
    void n6()
    {
 
  digitalWrite(G, HIGH);
  digitalWrite(D, HIGH);
  digitalWrite(F, HIGH);
  digitalWrite(C, HIGH);
  digitalWrite(A, HIGH);
  digitalWrite(E, HIGH);
  
    }
  
  void n7() {
     digitalWrite(C, HIGH);
     digitalWrite(B, HIGH);
  digitalWrite(A, HIGH);
  
  }
  
  void n8() {
  digitalWrite(G, HIGH);
  digitalWrite(D, HIGH);
  digitalWrite(F, HIGH);
  digitalWrite(C, HIGH);
  digitalWrite(A, HIGH);
  digitalWrite(E, HIGH);
  digitalWrite(B, HIGH);   
  }
  
  void n9() {
    digitalWrite(G, HIGH);
  
  digitalWrite(F, HIGH);
  digitalWrite(C, HIGH);
  digitalWrite(A, HIGH);
  
  digitalWrite(B, HIGH); 
  
  }
    void n0() {
      
       digitalWrite(F, HIGH);
  digitalWrite(C, HIGH);
   digitalWrite(E, HIGH);
  digitalWrite(B, HIGH); 
  digitalWrite(A, HIGH);
  digitalWrite(D, HIGH);
  
  
      
    }
void loop() {
  
  
  
  digitalWrite(F, LOW);
  digitalWrite(C, LOW);
  digitalWrite(E, LOW);
  digitalWrite(B, LOW); 
  digitalWrite(A, LOW);
  digitalWrite(D, LOW);
  digitalWrite(G, LOW);
  digitalWrite(dp, LOW);
  
  if( Serial.available() )       // if data is available to read
  {
    val = Serial.read();         // read it and store it in 'val'
  }
  
  if( val == '1')
  {
n1();
  
  
  }
  
  if( val == '2')
 {
 n2();
  
  
 } 
 
 
 if( val == '3'){
   n3();
  
 }
 
 if( val == '4'){
      n4();
    
 }

if( val == '5'){
 n5();
  
}

if( val == '6'){
  n6();
  
  
}

if( val == '7'){
    n7();
  
  
  }
  
  if( val == '8'){
n8();

}
  
  if( val == '9'){
  n9();
  
  }
  
  
  if( val == '0'){
    n0();
  
  }
    
  if( val =='.') {
    np();
  }
 
}


domingo, 3 de noviembre de 2013

Display 7 segmentos

Conexion display 7 seg. con Arduino uno




Estuve probando la conexión de un display 7 seg. al Arduino uno, y para empezar encontre un codigo muy bueno,


Primero vamos a ver de que se trata el display de 7 seg.

Basicamente tenemos dos tipos, Anodo comun y Catodo comun, en mi caso use uno de Catodo común, con lo cual, la masa es compartida entre todos los segmentos, 
Luego tenemos otra seria de segmentos, (a, b, c, d, e, f, g, dp) que a medida que lo vamos alimentando van prendiendo, 

Vean la figura:








El circuito de conexion es el siguiente:








Y el codigo, cortesia de: http://www.hacktronics.com/Tutorials/arduino-and-7-segment-led.html


/*
*** esto es para Anado Comun ****

byte seven_seg_digits[10][7] = { { 0,0,0,0,0,0,1 },  // = 0
                                 { 1,0,0,1,1,1,1 },  // = 1
                                 { 0,0,1,0,0,1,0 },  // = 2
                                 { 0,0,0,0,1,1,0 },  // = 3
                                 { 1,0,0,1,1,0,0 },  // = 4
                                 { 0,1,0,0,1,0,0 },  // = 5
                                 { 0,1,0,0,0,0,0 },  // = 6
                                 { 0,0,0,1,1,1,1 },  // = 7
                                 { 0,0,0,0,0,0,0 },  // = 8
                                 { 0,0,0,1,1,0,0 }   // = 9
                               };
                               
                               */
                           
 
 byte seven_seg_digits[10][7] = { { 1,1,1,1,1,1,0 },  // = 0
                                 { 0,1,1,0,0,0,0 },  // = 1
                                 { 1,1,0,1,1,0,1 },  // = 2
                                 { 1,1,1,1,0,0,1 },  // = 3
                                 { 0,1,1,0,0,1,1 },  // = 4
                                 { 1,0,1,1,0,1,1 },  // = 5
                                 { 1,0,1,1,1,1,1 },  // = 6
                                 { 1,1,1,0,0,0,0 },  // = 7
                                 { 1,1,1,1,1,1,1 },  // = 8
                                 { 1,1,1,0,0,1,1 }   // = 9
                               };
 
void setup() {                
  pinMode(2, OUTPUT);   
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  writeDot(0);  // 
}
 
void writeDot(byte dot) {
  digitalWrite(9, dot);
}
 
void sevenSegWrite(byte digit) {
  byte pin = 2;
  for (byte segCount = 0; segCount < 7; ++segCount) {
     digitalWrite(pin, seven_seg_digits[digit][segCount]);
     ++pin;   
   } 
} 
 
void loop() {   
  for (byte count = 10; count > 0; --count) {
    delay(1000);
    sevenSegWrite(count - 1); 
  }
 
  delay(4000);   // Aguarda 4 segundos para volver a empezar
}



Lo que nos quedaria algo así:





Dicho sea de paso, hace dos días me llego el modulo Bluetooth que pedí, el cual pueden ver en el video conectado entre el arduino y el 7 seg.,  así que en unos días voy a estar subiendo las primeras pruebas con dicho modulo :)

Si tienen alguna consulta o idea, no duden en comentarla



Saludos!








martes, 29 de octubre de 2013

Servo y Potenciometro

En esta ocasión vamos a ver como conectar un Servo a la placa de Arduino y controlarlo con un potenciometro.


Para eso veamos el diagrama de conexion:






El funcionamiento es muy sencillo ya que contamos con la libreria "Servo.h" de Arduino,, Se conecta el potenciomentro en un puerto analogico, en este caso al puerto "0", así que leemos el valor y lo guardamos en la variable potpin , y con el valor de esta variable escribimos en la salida del Servo,,


El codigo:

#include <Servo.h>
Servo myservo;  // se crea el objeto Servo
int potpin = 0// definimos la variable potpin en el puerto 0
int val;
void setup()
{
    myservo.attach(9);  // definimos el servo en el pin 9
}
void loop()
{
    val = analogRead(potpin); //  leemos el potenciometro, lo cual arroja un valor entre 0 y 1023
val = map(val, 0, 1023, 0, 179);     // aca definimos la escala para usar en el servo entre 0 y 180
myservo.write(val);                  //  posicionamos el servo con la variable leida
delay(15);                           //  un delay para que el servo se posicione.
}






lunes, 28 de octubre de 2013

Arduino Ethernet



Buenas buenas!.

Estoy experimentando con el Web-Server de Arduino,


Para eso utilizo la placa de Arduino-Uno y un Shield Ethernet.


En las primeras dos fotos pueden ver la placa arduino-uno y el shield Ethernet


En esta otra, observar el detalle de las dos placas montadas.




En este ejemplo vamos a conectar la placa por ethernet a nuestra red hogareña.


Pasemos al codigo!


#include <SPI.h> #include <Ethernet.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192, 168, 1, 17); // Configurar el IP de acuerdo a la red de c/uno EthernetServer server(80); // Configuramos el server en el puerto 80 void setup() { Ethernet.begin(mac, ip); server.begin(); Serial.print("server is at "); Serial.println(Ethernet.localIP()); } void loop() { EthernetClient client = server.available(); if (client) { Serial.println("new client"); boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); if (c == '\n' && currentLineIsBlank) { client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); client.println(); // send web page client.println("<!DOCTYPE html>"); client.println("<html>"); client.println("<head>"); client.println("<title>Arduino Web Page</title>"); client.println("</head>"); client.println("<body>"); client.println("<h1>Hola a todos desde Arduino!</h1>"); client.println("<h1> elrincondearduino.blogspot.com.ar</h1>"); client.println("<p>A web page from the Arduino server</p>"); client.println("</body>"); client.println("</html>"); break; } if (c == '\n') { currentLineIsBlank = true; } else if (c != '\r') { currentLineIsBlank = false; } } } delay(1); // client.stop(); } // end if (client) }




Este codigo basicamente es el que podemos encontrar en Archivo-->Ejemplos-->Ethernet--->WebServer con algunas modificaciones.


La resultante es la siguiente:






La próxima vamos a conectarlo a internet y agregar un poco de control :)

Espero que les haya gustado!

Saludos!!

domingo, 27 de octubre de 2013

Comenzando con Arduino

Bueno,

Ahora vamos conocer un poco la placa de Arduino-Uno








Bueno, como podrán observar, la placa es muy amigable, cuenta con un conector USB del tipo "B", el cual nos sirve para conectar la placa a la computadora para programar y alimentarlo, y tambien tiene un conector jack dedicado para alimentación, esto es util cuando hacemos algún proyecto y lo alimentamos independientemente,

Contamos con una serie de puertos como 6 entradas analógicas, 14 digitales dentro de las cuales tenemos 6 con salida PWM (modulación de ancho de pulso), mas unos pines con salida 5V, 3V3, y GND.

Es bueno destacar que la salida digital numero 13, ya tiene un led SMD integrado en la placa, por eso verán que ese puerto se utiliza mucho ya que tenemos un indicador visual integrado con la placa,
Tambien tenemos dos led de RX/TX para monitorear la comunicación Serial.


Ahora veamos el IDE.


El IDE de Arduino es muy simple y sensillo,, está disponible para Win/Linux/MacOSX
Al mismo lo pueden descargar de acá

Este es el primer vistazo al IDE
Debemos setear el tipo de placa a utilizar, en Herramientas ---> Tarjeta --> Arduino Uno
Y el puerto serie de conexión, Herramientas ----> Puerto Serie --> (el que corresponda)









Estos son los botones de interacción, donde tenemos que:


 Con este boton comprobamos / compilamos un código
Con este otro, enviamos el código a nuestra placa Arduino

 Creamos un código nuevo, Cargamos y Guardamos de/hacia un archivo el código

Este es uno de mis botones preferidos, jaja, ya que es un monitor Serial, es muy util para leer las variables que estamos utilizando, como un sensor de temperatura, potenciometro, o cualquier otro conectado a un puerto analógico por ejemplo.



**Les recomiendo que miren este archivo, para conocer un poco el lenguaje de programación para Arduino**




sábado, 26 de octubre de 2013

Presentacion

Buenas!


Hace poco tiempo que me decidí a comprar mi primer Arduino-Uno, y he podido experimentar lo simple y sencillo que resulta a la hora de interactuar con periféricos, y lo divertido que resulta a la hora de programar y probar prototipos, ya que tiene una placa muy simple con dos hileras de "hembra", así que solo con unos pocos cables y algunos componentes podemos comenzar.

Con el tiempo, voy a ir compartiendo lo que vaya haciendo con Arduino u microcontroladores PIC

=)