Accueil du site > Ressources > PaperTeclado : un clavier en papier

Cette fiche pratique est issue de l’article PaperTeclado : Un teclado con una hoja impresa de papel, que vous pouvez retrouver en version originale sur le site Txapuzas Electrónicas.

Basé sur les documents élaborés au sein du Red Creativa de Ciencia, le PaperTeclado de Iñigo Zuluagadu part du principe que « des bandes en papier imprimées avec une imprimante à jet d’encre sont légèrement conductrices, le niveau de résistance électrique se calculant en fonction de la longueur et de la largeur de chaque bande. »

Principe de base : un clavier < • >

Partant des caractéristiques déterminées par le Red Creativa de Ciencia, le schéma ci-dessous représente la correspondance du montage des résistances sur une bande imprimée.

- Agrandir l’image

Téléchargez le shéma ci-dessous et imprimez-le - en niveaux de gris uniquement et sur une imprimante à jet d’encre haute qualité (l’encrage doit être dense).

- Télécharger le shéma
- Télécharger le document pour un deuxième encrage si besoin

Une fois l’encre séchée, découpez le shéma et faites une petite encoche de chaque côté pour le passage des câbles.

Pliez la feuille en suivant les pointillés comme ci-dessous.

Connecter ensuite les câbles à la feuille :
- La masse (câble noir) en contact avec la zone GND
- Le signal (câble bleu) en contact avec la zone Serial
- L’alimentation 5 volts (câble rouge) en contact avec la zone 5V

Vous pouvez ensuite procéder au collage en veillant à n’appliquer la colle que sur les zones non encrées. Vous pouvez également protéger votre clavier en le recouvrant d’une feuille de plastique transparent.

Pour connecter le clavier à un Arduino, effectuez le montage comme suit.

- Agrandir le schéma

Le programme mis à disposition permet d’émettre un bip à chaque fois que l’une des touches est enfoncée. Vous pouvez bien sûr l’adapter à vos besoins.

/*
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;  
  }              
}

Plusieurs variations du PaperTeclado sont disponibles, mais j’ai toutefois un petit faible pour la version clavier de musique, le PaperTecladoPiano. Si votre curiosité vous y conduit, vous pouvez retrouvez les étapes de montage et les fichiers de code des autres variations sur l’article d’origine.

Variation : le clavier à un octave

Le PaperTecladoPiano s’élabore selon les mêmes étapes que le PaperTeclado.

- Télécharger le shéma à imprimer

Pliez et raccordez les câbles.
- La masse (câble noir) en contact avec la zone GND
- Le signal (câble bleu) en contact avec la zone Serial
- L’alimentation 5 volts (câble rouge) en contact avec la zone 5V

Collez et protégez votre clavier puis passez à l’étape Arduino. Vous aurez ici impérativement besoin d’un haut-parleur, qui se relie à la broche 9 de l’Arduina par l’intermédiaire d’une résistance de 100 Ohms.

- Agrandir le shéma

Et enfin, le programme.
/*
 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      
}  

Haut
Contrat Creative Commons Contenus mis à disposition sous un contrat Creative Commons.
Plan du site | Réalisé avec Spip | Hébergé par Frédéric Guerrier | jQuery Twitter | RSS 2.0