Conectar mas de 2 pulsadores por una sola linea en arduino

|

Uno de los miedos mas grandes para los que utilizamos arduino es quedarnos sin entradas ni salidas en nuestro bicho y es necesario utilizar nuestra pericia para lograr ampliar mas nuestros puertos, y en lo posible lo mas sencillo y económico. Es por eso que he realizado este post.
muchas veces necesitamos conectar mas de un pulsador o sensores jumper a nuestros trabajos pero el problema que siempre vemos es que entre mas sensores de este tipo tengamos mas entradas digitales perdemos.
la solución es muy simple. Aprovechando que nuestro bicho posee entradas analógicas y los valores que pueden tomar estas entradas son casi infinitos por que no la utilizamos para detectar este tipo de dispositivos, el principio es tan básico que solo consiste en divisores de tensión.

Sabemos que el voltaje de referencia por defecto del ardunio es 0v y 5v donde por lógica 0 es el valor mínimo 0v y 5v el máximo, pero entre estos dos valores hay muchos valores que pueden ser tomados. Supongamos que necesito conectar 5 pulsadores entonces:



Entonces 5/6=0.83333333V

Esto quiere decir que el voltaje de salida del divisor de tensión y entrada analógica del ardunio es:

  • S1 estará entre 0.83333333 y 1.66666666
  • S2 estará entre 1.66666666 y 2.49999999
  • S3 estará entre 2.49999999 y 3.33333333
  • S4 estará entre 3.33333333 y 4.16666666
  • S5 estará entre 4.16666666 y 4.99999999

Como calculamos esto pues fácil por divisor de tensión


Despejo R2

Entonces para S3

R2 = ?

R1 = 3.3K ( Para mi caso por que hay miles de combinaciones posibles)

Ve = 5V

Vout = 3v (mayor que 2.4999999999 y menor 3.33333333v)

R2 = 3.3(5v - 3v)/3v = 2.2k Muchas veces el valor no es comercial entonces buscamos uno que si y que no se pase de los rangos que necesitamos. en mi caso quedaría de esta manera.

para los que no quieran quemarce la cabeza pensando que valores escojer: prueben con los mios que son los que tenia en mi laboratorio.



Ahora si lo que nos interesa el sketch:


void setup() {


Serial.begin(9600);
}

void loop() {
// lee el puerto analógico 0
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;
}

}

muy básico y fácil de entender. luego posteo fotos

2 comentarios:

Fernando Chabaud dijo...

Pues muchisimas gracias por la info... me acabo de ahorrar unos cuantos minutos, u horas, de hacer calculos.... Gracias por compartir.

Julia Pérez del Río dijo...

Una pregunta, pq mapeas entre 0 y 6? Si lo hicieras entre 0 y 5 daría error?

Publicar un comentario