En
nuestro primer tutorial sobre el gran Arduino, desvelaremos una manera
de usurar mas de un pulsador por línea de entrada he interpretar cada
pulsador independientemente. ¿Parece imposible?, con las entradas
analógicas de Arduino esto es muy sencillo de implementar.
A la hora de realizar nuestros
proyectos con cierta complejidad en Arduino, las entradas digitales de
este pueden verse limitadas por el uso de pulsadores, sensores
digitales, interruptores, etc. Una solución sencilla, es usar las
entradas analógicas que pueden tomar casi infinitos valores y determinar
mediante comparación cual de los dispositivos externos se ha accionado.
El principio básico de esta solución, es la utilización de un divisor
de tensión:
Esquema divisor de tensión.
El voltaje de referencia por defecto de
Arduino es 5v. Este voltaje se usa para la conversión analógica/digital.
Para un valor de 5v en una entrada analógica, su correspondiente en
digital con el que trabajaremos en Arduino será 1023, y para un valor de
0v su correspondiente en digital será el 0. Para los demás valores
analógicos, les corresponderán los valores intermedios 0-1023. Como
podemos apreciar, la resolución de cambio de analógico a digital es de
1024 bits, solo podemos trabajar con 1024 valores analógicos.
Supongamos que queremos usar 5 pulsadores en una sola línea de entrada analógica,
Donde N es el número de pulsadores por línea.
Este valor es el margen que debemos dejar para interpretar cada
pulsador de manera distinta. Tened en cuenta, que se ha incluido el
estado en el que no estará pulsado ningún pulsador. En la entrada
analógica debemos tener los siguientes valores de tensión cuando se
pulse el pulsador:
Ninguno: 0v-0,833v
S1: 0,83v-1,66v
S2: 1,66v-2,49v
S3: 2,49v-3,33v
S4: 3,33v-4,16v
S5: 4,16v-4,99v
Al aumentar el número de pulsadores se disminuirá este margen. Es
recomendable no usar un margen demasiado pequeño, porque las caídas de
tensiones en los cables o tolerancia en las resistencias pueden producir
errores.
Ahora debemos calcular las resistencias R1 y R2 del divisor de tensión:
Despejando R2:
Para R1 usaremos el valor que mas nos convenga, nosotros usaremos 3,3K.
Vout
será uno de los valores del margen para cada pulsador. Es recomendable
usar el valor medio del margen para evitar falsos estados.
Vcc podrá ser cualquier voltaje, en nuestro ejemplo 5v.
Por ejemplo, calcularemos R2 para el pulsador S3:
Si el resultado de R2 no es un valor de resistencia estándar, cogeremos el valor comercial de resistencia más cercano.
Para los demás pulsadores, realizaremos la misma operación.
Este es el código que debemos usar para que funcione nuestro ejemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
void setup() {
Serial.begin(9600);
}
void loop() {
int analogValue = analogRead(0);
analogValue = map(analogValue,0,1023,0,6);
switch (analogValue){
case 1:
Serial.println( "Es 1" );
delay(300);
break ;
case 2:
Serial.println( "Es 2" );
delay(300);
break ;
case 3:
Serial.println( "Es 3" );
delay(300);
break ;
case 4:
Serial.println( "Es 4" );
delay(300);
break ;
case 5:
Serial.println( "Es 5" );
delay(300);
break ;
}
}
|
Debemos tener en cuenta, que cuado se pulsan dos o más pulsadores al
mismo momento, la resistencia R2 del divisor de tensión, seria el
resultado de la asociación paralela de las resistencias de cada
pulsador. Por ejemplo, si pulsamos S1 y S4, la R2 resultante sería:
Y por tanto, Vout seria 3,92v. Nuestro Arduino interpretaría esta acción como si se pulsara S4.
Fuente:
http://www.tuelectronica.es/tutoriales/arduino/varios-pulsadores-por-linea-de-entrada-en-arduino.html