Pages: [1]   Go Down
Author Topic: activar dos relés con tarjeta ethernet (SOLUCIONADO)  (Read 5478 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas a todos, he utilizado este código para activar un relé por medio de mi navegador y usando una tarjeta shield ethernet, más mi arduino ONE. Es un ejemplo que circula por muchas webs, pero no consigo activar dos relés. Os dejo primero el que activa un relé y me funciona sin problemas y después el mio.

Scketch de un relé:

#include <SPI.h>
#include <Ethernet.h>

//Declaración de la direcciones MAC e IP. También del puerto 80
byte mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED}; //MAC
IPAddress ip(192,168,1,100); //IP
EthernetServer servidor(80);

int PIN_LED=8;
String readString=String(30);
String state=String(3);

void setup()
{
  Ethernet.begin(mac, ip); //Inicializamos con las direcciones asignadas
  servidor.begin();
  pinMode(PIN_LED,OUTPUT);
  digitalWrite(PIN_LED,HIGH);
  state="OFF";
}

void loop()
{
  EthernetClient cliente= servidor.available();
  
  if(cliente)
  {
    boolean lineaenblanco=true;
    while(cliente.connected())//Cliente conectado
    {
      if(cliente.available())
      {
        char c=cliente.read();
        if(readString.length()<30)//Leemos petición HTTP caracter a caracter
        {
          readString.concat(c); //Almacenar los caracteres en la variable readString
        }
        if(c=='\n' && lineaenblanco)//Si la petición HTTP ha finalizado
        {
          int LED = readString.indexOf("LED=");
          if(readString.substring(LED,LED+5)=="LED=T")
          {
            digitalWrite(PIN_LED,LOW);
            state="ON";
          } else if (readString.substring(LED,LED+5)=="LED=F")
          {
            digitalWrite(PIN_LED,HIGH);
            state="OFF";
          }
          
          
          //Cabecera HTTP estándar
          cliente.println("HTTP/1.1 200 OK");
          cliente.println("Content-Type: text/html");
          cliente.println();        
          //Página Web en HTML
          cliente.println("<html>");
          cliente.println("<head>");
          cliente.println("<title>LAMPARA ON/OFF</title>");
          cliente.println("</head>");
          cliente.println("<body width=100% height=100%>");
          cliente.println("<center>");
          cliente.println("<h1>LAMPARA ON/OFF</h1>");
          cliente.print("<br><br>");
          cliente.print("Estado de la lampara: ");
          cliente.print(state);
          cliente.print("<br><br><br><br>");
          cliente.println("<input type=submit value=ON style=width:200px;height:75px onClick=location.href='./?LED=T\'>");
          cliente.println("<input type=submit value=OFF style=width:200px;height:75px onClick=location.href='./?LED=F\'>");
          cliente.println("</center>");
          cliente.println("</body>");
          cliente.println("</html>");
          cliente.stop();//Cierro conexión con el cliente
          readString="";
        }
      }
    }
  }
}

Scketch para dos relés, no me funciona y no se porqué, ¿alguien me puede ayudar?

#include <SPI.h>
#include <Ethernet.h>

//Declaración de la direcciones MAC e IP. También del puerto 80
byte mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED}; //MAC
IPAddress ip(192,168,1,100); //IP
EthernetServer servidor(80);

int PIN_LED1=8;
String readString1=String(30);
String state1=String(3);
int PIN_LED2=9;
String readString2=String(31);
String state2=String(4);


void setup()
{
  Ethernet.begin(mac, ip); //Inicializamos con las direcciones asignadas
  servidor.begin();
  pinMode(PIN_LED1,OUTPUT);
  digitalWrite(PIN_LED1,HIGH);
  state1="OFF";
  pinMode(PIN_LED2,OUTPUT);
  digitalWrite(PIN_LED2,HIGH);
  state2="OFF";
  
}

void loop()
{
  EthernetClient cliente= servidor.available();
  
  if(cliente)
  {
    boolean lineaenblanco=true;
    while(cliente.connected())//Cliente conectado
    {
      if(cliente.available())
      {
        char c=cliente.read();
        if(readString1.length()<30)//Leemos petición HTTP caracter a caracter
        {
          readString1.concat(c); //Almacenar los caracteres en la variable readString
        }
        if(c=='\n' && lineaenblanco)//Si la petición HTTP ha finalizado
        {
          int LED1 = readString1.indexOf("LED1=");
          if(readString1.substring(LED1,LED1+5)=="LED1=T")
          {
            digitalWrite(PIN_LED1,LOW);
            state1="ON";
          } else if (readString1.substring(LED1,LED1+5)=="LED1=F")
          {
            digitalWrite(PIN_LED1,HIGH);
            state1="OFF";
          }
        if(readString2.length()<30)//Leemos petición HTTP caracter a caracter
        {
          readString2.concat(c); //Almacenar los caracteres en la variable readString
        }
        if(c=='\n' && lineaenblanco)//Si la petición HTTP ha finalizado
        {
          int LED = readString2.indexOf("LED=");
          if(readString2.substring(LED,LED+5)=="LED=T")
          {
            digitalWrite(PIN_LED2,LOW);
            state2="ON";
          } else if (readString2.substring(LED,LED+5)=="LED=F")
          {
            digitalWrite(PIN_LED2,HIGH);
            state2="OFF";
          }  
          
          //Cabecera HTTP estándar
          cliente.println("HTTP/1.1 200 OK");
          cliente.println("Content-Type: text/html");
          cliente.println();        
          //Página Web en HTML
          cliente.println("<html>");
          cliente.println("<head>");
          cliente.println("<title>LAMPARA ON/OFF</title>");
          cliente.println("</head>");
          cliente.println("<body width=100% height=100%>");
          cliente.println("<center>");
          cliente.println("<h1>LAMPARA ON/OFF</h1>");
          cliente.print("<br><br>");
          cliente.print("Estado de la lampara: ");
          cliente.print(state1);
          cliente.print("<br><br><br><br>");
          cliente.println("<input type=submit value=ON style=width:200px;height:75px onClick=location.href='./?LED1=T\'>");
          cliente.println("<input type=submit value=OFF style=width:200px;height:75px onClick=location.href='./?LED1=F\'>");
          cliente.print("<br><br>");
          cliente.print("Estado de la lampara: ");
          cliente.print(state2);
          cliente.print("<br><br><br><br>");
          cliente.println("<input type=submit value=ON style=width:200px;height:75px onClick=location.href='./?LED=T\'>");
          cliente.println("<input type=submit value=OFF style=width:200px;height:75px onClick=location.href='./?LED=F\'>");
          cliente.print("<br><br>");
          cliente.println("</center>");
          cliente.println("</body>");
          cliente.println("</html>");
          cliente.stop();//Cierro conexión con el cliente
          readString1="";
          readString2="";
        }
      }
    }
   }
  }
}
« Last Edit: July 24, 2013, 12:40:10 am by blown » Logged

Murcia
Offline Offline
Full Member
***
Karma: 2
Posts: 109
Aprendiz de novato
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola Blown!!

Igual que tu hace poco estuve probando el código para encender 1 relé a traves de Internet.

Como no había probado con 2 relés he aprovechado tu post para probarlo y he encontrado el siguiente error en tu código:



          if(readString1.substring(LED1,LED1+5)=="LED1=T")
 

sería LED1+6 ya que 6 son los caracteres de la cadena LED1=T

Con esto ya te funcionaría el primer relé.

He estado "trasteando" el código para activar el segundo pero he tenido que realizar algunas modificaciones para simplificarlo un poco hasta que ha funcionado.

Resumiendo un poco:

 - utilizar solo una variable que recoja 1 sola vez el valor pulsado en la web (readString1)
 - asignar a LED1 y LED2 su valor de texto correspondiente
 - y a partir de ahí comparar a base de "if´s" el contenido de las mismas y ejecutar sobre el relé correspondiente el encendido o apagado según proceda.

Aquí te dejo el código para que le eches un vistazo:

Code:
#include <SPI.h>
#include <Ethernet.h>

//Declaración de la direcciones MAC e IP. También del puerto 80
byte mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED}; //MAC
IPAddress ip(192,168,1,100); //IP
EthernetServer servidor(80);

int PIN_LED1=8;
String readString1=String(30);
String state1=String(3);
int PIN_LED2=9;
String state2=String(3);


void setup()
{
  Ethernet.begin(mac, ip); //Inicializamos con las direcciones asignadas
  servidor.begin();
  pinMode(PIN_LED1,OUTPUT);
  digitalWrite(PIN_LED1,HIGH);
  state1="OFF";
  pinMode(PIN_LED2,OUTPUT);
  digitalWrite(PIN_LED2,HIGH);
  state2="OFF";
 
}

void loop()
{
  EthernetClient cliente= servidor.available();
 
  if(cliente)
  {
    boolean lineaenblanco=true;
    while(cliente.connected())//Cliente conectado
    {
      if(cliente.available())
      {
        char c=cliente.read();
        if(readString1.length()<30)//Leemos petición HTTP caracter a caracter
        {
          readString1.concat(c); //Almacenar los caracteres en la variable readString
       
        }
        if(c=='\n' && lineaenblanco)//Si la petición HTTP ha finalizado
        {
          int LED1 = readString1.indexOf("LED1=");
          int LED2 = readString1.indexOf("LED=");
          if(readString1.substring(LED1,LED1+6)=="LED1=T")
          {
            digitalWrite(PIN_LED1,LOW);
            state1="ON";
          } else if (readString1.substring(LED1,LED1+6)=="LED1=F")
          {
            digitalWrite(PIN_LED1,HIGH);
            state1="OFF";
          }
          if(readString1.substring(LED2,LED2+5)=="LED=T")
          {
            digitalWrite(PIN_LED2,LOW);
            state2="ON";
          } else if (readString1.substring(LED2,LED2+5)=="LED=F")
          {
            digitalWrite(PIN_LED2,HIGH);
            state2="OFF";
          } 
         
          //Cabecera HTTP estándar
          cliente.println("HTTP/1.1 200 OK");
          cliente.println("Content-Type: text/html");
          cliente.println();       
          //Página Web en HTML
          cliente.println("<html>");
          cliente.println("<head>");
          cliente.println("<title>LAMPARA ON/OFF</title>");
          cliente.println("</head>");
          cliente.println("<body width=100% height=100%>");
          cliente.println("<center>");
          cliente.println("<h1>LAMPARA ON/OFF</h1>");
          cliente.print("<br><br>");
          cliente.print("Estado de la lampara: ");
          cliente.print(state1);
          cliente.print("<br><br><br><br>");
          cliente.println("<input type=submit value=ON style=width:200px;height:75px onClick=location.href='./?LED1=T\'>");
          cliente.println("<input type=submit value=OFF style=width:200px;height:75px onClick=location.href='./?LED1=F\'>");
          cliente.print("<br><br>");
          cliente.print("Estado de la lampara: ");
          cliente.print(state2);
          cliente.print("<br><br><br><br>");
          cliente.println("<input type=submit value=ON style=width:200px;height:75px onClick=location.href='./?LED=T\'>");
          cliente.println("<input type=submit value=OFF style=width:200px;height:75px onClick=location.href='./?LED=F\'>");
          cliente.print("<br><br>");
          cliente.println("</center>");
          cliente.println("</body>");
          cliente.println("</html>");
          cliente.stop();//Cierro conexión con el cliente
          readString1="";
        }
      }
    }
   }
  }

No afectaba al funcionamiento pero el tamaño de la string Estate2 es 3 no 4.

Un saludo!!!

Logged

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

Jukar, muchísimas gracias por la respuesta tan rápida que me has dado. Voy a echarle un vistazo a tu código y si me entra alguna duda te pregunto. He estado trasteando por internet y me he encontrado con una web, en mi opinión, buenísima para entender el funcionamiento de la ethernet shield. http://startingelectronics.com/tutorials/arduino/ethernet-shield-web-server-tutorial/

Un saludo y si no entiendo algo te preguntare en breve, soy nuevisimo en arduino pero tengo muchas ganas de progresar jejeje.
Logged

Murcia
Offline Offline
Full Member
***
Karma: 2
Posts: 109
Aprendiz de novato
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

...he encontrado con una web, en mi opinión, buenísima para entender el funcionamiento de la ethernet shield. http://startingelectronics.com/tutorials/arduino/ethernet-shield-web-server-tutorial/

Un saludo y si no entiendo algo te preguntare en breve, soy nuevisimo en arduino pero tengo muchas ganas de progresar jejeje.

Tiene muy buena pinta esa web, gracias!

Yo también soy nuevo en esto pero en lo que pueda ayudarte no dudes que lo haré smiley-wink

Un saludo!!!
Logged

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

Jukar, cuando puedas explícame lo de "string" por que no entiendo muy bien qué es lo que quieres decir.
El sketch que pones funciona perfectamente.

Un arduino ¿ puede activar dos relés (o uno) usando una página web pero por medio de wify, no usando el cable de datos conectado al router como hacía con la ethernet shield?, en resumen, ¿puedo hacer lo mismo que con la ethernet shield pero con un módulo RNXV?. Voy a probar con un módulo RN-XV mientras alguien me pueda contestar.

Muchísimas gracias.
Logged

Murcia
Offline Offline
Full Member
***
Karma: 2
Posts: 109
Aprendiz de novato
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Jukar, cuando puedas explícame lo de "string" por que no entiendo muy bien qué es lo que quieres decir.

No tiene importancia, solo es que pusiste en tu código:

String state2=String(4);

igual que

"String readString2=String(31);

cuando los valores son 3 y 30 respectivamente smiley-wink

Respecto a lo que preguntas entiendo que si.

Aquí tienes un buen tutorial http://www.arduteka.com/2013/04/comunicar-con-arduino-por-wifi-xbee-shield-wifly-rn-xv/

Un saludo!!!

Logged

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

Gracias Jukar, estoy con ese tutorial, todo lo hago igual pero al final dice "associated" y no pasa de el DHCP:start, se queda ahí....
Logged

Murcia
Offline Offline
Full Member
***
Karma: 2
Posts: 109
Aprendiz de novato
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Lo siento pero ahí si que no puedo ayudarte porque no tengo ningún módulo wifi para probarlo...

Dale unas vueltas más y si no lo consigues abre un nuevo hilo.

(Ah, y en este si quieres modifica el título agregandole  "SOLUCIONADO"

Un saludo!!!!
Logged

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

Hola que tal
Soy bastante nuevo en arduino y pues yo no he logrado encender la lámpara pienso que el problema está en mi pag. web.
No se como hacer que se comuniquen tanto la placa arduino como la pagina de internet ya que al precionar el botón de encender no envía información
Estuve leyendo algo sobre el puerto 80 que hay que abrirlo o algo parecido,  no se si me puedan ayudar se los agradeceré.
smiley buen día. saludos
Logged

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

Buenos días.
Lo primero dar las gracias por vuestros aportes.
Estoy interesado en este tema de saber el estado de las salidas por Internet para control remoto pero me encuentro con un problema gordo cuando dos ordenadores se conectan a arduino y ambos ejecutan los botones de encender y apagar...os cuento.
En el que ejecuta la orden se refresca bien pero en el segundo sigue saliendo con le mismo estado en el que se quedo y claro esa información no es real por eso le metí un refresco a la pagina pero entonces solo me refresca uno de los dos botones....en el que no estoy actuando en el otro si.
Metí este código para el refresco:

 //Página Web en HTML
         
          cliente.print("<meta http-equiv=\"refresh\" content=\"5\">");
         
               
          cliente.println("<html>");

Bueno si me podéis ayudar os estaría muy agradecido.
Un saludo y muchas gracias por todo.
Logged

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

Jukar, muchísimas gracias por la respuesta tan rápida que me has dado. Voy a echarle un vistazo a tu código y si me entra alguna duda te pregunto. He estado trasteando por internet y me he encontrado con una web, en mi opinión, buenísima para entender el funcionamiento de la ethernet shield. http://startingelectronics.com/tutorials/arduino/ethernet-shield-web-server-tutorial/

Un saludo y si no entiendo algo te preguntare en breve, soy nuevisimo en arduino pero tengo muchas ganas de progresar jejeje.

Increible tutorial de ethernet shield
Logged

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

gracias por el aporte...  funciona de maravilla
una Pregunta-  se puede mantener activado el Relé por cierto tiempo 3 minutos por ejemplo..
gracias por su respueta
Logged

Valencia - Spain
Offline Offline
Full Member
***
Karma: 12
Posts: 171
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola! Yo tambien empece con un proyecto parecido hace tiempo y finalmente me topé con una libreria que es capaz de hacer eso y muchisimo mas! con App de Android para controlarlo todo y tambien con entorno WEB. Por si a alguno le interesa el link esta en mi firma smiley-razz

Salu2 y buen trabajo!
Logged

Souliss - Distributed Home Automation and Internet of Things

www.mysouliss.eu

http://forum.arduino.cc/index.php?topic=223723.0

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

Hola soy nuevo en esto del arduino, yo soy de hardware y me cuesta mucho esto.
en mi caso estaba pensando en hacer esto con mas reles, pero no me aclaro con que es lo que hay que modificar, ademas de poder tener un feedback de los reles via lectura de pines digitales asi como valores de entradas analogicas.
¿me podriais hechar un cable?
Gracias
Logged

Pages: [1]   Go Up
Jump to: