Hallo zusammen,
heute möchte ich Ihnen gerne zeigen, wie man mit unserem GY-906-Modul, einem Nano V3 und einem OLED mit wenigen Zeilen Code ein IR-Thermometer umsetzten kann. Der Aufbau eignet sich gut zum berührungslosen überwachen von Temperaturen, z.B. an Maschinen o.ä.
Wir brauchen also:
1x Nano V3
1x OLED 0.96"
1x GY-906
1x Mini-Breadboard m. Jumper-Wire
1x 9V-Batteriehalter
Optional können Sie das Projekt gerne um eine Laserdiode oder ein Button-Modul erweitern.
Die Verdrahtung:
Nano | GY-906 | Oled | Batterieclip |
VIN | + | ||
GND | GND | GND | - |
5V | VCC | ||
3.3V | VCC | ||
A5 | SCL | SCL | |
A4 | SDA | SDA |
Die notwendigen Librarys:
Installieren Sie beide Librarys wie gewohnt über Ihren Bibliotheksverwalter in der Arduino-IDE. Möchten Sie die aktuellste Version nutzen können Sie diese über GitHub beziehen und als *.zip einbinden, das hat jedoch den Nachteil, neue Version selbst pflegen zu müssen.
Nutzen Sie den Bibliotheksverwalter zur Installation werden Sie durch die IDE benachrichtigt sobald eine neue Version zur Verfügung gestellt wird und können diese durch einen Klick aktualisieren. Im nachstehenden Screenshot sind die beiden Bibliotheken abgebildet:
- GY-906 - auf Github
Zur Ausgabe der Werte auf dem Display nutzen wir heute die Library von Adafruit:
Hier der Code:
#include <Wire.h> #include <Adafruit_MLX90614.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); Adafruit_MLX90614 mlx = Adafruit_MLX90614(); void setup() { Serial.begin(9600); Serial.println("Adafruit MLX90614 test"); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 init failed")); for(;;); } display.clearDisplay(); display.setRotation(0); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 35); display.println("Init..."); display.display(); delay(500); display.clearDisplay(); mlx.begin(); } void loop() { display.clearDisplay(); display.setTextSize(2); display.setCursor(25, 10); display.print(mlx.readAmbientTempC()); //Umgebungstemperatur display.setCursor(95, 10); display.print("C"); display.setTextSize(2); display.setCursor(25, 36); display.print(mlx.readObjectTempC()); //IR-Temperatur display.setCursor(95, 36); display.print("C"); display.display(); Serial.println(); delay(1000); }
Nach der Initialisierung der Hardware in void setup, wird im loop die Umgebungs- und im Anschluss die IR-Temperatur angezeigt.
Bis zum nächsten mal :)
2 Kommentare
Peter Mauß
Verwende dieses Setup allerdings mit einem 1.3"OLed mit der U8G2 Lib. Als Temparatur wird mir allerdings 1037.55 °C ausgegeben. Wenn ich die U8G2 auskommentiere und über Serial ausgebe, scheint alles zu passen (23,93 und 27,23).
Mit der U8G2 funktionierts dann, wenn ich am Beginn des loop einen mlx.begin() setze und dann die Temperaturen auslese.
Wer pfuscht da wem in den Registern herum?
Achim Pellmann
Der Upload wird abgebrochen mit der Fehlermeldung:
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0×0f
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0×0f
avrdude: stk500_recv(): programmer is not responding
usw.
Ich bin begeistert von Ihren Beispielvorstellungen und habe auch schon einiges nach gebaut. Daher wäre es schön, wenn Sie mir weiterhelfen könnten.
MfG Achhim Pellmann