Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Dalam tutorial ini saya akan menunjukkan bagaimana saya membuat Platform Robot Roda Mecanum saya dari video sebelumnya, untuk bekerja sama dan beroperasi secara otomatis dengan Lengan Robot cetak 3D saya, juga proyek Arduino dari salah satu video saya sebelumnya.

Anda dapat menonton video berikut atau membaca tutorial tertulis di bawahnya.

Ringkasan

Jadi, kita dapat mengontrol robot roda Mecanum dengan aplikasi Android buatan kami dengan cara yang sama seperti yang dijelaskan dalam video sebelumnya. Selain itu, sekarang aplikasi juga memiliki tombol untuk mengontrol lengan robot.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Aplikasi kontrol lengan robot aslinya sebenarnya memiliki slider untuk mengontrol sendi lengan, tetapi itu menyebabkan beberapa masalah dengan stabilitas lengan. Dengan cara ini lengan bekerja jauh lebih baik, jadi oleh karena itu saya akan menyediakan versi terbaru aplikasi kontrol lengan robot dan kode Arduino ke proyek lengan robot asli juga.

Namun, fitur terkeren dari robot ini adalah kemampuan untuk menyimpan gerakan dan kemudian secara otomatis mengulanginya.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Menggunakan tombol Save, kita dapat dengan mudah menyimpan posisi motor untuk setiap langkah. Kemudian kita hanya perlu klik tombol Run dan robot akan secara otomatis mengulang gerakan yang disimpan berulang kali.

Membangun Robot Arduino

Oke, jadi di sini saya sudah memiliki platform roda Mecanum yang telah dirakit dan Anda dapat menemukan semua detail tentangnya dalam video saya sebelumnya.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Selain itu, di sini saya memiliki bagian cetak 3D dari lengan robot dan motor servo dan sekarang saya akan menunjukkan cara merakitnya. Inilah model 3D dari proyek ini.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Anda dapat menemukan dan mengunduh model 3D ini, serta menjelajahnya di browser Anda di Thangs.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Unduh model 3D di Thangs.

File STL untuk Cetak 3D:

Servo pertama dari lengan robot akan langsung dipasang pada tutup atas platform roda Mecanum.

Saya menandai lokasinya, dan menggunakan bor 10mm saya membuat beberapa lubang.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Kemudian menggunakan raspa, saya memotong melalui lubang dan kemudian menyesuaikan pembukaan untuk servo. Saya mengamankan servo pada papan atas menggunakan empat baut dan nut M3.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Kemudian pada poros output servo ini, menggunakan tanduk bundar yang datang sebagai aksesori dengan servo, kita perlu menempelkan bagian berikutnya atau pinggang lengan robot. Namun, kita dapat memperhatikan bahwa dengan cara ini bagian tetap sekitar 8mm di atas papan. Jadi oleh karena itu, saya memasang dua potongan papan MDF 8mm, sehingga bagian pinggang dapat meluncur di atasnya dan jadi sendi akan lebih stabil.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Tanduk bundar diamankan pada bagian pinggang menggunakan baut self-tapping yang datang sebagai aksesori dengan servo, dan kemudian tanduk bundar diamankan pada poros servo menggunakan baut yang sesuai yang juga datang dengan servo.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Selanjutnya kita memiliki servo bahu. Kami hanya menempatkannya di tempat dan mengamankannya pada bagian cetak 3D menggunakan baut self-tapping.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Tanduk bundar pergi ke bagian berikutnya, dan kemudian kedua bagian diamankan satu sama lain menggunakan baut pada poros output servo.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Kita harus mencatat bahwa sebelum mengamankan bagian, kita perlu memastikan bahwa bagian memiliki rentang gerakan penuh. Di sini saya juga menambahkan getah karet pada sendi bahu sehingga memberikan sedikit bantuan kepada servo, karena servo ini memikul beban sisa lengan serta beban.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Dengan cara yang serupa, saya merakit sisa lengan robot.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Selanjutnya, kita perlu merakit mekanisme pegang. Pegang dikontrol dengan motor servo SG90, di mana, pertama-tama kita memasang tautan gigi yang dirancang khusus. Kami memasangkan tautan ini dengan tautan gigi lainnya di sisi lain, yang diamankan menggunakan baut dan nut M4. Sebenarnya, semua tautan lain dihubungkan menggunakan baut dan nut M4.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Model 3D pegang asli memiliki lubang 3mm tetapi saya tidak memiliki cukup baut M3, jadi oleh karena itu saya memperluas lubang menggunakan bor 4mm dan menggunakan baut M4 sebagai gantinya.

Setelah saya merakit mekanisme pegang, saya mengamankannya pada servo terakhir dan jadi lengan robot selesai.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Selanjutnya saya melakukan manajemen kabel. Saya melewati kabel servo melalui lubang yang dirancang khusus dari lengan robot. Menggunakan bor 10mm saya membuat lubang pada papan atas sehingga kabel dapat melewatinya.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Menggunakan ikat kabel saya mengamankan semua kabel bersama, dan sekarang yang tersisa adalah menghubungkannya ke papan Arduino.

Diagram Rangkaian Robot Arduino

Inilah diagram rangkaian proyek ini dan bagaimana semuanya perlu dihubungkan.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Anda dapat mendapatkan komponen yang diperlukan untuk proyek ini dari tautan di bawah ini:

Dalam tutorial sebelumnya saya menjelaskan bagaimana bagian robot roda Mecanum bekerja dan juga menunjukkan bagaimana saya membuat PCB khusus untuk itu.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Saya menyertakan regulator tegangan 5V pada PCB ini sehingga kita dapat membuat proyek ini, atau menghubungkan motor servo karena mereka bekerja pada 5V. Regulator tegangan adalah LM350, yang dapat menahan hingga 3 ampere arus. Enam servo lengan robot dapat menarik sekitar 2 ampere hingga 3 ampere arus, yang berarti itu dapat menanganinya tetapi itu akan menyebabkan regulator menjadi sangat panas.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Oleh karena itu, saya melekatkan pendingin panas padanya, serta kipas DC 12V kecil untuk mencurahkan beberapa udara, karena pendingin panas itu sendiri tidak cukup untuk mendinginkan regulator.

Saya menghubungkan kabel sinyal servo ke pin digital Arduino dari nomor 5 hingga 10, dan untuk daya saya menggunakan pin header 5V pada PCB. Akhirnya, saya mendorong semua kabel ke dalam platform, dan mengamankan papan atas padanya menggunakan dua nut.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Dan itu saja, sekarang kita selesai dengan proyek ini.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Kode Arduino

Yang tersisa adalah untuk melihat bagaimana kode Arduino dan aplikasi Android bekerja. Karena kodenya cukup panjang, untuk pemahaman yang lebih baik, saya akan memposting kode sumber program dalam bagian-bagian dengan deskripsi untuk setiap bagian. Dan di akhir artikel ini saya akan memposting kode sumber lengkap.

Jadi pertama kita perlu mendefinisikan 6 servo, 4 motor stepper dan komunikasi Bluetooth, serta mendefinisikan beberapa variabel yang dibutuhkan untuk program di bawah. Di bagian setup kita mengatur kecepatan maksimum steppers, menentukan pin tempat servo terhubung, memulai komunikasi Bluetooth dan mengatur lengan robot ke posisi awal.

#include <SoftwareSerial.h> #include <AccelStepper.h> #include <Servo.h> Servo servo01; Servo servo02; Servo servo03; Servo servo04; Servo servo05; Servo servo06; SoftwareSerial Bluetooth(A8, 38); // Arduino(RX, TX) - HC-05 Bluetooth (TX, RX) // Define the stepper motors and the pins the will use AccelStepper LeftBackWheel(1, 42, 43); // (Type:driver, STEP, DIR) - Stepper1 AccelStepper LeftFrontWheel(1, 40, 41); // Stepper2 AccelStepper RightBackWheel(1, 44, 45); // Stepper3 AccelStepper RightFrontWheel(1, 46, 47); // Stepper4 #define led 14 int wheelSpeed = 1500; int lbw[50], lfw[50], rbw[50], rfw[50]; // arrays for storing positions/steps int servo1Pos, servo2Pos, servo3Pos, servo4Pos, servo5Pos, servo6Pos; // current position int servo1PPos, servo2PPos, servo3PPos, servo4PPos, servo5PPos, servo6PPos; // previous position int servo01SP[50], servo02SP[50], servo03SP[50], servo04SP[50], servo05SP[50], servo06SP[50]; // for storing positions/steps int speedDelay = 20; int index = 0; int dataIn; int m = 0; void setup() { // Set initial seed values for the steppers LeftFrontWheel.setMaxSpeed(3000); LeftBackWheel.setMaxSpeed(3000); RightFrontWheel.setMaxSpeed(3000); RightBackWheel.setMaxSpeed(3000); pinMode(led, OUTPUT); servo01.attach(5); servo02.attach(6); servo03.attach(7); servo04.attach(8); servo05.attach(9); servo06.attach(10); Bluetooth.begin(38400); // Default baud rate of the Bluetooth module Bluetooth.setTimeout(5); delay(20); Serial.begin(38400); // Move robot arm to initial position servo1PPos = 90; servo01.write(servo1PPos); servo2PPos = 100; servo02.write(servo2PPos); servo3PPos = 120; servo03.write(servo3PPos); servo4PPos = 95; servo04.write(servo4PPos); servo5PPos = 60; servo05.write(servo5PPos); servo6PPos = 110; servo06.write(servo6PPos); }Code language: Arduino (arduino)

Kemudian di bagian loop kita mulai dengan memeriksa apakah ada data masuk.

// Check for incoming data if (Bluetooth.available() > 0) { dataIn = Bluetooth.read(); // Read the dataCode language: Arduino (arduino)

Data ini datang dari ponsel atau aplikasi Android, jadi mari kita lihat jenis data apa yang sebenarnya dikirimnya. Aplikasi Android dibuat menggunakan aplikasi online MIT App Inventor. Ini terdiri dari tombol sederhana yang memiliki gambar yang sesuai sebagai latar belakang.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Jika kita melihat blok-blok aplikasi, kita dapat melihat bahwa yang dilakukannya hanyalah mengirim angka satu byte saat tombol diklik.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Jadi, tergantung tombol yang diklik, kita memberitahu Arduino apa yang harus dilakukan. Misalnya, jika kita menerima angka ‘2’ platform roda Mecanum akan bergerak maju, menggunakan fungsi kustom moveForward.

if (dataIn == 2) { m = 2; } // if (m == 2) { moveForward(); }Code language: Arduino (arduino)

Fungsi kustom ini mengatur keempat motor stepper untuk berputar ke depan.

void moveForward() { LeftFrontWheel.setSpeed(wheelSpeed); LeftBackWheel.setSpeed(wheelSpeed); RightFrontWheel.setSpeed(wheelSpeed); RightBackWheel.setSpeed(wheelSpeed); }Code language: Arduino (arduino)

Untuk bergerak ke arah lain, kita hanya perlu memutar roda ke arah yang sesuai.

Untuk mengontrol lengan robot, kita menggunakan metode yang sama. Lagi, kita memiliki tombol dalam aplikasi dan saat menahan tombol, sendi lengan robot bergerak ke arah tertentu.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Seperti yang saya sebutkan sebelumnya, dalam aplikasi kontrol Lengan Robot asli kita menggunakan slider untuk mengontrol posisi servo tetapi itu menyebabkan beberapa masalah karena dengan cara itu kita harus mengirim Text ke Arduino, alih-alih angka 1-byte. Masalahnya adalah terkadang Arduino melewatkan Text yang datang dari Aplikasi dan membuat error atau Lengan robot goyang dan berperilaku aneh.

Dengan cara ini kita hanya mengirim satu angka 1-byte saat tombol tertentu ditekan.

Kontrol Mulus Lengan Robot Arduino dengan Platform Roda Mecanum

Kode Arduino masuk ke while loop dari angka itu, dan tetap di sana sampai kita melepas tombol, karena pada saat itu kita mengirim angka 0 yang berarti robot tidak harus melakukan apa-apa.

// Move servo 1 in positive direction while (m == 16) { if (Bluetooth.available() > 0) { m = Bluetooth.read(); } servo01.write(servo1PPos); servo1PPos++; delay(speedDelay); } // Move servo 1 in negative direction while (m == 17) { if (Bluetooth.available() > 0) { m = Bluetooth.read(); } servo01.write(servo1PPos); servo1PPos--; delay(speedDelay); }Code language: Arduino (arduino)

Jadi, tergantung tombol yang disentuh servo bergerak ke arah positif atau negatif. Prinsip kerja yang sama berlaku untuk semua motor servo. Untuk mengubah kecepatan gerakan, kita menggunakan nilai yang datang dari slider yang berkisar dari 100 hingga 250.

// If arm speed slider is changed if (dataIn > 101 & dataIn < 250) { speedDelay = dataIn / 10; // Change servo speed (delay time) }Code language: Arduino (arduino)

Dengan membaginya dengan 10 kita mendapatkan nilai dari 10 hingga 25, yang digunakan sebagai delay dalam mikrodetik dalam while loops untuk mengemudikan servo.

Untuk menyimpan gerakan robot, kita hanya menyimpan posisi saat ini servo dan steppers ke dalam array, setiap kali tombol Save diklik.

// If button "SAVE" is pressed if (m == 12) { //if it's initial save, set the steppers position to 0 if (index == 0) { LeftBackWheel.setCurrentPosition(0); LeftFrontWheel.setCurrentPosition(0); RightBackWheel.setCurrentPosition(0); RightFrontWheel.setCurrentPosition(0); } lbw[index] = LeftBackWheel.currentPosition(); // save position into the array lfw[index] = LeftFrontWheel.currentPosition(); rbw[index] = RightBackWheel.currentPosition(); rfw[index] = RightFrontWheel.currentPosition(); servo01SP[index] = servo1PPos; // save position into the array servo02SP[index] = servo2PPos; servo03SP[index] = servo3PPos; servo04SP[index] = servo4PPos; servo05SP[index] = servo5PPos; servo06SP[index] = servo6PPos; index++; // Increase the array index m = 0; }Code language: Arduino (arduino)

Kemudian ketika kita menekan tombol Run kita memanggil fungsi kustom runSteps(). Fungsi kustom ini melalui semua langkah yang disimpan menggunakan beberapa for dan while loops.

if (m == 14) { runSteps(); // If button "RESET" is pressed if (dataIn != 14) { stopMoving(); memset(lbw, 0, sizeof(lbw)); // Clear the array data to 0 memset(lfw, 0, sizeof(lfw)); memset(rbw, 0, sizeof(rbw)); memset(rfw, 0, sizeof(rfw)); memset(servo01SP, 0, sizeof(servo01SP)); // Clear the array data to 0 memset(servo02SP, 0, sizeof(servo02SP)); memset(servo03SP, 0, sizeof(servo03SP)); memset(servo04SP, 0, sizeof(servo04SP)); memset(servo05SP, 0, sizeof(servo05SP)); memset(servo06SP, 0, sizeof(servo06SP)); index = 0; // Index to 0 } }Code language: Arduino (arduino)

Kita harus mencatat bahwa itu dimulai dari posisi pertama dan pergi ke posisi terakhir, dan mengulanginya berulang kali. Oleh karena itu, saat menyimpan langkah, kita sebenarnya perlu memosisikan robot sedemikian rupa sehingga langkah pertama memiliki posisi yang sama dengan langkah terakhir. Sambil melalui langkah-langkah kita juga dapat mengubah kecepatan baik platform maupun lengan robot, serta menjeda dan mereset semua langkah.

Di sini Anda dapat mengunduh aplikasi ini serta file proyek yang dapat diedit:

Inilah kode Arduino lengkap untuk proyek robot Arduino ini:

/* Arduino Robot Arm and Mecanum Wheels Robot Smartphone Control via Bluetooth by Dejan, www.HowToMechatronics.com */ #include <SoftwareSerial.h> #include <AccelStepper.h> #include <Servo.h> Servo servo01; Servo servo02; Servo servo03; Servo servo04; Servo servo05; Servo servo06; SoftwareSerial Bluetooth(A8, 38); // Arduino(RX, TX) - HC-05 Bluetooth (TX, RX) // Define the stepper motors and the pins the will use AccelStepper LeftBackWheel(1, 42, 43); // (Type:driver, STEP, DIR) - Stepper1 AccelStepper LeftFrontWheel(1, 40, 41); // Stepper2 AccelStepper RightBackWheel(1, 44, 45); // Stepper3 AccelStepper RightFrontWheel(1, 46, 47); // Stepper4 #define led 14 int wheelSpeed = 1500; int lbw[50], lfw[50], rbw[50], rfw[50]; // arrays for storing positions/steps int servo1Pos, servo2Pos, servo3Pos, servo4Pos, servo5Pos, servo6Pos; // current position int servo1PPos, servo2PPos, servo3PPos, servo4PPos, servo5PPos, servo6PPos; // previous position int servo01SP[50], servo02SP[50], servo03SP[50], servo04SP[50], servo05SP[50], servo06SP[50]; // for storing positions/steps int speedDelay = 20; int index = 0; int dataIn; int m = 0; void setup() { // Set initial seed values for the steppers LeftFrontWheel.setMaxSpeed(3000); LeftBackWheel.setMaxSpeed(3000); RightFrontWheel.setMaxSpeed(3000); RightBackWheel.setMaxSpeed(3000); pinMode(led, OUTPUT); servo01.attach(5); servo02.attach(6); servo03.attach(7); servo04.attach(8); servo05.attach(9); servo06.attach(10); Bluetooth.begin(38400); // Default baud rate of the Bluetooth module Bluetooth.setTimeout(5); delay(20); Serial.begin(38400); // Move robot arm to initial position servo1PPos = 90; servo01.write(servo1PPos); servo2PPos = 100; servo02.write(servo2PPos); servo3PPos = 120; servo03.write(servo3PPos); servo4PPos = 95; servo04.write(servo4PPos); servo5PPos = 60; servo05.write(servo5PPos); servo6PPos = 110; servo06.write(servo6PPos); } void loop() { // Check for incoming data if (Bluetooth.available() > 0) { dataIn = Bluetooth.read(); // Read the data if (dataIn == 0) { m = 0; } if (dataIn == 1) { m = 1; } if (dataIn == 2) { m = 2; } if (dataIn == 3) { m = 3; } if (dataIn == 4) { m = 4; } if (dataIn == 5) { m = 5; } if (dataIn == 6) { m = 6; } if (dataIn == 7) { m = 7; } if (dataIn == 8) { m = 8; } if (dataIn == 9) { m = 9; } if (dataIn == 10) { m = 10; } if (dataIn == 11) { m = 11; } if (dataIn == 12) { m = 12; } if (dataIn == 14) { m = 14; } if (dataIn == 16) { m = 16; } if (dataIn == 17) { m = 17; } if (dataIn == 18) { m = 18; } if (dataIn == 19) { m = 19; } if (dataIn == 20) { m = 20; } if (dataIn == 21) { m = 21; } if (dataIn == 22) { m = 22; } if (dataIn == 23) { m = 23; } if (dataIn == 24) { m = 24; } if (dataIn == 25) { m = 25; } if (dataIn == 26) { m = 26; } if (dataIn == 27) { m = 27; } // Move the Mecanum wheels platform if (m == 4) { moveSidewaysLeft(); } if (m == 5) { moveSidewaysRight(); } if (m == 2) { moveForward(); } if (m == 7) { moveBackward(); } if (m == 3) { moveRightForward(); } if (m == 1) { moveLeftForward(); } if (m == 8) { moveRightBackward(); } if (m == 6) { moveLeftBackward(); } if (m == 9) { rotateLeft(); } if (m == 10) { rotateRight(); } if (m == 0) { stopMoving(); } // Mecanum wheels speed if (dataIn > 30 & dataIn < 100) { wheelSpeed = dataIn * 20; } // Move robot arm // Move servo 1 in positive direction while (m == 16) { if (Bluetooth.available() > 0) { m = Bluetooth.read(); } servo01.write(servo1PPos); servo1PPos++; delay(speedDelay); } // Move servo 1 in negative direction while (m == 17) { if (Bluetooth.available() > 0) { m = Bluetooth.read(); } servo01.write(servo1PPos); servo1PPos--; delay(speedDelay); } // Move servo 2 while (m == 19) { if (Bluetooth.available() > 0) { m = Bluetooth.read(); } servo02.write(servo2PPos); servo2PPos++; delay(speedDelay); } while (m == 18) { if (Bluetooth.available() > 0) { m = Bluetooth.read(); } servo02.write(servo2PPos); servo2PPos--; delay(speedDelay); } // Move servo 3 while (m == 20) { if (Bluetooth.available() > 0) { m = Bluetooth.read(); } servo03.write(servo3PPos); servo3PPos++; delay(speedDelay); } while (m == 21) { if (Bluetooth.available() > 0) { m = Bluetooth.read(); } servo03.write(servo3PPos); servo3PPos--; delay(speedDelay); } // Move servo 4 while (m == 23) { if (Bluetooth.available() > 0) { m = Bluetooth.read(); } servo04.write(servo4PPos); servo4PPos++; delay(speedDelay); } while (m == 22) { if (Bluetooth.available() > 0) { m = Bluetooth.read(); } servo04.write(servo4PPos); servo4PPos--; delay(speedDelay); } // Move servo 5 while (m == 25) { if (Bluetooth.available() > 0) { m = Bluetooth.read(); } servo05.write(servo5PPos); servo5PPos++; delay(speedDelay); } while (m == 24) { if (Bluetooth.available() > 0) { m = Bluetooth.read(); } servo05.write(servo5PPos); servo5PPos--; delay(speedDelay); } // Move servo 6 while (m == 26) { if (Bluetooth.available() > 0) { m = Bluetooth.read(); } servo06.write(servo6PPos); servo6PPos++; delay(speedDelay); } while (m == 27) { if (Bluetooth.available() > 0) { m = Bluetooth.read(); } servo06.write(servo6PPos); servo6PPos--; delay(speedDelay); } // If arm speed slider is changed if (dataIn > 101 & dataIn < 250) { speedDelay = dataIn / 10; // Change servo speed (delay time) } // If button "SAVE" is pressed if (m == 12) { //if it's initial save, set the steppers position to 0 if (index == 0) { LeftBackWheel.setCurrentPosition(0); LeftFrontWheel.setCurrentPosition(0); RightBackWheel.setCurrentPosition(0); RightFrontWheel.setCurrentPosition(0); } lbw[index] = LeftBackWheel.currentPosition(); // save position into the array lfw[index] = LeftFrontWheel.currentPosition(); rbw[index] = RightBackWheel.currentPosition(); rfw[index] = RightFrontWheel.currentPosition(); servo01SP[index] = servo1PPos; // save position into the array servo02SP[index] = servo2PPos; servo03SP[index] = servo3PPos; servo04SP[index] = servo4PPos; servo05SP[index] = servo5PPos; servo06SP[index] = servo6PPos; index++; // Increase the array index m = 0; } // If button "RUN" is pressed if (m == 14) { runSteps(); // If button "RESET" is pressed if (dataIn != 14) { stopMoving(); memset(lbw, 0, sizeof(lbw)); // Clear the array data to 0 memset(lfw, 0, sizeof(lfw)); memset(rbw, 0, sizeof(rbw)); memset(rfw, 0, sizeof(rfw)); memset(servo01SP, 0, sizeof(servo01SP)); // Clear the array data to 0 memset(servo02SP, 0, sizeof(servo02SP)); memset(servo03SP, 0, sizeof(servo03SP)); memset(servo04SP, 0, sizeof(servo04SP)); memset(servo05SP, 0, sizeof(servo05SP)); memset(servo06SP, 0, sizeof(servo06SP)); index = 0; // Index to 0 } } } LeftFrontWheel.runSpeed(); LeftBackWheel.runSpeed(); RightFrontWheel.runSpeed(); RightBackWheel.runSpeed(); // Monitor the battery voltage int sensorValue = analogRead(A0); float voltage = sensorValue * (5.0 / 1023.00) * 3; // Convert the reading values from 5v to suitable 12V i //Serial.println(voltage); // If voltage is below 11V turn on the LED if (voltage < 11) { digitalWrite(led, HIGH); } else { digitalWrite(led, LOW); } } void moveForward() { LeftFrontWheel.setSpeed(wheelSpeed); LeftBackWheel.setSpeed(wheelSpeed); RightFrontWheel.setSpeed(wheelSpeed); RightBackWheel.setSpeed(wheelSpeed); } void moveBackward() { LeftFrontWheel.setSpeed(-wheelSpeed); LeftBackWheel.setSpeed(-wheelSpeed); RightFrontWheel.setSpeed(-wheelSpeed); RightBackWheel.setSpeed(-wheelSpeed); } void moveSidewaysRight() { LeftFrontWheel.setSpeed(wheelSpeed); LeftBackWheel.setSpeed(-wheelSpeed); RightFrontWheel.setSpeed(-wheelSpeed); RightBackWheel.setSpeed(wheelSpeed); } void moveSidewaysLeft() { LeftFrontWheel.setSpeed(-wheelSpeed); LeftBackWheel.setSpeed(wheelSpeed); RightFrontWheel.setSpeed(wheelSpeed); RightBackWheel.setSpeed(-wheelSpeed); } void rotateLeft() { LeftFrontWheel.setSpeed(-wheelSpeed); LeftBackWheel.setSpeed(-wheelSpeed); RightFrontWheel.setSpeed(wheelSpeed); RightBackWheel.setSpeed(wheelSpeed); } void rotateRight() { LeftFrontWheel.setSpeed(wheelSpeed); LeftBackWheel.setSpeed(wheelSpeed); RightFrontWheel.setSpeed(-wheelSpeed); RightBackWheel.setSpeed(-wheelSpeed); } void moveRightForward() { LeftFrontWheel.setSpeed(wheelSpeed); LeftBackWheel.setSpeed(0); RightFrontWheel.setSpeed(0); RightBackWheel.setSpeed(wheelSpeed); } void moveRightBackward() { LeftFrontWheel.setSpeed(0); LeftBackWheel.setSpeed(-wheelSpeed); RightFrontWheel.setSpeed(-wheelSpeed); RightBackWheel.setSpeed(0); } void moveLeftForward() { LeftFrontWheel.setSpeed(0); LeftBackWheel.setSpeed(wheelSpeed); RightFrontWheel.setSpeed(wheelSpeed); RightBackWheel.setSpeed(0); } void moveLeftBackward() { LeftFrontWheel.setSpeed(-wheelSpeed); LeftBackWheel.setSpeed(0); RightFrontWheel.setSpeed(0); RightBackWheel.setSpeed(-wheelSpeed); } void stopMoving() { LeftFrontWheel.setSpeed(0); LeftBackWheel.setSpeed(0); RightFrontWheel.setSpeed(0); RightBackWheel.setSpeed(0); } // Automatic mode custom function - run the saved steps void runSteps() { while (dataIn != 13) { // Run the steps over and over again until "RESET" button is pressed for (int i = 0; i <= index - 2; i++) { // Run through all steps(index) if (Bluetooth.available() > 0) { // Check for incomding data dataIn = Bluetooth.read(); if ( dataIn == 15) { // If button "PAUSE" is pressed while (dataIn != 14) { // Wait until "RUN" is pressed again if (Bluetooth.available() > 0) { dataIn = Bluetooth.read(); if ( dataIn == 13) { break; } } } } // If speed slider is changed if (dataIn > 100 & dataIn < 150) { speedDelay = dataIn / 10; // Change servo speed (delay time) } // Mecanum wheels speed if (dataIn > 30 & dataIn < 100) { wheelSpeed = dataIn * 10; dataIn = 14; } } LeftFrontWheel.moveTo(lfw[i]); LeftFrontWheel.setSpeed(wheelSpeed); LeftBackWheel.moveTo(lbw[i]); LeftBackWheel.setSpeed(wheelSpeed); RightFrontWheel.moveTo(rfw[i]); RightFrontWheel.setSpeed(wheelSpeed); RightBackWheel.moveTo(rbw[i]); RightBackWheel.setSpeed(wheelSpeed); while (LeftBackWheel.currentPosition() != lbw[i] & LeftFrontWheel.currentPosition() != lfw[i] & RightFrontWheel.currentPosition() != rfw[i] & RightBackWheel.currentPosition() != rbw[i]) { LeftFrontWheel.runSpeedToPosition(); LeftBackWheel.runSpeedToPosition(); RightFrontWheel.runSpeedToPosition(); RightBackWheel.runSpeedToPosition(); } // Servo 1 if (servo01SP[i] == servo01SP[i + 1]) { } if (servo01SP[i] > servo01SP[i + 1]) { for ( int j = servo01SP[i]; j >= servo01SP[i + 1]; j--) { servo01.write(j); delay(speedDelay); } } if (servo01SP[i] < servo01SP[i + 1]) { for ( int j = servo01SP[i]; j <= servo01SP[i + 1]; j++) { servo01.write(j); delay(speedDelay); } } // Servo 2 if (servo02SP[i] == servo02SP[i + 1]) { } if (servo02SP[i] > servo02SP[i + 1]) { for ( int j = servo02SP[i]; j >= servo02SP[i + 1]; j--) { servo02.write(j); delay(speedDelay); } } if (servo02SP[i] < servo02SP[i + 1]) { for ( int j = servo02SP[i]; j <= servo02SP[i + 1]; j++) { servo02.write(j); delay(speedDelay); } } // Servo 3 if (servo03SP[i] == servo03SP[i + 1]) { } if (servo03SP[i] > servo03SP[i + 1]) { for ( int j = servo03SP[i]; j >= servo03SP[i + 1]; j--) { servo03.write(j); delay(speedDelay); } } if (servo03SP[i] < servo03SP[i + 1]) { for ( int j = servo03SP[i]; j <= servo03SP[i + 1]; j++) { servo03.write(j); delay(speedDelay); } } // Servo 4 if (servo04SP[i] == servo04SP[i + 1]) { } if (servo04SP[i] > servo04SP[i + 1]) { for ( int j = servo04SP[i]; j >= servo04SP[i + 1]; j--) { servo04.write(j); delay(speedDelay); } } if (servo04SP[i] < servo04SP[i + 1]) { for ( int j = servo04SP[i]; j <= servo04SP[i + 1]; j++) { servo04.write(j); delay(speedDelay); } } // Servo 5 if (servo05SP[i] == servo05SP[i + 1]) { } if (servo05SP[i] > servo05SP[i + 1]) { for ( int j = servo05SP[i]; j >= servo05SP[i + 1]; j--) { servo05.write(j); delay(speedDelay); } } if (servo05SP[i] < servo05SP[i + 1]) { for ( int j = servo05SP[i]; j <= servo05SP[i + 1]; j++) { servo05.write(j); delay(speedDelay); } } // Servo 6 if (servo06SP[i] == servo06SP[i + 1]) { } if (servo06SP[i] > servo06SP[i + 1]) { for ( int j = servo06SP[i]; j >= servo06SP[i + 1]; j--) { servo06.write(j); delay(speedDelay); } } if (servo06SP[i] < servo06SP[i + 1]) { for ( int j = servo06SP[i]; j <= servo06SP[i + 1]; j++) { servo06.write(j); delay(speedDelay); } } } } }Code language: Arduino (arduino)

Itu sebagaimana besarnya untuk tutorial ini. Proyeknya bekerja dengan baik, tetapi harap dicatat bahwa itu jauh dari sempurna. Gerakan otomatis mungkin tidak tepat karena gesernya roda mecanum serta performa buruk motor servo. Motor servo murah ini juga bisa goyang atau bergetar bahkan saat tidak bergerak hanya karena tidak memiliki cukup kekuatan untuk memegang beban bagian cetak 3D.

Saya harap Anda menyukai tutorial ini dan mempelajari hal baru. Jangan ragu untuk bertanya apa pun di bagian komentar di bawah dan periksa Koleksi Proyek Arduino saya.


Proses manufaktur

  1. Membuat Robot Streaming Video yang Dikontrol Internet dengan Arduino & Raspberry Pi
  2. Simple Pi Robot – Membangun Rover Otonom 2‑WD dengan Raspberry Pi
  3. Robot Penghindar Halangan Direnkai Servo: Bangun dengan Arduino & HC-SR04
  4. Kendalikan Roomba Create 2 Anda dengan Arduino dan Android: Panduan Langkah-demi-Langkah
  5. Arduino & MPU6050: Kontrol Servo Motor Presisi dengan SG90 & MG996R
  6. Buat Lengan Robotik Arduino Pintar: Tutorial DIY Mudah
  7. LittleArm 2C: Bangun Lengan Robot Arduino 3D-Printed Tahan Lama untuk Pendidikan STEM
  8. Lengan Robot Arduino Dikontrol Geser Tangan – Pembangun Langkah demi Langkah DIY
  9. Kit Lengan Robot 3‑Axis Terprogram – Kontrol Lokal & Jarak Jauh dengan Arduino dan Bluetooth
  10. KUKA KMR iiwa: Lengan Robot Kolaboratif Mobile untuk Industry 4.0