{"id":53,"date":"2020-05-02T21:10:14","date_gmt":"2020-05-02T21:10:14","guid":{"rendered":"https:\/\/himbeergarten.de\/?p=53"},"modified":"2020-05-10T19:47:08","modified_gmt":"2020-05-10T19:47:08","slug":"wir-messen-temperaturen","status":"publish","type":"post","link":"https:\/\/www.himbeergarten.de\/?p=53","title":{"rendered":"Wir messen&#8230;..Temperaturen"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Ab heute messen sind wir in der Lage Temperaturen mit dem Raspberry zu messen und diese zu protokollieren. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Schaltung hierf\u00fcr ist wirklich simpel. Ich habe sie mit Fritzing mal &#8222;skizziert&#8220;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"655\" height=\"955\" src=\"https:\/\/www.himbeergarten.de\/wp-content\/uploads\/2020\/05\/DS18B20.png\" alt=\"\" class=\"wp-image-54\" srcset=\"https:\/\/www.himbeergarten.de\/wp-content\/uploads\/2020\/05\/DS18B20.png 655w, https:\/\/www.himbeergarten.de\/wp-content\/uploads\/2020\/05\/DS18B20-206x300.png 206w\" sizes=\"auto, (max-width: 655px) 100vw, 655px\" \/><figcaption>DS18B20 Breadboard Skizze<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.himbeergarten.de\/wp-content\/uploads\/2020\/05\/DS18B20_2.png\" alt=\"\" class=\"wp-image-55\" width=\"148\" height=\"397\" srcset=\"https:\/\/www.himbeergarten.de\/wp-content\/uploads\/2020\/05\/DS18B20_2.png 254w, https:\/\/www.himbeergarten.de\/wp-content\/uploads\/2020\/05\/DS18B20_2-112x300.png 112w\" sizes=\"auto, (max-width: 148px) 100vw, 148px\" \/><figcaption>DS18B20 Pin-Layout<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Den DS18B20 Sensor mit 3,3V (PIN 1 am RPi \/ Pin 3 am DS18B20) und GND (Pin 6 am RPi und Pin 1 am DS18B20) versorgen. Die Datenleitung (Pin 2 am DS18B20) geht an den GPIO4 (PIN 7) am Raspberry. Um einen sauber definiertes Signal auf der Datenleitung (DQ) zu haben wird zwischen die Datenleitung und 3,3V ein 4,7K\u03a9 Widerstand geschaltet<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">M\u00f6chte man, so wie ich, mehrere Temperaturen messen und ben\u00f6tigt mehrere Temperatursensoren, so kann man diese einfach parallel schalten, der Pullup-Widerstand wird nur einmal ben\u00f6tigt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Normalerweise werden Devices auf dem 1-Wire-Bus mit einer Versorgungsspannung von 5V betrieben. Beim Raspberry muss man doch auf die verringerte Spannung von 3,3V zur\u00fcckgreifen, da die GPIO-Schnittstellen nur diese 3,3V vertragen und durch h\u00f6here Spannungen unwiderruflich zerst\u00f6rt werden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nun zu den Dingen die wir an der Tastatur machen m\u00fcssen&#8230;..<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Als erste m\u00fcssen wir die Kernelmodule nachladen, das geschieht mit<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>modprobe w1-gpio pullup=1\nmodprobe w1-therm<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Wichtig ist der Parameter&nbsp;pullup=1, er gibt an, dass die parasit\u00e4re Speisung \u00fcber den Pullup-Widerstand vorhanden ist.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um zu sehen ob wir alles richtig verdrahtet haben und die Kernelmodule geladen wurden, geben wir nun folgendes ein:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ls -la \/sys\/bus\/w1\/devices<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sollte etwas \u00e4hnliches wie bei mir angezeigt werden<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.himbeergarten.de\/wp-content\/uploads\/2020\/05\/DS18B20_shell_1.png\" alt=\"\" class=\"wp-image-59\" width=\"759\" height=\"127\" srcset=\"https:\/\/www.himbeergarten.de\/wp-content\/uploads\/2020\/05\/DS18B20_shell_1.png 765w, https:\/\/www.himbeergarten.de\/wp-content\/uploads\/2020\/05\/DS18B20_shell_1-300x51.png 300w\" sizes=\"auto, (max-width: 759px) 100vw, 759px\" \/><figcaption>Auflistung der erkannten Temperatursensoren<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Der Name der ersten beiden Verzeichnisse besteht aus dem &#8222;Family-Code&#8220; der Sensoren und deren eindeutigen Identifikationsnummer. Sensoren vom Typ DS1820 und DS18S20 haben den Family-Code 10, DS18B20 den Code 28 und DS1822 den Code 22.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ich nutze zwei Sensoren vom Typ DS18B20, meine verf\u00fcgen \u00fcber ein Anschlussleitung von 2m L\u00e4nge und sind am Ende vergossen damit ich diese ins Erdreich stecken kann.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"466\" height=\"312\" src=\"https:\/\/www.himbeergarten.de\/wp-content\/uploads\/2020\/05\/DS18B20_Sensortyp.jpg\" alt=\"\" class=\"wp-image-62\" srcset=\"https:\/\/www.himbeergarten.de\/wp-content\/uploads\/2020\/05\/DS18B20_Sensortyp.jpg 466w, https:\/\/www.himbeergarten.de\/wp-content\/uploads\/2020\/05\/DS18B20_Sensortyp-300x201.jpg 300w, https:\/\/www.himbeergarten.de\/wp-content\/uploads\/2020\/05\/DS18B20_Sensortyp-75x50.jpg 75w\" sizes=\"auto, (max-width: 466px) 100vw, 466px\" \/><figcaption>DS18B20 Wasserdicht mit 2m Anschlu\u00dfleitung<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Nun sind wir schon in der Lage den Sensor abzufragen und die gemessene Temperatur zu empfangen. Der Befehl daf\u00fcr lautet folgenderma\u00dfen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cat \/sys\/bus\/w1\/devices\/28-0119278a81d4\/w1_slave<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">den Teil der Sensor-ID m\u00fcsst Ihr nat\u00fcrlich an Euren Sensor anpassen. Zur\u00fcck bekommen wir dann sowas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>62 01 4b 46 7f ff 0c 10 92 : crc=92 YES\n62 01 4b 46 7f ff 0c 10 92 t=22125<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">t=22125 ist die gemessene Temperatur. Damit kann man nun ja erstmal nicht soviel anfangen. Oder?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Es Bedarf ein wenig der Formatierung und dazu erstellen wir uns ein kleines Script. Das geht am einfachsten mit dem Befehl:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nano temp.sh<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In die soeben erstelle Datei schreiben wir nun folgendes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#! \/bin\/bash\n\n# Umgebungsvariablen definieren\nWDIR=\/home\/pi\/tomatenpi\/\nETCDIR=$WDIR\/etc\nOUTDIR=$WDIR\/output\n\n# Temperatur auslesen\ntempread=`cat \/sys\/bus\/w1\/devices\/28-0119278a81d4\/w1_slave`\n\n#Formatieren\ntemp=`echo \"scale=1; \"\\`echo ${tempread##*=}\\`\" \/ 1000\" | bc`\n\n#Ausgabe auf der Konsole\necho \"Die gemessene Temperatur betr\u00e4gt\" $temp \"\u00b0C\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Schauen wir uns das Script mal etwas genauer an:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ich arbeite gerne mit Umgebungsvariablen, da ich mir so im Laufe eines Scripts viel &#8222;Pfade-tipperei&#8220; erspare und ich meine Scripte und Abl\u00e4ufe so gut Strukturen kann. Den Vorteil sehen wir sp\u00e4ter noch genauer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Den Teil &#8222;Temperatur auslesen&#8220; kennen wir schon, der ist unver\u00e4ndert.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Teil Formatieren bedarf vielleicht ein paar erkl\u00e4rende Worte:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>scale = 1 -&gt; damit k\u00fcrzen wir die Ausgabe auf eine Stelle hinter dem Komma bzw. Punkt<\/em>. Anschlie\u00dfend lesen wir den Wert der Variable $tempread ein und teilen diesen durch 1000 unter Zuhilfenahme des kommandozeilenbasierten Rechners &#8222;bc&#8220;. Das ganze wird in die Variable &#8222;temp&#8220; verpackt<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sollte das Script nicht den gew\u00fcnschten Erfolg bringen, dann muss das Paket bc nachinstalliert werden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der letzte Absatz des Scripts zeigt den nun formatierten Messwert auf der Konsole an, erg\u00e4nzt um den Satz &#8222;Die gemessene Temperatur betr\u00e4gt &#8230;\u00b0C.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das sieht dann so aus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pi@tomatenPi:~\/tomatenpi\/etc $ .\/temp.sh \nDie gemessene Temperatur betr\u00e4gt 22.0 \u00b0C<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Soweit so gut, auf der Konsole haben wir den Messwert nun schonmal, aber um diesen weiterzuverarbeiten ben\u00f6tigen wir den Wert ja irgendwo abgespeichert.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dazu muss lediglich eine Zeile erg\u00e4nzt oder ge\u00e4ndert werden. Aufgrund der einfacheren Fehlersuche, habe ich eine Zeile hinzugef\u00fcgt und die Ausgabe auf der Konsole auskommentiert. So sieht das ganze dann aus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Ausgabe zu Testzwecken auf Konsole\n#echo \"Die gemessene Temperatur betr\u00e4gt\" $temp \"\u00b0C\" \n\n# Ausgabe in Datei\necho $temp > $OUTDIR\/temp.txt # Ausgabe in Datei<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nun erfolgt die Ausgabe der Temperatur in die Datei temp.txt, ausgegeben wird nur der reine Temperaturwert, ohne Einheit (\u00b0C).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Damit ist der erste Teil des Projektes bereits erledigt. Im n\u00e4chsten Teil widmen wir uns dem verarbeiten der Messwerte mit dem rrdtool.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ab heute messen sind wir in der Lage Temperaturen mit dem Raspberry zu messen und diese zu protokollieren. Die Schaltung hierf\u00fcr ist wirklich simpel. Ich habe sie mit Fritzing mal &#8222;skizziert&#8220;. Den DS18B20 Sensor mit 3,3V (PIN 1 am RPi \/ Pin 3 am DS18B20) und GND (Pin 6 am RPi und Pin 1 am [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":82,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[1,22],"tags":[13,10,12,14,5],"class_list":["post-53","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-raspberry","category-tomatenpi","tag-breadboard","tag-ds18b20","tag-fritzing","tag-jumperwire","tag-raspberry"],"_links":{"self":[{"href":"https:\/\/www.himbeergarten.de\/index.php?rest_route=\/wp\/v2\/posts\/53","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.himbeergarten.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.himbeergarten.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.himbeergarten.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.himbeergarten.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=53"}],"version-history":[{"count":13,"href":"https:\/\/www.himbeergarten.de\/index.php?rest_route=\/wp\/v2\/posts\/53\/revisions"}],"predecessor-version":[{"id":80,"href":"https:\/\/www.himbeergarten.de\/index.php?rest_route=\/wp\/v2\/posts\/53\/revisions\/80"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.himbeergarten.de\/index.php?rest_route=\/wp\/v2\/media\/82"}],"wp:attachment":[{"href":"https:\/\/www.himbeergarten.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=53"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.himbeergarten.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=53"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.himbeergarten.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=53"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}