
Isi kandungan:
2025 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2025-01-23 15:01



Pengenalan
Tangan Ajaib membolehkan orang kurang upaya dan gangguan kemahiran motor menikmati kreativiti melukis dan menulis dalam persekitaran simulasi. Magic Hand adalah sarung tangan yang dapat dipakai yang merasakan pergerakan jari telunjuk anda dan menerjemahkannya ke dalam lukisan garis pada skrin komputer.
Bahan Yang Diperlukan
LSM9DOF Breakout Board --- $ 24.95 ---
Adafruit Feather with Wifi --- $ 18.95 ---
Wayar Perempuan / Perempuan --- $ 1.95 ---
Jalur pita / Velcro --- $ 3
Dua magnet yang sama kekuatan --- Harga berbeza
Bagaimana ia berfungsi
Dengan menggunakan accelerometer, kita dapat mengumpulkan data pecutan untuk paksi-y yang akan membantu kita menentukan kapan jari pengguna bergerak naik dan turun. Oleh kerana akselerometer kita mengukur pecutan sehubungan dengan pusat bumi, kita tidak dapat menentukan pecutan paksi-x (kiri atau kanan). Nasib baik papan pelarian LSM9DOF juga mengandungi magnetometer yang membolehkan kita mengumpulkan data mengenai medan magnet. Kami meletakkan dua magnet 30 cm dan mempunyai sarung di antara. Sekiranya data magnetik dibaca positif maka kita tahu sarung tangan bergerak ke kanan dan sebaliknya. Setelah semua data dikumpulkan dalam accelerometer / magnetometer, ia mengirimkan data melalui wayar ke bulu yang disambungkan ke komputer wifi dan kemudian meneruskan data ke komputer yang kemudian dapat kita gunakan dalam kod kita.
Langkah 1: Prototaip Fizikal 1


Prototaip ini dimaksudkan untuk sarung tangan yang dijahit secara longgar di tangan agar tergelincir di atas alat elektronik. Peranti elektronik kemudian akan dilampirkan dengan velcro ke pangkal lengan bawah yang digabungkan dengan sarung tangan asas di tangan. Kemudian sarung tangan hijau akan tergelincir di dasar dan alat elektronik….
Langkah-langkah membuat sarung tangan prototaip:
- Dapatkan dua helai kain yang cukup besar untuk mengesan tangan
- Jejak tangan ke kedua-dua helai kain dan potong
- Letakkan kedua potongan tangan bersama-sama sehingga mereka diselaraskan dengan sempurna
- Seterusnya, untuk menyiapkan mesin jahit, jalankan benang melalui tempat yang ditunjukkan pada mesin
- Semasa mesin jahit dipasang, angkat jarum dan letakkan dua helai kain yang disatukan di bawah jarum
- Pastikan jarum berbaris di tepi kain, mulakan mesin, dan jahit di sepanjang tepi kain, sambil membiarkan kedua-dua kepingan itu tidak terpakai di pergelangan tangan sehingga tangan dapat masuk.
Langkah 2: Prototaip Fizikal 2


Prototaip terakhir kami adalah sarung tangan biasa yang digabungkan dengan tali Velcro yang boleh disesuaikan dengan pergelangan tangan mana pun. Sarung tangan dan tali dijahit bersama, dan alat elektronik dipasang pada sarung tangan melalui Velcro.
Langkah-langkah membuat prototaip sarung tangan ke-2:
- Beli sarung tangan, bahan sarung tangan tidak menjadi masalah.
- Beli tali pergelangan tangan velcro
- Beli bateri mudah alih
- Beli Velcro Melekit
- Dengan jarum jahit, pasangkan tali pergelangan tangan velcro ke pangkal sarung tangan
- Tali pergelangan tangan harus dapat disesuaikan dengan saiz pergelangan tangan yang berbeza.
- Pasang pita lekat ke pangkal pecutan dan pasangkan pada jari telunjuk sarung tangan
- Pasang pita lekat pada bulu dan pasangkan ke bahagian atas sarung tangan.
- Dengan menggunakan wayar, sambungkan pin 3V3 di bulu ke pin VIN di pecutan
- Dengan menggunakan wayar, sambungkan pin GND di bulu ke pin GND pecutan.
- Dengan menggunakan wayar, sambungkan pin SCL di bulu ke pin SCL akselerometer.
- Dengan menggunakan wayar, sambungkan pin SDA di bulu ke pin SDA akselerometer.
- Sambungkan sekurang-kurangnya bateri 5 volt melalui usb ke bulu untuk memberikan kuasa.
Langkah 3: Magnet

Langkah 1: Letakkan dua magnet sama kekuatan antara satu sama lain.
Langkah 2: Ukur jarak 30 cm antara dua magnet
Langkah 3: letakkan Magnetometer tepat di tengah-tengah dua magnet. Anda harus menerima data sekitar 0 sementara di tengah. Sekiranya anda menerima bacaan sifar, lompat ke langkah 5.
Langkah 4: Sekiranya bacaan tidak sifar atau mendekati sifar maka anda mesti menyesuaikan jarak magnet. Sekiranya bacaannya negatif gerakkan magnet kiri satu cm atau 2 ke kiri atau sehingga bacaan adalah sifar. Sekiranya positif lakukan perkara yang sama kecuali dengan magnet yang betul.
Langkah 5: Tuliskan kod yang menerima data dari magnetometer dan baca sama ada positif atau negatif. Sekiranya positif, kodkan garis ke kanan dan jika negatif gariskan garis ke kiri.
Langkah 4: Kod

github.iu.edu/ise-e101-F17/MuscleMemory-Sw…
Pengenalan:
Untuk memproses data dari accelerometer, hubungan klien / pelayan harus dijalin antara Adafruit feather dan server yang memproses data (berjalan di komputer riba / desktop). Dua fail kod perlu dibuat: satu untuk pelanggan (bulu Adafruit), dan yang lain untuk pelayan (dalam kes ini, komputer riba Jarod). Pelanggan ditulis dalam C ++, dan pelayan ditulis dalam python. Bahasa yang digunakan untuk pelanggan penting kerana Arduino terutama merupakan bahasa C ++, dan mengubahnya untuk menggunakan bahasa yang lain adalah sukar. Pelayan boleh ditulis dalam bahasa apa pun, asalkan mempunyai ciri rangkaian.
Menyiapkan Pelanggan:
Pertama, kami akan menetapkan kod pelanggan. Sebilangan besar kod sambungan WiFi tersedia melalui perpustakaan Adafruit. Kita mulakan dengan memasukkan kelas yang berkaitan.
#sertakan #sertakan #sertakan #sertakan #sertakan
Tetapkan beberapa pemboleh ubah yang akan digunakan di seluruh kod.
// Sambungkan ke rangkaian rangkaian char * ssid = "MMServer"; const char * kata laluan = "MMServer-Password"; // IP dan port pelayan yang akan menerima data const char * host = "149.160.251.3"; port int int = 12347; bool bersambung = salah;
// Memulakan pengesan gerakan
Adafruit_LSM9DS0 lsm = Adafruit_LSM9DS0 (1000);
Pelanggan WiFiClient;
Buat fungsi setup () yang akan dijalankan sebaik sahaja bulu dimulakan.
// Siapkan sambungan WiFi, dan sambungkan ke persediaan pelayan () {Serial.begin (9600); kelewatan (100);
Bersiri.println ();
Bersiri.println (); Serial.print ("Menyambung ke"); Serial.println (ssid); // Mulakan WiFi WiFi.begin (ssid, kata laluan); // Bersambung… sementara (WiFi.status ()! = WL_CONNECTED) {kelewatan (500); Cetakan bersiri ("."); } // Berjaya disambungkan ke WiFi Serial.println (""); Serial.println ("WiFi disambungkan"); Serial.println ("Alamat IP:"); Serial.println (WiFi.localIP ());
#ifndef ESP8266
sementara (! bersiri); #endif Serial.begin (9600); Serial.println ("Uji Sensor");
// Permulaan sensor
if (! lsm.begin ()) {// Terdapat masalah mengesan LSM9DS0 Serial.print (F ("Ooops, tiada LSM9DS0 yang dikesan … Periksa pendawaian anda atau I2C ADDR!")); sementara (1); } Serial.println (F ("Dijumpai LSM9DS0 9DOF")); // Mulakan penyambungan ke pelayan Serial.print ("Menyambung ke"); Serial.println (hos);
// Periksa sambungan yang berjaya. Sekiranya gagal maka batalkan
jika (! client.connect (host, port)) {Serial.println ("sambungan gagal"); bersambung = palsu; kembali; } lain {bersambung = benar; }
// Siapkan kenaikan sensor dan masa integrasi
konfigurasiSensor (); }
Kita kemudian memerlukan fungsi gelung yang akan berulang kali berulang. Dalam hal ini, digunakan untuk berulang kali mengirim data dari akselerometer ke pelayan dalam bentuk “[z_accel]: [y_mag]: [z_mag]”. Cetakan pelanggan (nombor); fungsi adalah apa yang menghantar data ke pelayan.
gelung kekosongan () {kelewatan (250); jika (disambungkan) {// Ini akan menghantar data ke pelayan sensor_event_t accel, mag, gyro, temp; lsm.getEvent (& accel, & mag, & gyro, & temp); Nombor rentetan; nombor + = accel.acceleration.z; nombor + = ":"; nombor + = mag.magnetic.y; nombor + = ":"; nombor + = mag.magnetic.z; Cetakan bersiri (nombor); pelanggan.cetakan (nombor); Bersiri.println (); } lain {createConnection (); }}
Untuk beberapa fungsi utiliti, kita memerlukan satu untuk mewujudkan hubungan antara bulu dan pelayan.
batal createConnection () {if (! client.connect (host, port)) {Serial.println ("sambungan gagal"); bersambung = palsu; kembali; } lain {bersambung = benar; }}
Kita juga perlu mengkonfigurasi sensor dan memberikan julat nilai yang akan dibacanya. Sebagai contoh, pecutan mempunyai 5 pilihan untuk julat: 2g, 4g, 6g, 8g, dan 16g.
void configigureSensor (void) {// Tetapkan julat pecutan //lsm.setupAccel(lsm. LSM9DS0_ACCELRANGE_2G); lsm.setupAccel (lsm. LSM9DS0_ACCELRANGE_4G); //lsm.setupAccel(lsm. LSM9DS0_ACCELRANGE_6G); //lsm.setupAccel(lsm. LSM9DS0_ACCELRANGE_8G); //lsm.setupAccel(lsm. LSM9DS0_ACCELRANGE_16G); // Tetapkan kepekaan magnetometer //lsm.setupMag(lsm. LSM9DS0_MAGGAIN_2GAUSS); //lsm.setupMag(lsm. LSM9DS0_MAGGAIN_4GAUSS); //lsm.setupMag(lsm. LSM9DS0_MAGGAIN_8GAUSS); lsm.setupMag (lsm. LSM9DS0_MAGGAIN_12GAUSS);
// Siapkan giroskop
lsm.setupGyro (lsm. LSM9DS0_GYROSCALE_245DPS); //lsm.setupGyro(lsm. LSM9DS0_GYROSCALE_500DPS); //lsm.setupGyro(lsm. LSM9DS0_GYROSCALE_2000DPS); }
Menyiapkan Pelayan:
Pelayan akan menjadi fail python yang akan dijalankan pada baris perintah komputer. Untuk memulakan, import kelas yang diperlukan.
import socketimport re import pyautogui
soket digunakan untuk rangkaian. re digunakan untuk regex, atau manipulasi rentetan. pyautogui adalah pustaka python yang akan membolehkan lukisan itu berlaku (dibincangkan kemudian).
Seterusnya, kita harus menentukan beberapa pemboleh ubah. Ini akan menjadi pemboleh ubah global, sehingga dapat diakses dalam beberapa fungsi. Mereka akan digunakan kemudian dalam kod.
i = 0n = 0 garis = 1
data_list =
mag_data =
mag_calib_y = 0 mag_offset_y = 0
z_calib = 0
z_offset = 0 z_moving_offset = 0 z_diff = 0 z_real = 0 z_velo = 0 z_pos = 0
keep_offset = Salah
first_data = Betul
Kita sekarang memerlukan fungsi untuk membuat pelayan dan membukanya untuk sambungan masuk.
def startServer (): global i global first_data # initialize server socket serversocket = socket.socket (socket. AF_INET, socket. SOCK_STREAM) serversocket.setsockopt (socket. SOL_SOCKET, socket. SO_REUSEADDR, 1) # Alamat IP pelayan dan host port = " 149.160.251.3 "port = 12347 server_address = (host, port) # Buka pelayan dan dengarkan cetakan sambungan masuk ('Memulakan pelayan pada% s port% s'% server_address) serversocket.bind (server_address) serversocket.listen (5) # Tunggu sambungan … sementara Benar: cetak ('Menunggu sambungan …') # Terima sambungan masuk (soket klien, alamat) = serverocket.accept () # Cuba menguraikan data yang diterima cuba: cetak ('Sambungan dibuat dari', alamat) manakala True: # Terima data dan hantarkan untuk memproses data = clientsocket.recv (25) accel_data = re.split ('[:]', str (data)) accel_data [0] = accel_data [0] [2:] accel_data [1] = accel_data [1] accel_data [2] = accel_data [2] [1: -1] print (accel_data) i + = 1 if (i <51): calibData (accel_data) lain: movingAcce l (accel_data [0]) processData (accel_data) first_data = Palsu akhirnya: # Tutup soket untuk mengelakkan kebocoran data yang tidak perlu clientocket.close ()
Kami sekarang memerlukan fungsi yang akan memproses semua data. Langkah pertama yang harus diambil, dan fungsi pertama yang disebut, adalah penentukuran sensor untuk tujuan pengiraan.
def calibData (senarai): global z_calib global z_offset global mag_data global mag_calib_y global mag_offset_y z_calib + = float (list [0]) mag_calib_y + = float (list [1]) if (i == 50): z_offset = z_calib / 50 mag_offset_y = mag_calib_y / 50 z_calib = 0 mag_calib_y = 0 mag_data.append (mag_offset_y)
Seterusnya, kami membuat ofset pecutan bergerak. Ini membuatnya sehingga program dapat mengenali ketika seseorang berhenti menggerakkan jari mereka kerana semua nilai percepatan yang dikirim ke pelayan harus sama pada waktu itu.
def moveAccel (num): global z_calib global z_diff global z_moving_offset global z_offset global data_list global n global keep_offset if (n 0.2 or z_diff <-0.2): # gerakan dikesan dalam data, mulakan semula keep_offset = True n = 0 z_calib = 0 z_moving_offset = 0 z_diff = 0 data_list = rehat jika tidak keep_offset: # pegun dalam data, tetapkan z_offset z_offset = z_moving_offset cetak baru ("z_offset baru:") cetak (z_offset) n = 0 z_calib = 0 z_moving_offset = 0 z_diff = 0 data_list = keep_offset = Salah keep_offset = Salah
Seterusnya, kita melakukan sebahagian besar matematik. Ini melibatkan menterjemahkan data pecutan menjadi data kedudukan yang akan membolehkan kita memberitahu arah yang pengguna menggerakkan jari mereka.
proses defData (senarai): # [accel.z, mag.y] global z_offset global z_real global z_velo global z_pos global first_data global mag_data
z_real = float (senarai [0]) - z_offset
mag_y = list [1] mag_z = list [2] left = False right = False # Jangan memproses pecutan sehingga benar-benar yakin ia telah mempercepat # Mencegah bunyi mekanikal menyumbang kepada kedudukan jika (z_real -0.20): z_real = 0 #Begin integrasi untuk mencari kedudukan jika (first_data): mag_data.append (mag_y) z_pos = (0.5 * z_real * 0.25 * 0.25) + (z_velo * 0.25) + z_pos z_velo = z_real * 0.25 pyautogui.moveTo (1500, 1000) yang lain: z_pos = (0.5 * z_real * 0.25 * 0.25) + (z_velo * 0.25) + z_pos z_velo = (z_real * 0.25) + z_velo del mag_data [0] mag_data.append (mag_y) if (float (mag_data [1]) - float (mag_data [0])> 0.03): kanan = Benar elif (terapung (mag_data [1]) - terapung (mag_data [0]) <-0.03): kiri = Benar jika (kanan): pergerakan (50, int (z_pos * 1000)) elif (kiri): pergerakan (-50, int (z_pos * 1000)) z_velo = 0 z_pos = 0
Sekarang, akhirnya, kita menggerakkan kursor! Untuk melakukan ini, kami membuka tetingkap cat dan menjadikannya skrin penuh. Perpustakaan pyautogui mengandungi fungsi yang disebut pyautogui.dragRel (x, y); yang kita gunakan untuk menyeret kursor tetikus dari satu titik ke titik yang lain. Ia menggunakan data kedudukan relatif sehingga pergerakannya relatif dengan kedudukan terakhir kursor.
pergerakan def (x, y): cetak ("bergerak ke", x, -y) pyautogui.dragRel (x, -y)
Terakhir, kita perlu memanggil fungsi utama untuk membiarkan semua kod ini dijalankan.
# Memanggil fungsi untuk memulakan serverstartServer ()
Disyorkan:
FeatherQuill - Penulisan Bebas Gangguan selama 34+ Jam: 8 Langkah (dengan Gambar)

FeatherQuill - Penulisan Bebas Gangguan selama 34+ Jam: Saya menulis untuk mencari nafkah, dan menghabiskan sebahagian besar hari kerja saya duduk di hadapan komputer desktop saya sambil mengeluarkan artikel. Saya membina FeatherQuill kerana saya mahukan pengalaman menaip yang memuaskan walaupun saya berada di luar. Ini adalah gangguan khusus
Suis Cahaya Kawalan Jauh Bluetooth - Retrofit. Suis Lampu Masih Berfungsi, Tanpa Penulisan Tambahan: 9 Langkah (dengan Gambar)

Suis Cahaya Kawalan Jauh Bluetooth - Retrofit. Suis Ringan Masih Berfungsi, Tidak Ada Penulisan Tambahan: Kemas kini 25 November 2017 - Untuk versi Kuasa Tinggi projek ini yang dapat mengawal kilowatt beban lihat Retrofit BLE Control to High Power Load - Tidak Perlu Pendawaian Tambahan Diperbarui 15 November 2017 - Beberapa papan / perisian tumpukan perisian BLE
Tangan Robotik Dengan Sarung Tangan Tanpa Wayar Dikawal - NRF24L01 + - Arduino: 7 Langkah (dengan Gambar)

Tangan Robotik Dengan Sarung Tangan Tanpa Wayar Dikawal | NRF24L01 + | Arduino: Dalam video ini; Pemasangan tangan robot 3D, kawalan servo, kawalan sensor lentur, kawalan tanpa wayar dengan nRF24L01, kod sumber penerima dan pemancar Arduino tersedia. Ringkasnya, dalam projek ini kita akan belajar bagaimana mengendalikan tangan robot dengan wayar
Cip Tangan Kecil Teeny Solder Tangan !: 6 Langkah (dengan Gambar)

Cip Tangan Kecil Teeny Tiny!: Pernahkah anda melihat cip yang lebih kecil daripada hujung jari anda, dan tidak mempunyai pin, dan tertanya-tanya bagaimana mungkin anda boleh menyoldernya dengan tangan? yang lain yang diajar oleh Colin mempunyai penjelasan yang bagus untuk melakukan pematerian reflow anda sendiri, tetapi jika anda
Beg Tangan Ajaib: 6 Langkah (dengan Gambar)

The Magic Suitcase: The Magic Suitcase adalah cabang dari projek Magic Mirror diymagicmirror.com Beg pakaian itu terletak di atas komputer riba yang menjalankan perisian. Komputer riba disambungkan ke Arduino yang disambungkan ke beberapa sensor. Inilah arkitek logik