Ciao a tutti
Oggi vorrei mostrarvi come implementare un termometro a iR con il nostro modulo GY-906, un Nano V3 e un OLED con poche righe di codice. Il design è adatto per il monitoraggio senza contatto delle temperature, ad esempio su macchine o simili.
Quindi abbiamo bisogno di:
1x (in modo non il Nano V3
1x (in modo non il OLED 0,96"
1x (in modo non il GIRO 906
1x Mini-Breadboard m. Jumper-Wire
1x (in modo non il Supporto batteria 9V
Facoltativamente, è possibile aggiungere un numero di Diodo laser o un Modulo pulsante Espandere.
Il cablaggio:
Nano | GIRO 906 | Oled | Clip della batteria |
Vin | + | ||
Gnd | Gnd | Gnd | - |
5v | Vcc | ||
3.3V | Vcc | ||
A5 | Scl | Scl | |
A4 | Sda | Sda |
Le librerie necessarie:
Installare entrambe le librerie come di consueto tramite il gestore di librerie nell'IDE di Arduino. Se si desidera utilizzare la versione più recente, è possibile ottenerla tramite GitHub e includerla come .zip, ma questo ha lo svantaggio di dover mantenere una nuova versione da soli.
Utilizzare Gestione librerie per l'installazione per inviare una notifica all'IDE quando viene resa disponibile una nuova versione e può aggiornarla facendo clic. La schermata seguente mostra le due librerie:The following screenshot shows the two libraries:
- GY-906 - su Github
Per emettere i valori sul display, usiamo oggi la libreria Adafruit:
Ecco il codice:
#include <Filo.H> #include <Adafruit_MLX90614.H> #include <Adafruit_SSD1306.H> # define SCREEN_WIDTH 128 Larghezza di visualizzazione OLED, in pixel # define SCREEN_HEIGHT 64 Altezza di visualizzazione OLED, in pixel Adafruit_SSD1306 Visualizzazione(SCREEN_WIDTH, SCREEN_HEIGHT, &Filo, -1); Adafruit_MLX90614 Mlx = Adafruit_MLX90614(); Vuoto Installazione() { Seriale.Iniziare(9600); Seriale.println("Test di Adafruit MLX90614"); Se(!Visualizzazione.Iniziare(SSD1306_SWITCHCAPVCC, 0x3C (in formato 0x3C))) { Seriale.println(D("SSD1306 init non riuscita")); Per(;;); } Visualizzazione.clearVisualizzazione(); Visualizzazione.setRotazione(0); Visualizzazione.setTextSize (informazioni in base alla proprietà setText(1); Visualizzazione.setTextColor (colore setText)(Bianco); Visualizzazione.Setcursor(0, 35); Visualizzazione.println("Init..."); Visualizzazione.Visualizzazione(); Ritardo(500); Visualizzazione.clearVisualizzazione(); Mlx.Iniziare(); } Vuoto Ciclo() { Visualizzazione.clearVisualizzazione(); Visualizzazione.setTextSize (informazioni in base alla proprietà setText(2); Visualizzazione.Setcursor(25, 10); Visualizzazione.Stampare(Mlx.readAmbientTempC()); Temperatura Visualizzazione.Setcursor(95, 10); Visualizzazione.Stampare("C"); Visualizzazione.setTextSize (informazioni in base alla proprietà setText(2); Visualizzazione.Setcursor(25, 36); Visualizzazione.Stampare(Mlx.readObjectTempC (informazioni in base ai nomi()); Temperatura IR Visualizzazione.Setcursor(95, 36); Visualizzazione.Stampare("C"); Visualizzazione.Visualizzazione(); Seriale.println(); Ritardo(1000); }
Dopo l'inizializzazione dell'hardware nella configurazione nulla, la temperatura dell'ambiente viene visualizzata nel ciclo e quindi la temperatura IR.
Fino alla prossima volta :)
2 commenti
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