{"id":1433,"date":"2012-10-18T18:32:31","date_gmt":"2012-10-18T18:32:31","guid":{"rendered":"https:\/\/blog.ecotronics.ch\/wordpress\/?p=1433"},"modified":"2012-10-29T20:11:43","modified_gmt":"2012-10-29T20:11:43","slug":"arduino-projekt-temperaturuberwachung","status":"publish","type":"post","link":"https:\/\/blog.ecotronics.ch\/wordpress\/?p=1433","title":{"rendered":"Arduino-Projekt Temperatur\u00fcberwachung"},"content":{"rendered":"<p>Dieses Projekt ist die vollst\u00e4ndige Version des Projektes, das ich bereits<a title=\"Arduino Tag 2 und 3\" href=\"https:\/\/blog.ecotronics.ch\/wordpress\/2012\/arduino-tag-2-und-3\/\" target=\"_blank\"> im letzten Arduino-Beitrag<\/a> angefangen und dokumentiert habe.<\/p>\n<h1>Projektziel<\/h1>\n<div id=\"attachment_1450\" style=\"width: 310px\" class=\"wp-caption alignleft\"><a href=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/10\/rps20121018_202613.jpg\"><img aria-describedby=\"caption-attachment-1450\" decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-1450\" title=\"Arduino-Projekt &quot;Temperaturmelder&quot;\" src=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/10\/rps20121018_202613-300x225.jpg\" alt=\"\" width=\"300\" height=\"225\" srcset=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/10\/rps20121018_202613-300x225.jpg 300w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/10\/rps20121018_202613-150x112.jpg 150w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/10\/rps20121018_202613-400x300.jpg 400w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/10\/rps20121018_202613.jpg 800w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-1450\" class=\"wp-caption-text\">Arduino-Projekt &quot;Temperaturmelder&quot;<\/p><\/div>\n<p>F\u00fcr meine Blumen m\u00f6chte ich ein kleines <strong>Ger\u00e4t<\/strong>, dass mich <strong>warnt, wenn die Aussentemperatur zu tief oder zu hoch wird<\/strong>. F\u00fcr mich sind das 0 Grad wegen der frostempfindlichen Pflanzen sowie 25 Grad, weil dann ein erh\u00f6hter Giessbedarf besteht. Die Limiten sollen aber ebenso wie der abgedeckte Temperaturbereich im Programm gesetzt werden k\u00f6nnen, so dass jeder diese Variablen an seine eigene Klimazone und an seine eigenen Bed\u00fcrfnisse anpassen kann. Ein zus\u00e4tzliches RGB-Led zeigt mir zudem die Temperatur in einem Farbverlauf an, wobei die tiefste Temperatur ein reines Blau (RGB 0\/0\/255), die h\u00f6chste ein reines Rot (RGB 255\/0\/0) und die Temperaturen dazwischen von Blau \u00fcber Blaugr\u00fcn, Gr\u00fcn und Gr\u00fcnrot in Rot \u00fcbergehen.<\/p>\n<p>&nbsp;<\/p>\n<p>In meinem Experimenter Kit ist das die Kombination aus den Projekten 1 (blinkendes LED), 10 (Temperatursensor) und 12 (RGB-Led).<\/p>\n<h1>Komponenten und Verkabelung<\/h1>\n<p>Der Hardware-Teil besteht aus 3 Baugruppen.<\/p>\n<ol>\n<li>Mit dem RGB-LED gebe ich eine generelle <strong>Farbanzeige zur aktuellen Temperatur<\/strong>. Im unteren Drittel ist das LED bl\u00e4ulich, geht dann im mittleren Bereich in Gr\u00fcn \u00fcber und im letzten Drittel wird es immer r\u00f6ter, bis wir beim reinen Rot sind. Das entspricht dem erw\u00e4hnten Vorprojekt.<\/li>\n<li>Mit einem gr\u00fcnen LED (ein blaues habe ich im Moment nicht) gebe ich den <strong>Frostalarm <\/strong>aus, d.h. das LED brennt, wenn die Temperatur unter das definierte Minimum sinkt. Das gleiche in Rot gibt es f\u00fcr den <strong>Hitzealarm<\/strong>, wenn die Temperaturmaximallimite \u00fcberschritten wird.<\/li>\n<li>Der mit einem analogen Pin verkabelte <strong>Temperatursensor <\/strong>liefert die eigentliche Temperatur.<\/li>\n<\/ol>\n<h2>Verkabelundsschema<\/h2>\n<p>Dank der <a title=\"Download der Opensource-Software Fritzing\" href=\"http:\/\/fritzing.org\/download\/\" target=\"_blank\">Fritzing-Software<\/a> habe ich jetzt ein sch\u00f6nes Schema meiner Schaltung als Dokumentation:<\/p>\n<div id=\"attachment_1443\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/10\/TempToAnalogLED_Steckplatine970x600.png\"><img aria-describedby=\"caption-attachment-1443\" decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-1443\" title=\"Steckplatine f\u00fcr den Temperaturmelder\" src=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/10\/TempToAnalogLED_Steckplatine970x600-300x185.png\" alt=\"\" width=\"300\" height=\"185\" srcset=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/10\/TempToAnalogLED_Steckplatine970x600-300x185.png 300w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/10\/TempToAnalogLED_Steckplatine970x600-150x92.png 150w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/10\/TempToAnalogLED_Steckplatine970x600-400x247.png 400w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/10\/TempToAnalogLED_Steckplatine970x600.png 970w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-1443\" class=\"wp-caption-text\">Steckplatine f\u00fcr den Temperaturmelder<\/p><\/div>\n<h3>Stromanschluss<\/h3>\n<ul>\n<li>F\u00fcr den Strom wird ein rotes Kabel vom + der vertikalen Leiterbahn rechts zum 3.3V-Anschluss gezogen<\/li>\n<li>Vom &#8211; der vertikalen Leiterbahn rechts geht ein schwarzes Kabel zum GND links auf dem Board<\/li>\n<li>Das Board ist via USB mit dem PC verbunden oder alternativ mit einer 9V-Batterie<\/li>\n<\/ul>\n<h3>RGB-LED<\/h3>\n<div id=\"attachment_1454\" style=\"width: 160px\" class=\"wp-caption alignleft\"><a href=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/10\/rps20121018_203351.jpg\"><img aria-describedby=\"caption-attachment-1454\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/10\/rps20121018_203351-150x150.jpg\" alt=\"\" title=\"Gruppe RGB-LED\" width=\"150\" height=\"150\" class=\"size-thumbnail wp-image-1454\" \/><\/a><p id=\"caption-attachment-1454\" class=\"wp-caption-text\">Gruppe RGB-LED<\/p><\/div>\n<p>Die oberste Gruppe ist f\u00fcr das RGB-LED.<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>Das lange F\u00fcsschen (Nr 2 von oben) erh\u00e4lt den Stromanschluss, d.h. es wird via rotes Kabel mit der vertikalen +Leiterbahn verbunden<\/li>\n<li>Die anderen 3 F\u00fcsschen erhalten je einen 560-Ohm-Widerstand und werden mit den digitalen, PWM-f\u00e4higen Pins Nr 3, 5 und 6 verkabelt. Die Farben sind bei meinem LED von oben nach unten 1 Rot, 3 Gr\u00fcn und 4 Blau<\/li>\n<\/ul>\n<h3>2 LEDs f\u00fcr Frost- und Hitzealarm<\/h3>\n<p><div id=\"attachment_1459\" style=\"width: 160px\" class=\"wp-caption alignleft\"><a href=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/10\/rps20121018_203536_621.jpg\"><img aria-describedby=\"caption-attachment-1459\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/10\/rps20121018_203536_621-150x150.jpg\" alt=\"\" title=\"LEDs f\u00fcr Frost- und Hitzealarm\" width=\"150\" height=\"150\" class=\"size-thumbnail wp-image-1459\" \/><\/a><p id=\"caption-attachment-1459\" class=\"wp-caption-text\">LEDs f\u00fcr Frost- und Hitzealarm<\/p><\/div>Die zweite Gruppe enth\u00e4lt die zwei LEDs f\u00fcr den Frost und den Hitzealarm.<\/p>\n<ul>\n<li>Blaues LED f\u00fcr Frostalarm: Der +Pol (langes F\u00fcsschen) wird mit einem roten Kabel mit Pin 7 verbunden (eigentlich ist es ein gr\u00fcnes LED, mein Experimentierkit hat keine blauen LEDs), der -Pol mit einem Widerstand, der bis in die -Leiterbahn ganz rechts f\u00fchrt<\/li>\n<li>Rotes LED f\u00fcr Hitzealarm: Dasselbe wie oben, aber mit Pin 8<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3>Temperatursensor<\/h3>\n<p><div id=\"attachment_1460\" style=\"width: 160px\" class=\"wp-caption alignleft\"><a href=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/10\/rps20121018_204258_764.jpg\"><img aria-describedby=\"caption-attachment-1460\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/10\/rps20121018_204258_764-150x150.jpg\" alt=\"\" title=\"analoger Temperatursensor\" width=\"150\" height=\"150\" class=\"size-thumbnail wp-image-1460\" \/><\/a><p id=\"caption-attachment-1460\" class=\"wp-caption-text\">analoger Temperatursensor<\/p><\/div>Die letzte Gruppe ist das wichtigste am ganzen, n\u00e4mlich der Temperatursensor. Es handelt sich um einen <strong>IC-TMP36<\/strong>, der gem\u00e4ss Herstellerdokumentation einen Temperaturbereich von -40 bis +120 Grad erfassen kann. Hier handelt es sich um ein analoges Bauteil. Das mittlere F\u00fcsschen wird deshalb mit dem analogen Anschluss <strong>A0 <\/strong>verbunden, das untere mit der rechten +Leiterbahn auf dem Steckbrett und das obere mit der -Leiterbahn f\u00fcr GND.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2>Programmcode<\/h2>\n<p>Den Programmcode f\u00fcge ich hier ohne grosse Erl\u00e4uterungen ein, ich habe versucht, im Code zu dokumentieren, was wo passiert. Ausserdem habe ich nun mein <a href=\"https:\/\/www.ecotronics.ch\/ecotron\/arduinocheatsheet.htm\">Arduino Cheat Sheet<\/a> online publiziert. Eine Mini-Einf\u00fchrung zu arduinospezifischen Sprachelementen findet sich dort. <\/p>\n<p>Vielleicht noch ein kleiner Tipp: Das schwierigste war die Umsetzung des Temperaturbereichs in den Farbverlauf des RGB-Leds. Um die Formeln zu entwickeln und mit verschiedenen Varianten herumzuspielen, empfiehlt sich Excel: in der ersten Spalte l\u00e4sst man die Temperatur vom tiefsten bis zu h\u00f6chsten Wert laufen, in den n\u00e4chsten 3 Spalten berechnet man dazu die RGB-Werte. Wer will, kann sich die Exceldatei <a href=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/10\/TempToAnalogLED_Calculations.xls\">Calculating RGB values for temperatures<\/a> herunterladen.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\/*\r\n  Program shows the change of temperature in a range from -15 to 35 degrees celsius\r\n  as a color of an RGB LED, \r\n  the LED changes from full blue (-15) over green to red (+35)\r\n  2 different LEDs show a frost and a heat alarm\r\n  \r\n  Programm zeigt die Temperatur allm\u00e4hlichen Temperaturwechsel von -15 bis +35 Grad\r\n  und zeigt Temperatur in diesem Bereich mit einem Farbverlauf in einem RGB-LED an, \r\n  wobei kalte Temperaturen blau, mittlere gr\u00fcn und heisse Temperaturen rot angezeigt werden\r\n  zus\u00e4tzlich gibt es 2 LEDs f\u00fcr einen Frost- und einen Hitzealarm\r\n  unterhalb einer Maximallimite brennt das blaue LED\r\n  und oberhalb einer Minimallimite das rote LED *\/\r\n\r\nint temperaturePin = 0; \/\/the analog pin the TMP36's Vout (sense) pin is connected to\r\n                        \/\/the resolution is 10 mV \/ degree centigrade \r\n                        \/\/(500 mV offset) to make negative temperatures an option\r\n  \r\nint ledAnalogOne[] = {3, 5, 6}; \/\/3 PWM-LEDs: 3 red, 5 green, 6 blue\r\nint ledBlue = 7;\r\nint ledRed = 8;\r\n\r\n\/\/variables for the temperature and the temperature range                              \r\nfloat temperature = 15.0;\r\nint range = 50;\r\nint start = -15;\r\n\r\nint maximumLedBlue = 0; \/\/frost alarm\r\nint minimumLedRed = 25; \/\/heat alarm\r\n\r\nint red = 0;\r\nint green = 0;\r\nint blue = 0;\r\nfloat tmp = 0.0;\r\nint mydelay = 1000;\r\n\r\nbyte  black[] = {0, 0, 0}; \r\n\r\nvoid setup(){\r\n  Serial.begin(9600);\r\n  pinMode(ledBlue, OUTPUT);     \r\n  pinMode(ledRed, OUTPUT);     \r\n  for(int i = 0; i &lt; 3; i++){\r\n   pinMode(ledAnalogOne[i], OUTPUT);   \/\/Set the three LED pins as outputs\r\n  }\r\n  \r\n  setColor(ledAnalogOne, black);      \r\n}\r\n\r\nvoid loop(){\r\n\ttemperature = getTemperature(temperaturePin); \r\n\ttmp = 2 * 255 \/ range;\r\n\r\n        \/\/converts a temperature to a RGB color\r\n\tif (temperature &lt; start) {\r\n\t  red = 0;\r\n\t  green = 0;\r\n\t  blue = 255;\r\n\t} else if (temperature &lt;  start + (range \/ 2)) {\r\n\t  red = 0;\r\n\t  green = (temperature - start) * tmp;\r\n\t  blue = 255 - ((temperature - start) * tmp);\r\n\t} else if (temperature &lt; start + range) {\r\n\t  red = (temperature - (range\/2)- start) * tmp;\r\n\t  green = 255 - ((temperature - (range\/2) - start) * tmp);\r\n\t  blue = 0;\r\n\t} else {\r\n\t  red = 255;\r\n\t  green = 0;\r\n\t  blue = 0;\r\n\t}\r\n\r\n\t\/\/frost alarm\r\n\tif (temperature &lt;= maximumLedBlue) {\r\n          \/\/ blue LED is turned on\r\n\t  digitalWrite(ledBlue, HIGH);  \r\n\t} else {\r\n         \/\/ blue LED is turned off\r\n\t  digitalWrite(ledBlue, LOW); \r\n\t} \r\n\r\n\t\/\/heat alarm\r\n\tif (temperature &gt;= minimumLedRed) {\r\n         \/\/ red LED is turned on\r\n\t  digitalWrite(ledRed, HIGH);   \r\n\t} else {\r\n         \/\/ red LED is turned off\r\n\t  digitalWrite(ledRed, LOW); \r\n\t} \r\n\r\n\tbyte color[] = {red, green, blue};\r\n\tprintToSerial(temperature, color);\r\n\tsetColor(ledAnalogOne, color);\r\n\t\/\/pauses, before the temperature is read again\r\n\tdelay(mydelay);\r\n}\r\n\r\n\/\/fetches a random temperature value\r\nfloat getRandomTemperature(int start, int range) {\r\n  randomSeed(millis());\r\n  return random(start, start + range);\r\n}\r\n\r\n\/\/sets the RGB LED to a RGB color\r\nvoid setColor(int* led, byte* color){\r\n  \/\/iterates through the 3 pins\r\n  for(int i = 0; i &lt; 3; i++){             \r\n   analogWrite(led[i], 255 - color[i]);                  \r\n }\r\n}\r\n\r\n\/\/prints the temperature and RGB values at the serial interface\r\nvoid printToSerial(float temperature, byte* color) {\r\n  Serial.print(&quot;T: &quot;);\r\n  Serial.print(temperature);\r\n  Serial.print(&quot;; RGB: &quot;);\r\n  Serial.print(color[0]);\r\n  Serial.print(&quot;\/&quot;);\r\n  Serial.print(color[1]);\r\n  Serial.print(&quot;\/&quot;);\r\n  Serial.println(color[2]);\r\n}\r\n\r\nfloat getTemperature(int analogPin){\r\n  \/* converting from a 0 to 1024 digital range\r\n     to 0 to 5 volts (each 1 reading equals ~ 5 millivolts *\/\r\n  float voltage = (analogRead(analogPin) * .004882814); \r\n                                     \r\n  \/\/convert into a temperature\t\t\r\n  return (voltage - .5) * 100;        \r\n}\r\n<\/pre>\n<p>Hier l\u00e4sst sich die Gezippte <a href='https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/10\/TempToAnalogLED1.zip'>Programmcode zum Arduino-Projekt &#8220;Temperaturmelder&#8221;<\/a> zum Projekt &#8220;Temperaturmelder&#8221; herunterladen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dieses Projekt ist die vollst\u00e4ndige Version des Projektes, das ich bereits im letzten Arduino-Beitrag angefangen und dokumentiert habe.<\/p>\n<p> Projektziel <\/p>\n<p id=\"caption-attachment-1450\" class=\"wp-caption-text\">Arduino-Projekt &quot;Temperaturmelder&quot;<\/p>\n<p>F\u00fcr meine Blumen m\u00f6chte ich ein kleines Ger\u00e4t, dass mich warnt, wenn die Aussentemperatur zu tief oder zu hoch wird. F\u00fcr mich sind das 0 Grad wegen der frostempfindlichen Pflanzen sowie 25 [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":1443,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[160,158],"tags":[296,164,162,163,161],"_links":{"self":[{"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1433"}],"collection":[{"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1433"}],"version-history":[{"count":31,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1433\/revisions"}],"predecessor-version":[{"id":1477,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1433\/revisions\/1477"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/media\/1443"}],"wp:attachment":[{"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1433"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1433"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1433"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}