Pages: [1]   Go Down
Author Topic: Telerruptor en Arduino  (Read 1465 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas tardes, ante todo, pido disculpas si este no es el apartado adecueado, he estado buscando por todo el foro y no he encontrado nada parecido.
La cuestión es que estoy intentando usar un arduino como controlador del alumbrado de un local. El problema es que consigo activar una salida desde un pulsador y apagarlo desde otro. También mantener una salida activa mientras se acciona un pulsador. Esto normalmente lo he realizado, usando un LOGO, que si que dispone de la opción de rele de impulsos o telerruptor. alguien sabe como programar esto en un Arduino.

Muchas gracias a todos y un saludo.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Espero que esto te sirva el siguiente ejemplo.

Un saludo.




int Pin_pulsador = 8;           // Numero del pin en el que se conecta el pulsador al arduino
int Pin_led = 13;                 // Numero del pin en el que se conecta la salida del led ( o lo que se quiera conectar) al arduino
boolean Telerruptor = false; // Declaramos la variable del telerrupto y la ponemos en fase al arranque del arduino


void setup()
{
 pinMode(Pin_pulsador,INPUT); // Declaramos la variable Pin_pulsador como entrada del arduino
 pinMode(Pin_led,OUTPUT);      // Declaramos la variable Pin_led como salida del arduino
}

void loop()
{
 if (digitalRead(Pin_pulsador) == HIGH) // comprobamos si se acciona el pulsador
     {
       Telerruptor=!Telerruptor;               // Invertimos la salida del telerruptos desde la ultima pulsacion
       digitalWrite(Pin_led,Telerruptor);   // Escribimos en la salida
       delay(100);                                  //Realizamos una pausa para evitar los rebotes de la pulsacion
     }
}
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas noches.

Efectivamente así funciona. Lo que si que es cierto, que con pulsos cortos no funciona correctamente. De todas formas, ya he visto como solucionas el tema y me ha servido de una gran ayuda.

Muchas gracias y un saludo.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Me alegro que te ayude el ejemplo, si quieres realizar pulsaciones muy cortas entre una pulsación y otra te recomiendo que quites o bajes el tiempo del delay, yo lo he puesto como una seguridad por si la pulsación es mas larga de lo normal y a sí evitar que en una pulsación se encienda y se apague.

También te recomiendo nu usar mucho la función delay ya que retrasa el programa, yo suelo usar los millis y realizo unas comparaciones para sacar la pausa deseada.

Un saludo.

Logged

Vilalba, Lugo, Spain
Offline Offline
Sr. Member
****
Karma: 23
Posts: 335
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas, yo te tenia un ejemplo preparado. te lo pongo también para ser criticado por chapuzero jejeej

Code:
int PinPulsador=5;                                       // Entrada que vas a funcionar como un pulsador
int PinConmutador1=6;                                    // Entrada que vas a funcionar como un conmutador
int PinConmutador2=7;                                    // Entrada que vas a funcionar como un conmutador
int PinLuzPulsador=13;                                   // Pin que va a hacer de salida
int PinLuzConmutador=14;                                 // Pin que va a hacer de salida
boolean C1Pulsado=false;                                 // Conmutador 1 pulsado
boolean C2Pulsado=false;                                 // Conmutador 1 pulsado
boolean LuzEncendida=false;                              // Estado de la luz
void setup()
{
  pinMode(PinPulsador, INPUT);                           // pin del pulsador
  pinMode(PinConmutador1, INPUT);                        // pin del pulsador
  pinMode(PinConmutador2, INPUT);                        // pin del pulsador
  pinMode(PinLuzPulsador, OUTPUT);                       // pin luz pulsador
  pinMode(PinLuzConmutador, OUTPUT);                     // pin luz pulsador
  digitalWrite(PinLuzPulsador, LOW);                     // luz apagado hasta pulsar
  digitalWrite(PinLuzConmutador, LOW);                   // luz apagado hasta pulsar
}
void loop()
{
  // Manejo del pulsador
  digitalWrite(PinLuzPulsador, digitalRead(PinPulsador));// Ponemos en la salida el valor q hay en la entrada                     
 
 
  // Conmutador
  if (digitalRead(PinConmutador1) && !C1Pulsado)          // Si pulsamos conmutador 1 pro primera vez o despues de soltarlo
  {
    C1Pulsado=true;                                       // comnutador 1 pulsado hasta soltarlo
    if (!LuzEncendida)                                    // si la luz no esta encendida
    {
      LuzEncendida=true;                                  // La luz esta encendida
      digitalWrite(PinLuzConmutador, HIGH);               // luz encendida
    }
    // esto sirve para poder apagar desde el mismo que enciende
    else
    {
      LuzEncendida=false;                                 // La luz esta encendida
      digitalWrite(PinLuzConmutador, LOW);                // luz apagada
    }
  }
  if (!digitalRead(PinConmutador1) && C1Pulsado)          // Hemos pulsado y soltado en conmutador 1
  {
    C1Pulsado=false;                                      // comnutador 1 soltado
  }
 
 if (digitalRead(PinConmutador2) && !C2Pulsado)          // Si pulsamos conmutador 2 por primera vez o despues de soltarlo
  {
    C2Pulsado=true;                                      // comnutador 2 pulsado hasta soltarlo
    if (LuzEncendida)                                    // si la luz esta encendida
    {
      LuzEncendida=false;                                // La luz esta apagada
      digitalWrite(PinLuzConmutador, LOW);               // luz apagada
    }
    // esto sirve para poder encender desde el mismo que apaga
    else
    {
      LuzEncendida=true;                                 // La luz esta encendida
      digitalWrite(PinLuzConmutador, HIGH);              // luz encendida
    }
  }
  if (!digitalRead(PinConmutador2) && C2Pulsado)          // Hemos pulsado y soltado en conmutador 2
  {
    C2Pulsado=false;                                      // comnutador 2 soltado
  }
}

tienes algo parecido a un detector de flancos, no se si habra alguna manera mejor de hacerlo
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Hola, te adjunto el código que te pase antes modificado, quitando el delay y poniendo un detector de flanco de subida del pulsador, que lo he echo con una memoria, no se si sera lo mejor pero funciona muy bien.

espero que te sirva.

Saludos

PD: si te das cuenta la parte del código la he separado en una función para que quede mas ordenado el código.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola. Telerruptor con Grafcet.

//Telerruptor. un pulsador controla un led. pulsas led= on vuelves a pulsar led=off off.
//Lógica positiva.
//se ha montado un circuito rc para evitar el rebote del pulsador
int pulsador=2;
int led=13;
int cnt_etapa=0; //contador de etapas y estado//
void setup(){
  pinMode(pulsador,INPUT);
  pinMode(led,OUTPUT);
  Serial.begin(9600);
}
void loop(){
  if(digitalRead(pulsador)==HIGH&&cnt_etapa==0){
    digitalWrite(led,HIGH);
    cnt_etapa=1;
    }
if(digitalRead(pulsador)==LOW&&cnt_etapa==1){
  cnt_etapa=2;
}
if(digitalRead(pulsador)==HIGH && cnt_etapa==2){
  digitalWrite(led,LOW);
  cnt_etapa=3;
}
if(digitalRead(pulsador)==LOW && cnt_etapa==3){
  cnt_etapa=0;
}
Serial.println(cnt_etapa); //puedes dónde está el programa viendo en qué etapa está
}
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ofuscao. Me vas a perdonar, pero ese sketch tuyo es un intermitente que funciona mientras está el pulsador en on. No es un telerruptor ya que no mantiene el enclavamiento.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola. Telerruptor con Grafcet.

//Telerruptor. un pulsador controla un led. pulsas led= on vuelves a pulsar led=off off.
//Lógica positiva.
//se ha montado un circuito rc para evitar el rebote del pulsador
int pulsador=2;
int led=13;
int cnt_etapa=0; //contador de etapas y estado//
void setup(){
  pinMode(pulsador,INPUT);
  pinMode(led,OUTPUT);
  Serial.begin(9600);
}
void loop(){
  if(digitalRead(pulsador)==HIGH&&cnt_etapa==0){ //detecta pulsador on
    digitalWrite(led,HIGH);
    cnt_etapa=1;
    }
if(digitalRead(pulsador)==LOW&&cnt_etapa==1){ //detecta pulsador off
  cnt_etapa=2;
}
if(digitalRead(pulsador)==HIGH && cnt_etapa==2){  //detecta pulsador on
  digitalWrite(led,LOW);
  cnt_etapa=3;
}
if(digitalRead(pulsador)==LOW && cnt_etapa==3){  //detecta pulsador off
  cnt_etapa=0;
}
Serial.println(cnt_etapa); //puedes dónde está el programa viendo en qué etapa está
}
Logged

Pages: [1]   Go Up
Jump to: