viernes, 7 de octubre de 2016

Realizar conmutadas con pulsadores.

Hola de nuevo visitantes del blog, en la entrada anterior vimos como encender y apagar algo a través de un pulsador. Sin embargo en una instalación real, cuando entras en tu cuarto por ejemplo, puedes encender la luz desde varios sitios, no solo de uno.

En esta entrada lo que vamos a hacer es convertir nuestros pulsadores en conmutadores o conmutadores de cruce gracias a la programación. La manera en que conectaremos los pulsadores es la siguiente. 


No recuerdo si lo dije en la otra entrada pero las resistencias de los pulsadores deben ser de un valor de 10 kilo-ohmios y la del diodo led de 220 ohmios. 

A continuación os pondré el código de programación para que funcione. Lo que hace es encender o apagar la luz desde cualquiera de los 3 pulsadores de manera que ya podríamos encender la luz desde la puerta de la habitación y desde cada lado de la cama por ejemplo. Comentar que en este código entran en juego funciones, bucles "for" y arrays.. Como esta enfocado a todo el mundo sin que tenga ni remota idea de programar después del código os diré como modificarlo por si queréis cambiarlo a vuestro gusto. 

CÓDIGO DE PROGRAMACIÓN: 

const int pulsadores[] = {2, 3, 4};
const int nPulsadores = 3;

const int Luz = 12;

int estadoLuz = LOW;
int estadoBoton[] = {HIGH, HIGH, HIGH};
int estadoBotonAnterior[] = {HIGH, HIGH, HIGH};

long lastDebounceTime = 0;  
long debounceDelay = 50;    

void setup() {
  for(int i = 0; i < nPulsadores; i++){
      pinMode(pulsadores[i], INPUT);
    }
  pinMode(Luz, OUTPUT);
  digitalWrite(Luz, LOW);
}

void loop() {
  for(int i = 0; i < nPulsadores; i++){
      leerPulsador(i);
    }
}

void leerPulsador(int pulsador){
  int lecturaPulsador = digitalRead(pulsadores[pulsador]);
  if (lecturaPulsador != estadoBotonAnterior[pulsador]) {
    lastDebounceTime = millis();
  }
  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (lecturaPulsador != estadoBoton[pulsador]) {
      estadoBoton[pulsador] = lecturaPulsador;
      if(estadoBoton[0] == LOW || estadoBoton[1] == LOW || estadoBoton[2] == LOW){
          estadoLuz= !estadoLuz;
        }
    }
  }
  digitalWrite(Luz, estadoLuz);
  estadoBotonAnterior[pulsador] = lecturaPulsador;  
}

Como agregar otro pulsador para que tambien se encienda y apague desde este:

Aveces como electricista es imposible predecir desde cuantos sitios quiere que se encienda la luz, por lo que os enseñare como añadir otro pulsador y siguiendo este sistema podremos añadir los que queramos... 

En el montaje tan solo tendríamos que añadir otro pulsador y resistencia y conectarla igual que los otros conectando el pulsador al pin 5 de Arduino por ejemplo. Luego en la parte de código tendríamos que seguir estos pasos:

  1.  En la linea de código const int pulsadores[] = {2, 3, 4}; añadir el nuevo pulsador, quedando así: const int pulsadores[] = {2, 3, 4, 5};
  2.  En la linea de código const int nPulsadores = 3; cambiaríamos el valor 3 por un 4, ya que ahora tenemos 4 pulsadores.
  3. En las lineas int estadoBoton[] = {HIGH, HIGH, HIGH};int estadoBotonAnterior[] = {HIGH, HIGH, HIGH}; añadiremos también el estado del cuarto pulsador quedando de esta manera: int estadoBoton[] = {HIGH, HIGH, HIGH, HIGH};int estadoBotonAnterior[] = {HIGH, HIGH, HIGH, HIGH};
  4. Y por ultimo en la linea de código  if(estadoBoton[0] == LOW || estadoBoton[1] == LOW || estadoBoton[2] == LOW) añadiremos también el cuarto pulsador quedando así: if(estadoBoton[0] == LOW || estadoBoton[1] == LOW || estadoBoton[2] == LOW || estadoBoton[3] == LOW)
Como vemos es muy fácil encender o apagar una luz desde cualquier sitio, tan solo tenemos que modificar el código de programación y decirle a cada pulsador lo que queremos que encienda o apague. En cambio en una instalación normal, si quisieras encenderlo desde otro lugar tendrías que ir desmontando cajas de empalme y añadiendo cableado nuevo pasándolo por los tubos que hay dentro de la pared hasta llegar al conmutador deseado.. un follón vamos.


No hay comentarios:

Publicar un comentario