Tentang proyek ini
Proyek ini mirip dengan pekerjaan saya sebelumnya di mana saya telah menggunakan joystick untuk mengontrol kursor PC. Perbedaan utamanya adalah saya telah membuat aplikasi smartphone yang berisi 2 joystick virtual untuk menggerakkan kursor serta menggulir layar dan juga melakukan klik kiri dan kanan seperti trackpad biasa.
Bekerja
Proyek ini melibatkan aplikasi smartphone yang mengirimkan data sumbu x dan y joystick, status gulir, status klik kiri dan kanan menggunakan bluetooth ke Arduino Uno yang terhubung ke modul bluetooth HC-05. Data ini setelah diterima oleh Arduino dimanipulasi untuk membuat perubahan posisi kursor saat ini untuk mendapatkan posisi baru. Data yang dihasilkan beserta status scroll dan tombol kemudian dicetak sebagai output yang dikenali untuk dibaca oleh sketsa Python. Sketsa Python dibuat untuk mengeksekusi tindakan mouse menggunakan modul mouse.
Tentang Aplikasi
Aplikasi smartphone dibuat menggunakan MIT-App Inventor. Membuat aplikasi itu sederhana karena Anda hanya perlu menambahkan blok yang diinginkan untuk membangun aplikasi yang Anda butuhkan. Saya telah merujuk ke tutorial robotika Tabletop untuk membuatnya. Layar utama aplikasi adalah sebagai berikut-
Sebelum mengirim informasi utama ke modul HC-05, aplikasi terlebih dahulu mengirimkan nomor satu byte(255) untuk menunjukkan awal informasi. Urutan transfer data adalah sebagai berikut-
1. Kirim '255' untuk menunjukkan awal
2. Kirim nilai sumbu x joystick 1 byte
3. Kirim nilai sumbu y joystick 1 byte
4. Kirim status klik kiri, tombol klik kanan dan status gulir (1 byte).
Data dari aplikasi dikirim setiap 20 milidetik ke Arduino UNO.
Sisi Arduino
Bytes data dari Aplikasi diterima oleh Arduino dengan bantuan modul Bluetooth HC-05. Arduino berisi koordinat kursor saat ini di mana rentang koordinat x dari 0 hingga 1279 dan koordinat y berkisar dari 0 hingga 799. Saya telah memperoleh koordinat ekstrem ini dari fungsi python mouse.get_position()
yang mengembalikan koordinat saat kursor dipindahkan (tidak digunakan dalam sketsa utama).
Berdasarkan data yang diterima saat menggerakkan joystick, posisi kursor saat ini (koordinat x dan y) kemudian ditambahkan/dikurangi dengan data yang diterima oleh aplikasi untuk memindahkan kursor ke koordinat baru yang diinginkan. Data akhir kemudian dicetak pada monitor Serial secara berurutan di bawah ini.
Urutan data berikut ini akhirnya dibaca oleh program python untuk mengeksekusinya. Untuk ini, kita perlu mengunduh modul tambahan yaitu mouse dan pyserial dalam langkah-langkah yang diberikan di bawah ini.
Pemrograman Python
Pengguna harus menginstal python 3 di laptop/komputer mereka. Itu dapat diunduh dari sini.
(Untuk Windows)
Setelah instalasi, Salin jalur lokasi file python.
Langkah-langkah berikut harus dilakukan pada prompt perintah. Buka command prompt dan masukkan berikut-
1. cd
2. py –m pip install –-upgrade pip
3. py –m pip install mouse
4. py -m pip install pyserial
tikus modul digunakan untuk melakukan tindakan mouse dan pyserial modul digunakan untuk mengirim/menerima data dari arduino. Saya sudah menginstal modul yang diperlukan, jadi saya mendapatkan ini
Eksekusi
Instal aplikasi Bluetooth Mouse Control di perangkat ponsel cerdas Anda.
Unggah sketsa Arduino ke Arduino UNO Anda dan ikuti rangkaian seperti yang diberikan dalam skema.
Sisi python -
1. Copy paste kode python di file notepad. Ubah port COM ke port COM Arduino UNO Anda dan simpan sebagai '.py'.
2. Buka python IDLE dan buka bentuk file notepad.
3. Jalankan Sketsa.
Anda kemudian akan diarahkan kembali ke layar pada gambar 2.2.
Buka aplikasi smartphone dan sambungkan ke modul bluetooth dan Anda akan melihat gerakan kursor saat mengubah arah joystick.
Kode
Kode ArduinoArduino
int data diterima[5] {0,0,0,0}; // Untuk menyimpan byte dari phoneint in_byte =0;int array_index =0;int l_prev=0,r_prev=0; // status sebelumnya dari mouse klik kiri dan kanan void setup() {Serial.begin (9600); // memulai monitor serial} int height=0,width=0;void loop() { int klik=0; int sensitivitas=20; // Anda dapat mengatur sensitivitas int xpos=0,ypos=0;if (Serial.available()> 0) { //menerima byte dari ponsel in_byte=Serial.read(); //menyimpan dalam byte ke dalam variabel if (in_byte ==(255)) { // jika variabelnya 0 stet array diindeks ke 0. array_index =0; } data yang diterima[array_index] =in_byte; //menyimpan nomor ke dalam array array_index =array_index +1; if(data diterima[1]>=110)xpos=map(data diterima[1],110,172,0,sensitivitas); // Saat dipindahkan ke kananif(data diterima[1]<=70)xpos=map(data diterima[1],60,1,0,-sensitivitas); // Saat dipindahkan ke kiriif(dataditerima[2]>=110)ypos=map(data diterima[2],110,255,0,sensitivitas); // Saat dipindahkan ke bawahif(datareceived[2]<=60)ypos=map(datareceived[2],70,1,0,-sensitivity); // Saat dipindahkan ke atas(data diterima[3]==1 &&l_prev==0) // UNTUK mengenali satu tombol tekan clicks=1;else if(datareceived[3]==2 &&r_prev==0)clicks=2;else if(data diterima[3]==3 || data diterima[3]==4)clicks=dataditerima[3]; // scrolll_prev=datareceived[3];r_prev=datareceived[3];if(xpos!=0 atau ypos!=0 atau clicks!=0) // ketika salah satu joystick dipindahkan atau tombol ditekan atau digulir{ tinggi=tinggi+ypos;lebar=lebar+xpos;jika(tinggi>=799)tinggi=799;jika(tinggi<=0)tinggi=0;jika(lebar>=1279)lebar=1279;jika(lebar<=0)width=0;Serial.print(width);Serial.print(":");Serial.print(height);Serial.print(":");Serial.println(klik);klik=0;} }}
Kode PythonPython
impor mouse, sysimport time import serialmouse.FAILSAFE=FalseArduinoSerial=serial.Serial('com3',9600) #Tentukan porttime COM yang benar.sleep(1) #delay 1 detik while 1:data=str(ArduinoSerial.readline ().decode('ascii')) (x,y,z)=data.split(":") # membaca data sumbu x dan y (x,y)=(int(x),int(y) ) # convert to int mouse.move(x,y) # pindahkan kursor ke koordinat yang diinginkan jika '1' di z:mouse.click(button="left") #klik tombol mouse elif '2' di z:mouse. click(button="right") elif '3' di z:mouse.wheel(delta=-1) # Gulir ke bawah elif '4' di z:mouse.wheel(delta=1) # Gulir ke atas
Skema