Um ein Überlaufen der Salzlösung in den Meßraum zu vermeiden, die Döschen vor Schlägen, Stößen und Erschütterungen schützen.
Trotzdem entstandene Tropfen mit Fließpapier vor der Messung entfernen.
Bedienungsanleitung
400_b_testo-x_Kontroll- und Abgleichset für Feuchtesensoren -Anwendungshinweise (24 Seiten)_1a.pdf
300_d_testo-x_testo Feuchtefibel - Messtechnik und Kalibrierung [96 Seiten)_1a.pdf
PG-Verschraubung
Prüfbehälter 12 %rF (LiCl)
Prüfbehälter 33 %rF (NaCl) testo therm Type 0554 0636 (1994)
Prüfbehälter 76 %rF (NaCl
Adapter für 3-Funktions-Sonde
testo therm Type 0554 0636 (1994)
Sensoren werden mit einzelnen gesättigten Salzlösungen in einem luftdicht verschlossenen Behälter platziert.
75,4% NaCl Natriumchlorid
Nur größeren Firmen stehen Klimakammern zur Verfügung.
Alle anderen müssen entweder einen entsprechenden Dienstleister beauftragen oder den hier vorgeschlagenen Weg beschreiten.
Wird ein geschlossenes Gefäß mit einer bestimmten gesättigten Salzlösung gefüllt, so entsteht nach kurzer Zeit in dem Luftraum über der Salzlösung eine bestimmte relative Luftfeuchtigkeit, die allerdings temperaturabhängig ist.
Wir benötigen ein ausreichend großes, dicht schließendes Gefäß, ein genaues Thermometer und einige Salzlösungen entsprechend der Tabelle.
Natriumchlorid finden wir als Kochsalz in jeder Küche oder zumindest Supermarkt.
Wegen der anderen Salze fragen Sie am besten (diesmal nicht Ihren Arzt sondern) Apotheker.
Ausreichend sind zwei bis drei verschiedene Salze für geringe und hohe Luftfeuchtigkeit.
Da die Kennlinie im Bereich zwischen den Grenzwerten bei den meisten Sensoren annähernd linear verläuft, braucht in der Kennlinienmitte für "normale" Anwendungen nicht kalibriert zu werden (eine linear arbeitende Schaltung vorausgesetzt).
Wir lösen soviel des betreffenden Salzes in destilliertem Wasser.
Je nach Größe des Gefäßes sind 200 bis 300 ml ausreichend.
Dazu rühren wir solange bis sich trotz guten Rührens kein Salz mehr auflöst.
Je wärmer das Wasser umso mehr Salz kann gelöst werden.
Günstig ist es, warmes Wasser zu verwenden und nach dem Lösen des Salzes abkühlen zu lassen.
Dann können wir sicher sein, daß kein Salz mehr gelöst werden kann: es kristallisiert am Boden aus.
Diese Lösung füllen wir in das Gefäß., in dem sich über der Lösung der Sensor (darf nicht in die Lösung tauchen) und natürlich das Thermometer befinden muß.
Jetzt wird die Luft über der Lösung mindestens 30 Minuten lang verwirbelt.
Ein kleiner Lüfter (im Gefäß !) ist dazu sehr hilfreich.
Erst nach dieser Zeit hat sich im Luftraum über der Salzlösung der entsprechende Feuchtigkeitswert eingestellt.
Wir müssen natürlich auch beachten, daß sowohl Luft als auch Sensor und Lösung die gleiche (konstante) Temperatur haben müssen.
Nur unter diesen Bedingungen stimmt das Meßergebnis.
http://www.s-elabor.de/k00002.html
https://chelifer.de/kalibrieren-von-feuchtesensoren/
4.2 Feuchtes-Tuch- / Feuchter-Lappen-Methode
Als Schnelltest zur Feststellung der ungefähren Abweichunge eines Messgeräts kann dessen Fühler mit einem feuchten Tuch umwickelt werden.
Nach ausreichender Angleichzeit (ca. 30 min bis 1 h) stellt sich unter dem Tuch eine nahezu gesättigte Atmosphäre von ca. 94 %rF bis 100 %r.F. ein.
Mit diesem schnellen, einfachen und äußerst preiswerten Verfahrenläßt sich leicht entscheiden, ob ein Messsystem noch korrekt arbeitet, oder ob eine genauere Kalibrierung mit Justage erforderlich ist.
4.3 Fixpunktzellen/Salztöpfchen-Methode
Mit dem feuchten Tuch können Feuchtigkeitswerte unterhalb der Sättigung nicht ausreichend genau und reproduzierbar erzeugt werden.
Man nutzt statt dessen gesättigte Salzlösungen, die den Dampfdruck des Wassers verringern und mit einem Überschuss an Salz (ungelöstes Salz als Bodenkörper) in einem luftdichten Gefäß eine konstante Luftfeuchtigkeit ergeben.
Durch Wahl geeigneter Salze können über den gesamten Messbereich verschiedene Feuchtewerte eingestellt werden, die dann als Bezugsgröße für die Kalibrierung herangezogen werden können.
Eine rückführbare Kalibrierung auf nationale bzw. internationale Normale ist nur dann möglich, wenn die Salzlösungen kalibriert sind!
Die über gesättigte Salzlösungen erhaltenen Luftfeuchten sind in der DIN 50008 Teil 2 genannt.
Aus der Tabelle können die Bezugswerte bei den entsprechenden Temperaturen entnommen werden.
Sie gelten nur für ausreichende Angleichzeitenund reine Salze.
Leider werden in verschiedenen Quellen unterschiedliche Werte mit Abweichungen von bis zu 3 % r.F. angegeben:
LiCl bei 10 °C: DIN 50008: 14 %rFISA Transactions: 11,3 %rF
Es ist deshalb äußerst wichtig, die Bezugsquelle des Referenzwertes zu dokumentieren, um die Kalibrierung nachvollziehen zu können.
Sicherer ist es, Salze oder Salzlösungen von Herstellern zu beziehen, die den erzeugten Feuchtewert nachweislich bestimmt haben.
Fixpunktzellen werden auch vom Testo Industrial Services-Kalibrierlabor kalibriert und zertifiziert.
Werden Zwischenwerte benötigt, können über die Salzkonzentration auch andere Dampfdrücke eingestellt werden.
Der Zusammenhang zwischen Salzkonzentration und entstehender Luftfeuchte ist in der Literatur beschrieben.
Problematisch ist allerdings das genaue Einwiegen und der Ausgleich verdunstenden Wassers, um ausreichende Genauigkeiten zu erzielen.
Daher ist es bei eigens hergestellten Salzlösungen zwingend erforderlich, den richtigen Wert mit einem geeigneten Referenzmessgerät zu messen und diesen dann mit dem zu kalibrierenden Hygrometer zu vergleichen.
Als sichere Methode wird die Verwendung gesättigter Lösungen empfohlen.
Wasser und Lösevermögen
Das Lösevermögen von Wasser ist je nach Stoff unterschiedlich.
Vollkommen unlöslich in Wasser ist kein Stoff, aber es gibt viele Substanzen, die derart wenig löslich sind, dass sie in der Praxis als unlöslich betrachtet werden können.
Die Löslichkeit aller Stoffe ist mehr oder weniger von der Temperatur abhängig.
Bei gewöhnlichem Kochsalz (NaCl) z. B. ändert sie sich von 0 °C bis 100 °C nur sehr wenig.
Eine gesättigte Kochsalzlösung hat einen Gefrierpunkt von -21 °C, einen Siedepunkt von 108 °C und enthält 356 g NaCl/Liter bei 0 °C (359 g/L bei 25 °C).
Gegenüber reinem Wasser hat Salzwasser, obwohl es schwerer ist, eine geringere spezifische Wärmekapazität.
Diese Eigenschaft lässt sich beim Kochen nutzen, wenn man Salz in kaltes Wasser zugibt (ca. 1 % Energieersparnis).
Salzwasser hat gegenüber reinem Wasser eine erheblich (~1 Mio.-fach) größere elektrische Leitfähigkeit.
4.3.2 Mögliche Anwendungsfehler
Wichtig für einen korrekten Feuchtewert ist vor allem, dass die Salzlösung gesättigt ist.
Sättigung ist daran erkennbar, dass in der wässrigen Lösung noch ungelöste Salzkristalle vorhanden sind und ausreichend Wasser vorliegt.
Ist nicht genügend Salz in der Lösung, steigt die relative Feuchte an und die Literaturwerte können nicht als Bezugsgröße herangezogen werden.
Zweitens zeigen die erzeugten Feuchten eine gewisse Temperaturabhängigkeit.
Da dieser Effekt relativ gering ist, kann er für die meisten Anwendungen vernachlässigt werden.
Wichtig ist auch die Beachtung der Salzreinheit, da durch bestimmte Verunreinigungen der Feuchtewert erheblich verändert werden kann.
Von verschiedenen Herstellern werden solche Salze fertig konfektioniert und kalibriert angeboten, wodurch die höchste Gewähr besteht, genaue Feuchtewerte zu erhalten.
4.3.3 Einfacher Prüfbehälter
Sehr einfach lassen sich Kalibrierungen vollziehen, wenn die fertigen Salzlösungen in Prüfbehältern enthalten sind, wo sie nicht verunreinigt mehrfach verwendet werden können.
Im Mantel eines doppelwandigen Gefäßes befindet sich dieLösung, durch ein Diaphragma vom eigentlichen Messraum getrennt.
Das Diaphragma verhindert das Austreten von flüssigem Wasser in die Messkammer, wohingegen Wasserdampf passieren kann.
Die Messkammer ist gerade so groß, dass der Prüfling eingebracht werden kann, denn: je kleiner der Luftraum, desto kürzer die Angleichzeit.
Mittels Schraubverschluss wird die Kammer luftdicht verschlossen, um einen Ausgleich mit der Umgebung zu verhindern.
Messbereit sind die Salztöpfchen nur dann, wenn ein deutlich sichtbarer Salzrückstand am Boden des Gefäßes vorliegt und genügend Wasser übersteht.
Erst dann liegt eine gesättigte Lösung vor.
Kalibrierung von Hygrometern mit Hilfe von gesättigten Salzlösungen
https://helmuth-herterich.jimdo.com/kalibrierung-eines-hygrometers/
Gesättigte-Salzlösungs-Methode
- Kochsalz (NaCl Natriumchlorid) in ein Gurkenglas und mit etwas Wasser befeuchten so dass eine gesättigte Lösung entsteht.
- Hygrometer in dieses Gurkenglas luftdicht einbauen.
- 6 bis 8 Stunden warten
- nun sollten 75% relative Luftfeuchtigkeit in dem Behältnis sein
Optionale Kalibrierung
Normalerweise ist keine neue Kalibrierung des Sensors notwendig.
Er ist ab Werk auf die gespeicherte Kalibrierung eingestellt.
Für größte Genauigkeit kann der Sensor kalibriert werden.
Der einfachste Weg ist die Kalibrierung mit einem Vergleichsinstrument für relative Feuchte (Hygrometer oder Psychrometer).
Ein anderer Weg ist die Kalibrierung mit Hilfe einer Salzlösung.
Es kommt eine Zweipunkt-Kalibrierung, wie bei den meisten Sensoren, zur Anwendung.
Die Salzlösungen sorgen für eine Umgebung mit bekannter relativer Feuchte.
Wenn Sie feuchtes Salz in einem Behälter einschließen, wird die Luft darin einen bestimmten Wert für die relative Luft-Feuchte annehmen.
Die relative Luft-Feuchte ist ein wenig temperaturabhängig.
Deshalb sind in der Tabelle verschiedene Temperaturen aufgeführt.
1. Legen Sie eine Handvoll Salz auf den Boden eines Behälters (ca. 1L Volumen)
2. Fügen Sie so viel Wasser zu, dass das Salz feucht wird. Das Salz sollte nicht vollständig gelöst sein.
3. Platzieren Sie den Sensor über das Salz. Er darf das Salz nicht berühren.
4. Verschließen Sie den Behälter (wir verwenden Plastikfolie und Gummibänder).
5. Warten Sie 6h, bis die Luft im Behälter die korrekte relative Feuchte erreicht hat.
6. Wählen Sie nun den ersten Kalibrierungspunkt und geben Sie hier den Wert aus der Tabelle ein.
7. Wiederholen Sie den Vorgang mit einem anderen Salz. Lassen Sie dem Sensor genügend Zeit, sich auf den neuen Wert einzustellen.
http://vernier-in-der-schule.at/fileadmin/PDFs/RH-BTA_deutsch.pdf
Hygrometer kalibrieren in Salzlösung
https://www.humidor.de/info/hygrometer-kalibrieren.html
http://www.cwaller.de/didaktik_pdf/testo_feuchtefibel.pdf
Hygrometer kalibrieren
Ein Hygrometer wird dazu verwendet, die Luftfeuchtigkeit in geschlossenen Räumen genau zu bestimmen.
Dies kann unter anderem vor der Entstehung von zum Beispiel Schimmelpilz und den daraus resultierenden gesundheitlichen Risiken vorbeugen.
Zur einwandfreien Nutzung eines Hygrometers muss es unbedingt regelmäßig kalibriert werden, empfohlen werden halbjährliche Abstände.
Kalibrieren bedeutet, dass über die Messwerte der Luftfeuchtigkeit ein Protokoll erstellt wird, das die Abweichungen der Ist- von den Soll-Werten angibt.
Denn nur bei genauen Angaben zur Luftfeuchtigkeit kann das Hygrometer auch seinen Zweck erfüllen.
Kalibrieren leicht gemacht
Zum exakten Kalibrieren des Hygrometers wird der so genannte Taupunkt benötigt.
Ganz vereinfacht gesagt ist das der Punkt, an dem sich Feuchtigkeit auf Gegenständen ansammelt.
Über diesen Taupunkt kann dann mittels mathematisch genauer Berechnungen der Feuchtigkeitsgehalt bestimmt werden.
Je näher die Messwerte also an dem Taupunkt sind, desto genauer misst das Hygrometer die Luftfeuchtigkeit.
Damit Hygrometer auch ordnungsgemäß für die Industrie kalibriert werden können, wird in luftdichten Kammern von geringer Größe Feuchtigkeit durch gesättigte Salzlösung erzeugt.
Daraus werden Referenzangaben für die jeweilige Luftfeuchtigkeit von null bis hundert Prozent gezogen und die Feuchtfühler dementsprechend kalibriert.
Für den normalen Hausgebrauch gibt es eine wesentlich einfachere Methode mit einem Lappen, der in lauwarmem Wasser getränkt wurde.
In diesen Lappen wird das Hygrometer etwa für eine Stunde eingewickelt.
Die Anzeige wird dann dementsprechend mit einem Schraubenzieher auf 98 %r.F. angepasst und schon ist das Hygrometer kalibriert.
Auch eine Möglichkeit für zuhause, aber etwas aufwändiger, ist die Herstellung von eigener gesättigter Kochsalzlösung.
Dafür füllt man in einen gut verschließbaren, kleinen Behälter eine ganz dünne Schicht trockenes Kochsalz.
Empfohlen werden um die drei Millimeter.
Dann feuchtet man das Kochsalz mit wenig Wasser an, so dass sich das Salz nicht komplett auflösen kann und lässt es mehrere Stunden verschlossen ohne jegliche Luftzufuhr bei normaler und gleichbleibender Raumtemperatur stehen.
Sobald man das Gefäß dann öffnet, muss man sofort das Hygrometer bereit halten und es auf so schnell wie möglich auf 75 Prozent mit dem Schraubenzieher stellen entsprechend der Luftfeuchtigkeit in dem Behältnis.
Die einfachste Kalibrierung erfolgt aber noch bei elektrischen Hygrometern.
Hier muss einfach die Batterie herausgenommen und nach einer kurzen Weile wieder eingesetzt werden.
Und schon ist das Gerät wieder kalibriert.
https://hygrometer-test.de/hygrometer-kalibrieren
Kalibrierung von Hygrometern
Überprüfung von Hygrometern mit Hilfe von gesättigten Salzlösungen
Die Methode des Umwickelns mit einem feuchten Handtuch zum Kalibrieren des Hygrometers auf 98% kennt wohl jeder.
Besonders genau ist sie jedoch nicht.
Wer sein Hygrometer im normalen Messbereich überprüfen will, muss zu anderen Hilfsmitteln greifen ...
Eine gesättigte Lösung eines Salzes mit einem Überschuss an Salz (ungelöstes Salz als Bodenkörper) ergibt in einem luftdichten Gefäß eine konstante Luftfeuchtigkeit, die zum kalibrieren von Hygrometern genutzt werden kann.
Die erzielbaren Luftfeuchtigkeitswerte sind auch ohne definierte Temperatur auf ± 2% genau anzugeben und damit voll ausreichend für den Normalgebrauch.
Die Temperatur spielt dabei so gut wie keine Rolle, sie braucht nicht auf einem bestimmten Wert gehalten zu werden.
Für hochreines Natriumchlorid liegt die relative Luftfeuchtigkeit über der gesättigten Lösung
z.B. bei 10°C 75,67%r.F. 15°C 75,61%r.F. 20°C 75,47%r.F. bei 25 °C 75,29%r.F.
Kochsalz enthält neben dem NaCl noch andere Nebenbestandteile, aber zum kalibrieren reicht das allemal.
75,4 ± 2% relative Luftfeuchtigkeit erreicht man auch damit immer.
Praktische Durchführung
Das trockene Salz wird ca. 3 mm hoch auf dem Boden eines flachen, luftdicht verschließbaren Gefäßes gestreut und dann mit Wasser angefeuchtet.
Das Salz darf sich nicht komplett im Wasser lösen, deshalb vorsichtig mit der Wassermenge sein!
Der Deckel des Gefäßes sollte durchsichtig sein.
Das Hygrometer wird auf ein Rost über der Lösung gelegt.
Bei Geräten mit Sensor kann auch der Sensor durch ein Loch im Deckel (luftdicht verschließen!) eingeführt werden.
Dafür wird dann nur ein sehr kleines Gefäß mit Deckel benötigt. Notfalls genügt auch mal ein Gefrierbeutel.
Welches Salz ist geeignet?
In der obigen Tabelle stehen die Salze und die jeweiligen relativen Luftfeuchtigkeiten für verschiedene Temperaturen.
Im Normalfall wird man mit Kochsalz NaCl arbeiten - damit erreicht man eine relative Luftfeuchtigkeit von 75,4% und gemeinsam mit der "Handtuchmethode" ha man dann schon einmal eine Zweipunkt-Kalibrierung.
Zur Kalibrierung auf den Nullpunkt nimmt man am besten
wasserfreies Calciumchlorid (Granulat) oder das sogenannte Silicagel.
Silicagel ist ein Kieselgel und war früher mit einem Kobaltsalz als Feuchteindikator imprägniert.
Dieses Co-Salz ist im wasserfreien Zustand blau ... daher der Name "Blaugel" für diese Art der Trockenmittel. "
http://forum.hanfburg.de/fhb/showthread.php?t=189512
Warmes Wasser, Salz rein, rühren und wenn ein kleiner Salzberg am Boden bleibt, ist alles OK.
360 g Kochsalz auf 1 L Wasser bei 25 °C. Rühren beschleunigt die Auflösung
Du nimmst Wasser und Kochsalz und kippst das Kochsalz ins Wasser.
Dann rührst Du und gibst ggf. weiteres Salz dazu.
Für einen 1/2 Liter Wasser kannst Du mal grob 180g Salz rechnen.
Rühren und zwar einige Minuten.
Wenn sich dann trotzt des Rührens nichts mehr löst und der Rest des Salzes sich auf dem Boden absetzt, dann ist die Lösung gesättigt.
Die Trübung, die sich bei käuflichem Speisesalz ergibt, resultiert aus den sog. Rieselhilfen, die setzen sich dann aber auch wieder ab, stören aber erst mal nicht, auch wenn sie sich nicht absetzen sollten.
Bei Kochsalz stellt sich dann eine rel. Feuchte von etwa 75,4 % (bei 20°C) ein.
********************************************************I*
Arduino Projekte
01. Ampel mit Arduino für Autos und Fußgänger
02. Der einfache Weg, viele LEDs mit Arduino steuern - WS2812
03. Temperatur und Luftfeuchtigkeit messen - DHT22
04. Accelerometer - ADXL335
05. Arduino zu MySQL via WiFi
06. Wie steuert man einen Motorfader mit Arduino?
07. Funkübertragung von Messwerten mit dem RF Link Modul (Receiver und Transmitter) RWS-371
08. LCD - Liquid Crystal Display HD44780 2x16
09. Abstandsmessung mit dem Sharp GP2Y0A21YK IR Entfernungssensor
10, Ein altes Handy als Arduino Input
11. Barebones-Arduino - ATmega168
12. Arduino-Schematics
13. Arduino Shield
14. Motorsteuerung eines Schrittmotors (Stepper Motor) LD293D
15. Motorsteuerung mit einem H-Bridge IC
16. Motorsteuerung mit einer MOS-FET Brücke
17. Motorsteuerung mit eonem Transistor
18. Motorsteuerung mit einem Schaltrelais
19. Motorsteuerung direkt per Arduino - 5V-100mA
20. Schaltrelais
21. Verstärker durch Transistor BC237B
22. Servo - Modellbau-Servo
http://www.arduino-tutorial.de/arduino-projekte/
1) DHT22: Temperatur und Luftfeuchtigkeit messen
Der DHT22 (
Amazon Produktlink) ist eine einfache und kostengünstige Möglichkeit, um Temperatur und Luftfeuchtigkeit zu messen.
Es handelt sich um einen kalibrierten Sensor, der über eine
One-Wire Schnittstelle (MaxDetect), also eine Datenleitung mit nur einem Kabel, angesprochen wird.
Beispiel-Schaltung des DHT22
Temperatur und Luftfeuchtigkeit messen – Schaltung mit
Fritzing erzeugt
Der Sensor benötigt außer einem Widerstand (4,7kΩ) keine weiteren Bauteile und arbeitet mit 5V.
Legt man den Sensor mit den Gittern vor sich hin, ist der linke Pin der 5V+ Anschluss, der daneben der Datenpin, der noch mit einem Widerstand (4,7kΩ) mit 5V+ verbunden ist.
Der ganz rechte Pin ist der GND. Pin 3 hat keine Funktion und muss nicht weiter beachtet werden.
Die Programm-Bibliothek, die man benötigt heißt DHT sensor library. Am einfachsten lässt sie sich installieren, indem man im Menü auf Sketch>Bibliothek-Einbinden>Bibliotheken verwalten klickt.
Oben im Fenster befindet sich ein Eingabefeld, in dem man einfach DHT eingibt.
Jetzt kann man die DHT sensor library anklicken und auf Installieren drücken.
(Mehr Infos dazu unter:
Bibliotheken in Arduino installieren – Danke an Bernd für den Hinweis.)
Beispielcode
Dieses Programm liest Temperatur und Luftfeuchtigkeit aus und stellt sie auf dem
LCD-Display dar.
Der Sensor kann nur alle ein bis zwei Sekunden ausgelesen werden.
Darüber hinaus benötigt er eine Aufwärmphase von zwei Sekunden.
#include
#include
#define DHTPIN 8
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
float humidity, temperature;
void setup() {
dht.begin();
lcd.begin(16, 2);
}
void loop() {
humidity = dht.readHumidity();
temperature = dht.readTemperature();
delay(2000);
lcd.setCursor(8, 0);
lcd.print("Temperatur:");
lcd.setCursor(8, 1);
lcd.print("Humidity:");
lcd.setCursor(0, 0);
lcd.print(temperature);
lcd.setCursor(0, 1);
lcd.print(humidity);
}
Mit diesem Beispielcode lässt sich schon einiges anfangen.
Die Bibliothek selbst bietet aber noch eine Reihe weiterer nützlicher Funktionen, wie z.B. der Fehlerauswertung des Sensors.
Wer sich dafür interessiert, soll mal in der Arduino-Software das Beispiel Datei>Beispiele>DHT sensor library>Serial öffnen
← LCD – Liquid Crystal Displays
Arduino Yún präsentiert von den Machern →
Quelle:
http://www.arduino-tutorial.de/temperatur-und-luftfeuchtigkeit-messen-DHT22/
********************************************************I*
2) Temperatur und Luftfeuchtigkeit mit dem Arduino Uno messen
https://www.reichelt.de/magazin/how-to/arduino-uno-temperatur-luftfeuchtigkeit-messen/
https://www.reichelt.de/www.reichelt.at/Kombosensoren/BME-280/3/index.html?ACTION=3&GROUPID=6845&ARTICLE=159825
********************************************************I*
3) Temperatur- und Luftfeuchtemessung mit dem Sensor DHT22 - Teil 1
In diesem ersten Teil schauen wir uns die Rohdaten an, die der Sensor abliefert.
Dazu wird das Datenblatt des Herstellers zu Rate gezogen.
Um an die Rohdaten zu kommen, wird eine Bibliotheksdatei von github.com benutzt.
Wer weiter einsteigen möchte in die Programmierung dieses Sensors, kann dort auch die Bibliotheksdateien mit ihren Funktionen einsehen und erfahren, wie auf die einzelnen Bits des DHT22/DHT11 zugegriffen wird
https://www.rahner-edu.de/mikrocontroller/arduino-uno/temperatur-und-luftfeuchtemessung/
********************************************************I*
4) WLAN Logger für Lufttemperatur und Feuchtigkeit
http://blog.thesen.eu/wlan-lufttemperatur-und-feuchte-logger-mit-grafischer-darstellung-fuer-esp8266/
********************************************************I*
5) DHT22 DHT-22
adafruit/DHT-sensor-library DHT.h DHT.cpp
https://github.com/adafruit/DHT-sensor-library
6) DHT sensor library
https://www.arduinolibraries.info/libraries/dht-sensor-library
7) Temperature & Relative Humidity Datalogger using DHT22 and Arduino Uno
Hardware requirements:
Arduino Uno Starter Kit (includes Arduino Uno, breadboard, jumper wires and USB cable A to B)
DeadOn RTC DS3234 Breakout from Sparkfun
CR1225 coin cell battery for the RTC
RHT03/DHT-22 Humidity and Temperature sensor
Sparkfun microSD Shield Retail (includes headers)
1 kΩ resistor
microSD card (any capacity)
Soldering iron
Software requirements:
Arduino IDE 1.0.5 or higher (for Windows or Mac OS X or Linux)
Adafruit DHT sensor library
DS3234 RTC library
http://www.osbss.com/temperature-relative-humidity-datalogger-using-dht22-arduino-uno/
8) Arduino Datenlogger für Imker und Bienenhalter
2x Temperatur- und 2x Luftfeuchtesensor (DHT21/ DHT22)
Bienen-Stocktemperatur und die Außentemperatur,
https://beelogger.de/?page_id=262
9) DHT11 / DHT22 mit dem Arduino UNO auslesen Anleitung
https://www.bastelgarage.ch/index.php?route=blog/post/view&blog_post_id=3
https://www.bastelgarage.ch/index.php?route=product/product&product_id=291
10) amateurfunk Mini Wetterstation
BOSCH Sensortec Wetter-Sensor BME280
https://www.bosch-sensortec.com/bst/products/all_products/bme280
Der Bosch-Sensor BME280 misst auf kleinstem Raum Temperatur, Luftfeuchte und Luftdruck.
Das reizt zu einigen Spielereien.
Mögliche Anwendungen sind eine Wetterstation, Datenlogger oder ein Höhenmesser.
Lesen Sie, wie man den BME280 mit einem Arduino UNO ansteuert und mit recht wenig Aufwand erstaunliche Anwendengen realisiert
Temperatur, Lu ftfeuchte und Luftdruck mit BOSCH Wettersensor BME280 und ARDUINO UNO R3
Die LCD-Anzeige zeigt Temperatur, Luftfeuchte und Luftdruck an.
400_c_amateurfunk-x_Temperatur, Luftfeuchte, Luftdruck - § Wettersensor BME280 und ARDUINO UNO_1a.pdf
http://www.vth.de/media/files/shop-beilagen/2016/dez/wettersensor-bme280.pdf
Adafruit BME280 Humidity + Barometric Pressure + Temperature Sensor Breakout
https://learn.adafruit.com/adafruit-bme280-humidity-barometric-pressure-temperature-sensor-breakout/arduino-test
https://www.mouser.com/ds/2/737/adafruit-bme280-humidity-barometric-pressure-tempe-740823.pdf
https://canox.net/2017/09/arduino-der-bme280-sensor/
Grove - Barometer Sensor(BME280)
http://wiki.seeedstudio.com/Grove-Barometer_Sensor-BME280/
https://github.com/adafruit/Adafruit_BME280_Library
https://learn.sparkfun.com/tutorials/sparkfun-bme280-breakout-hookup-guide
https://funduino.de/nr-23-bme280-luftdruck-luftfeuchtigkeits-und-temperatursensor
http://www.watterott.com/de/BME280-Breakout-Luftfeuchtigkeits-Druck-Tempertursensor
11) Luftdruck-/Luftfeuchtesensor BME280
BOSCH Luftdrucksensor BME280 BOSCH Barometor-Sensor BME280
https://arduino-projekte.webnode.at/meine-libraries/luftdruck-luftfeuchtesensor-bme280/
12) BME280 Evaluation Board [elektor 160109-2 v1.1]
https://www.elektormagazine.com/labs/bme280-evaluation-board-160109-2
https://www.elektormagazine.com/labs/feuchtegesteuerte-kellerluftung-humidity-basement-ventilation-140154
13) Selbstbau-Datenlogger
Daten verarbeiten mit OpenOffice Calc
Die Klimadiagramme unter die Lupe nehmen
http://world.museumsprojekte.de/?feed=rss2&cat=239&lang=de
http://world.museumsprojekte.de/?p=8804&lang=de
14) Datenlogger - Speichern auf SD-Karte
Messgerät zur Erfassung der Temperatur, Luftfeuchtigkeit und Luftdruck
https://edu.books.sensebox.de/de/grundlagen/datenlogger.html
********************************************************I*
15.1) Perfektes Klima mit dem Arduino
ELVjournal 03/2015
Wärmetauscher
300_c_ARDUINO-x_Perfektes Klima mit dem Arduino - Raumlüftung_1a.pdf
WaermetauscherV9.ino
ELVjournal 2015-03-12 - Software - Raumlüftung_1a.zip
Der Schaltplan für die Steuerung des Wärmetauschers.
Quelle:
https://www.elv.at/Perfektes-Klima-mit-dem-Arduino/x.aspx/cid_726/detail_51160
https://files.elv.com/bilder/journal/2015_03/12/2015_03_12_lwb_waermetauscher.pdf
15.2) Arduino-Saunatimer
mit Temperatur-/Luftfeuchteanzeige und Audioausgabe
400_b_Arduino-x_Saunatimer. mit Temperatur- Luftfeuchteanzeige und Audioausgabe (6 Seiten)_1a.pdf
www.elvjournal,de 3/2014
https://www.elv.at/Arduino-Saunatimer-mit-Temperatur-Luftfeuchteanzeige-und-Audioausgabe/x.aspx/cid_726/detail_47496
********************************************************I*
16) Temperaturmessung und Luftfeuchte mit dem Arduino UNO DHT11 DHT22
Temperaturmessung mit dem Arduino UNO LM35 DS18B20
die Temperaturwert des DHT22 sind genauer als die OneWire Dalles DS18B20.
Schaltplan Arduino mit DHT22 und LCD Display
Arduino Temperatur- & Luftfeuchte-Sensoren Teil 4: DHT22
Benötigte Elemente
Sketch Arduino mit DHT22
//ACHTUNG: Leerstelle in Include vor/nach spitzer Klammer entfernen!#include < LiquidCrystal.h >//LCD DisplayLiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Adafruit DHT library https://github.com/nethoncho/Arduino-DHT22/tree/a655c6299b019cf53173139dad824466486591c8#include "DHT.h"#define DHTPIN 8 // Ich nutze Digital-PIN 8#define DHTTYPE DHT22 // DHT 22 (AM2302)DHT dht(DHTPIN, DHTTYPE); void setup() {lcd.begin(16, 2);} void loop() { //Wartedelay(2000); // Lese die Luftfeuchtigkeitfloat h = dht.readHumidity(); // Lese die Temperatur in Celsiusfloat t = dht.readTemperature(); lcd.setCursor(0, 0);lcd.print("Temperatur:");lcd.setCursor(0, 1);lcd.print("Humidity:"); lcd.setCursor(11, 0);lcd.print(t);lcd.setCursor(11, 1);lcd.print(h);}
Grundsätzliches
Da einige Sensoren eine gewisse „Aufwärmzeit“ benötigen, starten wir im Sketch (Programmcode) bei allen Sensoren zuerst mit einem „delay(2000);“, also einer Wartezeit von zwei Sekunden.
Vorher sind keine vernünftigen Messwerte zu erwarten.
Auch sind die hier vorgestellten Sensoren nicht dazu geeignet, in Sekundenbruchteilen Messungen zu wiederholen.
Eine Wartezeit von ein bis zwei Sekunden zwischen zwei Messungen sollte in der Praxis zu guten Messwerten führen.
Quelle:
https://test-wetterstation.de/temperaturmessung-mit-dem-arduino
********************************************************I*
17.1) DHT11 Sensor für Temperatur und Luftfeuchtigkeit am Arduino
https://www.makerblog.at/2014/08/dht11-sensor-fuer-temperatur-und-luftfeuchtigkeit-am-arduino/
Der DHT11 ist ein digitaler, in einer Kalibrierungskammer vorkalibrierter Sensor und misst Temperatur
und relative Luftfeuchtigkeit im Bereich von 0-50 Grad Celsius bzw. 20-95% Luftfeuchtigkeit.
https://github.com/adidax/dht11
// Libraries einbinden#include <dht11.h>#include <LiquidCrystal.h> dht11 DHT11;#define DHT11PIN 8 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup(){ lcd.begin(16, 2); lcd.print("Initialisierung..."); lcd.clear();} void loop(){ int chk = DHT11.read(DHT11PIN); lcd.setCursor(0, 0); lcd.print("Temp: "); lcd.print((float)DHT11.temperature, 2); lcd.print(" C"); lcd.setCursor(0, 1); lcd.print("RelF: "); lcd.print((float)DHT11.humidity, 2); lcd.print(" %"); delay(2000);}
Quelle:
https://www.makerblog.at/2014/08/dht11-sensor-fuer-temperatur-und-luftfeuchtigkeit-am-arduino/
17.2) Wetterstation mit dem Arduino basteln
Die aktuelle Version des Arduino Sketch ist noch sehr einfach.
Der Sketch macht alle 2 Minuten eine Messung und überträgt diese an einen bei thingspeak.com eingerichteten Channel zur Erfassung und Anzeige der Messdaten.
DHT11 – Temperatur und Luftfeuchtigkeit (Tutorial)
Digitaler, vorkalibrierter Sensor. Benötigt am Arduino nur 1 Pin zum Auslesen der Daten.
https://github.com/adafruit/DHT-sensor-library
MPL3115A2 – Luftdruck und Temperatur
I²C-Sensor, misst die Temperatur genauer als der DHT11
https://github.com/sparkfun/MPL3115A2_Breakout (da gibt’s auch einen Hookup-Guide etc.)
TSL45315 – Lux / Lichteinfall (Tutorial)
I²C-Sensor, misst die Lichtmenge pro Fläche (Lux)
https://github.com/adidax/Makerblog_TSL45315 (noch sehr rudimentär, aber bei mir funktioniert’s)
Seed Studio Feuchtigkeitssensor – Bodenfeuchtigkeit
Analoger Sensor, gibt einen mit der Feuchtigkeit des Mediums steigenden Wert an einem Analogpin zurück
DHT11 fuer Temperatur und LuftfeuchtigkeitTSL45315 Lux Sensor fuer HelligkeitMPL3115A2 Barometer fuer Luftdruck und TemperaturMoisture Sensor fuer BodenfeuchteEthernet Board zur Datenuebertragung
https://www.makerblog.at/2015/06/eine-einfache-wetterstation-mit-dem-arduino-basteln/
********************************************************I*
18) Temperatur und Luftfeuchtigkeit messen – DHT11
besser DHT22
http://deskfactory.de/temperatur-und-luftfeuchtigkeit-messen-dht11
Wollen wir uns in unseren vier Wänden wohlfühlen, dann sind Temperatur und Luftfeuchtigkeit die beiden wesentlichen Faktoren.
Für Wohn- und Büroräume wird eine relative Luftfeuchtigkeit von 40 bis 50 % empfohlen.
Liegen die Werte darüber oder darunter kann das Raumgefühl als unangenehm empfunden werden.
Es empfiehlt sich, in den Wohnräumen die aktuelle Luftfeuchtigkeit zu messen und gegebenenfalls mittels regelmäßigem Stoßlüften oder Luftentfeuchtern entgegenzuwirken.
Um so schöner ist es, dass diese Werte schnell mit einem Arduino und einem günstigen DHT11 Sensor für wenig Geld ermittelt werden können.
Der Sensor DHT11 liefert uns Temperatur und die relative Luftfeuchtigkeit.
Die Daten werden über das ein Datenbus System (
1-Wire Protocol) digital übergeben.
In diesem Beispiel haben wir den DHT11 Sensor verwendet. Genauso gut kannst Du einen DHT22 verwenden.
Dieser kostet etwas mehr als der DHT11, ist dafür aber auf 1/2 Grad Celsius genau.
/**************************************************************//
// Name : DHT Test
// Author : Robert Jaenisch
// Date : 10 Feb, 2015
// Modified:
// Version : 1.0
// URL : http://deskfactory.de
// Notes : Programmcode zum Auslesen eines DHT Sensors. Der Ursprünglche Code von Rob Tillaart wurde //
// ins Deutsch übersetzt und die Ausgabe zu besseren Lesbarkeit angepasst. //
// Verweis auf den Original Code: //
// FILE: dht_test.ino
// AUTHOR: Rob Tillaart
// VERSION: 0.1.07
// PURPOSE: DHT Temperature & Humidity Sensor library for Arduino
// URL: http://arduino.cc/playground/Main/DHTLib
//
// Released to the public domain
//
//****************************************************************
// Laden der DHT Sensor Bibliothek
#include
dht DHT;
// Definieren der Datenanbindung für den passenden DHT Sensor.
// In unseren Beispiel nutzen wir einen DHT11 und somit den Arduino Uno Pin 4.
#define DHT11_PIN 4
#define DHT21_PIN 5
#define DHT22_PIN 6
int chk;
void setup()
{
Serial.begin(9600);
Serial.println("DHT TEST PROGRAM ");
Serial.print("LIBRARY VERSION: ");
Serial.println(DHT_LIB_VERSION);
Serial.println();
}
void loop()
{
// Daten für den DHT22 Sensor Lesen
/*
Serial.print("Type: DHT22, \t");
chk = DHT.read22(DHT22_PIN);
switch (chk)
{
case DHTLIB_OK:
Serial.print("Status: OK,\t");
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.print("Status: Checksum error,\t");
break;
case DHTLIB_ERROR_TIMEOUT:
Serial.print("Status: Time out error,\t");
break;
default:
Serial.print("Status: unbekannter Fehler,\t");
break;
}
// Ausgabe der Daten über die serielle Schnittstelle
Serial.print("relative Luftfeuchtigkeit (%): ");
Serial.print(DHT.humidity, 1);
Serial.print(",\tTemperatur (C)");
Serial.println(DHT.temperature, 1);
delay(1000);
*/
// Daten für den DHT21 lesen
/*
Serial.print("Type: DHT21, \t");
chk = DHT.read21(DHT21_PIN);
switch (chk)
{
case DHTLIB_OK:
Serial.print("Status: OK,\t");
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.print("Status: Checksum error,\t");
break;
case DHTLIB_ERROR_TIMEOUT:
Serial.print("Status: Time out error,\t");
break;
default:
Serial.print("Status: unbekannter Fehler,\t");
break;
}
// Ausgabe der Daten über die serielle Schnittstelle
Serial.print("relative Luftfeuchtigkeit (%): ");
Serial.print(DHT.humidity, 1);
Serial.print(",\tTemperatur (C)");
Serial.println(DHT.temperature, 1);
delay(1000);
*/
// Daten für den DHT11 Sensor lesen
Serial.print("Type: DHT11, \t");
chk = DHT.read11(DHT11_PIN);
switch (chk)
{
case DHTLIB_OK:
Serial.print("Status: OK,\t");
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.print("Status: Checksum error,\t");
break;
case DHTLIB_ERROR_TIMEOUT:
Serial.print("Status: Time out error,\t");
break;
default:
Serial.print("Status: unbekannter Fehler,\t");
break;
}
// Ausgabe der Daten über die serielle Schnittstelle
Serial.print("relative Luftfeuchtigkeit (%): ");
Serial.print(DHT.humidity, 1);
Serial.print(",\tTemperatur (C)");
Serial.println(DHT.temperature, 1);
delay(1000);
}
//
// ENDE DER DATEI
//
http://deskfactory.de/temperatur-und-luftfeuchtigkeit-messen-dht11
********************************************************I*
19.1) Eine Mini-Wetterstation mit Analoganzeige Teil 1 von 2
Temperatur und Luftfeuchtigkeit Sensor DHT11 und LCD-Display 2x16
include <LiquidCrystal.h>
#include <DHT.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
dht DHT;
int DHT11_PIN =8;
int Init_Delay = 1000;
int chk;
// Hilfsfunktion, um das Display zu löschen
void clean_lcd() {
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
}
void setup() {
// Serielle Verbindung über den USB Port mit 9600 baud öffnen:
Serial.begin(9600);
Serial.println("DHT TEST PROGRAM ");
Serial.print("LIBRARY VERSION: ");
Serial.println(DHT_LIB_VERSION);
Serial.println();
lcd.begin(16, 2);
chk = DHT.read11(DHT11_PIN);
lcd.setCursor(0, 1);
switch (chk)
{
case DHTLIB_OK:
lcd.print("Status: OK");
break;
case DHTLIB_ERROR_CHECKSUM:
lcd.print("Status: Checksum error");
break;
case DHTLIB_ERROR_TIMEOUT:
lcd.print("Status: Time out error");
break;
default:
lcd.print("Status: unbekannter Fehler");
break;
}
delay(Init_Delay);
}
void loop()
{
// Daten für den DHT11 Sensor lesen
chk = DHT.read11(DHT11_PIN);
clean_lcd();
lcd.setCursor(0,0);
lcd.print("Type: DHT11");
clean_lcd();
lcd.setCursor(0,0);
lcd.print("Temp: "+String(DHT.temperature)+" C");
lcd.setCursor(0,1);
lcd.print("Luftf: "+String(DHT.humidity)+" %");
delay(1000);
// Ausgabe der Daten über die serielle Schnittstelle
Serial.print("relative Luftfeuchtigkeit (%): ");
Serial.print(DHT.humidity, 1);
Serial.print(",\tTemperatur (C)");
Serial.println(DHT.temperature, 1);
}
http://deskfactory.de/arduino-wetterstation-dht11-lcd
19.2) Eine Mini-Wetterstation mit Analoganzeige Teil 2 von 2
Analoge Temperatur-Groß-Anzeige mit Modellbau-Servo
http://deskfactory.de/wetterstation-servo-arduino
********************************************************I*
20) DHT22 / AM2302-Luftfeuchte und Temperatursensor
Sensoren zur Messung der Luftfeuchte sind oft nicht gerade billig.
Ein recht preiswerter und einfach verwenbarerer Sensor ist der DHT22 bzw. baugleiche AM2302.
Der DHT22 ist ein zuverlässiger Sensor zum ermitteln von Temperatur und Luftfeuchtigkeit.
Da der Sensor sowohl mit 3,3V als auch 5V betrieben werden kann, eignet er sich zum Anschluss an alle gängige Boards wie Arduino,
RN-Control, Raspberry Pi und alle anderen Mikrocontroller.
Neben der Betriebsspannung muss lediglich ein Port mit dem Sensor verbinden werden.
Die Ausgabe erfolgt seriell als digitale Bitfolge.
Somit eignet sich der Sensor ideal um das Raumklima zu überwachen oder eine Wetterstation aufzubauen.
Datenblatt DHT22 (PDF)
Weiteres Datenblatt DHT22 (PDF)
+5,0V Data n.c. GND
Pin 1 und Pin2 werden mit einem 10k Ohm Widerstand verbunden
Technische Daten:
- Digital Temperatur und Luftfeuchtigkeit ermitteln
- Chip Typ DHT22
- Betriebsspannung: DC 3.3-5.5V
- Luftfeuchtigkeitsmessbereich : 0 bis 100% relative Luftfeuchte
- Feuchtemessgenauigkeit: ±2% RH
- Temperaturbereich: -40 bis +80 C
- Temperaturmessgenauigkeit ±0.5
- Single-Bus – Digitalsignalausgang, bidirektionale serielle Daten
- zahlreiche Beispielprogramme für gängige Board im Internet verfügbar
- Maße: 28mm x 12mm x 10mm
Der DHT ist im Sketch an pin9 angeschlossen nicht an pin2 wi im schaltbild
#include "DHT.h" #define DHTPIN 9 #define DHTTYPE DHT22 //DHT11, DHT21, DHT22 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); Serial.println("DHT22 - Test!"); dht.begin();} void loop() { float h = dht.readHumidity(); //Luftfeuchte auslesen float t = dht.readTemperature(); //Temperatur auslesen // Prüfen ob eine gültige Zahl zurückgegeben wird. Wenn NaN (not a number) zurückgegeben wird, dann Fehler ausgeben. if (isnan(t) || isnan(h)) { Serial.println("DHT22 konnte nicht ausgelesen werden"); } else { Serial.print("Luftfeuchte: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperatur: "); Serial.print(t); Serial.println(" C"); }}
Quelle:
http://www.mikrocontroller-elektronik.de/dht22-am2302-luftfeuchte-und-temperatursensor/
********************************************************I*
21.1) Arduino – Temperatur messen und mit Webserver ausgeben
– DHT22 DHT11 AM2302
Der Arduino mit Ethernetshield ist eine tolle Sache, den hiermit hat man die Möglichkeit Ergebnisse des laufenden Sketch anzuzeigen.
In meinem Fall wird die Temperatur und Luftfeuchtigkeit auf dem Webserver ausgegeben.
ACHTUNG:
es gibt einige verschiedene Versionen der DHT.h Library mein Sketch/Code bezieht sich auf die DHT.h von hier
https://github.com/markruys/arduino-DHT
bzw. hier ist der download ->
https://github.com/markruys/arduino-DHT/archive/master.zip
NUR mit diesem File lässt sich der Code kompilieren und uploaden.
/*
* Code von
* https://blog.silvertech.at
*/
// Includes for Temperature and Humidity Sensor
#include "DHT.h"
// Includes for Ethernet
#include <SPI.h>
#include <Ethernet.h>
// Definitions for DHT
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht;
// Definitions for Ethernet Web Server
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,1,90 };
EthernetServer server(80);
// Led Pins
const int greenLed = 7;
const int redLed = 6;
//Led handling stuff
long waitUntil=0;
boolean greenLedState = true;
void setup()
{
//Initialize
Ethernet.begin(mac, ip);
server.begin();
dht.setup(2);
// Define led pin modes
pinMode(greenLed, OUTPUT);
pinMode(redLed, OUTPUT);
}
void loop()
{
// Each time through loop(), set green Led to the same value as the state variable
digitalWrite(greenLed, greenLedState); // Nothing will change until millis() increments by 1000
if (millis() &amp;gt;= waitUntil) {
greenLedState = !(greenLedState); // Toggle the LED's state
waitUntil = millis() + 1000; // Make sure we wait for another 1000 milliseconds.
}
//Process Web requests
EthernetClient client = server.available();
if (client) {
// an http request ends with a blank line
boolean current_line_is_blank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
// if we've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so we can send a reply
if (c == '\n' &amp;amp;&amp;amp; current_line_is_blank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
//read and send temperature
float h = dht.getHumidity();
float t = dht.getTemperature();
if (isnan(t) || isnan(h)) {
client.println("tmp_unknown");
client.println("hum_unknown");
} else {
client.print("tmp_");
client.print(t);
client.print(' ');
client.print("hum_");
client.print(h);
}
// in case of problems turn on red led
if (t &amp;lt;= 35.0){
digitalWrite(redLed, LOW);
}else{
digitalWrite(redLed, HIGH);
}
client.println("&amp;lt;/PRE&amp;gt;");
break;
}
if (c == '\n') {
// we're starting a new line
current_line_is_blank = true;
} else if (c != '\r') {
// we've gotten a character on the current line
current_line_is_blank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
client.stop();
}
}
Quelle.
https://blog.silvertech.at/arduino-temperatur-messen-und-mit-webserver-ausgeben-dht22-dht11-am2302/
21.2) Arduino – Temperatur messen mit 1Wire Sensor
OneWire Sensor DS18S20 DS18B20 DS1820
-OneWire Sensor – Wasserdicht oder eine einfache Variante
–Arduino IDE
–OneWire Library
OneWire Library und kopieren diese anschließend in den Arduino IDE Ordner unter den Pfad
\arduino-1.0.6\libraries
Bei einen Wasserdichten Sensor:
Schwarz = GND Gelb bzw. Weiß = Daten
Rot = +5V
#include <OneWire.h>
int DS18S20_Pin = 2; // DS18S20 Signal pin on digital 2
// Temperature chip i/o
OneWire ds(DS18S20_Pin); // on digital pin 2
void setup(void) {
Serial.begin(9600);
}
void loop(void) {
float temperature = getTemp();
Serial.println(temperature);
delay(1000); // just here to slow down the output so it is easier to read
}
float getTemp(){
// returns the temperature from one DS18S20 in DEG Celsius
byte data[12];
byte addr[8];
if ( !ds.search(addr)) {
// no more sensors on chain, reset search
ds.reset_search();
return -1000;
}
if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return -1000;
}
if ( addr[0] != 0x10 && addr[0] != 0x28) {
Serial.print("Device is not recognized");
return -1000;
}
ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end
byte present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
for (int i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
}
ds.reset_search();
byte MSB = data[1];
byte LSB = data[0];
float tempRead = ((MSB << 8) | LSB); //using two's compliment
float TemperatureSum = tempRead / 16;
return TemperatureSum;
}
https://blog.silvertech.at/arduino-temperatur-messen-mit-1wire-sensor-ds18s20ds18b20ds1820/
********************************************************I*
22) Schimmelwarner mit DHT22 MLX90614 und 40x4 LCD Display
https://www.wetterochs.de/wetter/feuchte.html
http://www.wetterochs.de/wetter/feuchte.html
https://www.google.at/search?q=arduino+taupunkt&cad=h
// Einbinden des DHT22
#include <i2cmaster.h>
#include "DHT.h" // Library für DHT Sensor aufgerufen
#define DHTPIN 7 // DHT Sensor wird aus PIN 9 ausgelesen
#define DHTTYPE DHT22 // DHT Type wird auf DHT22 festgelegt
DHT dht22(DHTPIN, DHTTYPE); // DHTPIN und DHTTYE in dht22 definiert
#include <LiquidCrystalFast.h>
LiquidCrystalFast lcd(12, 11, 10, 9, 5, 4, 3, 2);
// LCD pins: RS RW EN1 EN2 D4 D5 D6 D7
// make some custom characters:
byte ue[8] = { // 0 off, 1 set pixel
0b00000, // in 5x7 caracter 8. row is unused
0b01010,
0b00000,
0b10001,
0b10001,
0b10011,
0b01101,
0b00000
};
void setup(){
// create a new character
lcd.createChar(0, ue);
i2c_init(); //Initialise the i2c bus
PORTC = (1 << PORTC4) | (1 << PORTC5);//enable pullups
lcd.begin(40, 4);
dht22.begin(); // Auslesen des DHT22 beginnt
}
void loop()
{
float t = dht22.readTemperature(); // Die Temperatur wird vom DHT22 ausgelesen, Wert in "t" schreiben
float h = dht22.readHumidity(); // Die Luftfeuchte wird vom DHT22 ausgelesen, Wert in "h" schreiben
float a = 17.271;
float b = 237.7;
float taupunktTemp = (a * t) / (b + t) + log(h/100);
float p = (b * taupunktTemp) / (a - taupunktTemp);
int dev = 0x5A<<1;
int data_low = 0;
int data_high = 0;
int pec = 0;
i2c_start_wait(dev+I2C_WRITE);
i2c_write(0x07);
// read
i2c_rep_start(dev+I2C_READ);
data_low = i2c_readAck(); //Read 1 byte and then send ack
data_high = i2c_readAck(); //Read 1 byte and then send ack
pec = i2c_readNak();
i2c_stop();
//This converts high and low bytes together and processes temperature, MSB is a error bit and is ignored for temps
double tempFactor = 0.02; // 0.02 degrees per LSB (measurement resolution of the MLX90614)
double tempData = 0x0000; // zero out the data
int frac; // data past the decimal point
// This masks off the error bit of the high byte, then moves it left 8 bits and adds the low byte.
tempData = (double)(((data_high & 0x007F) << 8) + data_low);
tempData = (tempData * tempFactor)-0.01;
float celcius = 1.38*(tempData - 273.15);
float fahrenheit = (celcius*1.8) + 32;
lcd.setCursor(0, 0); // Anfang auf Stelle 0, Zeile 0 setzen
lcd.print("Lufttemp. :"); // Temp. : auf LCD ausgeben
lcd.setCursor(13, 0); // Anfang auf Stelle 9, Zeile 0 setzen
lcd.print(t ,1); // Wert aus "t" ausgeben (Temperatur)
lcd.setCursor(17, 0); // Anfang auf Stelle 15, Zeile 0 setzen
lcd.write(0xD0 + 15); // Grad-Zeichen (Arduino 1.00)
lcd.print("C Wandtermp.: "); // C auf LCD ausgeben
lcd.print(celcius ,1);
lcd.write(0xD0 + 15); // Grad-Zeichen (Arduino 1.00)
lcd.setCursor(39, 0);
lcd.print("C");
lcd.setCursor(0, 1); // Anfang auf Stelle 0, Zeile 1 setzen
lcd.print("Luftfeuchte:"); // Luft.: auf LCD ausgeben
lcd.setCursor(13, 1); // Anfang auf Stelle 9, Zeile 1 setzen
lcd.print(h ,1); // Wert aus "h" ausgeben (Luftfeuchtigkeit)
lcd.setCursor(18, 1); // Anfang auf Stelle 15, Zeile 1 setzen
lcd.print("% Taupunkt : "); // % auf LCD ausgeben
lcd.print(p ,1);
lcd.write(0xD0 + 15);
lcd.print("C");
lcd.setCursor(1, 3);
// if(celcius - taupunktTemp < 0) // richtige Formel
if(celcius - taupunktTemp > 0) // zum Testen
{
lcd.print("!!! Achtung L");
lcd.write(0);
lcd.print("ften, Schimmelgefahr !!!");
delay(1500);
lcd.setCursor(1, 3);
lcd.print(" ");
//delay(500);
}}
Quelle:
https://forum.arduino.cc/index.php?topic=227838.0
********************************************************I*
Vor ein paar Tagen habe ich mir zwei DHT22 Sensoren bei Watterott bestellt, die sowohl Temperatur als auch Luftfeuchtigkeit mit ausreichender Genauigkeit messen können.
Im ersten Sketch lese ich die Daten aus und gebe sie seriell sowohl auf einem angeschlossenen Sparkfun LCD als auch über die serielle Schnittstelle aus.
Zum Auslesen des Sensors gibt es von Adafruit eine
Bibliothek, die folgende Seite zeigt auch die Beschaltung:
http://learn.adafruit.com/dht/connecting-to-a-dhtxx-sensor
// Beispielcode, um Temperatur/Luftfeuchtigkeit// eines DHT22 auf einem Sparkfun SerialLCD auszugeben #include "DHT.h"#include <SoftwareSerial.h> #define DHTPIN 2 // Pin für den DHT22SoftwareSerial mySerial(4,3); // SoftwareSerial für das LCD #define DHTTYPE DHT22 // DHT 22 (AM2302)DHT dht(DHTPIN, DHTTYPE); void setup() { mySerial.begin(9600); // starte LCD Verbindung Serial.begin(9600); // starte zus. serielle Verbindung delay(500); // wait for display to boot up mySerial.write(254); // setze Cursor in die erste Zeile mySerial.write(128); mySerial.write(" "); // clear LCD mySerial.write(" "); delay(500); mySerial.write(" DHT22 Sensor"); dht.begin();} char tempstring[10], humstring[10]; void loop() { float h = dht.readHumidity(); float t = dht.readTemperature(); delay(5000); // lese alle 5 Sekunden ein // check if returns are valid, if they are NaN (not a number) then something went wrong! if (isnan(t) || isnan(h)) { mySerial.write(254); // move cursor to beginning of first line mySerial.write(128); mySerial.println("DHT22 nicht gefunden"); } else { mySerial.write(254); // move cursor to beginning of first line mySerial.write(128); mySerial.write(" "); // clear display mySerial.write(" "); mySerial.write(254); // move cursor to beginning of first line mySerial.write(128); mySerial.print("Luftf: "); mySerial.print(h); mySerial.print(" %"); Serial.println(h); mySerial.write(254); // move cursor to beginning of 2nd line mySerial.write(192); mySerial.print("Temp: "); mySerial.print(t); mySerial.print(" *C"); Serial.println(t); }}
https://www.uweziegenhagen.de/?p=2821
********************************************************I*
24) Temperatur und relative Luftfeuchtigkeit messen
Arduino Lektion 6: Sensor DHT11
include <dht.h> // DHT Library von Arduino
dht DHT; // Zuweisen eines Objektes zur Bibliothek
int sensorPin = 13 ;// Bestimmen das der Sensor DHT11 an den PWM PIN 13 angeschlossen ist.
void setup() {
Serial.begin(115200); // Verbindungsgeschwindigkeit (Baudrate) auf 115200 setzen. Dieses muss mit der Übertragungsrate im Serial Monitor übereinstimmen.
}
void loop() {
int chk = DHT.read11(sensorPin); //Status holen
switch (chk)
{
//Wenn alles OK ist.
case DHTLIB_OK:
break;
//Bei einem Checksummenfehler
case DHTLIB_ERROR_CHECKSUM:
Serial.print("Checksummenfehler");
break;
//Bei einer Zeitüberschreitung der Anforderung.
case DHTLIB_ERROR_TIMEOUT:
Serial.print("Zeitüberschreitung");
break;
default:
break;
}
//Werte ausgeben
Serial.print("Temperatur: ");
Serial.print(DHT.temperature, 1); //Die Temperatur auslesen.
Serial.println("C");
Serial.print("Luftfeuchtigkeit: ");
Serial.print(DHT.humidity, 1); // Die Luftfeuchtigkeit auslesen.
Serial.println("%");
Serial.println("");
//Eine Pause von 2sek. der Sensor DHT11 stellt alle 2sek neue Werte zur Verfügung daher
//ist ein Wert < 2sek. nicht möglich bzw. unnötig.
delay(2000);
}
https://draeger-it.blog/sainsmart-lektion-6-sensor-dht11-temperatur-und-relative-luftfeuchtigkeit-messen/
********************************************************I*
25) Temperatur / Luftfeuchte messen und auf Serial LCD ausgeben
ich möchte euch an einem kleinen Beispiel mal demonstrieren, wie ihr die Temperatur und die Luftfeuchtigkeit mit Hilfe eines DHT22 auslest und die Daten auf einem I2C 1602 LCD ausgebt und zusätzlich am seriellen Monitor euch ansehen könnt.
Folgende Bauteile habe ich verwendet:
1x SainSmart I2C 1602 Serial LCD Module
1x DHT22 Temperatur Luftfeuchte-Sensor
1x 10k Widerstand
ein paar Anschlusskabel
Angeschlossen werden die Komponenten wie folgt:
Folgende Library habe ich verwendet:
Library für DHT22
Library für I2C 1602 LCD
Library Wire aus Arduino 1.0.3
Hier der verwendete Sketch mit Hinweisen:
// Einbinden des DHT22
#include "DHT.h" // Library für DHT Sensor aufgerufen
#define DHTPIN 2 // DHT Sensor wird aus pin2 (pin9) ausgelesen
#define DHTTYPE DHT22 // DHT Type wird auf DHT22 festgelegt
DHT dht22(DHTPIN, DHTTYPE); // DHTPIN und DHTTYE in dht22 definiert
// Einbinden des LCD
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
int n = 1;
LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
void setup()
{
Serial.begin(9600); // Serielle Ausgabe beginnen mit 9600baud
Serial.println("DHT22 Serielle Ausgabe"); // Begrüßung beim Aufruf vom seriellen Monitor
dht22.begin(); // Auslesen des DHT22 beginnt
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
lcd.home (); // go home
lcd.begin(16, 2); // LCD Hintergrundbeleuchtung aktivieren
}
void loop()
{
float t = dht22.readTemperature(); // Die Temperatur wird vom DHT22 ausgelesen, Wert in "t" schreiben
float h = dht22.readHumidity(); // Die Luftfeuchte wird vom DHT22 ausgelesen, Wert in "h" schreiben
Serial.print("Temperatur: "); // Ausgabe im Seriellen Monitor
Serial.print(t); // Ausgabe im Seriellen Monitor
Serial.print(" C\t"); // Ausgabe im Seriellen Monitor
Serial.print("Luftfeuchte: "); // Ausgabe im Seriellen Monitor
Serial.print(h); // Ausgabe im Seriellen Monitor
Serial.println(" %"); // Ausgabe im Seriellen Monitor
lcd.setCursor(0, 0); // Anfang auf Stelle 0, Zeile 0 setzen
lcd.print("Temp. :"); // Temp. : auf LCD ausgeben
lcd.setCursor(9, 0); // Anfang auf Stelle 9, Zeile 0 setzen
lcd.print(t); // Wert aus "t" ausgeben (Temperatur)
lcd.setCursor(15, 0); // Anfang auf Stelle 15, Zeile 0 setzen
lcd.print("C"); // C auf LCD ausgeben
lcd.setCursor(0, 1); // Anfang auf Stelle 0, Zeile 1 setzen
lcd.print("Luftf.:"); // Luft.: auf LCD ausgeben
lcd.setCursor(9, 1); // Anfang auf Stelle 9, Zeile 1 setzen
lcd.print(h); // Wert aus "h" ausgeben (Luftfeuchtigkeit)
lcd.setCursor(15, 1); // Anfang auf Stelle 15, Zeile 1 setzen
lcd.print("%"); // % auf LCD ausgeben
}
Quelle.
https://www.arduinoforum.de/arduino-Thread-Tutorial-Temperatur-Luftfeuchte-messen-und-auf-LCD-ausgeben
********************************************************I*
26) Lueftersteuerung um den Keller zu trocknen
___________________________________
Verwendete Teile:
Arduino R3
Sainsmart 1602 LCD Keypad Shield
optoelektronisches Relais
2x DHT22
___________________________________
Key Codes (in left-to-right order):
None - 0
Select - 1
Left - 2
Up - 3
Down - 4
Right - 5
___________________________________
*/
#include <dht.h>
#include <LiquidCrystal.h>
#include <DFR_Key.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
dht DHT;
DFR_Key keypad;
#define dhtA 12
#define dhtI 13
#define relais 11
int localKey = 0; //Tastenerkennung
String keyString = ""; //??
double dewPointFast(double celsius, double humidity) //Taupunkt berechnung
{
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;
}
float dewI = 0; //Taupunkt Innen
float dewA = 0; //Taupunkt Aussen
float tempI = 0;//Temperatur Innen
float tempA = 0;//Temperatur Aussen
float humI = 0; //Luftfeuchtigkeit Innen
float humA = 0; //Luftfeuchtigkeit Aussen
int hysterese = 1; //Hysterse (mal 2) für die Schaltung
long count = 0; //Counter fuer die Eingabe
int statL = 0; //Status der Luefter
int menueH = 0; //Durchs Hauptmenue gehen
//int menueS = 0; //Menue bei Select
int menueC = 0;
int intro = 0;
long previousMillis = 0;
long milliMil = 0;
long milliMin = 0;
long milliStd = 0;
void setup()
{
Serial.begin(115200); //Verbindung Computer
pinMode(relais, OUTPUT);
digitalWrite(relais, HIGH);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Fan Control");
lcd.setCursor(0, 1);
lcd.print("Version 0.1.9");
while(intro < 5)
{
lcd.setCursor(15, 1);
lcd.print((char)0x7C);
delay(500);
lcd.setCursor(15, 1);
lcd.print((char)0x2D);
delay(500);
intro++;
}
delay(2500);
}
void loop()
{
unsigned long currentMillis = millis();
milliMil = currentMillis - previousMillis;
milliMin = milliMil / 60000;
milliStd = milliMin / 60;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Hello Dave,");
lcd.setCursor(0, 1);
lcd.print("I'm very busy");
DHT.read22(dhtI); //Sensor Innen auslesen
//delay(500);
//DHT.read22(dhtI);
float humI = DHT.humidity;
float tempI = DHT.temperature;
float dewI = (dewPointFast(DHT.temperature, DHT.humidity));
delay(1500);
DHT.read22(dhtA); //Sensor Aussen auslesen
//delay(500);
//DHT.read22(dhtA);
float humA = DHT.humidity;
float tempA = DHT.temperature;
float dewA = (dewPointFast(DHT.temperature, DHT.humidity));
//dewA = dewA - 5; //Test!!!!!!!!!!!!!!!!!!!
if (dewA <= dewI - hysterese) //Ueberprueft die Luftfeuchtigkeit schaltet die Luefter und speichert den Status in statL
{
digitalWrite(relais, LOW); //Luefter einschalten
if (statL == 0)
{
previousMillis = millis();
}
statL = 1;
}
else if (dewA > dewI + hysterese)
{
digitalWrite(relais, HIGH); //Lufter ausschalten
if (statL == 1)
{
previousMillis = millis();
}
statL = 0;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("HAL:Im waiting");
lcd.setCursor(0, 1);
lcd.print(" for command");
count = 0;
while(count < 300000) //Menuefunktion
{
keypad.getKey();
menueH = keypad.getKey();
switch (menueH) //Einzelne Menuepunkte
{
case 1:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Luefter:");
lcd.setCursor(9, 0);
Serial.println(statL);//loeschen
if(statL == 1)
{
lcd.print("AN");
}
if(statL == 0)
{
lcd.print("AUS");
}
lcd.setCursor(0, 1);
lcd.print(milliStd);
lcd.print("Std ");
lcd.print(milliMin);
lcd.print("Min ");
delay(1000);
break;
case 2: //Relais ausschalten Pfeil nach links
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Luefter: Aus");
digitalWrite(relais, HIGH); //Schalte Relais AUS
delay(1000);//Verzögere um erneute Eingabe zu verhindern
menueC = 0; //setze Schaltzustand auf 0
while(menueC != 1) //Manueller Luefter
{
keypad.getKey();
localKey = keypad.getKey();
if (localKey == 2) //Wenn 2 gedrückt wird wird die Schleife beendet
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Automatikmodus");
lcd.setCursor(0, 1);
lcd.print("ist AN");
previousMillis = millis(); //setze Timer auf Null
digitalWrite(relais, HIGH); //Schaltet Luefter wegen Hysterese aus!
delay(1000);
menueC = 1; //beende Schleife
}
}
break;
case 3: //Anzeige Daten Aussen Pfeil nach oben
//Erste Zeile
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Aussen: ");
lcd.print(dewA);
lcd.print((char)223);
lcd.print("C");
//Zweite Zeile
lcd.setCursor(0, 1);
lcd.print(tempA);
lcd.print((char)223);
lcd.print("C ");
lcd.print(humA);
lcd.print((char)0x25);
delay(1000);
break;
case 4: //Anzeige Daten Keller Pfeil nach unten
//Erste Zeile
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Keller: ");
lcd.print(dewI);
lcd.print((char)223);
lcd.print("C");
//Zweite Zeile
lcd.setCursor(0, 1);
lcd.print(tempI);
lcd.print((char)223);
lcd.print("C ");
lcd.print(humI);
lcd.print((char)0x25);
delay(1000);
break;
case 5: //Luefter einschalten Pfeil nach rechts
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Luefter: An");
digitalWrite(relais, LOW); //Schalte Relais AN
delay(1000);//Verzögere um erneute Eingabe zu verhindern
menueC = 0; //setze Schaltzustand auf 0
while(menueC != 1) //Manueller Luefter
{
keypad.getKey();
localKey = keypad.getKey();
if (localKey == 5) //Wenn 5 gedrückt wird wird die Schleife beendet
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Automatikmodus");
lcd.setCursor(0, 1);
lcd.print("ist AN");
previousMillis = millis(); //setze Timer auf Null
digitalWrite(relais, HIGH); //Schaltet Luefter wegen Hysterese aus!
delay(1000);
menueC = 1; //beende Schleife
}
}
break;
}
if(menueH != SAMPLE_WAIT) //Setzt den Counter auf Null wenn Eingabe erfolgt ist.
{
count = 0;
}
else
{
count++; //Ohne Einmgabe laueft der Counter
}
}
Serial.println ("Innensensor:");
Serial.print ("humI: ");
Serial.println (humI);
Serial.print ("tempI: ");
Serial.println (tempI);
Serial.print ("dewI: ");
Serial.println (dewI);
Serial.println ("");
Serial.println ("Aussensensor:");
Serial.print ("humA: ");
Serial.println (humA);
Serial.print ("tempA: ");
Serial.println (tempA);
Serial.print ("dewA: ");
Serial.println (dewA);
Serial.println ("____________________");
}
http://forum.arduino.cc/index.php?topic=175778.15
********************************************************I*
27.1)Temperatur- und Feuchtigkeitsdaten auf SD-Karte zu schreiben
Datenlogger / Datalogger
DHT22
SD card Temp & Humidity datalogger
/*
SD card Temp & Humidity datalogger
This example shows how to log data from
a DHT11 temperature and humidity sensor
to an SD card using the SD library.
It also uses the Adafruit DHT sensor library from
https://github.com/adafruit/DHT-sensor-library
The circuit:
* SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 53
* DHT11 sensor connected as follows:
** Ground connected to 5
** Voltage connected to 8
** data out connected to 7
** 10K resistor connected from 7 to +5V
*/
#include <SD.h>
#include "DHT.h"
#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h>
#define DHTPIN 24 // what pin the sensor is connected to
#define DHTTYPE DHT11 // Which type of DHT sensor you're using:
#define DHT_GND 26 // ground pin of the sensor
#define DHT_VCC 22 // voltage pin of the sensor
#define TEMPERATURE 1 // for the DHT sensor
#define HUMIDITY 0 // for the DHT sensor
#define fehler 13
// initialize the sensor:
DHT dht(DHTPIN, DHTTYPE);
// On the Ethernet Shield, CS is pin 4. Note that even if it's not
// used as the CS pin, the hardware CS pin (10 on most Arduino boards,
// 53 on the Mega) must be left as an output or the SD library
// functions will not work.
const int chipSelect = 53; // 4,10,53
void setup() {
pinMode(fehler, OUTPUT);
setSyncProvider(RTC.get); // the function to get the time from the RTC
if (startSDCard() == true) {
pinMode(DHT_VCC, OUTPUT);
pinMode(DHT_GND, OUTPUT);
digitalWrite(DHT_VCC, HIGH);
digitalWrite(DHT_GND, LOW);
dht.begin();
}
}
void loop()
{
// Get the current time in ms:
long currentTime = millis();
delay(29250);// normalmodus
// delay(250); //test schnelle ergebnisse
digitalWrite(fehler, HIGH);
delay(250);
digitalWrite(fehler, LOW);
delay(250);
digitalWrite(fehler, HIGH);
delay(250);
digitalWrite(fehler, LOW);
float humidity = readSensor (HUMIDITY);
float temperature = readSensor(TEMPERATURE);
File dataFile = SD.open("datalog.csv", FILE_WRITE);
dataFile.print(humidity);
dataFile.print(";");
dataFile.println(temperature);
dataFile.print("; ");
dataFile.print(day());
dataFile.print(":");
dataFile.print(month());
dataFile.print(":");
dataFile.print(year());
dataFile.print("; ");
dataFile.print(hour());
dataFile.print(":");
dataFile.print(minute());
dataFile.print(":");
dataFile.print(second());
dataFile.print("; ");
dataFile.close();
}
boolean startSDCard() {
boolean result = false;
// Serial.print("Initializing SD card...");
// make sure that the default chip select pin is set to
// output, even if you don't use it:
pinMode(53, OUTPUT);
// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
result = false;
}
else {
File dataFile = SD.open("datalog.csv", FILE_WRITE);
if (dataFile) {
dataFile.close();
result = true;
}
}
return result;
}
float readSensor( int thisValue) {
float result;
if (thisValue == TEMPERATURE) {
result = dht.readTemperature();
}
else if (thisValue == HUMIDITY) {
// read sensor:
result = dht.readHumidity();
}
if (isnan(result)) {
result = -273.0;
}
return result;
}
https://www.arduinoforum.de/arduino-Thread-Programm-um-Temperatur-und-Feuchtigkeitsdaten-auf-Sd-Karte-zu-schreiben
27.2) Luftfeuchtigkeitsregulierung mit Arduino
Ich möchte meine Software zur Regelung der Luftfeuchte in meinem Keller vorstellen.
Die Steuerung besteht aus einem Arduino Uno, einem Ethernetshield und einem Relais + Ansteuerung, zwei DTH22 sensoren und einem Lüfter der durch die Kellerwand nach außen führt.
Wenn im keller die absolute Luftfeuchte höher als draußen ist, so läuft der Kellerlüfter an.
Bei höherer Luftfeuchte draußen schaltet der Lüfter aus.
Das System ist seit ca. 1 jahr im Einsatz und läuft recht erfolgreich. I
Ich kann meine Luftfeuchtigkeit unter 70% halten, was für einen alten Gewölbekeller mit Lehmboden ganz gut ist.
Die Sensorergebnisse werden für mich zur Funktionskontrolle getwittert.
Die ergebnisse könnt ihr hier sehen
womble.de
// Written by Mark Kingery (Mark(AT)Kingery.de), GPLV3
// DHT22 Library written by ladyada, public domain
//https://github.com/adafruit/DHT-sensor-library
// Abs. Feuchte=13,233*rel.Feuchte*((10^((7,5*T)/(237+T)))/(273,16+T))
//T=Lufttemperatur
// Sensor 1 indoor
// Sensor 2 outdoor
// this program may not be good looking but I`m staisfied
#include "DHT.h"
#include <math.h>
#include <SPI.h> // needed in Arduino 0019 or later
#include <Ethernet.h>
#include <Twitter.h>
#define DHTPIN1 6 // what pin we're connected to
#define DHTPIN2 7 // what pin we're connected to
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Ethernet Shield Settings
byte mac[] = { 0x00, 0x80, 0x41, 0x3F, 0x1E, 0xED }; //Robotron MAC Adresse
// If you don't specify the IP address, DHCP is used(only in Arduino 1.0 or later).
byte ip[] = { 192, 168, 1, 10 };
// Your Token to Tweet (get it from http://arduino-tweet.appspot.com/)
Twitter twitter("xxx"); //xxx durch eigenen Token ersetzen
// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
int led = 5;
DHT dht1(DHTPIN1, DHTTYPE);
DHT dht2(DHTPIN2, DHTTYPE);
char tmp[10];
char tosend[140];
void setup() {
Serial.begin(9600);
Serial.println("DHTxx test!");
pinMode(led, OUTPUT);
dht1.begin();
dht2.begin();
}
void loop() {
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h1 = dht1.readHumidity();
int t1 = dht1.readTemperature();
float h2 = dht2.readHumidity();
float t2 = dht2.readTemperature();
float hA1 = 0;
float hA2 = 0;
// check if returns are valid, if they are NaN (not a number) then something went wrong!
if (isnan(t1) || isnan(h1)) {
Serial.println("Failed to read from DHT");
} else {
double x = 0;
double y = 0;
double z = 0;
x= 13.233*h1;
y=7.5*t1;
z = 237+t1;
y = y/z;
float m = pow(10,y);
z = 273+t1;
m=m/z;
hA1=m*x;
Serial.print("Humidity1: ");
Serial.print(h1);
Serial.print(" %\t");
Serial.print("Temperature1: ");
Serial.print(t1);
Serial.println(" *C");
Serial.print("HumidityA1: ");
Serial.print(hA1);
Serial.println(" g");
}
if (isnan(t2) || isnan(h2)) {
Serial.println("Failed to read from DHT");
} else {
double x = 0;
double y = 0;
double z = 0;
x= 13.233*h2;
y=7.5*t2;
z = 237+t2;
y = y/z;
float m = pow(10,y);
z = 273+t2;
m=m/z;
hA2=m*x;
Serial.print("Humidity2: ");
Serial.print(h2);
Serial.print(" %\t");
Serial.print("Temperature1: ");
Serial.print(t2);
Serial.println(" *C");
Serial.print("HumidityA2: ");
Serial.print(hA2);
Serial.println(" g");
}
if (hA1 > hA2)
{
Serial.println(" fan on !");
strcat (tosend, "fan K1 on !!! ");
digitalWrite(led, LOW); // turn the LED on (HIGH is the voltage level)
} else {
Serial.println(" fan off !");
strcat (tosend, "fan K1 off !!! ");
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
}
//strcat (tosend, " ");
strcat (tosend, "Temp. inside ");
itoa((int)t1, tmp, 10); strcat (tosend, tmp);
strcat (tosend, "°c ");
strcat (tosend, "Hum. inside ");
itoa((float)h1, tmp, 10); strcat (tosend, tmp);
strcat (tosend, "% ");
strcat (tosend, "H2O ");
itoa((float)hA1, tmp, 10); strcat (tosend, tmp);
strcat (tosend, "g/m^3 ");
strcat (tosend, "Temp. outside ");
itoa((float)t2, tmp, 10); strcat (tosend, tmp);
strcat (tosend, "°c ");
strcat (tosend, "Hum. outside ");
itoa((float)h2, tmp, 10); strcat (tosend, tmp);
strcat (tosend, "% ");
strcat (tosend, "H2O ");
itoa((float)hA2, tmp, 10); strcat (tosend, tmp);
strcat (tosend, "g/m^3 ");
Serial.print(tosend);
delay(86400);//1000 mal am Tag Twittern
//delay(10000);
Ethernet.begin(mac, ip);
// or you can use DHCP for autoomatic IP address configuration.
// Ethernet.begin(mac);
if (twitter.post(tosend)) {
// 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.");
}
tosend[0] = '\0';
}
https://www.arduinoforum.de/arduino-Thread-Luftfeuchtigkeitsregulierung-mit-Arduino
********************************************************I*
28) BOSCH Barometer Sensor BME280 - Erfahrungen
Ich möchte hier kurz meine Erfahrungen mit dem BME280 von Bosch mitteilen.
Um Freude zu haben, sollte man einige Punkte beachten:
1. Der gemessene Luftdruck (zuerst die Temperatur auslesen, sonst fehlt der notwendige Kalibrierwert!) stimmt erstens und zeigt zweitens den Luftdruck an dem Ort an, wo der Sensor sich tatsächlich befindet.
Also bitte nicht im Zimmer messen, wenn man eine Wetterstation für draußen bauen will.
Der ausgegebene Wert für den Luftdruck entspricht aber jenem für die aktuelle Höhe und die aktuelle Temperatur.
Das ev vorhandene Barometer zeigt aber wahrscheinlich den auf Meeresniveau "reduzierten" Wert (ist also höher als der vom BME280 angezeigte Wert).
Will man überprüfen, ob beide Geräte übereinstimmen, muß man den vom BME280 ausgegebenen Wert auf "Meeresniveau" umrechnen.
Ch hat einen Wert von 0.12 K/hPa
Das geht so:pNN = ph * e (g*h/(R*(T+Ch*E+a*h/2)))E = 6,112hPa * e (17,62*t(°C)/(243,12+t(°C))) ACHTUNG: Magnusformel mit Koeffizienten für t = -45 bis +60°Ca = (Tm-Tb)/(hm-hb) m ... Meßort b ... Bezugsort- pNN ist der auf Meeresniveau umgerechnete Luftdruckwert in hPa- ph ist der vom BME280 ausgegebene tatsächliche Luftdruckwert am Meßort - in hPa- e ist die e-Funktion- g ist die Erdbeschleunigung, am 50. Breitengrad beträgt g=9,80665 m/s²- h ist die Höhe (m) über Meeresniveau am Meßort- R ist die Gaskonstante der Luft 287,058 J/(kg*K)- t(°C) ist die Temperatur in °C am Meßort- T ist die Temperatur in Kelvin T(K)=273,15+t(°C)- Ch ist der Beiwert zu E zur Berücksichtigung der mittleren Dampfdruckänderung mit der Höhe (K/hPa)- E (hPa) ist der Wasserdampfpartialdruck- a (K/m) ist der vertikale Temperaturgradienta ist oft unter Durchschnitts-Meeresniveau-Stardardbedingungen (t=15°C, pb=1013.25hPa, h=0m) mit 0.0065 angegeben - stimmt jedoch nicht wirklich, da durchaus in der Realität beträchtliche Abweichungen auftreten können >> also: besser selber berechnen!Zur Überprüfung kann man den Meßwert des BME280 mit dem aus der Barometrischen Höhenformel ausgerechneten Wert vergleichen:pz=pb*((1-a*(hz-hb)/(273,15+tb))^(0,03416/a))a wird wie weiter oben berechnet, z bedeutet Werte am Zielort, b sind BEKANNTE Werte am Bezugsort (von einer offiziellen, naheliegenden meteorologischen Station abzufragen)2. die gemessene Temperatur gibt lediglich einen Anhalt über die Umgebungstemperatur des BME280 (siehe Datenblatt). Wer genaue Werte für die Lufttemperatur haben will, muß schon einen externen Sensor (zB DS18B20) bemühen.3. man findet in Softwarebibliotheken (va Arduino-Bibliotheken - Adafruit weist jedoch darauf hin!) häufig Funktionen, welche die Seehöhe=Höhe über Meeresniveau, berechnet aus den BME280-Meßwerten, ausgeben. Das ist leider völlig falsch!! Ohne einen genau bekannten Referenzpunkt (p,T auf Seehöhe oder besser einen naheliegenden Ort plus p,T am Zielort) kann die Höhe am Zielort aus den Sensorwerten NICHT ermittelt werden.4. man kann weiters auch die Absolute LuftfeuchteaF(kg/m³)=rF*E/(Rw*T)*10mit Rw=461,51 J/(kg*K) und rF (relative Feuchte) als Quotient (nicht als%-Zahl!)und den Taupunkt (wieder Magnusformel für t=-45 bis +60°C heranziehen)τ(φ,ϑ) = K3 ⋅ ((K2 ⋅ ϑ)/(K3 + ϑ) + ln φ)/(K2 ⋅ K3/(K3 + ϑ) − lnφ)φ: relative Luftfeuchte (Quotient) ϑ: Temperatur in °CK1=6.112hPaK2=17,62K3=243,12Kaus den Meßwerten herleiten (Details bitte aus dem Internet entnehmen).
Anbei ein rasch zusammengezimmertes Beispiel für obige Überlegungen mit der Sparkfun-Bibliothek und dem umgebauten Sparkfun-Beispiel:
******************************************************************************Board: Arduino UNOSensor: BME280ACHTUNG: bei der Berechnung der Seehöhe muß man den aktuellen Luftdruckwert (Pa) auf Meeresniveau als Parameter übergeben >> sonst kommt Mist heraus******************************************************************************/#include <stdint.h>#include "SparkFunBME280.h"//Library allows either I2C or SPI, so include both.#include "Wire.h"#include "SPI.h"#include <math.h>#define a 0.00602 // ACHTUNG: 0.0065 gilt nur für Standardbedingungen h=0m T=15°C p=1013,25hPa // besser aktuell berechnen: a= (Tz-Tb)/(hz-hb) z=Zielpunkt b=Bezugspunkt (kann Ort am Meer sein)#define pSL 100800.0//Global sensor objectBME280 mySensor;float La, RH, TP, E, H, T, pNN, pH;void setup(){ //***Driver settings********************************// //commInterface can be I2C_MODE or SPI_MODE //specify chipSelectPin using arduino pin names //specify I2C address. Can be 0x77(default) or 0x76 //For I2C, enable the following and disable the SPI section //mySensor.settings.commInterface = I2C_MODE; //mySensor.settings.I2CAddress = 0x77; //For SPI enable the following and dissable the I2C section mySensor.settings.commInterface = SPI_MODE; mySensor.settings.chipSelectPin = 10; //***Operation settings*****************************// //renMode can be: // 0, Sleep mode // 1 or 2, Forced mode // 3, Normal mode mySensor.settings.runMode = 3; //Normal mode //tStandby can be: // 0, 0.5ms // 1, 62.5ms // 2, 125ms // 3, 250ms // 4, 500ms // 5, 1000ms // 6, 10ms // 7, 20ms mySensor.settings.tStandby = 0; //filter can be off or number of FIR coefficients to use: // 0, filter off // 1, coefficients = 2 // 2, coefficients = 4 // 3, coefficients = 8 // 4, coefficients = 16 mySensor.settings.filter = 0; //tempOverSample can be: // 0, skipped // 1 through 5, oversampling *1, *2, *4, *8, *16 respectively mySensor.settings.tempOverSample = 1; //pressOverSample can be: // 0, skipped // 1 through 5, oversampling *1, *2, *4, *8, *16 respectively mySensor.settings.pressOverSample = 1; //humidOverSample can be: // 0, skipped // 1 through 5, oversampling *1, *2, *4, *8, *16 respectively mySensor.settings.humidOverSample = 1; Serial.begin(57600); Serial.print("Program Started\n"); Serial.print("Starting BME280... result of .begin(): 0x"); //Calling .begin() causes the settings to be loaded delay(10); //Make sure sensor had enough time to turn on. BME280 requires 2ms to start up. Serial.println(mySensor.begin(), HEX); Serial.print("Displaying ID, reset and ctrl regs\n"); Serial.print("ID(0xD0): 0x"); Serial.println(mySensor.readRegister(BME280_CHIP_ID_REG), HEX); Serial.print("Reset register(0xE0): 0x"); Serial.println(mySensor.readRegister(BME280_RST_REG), HEX); Serial.print("ctrl_meas(0xF4): 0x"); Serial.println(mySensor.readRegister(BME280_CTRL_MEAS_REG), HEX); Serial.print("ctrl_hum(0xF2): 0x"); Serial.println(mySensor.readRegister(BME280_CTRL_HUMIDITY_REG), HEX); Serial.print("\n\n"); Serial.print("Displaying all regs\n"); uint8_t memCounter = 0x80; uint8_t tempReadData; for(int rowi = 8; rowi < 16; rowi++ ) { Serial.print("0x"); Serial.print(rowi, HEX); Serial.print("0:"); for(int coli = 0; coli < 16; coli++ ) { tempReadData = mySensor.readRegister(memCounter); Serial.print((tempReadData >> 4) & 0x0F, HEX);//Print first hex nibble Serial.print(tempReadData & 0x0F, HEX);//Print second hex nibble Serial.print(" "); memCounter++; } Serial.print("\n"); } Serial.print("\n\n"); Serial.print("Displaying concatenated calibration words\n"); Serial.print("dig_T1, uint16: "); Serial.println(mySensor.calibration.dig_T1); Serial.print("dig_T2, int16: "); Serial.println(mySensor.calibration.dig_T2); Serial.print("dig_T3, int16: "); Serial.println(mySensor.calibration.dig_T3); Serial.print("dig_P1, uint16: "); Serial.println(mySensor.calibration.dig_P1); Serial.print("dig_P2, int16: "); Serial.println(mySensor.calibration.dig_P2); Serial.print("dig_P3, int16: "); Serial.println(mySensor.calibration.dig_P3); Serial.print("dig_P4, int16: "); Serial.println(mySensor.calibration.dig_P4); Serial.print("dig_P5, int16: "); Serial.println(mySensor.calibration.dig_P5); Serial.print("dig_P6, int16: "); Serial.println(mySensor.calibration.dig_P6); Serial.print("dig_P7, int16: "); Serial.println(mySensor.calibration.dig_P7); Serial.print("dig_P8, int16: "); Serial.println(mySensor.calibration.dig_P8); Serial.print("dig_P9, int16: "); Serial.println(mySensor.calibration.dig_P9); Serial.print("dig_H1, uint8: "); Serial.println(mySensor.calibration.dig_H1); Serial.print("dig_H2, int16: "); Serial.println(mySensor.calibration.dig_H2); Serial.print("dig_H3, uint8: "); Serial.println(mySensor.calibration.dig_H3); Serial.print("dig_H4, int16: "); Serial.println(mySensor.calibration.dig_H4); Serial.print("dig_H5, int16: "); Serial.println(mySensor.calibration.dig_H5); Serial.print("dig_H6, uint8: "); Serial.println(mySensor.calibration.dig_H6); Serial.println(); delay(5000);}void loop(){ //Each loop, take a reading. //Start with temperature, as that data is needed for accurate compensation. //Reading the temperature updates the compensators of the other functions //in the background. T=mySensor.readTempC(); Serial.print("Temperatur: "); Serial.print(T,2); Serial.println(" °C"); /*Serial.print("Temperature: "); Serial.print(mySensor.readTempF(), 2); Serial.println(" degrees F");*/ pH=mySensor.readFloatPressure()/100.0; Serial.print("Luftdruck vor Ort: "); Serial.print(pH, 2); Serial.println(" hPa"); H=mySensor.readFloatAltitudeMeters(pSL); E=6.112*exp((17.62*T)/(243.12+T)); pNN=pH*exp(9.80665*H/(287.058*((273.15+T)+0.12*E+a*H/2))); Serial.print("Luftdruck reduziert: "); Serial.print(pNN, 2); Serial.println(" hPa"); Serial.print("Höhe über Meer: "); Serial.print(H, 2); Serial.println("m"); /*Serial.print("Altitude: "); Serial.print(mySensor.readFloatAltitudeFeet(), 2); Serial.println("ft"); */ RH=mySensor.readFloatHumidity(); Serial.print("Relative Luftfeuchte: "); Serial.print(RH, 2); Serial.println(" %"); La=RH*E/(461.51*(273.15+T))*10000.0; Serial.print("Absolute Luftfeuchte: "); Serial.print(La, 2); Serial.println(" g/m³"); TP=243.12*((17.62*T)/(243.12+T)+log(RH/100.0))/((17.62*243.12)/(243.12+T)-log(RH/100.0)); Serial.print("Taupunkt: "); Serial.print(TP, 2); Serial.println(" °C"); Serial.println(); delay(5000);}
|
https://www.mikrocontroller.net/topic/415860
********************************************************I*
BUCH
Manuel Odendahl
29) ARDUINO Physical Computing für Bastler, Designer & Geeks
O'REILY-Verlag
ISBN: 3-8972-1893-3
********************************************************I*
-
Absolute Luftfeuchtigkeit:
- Sagt aus, wieviel Masse an Wasser ist in einem bestimmten Volumen Luft enthalten ist.
- Dieser Wert ist nicht temperaturabhäng - was logisch ist: Heizt man einen luftdichten Raum auf, ist danach die gleiche Masse Wasser in der Luft wie vorher. Ändert man also nur die Lufttemperatur, bleibt die absolute Luftfeuchte gleich.
- Die absolute Luftfeuchte in einem Raum kann also nur durch Lüften oder Entfeuchten geändert werden.
-
Relative Luftfeuchtigkeit:
- Man stelle sich die Luft als Schwamm vor.
- Die relative Luftfeuchtigkeit gibt in Prozent an, wie voll der Schwamm (die Luft) in Prozent mit Wasser vollgesogen ist. Bei 100% ist der Schwamm voll und tropft - im Fall der Luft bedeutet das: Das Wasser kondensiert. Die Fähigkeit der Luft, Wasser zu speichern, ist stark temperaturabhäng. Kalte Luft kann kaum Wasser aufnehmen (die 100% sind schnell erreicht), warme Luft viel mehr.
- Man kann die relative Luftfeuchtigkeit also - im Gegensatz zur absoluten - auch durch Heizen senken.
-
Taupunkttemperatur:
- Das ist die hypothetische Temperatur, bei der die relative Luftfeuchte - ausgehend von einer aktuellen Temperatur und gleichzeitig gemessener Luftfeuchtigkeit - genau 100% betragen würde.
- Ist eine Stelle im Raum kälter, ist dort die Luftfeuchtigkeit bei über 100% und Wassertropfen kondensieren.
https://forum.fhem.de/index.php?topic=29773.0
********************************************************I*
Zum Ende der Metadaten springen
Zum Anfang der Metadaten
Diese Formel berechnet aus der relativen Luftfeuchtigkeit die absolute Luftfeuchtigkeit.
Ausgegeben wird dabei die aktuelle Menge des Wasserdampfs in Gramm pro Kubikmeter Luft.
Mein Anwendungsfall ist, zu berechnen, ob ein Lüften sinnvoll bzw. erlaubt ist oder nicht.
Das geht nicht mit der relativen Luftfeuchtigkeit in %, sondern nur mit der absoluten Luftfeuchtigkeit. Beim Lüften soll trockenere Luft von außen (=wenig Wasser in der Luft) in einen Raum mit feuchterer Luft (=viel Wasser in der Luft) gebracht werden.
Da die relative Luftfeuchtigkeit jedoch temperaturabhängig ist, muss eine "Lüftungsempfehlung" mit der absoluten Luftfeuchtigkeit berechnet werden.
Bevor du beginnst, stelle sicher, dass du für die Berechnung folgende Informationen in
Loxone verfügbar hast:
- I1 ... Temperatur (in °C)
- I2 ... Relative Luftfeuchtigkeit (in %)
- I3 ... Aktueller Luftdruck (in Millibar)
- Für den Vergleich Innen <-> Außen benötigst du die Temperatur und die relative Luftfeuchtigkeit von innen und außen.
- Den Luftdruck benötigst du nur einmal, da der innen und außen gleich ist.
- Die Daten für außen können natürlich auch von einem Wetterdienst kommen.
Der Ausgang gibt Gramm Wasser pro Kubikmeter Luft (g/m³) aus.
Loxone Konfiguration
Beispiel-Download: Abs Feuchte.zip
Dieses Beispiel berechnet mit den zwei Formeln die absolute Luftfeuchtigkeit von innen und von außen.
Innentemperatur ist 21°C bei 79% Luftfeuchtigkeit.
Das ist eine hohe Luftfeuchtigkeit, es sollte gelüftet werden.
Die Außentemperatur ist 27°C und 63% Luftfeuchtigkeit.
Die Berechnung kommt zu dem Schluss, dass im Raum derzeit 14,76 Gramm Wasser pro Kubikmeter in der Luft steht, während außen sogar 16,58 Gramm in der Luft sind. Ein Lüften würde sogar feuchtere Luft in den Raum bringen -> man sollte also jetzt nicht lüften!
Formel
Die verwendete Formel entstand aus den Formeln der Website
http://www.ib-rauch.de/bautens/formel/abs_luftfeucht.html.
Ich habe die ganzen Berechnungen so zusammengefasst, dass eine einzige Formel herauskommt, die natürlich entsprechend kompliziert ist.
Hinweise dazu:
Sollte dir der Luftdruck in bar (nicht in Millibar) vorliegen, kannst du die Formel ändern - in der Formel kommt zweimal I3/1000 vor, um Millibar in Bar umzurechnen.
Entferne einfach die beiden /1000 und verwende am Eingang bar.
Die Relative Luftfeuchtigkeit muss in Prozent (0 bis 100%) angegeben werden.
Sollte dir die relative Luftfeuchtigkeit in der Form 0 bis 1 vorliegen, kannst du ebenfalls die Formel ändern:
Ersetze I2/100 durch I2 (kommt auch zweimal vor)
Zum Kopieren hier die Formel:
Absolute Luftfeuchtigkeit
0.622 * I2/100 * (1.01325 * 10^(5.426651 - 2005.1 / (I1 + 273.15) + 0.00013869 * ((I1 + 273.15) * (I1 + 273.15) - 293700) / (I1 + 273.15) * (10^(0.000000000011965 * ((I1 + 273.15) * (I1 + 273.15) - 293700) * ((I1 + 273.15) * (I1 + 273.15) - 293700)) - 1) - 0.0044 * 10^((-0.0057148 * (374.11 - I1)^1.25))) + (((I1 + 273.15) / 647.3) - 0.422) * (0.577 - ((I1 + 273.15) / 647.3)) * EXP(0.000000000011965 * ((I1 + 273.15) * (I1 + 273.15) - 293700) * ((I1 + 273.15) * (I1 + 273.15) - 293700)) * 0.00980665) / (I3/1000 - I2/100 * (1.01325 * 10^(5.426651 - 2005.1 / (I1 + 273.15) + 0.00013869 * ((I1 + 273.15) * (I1 + 273.15) - 293700) / (I1 + 273.15) * (10^(0.000000000011965 * ((I1 + 273.15) * (I1 + 273.15) - 293700) * ((I1 + 273.15) * (I1 + 273.15) - 293700)) - 1) - 0.0044 * 10^((-0.0057148 * (374.11 - I1)^1.25))) + (((I1 + 273.15) / 647.3) - 0.422) * (0.577 - ((I1 + 273.15) / 647.3)) * EXP(0.000000000011965 * ((I1 + 273.15) * (I1 + 273.15) - 293700) * ((I1 + 273.15) * (I1 + 273.15)
- 293700)) * 0.00980665)) * I3/1000 * 100000000 / ((I1 + 273.15) * 287.1)
Quelle:
http://www.loxwiki.eu/display/LOX/Absolute+Luftfeuchtigkeit+berechnen
********************************************************I*
32) Experimente im Physikunterricht unter Verwendung der ARDUINO Entwicklungsumgebung
Diplomarbeit 2016-09 UNI Graz +++ (1A) Grundlagen unbedingt lesen
Florian Pfannhofer
Die vorgestellten Versuche und Projekte wurden mit den in Tab. 1.1 aufgelisteten Komponenten durchgeführt, wobei versucht wurde die Kosten möglichst gering zu halten, um den Schuleinsatz zu erleichtern.
Tab. 1.1:Benötigtes Material
1x Bezeichnung Preis/Stk.
Simpleduino UNO (Arduinonachbau) € 13,90
ARDUINO UNO R3 ATmega328p € 23,90
Breadboard € 2,65
Gyro- und Beschleunigssensor MPU-6050 € 7,69
3 Achsen Magnetometer HMC5883L € 8,99
4 Kanal Relais-Modul € 3,34
2x Ultraschall Messmodul HC-SR04 € 3,95
Luft-Feuchtigkeitssensor AM2301 DHT22 € 4,77
Luftdrucksensor BMP180 € 7,59
LCD Display 16x2 mit I2C Modul € 4,59
2x Fotowiderstand LRD03 500 kOhm € 0,20 Sketch
2x Schrittmotor DAYPOWER S-SPSM-5V € 4,95
2x Potentiometer 10 kOhm € 1,94 Sketch
4x Taster € 0,15 Sketch
Temperatursensor KTY81/222 KTY81-22 € 1,29 Sketch
Drahtbrückenset mit Box € 5,95
Widerstands Sortiment € 2,49
Elektrolytkondensatoren Sortiment € 2,79
LED 5mm rot 1,7V 2mA Sketch
Jumper Wires male € 2,65
Jumper Wires female € 2,68
Sortimentkasten € 4,40
Gesamtsumme € 98,24
https://github.com/adafruit/DHT-sensor-library/archive/master.zip
Codes
3.1 Auslesen eines Fotowiderstands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.2 Temperaturmessung mit einem Silizium Widerstandsthermometer . . 13
3.3 Pulsweitenmodulation einer LED . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . 16
3.4 Steuerung einer LED durch Taster mit Pulldown-Widerstand . . . . 18
3.5 Steuerung einer LED durch Taster und internem Pullup-Widerstand 19
3.6 Trimmung einer LED mit Hilfe eines Drehtpotentiometers . . . . . . 22
3.7 Steuerung einer LED durch ein Relais . . . . . . . . . . . . . . . . . . . .. . . . . . . 25
3.8 Auslesen eines BMP180 Luftdrucksensors . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.9 Auslesen des AM2301 Luftfeuchtigkeitssensors . . . . . . . . . . . . . 39
3.10 Berechnung der Lagewinkel aus den Winkelgeschwindigkeitswerten des MPU6050 . . 43
3.11 Bestimmung der lokalen Schwerebeschleunigung . . . . . . . . . . . . 47
3.12 Magnetometer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 53
3.13 Programm zum Betrieb des Schrittmotors . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.14 Ultraschallsensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
3.15 Programm um Text über die serielle Schnittstelle an das LC-Display zu senden . . 67
4.1 Programm für das Spannungsmessgerät . . . . . . . . . . . . . . . . . . . . . . . . . . 71
4.2 Programm zur Messung von Kapazitäten . . . . . . . . . . . . . . . . . . . . . . . . . 77
4.3 Programm zur Bestimmung der Schallgeschwindigkeit . . . . . . . . . . . . .. . . . . 81
4.4 Wetterstation mit Unwetterwarnung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
4.5 Radar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . .. . 101
Inhalt
Abstract . . . . . . . . . . . . . . . . . . . . . . . . . . . . II
Kurzfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . III
1. Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2. Über Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.0.1.Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.0.2.Aufbau eines Arduino Programms . . . . . . . . . . . . . . . . 4
3. Grundlegende Experimente und Funktionsweisen von Sensoren 5
3.1. Fotowiderstand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.1.1.Phyikalisches Prinzip . . . . . . . . . . . . . . . . . . . . . . . 5
3.1.2.Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.1.3.Programmcode . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.2. Halbleiter Widerstandsthermometer . . . . . . . . . . . . . . . . . . 8
3.2.1.Physikalisches Prinzip . . . . . . . . . . . . . . . . . . . . . . . 10
3.2.2.Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.2.3.Programmcode . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.3. Pulsweitenmodulation einer LED . . . . . . . . . . . . . . . . . . . . 14
3.3.1.Physikalisches Prinzip . . . . . . . . . . . . . . . . . . . . . . . 14
3.3.2.Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.3.3.Programmcode . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.4. Taster, Schalter und eindeutige Zustände . . . . . . . . . . .. 17
3.4.1.Prinzip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.4.2.Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.4.3.Programmcode . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.5. Drehpotentiometer . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.5.1.Physikalisches Prinzip . . . . . . . . . . . . . . . . . . . . . . . 20
3.5.2.Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.5.3.Programmcode . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.6. Relais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.6.1.Physikalisches Prinzip . . . . . . . . . . . . . . . . . . . . . . . 23
3.6.2.Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.6.3.Programmcode . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.7. Protokolle für digitale Datenübertragung . . . . . . . . . . . . . . . 25
3.7.1. I2C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.7.2.SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.8. Arbeiten mit externen Bibliotheken . . . . . . . . . . . . . . . . . . 29
3.9. Luftdrucksensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.9.1. Physikalisches Prinzip . . . . . . . . . . . . . . . . . . . . . . 30
3.9.2. Atmosphärischer Druck . . . . . . . . . . . . . . . . . . . . . 31
3.9.3. Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.9.4. Programmcode . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.10. Luftfeuchtigkeitssensor . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.10.1. Physikalisches Prinzip . . . . . . . . . . . . . . . . . . . . . . 35
3.10.2. Luftfeuchtigkeit . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.10.3. Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.10.4. Programmcode . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.11. Gyrosensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.11.1. Physikalisches Prinzip . . . . . . . . . . . . . . . . . . . . . . 40
3.11.2. Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.11.3. Programmcode . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.12. Beschleunigungssensor . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.12.1. Physikalisches Prinzip . . . . . . . . . . . . . . . . . . . . . . 45
3.12.2. Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.12.3. Programmcode . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.13. Magnetometer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.13.1. Physikalisches Prinzip . . . . . . . . . . . . . . . . . . . . . . 49
3.13.2. Erdmagnetfeld . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.13.3. Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.13.4. Programmcode . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.14. Schrittmotor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.14.1. Physikalisches Prinzip . . . . . . . . . . . . . . . . . . . . . . 55
3.14.2. Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.14.3. Programmcode . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.15. Ultraschallsensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.15.1. Physikalisches Prinzip . . . . . . . . . . . . . . . . . . . . . . 60
3.15.2. Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
3.15.3. Programmcode . . . . . . . . . . . . . . . . . . . . . . . . . . 62
3.16. LC-Display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
3.16.1. Physikalisches Prinzip . . . . . . . . . . . . . . . . . . . . . . 64
3.16.2. Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.16.3. Programmcode . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4. Erweiterte Versuche und Projekte . . . . . . . . . . . . . . . . . . . . . . .69
4.1. Spannungsmessgerät . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
4.2. Kapazitätsmessung von Kondensatoren . . . . . . . . . . . . . . . . 74
4.3. Messung der Schallgeschwindigkeit . . . . . . . . . . . . . . . . . . . 80
4.4. Bestimmung der Molmasse von Luft . . . . . . . . . . . . . . . . . . 84
4.5. Wetterstation mit Unwetterwarnung . . . . . . . . . . . . . . . . . . 87
4.6. Radar - Geschwindigkeitsmessung über Winkeländerung zum geradlinig bewegten Objekt . . 96
5. Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Abbildungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Literatur
[1] Arduino.Arduino. 2015
https://www.arduino.cc/
[2] Erik Bartmann.
Die elektronische Welt mit Arduino entdecken
[3] Herbert Bernstein.
Messelektronik und Sensoren
[4] Ekbert Hering.
Sensoren in Wissenschaft und Technik
[5] Johannes Niebuhr und Gehrhard Lindner.
Physikalische Messtechnik mit Sensoren
[6] Frank Bernhard, Hrsg.
Handbuch der Technischen Temperaturmessung
[7] Horst Kuchling.
Taschenbuch der Physik
[8] Michael Margolis.
Arduino Kochbuch
[9] Herbert Bernstein.
Elektrotechnik/Elektronik für Maschinenbauer
[10] Hans-Jürgen Gevatter und Ulrich Grünhaupt, Hrsg.
Handbuch der Mess- und Automatisierungstechnik in der Produktion
[11] Erwin Böhmer, Dietmar Ehrhardt und Wolfgang Oberschelp.
Elemente der angewandten Elektronik
[12] NXP.I2C-bus specification and user manual
http://www.nxp.com/documents/user_manual/UM10204.pdf
[13] Klaus Dembowski.
Mikrocontroller - Der Leitfaden für Maker
[14] Herbert Bernstein.
Mikrocontroller
[15] Thomas Elbel.
Mikrosensorik
Bosch.
BMP180 Digital pressure sensor
https://ae-bst.resource.bosch.com/media/products/dokumente/bmp180/BST- BMP180- DS000-12~1.pdf
Honeywell. 3-Axis Digital Compass IC HMC5883L
https://aerospace.honeywell.com/~/media/aerospace/files/datasheet/3-axisdigitalcompassichmc5883l_ds.pdf
Zentralanstalt für Meteorologie und Geodynamik.
http://www.zamg.ac.at/cms/de/geophysik/produkte-und-services-1/online-deklinationsrechner
https://de.wikipedia.org/wiki/Mollier-h-x-Diagramm
400_d_Acker-x_Das h,x-Diagramm nach Mollier - Aufbau und Anwendung (42 Seiten)_1a.pdf
********************************************************I*
36) ARDUINO Temperature Sensors DHT22 versus DS18B20
/*www.geekstips.comTemperature sensor comparison - DHT22 vs DS18B20 | Arduino tutorial*/#include "DHT.h"#define DHTPIN 2 // what digital pin we're connected to// Uncomment whatever type you're using!//#define DHTTYPE DHT11 // DHT 11#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321//#define DHTTYPE DHT21 // DHT 21 (AM2301)// Connect pin 1 (on the left) of the sensor to +5V// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1// to 3.3V instead of 5V!// Connect pin 2 of the sensor to whatever your DHTPIN is// Connect pin 4 (on the right) of the sensor to GROUND// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor// Initialize DHT sensor.// Note that older versions of this library took an optional third parameter to// tweak the timings for faster processors. This parameter is no longer needed// as the current DHT reading algorithm adjusts itself to work on faster procs.DHT dht(DHTPIN, DHTTYPE);void setup() { Serial.begin(9600); Serial.println("DHTxx test!"); dht.begin();}void loop() { // Wait a few seconds between measurements. delay(2000); // Reading temperature or humidity takes about 250 milliseconds! // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) float h = dht.readHumidity(); // Read temperature as Celsius (the default) float t = dht.readTemperature(); // Read temperature as Fahrenheit (isFahrenheit = true) float f = dht.readTemperature(true); // Check if any reads failed and exit early (to try again). if (isnan(h) || isnan(t) || isnan(f)) { Serial.println("Failed to read from DHT sensor!"); return; } // Compute heat index in Fahrenheit (the default) float hif = dht.computeHeatIndex(f, h); // Compute heat index in Celsius (isFahreheit = false) float hic = dht.computeHeatIndex(t, h, false); Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.print(" *C "); Serial.print(f); Serial.print(" *F\t"); Serial.print("Heat index: "); Serial.print(hic); Serial.print(" *C "); Serial.print(hif); Serial.println(" *F");}
https://www.geekstips.com/temperature-sensor-dht22-ds18b20-arduino-tutorial/#more-190
********************************************************I*
37) Temperaturüberwachung mit TMP36 auf pin-A0
Frost- und Hitzealarm (UGW IO OGW) 4°C & 25°C
TempToAnalogLED.ino
/*
Program shows the change of temperature in a range from -15 to 35 degrees celsius
as a color of an RGB LED,
the LED changes from full blue (-15) over green to red (+35)
2 different LEDs show a frost and a heat alarm
Programm zeigt die Temperatur allmählichen Temperaturwechsel von -15 bis +35 Grad
und zeigt Temperatur in diesem Bereich mit einem Farbverlauf in einem RGB-LED an,
wobei kalte Temperaturen blau, mittlere grün und heisse Temperaturen rot angezeigt werden
zusätzlich gibt es 2 LEDs für einen Frost- und einen Hitzealarm
unterhalb einer Maximallimite brennt das blaue LED
und oberhalb einer Minimallimite das rote LED */
int
temperaturePin = 0;
//the analog pin the TMP36's Vout (sense) pin is connected to
//the resolution is 10 mV / degree centigrade
//(500 mV offset) to make negative temperatures an option
int
ledAnalogOne[] = {3, 5, 6};
//3 PWM-LEDs: 3 red, 5 green, 6 blue
int
ledBlue = 7;
int
ledRed = 8;
//variables for the temperature and the temperature range
float
temperature = 15.0;
int
range = 50;
int
start = -15;
int
maximumLedBlue = 0;
//frost alarm
int
minimumLedRed = 25;
//heat alarm
int
red = 0;
int
green = 0;
int
blue = 0;
float
tmp = 0.0;
int
mydelay = 1000;
byte black[] = {0, 0, 0};
void
setup(){
Serial.begin(9600);
pinMode(ledBlue, OUTPUT);
pinMode(ledRed, OUTPUT);
for
(
int
i = 0; i < 3; i++){
pinMode(ledAnalogOne[i], OUTPUT);
//Set the three LED pins as outputs
}
setColor(ledAnalogOne, black);
}
void
loop(){
temperature = getTemperature(temperaturePin);
tmp = 2 * 255 / range;
//converts a temperature to a RGB color
if
(temperature < start) {
red = 0;
green = 0;
blue = 255;
}
else
if
(temperature < start + (range / 2)) {
red = 0;
green = (temperature - start) * tmp;
blue = 255 - ((temperature - start) * tmp);
}
else
if
(temperature < start + range) {
red = (temperature - (range/2)- start) * tmp;
green = 255 - ((temperature - (range/2) - start) * tmp);
blue = 0;
}
else
{
red = 255;
green = 0;
blue = 0;
}
//frost alarm
if
(temperature <= maximumLedBlue) {
// blue LED is turned on
digitalWrite(ledBlue, HIGH);
}
else
{
// blue LED is turned off
digitalWrite(ledBlue, LOW);
}
//heat alarm
if
(temperature >= minimumLedRed) {
// red LED is turned on
digitalWrite(ledRed, HIGH);
}
else
{
// red LED is turned off
digitalWrite(ledRed, LOW);
}
byte color[] = {red, green, blue};
printToSerial(temperature, color);
setColor(ledAnalogOne, color);
//pauses, before the temperature is read again
delay(mydelay);
}
//fetches a random temperature value
float
getRandomTemperature(
int
start,
int
range) {
randomSeed(millis());
return
random(start, start + range);
}
//sets the RGB LED to a RGB color
void
setColor(
int
* led, byte* color){
//iterates through the 3 pins
for
(
int
i = 0; i < 3; i++){
analogWrite(led[i], 255 - color[i]);
}
}
//prints the temperature and RGB values at the serial interface
void
printToSerial(
float
temperature, byte* color) {
Serial.print(
"T: "
);
Serial.print(temperature);
Serial.print(
"; RGB: "
);
Serial.print(color[0]);
Serial.print(
"/"
);
Serial.print(color[1]);
Serial.print(
"/"
);
Serial.println(color[2]);
}
float
getTemperature(
int
analogPin){
/* converting from a 0 to 1024 digital range
to 0 to 5 volts (each 1 reading equals ~ 5 millivolts */
float
voltage = (analogRead(analogPin) * .004882814);
//convert into a temperature
return
(voltage - .5) * 100;
}
400_b_ARDUINO-x_Temperaturüberwachung - Frost- und Hitzealarm 4°C & 25°C_1a.pdf
http://ecotronics.ch.honorius.sui-inter.net/wordpress/2012/arduino-projekt-temperaturuberwachung/
********************************************************I*
https://funduino.de/
38) Arduino: Temperatur & Luftfeuchtigkeit auf einem LCD-Display
Mit dem Temperatur- / Luftfeuchtigkeits-Sensor messen wir die Werte in der Umgebung und geben das Ergebnis auf einem LCD-Display aus.
Arduino Uno R3 mit ATmega328p
BreadBoard / Steckbrett
Temperatur / Luftfeuchtigkeits-Sensor DHT22
Zweizeiliges I2C LCD-Modul 2x16 I2C-Modul auf der Rückseite des LCD-Moduls LCM1602 IIC
PCF8574 Portexpander
Jumper-Kabel
Kabel
https://dev-blog.vcp.de/category/hardware-arduino/
Das LCD Modul mit angelötetem I²C Bus ermöglicht die Verwendung eines LCD Moduls mit einer einfachen Verkabelung.
Ein weiterer Unterschied zum normalen LCD Display besteht darin, dass sich auf der Rückseite des Displays ein Drehregler befindet, mit dem die Leuchtstärke des LCD reguliert werden kann.
https://dev-blog.vcp.de/lcd-modul/
benötigte Bibliothek (Library): LiquidCrystal_I2C.h
Um mit dem LCD-Modul arbeiten zu können benötigst du eine Bibliothek (Library).
Die Bibliothek kann zum Beispiel unter:
https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
als .ZIP Datei heruntergeladen werden.
Danach muss die Bibliothek in der Arduino-Software hinzugefügt werden.
Anleitung zum LCD Display mit I2C Anschluss
https://funduino.de/nr-19-i%C2%B2c-display
YwRobot LCM1602 IIC V1 20x4 LCD Display with PCF8574T
https://gist.github.com/hezhao/9750621
Verbinden des LCD-Displays mit dem Portexpander PCF8574
LCD LCM 1602 I2C von YwRobot.
PCF8574 Portexpander
http://fluuux.de/2014/04/pcf8574-ein-lcd-display-mit-nur-zwei-pins-arduino-betreiben/
benötigte Bibliotheken:
DHT.h –
https://github.com/adafruit/DHT-sensor-library
LiquidCrystal_I2C.h –
https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
Wenn du die Bibliotheken noch nicht installiert hast:
Wie installiere ich eine zusätzliche Bibliothek?
#include <LiquidCrystal_I2C.h>
//
LiquidCrystal_I2C Bibliothek einbinden
#include <Wire.h> //
Wire Bibliothek einbinden
#include <DHT.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
//Hier wird festgelegt um was für einen Display es sich handelt. In diesem Fall einer mit 16 Zeichen in 2 Zeilen.
#define DHTPIN 8
#define DHTTYPE DHT11
// DHT sensor
DHT dht(DHTPIN, DHTTYPE);
void
setup() {
lcd.begin();
//Im Setup wird das LCD-Modul gestartet
dht.begin();
//Im Setup wird der DHT11 gestartet
delay(500);
}
void
loop() {
// put your main code here, to run repeatedly:
int
humidity_data = (
int
)dht.readHumidity();
int
temperature_data = (
int
)dht.readTemperature();
//
Ab hier kann das I2C LCD Modul genau wie das einfache LCD Modul programmiert werden.
lcd.setCursor(0,0);
//
um Zeichen und Zeile anzugeben (Zeichen,Zeile)
lcd.print(
"Temp.: "
); //
um Temp.: auf dem Display anzeigen zu lassen.
lcd.print(temperature_data);
// um den Temp.-Wert auf dem Display anzeigen zu lassen
lcd.print(
"\337C"
);
// um \337C auf dem Display anzeigen zu lassen
lcd.setCursor(0,1);
// um Zeichen und Zeile anzugeben
lcd.print(
"Feuchte: "
);
// um Feuchte auf dem Display anzeigen zu lassen
lcd.print(humidity_data);
// um Feuchte-Wert auf dem Display anzeigen zu lassen
lcd.print(
"%"
);
// um % auf dem Display anzeigen zu lassen
delay(500); // 0,5 sec. Wartezeit
}
https://dev-blog.vcp.de/temperatur-luftfeuchtigkeit-auf-einem-lcd-display/
********************************************************I*
39) Temperatur mit DS18S20, Kommastellen
Hallo, auch ich darf mal ein Neuling sein und beschäftige mich seit einigen
Wochen mit diesem Thema. Keine Angst, habe auch ein Buch vorn Franzis und auch schon einiges in diesem Forum gelesen.
Ich möchte 2 LCD- Anzeigen zusammenschalten, beide sollen das gleiche anzeigen, hab da auch schon eine Schaltung mittels I²C gefunden und erfolgreich probiert.
Ist jetzt im Moment Nebensache, da ich erstmal die ganze Schaltung und Software auf dem Brett zusammen und nach und nach aufbauen möchte.
Als Erweiterung soll aus einer Steuerung, am USB Anschluss (wo die Daten seriell vor liegen) ebenfalls auslesen und am LCD-Display 20x4 sichtbar machen.
Hab mal mit dem einfachen angefangen:
Temperatur auslesen und darstellen:
Funktioniert auch soweit, wie bekomme ich aber die Temperatur mit einer
Kommastelle angezeigt? Diesen Code habe ich noch nicht hinbekommen.
Anbei mein bisheriger der auch läuft.
#include <LiquidCrystal.h> //LiquidCrystal-Anzeige mit:
#include <OneWire.h> //RS an Pin 12
#include <DallasTemperature.h> //RW an Pin 11
//ENABLE an Pin 10
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); //D4-7 an den Pins 5-2,
#define LCD_WIDTH 20 //Anzahl Spalten des Display (20)
#define LCD_HEIGHT 4 //Anzahl Zeilen des Display (4)
DeviceAddress sensor1 = { 0x10, 0xCD, 0xB6, 0xB5, 0x2, 0x8, 0x0, 0xD4 }; //Sensoradressen
DeviceAddress sensor2 = { 0x10, 0xD9, 0xE1, 0xB5, 0x2, 0x8, 0x0, 0x97 }; //Sensoradressen
OneWire ds(13); //Pin an dem die Datenleitung des ds18s20 hängt
DallasTemperature sensors (&ds);
int temp1, temp2;
void setup()
{
sensors.begin();
Serial.begin(9600);
}
void loop()
{
sensors.requestTemperatures();
temp1 = sensors.getTempC(sensor1);
temp2 = sensors.getTempC(sensor2);
lcd.begin(20,4);
lcd.clear();
lcd.setCursor (0,0);
lcd.print("Aussen Temperatur");
lcd.setCursor (0,1);
lcd.print(temp1); lcd.write(0xDF); lcd.print("C");
lcd.setCursor (0,2);
lcd.print("Innen Temperatur");
lcd.setCursor (0,3);
lcd.print(temp2); lcd.write(0xDF); lcd.print("C");
delay (3000);
}
https://www.arduinoforum.de/arduino-Thread-Temperatur-mit-DS18S20-Kommastellen
********************************************************I*
40) Arduino und DHT22 (AM2302) Temperaturmessung
UNO PLUS verbessertes Arduino Board
https://www.roboter-bausatz.de/2358/uno-plus-verbessertes-arduino-board
Waveshare UNO PLUS - verbessertes ARDUINO UNO R3 Board EXP-R63-033 € 19,95
https://www.exp-tech.de/en/platforms/arduino/7516/uno-plus-arduino-uno-r3-compatible
ist ARDUINO Uno R3 Kompatibel
UNO+
www.hobbycomponents.com
https://www.waveshare.com/wiki/UNO_PLUS
Produktinformationen "UNO PLUS verbessertes Arduino Board"
Beschreibung:
Arduino kompatibles UNO Plus Board 3.3V/5V
Das UNO Plus Board ist ein Arduino R3 kompatibler Microcontroller mit zahlreichen Verbesserungen.
So besitzt das Board eine einstellbare Betriebsspannung für 3.3V oder 5V, einen Bootloader Switch um Programme direkt ausführen zu können und zusätzliche Pins.
An der Qualität der verbauten Komponenten wurde bei Waveshare nicht gespart!
Bei diesem Board handelt es sich eine robuste und hochwertige Version des UNO R3 Boards.
Eine vollständige Dokumentation des Boards finden Sie auf der
Hersteller-Webseite.
http://osepp.com/wp-content/uploads/2012/10/OSEPP_Uno_R3_Plus_Arduino_Compatible-Rev3.0-Schematic.pdf
https://www.waveshare.com/wiki/UNO_PLUS
https://www.waveshare.com/w/upload/0/0d/UNO-PLUS-Schematic.pdf
1. ATmega328P-AU
2. AMS1117-3.3: 3,3V Spannungsregler
3. NCP1117ST50T3G: 5,0V Spannungsregler
4. FT232RL: USB zu UART Konverter / Wandler
5. Arduino-Schnittstelle
kompatibel mit Standard-Arduino-Schnittstelle mit zwei zusätzlichen Analog-Eingängen A6 (Config der CFG), A7
Lötpads auf der Unterseite, um das Board mit Hilfe von Stiftleisten Breadboardtauglich zu machen
6. ICSP-Schnittstelle
7. Micro-USB-Anschluss: zum Hochladen von Programm- oder seriellen Port-Debugging
8. Leistungsausgang: 3,3 V ODER 5,0 V, Spannungspegel, konfiguriert durch den Onboard-Leistungskonfigurationsschalter, verwendet als Leistungsausgang ODER gemeinsame Erdung mit anderen Boards
8.Power output header : 3.3V ODER 5V Power output oder common ground für andere Boards, der Spannungspegel wird durch den power jumper(#15) bestimmt.
9. FT232 Pins: zum Brennen des Bootloaders auf den Chip / in den Mikrocontroller
10. Gleichstrom-Eingang: 7,0Vdc bis 12Vdc
11. Reset-Knopf
12. Power Anzeige = Betriebsanzeige
13. Serielle Schnittstelle Rx / Tx-Anzeige
14. Benutzer-LED
15. Stromkonfigurationsschalter: zum Konfigurieren der Betriebsspannung / Power jumper : zum Einstellen des Spannungspegel
16. Bootloader-Auswahlschalter
Einschalten: Die Karte wird zurückgesetzt, wenn das Einschalten oder andere USB-Geräte erkannt wurden, die mit dem PC verbunden sind
Ausschalten: Das Onboard-Programm läuft sofort nach dem Einschalten und die Karte wird nicht zurückgesetzt, wenn andere USB-Geräte erkannt wurden, die eine Verbindung zum PC herstellen
Hersteller : Waveshare
Chip : ATMEGA328P-AU
AMS1117-3.3 : 3.3V Spannungsregler
NCP1117ST50T3G : 5V Spannungsregler
ICSP interface
Micro-USB-Schnittstelle
FT232 USB-Chip
Eingangsspannung : 7Vdc bis 12Vdc
https://www.waveshare.com/wiki/UNO_PLUS
400_b_ARDUINO-x_UNO PLUS Schematic - UNO+ Schaltplan_1a.pdf
https://www.waveshare.com/UNO-PLUS.htm
https://www.waveshare.com/wiki/UNO_PLUS
UNO PLUS Features
UNO PLUS is a development board compatible with the Arduino UNO R3, an improved & enhanced alternative solution for Arduino UNO R3.
UNO PLUS Vs UNO R3:
|
UNO PLUS
|
UNO R3
|
Remarks
|
Operating voltage
|
5V/3.3V
|
5V
|
Dual voltage level to support more shields
|
Reset
|
Lateral
|
Vertical
|
Lateral button is easier to use when connecting with shield
|
Bootloader switch
|
Yes
|
None
|
The board can be configured to run program immediately when power-up by the switch
|
USB connector
|
Micro USB
|
USB Type B
|
Micro connector is more commonly used, and shields won't be blocked anymore while connecting
|
DC jack
|
Low profile
|
Normal height
|
Shields won't be blocked anymore while connecting
|
Power output header
|
Yes
|
None
|
Providing 5V/3.3V power output OR common-grounding with other boards
|
3.3V power output
|
800mA Max
|
150mA Max
|
UNO PLUS features higher driving capability
|
Oscillator
|
Crystal oscillator
|
Ceramic resonator
|
Crystal oscillator is suit for applications where accurate clock reference is required
|
ADC channel
|
8
|
6
|
CFG used as ADC6 by configuration, and ADC7 from the Reserved PIN
|
Connecting with prototype breadboard
|
Supported
|
Not supported
|
Solder pads is provided for DIY interfaces to connecting with prototype breadboard
|
USB driver
|
Compatible with all main systems
|
Doesn't compatible with WIN7/WIN8 Express Edition
|
Driver will never failed to install thanks to the onboard FT232
|
Firmware fixing
|
Supported
|
Not supported
|
Firmware can be fixed by using the onboard FT232, no extra programmer is needed
|
http://www.gunook.com/arduino-und-dht22-am2302-temperaturmessung/
http://www.gunook.com/arduino-37-in-1-sensorsatz-erlautert/
********************************************************I*
41) Eine Wetterstation mit dem Arduino selbst erstellen und programmieren
KURD
In dieser Lernumgebung baust du selber eine kleine Wetterstation. Dabei lernst du Schritt für Schritt wie man einen Arduino programmiert und die wichtigsten physikalischen Grundlagen zur Wetterkunde.
Für WEN ist der Kurs?
Der Kurs ist für Anfänger. Du brauchst keine Vorkenntnisse im Umgang mit dem Arduino und kein spezielles Vorwissen in Physik dazu.
https://arduinoimphysikunterricht.wordpress.com/unterrichtsbeispiele-und-kurse/kurs-thermodynamik-eine-wetterstation/lernumgebung-wetter/