jueves, 7 de enero de 2016

Arduino - Tarjeta Multifuncion


Esta vez he trabajado con un Arduino, plataforma muy interesante para iniciarse en la programación, y una tarjeta que tiene muchas opciones hardware para divertirse por horas.

El Arduino que tengo es un Arduino UNO chino:



Los drivers USB de esta tarjeta Arduino los puedes descargar AQUI. Luego de instalarlos, el Arduino ya se puede utilizar con el IDE oficial sin ningun problema.

La tarjeta Mutifuncion es la siguiente:



Cuyo esquema es el siguiente:



Como se puede observar, se tienen varias herramientas muy útiles:

  • 4 Display de 7 segmentos
  • Canal ADC con potenciometro
  • 4 Entradas para sensores TTL con su respectiva alimentación.
  • Entrada para sensor de temperatura (LM35 o DS18B20)
  • 3 pulsadores
  • 4 LED
  • 1 Buzzer
  • Entrada para modulos seriales.
El programa que he realizado es solo a modo demostrativo de algunos de los módulos. Se despliega en el display el valor digital de la conversion AD del canal del potenciometro y con cada pulsación de los botones se enciende un LED ademas del aviso sonoro del buzzer.



El programa:
/*
    Tarjeta Multifuncion
    MLO
    miguel_626@hotmail.com
    
    Ejemplos de uso de los diferentes modulos de la tarjeta.
*/
//Botones
#define BUTTON1 A1
#define BUTTON2 A2
#define BUTTON3 A3

//Buzzer
#define BUZZER_DIO 3

//Estados para los LED y el Buzzer
#define OFF HIGH
#define ON LOW

//LED
const byte LED[] = {13,12,11,10};

//Control del display
#define LATCH_DIO 4
#define CLK_DIO 7
#define DATA_DIO 8
//Numeros display
const byte SEGMENT_MAP[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0X80,0X90};
const byte SEGMENT_SELECT[] = {0xF1,0xF2,0xF4,0xF8};

//Potenciometro
#define PotPin 0

void setup() {
  pinMode(BUZZER_DIO, OUTPUT);
  digitalWrite(BUZZER_DIO, OFF);
  
  pinMode(LED[0], OUTPUT);
  pinMode(LED[1], OUTPUT);
  pinMode(LED[2], OUTPUT);
  pinMode(LED[3], OUTPUT);
  
  digitalWrite(LED[0], OFF);
  digitalWrite(LED[1], OFF);
  digitalWrite(LED[2], OFF);
  digitalWrite(LED[3], OFF);
  
  pinMode(LATCH_DIO,OUTPUT);
  pinMode(CLK_DIO,OUTPUT);
  pinMode(DATA_DIO,OUTPUT);
}

void loop() {
  if(!digitalRead(BUTTON1))             
  {
    digitalWrite(LED[0], ON);
    digitalWrite(LED[1], OFF);
    digitalWrite(LED[2], OFF);
    digitalWrite(BUZZER_DIO, ON);
    delay(20);
    digitalWrite(BUZZER_DIO, OFF); 
  }
  
  if(!digitalRead(BUTTON2))             
  {
    digitalWrite(LED[0], OFF);
    digitalWrite(LED[1], ON);
    digitalWrite(LED[2], OFF);
    digitalWrite(BUZZER_DIO, ON);
    delay(20);
    digitalWrite(BUZZER_DIO, OFF); 
  }
  
  if(!digitalRead(BUTTON3))             
  {
    digitalWrite(LED[0], OFF);
    digitalWrite(LED[1], OFF);
    digitalWrite(LED[2], ON);
    digitalWrite(BUZZER_DIO, ON);
    delay(20);
    digitalWrite(BUZZER_DIO, OFF); 
  }
   
   WriteNumber(analogRead(PotPin));
}

void WriteNumber(int Number)
{
  WriteNumberToSegment(0 , Number/1000);
  WriteNumberToSegment(1 , (Number/100)%10);
  WriteNumberToSegment(2 , (Number/10)%10);
  WriteNumberToSegment(3 , Number%10);
}

void WriteNumberToSegment(byte Segment, byte Value)
{
  digitalWrite(LATCH_DIO,LOW); 
  shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_MAP[Value]);
  shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_SELECT[Segment] );
  digitalWrite(LATCH_DIO,HIGH);    
}


Con eso es suficiente para poder utilizar la tarjeta para nuestros propios propósitos de diseño. 

2 comentarios:

  1. Es interesante todo lo que se puede hacer con arduino, ¡excelente el programa!

    ResponderEliminar