Temperatursensor GY-906 – Pollux Labs https://polluxlabs.net Arduino, ESP32 & ESP8266 | Projekte & Tutorials Wed, 06 Nov 2024 11:08:56 +0000 de hourly 1 https://wordpress.org/?v=6.6.2 https://polluxlabs.net/wp-content/uploads/2020/05/cropped-pollux-labs-p-32x32.png Temperatursensor GY-906 – Pollux Labs https://polluxlabs.net 32 32 Überwache die Temperatur mit Telegram und einem ESP8266 https://polluxlabs.net/esp8266-projekte/ueberwache-die-temperatur-mit-telegram-und-einem-esp8266/ Mon, 19 Oct 2020 14:42:24 +0000 https://polluxlabs.net/?p=3147 Überwache die Temperatur mit Telegram und einem ESP8266 Weiterlesen »

]]>
In diesem Projekt überwachst du die Temperatur mit einem Sensor und deinem ESP8266. Sobald der Temperatursensor einen von dir festgelegten Wert ermittelt, sendet dein Microcontroller eine Nachricht an deinen Telegram-Bot.

Dieses Projekt ist der zweite Teil einer Serie: Inhaltlich baut es auf unserem Stillen Alarm mit Telegram auf. Schaue dort hinein, um mehr über die grundlegenden Funktionen des Sketchs zu erfahren. Auch in diesem Projekt wartet dein ESP8266 darauf, dass ein bestimmtes Ereignis eintritt. Allerdings wird er hier nicht durch einen Interrupt getriggert, sondern fragt selbst die Daten eines Temperatursensors ab.

Anfänger

1 – 2 Stunden

ca. 12 €

Für dieses Projekt benötigst du (Mengen s. Beschreibung):

Der passende Temperatursensor

In diesem Projekt verwenden wir den Sensor BMP180. Du kannst aber natürlich auch jeden anderen Temperatursensor verwenden – z.B. einen einfachen TMP36, einen DHT22 oder einen GY-906. Denke in diesem Fall daran, deinen Sketch entsprechend anzupassen.

In diesen Tutorials lernst du, wie du einen TMP36 und einen GY-906 anschließt und verwendest.

Der Aufbau des Projekts

Du benötigst nur deinen ESP8266, den Temperatursensor (in unserem Fall einen BMP180), ein Breadboard und Kabel. Orientiere dich beim Aufbau an diesem Schema:

Aufbau Temperatursensor am ESP8266

Der Sensor BMP180 wird per I²C angeschlossen. Am ESP8266 musst du deshalb zwingend die beiden Pins D1 und D2 verwenden. Schließe den Sensor wie folgt an:

BMP180ESP8266
VIN3v3
GNDGND
SDAD2
SCLD1

Der Sketch

___STEADY_PAYWALL___

Kopiere den folgenden Sketch in deine Arduino IDE, ergänze deine Daten und lade ihn auf deinen ESP8266.

Sketch als .txt anschauen

/*
   Die Temperatur überwachen mit Telegram - polluxlabs.net
*/

//Bibliotheken
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>

#include <Wire.h>
#include <Adafruit_BMP085.h>

// Deine WLAN-Zugangsdaten
const char* ssid = "NETZWERKNAME";
const char* password = "PASSWORT";

// Den Telegram-Bot initialisieren
#define botToken "DEIN TOKEN"  // den Bot-Token bekommst du vom Botfather)

//Deine UserID
#define userID "DEINE USERID"

WiFiClientSecure client;
UniversalTelegramBot bot(botToken, client);

Adafruit_BMP085 bmp;

//Variablen für die Temperatur
float temp;
float threshold = 27.00;

//Verbindung zum WLAN
void connectToWiFi() {
  Serial.print("Verbinde mich mit: ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(300);
  }
  Serial.println("");
  Serial.println("Verbunden!");
}

void setup() {
  Serial.begin(115200);
  client.setInsecure();

  if (!bmp.begin()) {
    Serial.println("Kein Sensor gefunden! Checke die Verbindung.");
    while (1) {}
  }
}

void loop() {
  temp = bmp.readTemperature();
  Serial.print("Temperatur = ");
  Serial.print(temp);
  Serial.println(" °C");

  if (temp > threshold) { //Die Temperatur, die überschritten werden muss
    connectToWiFi();
    bot.sendMessage(userID, "Temperatur zu hoch!  " + String(temp) + " °C", "");
    Serial.println("Temperatur zu hoch!");
    WiFi.disconnect();
    delay(300000);
  }
  delay(500);
}

Was ist neu in diesem Sketch?

Vieles im Code haben wir schon im Stillen Alarm verwendet. Ein paar Teile sind jedoch neu und diese schauen wir uns nun genauer an.

Zunächst benötigst du zwei weitere Bibliotheken. Wire.h ist für die Kommunikation per I²C zuständig. Diese Bibliothek ist standardmäßig bereits vorinstalliert. Damit du den Sensor BMP180 so einfach wie möglich verwenden kannst, existiert ebenfalls eine passende Bibliothek: Arduino_BMP085.h. Lass dich nicht vom Namen irritieren. Dort steht zwar BMP085 (das ist der Vorläufer des BMP180), sie funktioniert jedoch auch mit dem BMP180 problemlos.

Am Anfang deines Sketchs bindest du also zusätzlich diese beiden Bibliotheken ein:

#include <Wire.h>
#include <Adafruit_BMP085.h>

Ebenfalls zu Beginn des Sketchs erstellst du für den Sensor das Objekt bmp sowie zwei Variablen: eine für die gemessene Temperatur (temp) und eine für den Schwellenwert (threshold), bei dessen Überschreiten dein ESP8266 eine Nachricht an dich sendet. In unserem Beispiel setzen wir diesen Schwellenwert auf 27,00 °C. Da der BMP180 die Temperatur als Kommazahl ausgibt, benötigst du für diese Variablen den Dateityp float.

Adafruit_BMP085 bmp;
float temp;
float threshold = 27.00;

In der Setup-Funktion prüfst du, ob der Temperatursensor von deinem ESP8266 gefunden wurde und verwendet werden kann. Ist das nicht der Fall, wirst du im Seriellen Monitor darüber informiert und der Sketch begibt sich mit while(1) in eine Endlosschleife – friert also ein.

  if (!bmp.begin()) {
    Serial.println("Kein Sensor gefunden! Checke die Verbindung.");
    while (1) {}
  }

Solltest den obigen Text also in deinem Seriellen Monitor zu Gesicht bekommen, trenne deinen ESP8266 vom Strom und überprüfe deine Verkabelung. In den meisten Fällen sollte hier der Fehler liegen.

Der Loop

Im Loop fragst du die Temperatur im Halbsekundentakt ab und prüfst mit einem Schwellenwert, ob sie diesen überschritten hat.

temp = bmp.readTemperature();

Wenn das der Fall ist, verbindet sich dein ESP8266 mit dem Internet und sendet eine entsprechende Nachricht an dein Smartphone.

if (temp > threshold) { //Wenn die Temperatur über dem Schwellenwert liegt
    connectToWiFi();
    bot.sendMessage(userID, "Temperatur zu hoch!  " + String(temp) + " °C", "");

Die Funktion bot.sendMessage() besteht aus drei Teilen. Der mittlere ist die Nachricht selbst, die du hier jedoch aus zwei Strings und der Variablen temp „zusammenbaust“. Hierfür verbindest du die einzelnen Teilstrings einfach mit einem Pluszeichen – doch Vorsicht: In der Mitte befindet sich die Variable temp als float. Um den Wert in dieser Variablen senden zu können, musst du diese erst mit der Funktion String(temp) in einen String umwandeln.

Auf deinem Smartphone erscheint dann der Text: „Temperatur zu hoch! x °C“ – wobei das x für die gemessene Temperatur steht.

Zuletzt trennt dein ESP8266 die Verbindung zu deinem WLAN wieder und setzt sich für 5 Minuten (300.000 Millisekunden) zur Ruhe. Erst dann beginnt er wieder damit, alle 500 Millisekunden die Temperatur vom BMP180 abzufragen.

    WiFi.disconnect();
    delay(300000);
  }
  delay(500);
}

Sollte danach die Temperatur immer noch über dem Schwellenwert liegen, erhältst du eine weitere Nachricht.

Falls noch nicht geschehen, lade den Sketch auf deinen ESP8266 und probiere ihn gleich aus.

Das passende Gehäuse

Möchtest du das Projekt in einem kleinen Gehäuse unterbringen? Hier findest du passende 3D-Druck-Dateien, die du herunterladen und ausdrucken kannst.

Wie geht es weiter?

Im nächsten Teil der Serie wartest du nicht darauf, bis dein ESP8266 sich bei dir meldet, sondern fragst die Temperatur selbst von deinem Smartphone aus ab.

Statt eines Temperatursensors kannst du auch andere Sensoren einsetzen: So kannst du dich warnen lassen, wenn die Luft zu schlecht oder das Licht zu hell ist. Es gibt auch Sensoren, die Flammen erkennen können – solltest du diesen einsetzen, hoffen wir, dass du niemals eine entsprechende Nachricht erhältst!

]]>
Die Temperatur per Infrarot messen mit dem GY-906 https://polluxlabs.net/arduino-tutorials/die-temperatur-per-infrarot-messen-mit-dem-gy-906/ Mon, 09 Dec 2019 09:48:30 +0000 https://polluxlabs.net/?p=644 Die Temperatur per Infrarot messen mit dem GY-906 Weiterlesen »

]]>
Mit den meisten Sensoren kannst du die Temperatur der Umgebung messen – einen Schritt weiter gehst du mit dem GY-906: Dieser Sensor misst per Infrarot die Temperatur eines Objekts aus der Entfernung. Und die Umgebungstemperatur misst er nebenher gleich mit. 🙂

In diesem Tutorial lernst du, wie du den GY-906 anschließt und damit Temperaturen misst.

Bestseller Nr. 1
TECNOIOT 2pcs GY-906 MLX90614 Non-Contact Infrared Temperature Sensor Module MLX90614ESF
  • GY906 GY-906 MLX90614 Berührungsloses Infrarot-Temperatursensor-Modul MLX90614ESF IIC I2C
  • Das kompakte GY-906 MLX90614ESF ist ein berührungsloses Infrarot-Thermometer für Arduino oder jeden Mikrocontroller, der über seine I2C-Schnittstelle mit ihm kommunizieren kann. Dieser Sensor wird mit einer Breakout-Platine mit allen für den Betrieb benötigten Komponenten und zwei Arten von Stiften geliefert. Sie sind abgelötet.
  • Einfache Bedienung, kleine Größe, niedrige Kosten; montiert auf einer Breakout-Platine mit zwei Arten von Stiften; 10k Pull-Up-Widerstände für die I2C-Schnittstelle mit optionalen Lötbrücken; einfach zu integrieren. Messauflösung von 0,02 Grad.
  • Beschreibung Werkseitig kalibriert im breiten Temperaturbereich: -40 ... + 125 °C für Sensortemperatur und -70 ... + 380 °C für Objekttemperatur. Hohe Genauigkeit von 0,5 °C über breite Temperaturerange (0 ... + 50 °C für sowohl Ta als auch To) Hohe (medizinische) Genauigkeitskalibrierung.
  • Hochleistungs-SMBus-kompatible digitale Schnittstelle; anpassbarer PWM-Ausgang für kontinuierliches Ablesen; einfache Anpassung für 8. 16V Anwendungen Schlaf-Modus für reduzierten Stromverbrauch; verschiedene Verpackungsoptionen für Anwendungen und Messungen; Automobilqualität
Bestseller Nr. 2
Hailege MLX90614 berührungsloses Infrarot-Temperatursensormodul IIC I2C 3-5V für Arduino 51 MCU
  • Sowohl der IR-empfindliche Thermopile-Detektorchip als auch der Signalkonditionierungs-ASIC sind in derselben TO-39-Dose integriert.
  • MLX90614 berührungsloses Infrarot-Temperatursensormodul
  • In das MLX90614 integriert sind ein rauscharmer Verstärker, ein 17-Bit-ADC und eine leistungsstarke DSP-Einheit, wodurch eine hohe Genauigkeit und Auflösung des Thermometers erreicht wird.
  • Der Benutzer kann den digitalen Ausgang als Pulsweitenmodulation (PWM) konfigurieren. Standardmäßig ist die 10-Bit-PWM so konfiguriert, dass sie die gemessene Temperatur kontinuierlich im Bereich von -20 bis 120 °C mit einer Ausgangsauflösung von 0,14 °C überträgt.
  • Wir bieten die Konformitätserklärung an. Dieses Produkt enthält auch ein elektronisches Benutzerhandbuch, das in Englisch, Deutsch, Französisch, Spanisch, Italienisch, Polnisch und Niederländisch verfügbar ist. Wenn Sie Unterstützung benötigen, kontaktieren Sie uns bitte.

So schließt du den Sensor an

Diesen Sensor schließt du im Handumdrehen per I²C an. Das heißt, du benötigst neben Plus und Minus nur zwei weitere Anschlüsse für SDA (Data) and SCL (Clock). Die entsprechenden Pins an deinem Arduino sind A4 für SDA und A5 für SCL. Wenn du mehr über I²C erfahren möchtest, hilft dir Wikipedia weiter.

Verbinde also die Pins VIN und GND am Sensor mit dem 5V und GND am Arduino. Anschließend verbindest du SDA mit A4 und SCL mit dem Pin A5. Das war es auch schon.

Der Code für den GY-906

Für deine ersten Experimente reicht es, wenn du die Temperatur im Seriellen Monitor ausgibst. Wenn dir das zu wenig ist, erfährst du hier, wie du ein TFT-Display am Arduino anschließt.

Bevor du jedoch loslegen kannst, benötigst du noch eine Bibliothek für den GY-906. Wähle hierfür im Menü Werkzeuge ->Bibliotheken verwalten.

Suche dort anschließend nach Adafruit_MLX90614 und installiere die Bibliothek in der aktuellsten Version:

Bibliothek Adafruit_MLX90614

Jetzt kann es losgehen: Binde zunächst zwei Bibliotheken in deinen Sketch ein. Die, die du gerade geladen hast, um die Daten des Sensors zu lesen und eine weitere (Wire.h) für die Kommunikation per I²C.

#include <Adafruit_MLX90614.h>
#include <Wire.h>

Anschließend erstellst du eine Instanz der Bibliothek mit dem Namen mlx:

Adafruit_MLX90614 mlx = Adafruit_MLX90614();

In der Funktion void setup() startest du nur den Seriellen Monitor und die gerade erstellt Instanz der Bibliothek. Mehr brauchst du nicht.

void setup() {
  Serial.begin(9600); 
  mlx.begin();  
}

Nun zum Kern deines Sketches, zur Funktion void loop(). Hier lässt du deinen GY-906 alle 500 Millisekunden eine Messung der Umgebungstemperatur und der Temperatur eines beliebigen Objekts vor dem Sensor ausführen. Die Ergebnisse gibst du dann im Seriellen Monitor aus:

void loop() {
  Serial.print("Umgebung = "); Serial.print(mlx.readAmbientTempC()); 
  Serial.print("*C\tObjekt = "); Serial.print(mlx.readObjectTempC()); Serial.println("*C");

  Serial.println();
  delay(500);
}

Praktischerweise besitzt die Bibliothek Adafruit_MLX90614 hierfür die zwei Funktionen readAmbientTempC() und readObjectTempC(), die du aufrufen und ohne Umwege direkt im Seriellen Monitor ausgeben kannst. Erstere gibt die Umgebungstemperatur aus, letztere die des Objekts direkt vor dem Sensor.

Im Gegensatz zum beliebten Temperatursensor TMP36 musst du hier also keine Umrechnungen von Spannung in Grad Celsius machen.

Hier der gesamte Skecht zum Rauskopieren:

#include <Adafruit_MLX90614.h>
#include <Wire.h>

Adafruit_MLX90614 mlx = Adafruit_MLX90614();

void setup() {
  Serial.begin(9600); 
  mlx.begin();  
}

void loop() {
  Serial.print("Umgebung = "); Serial.print(mlx.readAmbientTempC()); 
  Serial.print("*C\tObjekt = "); Serial.print(mlx.readObjectTempC()); Serial.println("*C");

  Serial.println();
  delay(500);
}

Wie geht es weiter?

Vom Seriellen Monitor bis zum Display ist es natürlich kein weiter Weg – du kannst dir damit und mit einer Batterie leicht ein mobiles Infrarot-Thermometer bauen.

Wenn du es lieber old school hast, ist vielleicht dieses Analog-Thermometer das richtige für dich. In diesem Projekt wird zwar ein TMP36 zum Messen verwendet, aber du kannst ihn nach diesem Tutorial ganz leicht durch den GY-906 ersetzen.

]]>