Página principal

Arduino-red-webserver
6 entradas analógicas y 7 entradas digitales.
Medidor de temperatura a través de la red.
xsetaseta@gmail.com

Este es mi primer contacto con la placa de red y lector de SD para arduino.
La tarjeta Arduino Ethernet Shield se puede encontrar en el mercado entre 9€ y 25€ depende del suministrador.
Para mas detalles visitar la página oficial http://www.arduino.cc/en/Main/ArduinoEthernetShield.

La comunicación con el chip W5100 y con la tarjeta SD se hace a través del bus SPI.
La activación del chip de red se efectúa con el pin 10 del arduino, y la activación tarjeta SD se realiza con el pin 4.
El primer montaje es una ampliación del programa que viene de ejemplo en el arduino, WebServer.
He añadido las 7 entradas digitales, además de poner color a las fuentes.

Imagen del valor de las entradas en un navegador.

// SETA43
// Modificacion 9-12-2012
/*
  Web Server
 
 A simple web server that shows the value of the analog input pins.
 using an Arduino Wiznet Ethernet shield. 
 
 created 18 Dec 2009
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe
 
 */

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

//numero de MAC
//numero de ip, depende de tu red

byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,2, 177);

// Initialize the Ethernet server library
// with the IP address and port you want to use 
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup() {
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}


void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");

    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        
        if (c == '\n' && currentLineIsBlank) {
          // Manda la cabecera del http
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connnection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // Refresca cada 5 segundos
          client.println("<meta http-equiv=\"refresh\" content=\"5\">");
          client.println("<big><b>Seta43_Arduino</b></big><br>");
           client.print("xsetaseta@gmail.com ");
          client.println("<hr>");

          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);                      
            client.print("Analog input ");            
            client.print("<font color=red>"); 
            client.print(analogChannel);
            client.print("</font>");            
            client.print(" is ");            
            client.print("<font color=blue>");   
            client.print(sensorReading);
            client.print("</font>");            
            client.println("<br />");       
          }
          
           client.println("<hr>");
          
          for (int digitalChannel = 2; digitalChannel < 10; digitalChannel++) {
            if(digitalChannel!=4)
            {
            int sensorReading = digitalRead(digitalChannel);                       
            client.print("Digital input ");           
            client.print("<font color=red>"); 
            client.print(digitalChannel);
            client.print("</font>");            
            client.print(" is ");           
            client.print("<font color=blue>");   
            client.print(sensorReading);
            client.print("</font>");            
            client.println("<br />");
            }
          }
          
           client.println("<hr>");
           client.print("Ping 11,12,13 para la comunicaci&oacute;n"); 
           client.println("<br />");
           client.print("Ping 10 selecciona Red W5100");
           client.println("<br />");
           client.print("Ping 4 selecciona SD");

           
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disonnected");
  }
}
Programa del arduino. WebServer con 6 entradas analógicas y 7 entradas digitales.


La primera aplicación que me vino a la mente que no fuera complicada, fue un medidor de temperatura mediante el LM35.
 El integrado de 3 patillas LM35 es un detector de temperatura que varia 10mV cada ºC y su rango de medidas va de -55ºC a +150ºC.
El programa realizado lee el voltaje de salida del LM35 en la patilla A0 del arduino para luego transformarlo en grados centígrados.
No he querido complicar el montaje para medir grados negativos, el que quiera medir grados negativos le recomiendo ver un antiguo montaje ter876.htm donde se explica como hacerlo, es muy fácil.
Recordar que la alimentación del arduino puede ser del USB o del alimentador, y puede variar entre 5V y 5.6V, lo que hace variar la referencia del convertidor A/D , del mismo modo la medida de la temperatura. Esta variación la calculo en 1ºC arriba o abajo.


Montaje del circuito medidor de temperatura.



Visión de la temperatura en el navegador.

// SETA43
// Modificacion 9-12-2012
//Medidor de temperatura

/*
  Web Server
 created 18 Dec 2009
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe
 */

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

//numero de MAC
//numero de ip, depende de tu red

byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,2, 177);

float temperatura;

// Inicializa la libreria  Ethernet 
// Selecciona el puerto 80, por defecto HTTP):
EthernetServer server(80);

void setup() {
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}


void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");

    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        
        if (c == '\n' && currentLineIsBlank) {
          // Manda la cabecera del http
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connnection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // Refresca cada 5 segundos
          client.println("<meta http-equiv=\"refresh\" content=\"5\">");
          client.println("<big><b>Seta43_Arduino</b></big><br>");
           client.print("xsetaseta@gmail.com ");
          client.println("<hr>");

            temperatura = analogRead(0);  
            temperatura=(500*temperatura)/1024;           
            client.print("Temperatura "); 
             client.println("<h1><font color=red>");           
            client.print(temperatura);
            client.println("&ordm;C</font></h1>");
           
           client.println("<hr>");              
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disonnected");
  }
}
Programa del arduino. WebServer medidor de temperatura.


Bibliografía:
http://www.arduino.cc/en/Main/ArduinoEthernetShield
http://dam.mellis.org/


Saludos.
JUAN GALAZ