Inhaltsverzeichnis:

Echtzeit-MPU-6050/A0-Datenprotokollierung mit Arduino und Android - Gunook
Echtzeit-MPU-6050/A0-Datenprotokollierung mit Arduino und Android - Gunook

Video: Echtzeit-MPU-6050/A0-Datenprotokollierung mit Arduino und Android - Gunook

Video: Echtzeit-MPU-6050/A0-Datenprotokollierung mit Arduino und Android - Gunook
Video: Как спрятать данные в ячейках Excel? 2024, Juli
Anonim
Echtzeit-MPU-6050/A0-Datenprotokollierung mit Arduino und Android
Echtzeit-MPU-6050/A0-Datenprotokollierung mit Arduino und Android

Ich habe mich für die Verwendung des Arduino für maschinelles Lernen interessiert. Als ersten Schritt möchte ich mit einem Android-Gerät eine Echtzeit-Datenanzeige und einen Logger (oder ziemlich nahe daran) erstellen. Ich möchte Beschleunigungsmesserdaten von der MPU-6050 erfassen, daher habe ich den Build so konzipiert, dass er den HC-05 bei 115200 Baud verwendet. Mit dieser Konfiguration können 4 Datenkanäle mit 250 Samples pro Sekunde übertragen werden.

Der Build hat ein paar Schritte:

  • Baue den Schild oder das Steckbrett
  • Programmieren Sie den Arduino
  • Laden Sie die Android-App von Google Play oder verzweigen Sie den GitHub und stellen Sie sie selbst zusammen
  • Verbinden Sie den MPU-6050 mit etwas Interessantem, das vibriert (ich habe ein RC-Auto verwendet)
  • Verwenden Sie das Android-Gerät, um eine Verbindung zum Arduino herzustellen
  • Plotten Sie die Daten, speichern Sie bei Interesse
  • Import in Python (oder eine andere Plattform) zur weiteren Verwendung

Lass uns anfangen!

Schritt 1: Bauen Sie das Schild / Steckbrett

Baue den Schild/das Steckbrett
Baue den Schild/das Steckbrett
Baue den Schild/das Steckbrett
Baue den Schild/das Steckbrett

Dies ist der Schaltplan für Arduino, HC-05 und MPU-6050. Zusätzlich zum MPU-6050 habe ich den analogen Eingang A0 mit einem Lichtsensor verdrahtet, um anzuzeigen, dass der ADC funktioniert. Jedes 0-5-Volt-Signal könnte in den A0-ADC gebracht werden. Dies sind die Komponenten, die ich für den Build verwendet habe:

  • Arduino Uno
  • HC-05 (Der HC-06 sollte auch funktionieren, aber mein Build war mit dem HC-05)
  • MPU-6050
  • Sparkfun-Fotowiderstand
  • 10kOhm Widerstand (braun-schwarz-orange)

Die meisten HC-05 Bluetooth-Module sind standardmäßig auf 9600 Baud eingestellt. Damit die Daten erfolgreich übertragen werden, müssen Sie sie auf eine Baudrate von 115200 umprogrammieren. Es gibt ein gutes HC-05 / HC-06 AT Command Instructable, das erklärt, wie es geht.

Schritt 2: Programmieren Sie das Arduino

Programmieren Sie den Arduino
Programmieren Sie den Arduino
Programmieren Sie den Arduino
Programmieren Sie den Arduino

Ich habe die Arduino IDE-Version 1.6.7 verwendet, um das Arduino zu programmieren. Der Code kann über die Links in diesem Schritt oder aus dem GitHub-Repository heruntergeladen werden. Ich habe drei Versionen beigefügt: Firmware125.ino ist die 125-Hertz-Version, Firmware250.ino ist die 250-Hertz-Version und Firmware500.ino ist die 500-Hertz-Version. Damit das Arduino mit 500 Hertz taktet, wird der A0-ADC nicht gesammelt.

Die Firmware enthält einen Taktausgang an Pin 9, den ich verwendet habe, um das Timing zu überprüfen. Der Trace zeigt, dass die Zykluszeit 4 ms beträgt (entspricht 1/250 Hertz). Ich habe festgestellt, dass bei Problemen mit der seriellen Verbindung das Timing nicht einheitlich ist.

Der Arduino-Code verwendet Bitmaskierung, um jedem Paket eine Kanalnummer hinzuzufügen, da Samples manchmal über Bluetooth fallen. Ich verwende die drei höchstwertigen Bits, um eine Kanalnummer zu speichern. Bei Ganzzahlen mit Vorzeichen ist das höchstwertige Bit (MSB) für das Vorzeichen reserviert. Da ich das MSB für meine Adresse anstelle des Vorzeichens der Ganzzahl verwenden möchte, muss ich alle vorzeichenbehafteten Beschleunigungsmesserwerte in vorzeichenlose Ganzzahlen umwandeln. Ich tue dies, indem ich jedem Wert 32768 hinzufüge (die ADC-Zählungen des MPU-Beschleunigungsmessers sind +32768 bis -32768) und als vorzeichenlose Ganzzahlen umgewandelt:

(unsigned int)((long)iAccelData+32767);

Die Kanalnummer ist für jeden Beschleunigungsmesser und den A0-Port gleich, sodass ein verworfenes Paket erkannt werden kann, wenn die Kanalnummern nicht in Ordnung sind. Für die Pakete, die von Bluetooth auf dem Arduino kommen, lautet das Binärmuster (die Vorzeichen verschieben sich bitweise):

(xacc 3 Adressbits = 0x00, 13bit unsigned) (yacc 3 Adressbits = 0x01, 13bit unsigned) (zacc 3 Adressbits = 0x02, 13bit unsigned) (3 Adressbits = 0x03, iadc13bit unsigned)

(xacc 3 Adressbits = 0x00, 13bit unsigned) (yacc 3 Adressbits = 0x01, 13bit unsigned) (zacc 3 Adressbits = 0x02, 13bit unsigned) (3 Adressbits = 0x03, iadc13bit unsigned) (xacc 3 Adressbits = 0x00, 13bit unsigned) (yacc 3 Adressbits = 0x01, 13bit unsigned) (zacc 3 Adressbits = 0x02, 13bit unsigned) (3 Adressbits = 0x03, iadc13bit unsigned) …

Wenn Sie zum Lesen der Bluetooth-Daten etwas anderes als die Accel Plot Android-App verwenden, gehen Sie wie folgt vor, um die Adresse zu extrahieren (ich verwende die Variablennamen aus der Accel Plot Bluetooth.java-Datei aus dem GitHub-Repository):

- Lesen Sie die 16 unsigned int. ein

- Extrahieren Sie das High-Byte und speichern Sie es in btHigh.

- Extrahieren Sie das Low-Byte und speichern Sie es in btLow.

- Rufen Sie die Adresse von btHigh ab mit: (btHigh >> 5) & 0x07. Diese Anweisung verschiebt btHigh um 5 Bit nach rechts und verschiebt die drei Adressbits in die untersten drei Register. Das &-Zeichen ist ein logisches UND, das zwingt, dass die Bits 4 und höher Null sind und die letzten drei Bits mit den Adressbits übereinstimmen. Das Ergebnis dieser Erklärung ist Ihre Adresse.

Sie müssen sich nicht um die Adressextraktion kümmern, wenn Sie Accel Plot verwenden.

Schritt 3: Laden Sie die Android-App von Google Play oder verzweigen Sie den GitHub

Laden Sie die Android-App von Google Play oder verzweigen Sie den GitHub
Laden Sie die Android-App von Google Play oder verzweigen Sie den GitHub

Sie haben mehrere Möglichkeiten, die Android-App auf Ihr Gerät zu laden. Wenn Sie das Codieren vermeiden möchten, können Sie nach "Accel Plot" suchen und die App sollte im Google Play Store auftauchen. Befolgen Sie die Anweisungen des Stores zur Installation.

Mein Wunsch mit diesem Instructable ist es wirklich, andere zu ermutigen, Projekte zu erstellen, daher habe ich den Code auch in einem GitHub-Repo veröffentlicht. Sie sollten in der Lage sein, dies zu verzweigen, zu erstellen und nach Belieben zu ändern. Ich habe den Code unter der MIT-Lizenz veröffentlicht, also viel Spaß!

Schritt 4: Verbinden Sie sich mit dem Arduino mit etwas Interessantem (ich habe ein R / C-Auto verwendet)

Verbinden Sie sich mit dem Arduino mit etwas Interessantem (ich habe ein R / C-Auto verwendet)
Verbinden Sie sich mit dem Arduino mit etwas Interessantem (ich habe ein R / C-Auto verwendet)

Ich möchte das Gerät irgendwann zur Straßenoberflächenerkennung verwenden, daher dachte ich, ein kleines ferngesteuertes (R / C) Auto wäre angemessen. Ich denke, es hilft im nächsten Schritt, wenn die Beschleunigungen auf etwas liegen können, das sich bewegt oder vibriert.

Schritt 5: Verwenden Sie das Android-Gerät, um eine Verbindung zum Arduino herzustellen

Verwenden Sie das Android-Gerät, um eine Verbindung zum Arduino herzustellen
Verwenden Sie das Android-Gerät, um eine Verbindung zum Arduino herzustellen
Verwenden Sie das Android-Gerät, um eine Verbindung zum Arduino herzustellen
Verwenden Sie das Android-Gerät, um eine Verbindung zum Arduino herzustellen
Verwenden Sie das Android-Gerät, um eine Verbindung zum Arduino herzustellen
Verwenden Sie das Android-Gerät, um eine Verbindung zum Arduino herzustellen

Falls noch nicht geschehen, müssen Sie zuerst den HC-05 mit Ihrem Android-Gerät koppeln. Ich glaube, dass Sie dies auf den meisten Geräten tun können, indem Sie zu den Einstellungen gehen. Der Standard-Pin für die meisten HC-05-Geräte ist 1234 oder 1111.

Öffnen Sie die AccelPlot-App auf dem Android-Gerät. Wenn die App geöffnet wird und bevor Sie sich mit dem HC-05 verbinden, können Sie die Abtastrate (diese wird im Arduino-Code eingestellt), die Beschleunigungsmesserskalen (auch im Arduino-Code eingestellt) und die Anzahl der zu speichernden Samples ändern.

Sobald diese Einstellungen vorgenommen wurden, klicken Sie auf die Schaltfläche „Verbinden“. Es sollte die Bluetooth-Geräte anzeigen und Ihr Gerät sollte aufgelistet werden. Wählen Sie es aus und sobald der Code die Verbindung hergestellt hat, wird ein Popup-Fenster "Verbunden" angezeigt.

Verwenden Sie die Zurück-Pfeiltaste, um zu Accel Plot zurückzukehren. Tippen Sie auf die Schaltfläche "Stream starten", um Daten vom HC-05-Gerät anzuzeigen. Sie sollten auch Tasten zum Speichern der Daten oder zum Abspielen des frequenzmodulierten Inhalts über die Audiobuchse zur Verfügung stellen.

Schritt 6: Erfassen und Plotten der Daten

Image
Image
In Python (oder eine andere Plattform) zur weiteren Verwendung importieren
In Python (oder eine andere Plattform) zur weiteren Verwendung importieren

Die Schaltfläche "Stream starten" sollte aktiviert sein. Tippen Sie darauf, um mit dem Streamen von Daten auf den Bildschirm zu beginnen.

Die Schaltfläche "Daten speichern" wird ebenfalls aktiviert. Tippen Sie darauf, um die Daten zu speichern.

Accel Plot enthält auch eine Option zur Ausgabe eines modulierten Signals auf den Audiokanälen. Die 2 Kanäle in der Accel Plot App beziehen sich auf den linken und rechten Kanal der Audioausgangsbuchse des Android-Geräts. Dies ist nützlich, wenn Sie die Daten des MPU-6050 in ein separates Datenprotokollierungssystem wie National Instruments übertragen möchten.

Das Video zeigt ein Beispiel für das System, das Daten an einem RC-Auto sammelt.

Schritt 7: Import in Python (oder eine andere Plattform) zur weiteren Verwendung

In Python (oder eine andere Plattform) zur weiteren Verwendung importieren
In Python (oder eine andere Plattform) zur weiteren Verwendung importieren

Die Dateien werden auf dem Android-Gerät gespeichert. Die Dateien werden im Verzeichnis "AccelPlot" für Android API 18 und älter gespeichert. Der Code platziert die.dat-Dateien im Ordner "\Tablet\Documents\AccelPlot" für API 19 (KitKat 4.4) und höher. Ich hatte Probleme mit einigen Android-Geräten, die die Dateien anzeigten, wenn sie über USB verbunden waren. In einigen Fällen musste ich das Android-Gerät neu starten, damit sie angezeigt werden. Ich bin mir nicht sicher, warum das so ist, aber es sollten vier Dateien vorhanden sein, eine für jeden Kanal. Sie können für zusätzliche Arbeit in ein lokales Verzeichnis kopiert werden.

Ich habe Anaconda/Python 2.7 verwendet, um die Dateien zu öffnen und die Daten anzuzeigen. Die Datei "ExploratoryAnalysis.ipynb" enthält die IPython Notebook-Datei, die alle Datendateien öffnet und die Beispieldaten grafisch darstellt. Beispieldateien sind im GitHub-Repository enthalten. Die Daten werden als Big-Endian-4-Byte-Floats ('>f') gespeichert, sodass sie von jedem Analyseprogramm geöffnet werden können.

Ich habe auch eine einfachere Datei namens "ReadDataFiles.ipynb" eingefügt, die zeigt, wie eine einzelne Datei nach Namen eingelesen wird.

Empfohlen: