Echtzeitvisualisierung von Thermografie AMG8833-Daten in Python

Einführung

Dieser Artikel beschreibt die Verwendung des 8x8-Infrarot-Array-Sensors "AMG8833" von Arduino, der die Daten in Echtzeit an einen PC sendet und mit Python (PyQt5, PyQtGraph) visualisiert.

Es wird in Echtzeit wie im Bild unten dargestellt. amg8833.gif

Arduino Arduino erfasst Thermografiedaten und sendet sie über serielle Kommunikation an einen PC (Python). AMG8833 Dieses Mal verwende ich Switch Science Conta ™ Thermografie AMG8833 installiert.

Laut Switch Science

Der Temperaturmessbereich für jedes Element liegt zwischen 0 ° C und 80 ° C. Der Messbereich ist eine quadratische Pyramide vor dem Sensor (ungefähr 60 Grad vertikal und horizontal), und ein zweidimensionales Bild, das durch Teilen dieses Bereichs in 8 × 8 Pixel erhalten wird, kann erhalten werden.

Wir verwenden auch Conta ™ Base Shield, um die Verwendung von AMG8833 zu vereinfachen.

Datenerfassung und -übertragung

Auf der Switch Science-Seite werden einige AMG8833-Bibliotheken aufgelistet, aber hier verwende ich SparkFuns SparkFun_GridEYE_Arduino_Library. Das folgende Programm ist nur eine geringfügige Änderung des Beispielprogramms.

Bei der seriellen Kommunikation werden 8x8 = 64 Temperaturdaten als durch "," getrennte Zeichenfolgen übertragen.

amg8833-serial.ino


#include <SparkFun_GridEYE_Arduino_Library.h>
#include <Wire.h>

float pixelTable[64];

GridEYE grideye;

void setup() {
  Wire.begin();
  //Die AMG8833-Adresse von switch science ist standardmäßig auf 0x68 eingestellt.
  grideye.begin(0x68);
  Serial.begin(115200);
}

void loop() {
  // 8x8=Ermitteln Sie die Temperatur für 64 Pixel und speichern Sie sie in grideye.
  for(unsigned char i = 0; i < 64; i++){
    pixelTable[i] = grideye.getPixelTemperature(i);
  }
  //Die Temperatur aller Pixel","Durch eine Leitung getrennt und angeordnet und durch serielle Kommunikation übertragen.
  for(unsigned char i = 0; i < 64; i++){
    Serial.print(pixelTable[i]);
    if(i != 63){
      Serial.print(",");
    }
  }
  Serial.println();
  delay(50);
}

Python Die Wärmekarte wird in Echtzeit basierend auf den von Arduino empfangenen Temperaturdaten angezeigt.

Bibliothek

--pyserial --serielle Kommunikation

Die Datenvisualisierung in Python ist matplotlib, hat jedoch den Nachteil, dass sie zu schwer ist, um den Bildschirm in Echtzeit mit matplotlib zu aktualisieren. Daher verwenden wir anstelle von matplotlib eine leichtgewichtige Bibliothek namens pyqtgraph.

Dieses Mal verwende ich jedoch einen Teil von matpotlib, um die Temperaturdaten in Farbe (RGBA) umzuwandeln. Es scheint, dass pyqtgraph ähnlich sein kann, aber in diesem Fall müssen Sie anscheinend die Farbe angeben, die für die Farbkarte verwendet werden soll. Hier verwenden wir matplotlib, das standardmäßig eine Farbkarte bereitstellt.

Datenempfang & Heatmap-Anzeige

heatmap.py


from pyqtgraph.Qt import QtGui, QtCore
import matplotlib.cm as cm
import matplotlib as mpl
import pyqtgraph as pg
import numpy as np
import serial

#TEMP, um die Heatmap besser sichtbar zu machen_MAX=40.Auf 0 setzen
TEMP_MIN = 0.0
TEMP_MAX = 40.0

app = QtGui.QApplication([])

win = pg.GraphicsLayoutWidget(show=True, title="AMG8833")
win.resize(600,600)
win.setWindowTitle('AMG8833')
pg.setConfigOptions(antialias=True)

view = win.addViewBox()
view.setAspectLocked(True)

img = pg.ImageItem(border='w')
view.addItem(img)

#Farbkarte zur Umwandlung der Temperatur in Farbe
norm = mpl.colors.Normalize(vmin=TEMP_MIN, vmax=TEMP_MAX)
cmap = cm.jet
m = cm.ScalarMappable(norm=norm, cmap=cmap)

#Serielle Kommunikation
ser = serial.Serial("COM13", 115200, timeout=1)

#8x8 Temperaturdaten
data = np.zeros((8, 8))

def get_data():
    global data, ser
    if ser.in_waiting:
        #Erhalten Sie Daten von Arduino
        #Die Ausnahmebehandlung ist einfach, da beim Erfassen von Daten ein Fehler auftritt.
        try:
            line = ser.readline().decode().strip()
            temps = [float(t) for t in line.split(",")]
            data = np.array(temps).reshape((8, 8))
        except:
            pass

def update_plot():
    global img, data
    img.setImage(m.to_rgba(data))

#Datenempfang alle 50ms
timer1 = QtCore.QTimer()
timer1.timeout.connect(get_data)
timer1.setInterval(50)
timer1.start()

#Heatmap-Update alle 100ms
timer2 = QtCore.QTimer()
timer2.timeout.connect(update_plot)
timer2.setInterval(100)
timer2.start()

if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()

Im obigen Programm sind Datenempfang und Heatmap-Aktualisierung in separate QTimer unterteilt. Wenn die Wärmekarte jedes Mal aktualisiert wird, wenn Daten empfangen werden, wird die Wärmekarte möglicherweise nicht rechtzeitig aktualisiert. Um dies zu verhindern, können Datenempfang und Heatmap-Aktualisierung separat durchgeführt werden.

Referenzlink

Recommended Posts

Echtzeitvisualisierung von Thermografie AMG8833-Daten in Python
Empfehlung von Altair! Datenvisualisierung mit Python
So senden Sie ein visualisiertes Bild der in Python erstellten Daten an Typetalk
Die Geschichte des Lesens von HSPICE-Daten in Python
Aufgezeichnete Umgebung für die Datenanalyse mit Python
Zusammenfassung der Tools, die zum Analysieren von Daten in Python benötigt werden
Verarbeitung von CSV-Daten in voller und halber Breite in Python
Den Inhalt der Daten in Python nicht kennen
Liste des Python-Codes, der bei der Big-Data-Analyse verwendet wird
Verwenden wir die offenen Daten von "Mamebus" in Python
Behandeln Sie Umgebungsdaten in Python
Zeigen Sie UTM-30LX-Daten in Python an
Visualisierung von Daten nach Präfektur
Objektäquivalenzbeurteilung in Python
Python-Anwendung: Datenvisualisierung # 2: matplotlib
Implementierung der schnellen Sortierung in Python
Versuchen Sie, COVID-19 Tokyo-Daten mit Python zu kratzen
[Homologie] Zählen Sie mit Python die Anzahl der Löcher in den Daten
Vergleich der Datenrahmenbehandlung in Python (Pandas), R, Pig
Holen Sie sich LeapMotion-Daten in Python.
Bildpixel-Manipulation in Python
Lesen Sie die Protokollpufferdaten mit Python3
[ns3-30] Aktivieren Sie die Visualisierung von Python-Skripten
Zeitdelta in Python 2.7-Serie teilen
So verwenden Sie das Python-Visualisierungspaket ordnungsgemäß
MySQL-automatische Escape-Funktion von Parametern in Python
Behandeln Sie Daten im NetCDF-Format mit Python
Umgang mit JSON-Dateien in Python
Datenvisualisierung in Python-Draw Cool Heatmaps
Implementierung eines Lebensspiels in Python
Audio-Wellenform-Anzeige in Python
Hashing von Daten in R und Python
Visualisieren Sie Ihre Daten ganz einfach mit Python Seaborn.
Das Gesetz der Zahlen in Python
Implementierung der ursprünglichen Sortierung in Python
Python-Anwendung: Datenvisualisierung Teil 1: Grundlegend
Reversibles Verwürfeln von Ganzzahlen in Python
Datenanalyse beginnend mit Python (Datenvisualisierung 1)
Datenanalyse beginnend mit Python (Datenvisualisierung 2)
Eine einfache Datenanalyse von Bitcoin, die von CoinMetrics in Python bereitgestellt wird
Impressionen von Touch, einem von Python erstellten Datenvisualisierungstool
[Python] Visualisierung von Längsschnittdaten (Plot, Box Whisker, Violin-Diagramm, Konfidenzintervall, Histogramm)
[Blender Python] Ordnen Sie benutzerdefinierte Eigenschaftsdaten in template_list () des UI-Layouts an
Holen Sie sich mit Python zusätzliche Daten zu LDAP
Konvertierung der Zeichenfolge <-> Datum (Datum, Datum / Uhrzeit) in Python
Dateneingabe / -ausgabe in Python (CSV, JSON)
Überprüfen Sie das Verhalten des Zerstörers in Python
Anwendung von Python: Datenvisualisierung Teil 3: Verschiedene Grafiken
Python-Visualisierungstool für die Datenanalyse
Übung, dies in Python zu verwenden (schlecht)
Ali Buch in Python: Abschnitt 2-4, Datenstruktur
Ausgabebaumstruktur von Dateien in Python
Versuchen Sie, mit Binärdaten in Python zu arbeiten
Zeigen Sie eine Liste der Alphabete in Python 3 an
Vergleich japanischer Konvertierungsmodule in Python3
Zusammenfassung verschiedener for-Anweisungen in Python
Holen Sie sich Google Fit API-Daten in Python
Das Ergebnis der Installation von Python auf Anaconda