integracion mandos garage en moto

Hola...

Queria hacer un pequeño proyecto, ya existe comercialmente pero como soy un inquieto, pues queria hacermelo yo mismo... investigando por ahi he visto que lo mas sencillo era hacerlo mediante arduino, por lo menos para mi, y sobre todo a un coste poco elevado comparado con el kit que se vende para ello. Esta es la primera vez que me pondria con arduino...

La idea es utilizar el pulsador de rafagas de las luces de largo alcance de la moto, para activar unos reles y que estos activen el boton del mando del garage, si se pulsa una vez, activa la puerta 1, si dos veces seguidas, activa la puerta 2 y asi sucesivamente... mi idea era utilizar una arduino nano, por su tamaño y por que me imagino que para este proyecto es mas que suficiente.

Soy un novato total en electronica, pero he hecho algo de programacion, por lo que necesito un poco de ayuda... a ver si un alma caritativa me confirma si mi idea es viable o como se podria hacer mejor...

En cuanto a programacion, tendria que refrescar un poco la memoria de como hacerlo y mirar las funciones que tiene arduino, pero el programa creo que seria bastante sencillo con dos simple funciones. la primera seria esperar que la entrada reciba un pulso de 12v ( que vendria del cable de las rafagas de la moto), o bien que esa rafaga alimentara un rele que simulara un interruptor momentaneo, cuando recibe un pulso o cierra el interruptor, compruebe la duracion del mismo, si es superior a 1,5segs, que no haga nada, si es inferior a ese tiempo, que ponga el contador a 1 y que espere un tiempo a ver si hay mas pulsaciones, si hay otra pulsacion que ponga el contador a 2, y que espere a ver si hay una tercera, si la hay que ponga el contador a 3, y que devuelva el valor del contador, seria hasta un maximo de 3 pulsaciones en un limite de tiempo no superior a 1,5 seg. la segunda funcion, seria dependiendo del valor del contador, que active una salida u otra que iria a una placa con unos reles (para esto habia pensado en utilizar una placa de estas http://www.ebay.es/itm/SainSmart-4-Channel-5V-Solid-State-Relay-Module-Board-OMRON-SSR-AVR-DSP-Arduino-/270915701167?pt=LH_DefaultDomain_0&hash=item3f13d589af ) si el valor del contador es 1 que active la salida del rele 1 durante 0,5seg, si es el valor es 2, que active el rele 2 y si es 3, pues el rele 3. Una vez activado el rele que se desea, que ponga el valor del contador a 0. Los reles lo que harian seria cerrar el circuito del boton del mando simulando el mismo.

La arduino la alimentaria de la bateria de la moto que es de 12V, pero en marcha llegara a los 13,5V, seria conveniente meterle un regulador de tension fija a 12V?... si, no!?...

Muchas Gracias!!!

Si no quieres complicarte 2.48 euros puesto en casa:

http://www.ebay.es/itm/Universal-Handlebar-Motorcycle-Accident-Hazard-Light-Switch-ON-OFF-Button-NEW-/251274950618?pt=US_MP3_Player_Cables_Adapters&hash=item3a812777da

Si lo quieres mas completo 5.36 euros: http://www.ebay.es/itm/MOTORCYCLE-HORN-Turn-Signal-Head-Light-Hight-Beam-SWITCH-7-8-Handlebar-ATV-/230992429890?pt=UK_Motorcycle_Parts_13&hash=item35c838c342

Hola Heke,

Ya sabía de esos... De hecho tenía fichado ya este http://www.alsotao.com/product/13990800435/Small%20handsome%20handlebar%20switch%20assembly%20right%20disc%20brakes%20brake%20without%20horns%20without%20a%20fight%20motorcycle%20accessories, y modificarlo para usar el selector azul para seleccionar el rele que accionaría pulsando el botón rojo.... Pero me molaba la idea de introducirme en arduino con este proyecto...

De todas formas gracias por el aporte.

Bueno… Pues ya me he puesto a ello y ya tengo una primera version del sketch, lo malo es que hasta que no me llegue el arduino nano, no puedo probar si funciona correctamente…
Lo adjunto a ver si alma caritativa le puede pegar un vistazo y comentarme los fallos que pueda tener, sugerencias y si alguien le apetece probarlo con unos leds… Me haria un gran favor!!!..

El sketch funcionaria de dos maneras, pulsando una, dos o tres veces… o bien si la pulsacion dura menos de 0,20 segundos activaria el boton 1, si dura entre 0,20 segundos y 0,40 segundos aproximadamente, cerraria el boton dos, si la pulsacion dura entre 0,40 y 1,5 segundos, cerraria el boton 3, esto me di cuenta mientras lo hacia, pero como no me desagrado la idea de hacer una pulsacion larga en vez de tres para activar el boton tres, pues no me calente la cabeza y lo deje como lo estaba haciendo.

Aqui va…

//BEAMS BIKE GDO
//Programa para controlar tres reles que cerrarn los botones de un mando para abrir las puertas del garage.
// Declaracion de constantes
const int boton = 2;
const int rele1 = 3;
const int rele2 = 4;
const int rele3 = 5;
long lapso = 0;                                             // Es la variable que controlara el tiempo en el que se pulsa el boton, que sera de un maximo de 1,5 segundos
long lapsorestante = 0;

// Declaracion de variables
long actualmillis = 0;                                      //controla el tiempo desde el cual fue pulsado el boton la primera vez
long laprestante = 0;                                       // controla el lapso de tiempo que queda para ver cuantas veces se pulsa el boton
int pulsacion = 0;                                          //controla si el boton es pulsado
int contador = 0;                                           //Para contar las veces que se pulsa el boton

void setup() {
// Declaracion de entradas y salidas
pinMode (boton, INPUT);                                     // declara boton como entrada para el pulsador
pinMode (rele1, OUTPUT);                                    // declara rele1 como salida para el rele 1
pinMode (rele2, OUTPUT);                                    // declara rele2 como salida para el rele 2
pinMode (rele3, OUTPUT);                                    // declara rele3 como salida para el rele 3
}
void loop() {
  pulsacion= digitalRead(boton);                            // lee el boton
    if (pulsacion== HIGH);{                                 // comprueba que si el boton es pulsado
      delay (200);                                          // para evitar rebotes en la pulsacion
      actualmillis= millis();                               // Da el valor actual del tiempo transcurrido para la futura comprobacion del lapso 
      contador= 1;                                          // El contador del boton se pone a 1 ya que ha sido pulsado el boton 1 vez
      lapso= 1500000;                                       // Da el valor de 1,5 segundos al lapso de tiempo para pulsar el boton, este sera el maximo 
         while ((actualmillis- millis())<lapso);{           // funcion que controla si en el lapso de tiempo de 1,5 segs se vuelve a pulsar el boton
          laprestante= (actualmillis- millis());            // Actualiza el valor del tiempo del lapso por el restante por si se vuelve a pulsar el boton 
          pulsacion= digitalRead(boton);                    // lee el boton
            if (pulsacion== HIGH); {                        // comprueba que si el boton es pulsado
              delay(200);                                   // para evitar rebotes en la pulsacion 
              actualmillis= millis();                       // Da el valor actual del tiempo transcurrido para la futura comprobacion del lapso
              contador= 2;                                  // El contador del boton se pone a 2 ya que ha sido pulsado el boton 2 veces 
              lapso= lapsorestante;                         // Da el valor del tiempo restante a lapso 
                while ((actualmillis- millis())<lapso); {   // funcion que controla si en el lapso de tiempo restatante se vuelve a pulsar el boton
                   pulsacion= digitalRead(boton);           // lee el boton
                   if (pulsacion== HIGH); {                 // comprueba que si el boton es pulsado
                     delay(200);                            // para evitar rebotes en la pulsacion
                     contador= 3; }                         // El contador del boton se pone a 3 ya que ha sido pulsado el boton 3 veces   
            }                                                            
          }                                                              
        }
      }
      if (contador== 1); {                                  // Comprueba si el boton se ha pulsado una vez
        digitalWrite (rele1, HIGH);                         // Si se ha pulsado el boton solo una vez, pone en HIGH el pin del rele 1   
        delay(250);                                         // Tiempo durante el cual se activa el rele para cerrar el boton 1 del mando  
        digitalWrite (rele1, LOW);}                         // Pone en LOW el rele 1 para que  deje de cerrar el boton 1 del mando  
      if (contador== 2);{                                   // Comprueba si el boton se ha pulsado dos veces
        digitalWrite (rele2, HIGH);                         // Si se ha pulsado el boton dos veces, pone en HIGH el pin del rele 2
        delay(250);                                         // Tiempo durante el cual se activa el rele para cerrar el boton 2 del mando
        digitalWrite (rele2, LOW);}                         // Pone en LOW el rele 2 para que  deje de cerrar el boton 2 del mando
      if (contador== 3); {                                  // Comprueba si el boton se ha pulsado tres veces
        digitalWrite (rele3, HIGH);                         // Si se ha pulsado el boton tres veces, pone en HIGH el pin del rele 3
        delay(250);                                         // Tiempo durante el cual se activa el rele para cerrar el boton 3 del mando 
        digitalWrite (rele3, LOW); }                        // Pone en LOW el rele 3 para que  deje de cerrar el boton 3 del mando
        contador= 0;
}

Moderador: Código editado con etiquetas para su correcta visualización

GRACIAS!!!

Buenas tardes, había pensado en hacer lo mismo, el código está bien?

Gracias

No revivas hilos que tienes mas de 120 dias. Este es del 2013!!! Seguramente no advertiste la fecha de lo contrario el sentido común dicta que no tiene sentido preguntar. Crea un nuevo hilo porque este permanecerá cerrado.