Hallo iedereen
Vandaag wil ik u laten zien hoe u een IR thermometer implementeren met onze GY-906 module, een Nano V3 en een OLED met een paar regels code. Het ontwerp is zeer geschikt voor contactloze monitoring van temperaturen, bijvoorbeeld op machines of dergelijke.
Dus we moeten:
1x Nano V3
1x OLED 0,96 inch
1x GY-906 GY-906
1x Mini-Breadboard m. Jumper-Wire
1x 9V batterijhouder
Optioneel u een aantal Laserdiode of een Knopmodule Uitbreiden.
De bedrading:
Nano | GY-906 GY-906 | Oled | Batterijclip |
Vin | + | ||
Gnd | Gnd | Gnd | - |
5v | Vcc | ||
3.3V | Vcc | ||
A5 | Scl | Scl | |
A4 | Sda | Sda |
De nodige bibliotheken:
Installeer beide bibliotheken zoals gewoonlijk via uw bibliotheekmanager in de Arduino IDE. Als u de nieuwste versie wilt gebruiken, u deze verkrijgen via GitHub en deze opnemen als *.zip, maar dit heeft het nadeel dat u zelf een nieuwe versie moet onderhouden.
Gebruik de bibliotheekbeheerder voor de installatie om u op de hoogte te stellen door de IDE wanneer een nieuwe versie beschikbaar wordt gesteld en kan deze bijwerken door te klikken. De volgende screenshot toont de twee bibliotheken:
- GY-906 - op Github
Om de waarden op het display uit te geven, gebruiken we vandaag de Adafruit-bibliotheek:
Hier is de code:
#include <Draad.H> #include <Adafruit_MLX90614.H> #include <Adafruit_SSD1306.H> #define SCREEN_WIDTH 128 OLED-schermbreedte, in pixels #define SCREEN_HEIGHT 64 OLED-weergavehoogte, in pixels Adafruit_SSD1306 Weergeven(SCREEN_WIDTH, SCREEN_HEIGHT, &Draad, -1); Adafruit_MLX90614 Mlx (MLX) = Adafruit_MLX90614(); Void Setup() { Seriële.Beginnen(9600); Seriële.println("Adafruit MLX90614 test"); Als(!Weergeven.Beginnen(SSD1306_SWITCHCAPVCC, 0x3C)) { Seriële.println(V("SSD1306 init mislukt")); Voor(;;); } Weergeven.clearDisplay(); Weergeven.setRotatie(0); Weergeven.setTextSize(1); Weergeven.setTextColor(Witte); Weergeven.setCursor(0, 35); Weergeven.println("Init..."); Weergeven.Weergeven(); Vertraging(500); Weergeven.clearDisplay(); Mlx (MLX).Beginnen(); } Void Lus() { Weergeven.clearDisplay(); Weergeven.setTextSize(2); Weergeven.setCursor(25, 10); Weergeven.Afdrukken(Mlx (MLX).leesAmbientTempC()); Omgevingstemperatuur Weergeven.setCursor(95, 10); Weergeven.Afdrukken("C"); Weergeven.setTextSize(2); Weergeven.setCursor(25, 36); Weergeven.Afdrukken(Mlx (MLX).leesObjectTempC()); IR-temperatuur Weergeven.setCursor(95, 36); Weergeven.Afdrukken("C"); Weergeven.Weergeven(); Seriële.println(); Vertraging(1000); }
Na het initialiseren van de hardware in lege opstelling, wordt de omgevingstemperatuur weergegeven in de lus en vervolgens de IR-temperatuur.
Tot de volgende keer :)
2 Reacties
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