- Voraussetzungen
- Schaltplan
- Prozessablauf für die Luftmaus
- Programmieren des Arduino für Air Mouse
- Python-Treiberskript
- Testen der Arduino Air Mouse
Überhaupt gewundert, wie sich unsere Welt in Richtung der immersiven Realität bewegt. Wir finden ständig neue Wege und Methoden, um mit unserer Umgebung mithilfe von virtueller Realität, gemischter Realität, erweiterter Realität usw. zu interagieren. Täglich kommen neue Geräte mit diesen schnellen Technologien heraus, um uns durch ihre neuen interaktiven Technologien zu beeindrucken.
Diese immersiven Technologien werden in Spielen, interaktiven Aktivitäten, Unterhaltung und vielen anderen Anwendungen eingesetzt. In diesem Tutorial lernen wir eine solche interaktive Methode kennen, mit der Sie auf neue Weise mit Ihrem System interagieren können, anstatt eine langweilige Maus zu verwenden. Unsere Spielefreaks müssen wissen, dass Nintendo, ein Spieleunternehmen, vor einigen Jahren die Idee einer interaktiven 3D-Methode für die Interaktion mit ihren Konsolen mithilfe eines als Wii-Controller bekannten Handheld-Controllers verkauft hat. Mithilfe des Beschleunigungsmessers können Sie Ihre Gesten für ein Spiel lokalisieren und drahtlos an das System senden. Wenn Sie mehr über diese Technologie erfahren möchten, können Sie das Patent EP1854518B1 lesen. Auf diese Weise erhalten Sie eine vollständige Vorstellung davon, wie diese Technologie funktioniert.
Inspiriert von dieser Idee werden wir eine "Luftmaus" herstellen, um mit Systemen zu interagieren, indem wir nur die Konsole in der Luft bewegen. Statt dreidimensionale Koordinatenreferenzen zu verwenden, werden wir also nur zweidimensionale Koordinatenreferenzen verwenden Wir können die Aktionen der Computermaus imitieren, da die Maus in zwei Dimensionen X und Y arbeitet.
Das Konzept hinter dieser drahtlosen 3D-Luftmaus ist sehr einfach. Wir werden einen Beschleunigungsmesser verwenden, um den Wert der Beschleunigung der Aktionen und Bewegungen der „Luftmaus“ entlang der x- und y-Achse zu ermitteln und dann auf den Werten von zu basieren Mit dem Beschleunigungsmesser steuern wir den Mauszeiger und führen bestimmte Aktionen mit Hilfe der auf dem Computer ausgeführten Python-Softwaretreiber aus.
Voraussetzungen
- Arduino Nano (jedes Modell)
- Beschleunigungsmesser ADXL335 Modul
- Bluetooth HC-05 Modul
- Drück Knöpfe
- Python Installierter Computer
Weitere Informationen zur Installation von Python auf einem Computer finden Sie im vorherigen Tutorial zur Arduino-Python-LED-Steuerung.
Schaltplan
Um Ihren Computer mit den Bewegungen Ihrer Hand zu steuern, benötigen Sie einen Beschleunigungsmesser, der die Beschleunigung entlang der X- und Y-Achse ausgibt. Um das gesamte System drahtlos zu machen, wird ein Bluetooth-Modul verwendet, um das Signal drahtlos an Ihr System zu übertragen.
Hier wird ein ADXL335-Beschleunigungsmesser verwendet, ein MEMS-basiertes Dreiachsenmodul, das die Beschleunigung entlang der X-, Y- und Z-Achse ausgibt. Wie bereits für die Steuerung der Maus angegeben, benötigen wir die Beschleunigung jedoch nur entlang der X- und Y-Achse. Erfahren Sie mehr über die Verwendung des ADXL335-Beschleunigungsmessers mit Arduino in unseren vorherigen Projekten:
- Arduino-basiertes Fahrzeugunfall-Warnsystem mit GPS, GSM und Beschleunigungsmesser
- Ping-Pong-Spiel mit Arduino und Beschleunigungsmesser
- Beschleunigungsmesserbasierter handgestengesteuerter Roboter mit Arduino
- Erdbebenmelder Alarm mit Arduino
Hier sind der Xout- und der Yout-Pin des Beschleunigungsmessers mit den Analog-, A0- und A1-Pins von Arduino verbunden und hier werden die Signale vom Arduino zum System- Bluetooth-Modul HC-05 übertragen, da Bluetooth über Tx und Rx funktioniert Pin-Verbindungen, daher verwenden wir die seriellen Software-Pins D2 und D3. Es wird über Software Serial verbunden, da, wenn wir Bluetooth mit Hardware Serial verbinden und die Messwerte über die Python-Konsole abrufen, Fehler für die Nichtübereinstimmungs-Baudrate angezeigt werden, da Bluetooth über die eigene Baudrate mit dem Python kommuniziert. Weitere Informationen zur Verwendung des Bluetooth-Moduls finden Sie in verschiedenen Bluetooth-basierten Projekten mit verschiedenen Mikrocontrollern, einschließlich Arduino.
Hier haben wir drei Drucktasten verwendet - eine zum Auslösen der Luftmaus und zwei für Links- und Rechtsklick, wie im folgenden Bild gezeigt:
Prozessablauf für die Luftmaus
Das Flussdiagramm zeigt den Prozessfluss der Arduino-basierten Air Mouse:
1. Das System prüft kontinuierlich, ob der mechanische Auslöser gedrückt wird, bis er nicht gedrückt wird. Wir können normal mit der Computermaus trainieren.
2. Wenn das System einen Tastendruck erkennt, wird die Steuerung für die Maus auf die Luftmaus übertragen.
3. Wenn die Auslösetaste gedrückt wird, beginnt das System, die Messwerte der Maus auf den Computer zu übertragen. Die Systemanzeige besteht aus den Beschleunigungsmesser-Messwerten und den Messwerten für den Links- und Rechtsklick.
4. Die Systemablesungen bestehen aus dem Datenstrom von 1 Byte oder 8 Bits, wobei die ersten drei Bits aus den X-Koordinaten bestehen, die zweiten drei Bits aus den Y-Koordinaten bestehen und das vorletzte Bit das Statusbit zum Abrufen ist Der Status des linken Mausklicks und des letzten Bits ist das Statusbit, um den Status des rechten Klicks abzurufen.
5. Der Wert der ersten drei Bits, dh der X-Koordinate, kann im Bereich von 100 <= Xcord <= 999 liegen, während der Wert für die Y-Koordinate im Bereich von 100 <= Ycord <= 800 liegen kann. Die Werte für den Rechts- und Linksklick sind die Binärwerte 0 oder 1, wobei 1 angibt, dass der Klick erfolgt, und 0, dass der Klick nicht vom Benutzer ausgeführt wird.
6. Damit sich das Abprallen der Taste nicht auf die Position des Cursors auswirkt, wird nach jedem Klicken der Auslösetaste der Maus eine bekannte Verzögerung von 4 Sekunden eingehalten.
7. Für den Rechts- und Linksklick in der Luftmaus müssen wir zuerst entweder die linke oder die rechte Taste drücken und danach die Auslösetaste drücken, um an die gewünschte Position der Luftmaus zu gelangen.
Programmieren des Arduino für Air Mouse
Der Arduino sollte so programmiert sein, dass er die Beschleunigungswerte auf der X- und Y-Achse liest. Das vollständige Programm finden Sie am Ende. Nachfolgend finden Sie die wichtigen Ausschnitte aus dem Code.
Einrichten der globalen Variablen
Wie bereits erwähnt, werden wir das Bluetooth-Modul mit den seriellen Software-Pins verbinden. Um die Software-Seriennummer einzustellen, müssen wir die Bibliothek der Software-Seriennummer deklarieren und die Pins für Tx und Rx einrichten. In Arduino Nano und Uno können Pin 2 und 3 als Software-Serie arbeiten. Als nächstes deklarieren wir das Bluetooth-Objekt aus der seriellen Softwarebibliothek, um den Pin für Tx und Rx einzurichten.
#einschließen
Void Setup ()
In der Setup- Funktion setzen wir die Variablen, um dem Programm mitzuteilen, ob sie als Eingabe oder Ausgabe fungieren. Die Auslösetaste wird als Eingabe-Pullup eingerichtet, und der linke und rechte Klick werden als Eingabe deklariert und als Hoch eingerichtet, damit sie als Eingabe-Pullups fungieren.
Stellen Sie außerdem die Baudrate für die serielle und Bluetooth-Kommunikation auf 9600 ein.
void setup () { pinMode (x, INPUT); pinMode (y, INPUT); pinMode (Trigger, INPUT_PULLUP) pinMode (lclick, INPUT); pinMode (rclick, INPUT); PinMode (LED, OUTPUT); digitalWrite (lclick, HIGH); digitalWrite (rclick, HIGH); Serial.begin (9600); bluetooth.begin (9600); }}
Leere Schleife ()
Da wir eine Auslösetaste benötigen würden, um zu erkennen, wann wir dem System den Datenstrom senden müssen, richten wir den gesamten Code in der while- Schleife ein, die den digitalen Zustand des Pull-up-Auslösers kontinuierlich überwacht, sobald er niedrig wird Übergeben Sie es weiter für die Verarbeitung.
Da wir eine LED angebracht haben, um den Status des Systems für das Drücken der Auslösetaste anzuzeigen, setzen wir die LED zunächst außerhalb der while- Schleife als Standardbedingung auf niedrig und innerhalb der while- Schleife auf hoch, wodurch die LED aufleuchtet wann immer die Auslösetaste gedrückt wird.
Um den Status der Links- und Rechtsklick- Schaltfläche zu lesen, haben wir global zwei Variablen lclick und rclick deklariert, deren Werte ursprünglich auf 0 gesetzt wurden.
Stellen Sie in der Schleife den Wert dieser Variablen entsprechend dem digitalen Status der Links- und Rechtsklick-Taste ein, um zu überprüfen, ob die Tasten gedrückt sind oder nicht.
Wir würden die Werte der X- und Y- Ausgangspins des Beschleunigungsmessers mit der Funktion analogRead ablesen und diese Werte der Bildschirmgröße zuordnen , damit sich der Mauszeiger über den gesamten Bildschirm bewegt. Da die Bildschirmgröße die Pixel auf dem Bildschirm sind, müssen wir sie entsprechend einrichten. Da der Ausgabewert dreistellig sein muss, haben wir den Bereich für das X absichtlich auf 100 <= X <= 999 und ähnlich eingestellt Wert für das Y als 100 <= Y <= 800. Denken Sie daran, dass die Pixel aus der oberen linken Ecke gelesen werden, dh die obere linke Ecke hat den Wert (0,0). Da wir jedoch drei Ziffern für x und y deklariert haben, werden unsere Werte vom Punkt (100.100) gelesen.
Drucken Sie außerdem den Wert der Koordinaten und den Status des Klicks über die seriellen und Bluetooth- Funktionen mithilfe der Funktionen Serial.print und bluetooth.print , um die Werte über Bluetooth auf dem seriellen Monitor und über Ihr System abzurufen.
Schließlich kann aufgrund des Aufpralls einer Taste ein einzelner Wert wiederholt werden, der dazu führen würde, dass ein Mauszeiger über einer einzelnen Position verweilt. Um dies zu beseitigen, müssen wir diese Verzögerung hinzufügen.
void loop () { digitalWrite (led, LOW); while (digitalRead (Trigger) == LOW) { digitalWrite (LED, HIGH); lstate = digitalRead (lclick); rstate = digitalRead (rclick); xh = analogRead (x); yh = analogRead (y); xcord = map (xh, 286, 429, 100, 999); ycord = map (yh, 282, 427, 100, 800); Serial.print (xcord); Serial.print (ycord); if (lstate == LOW) Serial.print (1); sonst Serial.print (0); if (rstate == LOW) Serial.print (1); sonst Serial.print (0); bluetooth.print (xcord); bluetooth.print (ycord); if (lstate == LOW) bluetooth.print (1); sonst bluetooth.print (0); if (rstate == LOW) bluetooth.print (1); sonst bluetooth.print (0); Verzögerung (4000); }}
Python-Treiberskript
Ab sofort haben wir die Hardware und den Firmware-Teil fertiggestellt. Damit die Air-Maus funktioniert, benötigen wir ein Treiberskript, mit dem die Signale der Air-Maus in die Cursorbewegungen dekodiert werden können. Daher haben wir uns dafür entschieden Python. Python ist eine Skriptsprache, und mit Skripten hier meinen wir, dass es uns hilft, die Kontrolle über das andere Programm zu erlangen, da wir hier den Mauszeiger steuern.
Öffnen Sie also Ihre Python-Shell und installieren Sie die folgenden Bibliotheken mit den folgenden Befehlen:
pip install serial pip install pyautogui
Die Serial ist eine Bibliothek für Python, mit deren Hilfe wir die Daten von seriellen Schnittstellen wie COM-Ports abrufen und bearbeiten können, während Pyautogui eine Bibliothek für Python ist, um die Kontrolle über die GUI-Funktionen zu erhalten, in diesem Fall die Maus.
Kommen wir nun zum Code für die Treiber. Als erstes müssen wir die seriellen und pyautogui-Bibliotheken importieren und dann aus der seriellen Bibliothek den COM-Port für die Kommunikation mit einer Baudrate von 9600 einstellen Entspricht Bluetooth.serial . Dazu müssen Sie das Bluetooth-Modul mit Ihrem System verbinden und dann in den Systemeinstellungen überprüfen, mit welchem COM-Port es verbunden ist.
Als nächstes lesen Sie die serielle Kommunikation vom Bluetooth zum System und halten sie fortlaufend. Halten Sie den Rest des Codes mit Hilfe von while 1 in einer Endlosschleife.
Wie bereits erwähnt, sendet Arduino 8 Bits, die ersten 6 für die Koordinaten und die letzten beiden für den Status der Klickschaltflächen. Lesen Sie also alle Bits mit Hilfe von ser.read und stellen Sie die Länge auf 8 Bits ein.
Teilen Sie als Nächstes die Bits für die Cursorkoordinaten und Klicks, indem Sie sie in Scheiben schneiden, und schneiden Sie dann die Cursorbits weiter getrennt in X- und Y-Koordinaten auf. Gleiches gilt für den Links- und Rechtsklick.
Aus der Kommunikation erhalten wir nun eine Byte-Zeichenfolge, die wir in eine Ganzzahl konvertieren müssen, damit sie in die Koordinaten passen. Dazu dekodieren wir sie und geben sie dann in Ganzzahlen ein.
Um den Cursor zu bewegen, verwenden wir die pyautogui moveto- Funktion, die diese ganzzahligen Koordinaten als Argumente verwendet und den Cursor an diese Position bewegt.
Bei der nächsten Überprüfung auf Klicks verwenden wir dazu die letzten beiden Bits und die Klickfunktion von pyautogui. Der Standardklick ist links. Wir können ihn jedoch nach rechts setzen, indem wir den Schaltflächenwert nach rechts deklarieren. Wir können auch die Anzahl der Klicks definieren Stellen Sie einen Doppelklick ein, indem Sie den Parameter clicks auf 2 setzen.
Unten finden Sie den vollständigen Python-Code, der auf dem Computer ausgeführt werden soll:
import serial import pyautogui ser = serial.Serial ('com3', 9600) während 1: k = ser.read (8) cursor = k click = k x = cursor y = cursor l = click r = click xcor = int (x.decode ('utf-8')) ycor = int (y.decode ('utf-8')) pyautogui.moveTo (xcor, ycor) wenn l == 49: pyautogui.click (clicks = 2) elif r = = 49: pyautogui.click (button = 'right', clicks = 2)
Testen der Arduino Air Mouse
Schließen Sie für den Betrieb der Air Mouse eine Stromquelle an. Dies kann über den Arduino Nano USB-Steckplatz oder über das geregelte 5-V-Netzteil mit 7805 IC erfolgen. Führen Sie dann das Python-Treiberskript aus, indem Sie den COM-Port festlegen, mit dem Ihr Bluetooth verbunden ist. Während das Skript ausgeführt wird, tritt beim Blinken des Bluetooths eine Zeitverzögerung auf. Dies bedeutet, dass es mit Ihrem System verbunden ist. Klicken Sie dann zum Bedienen auf die Auslösetaste, und Sie sehen, dass sich die Position der Koordinaten ändert. Wenn Sie den linken oder rechten Klick möchten, drücken Sie zuerst die linke oder rechte Taste und die Auslösetaste gleichzeitig eine geänderte Position des Cursors.
Sehen Sie die detaillierten Arbeits Video unten.