Sebagai alternatif untuk melacak kursor komputer menggunakan mouse atau trackpad, saya telah membuat aplikasi yang sama dengan bantuan joystick. Joystick dapat menggerakkan kursor ke segala arah (sumbu x dan Y) dan juga melakukan fungsi klik dengan switch bawaan joystick.
Dasar-dasar
Joystick sederhana terdiri dari 2 potensiometer yang diratakan di arah x dan y. Arduino membaca nilai analog dari joystick dalam rentang 0 hingga 1023. Jadi, ketika joystick berada dalam posisi default(tengah), nilai analog juga mendekati 500(antara 0 dan 1023).
Sketsa Arduino diprogram sehingga ketika joystick dipindahkan dari tengah, cetak nilai dalam rentang dari -sensitivity hingga +sensitivity(nilai default adalah 10) tergantung pada posisi. Jadi, ketika joystick dipindahkan ke posisi ekstrim satu, Arduino mencetak nilai 10 dan jika joystick dipindahkan ke posisi ekstrim lainnya, maka -10 dicetak.
Untuk mencetak nilai terpisah untuk arah x dan y, kita akan menggunakan ":" antara nilai arah x dan y. Contoh:
Status tombol joystick(SW) dicetak(1/0) di serial monitor setelah nilai x dan y.
Agar laptop/komputer dapat mengenali nilai, kita akan membutuhkan modul pyautogui python.
Pemrograman Python
(diedit 12/11/2020 - mengganti perpustakaan dari 'pyautogui' ke 'mouse')
Pengguna harus memiliki python 3 terinstal pada laptop/komputer mereka. Ini dapat diunduh dari sini.
Setelah instalasi, Salin jalur lokasi file python.
Langkah-langkah berikut harus dilakukan pada command prompt. Buka command prompt dan masukkan yang berikut-
1. cd <tempelkan jalur file python>
2. py –m pip install –-upgrade pip
3. py –m pip install mouse
4. py -m pip install pyserial
Modul mouse digunakan untuk melakukan tindakan mouse dan modul pyserial digunakan untuk mengirim/menerima data dari Arduino. Saya sudah menginstal modul yang diperlukan, jadi saya mendapatkan ini
Program python dibuat untuk membaca data yang dicetak oleh Arduino dan mengenali nilai arah x dan y serta status switch(SW).
Koordinat saat ini kursor diperoleh dari fungsi mouse mouse.get_position() yang menyediakan koordinat X dan Y kursor dalam bentuk piksel.
Ketika joystick digerakkan, nilai analog yang diberikan oleh Arduino ditambahkan dengan posisi kursor saat ini untuk menggerakkan kursor ke arah yang diinginkan.
Untuk menggerakkan kursor ke arah yang diberikan, fungsi mouse.move(X+x,Y+y) memenuhi tujuan ini.
di mana X dan Y adalah posisi kursor saat ini dan x dan y adalah posisi penambahan/pengurangan yang diberikan oleh Arduino.
contoh: mouse.moveTo(100,150) memindahkan kursor ke 100 piksel pada sumbu x dan 150 piksel pada sumbu y.
Untuk melakukan operasi klik berdasarkan status SW, mouse.click(button="left") digunakan.
Eksekusi Akhir
Unggah sketsa Arduino(yang diberikan di bawah ini) ke Arduino UNO Anda dan sambungkan joystick ke pin Arduino seperti yang diberikan dalam skematik.
Setelah memastikan mouse dan pyserial terinstal pada komputer/laptop Anda, lakukan langkah-langkah berikut.
1. Salin sketsa python ke file notepad. Tentukan port COM yang benar dari Arduino. Dari manajer perangkat, Anda dapat melihat port COM yang terhubung ke papan Arduino. Simpan file sebagai ".py" setelah melakukan perubahan.
2. Buka IDLE(python GUI) python dan buka file notepad darinya.
3. jalankan modul.
Anda akan diarahkan kembali ke layar pada Gambar 4
Jika Anda melihat kesalahan apa pun, mulai ulang IDLE dan periksa apakah Anda telah menyebutkan port COM yang benar dari Arduino.
Jika tidak ada kesalahan, lalu gerakkan joystick dan Anda akan melihat gerakan kursor.
Kode
Kode Arduino
Kode Python
Kode ArduinoArduino
//////////////////////////////// // Joystick controlled mouse/// /// by Shubham Santosh//////// ///////////////////////////// void setup() { Serial.begin(9600); pinMode(9,INPUT); // SW pin digitalWrite(9,HIGH); } int prev_state=0; // previous state of switch void loop() { int z=0,xpos=0,ypos=0; int x=analogRead(A0); int y=analogRead(A1); int sensitivity=10; // you can adjust the sensitivity based on your comfort if(x>=550) // when moved up xpos=map(x,550,1023,0,sensitivity); if(x<=450) // when moved down xpos=map(x,450,0,0,-sensitivity); if(y>=550) // when moved right ypos=map(y,550,1023,0,sensitivity); if(y<=450) // when moved left ypos=map(y,450,0,0,-sensitivity); int curr_state=digitalRead(9); if(curr_state==1 && prev_state==0) // when SW is pressed z=1; else z=0; if(xpos!=0 or ypos!=0 or z==1) // prints only when the joystick is moved { Serial.print(xpos); // print the data and separating by ":" Serial.print(":"); Serial.print(ypos); Serial.print(":"); Serial.println(z); } prev_state=curr_state; delay(10); // for normal operation }
Kode PythonPython
# Joystick controlled mouse # By Shubham Santosh # last edited 12/11/2020 import mouse, sys import time import serial mouse.FAILSAFE=False ArduinoSerial=serial.Serial('com3',9600) #Specify the correct COM port time.sleep(1) #delay of 1 second while 1: data=str(ArduinoSerial.readline().decode('ascii')) #read the data (x,y,z)=data.split(":") # assigns to x,y and z (X,Y)=mouse.get_position() #read the cursor's current position (x,y)=(int(x),int(y)) #convert to int mouse.move(X+x,Y-y) #move cursor to desired position if '1' in z: # read the Status of SW mouse.click(button="left") # clicks left button