Die Temperatur wird mit dem NTC Thermistor gemessen und an Twitter gesendet.
Der NTC Thermistor wird mit einem 1k Widerstand an das Ethernet Shield auf dem Arduino angeschlossen.
Die Werte für B und R25 im Quellcode müssen mit den Werten des NTC Thermistors ersetzt werden (im Datenblatt zu finden).
Schaltplan:
Code:
/* Vorlage für die Temperaturmessung: Temperaturmessung mit einem NTC Thermistor von Thomas Ecker www.physicalcomputing.at Mai 2010 */ #if defined(ARDUINO) && ARDUINO > 18 // Arduino 0019 or later #include#endif #include #include #include #include #include // Ethernet Shield Settings byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Your Token to Tweet (get it from http://arduino-tweet.appspot.com/) Twitter twitter("DEIN TWITTER TOKEN"); // Message to post char temp[5]; char text[50]; int SensorPin = 0; // Für den Senoreingang wird Analog 0 gewählt float sensorWert = 0; // Variable, die den Sensor Wert annimmt float u1 =0; // Spannung u1 am Spannungsteiler float u2 = 0; // Spannung u2 am Spannungsteiler float i = 0; // Strom in A float Rntc = 0; // Widerstand des Thermistors zum Zeitpunkt der Messung float T = 0; // Variable für gemessene Temperatur float B = 3950; // Wert aus Datenblatt des Thermistors float Tn = 298.16; // Nenntemperatur in K float R25 = 4700; // Nennwiderstand in Ohm bei Nenntemperatur (aus Datenblatt) void setup() { delay(1000); Serial.begin(9600); EthernetDHCP.begin(mac); } void loop() { EthernetDHCP.maintain(); sensorWert = analogRead(SensorPin); // Wert am Sensor wird gelesen u2 = (sensorWert * 5)/1024; // Spannung am Sensor wird berechnet u1 = 5-u2; // Spannung am Vorwiderstand wird berechnet i = u1/1000; // Strom wird berechnet Rntc = u2/i; // Widerstand des Thermistors zum Zeitpunkt der Messung T = (B*Tn)/(B+(log(Rntc/R25)*Tn)); // Berechnung der Temperatur T = T-273.15; // Umrechnung von K in °C Serial.print ("Temperatur = "); Serial.print (T); Serial.println (" C"); ftoa(temp, (double)T, 2); sprintf(text,"%s Grad Celsius <- Aktuelle Temperatur in meinem Zimmer",temp); Serial.println (text); Serial.println("connecting ..."); if (twitter.post(text)) { // Specify &Serial to output received response to Serial. // If no output is required, you can just omit the argument, e.g. // int status = twitter.wait(); int status = twitter.wait(&Serial); if (status == 200) { Serial.println("OK."); } else { Serial.print("failed : code "); //Serial.println(status); } } else { Serial.println("connection failed."); } delay (1800000); // Temperatur wird alle halbe Std gemessen } char *ftoa(char *a, double f, int precision) { long p[] = {0,10,100,1000,10000,100000,1000000,10000000,100000000}; char *ret = a; long heiltal = (long)f; itoa(heiltal, a, 10); while (*a != '\0') a++; *a++ = '.'; long desimal = abs((long)((f - heiltal) * p[precision])); itoa(desimal, a, 10); return ret; }
Keine Kommentare:
Kommentar veröffentlichen