lunes, 15 de julio de 2013

Touch screen controlada con arduino (DIY)



La gran cantidad de recursos electrónicos que las tiendas online nos ofrecen ha hecho de que todo se tenga que comprar, por que todo lo venden hecho, requiero algo para motores, le tenemos el controlador, quiero una CNC le vendemos los driver hechos....La electrónica en si no es modular, es cierto que esto ayuda a acelerar procesos, pero es bonito hacer las cosas uno mismo, tomarse el tiempo de investigar y hacer, en los foros es común encontrar mensajes donde piden que les hagan las tareas, trabajos y software, lo bello de la electrónica y programación es encontrar ayudas para que usted lo haga en casa.

este vídeo les indico la forma de usar un touchscreen genérico que lo puede comprar en cualquier tienda donde reparen celulares y lo controlaremos con un arduino o un PIC sin necesidad de comprar costosos equipos o shields de arduino que hacen lo mismo.

Algunos se preguntaran "por que con arduino", por que es el que mas mercado lidera en el mundo, pero no se preocupen los que trabajen con PICC encontrar igual o similar los códigos de arduino y PICC, asi que sin mas preámbulos les dejo el vídeo donde se explica desde cero todo el proceso.
_____________________________________________________________________________

_______________________________________________________________________________
Una pantalla táctil o touchscreen  es una protección que llevan las pantallas de los computadores y móviles modernos que al contacto de la superficie permite la salida de datos de la posición en el eje X y Y funcionando como un dispositivo de entrada. Esta tecnología lleva más de 30 años en uso (patentadas en 1970 y 1980 ) pero en la actualidad su uso se ha hecho mas popular.

Existen dos tipos de pantallas táctiles, las resistivas y capacitivas.
Las resistivas son más baratas y son las primeras que salieron al mercado, pueden ser usadas con cualquier objeto que las presione como un puntero o el dedo, aunque sus prestaciones han disminuido de forma considerable a causa de la poca luz que dejan pasar de la pantalla principal a causa del grosor de estas láminas transparentes. Este tipo de pantallas son puramente resistivas funcionando de forma similar a una resistencia variable, con sus bordes y su cursor el cual detecta la variación de dicha resistencia. Estos touch funcionan de forma matricial leyendo la posición donde se presionó comparando el valor de la coordenada X y coordenada Y de forma separada que luego el sistema microcontrolado interpreta y procesa para saber en qué posición fue presionada.
Al presionar el táctil se unen dos capas metálicas resistivas lo cual permite la variación de la resistividad del componente, esta resistencia es ingresada a un conversor análogo digital para su posterior uso.
Capacitivas, están formadas por celdas capacitivas estilo condensador, con una capa capacitiva conductora y un aislante eléctrico (el cristal está impregnado con óxido de indio y estaño,).Su funcionamiento se basa en la interacción de dos dispositivos conductores eléctricos y como la piel del cuerpo humano es un conductora al tocar la pantalla existe una interacción electrostática entre la piel y la célula capacitiva haciendo un cambio de la capacitancia del touch, estas pantallas solo pueden ser usadas con materiales exclusivos para táctiles capacitivos o con el dedo. La conductividad eléctrica de la piel humana hará variar esta capacitancia y generará una distorsión, midiendo esta distorsión se puede ubicar con precisión el dedo humano

Otra gran ventaja es que pueden detectar varios puntos de contacto (multitouch) generando mayor interactividad entre el hombre y la maquina siendo hoy por hoy la pantalla mas usada.
Materiales usados para este proyecto

requerimos una un touch de 4 hilos de cualquier celular preferiblemente chinos ya que son económicos y faciles de conseguir(no importa el tamaño todas funcionan igual)
segundo debemos ubicar los pines que marquen resistencia y que no cambien al presionar el tactil.
tercero se hace el montaje del video con la resistencias de 10 k y conectamos al conversor analogo del arduino para leer la señal. este seria la prueba basica para ver si encontro los pines correctos, al presionar debe variar el voltaje leido por el tactil.





codigo del arduino
______________________________________________________________________
código para leer solo el eje X
#define y_alto A0//14
#define x_bajo A1
#define y_bajo A2
#define x_alto A3

void setup(){
  Serial.begin(9600);
}
void loop(){
  pinMode(x_alto,OUTPUT);
  pinMode(x_bajo,OUTPUT);
  digitalWrite(x_alto,HIGH);
  digitalWrite(x_bajo,LOW);
  Serial.print("el de valor de x es:...");
  int cordenada_x = analogRead(A2);
   Serial.println(cordenada_x);
   delay(600);
}

código para leer las coordenadas X y Y

//programa diseñado por el ingeniero edison v
//Los pines analogicos pueden ser usados 
//como pines digitales con los números 14 
//(entrada analogica número 0) hasta 19 
//(entrada analogica número 5).
#define y_alto  A0//redefino los pines para ser configurados como digitales 
//y en analogas uso A0, A1
#define x_bajo  A1//EN ALGUNOS ARDUINO 15
#define y_bajo  A2//16
#define x_alto  A3//17

void setup()
{
  ///////////configuracion serial
    Serial.begin(9600);
}
////////////////
void loop()
{
  leer_x();
  delay(400);
  leer_y();
  delay(400);
}

void leer_x()
{
   pinMode (x_alto, OUTPUT);
   pinMode (x_bajo, OUTPUT);
   pinMode (y_alto, INPUT);
   pinMode (y_bajo, INPUT);
   digitalWrite (x_alto, HIGH);
   digitalWrite (x_bajo, LOW);   
    Serial.print("el valor de VALOR X es...");
    int cordenada_x = analogRead(A2);// A2 ES Y BAJO TENER CUIDADO
    Serial.println(cordenada_x);
    
}
///////////////////////////////
void leer_y()
{
  pinMode (x_alto, INPUT);
   pinMode (x_bajo, INPUT);
   pinMode (y_alto, OUTPUT);
   pinMode (y_bajo, OUTPUT);
   digitalWrite (y_alto, HIGH);
   digitalWrite (y_bajo, LOW);   
    Serial.print("el valor de VALOR Y es...");
    int cordenada_y = analogRead(A1);
    Serial.println(cordenada_y);
    
}
_________________________________________________________________________________
programa para  leer las coordenadas y activar los led

//programa diseñado por el ingeniero edison v
//Los pines analogicos pueden ser usados 
//como pines digitales con los números 14 
//(entrada analogica número 0) hasta 19 
//(entrada analogica número 5).
#define y_alto  A0//redefino los pines para ser configurados como digitales 
//y en analogas uso A0, A1
#define x_bajo  A1//EN ALGUNOS ARDUINO 15
#define y_bajo  A2//16
#define x_alto  A3//17
int cis =13;//cuadrante izquierdo superior
int cds =12;
int cii=11;//cuadrante izquierdo inferior
int cdi=10;//cuadrante derecho iNFERIOR

void setup()
{
    pinMode(cis,OUTPUT);
    pinMode(cds,OUTPUT);
    pinMode(cii,OUTPUT);
    pinMode(cdi,OUTPUT);
    
  ///////////configuracion serial
    Serial.begin(9600);
}
////////////////
void loop()
{
  
   pinMode (x_alto, OUTPUT);
   pinMode (x_bajo, OUTPUT);
   pinMode (y_alto, INPUT);
   pinMode (y_bajo, INPUT);
   digitalWrite (x_alto, HIGH);
   digitalWrite (x_bajo, LOW);   
    Serial.print("el valor de VALOR X es...");
    int cordenada_x = analogRead(A2);// A2 ES Y BAJO TENER CUIDADO
    Serial.println(cordenada_x);
    delay(600);

///////////////////////////////

  pinMode (x_alto, INPUT);
   pinMode (x_bajo, INPUT);
   pinMode (y_alto, OUTPUT);
   pinMode (y_bajo, OUTPUT);
   digitalWrite (y_alto, HIGH);
   digitalWrite (y_bajo, LOW);   
    Serial.print("el valor de VALOR Y es...");
    int cordenada_y = analogRead(A1);
    Serial.println(cordenada_y);
    delay(600);
 if(cordenada_x >4 && cordenada_y <48 b="">
    {
       digitalWrite(cis, HIGH);//prende led de donde se presiono el cuadrante cuadrante iz super
       
       digitalWrite(cds, LOW);
       digitalWrite(cii, LOW);
       digitalWrite(cdi, LOW);
    }
    if(cordenada_x >20 && cordenada_y <48 b="">
    {
       digitalWrite(cds, HIGH);
       
       digitalWrite(cis, LOW);
       digitalWrite(cii, LOW);
       digitalWrite(cdi, LOW);
    }
    if(cordenada_x >4 && cordenada_y <21 b="">
    {
       digitalWrite(cii, HIGH);
       
       digitalWrite(cis, LOW);
      digitalWrite(cds, LOW);
      digitalWrite(cdi, LOW);
    }
    if(cordenada_x >20 && cordenada_y <21 b="">
    {
       digitalWrite(cdi, HIGH);
       
        digitalWrite(cii, LOW);
       
       digitalWrite(cis, LOW);
      digitalWrite(cds, LOW);
      
    }
    
}

No hay comentarios: