Hola.
Hoy me gustaría mostrarle cómo implementar un termómetro IR con nuestro módulo GY-906, un Nano V3 y un OLED con pocas líneas de código. La construcción es adecuada para el control de temperaturas sin contacto, por ejemplo, máquinas o similares.
Así que necesitamos:
1x Nano V3
1x OLED 0.96"
1x GY-906
1x Mini-Breadboard m. Jumper-Wire
1x soporte de batería 9V
Opcionalmente puede usar el proyecto para diodo láser o un módulo de botón expandirse.
El cableado:
Nano | GY-906 | Oled | clip de batería |
VIN | + | ||
GND | GND | GND | - |
5V | VCC | ||
3.3V | VCC | ||
A5 | SCL | SCL | |
A4 | SDA | SDA |
La biblioteca necesaria:
Instale ambas bibliotecas como de costumbre a través de su administrador de biblioteca en el IDE Arduino. Si desea utilizar la última versión puede obtenerla a través de GitHub e incluirla como *.zip, pero esto tiene la desventaja de tener que mantener la nueva versión usted mismo.
Utilice el administrador de la biblioteca para instalarlo será notificado por el IDE una vez que se proporcione una nueva versión y pueda actualizarla haciendo clic. La siguiente captura de pantalla muestra las dos bibliotecas:
- GY-906 -en github
Para emitir los valores en la pantalla, ahora usamos la biblioteca de Adafruit:
Código Hier der:
#incluir <Draht.h> #incluir <Adafruit_MLX90614.h> #incluir <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 Anchura de pantalla // OLED, en píxeles #define SCREEN_HEIGHT 64 Altura de pantalla // OLED, en píxeles Adafruit_SSD1306 Anzeige(SCREEN_WIDTH, SCREEN_HEIGHT, &Draht, -1); Adafruit_MLX90614 mlx = Adafruit_MLX90614(); read Configuración() { Serien.beginnen(9600); Serien.println("Prueba de adecuación MLX90614"); wenn(!Anzeige.beginnen(SSD1306_SWITCHCAPVCC, 0x3C)) { Serien.println(F("SSD1306 init falló")); für(;;); } Anzeige.Despejar pantalla(); Anzeige.setRotation(0); Anzeige.setTextSize(1); Anzeige.setTextColor(BLANCO); Anzeige.setCursor(0, 35); Anzeige.println("Init..."); Anzeige.Anzeige(); Verzögerung(500); Anzeige.Despejar pantalla(); mlx.beginnen(); } read Schleife() { Anzeige.Despejar pantalla(); Anzeige.setTextSize(2); Anzeige.setCursor(25, 10); Anzeige.drucken(mlx.readAmbientTempC()); //Umgebungstemperatur Anzeige.setCursor(95, 10); Anzeige.drucken("C"); Anzeige.setTextSize(2); Anzeige.setCursor(25, 36); Anzeige.drucken(mlx.readObjectTempC()); //IR-Temperatur Anzeige.setCursor(95, 36); Anzeige.drucken("C"); Anzeige.Anzeige(); Serien.println(); Verzögerung(1000); }
Después de inicializar el hardware en la configuración de vacío, el entorno y la temperatura IR se muestran en el bucle.
Bis zum nächsten mal :)
2 comentarios
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