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

Arduino-joystick-gestuurde muis: Preciese cursor-navigatie

Onderdelen en benodigdheden

Onderdeel Aantal
Arduino UNO 1
Dual-axis joystick 1

Apps en online services

  • Arduino IDE
  • IDLE (Python GUI)

Over dit project

Als alternatief voor het besturen van de computercursor met een muis of trackpad, heb ik deze toepassing gebouwd met behulp van een joystick. De joystick kan de cursor in elke richting (X- en Y-as) bewegen en voert ook de klikfunctie uit met de ingebouwde joystick-schakelaar.

Basisprincipes

Een joystick bestaat in essentie uit twee potentiometers die in de X- en Y-richting zijn uitgelijnd. De Arduino leest analoge waarden van de joystick in het bereik van 0 tot 1023. Wanneer de joystick in zijn standaardpositie (middelpunt) staat, ligt de analoge waarde dicht bij 500.

Arduino-joystick-gestuurde muis: Preciese cursor-navigatie

De Arduino-sketch is zo geprogrammeerd dat wanneer de joystick van het midden wordt bewogen, waarden worden uitgeprint in het bereik van -gevoeligheid tot +gevoeligheid (standaardwaarde 10), afhankelijk van de positie. In de uiterste positie print de Arduino 10, in de tegenovergestelde -10.

Om afzonderlijke waarden voor X- en Y-richting te scheiden, wordt een dubbele punt (":") gebruikt tussen de waarden. De status van de joystick-knop (SW) wordt als 1 of 0 op de seriële monitor uitgeprint na de X- en Y-waarden.

Arduino-joystick-gestuurde muis: Preciese cursor-navigatie

Voor de laptop/computer om de waarden te herkennen, hebben we Python's mouse module nodig (eerder pyautogui, bijgewerkt 12/11/2020).

Python-programmering

De gebruiker moet Python 3 geïnstalleerd hebben. Download het van python.org.

Na installatie, kopieer het pad naar de Python-installatie. Voer de volgende stappen uit in de opdrachtprompt:

  1. cd <plak het pad naar de Python-map>
  2. py -m pip install --upgrade pip
  3. py -m pip install mouse
  4. py -m pip install pyserial

De mouse module voert muisacties uit en pyserial zorgt voor communicatie met de Arduino.

Het Python-programma leest de data die de Arduino print, herkent de X- en Y-richtingswaarden en de status van de schakelaar (SW). De huidige cursorcoördinaten worden verkregen via mouse.get_position() (in pixels).

Wanneer de joystick wordt bewogen, worden de analoge waarden van de Arduino opgeteld bij de huidige cursorpositie om de cursor in de gewenste richting te bewegen. De functie mouse.move(X+x, Y+y) zorgt hiervoor, waarbij X en Y de huidige positie zijn en x en y de incrementen van de Arduino.

Voor klikoperaties op basis van de SW-status: mouse.click(button="left").

Uiteindelijke uitvoering

  1. Upload de Arduino-sketch naar je Arduino UNO en sluit de joystick aan volgens het schema.
  2. Zorg dat mouse en pyserial geïnstalleerd zijn.
  3. Kopieer de Python-code in een notepad-bestand. Specificeer de juiste COM-poort van de Arduino (te vinden in Apparaatbeheer). Sla op als .py bestand.
  4. Open Python's IDLE en open het .py bestand daaruit.
  5. Run de module (F5).

Bij fouten: herstart IDLE en controleer de COM-poort. Werkt het? Beweeg de joystick en zie de cursor reageren.

Code

Arduino-code

////////////////////////////////////
// Joystick-gestuurde muis
// Door Shubham Santosh
////////////////////////////////////

void setup() {
  Serial.begin(9600);
  pinMode(9, INPUT); // SW pin
  digitalWrite(9, HIGH);
}

int prev_state = 0; // vorige staat van schakelaar

void loop() {
  int z = 0, xpos = 0, ypos = 0;
  int x = analogRead(A0);
  int y = analogRead(A1);
  int sensitivity = 10; // aanpasbaar voor comfort

  if (x >= 550) // omhoog bewogen
    xpos = map(x, 550, 1023, 0, sensitivity);
  if (x <= 450) // omlaag bewogen
    xpos = map(x, 450, 0, 0, -sensitivity);
  if (y >= 550) // rechts bewogen
    ypos = map(y, 550, 1023, 0, sensitivity);
  if (y <= 450) // links bewogen
    ypos = map(y, 450, 0, 0, -sensitivity);

  int curr_state = digitalRead(9);
  if (curr_state == 1 && prev_state == 0) // SW ingedrukt
    z = 1;
  else
    z = 0;

  if (xpos != 0 || ypos != 0 || z == 1) { // print alleen bij beweging
    Serial.print(xpos);
    Serial.print(":");
    Serial.print(ypos);
    Serial.print(":");
    Serial.println(z);
  }

  prev_state = curr_state;
  delay(10); // voor normale operatie
}

Python-code

# Joystick-gestuurde muis
# Door Shubham Santosh
# Laatst bewerkt 12/11/2020

import mouse, sys
import time
import serial

mouse.FAILSAFE = False
ArduinoSerial = serial.Serial('com3', 9600) # Specificeer de juiste COM-poort
time.sleep(1) # wacht 1 seconde

while True:
    data = str(ArduinoSerial.readline().decode('ascii')) # lees data
    (x, y, z) = data.split(":") # splits in x, y, z
    (X, Y) = mouse.get_position() # huidige cursorpositie
    (x, y) = (int(x), int(y)) # converteer naar int
    mouse.move(X + x, Y - y) # beweeg cursor
    if '1' in z: # lees SW-status
        mouse.click(button="left") # linksklik

Schema

Arduino-joystick-gestuurde muis: Preciese cursor-navigatie

Productieproces

  1. De Evolutie van de Computermuis: Ontwerp, Productie en Toekomsttrends
  2. Temperatuur-gecontroleerde Ventilator: DIY Relais Systeem Voor Media Kast Koeling
  3. Raspberry Pi-gestuurd Aquaponica Systeem: Bouwgids & Code
  4. Bouw een Beweging-gestuurde AWS IoT-knop met Raspberry Pi, PIR-sensor en MQTT
  5. Bouw een Bluetooth-gecontroleerde Raspberry Pi Robot met Audio Feedback
  6. Bouw een Wi-Fi-gecontroleerde Raspberry Pi Robot met Python – Stap-voor-stap Gids
  7. Alexa-gecontroleerde ARDrone 2.0 Demo: Stem-geactiveerde Drone met Raspberry Pi & Hologram Nova
  8. Een oude RC-auto ombouwen tot joystick-gestuurd voertuig met Arduino
  9. Interactieve Joystick Game met Arduino en LED Feedback
  10. Arduino-gebaseerde 6-DoF Robotarm Gestoeerd met Wii Nunchuk
  11. FeNi42 Legering: Lage Thermische Uitdijing voor Precisieafdichtingen