Autor Tema: activar un Rele con un modulo Bluetooth HC-05  (Leído 6659 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4917
activar un Rele con un modulo Bluetooth HC-05
« en: 13 de Julio de 2018, 16:00:49 »
Hola chicos,

me estoy creando un Sketch con Arduino Duemilanove y al compilarlo me tira un error y no encuentro como resolverlo,
mi projecto consiste activar y desactivar un Rele con un solo comando y usare´ APP Mit inventor 2 pero ante lo probare´con una
aplicacion Monitor Serial y asi ver cuando recibos los comando y su funcion, de momento estoy probando con un Rele y necesito 5 Reles y una salida PWM para mover en solo sentido un motor, Alguien me podria echarle un vistaso a mi Sketch y descubir mis errores?

Código: [Seleccionar]
int RELE_ON 0 //  o es mejor #define RELAY_ON 0
 
int RELE_OFF 1 //
 
int RELE_1 4
 
char data = 0;
 
void setup(){
 
// ponemos el pin 4 como salida.
 
pinMode(RELE_1, OUTPUT);
 
digitalWrite(RELE_1, RELE_OFF); //Rele incia en OFF
 
Serial.begin(9600);
 
Serial.print(“Tipe:1 para activar rele ON. 0 para apagarlo OFF!”);}
 
void loop() {
 
if(Serial.available()>0) {
 
data = Serial.read();//leemos data recibida y la guardamos en la variable data
 
Serial.print(data);// veremos el valor de la dara en terminal serial
 
Serial.print(“\n”); //Nueva linea
 
if(data == ‘1’){
 
digitalWrite(RELE_1, RELE_ON);
 
Serial.println(“RELE es ahora ON.”);
 
}
 
else
 
if(data ==‘0’){
 
digitalWrite(RELE_1, RELE_OFF);

Serial.println(“RELE es ahora OFF.”); }
//}
//}
//}
 

Un saludo.

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:activar un Rele con un modulo Bluetooth HC-05
« Respuesta #1 en: 13 de Julio de 2018, 17:46:44 »
me estoy creando un Sketch con Arduino Duemilanove y al compilarlo me tira un error

Tienes errores básicos.

1.- Si usas constantes asígnalas con #define, y si son variables, dales valor con = y termina las lineas con ;

Has hecho una mezcla de constante y variable.
int RELE_OFF 1
int RELE_OFF 1
int RELE_1 4

Decídete entre constante #define RELE_OFF 1  o variable  int rele_off =1;
En tu código fuente, deberías definirlas como constantes con #define, puesto que no se van a modificar en el programa, así van a la flash en vez de a la Ram. Si es una variable, conviene ponerla en minúsculas, todo en mayúsculas debería de reservarse para constantes.


2.- Errores de comillas dobles y simples, parece lo mismo, pero no lo es:

Serial.print(Tipe:1 para activar rele ON. 0 para apagarlo OFF!); // MAL
Serial.print("Tipe:1 para activar rele ON. 0 para apagarlo OFF!"); // Bien

if(data == 1) // MAL
if(data == '1') // Bien


3.- Tenías un corchete de más al final.



Código corregido.

Código: C
  1. #define RELE_ON 0
  2. #define RELE_OFF 1
  3. #define RELE_1 4
  4. char data = 0;
  5.  
  6.  
  7. void setup()
  8. {
  9.   pinMode(RELE_1, OUTPUT); // ponemos el pin 4 como salida
  10.   digitalWrite(RELE_1, RELE_OFF); //Rele incia en OFF
  11.   Serial.begin(9600);
  12.   Serial.print("Tipe:1 para activar rele ON. 0 para apagarlo OFF!");
  13. }
  14.  
  15.  
  16. void loop()
  17. {
  18.    if(Serial.available()>0)
  19.     {
  20.         data = Serial.read();//leemos data recibida y la guardamos en la variable data
  21.         Serial.print(data);// veremos el valor de la dara en terminal serial
  22.         Serial.print("\n"); //Nueva linea
  23.         if(data == '1')
  24.           {
  25.             digitalWrite(RELE_1, RELE_ON);
  26.             Serial.println("RELE es ahora ON.");
  27.           } else
  28.           if(data =='0')
  29.             {
  30.               digitalWrite(RELE_1, RELE_OFF);
  31.               Serial.println("RELE es ahora OFF.");
  32.             }
  33.     }
  34. }
« Última modificación: 13 de Julio de 2018, 19:17:26 por planeta9999 »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:activar un Rele con un modulo Bluetooth HC-05
« Respuesta #2 en: 13 de Julio de 2018, 23:42:21 »
En C++ no debería usarse mas el #define, es otra de las cosas que hacen a C++ un lenguaje distinto de C, ademas de las que se supieron postear por ahí sobre que C++ es o no un C con mas cosas.

Debería usarse el const, y luego el mismo compilador va a determinar si pasa a un valor fijo. #define hell, al menos es lo. Que se recomienda, ya que se corrobora el tipo de variable y el namespace

Pero si, se puede usar como en C.

Y bueno luego están las macros..
« Última modificación: 14 de Julio de 2018, 00:04:59 por KILLERJC »

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4917
Re:activar un Rele con un modulo Bluetooth HC-05
« Respuesta #3 en: 14 de Julio de 2018, 01:57:23 »
Hola chicos!!
Gracias por vuestras Sugerencias, Planeta, aqui subo una foto del error que me tira



siendo asi voy a probar la correccion que hizo Planeta y luego comento..

Un saludos

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4917
Re:activar un Rele con un modulo Bluetooth HC-05
« Respuesta #4 en: 14 de Julio de 2018, 04:52:21 »
he compilado el Sketch de Planeta y no me sale ningun error ahora, pero lo he comparado con mi Sketch (que me da el mismo error que puse arriba)  y no encuentro donde esta´mis errores..  o se me esta pasando algo que yo no veo?

Aqui pongo mi Sketch
Código: [Seleccionar]

 
  #define rele_1 0
 
  #define rele_off 1
 
  #define rele_1 4
 
   char data = 0;
 
void setup()
{
 
        pinMode(rele_1, OUTPUT);// ponemos el pin 4 como salida.
        digitalWrite(rele_1, rele_OFF); //Rele incia en OFF
        Serial.begin(9600);
        Serial.print(“Tipe:1 para activar rele ON. 0 para apagarlo OFF!”);
        }


 
void loop()
{
 
          if(Serial.available()>0)
        {
 
         data = Serial.read();//leemos data recibida y la guardamos en la variable data
         Serial.print(data);// veremos el valor de la dara en terminal serial
         Serial.print(“\n”); //Nueva linea
         if(data == ‘1’)
       {
        digitalWrite(rele_1, rele_on);
        Serial.println(“rele_1 es ahora on.”);
 
       }
 
          else
 
         if(data ==‘0’)
        {
 
          digitalWrite(rele_1,rele_off);
          Serial.println(“rele_1 es ahora off.”);

}
}
}
me pueden echar un cable?

Saludos

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4917
Re:activar un Rele con un modulo Bluetooth HC-05
« Respuesta #5 en: 14 de Julio de 2018, 06:35:26 »
He probado el Sketch de Planeta y funciona, pero esta algo mal interpretado  y lo he corregido.

aqui pongo el Sketch ya corregido
Código: [Seleccionar]
    #define RELE_ON 1  // correccion
    #define RELE_OFF 0 // correccion
    #define RELE_1 4
    char data = 0;
     
     
    void setup()
    {
      pinMode(RELE_1, OUTPUT); // ponemos el pin 4 como salida
      digitalWrite(RELE_1, RELE_OFF); //Rele incia en OFF
      Serial.begin(9600);
      //Serial.print("Tipe:1 para activar rele ON. 0 para apagarlo OFF!");
    }
     
     
    void loop()
    {
       if(Serial.available()>0)
        {
            data = Serial.read();//leemos data recibida y la guardamos en la variable data
            Serial.print(data);// veremos el valor de la dara en terminal serial
           
            //Serial.print("\n"); //Nueva linea
            if(data == '1')
              {
                digitalWrite(RELE_1, RELE_ON);
                //Serial.println("RELE es ahora ON.");
              } else
              if(data =='0')
                {
                  digitalWrite(RELE_1, RELE_OFF);
                  //Serial.println("RELE es ahora OFF.");
                }
        }
    }

lo he probado con un Bluetooth Terminal Serial version 6.1104 bajada de GooglePlayStore, ojo que hay otras versiones con el mismo nombre que he probado pero la que uso es muchos mujer porque usa un SETUP..


el Sketch no me convence muchos, porque me gustara que fuera usando Toggle, osea con un solo Boton hacer ON/OFF , quizas alguien me das mejor ideas..

Saludos

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:activar un Rele con un modulo Bluetooth HC-05
« Respuesta #6 en: 14 de Julio de 2018, 08:45:15 »
el Sketch no me convence muchos, porque me gustara que fuera usando Toggle, osea con un solo Boton hacer ON/OFF , quizas alguien me das mejor ideas..


Para alternar con un solo botón, prueba este código.


Código: C++
  1. //****************************************************
  2. //****************************************************
  3. //******** Test control relé por puerto serie ********
  4. //****************************************************
  5. //****************************************************
  6.  
  7. #define RELE_ON 1
  8. #define RELE_OFF 0
  9. #define RELE_1 4
  10. byte rele = 0;
  11.  
  12. //****************************************************
  13. //******** Configuración *****************************
  14. //****************************************************
  15.  
  16. void setup()
  17. {
  18.   pinMode(RELE_1, OUTPUT); // ponemos el pin 4 como salida
  19.   digitalWrite(RELE_1, RELE_OFF); //Rele incia en OFF
  20.   Serial.begin(9600);
  21.   Serial.println("1 = Alterna activación/desactivación rele.");
  22. }
  23.  
  24. //****************************************************
  25. //******** Programa principal ************************
  26. //****************************************************
  27.  
  28. void loop()
  29. {
  30.    if(Serial.available() > 0 && Serial.read() == '1')
  31.     {
  32.         if(rele == 0)
  33.           {
  34.               digitalWrite(RELE_1, RELE_ON);
  35.               Serial.println("RELE es ahora ON.");
  36.               rele=1;
  37.           }
  38.           else
  39.           {
  40.               digitalWrite(RELE_1, RELE_OFF);
  41.               Serial.println("RELE es ahora OFF.");
  42.               rele=0;
  43.           }
  44.     }
  45. }
  46. //****************************************************
  47. //****************************************************
  48. //****************************************************


En el fuente, creo que si reemplazas esto:

  if(Serial.available() > 0 && Serial.read() == '1')

por esto:

  if(Serial.available() && Serial.read() == '1')

simplificas el código y funcionará igual. Puedes definir la variable rele como bool, pero eso no cambia su tamaño, que seguirá siendo de un byte.

Es posible que necesites implementar una rutina anti rebote, si tu aplicación envía el 1 sin parar mientras mantengas pulsado el botón, de lo contrario el relé puede abrir y cerrar muy rápido, si no dejas de pulsar con rapidez.
« Última modificación: 14 de Julio de 2018, 10:07:33 por planeta9999 »

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:activar un Rele con un modulo Bluetooth HC-05
« Respuesta #7 en: 14 de Julio de 2018, 10:13:09 »
he compilado el Sketch de Planeta y no me sale ningun error ahora, pero lo he comparado con mi Sketch (que me da el mismo error que puse arriba)  y no encuentro donde esta´mis errores..  o se me esta pasando algo que yo no veo?

me pueden echar un cable?

Saludos


Lo que te he comentado al principio, las comillas dobles y simples están mal.


2.- Errores de comillas dobles y simples, parece lo mismo, pero no lo es:

Serial.print(Tipe:1 para activar rele ON. 0 para apagarlo OFF!); // MAL
Serial.print("Tipe:1 para activar rele ON. 0 para apagarlo OFF!"); // Bien

if(data == 1) // MAL
if(data == '1') // Bien



Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:activar un Rele con un modulo Bluetooth HC-05
« Respuesta #8 en: 14 de Julio de 2018, 10:37:20 »
 
Lo que es raro, es de donde has sacado esas comillas. Poniéndolas en un convertidor texto a ASCII, me da una combinación de 3 códigos ASCII para cada comilla, cuando lo normal sería uno, es un expediente X.

El ASCII para las comillas dobles normales es el 34, y para las comillas simples es el 39.
En tus comillas esas raras, da 3 códigos ASCII para cada una, y además son distintos para la apertura y para el cierre de comillas. Debe de ser algo relacionado con el idioma del teclado.

“   ---> 226 128 156
”   ---> 226 128 157 

‘  ----> 226 128 152 
’  ----> 226 128 153 

"  ----> 034
'  ----> 039




« Última modificación: 14 de Julio de 2018, 10:48:12 por planeta9999 »

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4917
Re:activar un Rele con un modulo Bluetooth HC-05
« Respuesta #9 en: 14 de Julio de 2018, 13:30:46 »
Planeta, acabo de probar tu Sketch y funciona de maravilla  ((:-)) ((:-)) muchas gracias , lo de las comillas es raro, porque he hecho copia y pasta una linea de arriba donde no me da error y la puse donde me da error, siendo asi me sale error, yo me hice todos el Sketch a mano  :oops: :oops:

luego lo miro,
ahora me toca ponerle mas cosas a tu Sketch, 4 Reles mas y dos pulsaciones Up/dowm para PWM,

este projecto lo estoy haciendo para una Locomotora con dos motores que lleva un control Analogo y un mando con cable...

Cuando lo tenga todos montado subo Video y pongo el Sketch con tu colaboracion...

Un saludos

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:activar un Rele con un modulo Bluetooth HC-05
« Respuesta #10 en: 14 de Julio de 2018, 17:24:41 »

este projecto lo estoy haciendo para una Locomotora con dos motores que lleva un control Analogo y un mando con cable...


¿ Que clase de locomotora ?, si es para un tren eléctrico a escala, desde hace mucho tiempo se usan sistemas digitales, como el DCC.

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4917
Re:activar un Rele con un modulo Bluetooth HC-05
« Respuesta #11 en: 15 de Julio de 2018, 02:56:53 »
Hola planeta!
La locomotora es muy simple y lleva dos motor de 24 voltio de casi 500 Vatio cada uno, mas informacion no tengo por ahora porque no la tengo aqui ahora mismo en casa, la compre´por Ebay  , pero es muy simple hecha a mano por un herrero aqui te subo la Documentacion del control que lleva un Atmega y solo tengo la documentacion y nada mas.
https://cdn.website-editor.net/6e895aac25b444a2a197a364ec75a628/files/uploaded/Anhang%204Q_fag.pdf

claro que hay digitales y muy genial pero no son nada barata para comprarla, al menos yo nunca me compraria nada hecho pudiendola hacer yo mismo, la Locomotora puede arrastrar casi 120 kilo, cuando lo tenga todos montado subo videos, de seguro.

Saludos

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:activar un Rele con un modulo Bluetooth HC-05
« Respuesta #12 en: 15 de Julio de 2018, 07:59:54 »
 
Juer, que monstruo máquina, debe de ser de esas que arrastran vagones cargados de personas. Yo lo más grande que tengo es un par de locomotoras Marklin escala 1. Ya nos colgarás fotos y algún video, eso es de digno de verse.





« Última modificación: 15 de Julio de 2018, 08:03:18 por planeta9999 »

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4917
Re:activar un Rele con un modulo Bluetooth HC-05
« Respuesta #13 en: 15 de Julio de 2018, 12:07:15 »
la mia no es tan grande es casi 1 metro, el Wagon debo hacer arreglo ..

Video y fotos claro que subire´ ya que para mi es una Sensacion.


Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4917
Re:activar un Rele con un modulo Bluetooth HC-05
« Respuesta #14 en: 16 de Julio de 2018, 08:26:17 »
Estoy agregandole mas Reles al programa y me encuentro estancado,
aqui pongo el Sketch a ver si alguien me puede corregir...

Código: [Seleccionar]
    //****************************************************
    //****************************************************
    //******** Test control relé por puerto serie ********
    //****************************************************
    //****************************************************
     
    #define RELE_ON 1
    #define RELE_OFF 0
    #define RELE_1 4
    #define RELE_2 5
    #define RELE_3 6
    #define RELE_4 7
    #define RELE_5 8
    byte rele = 0;
   
     
    //****************************************************
    //******** Configuración *****************************
    //****************************************************
     
    void setup()

      // RELE_1
    {
      pinMode(RELE_1, OUTPUT); // ponemos el pin 4 como salida
      digitalWrite(RELE_1, RELE_OFF); //Rele incia en OFF
      Serial.begin(9600);
      Serial.println("1 = Alterna activación/desactivación rele.");
   
     // Rele_2
   
      pinMode (RELE_2, OUTPUT);
      digitalWrite(RELE_2,RELE_OFF);
      Serial.println("2 = Alterna activacion/dasactivacion rele.");
     
     // RELE_3

      pinMode(RELE_3,OUTPUT);
      digitalWrite(RELE_3,RELE_OFF);
      Serial.println("3 = Alterna activacion/desactivacion rele.");
     
      // RELE_4

      pinMode(RELE_4,OUTPUT);
      digitalWrite(RELE_4,RELE_OFF);
      Serial.println("4 = Alterna activacion/desactivacion rele.");

      //RELE_5

      pinMode(RELE_5,OUTPUT);
      digitalWrite(RELE_5,RELE_OFF);
      Serial.println("5 = Alterna activacion/desactivacion rele.");
       
     
    }
     
    //****************************************************
    //******** Programa principal ************************
    //****************************************************
     
    void loop()
    {
       if(Serial.available() > 0 && Serial.read() == '1')
        {
            if(rele == 0)
              {
                  digitalWrite(RELE_1, RELE_ON);
                  Serial.println("RELE_1 es ahora ON.");
                  rele=1;
              }

             
              else
             
             
              {
                  digitalWrite(RELE_1, RELE_OFF);
                  Serial.println("RELE_1 es ahora OFF.");
                  rele=0;

              //}


               //}

             if(rele == 0)
                {
                digitalWrite(RELE_2,RELE_ON);     // pin 5
                Serial.println("Rele_2 es ahora ON.");
                rele=1;

            }
            else

           {
            digitalWrite(RELE_2,RELE_OFF);
                 Serial.println("Rele_2 es ahora OFF.");
                 rele=0;
             }
        }   
        }
    }

cuando le envio un 1 el RELE_1 se me activa, le envio otra vez un 1 el RELE_1 se me desactiva y me activa el RELE_2  por la cual yo lo que quiero es que a cada numero ( 1 - 2 - 3 -4 - 5 ) que yo le envie se me active y desactive con su correspondiente numero,  me estoy haciendo un lio con los Corchetes  y se me pasa algo que no lo veo..
alguien me le puede echar un vistazo al Sketch?

Saludos