Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Smartphone‑gestuurde Bluetooth‑muis: Bouw je eigen virtuele joystick

Onderdelen en benodigdheden

Arduino UNO 1
HC‑05 Bluetooth‑module 1
Jumper‑draden (generiek) 1 set

Apps en online diensten

  • Arduino IDE
  • IDLE (Python GUI)
  • MIT App Inventor Bluetooth Mouse Control (app)

Over dit project

Dit project lijkt op mijn eerdere werk waarbij ik een joystick gebruikte om een pc‑cursor te besturen. Het belangrijkste verschil is dat ik een smartphone‑applicatie heb gemaakt die 2 virtuele joysticks bevat om de cursor te verplaatsen, te scrollen en linker/rechterklikken uit te voeren, net als een gewoon trackpad.

Werking

De smartphone‑applicatie stuurt de x‑ en y‑as‑data van de joystick, scroll‑status, linker‑ en rechterklik‑status via Bluetooth naar de Arduino Uno die verbonden is met de HC‑05 Bluetooth‑module. Deze data wordt door de Arduino verwerkt om de huidige cursorpositie aan te passen tot een nieuwe positie. De resulterende data samen met scroll‑ en knopstatus wordt via de seriële poort uitgeprint in een formaat dat door het Python‑script gelezen kan worden. Het Python‑script gebruikt de mouse‑module om muisacties uit te voeren.

(Afbeelding van het blokdiagram is in de originele tutorial te vinden.)

Over de applicatie

De smartphone‑applicatie is gemaakt met MIT App Inventor. Het bouwen van de app is eenvoudig: je voegt gewenste blokken toe om je applicatie te bouwen. Ik heb me gebaseerd op de Tabletop Robotics‑tutorial. Het hoofscherm van de applicatie ziet er als volgt uit:

(Afbeelding van het app‑scherm is in de originele tutorial te vinden.)

Voordat de hoofdinformatie naar de HC‑05‑module wordt gestuurd, stuurt de applicatie eerst een één‑byte getal (255) om het begin van de data aan te duiden. De reeks van dataoverdracht is:

  1. Verstuur '255' als startbyte
  2. Verstuur 1 byte joystick x‑as‑waarde
  3. Verstuur 1 byte joystick y‑as‑waarde
  4. Verstuur status van linkerklik, rechterklik en scroll (1 byte)

De data wordt elke 20 milliseconden naar de Arduino UNO gestuurd.

Arduino‑kant

De databytes van de applicatie worden door de Arduino ontvangen via de HC‑05 Bluetooth‑module. De Arduino houdt de huidige cursorcoördinaten bij: x‑coördinaten lopen van 0 tot 1279, y‑coördinaten van 0 tot 799. Deze extreme waarden zijn verkregen via de Python‑functie mouse.get_position() (niet gebruikt in de hoofdsketch).

Op basis van de ontvangen joystick‑data worden de huidige x‑ en y‑coördinaten verhoofd/verlaagd om de cursor naar de gewenste nieuwe coördinaat te verplaatsen. De finale data wordt vervolgens in de volgende volgorde op de seriële monitor geprint:

(Afbeelding van de seriële uitvoer is in de originele tutorial te vinden.)

Deze datasequentie wordt door het Python‑programma uitgelezen en uitgevoerd. Hiervoor hebben we de extra modules mouse en pyserial nodig (zie volgende stap).

Python‑programmering

De gebruiker moet Python 3 geïnstalleerd hebben op laptop/computer. Download van python.org.

Voor Windows:

  1. Na installatie, kopieer het pad naar de Python‑installatiemap.
  2. Open de opdrachtprompt en voer uit:
    cd <plak het pad naar de Python‑map>
    py –m pip install –-upgrade pip
    py –m pip install mouse
    py -m pip install pyserial

De mouse‑module voert muisacties uit, pyserial zorgt voor seriële communicatie met de Arduino.

(Schermafbeeldingen van de installatie zijn in de originele tutorial te vinden.)

Uitvoering

  1. Installeer de "Bluetooth Mouse Control"‑app op je smartphone.
  2. Upload de Arduino‑sketch naar je Arduino UNO en bouw de schakeling volgens het schema.
  3. Python‑kant:
    • Kopieer de Python‑code in een notitieblokbestand. Verander de COM‑poort naar die van je Arduino UNO en bewaar als .py.
    • Open het bestand in Python IDLE.
    • Run het script.
  4. Open de smartphone‑app, verbind met de Bluetooth‑module en je zult de cursor zien bewegen wanneer je de virtuele joystick bedient.

Code

Arduino‑code

int datareceived[5] = {0,0,0,0};
int in_byte = 0;
int array_index = 0;
int l_prev = 0, r_prev = 0;

void setup() {
  Serial.begin(9600);
}

int height = 0, width = 0;

void loop() {
  int clicks = 0;
  int sensitivity = 20;
  int xpos = 0, ypos = 0;

  if (Serial.available() > 0) {
    in_byte = Serial.read();
    if (in_byte == 255) {
      array_index = 0;
    }
    datareceived[array_index] = in_byte;
    array_index++;

    if (datareceived[1] >= 110) xpos = map(datareceived[1], 110, 172, 0, sensitivity);
    if (datareceived[1] <= 70)  xpos = map(datareceived[1], 60, 1, 0, -sensitivity);
    if (datareceived[2] >= 110) ypos = map(datareceived[2], 110, 255, 0, sensitivity);
    if (datareceived[2] <= 60)  ypos = map(datareceived[2], 70, 1, 0, -sensitivity);

    if (datareceived[3] == 1 && l_prev == 0) clicks = 1;
    else if (datareceived[3] == 2 && r_prev == 0) clicks = 2;
    else if (datareceived[3] == 3 || datareceived[3] == 4) clicks = datareceived[3];

    l_prev = datareceived[3];
    r_prev = datareceived[3];

    if (xpos != 0 || ypos != 0 || clicks != 0) {
      height += ypos;
      width += xpos;
      height = constrain(height, 0, 799);
      width = constrain(width, 0, 1279);
      Serial.print(width);
      Serial.print(":");
      Serial.print(height);
      Serial.print(":");
      Serial.println(clicks);
      clicks = 0;
    }
  }
}

Python‑code

import mouse, sys
import time
import serial

mouse.FAILSAFE = False
ArduinoSerial = serial.Serial('COM3', 9600)  # Pas COM‑poort aan
time.sleep(1)

while True:
    data = str(ArduinoSerial.readline().decode('ascii'))
    x, y, z = data.split(":")
    x, y = int(x), int(y)
    mouse.move(x, y)
    if '1' in z: mouse.click(button="left")
    elif '2' in z: mouse.click(button="right")
    elif '3' in z: mouse.wheel(delta=-1)
    elif '4' in z: mouse.wheel(delta=1)

Schema's

Zie bijgevoegde afbeelding in de originele tutorial.

Productieproces

  1. Bouw een Bluetooth-gecontroleerde Raspberry Pi Robot met Audio Feedback
  2. Gebarenbestuurde RGB-tafellamp – Interactief, Handvrij Verlichten
  3. Een slimme voltmeter bouwen met Arduino en smartphone – Eenvoudig DIY-project
  4. LED's bedienen met Alexa via Raspberry Pi – Eenvoudige stapsgewijze handleiding
  5. Een oude RC-auto ombouwen tot joystick-gestuurd voertuig met Arduino
  6. Een LED bedienen via Bluetooth met Arduino – Eenvoudige DIY Handleiding
  7. Arduino-gebaseerde 6-DoF Robotarm Gestoeerd met Wii Nunchuk
  8. Bouw een Stemgecontroleerde Robot met Arduino Nano
  9. MobBob: Bouw Je Eigen Arduino Robot, Naadloos Bestuurd via Android Smartphone
  10. Spraakgestuurde huishoudapparaten: Bluetooth-besturing met Google Assistant
  11. PiBot: De Arduino-aangedreven pianorobot voor precisiemuziek