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:
void setup() { Serial.begin(9600); } void loop() { int analogValue = analogRead(0); // Lee el valor de la entrada analógica A0 analogValue = map(analogValue,0,1023,0,5); // Cambiamos el valor de rango 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.