/* Colani.nl Ethernet Temperatuur/luchtvochtigheid Web-server Gebruikt een DHT11 sensor Geeft een webpagina op 10.0.0.10 met temperatuur en luchtvochtigheid arduino@colani.nl Het circuit en benodigdheden: * Een ethernet shield W5100 verbonden met pinnen 10, 11, 12 en 13 * Een DHT11 Sensor verbonden met Pin 2 * Een Arduino, in dit geval de MEGA * Een breadbord * Een voeding, of voeding vanaf je USB * 5 Jumperwires male/male Gebaseerd op de code van David A. Mellis & Tom Igoe */ /*-----( Importeren benodigde libraries )-----*/ #include #include #include #include /*-----( Declare Constants and Pin Numbers )-----*/ #define DHT11PIN 2 // The Temperature/Humidity sensor // Geef een MAC adres en een IP adres voor je ethernet controller. // (Het IP adres is afhankelijk van je lokale netwerk) byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; /*-----( Declare objects )-----*/ IPAddress ip(10,0,0,10); // Initialize the Ethernet server library // with the IP address and port you want to use // (port 80 is default for HTTP): EthernetServer server(80); dht11 DHT11; //De Sensor /*-----( Verklaren variabelen )-----*/ void setup() /****** SETUP: start een keer ******/ { // Openen serieele communicatie, en wachten tot er verbinding is: Serial.begin(9600); while (!Serial) { ; // wachten op een serieele poort om te verbinden. (Alleen voor de Arduino Leonardo) } // start de Ethernet verbinding en de web-server: Ethernet.begin(mac, ip); server.begin(); Serial.print("server is at "); Serial.println(Ethernet.localIP()); }//--(end setup )--- void loop() /*----( LOOP: loopt altijd door )----*/ { // luisteren naar aanvragen EthernetClient client = server.available(); if (client) { Serial.println("new client"); // Een http aanvraag eindigt met een lege regel boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); // Bij het bereiken van het einde van de lijn (en ontvangen "newline" // karakter) en de lijn is leeg, de http aanvraag is klaar, // en de data kan worden verzonden. if (c == '\n' && currentLineIsBlank) { // zende een standaard HTTP reactie client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connnection: close"); client.println(); client.println(""); client.println(""); // En we voegen een autoverversing van 5 seconden toe: client.println(""); client.print("Hallo Colani!"); client.println("
"); /*----(Opvragen sensor resultaten, bereken en print de resultaten )-----------------*/ int chk = DHT11.read(DHT11PIN); Serial.print("Read sensor: "); switch (chk) { case 0: Serial.println("OK"); break; case -1: Serial.println("Checksum error"); break; case -2: Serial.println("Time out error"); break; default: Serial.println("Unknown error"); break; } client.print("DHT11 temperatuur: "); client.println((float)DHT11.temperature, 1); client.print(" (C) Celsius"); client.println("
"); client.print("DHT11 temperatuur: "); client.println(Fahrenheit(DHT11.temperature), 1); client.print(" (F) Fahrenheit"); client.println("
"); client.print("DHT11 luchtvochtigheid: "); client.println((float)DHT11.humidity, 0); client.print(" (%)"); client.println("
"); client.print("DHT11 temperatuur: "); client.println(Kelvin(DHT11.temperature), 1); client.print(" (K) Kelvin"); client.println("
"); client.print("DHT11 dauwpunt: "); client.println(dewPoint(DHT11.temperature, DHT11.humidity)); client.print(" (C)"); client.println("
"); client.print("DHT11 dauwpunt snel: "); client.println(dewPointFast(DHT11.temperature, DHT11.humidity)); client.print(" (C)"); client.println("
"); /*--------( Einde lezen sensor )--------------------------------*/ client.println(""); break; } if (c == '\n') { // Nu starten we een nieuwe regel currentLineIsBlank = true; } else if (c != '\r') { // Indien er tekens staan op de eerste regel currentLineIsBlank = false; } } } // geef de web browser de tijd om data te ontvangen delay(1); // Sluit de verbinding: client.stop(); Serial.println("client disonnected"); } } // EINDE Loop /*-----( Verklaar door gebruiker geschreven functies )-----*/ // //Celsius naar Fahrenheit conversie double Fahrenheit(double celsius) { return 1.8 * celsius + 32; } //Celsius naar Kelvin conversie double Kelvin(double celsius) { return celsius + 273.15; } // dauwPunt functie NOAA // BRON: http://wahiduddin.net/calc/density_algorithms.htm double dewPoint(double celsius, double humidity) { double A0= 373.15/(273.15 + celsius); double SUM = -7.90298 * (A0-1); SUM += 5.02808 * log10(A0); SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ; SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ; SUM += log10(1013.246); double VP = pow(10, SUM-3) * humidity; double T = log(VP/0.61078); // temp var return (241.88 * T) / (17.558-T); } // BRON: http://nl.wikipedia.org/wiki/Dauwpunt double dewPointFast(double celsius, double humidity) { double a = 17.271; double b = 237.7; double temp = (a * celsius) / (b + celsius) + log(humidity/100); double Td = (b * temp) / (a - temp); return Td; } /* ( EINDE ) */