Página principalArduino-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ó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.
// 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("º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/ArduinoEthernetShieldhttp://dam.mellis.org/Saludos.
JUAN GALAZ
Amigo serias tan amable de publicar nuevamente las imagenes del montaje, ya que no las puedo visualizar.. Estoy armando un proyecto similar al tuyo y la verdad me interesa mucho. Saludos
ResponderEliminarHola
ResponderEliminarGracias por seguir mi montaje.
Es raro que no puedas ver el montaje.
Te remito a mi página principal.
http://seta43.duckdns.org/ardunet.html
http://seta43.duckdns.org/arnetx.html
Espero que lo veas bien.
Saludos
Que tal amigo, te comento que ya arme el proyecto, el mio mide la temperatura, ademas maneja tres estados y de a cuerdo al estado, enciende un led, previamente se definen los rangos de temperatura para accionar los led, si gustas te comparto el código. Así también te comento que sigo sin poder visualizar las imágenes, ni los enlaces que mencionas. Saludos
ResponderEliminarHola
ResponderEliminarMe alegro que te funcione.
Estaría encantado de que compartas conmigo el código, y si me permites ponerlo en la página web como aportación tuya.
Un saludo
Juan