Jika Anda pemula, saya sarankan membaca tutorial berikut:
Arduino - Motor
Arduino - Motor Servo
Arduino - Wifi
1. Demonstrasi
2. Antarmuka Pengguna
Lengan robot memiliki 6 motor.
Zona A:Kontrol motor 2, 3, 4 (kontrol tiga sambungan tangan)
Zona B:Motor kontrol 1 (basis kontrol)
Zona C:Kontrol motor 5 (kontrol rotasi gripper)
Zona D:Motor kontrol 6 (pegangan kontrol)
3. Arsitektur Sistem
4. Alur Kerja
Sisi Klien (antarmuka pengguna web - ditulis dalam JavaScript + HTML + CSS)
Ketika pengguna menyentuh atau menyapu jari (atau mengklik atau menggerakkan mouse), kita bisa mendapatkan koordinat (x, y). Alur kerjanya adalah sebagai berikut:
Dalam kasus Zona A, untuk menghitung sudut motor 2, 3, 4, kita perlu melakukan beberapa perhitungan geometrik . Anda dapat merujuknya di akhir halaman ini.
Sisi Server (Kode Arduino):
Setelah menerima satu set sudut dari klien, enam motor bergerak dari sudut saat ini ke sudut baru secara bertahap. Enam motor harus bergerak dan mencapai sudut baru secara bersamaan. Sebelum masuk ke detail cara mengontrol semua motor, mari kita lihat cara mengontrol satu motor. Misalkan kita ingin memindahkan motor dari sudut arus (sudut) ke sudut baru (sudut_baru). Karena kecepatan motor tinggi, kita harus memperlambatnya. Untuk melakukannya, dua langkah berikut diulang sampai motor mencapai sudut baru:
Pindahkan motor dengan langkah kecil.
Jeda sebentar, lalu pindahkan satu langkah lagi.
Diagram berikut mengilustrasikan skema di atas jika sudut baru lebih besar dari sudut saat ini:
Di mana step_numis jumlah langkah yang harus diambil motor.langkah dan waktuadalah nilai yang telah ditentukan sebelumnya. Dua yang kemudian menentukan kecepatan dan kelancaran. Di atas hanya untuk satu robot. Untuk membuat robot mulai bergerak dan mencapai tujuan pada saat yang sama, kita dapat melakukan hal berikut:Enam motor mengambil jumlah_langkah yang sama , tapi langkah masing-masing motor berbeda satu sama lain. Jadi kita harus memilih step_num dalam proyek ini maksimal.
Secara umum, alur kerja Arduino adalah sebagai berikut:
5. Perhitungan Geometris
Mari kita buat perhitungan lengan robot ke dalam soal geometri berikut:
Dikenal
C sudah diperbaiki
Titik yang diketahui - D adalah input dari pengguna
Titik yang diketahui - CB, BA, AD (masing-masing dilambangkan dengan b, a, d)
Panjang setiap segmen lengan Temukan: sudut C, B, A Solusi:
Asumsikan sudut B dan A sama
Tambahkan beberapa poin dan segmen tambahan
Perhitungan
Kita mengetahui titik C dan D => kita dapat menghitung panjang DC (dilambangkan dengan c)
Kita juga bisa menghitung
Lihat segitiga ABE, kita dapat menyimpulkan bahwa AE =BE dan E =- 2α.
Jadi:
Hukum Cosinus pada segitiga CDE:
Ubah (1) dan (2) menjadi (3), kita mendapatkan:
Sederhanakan
Sederhanakan di atas:
Karena kita mengetahui a, b, c dan d, selesaikan persamaan kuadrat di atas, kita dapat menghitung nilai . - Dan =– - Sampai sekarang kita menemukan , mari kita cari - Hukum Cosinus pada segitiga BDC dan BDA:
Pecahkan rangkaian persamaan ini, kita dapat menghitung .
Jadi, sudut yang dibutuhkan adalah:(δ+γ), dan . Ini adalah sudut masing-masing motor 2, 3 dan 4.
6. Kode Sumber
Kode sumber mencakup dua file:
RobotArmWeb.ino :kode Arduino
Remote_arm.php :Kode aplikasi web, yang diunggah ke PHPoC WiFi Shield atau PHPoC Shield. (Lihat instruksi dalam artikel ini.)
Anda juga perlu mengunggah file gambar flywheel.png ke PHPoC Shield.
Kit Pemula Arduino Terbaik untuk Pemula
Jika Anda mencari kit Arduino, lihat Kit Arduino Terbaik untuk Pemula
Referensi Fungsi
Arduino - Perpustakaan Servo
Servo.attach()
Servo.write()
Servo.writeMicroseconds()
Servo.read()
Servo.attached()
Servo.detach()
Serial.begin()
Serial.println()
Kode
RobotArmWeb
remote_arm.php
RobotArmWebArduino
Ini adalah Kode Arduino
#include #include int angle_init[] ={90, 101, 165, 153, 90, 120}; // saat motor berdiri tegak. Di web, sudut saat motor berdiri lurus adalah {0, 90, 130, 180, 0, 0};int angle_offset[] ={0, 11, -15, -27, 0, 137}; // offset antara motor servo nyata dan sudut pada webint cur_angles[] ={90, 101, 165, 153, 90, 120}; // sudut arus enam motor (derajat) int dest_angles[] ={0, 0, 0, 0, 0, 0}; // sudut yang ditentukanint angle_max[] ={180, 180, 160, 120, 180, 137};int angle_min[] ={ 0, 0, 0, 20, 0, 75};int arah[] ={1, 1 , 1, 1, 1 ,-1};int angleSteps[] ={3, 2, 2, 2, 4 ,4}; // langkah langkah setiap motor (derajat)Servo servo1;Servo servo2;Servo servo3;Servo servo4;Servo servo5;Servo servo6;Servo servo[6] ={servo1, servo2, servo3, servo4, servo5, servo6};PhpocServer server (80);Klien PhpocClient;int stepNum =0;pengaturan batal(){ Serial.begin(9600); Phpoc.begin(PF_LOG_SPI | PF_LOG_NET); server.beginWebSocket("lengan_jauh"); servo1.attach(2); // menempelkan servo pada pin 2 ke objek servo servo2.attach(3); // menempelkan servo pada pin 3 ke objek servo servo3.attach(4); // menempelkan servo pada pin 4 ke objek servo servo4.attach(5); // menempelkan servo pada pin 5 ke objek servo servo5.attach(6); // pasang servo pada pin 6 ke objek servo servo6.attach(7); // menempelkan servo pada pin 7 ke objek servo for(int i =0; i <6; i++) servo[i].write(angle_init[i]);}void loop() { PhpocClient client =server.available (); if(klien) { String angleStr =client.readLine(); if(angleStr) { Serial.println(angleStr); int komaPos1 =-1; int komaPos2; for(int i =0; i <5; i++) { commaPos2 =angleStr.indexOf(',', commaPos1 + 1); int sudut =angleStr.substring(commaPos1 + 1, commaPos2).toInt(); dest_angles[i] =sudut * arah[i] + angle_offset[i]; komaPos1 =komaPos2; } int angle5 =angleStr.substring(commaPos1 + 1).toInt(); dest_angles[5] =angle5 * arah[5] + angle_offset[5]; langkahNum =0; // gerakkan motor dalam banyak langkah kecil untuk membuat motor bergerak dengan mulus, hindari menggerakkan motor secara tiba-tiba. Di bawah ini adalah langkah perhitungan for(int i =0; i <6; i++) { int dif =abs(cur_angles[i] - dest_angles[i]); int langkah =dif / angleSteps[i]; if(stepNum 0) { for(int i =0; i <6; i++) { int angleStepMove =(dest_angles[i] - cur_angles[i]) / stepNum; cur_angles[i] +=angleStepMove; if(cur_angles[i]> angle_max[i]) cur_angles[i] =angle_max[i]; else if(cur_angles[i]
remote_arm.phpPHP
Kode ini adalah aplikasi web.
Arduino - Arm Robot - Web
Arduino - Robot Lengan Kontrol melalui Web
WebSocket :null
Skema
Perlu menyediakan sumber daya eksternal untuk 6 motor