Omet navegació

10.- Servidor web

1.- Maquinari

Si volem enviar les dades del projecte a un servidor web o controlar els automatismes de forma remota ens cal la targeta Ethernet per Arduino.

Targeta Ethernet

Aquesta targeta es connecta  a la Arduino UNO i permet posar-hi tots els sensors que volien posar a la UNO sobre la Ethernet doncs hi ha correspondència entre cada port de les dues targetes.

2. Esquema elèctric de l'exemple.

Anem a veure com enviar les dades del sensor de Temperatura NTC que hem fet a la secció 4.2  via web a qualsevol client que es connecte.

El esquema elèctric ja l'hem vist a la secció esmentada i és aquest, que connectarem a la targeta Ethernet acoblada a la UNO.

Ethernet sensor remot NTC

3. Programa exemple

Ara posem el cable d'Internet a la targeta Ethernet i carreguem el programa webserver de la llista d'exemples d'Arduino i el modifiquem per adaptar-lo al sensor de Temperatura nostre.

Codi font del programa:  WebServer_Termometre.zip

			// Sensor de temperatura remot des d'un servidor web
			// creat (18 Dec 2009): David A. Mellis
			//  modificat (4 Sep 2010) : Tom Igoe 
			//  modificat (7 dec 2011): C. Ferrando
			#include <SPI.h> //llibreria microcontroladors
			#include <Ethernet.h> //libreria comunicacions xarxa
			#include <stdio.h> //llibreria estandard
			#include <math.h> //libreria de funcions matematiques
			IPAddress ip(192,168,1,15);//Adreça IP fixa
			byte mac[] = {  0x90, 0xA2, 0xDA, 0x00, 0x64, 0xE3 }; //adreça MAC
			//Inicialitzem la llibreria Ethernet amb IP pel port 80:
			EthernetServer server(80);
			//Definició de coeficients i constants
			float Ventrada=5.0;     // [V]        Tensió d'entrada al divisor de tensió
			float Rauxiliar=10000;  // [ohm]      Resistència secundaria al divisor de tensió.
			float R0=10000;    // [ohm]      Valor de NTC nominal a 25ºC
			float T0=298.15;   // [K] (25ºC) Valor en ºK de 25ºC
			float beta=3891;    // [K] Paràmetre B
			float Rinfinit=0.0214906446;    // [ohm]      Paràmetre Rinfinit
			//Definicio de variables
			float Veixida=0.0;    // [V]        Tensió donada pel divisor de tensió
			float RNTC=0.0;    // [ohm]      Resistència del NTC
			float TempK=0.0;   // [K]        Temperatura d'eixida en Kelvin
			float TempC=0.0;   // [ºC]       Temperatura d'eixida en Celsius
			int LecturaNTC = 3; // selecciona el pin d'entrada per al sensor de calor
			void setup()
			{
			// Iniciem la connexió Ethernet i el servdor:
			Ethernet.begin(mac, ip);
			server.begin();
			pinMode(LecturaNTC, INPUT);  //Configuració del pin d'entrada
			}
			void loop()
			{
			// Escoltem clients d'entrada
			EthernetClient client = server.available();
			if (client) {
			// una petició http acaba amb linia en blanc
			boolean currentLineIsBlank = true;
			while (client.connected()) {
			if (client.available()) {
			char c = client.read();
			// Si heu anat al final de la linia (heu rebut un caracter linia nova)
			// i la linia es en blanc, la petició ha acabat,
			// ara podeu enviar una resposta
			if (c == ' ' && currentLineIsBlank) {
			//  s'està enviant una capçalera de resposta http
			client.println("HTTP/1.1 200 OK");
			client.println("Content-Type: text/html");
			client.println();
			// eixida amb els valors dels sensors analogics i alguns càlculs del programa         
			Veixida=Ventrada*((analogRead(LecturaNTC))/1024.0); //Càlcul del valor de voltatge del NTC ara
			RNTC=(Rauxiliar*Veixida/(Ventrada-Veixida)); //Càlcul del valor la Resistencia del NTC ara 
			TempK=(beta/log(RNTC/Rinfinit));   //Càlcul de la temperatura estimada de SteinHart-Hart en Kelvins
			TempC=TempK-273.15;   //Càlcul de la temperatura estimada en Centigrads
			client.print("Temperatura (C)="); //imprimeix el retol en la web del client
			client.print(TempC); //imprimeix la variable TempC en centigrads en la web del client
			break;
			}
			if (c == ' ') {
			// esteu començant una nova linia
			currentLineIsBlank = true;
			} 
			else if (c != '\r') {
			// heu obtés un caracter en la línia actual
			currentLineIsBlank = false;
			}
			}
			}
			// deixem temps al servidor per rebre les dades
			delay(1);
			// tanquem la connexió
			client.stop();
			}
			}
			
			

En el vostre programa caldrà modificar la adreça MAC de la targeta Ethernet per posar la de la vostra targeta, mireu la enganxina que té a sota i copieu el codi.

També caldrà modificar la IP a fixar per al vostre router, mireu que la IP que poseu estiga en rang que dona els vostre router i no estiga ocupada.

Si anem a cercar un altre ordinador podrem provar la Ip que hem fixat per veure si funciona, i premer recarrega la pàgina per veure com varia a cada clic.

Webserver Sensor remot  de Temperatura