Subir a Inicio

PaperTeclado: Un teclado con una hoja impresa de papel

Introducción

¿Necesitas unos pulsadores para tu proyecto con un microcontrolador?

Lo puedes hacer muy fácilmente, simplemente imprimiendo una hoja de papel a la que se fijarán con cinta adhesiva unos cables.

NOTA: Sólo funciona con hojas impresas en impresora de inyección de tinta.

Este proyecto recoje la idea de unos documentos de CienciaRedCreativa:
http://www.cienciaredcreativa.org/informes/electricidad%201.pdf
http://www.cienciaredcreativa.org/informes/electricidad%202.pdf
http://www.cienciaredcreativa.org/informes/electricidad%203.pdf
http://www.cienciaredcreativa.org/informes/electricidad%204.pdf

En estos documentos se demuestra que:
"Las bandas realizadas sobre un papel con una impresora de inyección de tinta son ligeramente conductoras, y que a medida que aumenta la longitud de la banda, la resistencia y que a medida que aumenta el ancho de la banda la resistencia eléctrica disminuye".



Funcionamiento

Aprovechándonos de estas características, podemos imprimir sobre un papel, unas bandas que actúen como un divisor de tensión y si las puenteamos, modificamos el valor del divisor de tensión. Fijándonos en ese valor, podemos definir el pulsador apretado.


En el esquema superior representamos mediante resistencias el valor ohmnico de la  banda impresa.
 
El dibujo impreso es el siguiente:


En esta imagen vemos que hay dos bandas verticales, la primera conectada en sus extremos a 5v y a una entrada analógica de un micro, y la segunda a masa.


Al doblar el papel, las bandas horizontales se solapan, y al pulsar hacen contacto, modificando los valores del divisor de tensión que se crea con la resistencia de las bandas.

Realización

Imprimiremos con una impresora de inyeccion de tinta (en máxima calidad y sólamente en escala de grises)  el documento PaperTeclado_00 disponible en el apartado de descargas al final de esta página.

Si dispones de un tester puedes medir la resistencia entre los extremos de una banda; si es menor de 200K funcionará, si nó el convertidor analógico se vuelve inestable. En este caso es necesario añadir más tinta a las bandas. Esto lo puedes hacer imprimiendo sobre la hoja anterior el documento PaperTeclado_00bis,:

NOTAS: En las pruebas que he realizado con una reimpresión de las bandas es suficiente, pero con dos perfecto (80K).
Antes de meter de nuevo la hoja en la impresora, deja un tiempo prudencial que se seque la tinta.


Una vez impreso y con las bandas bien cargadas de tinta, recortamos el teclado de la hoja




Hacemos dos pequeños cortes en el lateral para los cables:


 Para facilitar el pliegue de la hoja, sobre un soporte blando puedes marcar con un bolígrafo las líneas de doblado


  La línea de doble punto se pliega hacia arriba, y la punto simple hacia abajo




Fijamos unos cables con cinta autoadhesiva (cello) , primero el de masa (negro):  




Después el de señal (azul):

Nota: Fijate sobre todo en que no exista contacto directo entre los dos cables y que la cinta no invada la pista. 


Y finalmente el 5v (rojo):




 Y una vez de que hemos comprobado que funciona (esto es importante ;-) )
podemos pegarlo definitivamente (siempre aplicando adhesivo en zonas sin tinta) y protegerlo, pegando sobre el teclado un trozo de plástico autoadhesivo transparente (Aironfix).



Si utilizas un Arduino y realizas el siguiente montaje...

... con este programa podrás utilizar el PaperTeclado:


El programa muestra mediante pitidos que tecla se ha pulsado, también envía al terminal serie del PC el código del pulsador.

Para saber que tecla se ha pulsado, previamente hay que conocer que valores lee el micro al pulsar cada tecla, para ello puedes utilizar el propio programa, ya que envía los valores al terminal serie. Los pasos para calibrar el teclado son los siguientes:

  1. Con el programa en funcionamiento y el teclado conectado, mira el valor del terminal cuando no se aprieta ninguna tecla, y anota dicho valor.
  2. Haz lo mismo, apuntando el valor promedio que se lee al pulsar cada tecla.
  3. Bien con la hoja de cálculo (en el directorio Docs del archivo de descargas), o a mano calcula los valores intermedios entre los anotados (X1+X2)/2.
  4. Estos valores habrá que colocarlos en el programa en las instrucciones "if" correspondientes.


/*
  PaperTeclado
 Lee el estado de un teclado compuesto por un divisor de tensión modificable,
 realizado con una hoja de papel impresa por un impresora de inyección
 de tinta. Mediante pulsadores de papel se cambia la geometría de la pista
 de tinta y por lo tanto su resistencia a masa o a 5 voltios.
 El programa mostrará mediante pulsaciones de un led colocado entre el pin
 13 y masa, la tecla pulsada.

 El circuito:
 * Salida de señal "PaperTeclado" (cable azul) conectada a la entrada analógica 0
 * Cable rojo de "PaperTeclado" a 5v
 * Cable negro de "PaperTeclado" a masa. (GND)
 * Anodo del LED (pata larga) conectada a la salida digital 13 a través de una
   resistecia de 640 Ohmnios.
 * Cátodo del LED (pata corta) conectada a masa

 * Nota: como la mayoría de Aduinos ya incorporan un LED conectado
 al pin 13 en la placa, este led es opcional.


 Creado por Iñigo Zuluaga
 11-Octubre-2010

 http://txapuzas.blogspot.com

 */

int TecladoPin = 0;    // Selecciona la entrada para el teclado
int ledPin = 13;       // Selecciona el pin del LED
int TecladoValor = 0;  // Variable para almacenar el valor analógico del teclado
int Pulsador=0;        // Variable que indica el pulsador accionado
int Nlecturas=0;       // Variable para almacenar el número de lecturas realizadas
int Margen=5;          // Número de veces que hay que leer un mismo valor para aceptarlo


void setup() {
 // pinMode(ledPin, OUTPUT); // declara ledPin como salida
 pinMode(TecladoPin,INPUT);
 // digitalWrite(TecladoPin, LOW);       // desactiva la resistencia pullup
  Serial.begin(9600);      // configura la conexión serie
}

void loop() {
  //delay(10);
  TecladoValor = analogRead(TecladoPin);  // lee el valor analógico del teclado  
  //delay(10);
  Serial.print ("Valor leido: " );
  Serial.print (TecladoValor);
  Serial.print (", Pulsador: " );
  Serial.print (Pulsador);
  Serial.print (", Lecturas: " );
  Serial.println (Nlecturas );
 
   if (TecladoValor>1000) {       // Si el valor leído es mayor que pulsador 3
      if (Pulsador==0){          // y no se ha pulsado nada
         Nlecturas=Nlecturas+1;  // incrementa el contador de lecturas          
      }  
      else {                     // Si estaba activo otro pulsador
         Nlecturas=0;            // pone el contador de lecturas a cero          
         Pulsador=0;             // desactiva el pulsador
      }
   }  
   else if (TecladoValor>600) {  // Si se ha pulsado el 3
      if (Pulsador==3){          // y estaba activo el pulsador 3
         Nlecturas=Nlecturas+1;  // incrementa el contador de lecturas                     
      }  
      else {                     // Si se ha pulsado el 3 pero estaba activo otro pulsador
         Nlecturas=0;             // pone el contador de lecturas a cero                 
         Pulsador=3;             // activa el pulsador 3
      }
   }  
   else if (TecladoValor>350) {  // Si se ha pulsado el 2
      if (Pulsador==2){          // y estaba activo el pulsador 2
         Nlecturas=Nlecturas+1;  // incrementa el contador de lecturas                     
      }  
      else {                     // Si se ha pulsado el 2, pero estaba activo otro pulsador
         Nlecturas=0;             // pone el contador de lecturas a cero                         
         Pulsador=2;             // activa el pulsador 2
      }
   }
   else if (TecladoValor<350) {  // Si no se ha pulsado el 1
        if (Pulsador==1){        // y estaba activo el pulsador 1
         Nlecturas=Nlecturas+1;  // incrementa el contador de lecturas                     
      }  
      else {                     // Si se ha pulsado el 1 pero estaba activo otro pulsador
         Nlecturas=0;             // pone el contador de lecturas a cero                         
         Pulsador=1;             // activa el pulsador 1
      }                     
   }
  
   if (Nlecturas > Margen) {     // Si se ha leído varia veces el mismo valor   
      for (int cont=0; cont < Pulsador; cont++) {    // Repite el Nº depulsador
         digitalWrite(ledPin, HIGH);                 // Enciende el LED
         delay(200);                                 // Espera 200 milisegundos
         digitalWrite(ledPin, LOW);                  // Apaga el LED 
         delay(200);                                 // Espera 200 milisegundos
      }
   Nlecturas=0;  
   }              










En el archivo de descargas dispones de otro documento (PaperTecladoB) con varios tipos de teclados:
Del mismo modo que antes, tal vez necesites recargar de tinta las pistas, para ello reimprime sobre la hoja anterior el documento siguiente (PaperTecladoB_Bis):
Una vez reimpreso podemos hacer los siguientes teclados:


PaperTecladoOnOff.pde

Es otro ejemplo de un teclado con dos pulsadores:



El montaje sería muy similar al anterior el siguiente:



El programa enciende o apaga un led situado en el pin 13 en función de la tecla pulsada. (también envía al terminal serie del PC el código del pulsador.)


/*
  PaperTeclado_OnOff
 Lee el estado de un teclado compuesto por un divisor de tensión modificable,
 realizado con una hoja de papel impresa por un impresora de inyección
 de tinta. Mediante pulsadores de papel se cambia la geometría de la pista
 de tinta y por lo tanto su resistencia a masa o a 5 voltios.
 El programa mostrará mediante pulsaciones de un led colocado entre el pin
 13 y masa, la tecla pulsada.

 El circuito:
 * Salida de señal "PaperTeclado" (cable azul) conectada a la entrada analógica 0
 * Cable rojo de "PaperTeclado" a 5v
 * Cable negro de "PaperTeclado" a masa. (GND)
 * Anodo del LED (pata larga) conectada a la salida digital 13 a través de una
   resistecia de 640 Ohmnios.
 * Cátodo del LED (pata corta) conectada a masa

 * Nota: como la mayoría de Aduinos ya incorporan un LED conectado
 al pin 13 en la placa, este led es opcional.


 Creado por Iñigo Zuluaga
 11-Octubre-2010

 http://txapuzas.blogspot.com

 */

int TecladoPin = 0;    // Selecciona la entrada para el teclado
int ledPin = 13;       // Selecciona el pin del LED
int TecladoValor = 0;  // Variable para almacenar el valor analógico del teclado
int Pulsador=0;        // Variable que indica el pulsador accionado
int Nlecturas=0;       // Variable para almacenar el número de lecturas realizadas
int Margen=2;          // Número de veces que hay que leer un mismo valor para aceptarlo


void setup() {
 pinMode(ledPin, OUTPUT); // declara ledPin como salida
 pinMode(TecladoPin,INPUT);
 digitalWrite(TecladoPin, LOW);       // desactiva la resistencia pullup
  Serial.begin(9600);      // configura la conexión serie
}

void loop() {
  // delay(10);
  TecladoValor = analogRead(TecladoPin);  // lee el valor analógico del teclado  
  // delay(10);
  Serial.print ("Valor leido: " );
  Serial.print (TecladoValor);
  Serial.print (", Pulsador: " );
  Serial.print (Pulsador);
  Serial.print (", Lecturas: " );
  Serial.println (Nlecturas );
 
   if (TecladoValor>600) {       // Si se ha pulsado el 1
      if (Pulsador==1){          // y estaba activo el pulsador 1
         Nlecturas=Nlecturas+1;  // incrementa el contador de lecturas          
      }  
      else {                     // Si se ha pulsado el 1, pero estaba activo otro pulsador
         Nlecturas=0;            // pone el contador de lecturas a cero          
         Pulsador=1;             // activa el pulsador 1
      }
   }  
   else if (TecladoValor>100) {  // Si se ha pulsado el 2
      if (Pulsador==2){          // y estaba activo el pulsador 2
         Nlecturas=Nlecturas+1;  // incrementa el contador de lecturas                     
      }  
      else {                     // Si se ha pulsado el 2, pero estaba activo otro pulsador
         Nlecturas=0;             // pone el contador de lecturas a cero                 
         Pulsador=2;             // activa el pulsador 2
      }
   }  
 
   else if (TecladoValor<100) {  // Si no se ha pulsado nada
         Nlecturas=0;             // pone el contador de lecturas a cero
         Pulsador=0;                         
   }
   // delay (500);
  
   if (Nlecturas > Margen) {     // Si se ha leído varia veces el mismo valor   
      if (Pulsador==1){
         digitalWrite(ledPin, HIGH);                 // Enciende el LED
      }
      if (Pulsador==2){
         digitalWrite(ledPin, LOW);                 // Apaga el LED
      }

   Nlecturas=0;
   Pulsador=0;  
   }              





NOTA: La calibración es similar al ejemplo anterior








PaperTecladoN8.pde

Este es un teclado de 8 teclas


La fabricación de éste teclado difiere un poco de los anteriores:


Las pistas se cierran por unos rectángulos que hacen de puente.


Los cables se fijan en el mismo lado del teclado, fíjate que no haya contacto entre ellos.
Pliegas las partes
Y ya tienes el teclado





El montaje es el siguiente:

Y el programa para Arduino...

/*
  PaperTeclado_N8
 Lee el estado de un teclado de 8 pulsadores compuesto por un divisor de tensión
 modificable realizado con una hoja de papel impresa por un impresora de inyección
 de tinta. Mediante pulsadores de papel se cambia la geometría de la pista
 de tinta y por lo tanto su resistencia a masa o a 5 voltios.
 El programa mostrará mediante pulsaciones de un led colocado entre el pin
 13 y masa, la tecla pulsada.

 El circuito:
 * Salida de señal "PaperTeclado" (cable azul) conectada a la entrada analógica 0
 * Cable rojo de "PaperTeclado" a 5v
 * Cable negro de "PaperTeclado" a masa. (GND)
 * Anodo del LED (pata larga) conectada a la salida digital 13 a través de una
   resistecia de 640 Ohmnios.
 * Cátodo del LED (pata corta) conectada a masa

 * Nota: como la mayoría de Aduinos ya incorporan un LED conectado
 al pin 13 en la placa, este led es opcional.


 Creado por Iñigo Zuluaga
 14-Octubre-2010

 http://txapuzas.blogspot.com

 */

int TecladoPin = 0;    // Selecciona la entrada para el teclado
int ledPin = 13;       // Selecciona el pin del LED
int TecladoValor = 0;  // Variable para almacenar el valor analógico del teclado
int Pulsador=0;        // Variable que indica el pulsador accionado
int Nlecturas=0;       // Variable para almacenar el número de lecturas realizadas
int Margen=2;          // Número de veces que hay que leer un mismo valor para aceptarlo


void setup() {
 pinMode(ledPin, OUTPUT);  // declara ledPin como salida
 pinMode(TecladoPin,INPUT);
 // digitalWrite(TecladoPin, LOW);       // desactiva la resistencia pullup
  Serial.begin(9600);      // configura la conexión serie
}

void loop() {
  delay(10);
  TecladoValor = analogRead(TecladoPin);  // lee el valor analógico del teclado  
 
   if (TecladoValor>820) {       // Si se ha pulsado el 1
      if (Pulsador==1){          // y estaba activo el pulsador 1
         Nlecturas=Nlecturas+1;  // incrementa el contador de lecturas          
      }  
      else {                     // Si se ha pulsado el 1, pero estaba activo otro pulsador
         Nlecturas=0;            // pone el contador de lecturas a cero          
         Pulsador=1;             // activa el pulsador 1
      }
   }  
   else if (TecladoValor>740) {  // Si se ha pulsado el 2
      if (Pulsador==2){          // y estaba activo el pulsador 2
         Nlecturas=Nlecturas+1;  // incrementa el contador de lecturas                     
      }  
      else {                     // Si se ha pulsado el 2, pero estaba activo otro pulsador
         Nlecturas=0;             // pone el contador de lecturas a cero                 
         Pulsador=2;             // activa el pulsador 2
      }
   }  
   else if (TecladoValor>640) {  // Si se ha pulsado el 3
      if (Pulsador==3){          // y estaba activo el pulsador 3
         Nlecturas=Nlecturas+1;  // incrementa el contador de lecturas                     
      }  
      else {                     // Si se ha pulsado el 3, pero estaba activo otro pulsador
         Nlecturas=0;             // pone el contador de lecturas a cero                         
         Pulsador=3;             // activa el pulsador 3
      }
   }
   else if (TecladoValor>555) {  // Si se ha pulsado el 4
      if (Pulsador==4){          // y estaba activo el pulsador 4
         Nlecturas=Nlecturas+1;  // incrementa el contador de lecturas                     
      }  
      else {                     // Si se ha pulsado el 4, pero estaba activo otro pulsador
         Nlecturas=0;             // pone el contador de lecturas a cero                         
         Pulsador=4;             // activa el pulsador 4
      }
   }
   else if (TecladoValor>490) {  // Si no se ha pulsado nada
      if (Pulsador==0){          // y antes tampoco
         Nlecturas=Nlecturas+1;  // incrementa el contador de lecturas                     
      }  
      else {                     // Si no se ha pulsado nada, pero estaba activo otro pulsador
         Nlecturas=0;             // pone el contador de lecturas a cero                         
         Pulsador=0;             // desactiva el pulsador
      }
   }
   else if (TecladoValor>395) {  // Si se ha pulsado el 8
      if (Pulsador==8){          // y estaba activo el pulsador 8
         Nlecturas=Nlecturas+1;  // incrementa el contador de lecturas                     
      }  
      else {                     // Si se ha pulsado el 8, pero estaba activo otro pulsador
         Nlecturas=0;             // pone el contador de lecturas a cero                         
         Pulsador=8;             // activa el pulsador 8
      }
   }
   else if (TecladoValor>305) {  // Si se ha pulsado el 7
      if (Pulsador==7){          // y estaba activo el pulsador 7
         Nlecturas=Nlecturas+1;  // incrementa el contador de lecturas                     
      }  
      else {                     // Si se ha pulsado el 7, pero estaba activo otro pulsador
         Nlecturas=0;             // pone el contador de lecturas a cero                         
         Pulsador=7;             // activa el pulsador 7
      }
   }
   else if (TecladoValor>210) {  // Si se ha pulsado el 6
      if (Pulsador==6){          // y estaba activo el pulsador 6
         Nlecturas=Nlecturas+1;  // incrementa el contador de lecturas                     
      }  
      else {                     // Si se ha pulsado el 6, pero estaba activo otro pulsador
         Nlecturas=0;             // pone el contador de lecturas a cero                         
         Pulsador=6;             // activa el pulsador 6
      }
   }
   else if (TecladoValor<210) {  // Si se ha pulsado el 5
      if (Pulsador==5){          // y estaba activo el pulsador 5
         Nlecturas=Nlecturas+1;  // incrementa el contador de lecturas                     
      }  
      else {                     // Si se ha pulsado el 5, pero estaba activo otro pulsador
         Nlecturas=0;             // pone el contador de lecturas a cero                         
         Pulsador=5;             // activa el pulsador 5
      }
  }
   // delay (500);
  
   if (Nlecturas > Margen) {     // Si se ha leído varia veces el mismo valor   
      Serial.print ("Valor leido: " );
      Serial.print (TecladoValor);
      Serial.print (", Pulsador: " );
      Serial.print (Pulsador);
      Serial.print (", Lecturas: " );
      Serial.println (Nlecturas );
      for (int cont=0; cont < Pulsador; cont++) {    // Repite el Nº de pulsador
         digitalWrite(ledPin, HIGH);                 // Enciende el LED
         delay(200);                                 // Espera 200 milisegundos
         digitalWrite(ledPin, LOW);                  // Apaga el LED 
         delay(200);                                 // Espera 200 milisegundos
      }
   }              
}
 



NOTA: La calibración es similar a los ejemplos anteriores







PaperTecladoRCPiano.pde

Y por último otro ejemplo para pasar el rato: un piano de papel.
Recortamos...


Unimos con cello los cables


Plegamos (fíjate en el sentido de la lengüeta inferior, es para mantener separadas las dos partes del teclado.)


Y ya tenemos nuestro piano.
 
El montaje será de la siguiente forma:

Necesitarás un altavoz (yo lo conseguí de un ordenador viejo) que se une a la patilla 9 a través de una resistencia de 100 Ohmnios, El otro terminal del altavoz a masa.
El PaperTecladoPiano, como siempre a masa, 5v y la entrada analógica 0.

El programa para Arduino es el siguiente:


 /*
  PaperTecladoPiano
 Lee el estado de un teclado compuesto por un divisor de tensión modificable,
 realizado con una hoja de papel impresa por un impresora de inyección
 de tinta. Mediante pulsadores de papel se cambia la geometría de la pista
 de tinta y por lo tanto su resistencia a masa o a 5 voltios.
 El programa emite una nota diferente en funcin de la tecla pulsada.

 El circuito:
 * Salida de señal "PaperTeclado" (cable azul) conectada a la entrada analógica 0
 * Cable rojo de "PaperTeclado" a 5v
 * Cable negro de "PaperTeclado" a masa. (GND)
 * Un cable del altavoz a la salida digital 8 a través de una resistecia de 100 Ohmnios.
 * El otro cable a masa (GND)

 Creado por Iñigo Zuluaga
 13-Octubre-2010

 http://txapuzas.blogspot.com

 */

// Entradas-Salidas
int TecladoPin = 0;    // Pin de entrada para el teclado
int AltavozPin = 8;    // Pin de salida para el altavoz
// Variables
int TecladoValor = 0;  // Variable para almacenar el valor analógico del teclado
int Pulsador=0;        // Variable que indica el pulsador accionado
int Nlecturas=0;       // Variable para almacenar el número de lecturas realizadas
int Margen=1;          // Número de veces que hay que leer un mismo valor para aceptarlo
int Do=262;            // Frecuencia de las notas
int Re=294;
int Mi=330;
int Fa=349;
int Sol=392;
int La=440;
int Si=494;
char* Nota="Sol";      // Variable para almacenar la última nota

void setup() {
   pinMode(AltavozPin,OUTPUT); // El pin del altavoz como salida
   Serial.begin(9600);         // configura la conexión serie
}

void loop() {
   delay(10);
   TecladoValor = analogRead(TecladoPin);  // lee el valor analógico del teclado  
 
   if (TecladoValor>900) {       // Si el valor leído es grande (no se ha pulsado nada)
      if (Pulsador==0){          // y estaba activo el pulsador 0
         Nlecturas=Nlecturas+1;  // incrementa el contador de lecturas                     
      }  
      else {                     // Si es Si, pero estaba activa otra nota
         Nlecturas=0;             // pone el contador de lecturas a cero                 
         Pulsador=0;             // activa el pulsador 7
      }
   }  
   else if (TecladoValor>800) {  // Si el valor leído es SI
      if (Pulsador==7){          // y estaba activo el pulsador 7
         Nlecturas=Nlecturas+1;  // incrementa el contador de lecturas                     
      }  
      else {                     // Si es Si, pero estaba activa otra nota
         Nlecturas=0;             // pone el contador de lecturas a cero                 
         Pulsador=7;             // activa el pulsador 7
      }
   }  
   else if (TecladoValor>700) {  // Si el valor leído es LA
      if (Pulsador==6){          // y estaba activo el pulsador 6
         Nlecturas=Nlecturas+1;  // incrementa el contador de lecturas                     
      }  
      else {                     // Si es LA, pero estaba activa otra nota
         Nlecturas=0;             // pone el contador de lecturas a cero                         
         Pulsador=6;             // activa el pulsador 6
      }
   }
   else if (TecladoValor>600) {  // Si el valor leído es SOL
      if (Pulsador==5){          // y estaba activo el pulsador 5
         Nlecturas=Nlecturas+1;  // incrementa el contador de lecturas                     
      }  
      else {                     // Si es SOL, pero estaba activo otra nota
         Nlecturas=0;             // pone el contador de lecturas a cero                         
         Pulsador=5;             // activa el pulsador 5
      }
   }
   else if (TecladoValor>500) {  // Si el valor leído es FA
      if (Pulsador==4){          // y estaba activo el pulsador 4
         Nlecturas=Nlecturas+1;  // incrementa el contador de lecturas                     
      }  
      else {                     // Si es FA, pero estaba activo otra nota
         Nlecturas=0;             // pone el contador de lecturas a cero                         
         Pulsador=4;             // activa el pulsador 4
      }
   }
   else if (TecladoValor>300) {  // Si el valor leído es MI
      if (Pulsador==3){          // y estaba activo el pulsador 3
         Nlecturas=Nlecturas+1;  // incrementa el contador de lecturas                     
      }  
      else {                     // Si es MI, pero estaba activo otra nota
         Nlecturas=0;             // pone el contador de lecturas a cero                         
         Pulsador=3;             // activa el pulsador 3
      }
   }
   else if (TecladoValor>200) {  // Si el valor leído es RE
      if (Pulsador==2){          // y estaba activo el pulsador 2
         Nlecturas=Nlecturas+1;  // incrementa el contador de lecturas                     
      }  
      else {                     // Si es RE, pero estaba activa otra nota
         Nlecturas=0;             // pone el contador de lecturas a cero                         
         Pulsador=2;             // activa el pulsador 2
      }
   }
   else if (TecladoValor<200) {  // Si se ha pulsado DO
      if (Pulsador==1){          // y estaba activo el pulsador 1
         Nlecturas=Nlecturas+1;  // incrementa el contador de lecturas                     
      }  
      else {                     // Si es DO, pero estaba activa otra nota
         Nlecturas=0;             // pone el contador de lecturas a cero                         
         Pulsador=1;             // activa el pulsador 1
      }
  }
   // delay (500);
  
   if (Nlecturas > Margen) {     // Si se ha leído varias veces el mismo valor   
     switch (Pulsador) {    
       case 1:                   // Si la tecla pulsada es la 1
         tone(AltavozPin,Do);    // emite la nota Do
         Nota="Do";              // Almacena el nombre
         break;                  // y sale
       case 2:
         tone(AltavozPin,Re);
         Nota="Re";
         break;
       case 3:
         tone(AltavozPin,Mi);
         Nota="Mi";
         break;
       case 4:
         tone(AltavozPin,Fa);
         Nota="Fa";
         break;
       case 5:
         tone(AltavozPin,Sol);
         Nota="Sol";
         break;
       case 6:
         tone(AltavozPin,La);
         Nota="La";
         break;
       case 7:
         tone(AltavozPin,Si);
         Nota="Si";
         break;
      default:                      // Si no se ha pulsado ninguna tecla
         noTone(AltavozPin);        // apaga el sonido
         Nota="  ";                 // vacía la variable
         break;                     // y sale
      }
   }
   Serial.print ("Valor leido: " ); // muestra en la terminal serie
   Serial.print (TecladoValor);     // el valor leído
   Serial.print (", Nota: " );      // y su nota
   Serial.println (Nota);           // correspondiente
        




NOTA: La calibración es similar a los ejemplos anteriores







Información legal

1. Propiedad intelectual
Todos los derechos de propiedad intelectual del contenido de Txapuzas eléctronicas, están bajo una licencia Creative Commons Share-Alike, cuyo contenido podéis revisar en este enlace.
Por tanto queda permitido copiar, distribuir, comunicar públicamente la obra y hacer obras derivadas de la misma, siempre que se respeten los términos de la licencia arriba reseñada.
3. Actualizaciones y modificaciones de Txapuzas electrónicas
El autor se reserva el derecho a actualizar, modificar o eliminar la información contenida en Txapuzas eléctrónicas, y la configuración o presentación del mismo, en cualquier momento, sin previo aviso, y sin asumir responsabilidad alguna por ello.
4. Indicaciones sobre aspectos técnicos
El autor no asume ninguna responsabilidad que se pueda derivar de problemas técnicos o fallos en los equipos informáticos, que se produzcan a causa de los circuitos e ideas expuestos en el blog de txapuzas electrónicas, así como de los daños que pudieran ocasionar.
El autor se exime de toda responsabilidad ante posibles daños o perjuicios que pueda sufrir el usuario a consecuencia de errores, defectos u omisiones en la información facilitada.


Descargas

El esquema, descripción e imágenes están disponibles en el siguiente enlace:

Si tienes problemas con el enlace anterior, aquí puedes descargar todos los archivos de txapuzas

Notas
Para la realización de este proyecto se han utilizado los programas: Arduino, Inkscape, Openoffice, Gimp, Picasa, Fritzing
Si encuentras algún fallo, se te ocurre alguna mejora, o simplemente quieres hacer algún comentario, te lo agradeceré: Gracias :-)

8 comentarios:

  1. Me encanta.

    Un excelente trabajo. Muy didáctico. Ahora a pensar donde lo aplico.

    piniflopa

    ResponderEliminar
  2. disculpen pero no me esta saliendo!! :(
    me parece muy interesante el trabajo, pero cuando intento replicarlo, no me sale!! he impreso con impresora de inyección de tinta y he estado leyendo los datos, la primera de todas mis lecturas me dio muy bien, con ruido en un rango muy definido, imprimi con mas tinta un nuevo documento, pero desde entonces no me ha dado datos definidos!! a parte la resistencia que mido no es menos de 4Mhoms!!
    Gracias

    ResponderEliminar
  3. Hola anónimo.
    La resistencia del paper teclado debe ser menor de 1Mohmnio para poder ser utilizable.
    Hay que tener en cuenta que para intentar disminuir la resistencia, la zona de contacto con la banda de tinta debe ser lo más larga posible tanto con el cable, como con el polímetro.(no clavar la punta del tester, si nó apoyarla lateralmente).
    Puedes imprimir varias veces sobre el mismo papel el documento, de forma que la cantidad de tinta depositada sobre el papel aumente, con un tester comprobar los valores, y cuando estén alrededor de 1M recortar el paperteclado y construirlo.

    ResponderEliminar
  4. O sea que lo que tanto me hizo reir de Golden Boy puede funcionar XD http://26.media.tumblr.com/tumblr_m16cb23RIH1rs62t1o1_500.png

    ResponderEliminar
  5. Enhorabuena!! :) El piano genial

    ResponderEliminar
  6. Excelente artículo para poder crear un teclado sobre una hoja de papel!

    ResponderEliminar