Daftar Isi:

Ubin Piano Memainkan Lengan Robot: 5 Langkah
Ubin Piano Memainkan Lengan Robot: 5 Langkah

Video: Ubin Piano Memainkan Lengan Robot: 5 Langkah

Video: Ubin Piano Memainkan Lengan Robot: 5 Langkah
Video: MANUSIA ROBOT RAKSASA #viral 2024, Juli
Anonim
Ubin Piano Memainkan Lengan Robot
Ubin Piano Memainkan Lengan Robot

Grup ini terdiri dari 2 Insinyur Otomasi dari UCN, yang memiliki ide cemerlang yang memotivasi kami untuk melakukan dan mengembangkannya. Idenya didasarkan pada papan Arduino yang mengendalikan lengan robot. Papan Arduino adalah otak dari operasi dan kemudian aktuator operasi, lengan Robot, akan melakukan apa yang diperlukan. Penjelasan lebih mendalam akan datang nanti.

Langkah 1: Peralatan

Peralatan
Peralatan

Lengan robot:

Phantomx Pincher Robot Arm Kit Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)

Perangkat lunak untuk robot- https://www.arduino.cc/en/Main/OldSoftwareRelease… Kamera pendeteksi warna:

Kamera Pixy CMUcam5 - (https://charmedlabs.com/default/pixy-cmucam5/)

Perangkat Lunak - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)

Langkah 2: Pengaturan Arduino

Pengaturan Arduino
Pengaturan Arduino

Anda dapat melihat pengaturan di papan di sini, yang sangat mudah.

Di sebelah kiri adalah Power Supply.

Yang tengah untuk servo pertama, yang kemudian dihubungkan ke servo lainnya, servo demi servo.

Yang paling bawah adalah tempat kita mengontrol papan dari PC atau Laptop, yang memiliki input USB di ujung lainnya.

Langkah 3: Program Akhir

||| PROGRAM |||

#termasuk

#include #include "poses.h" #include //Pixy Library #include

#tentukan POSECOUNT 5

BioloidController bioloid = BioloidController(1000000);

const int SERVOCOUNT = 5; int.id; int pos; boolean IDPeriksa; boolean RunCheck;

void setup(){ pinMode(0, OUTPUT); ax12SetRegister2(1, 32, 50);//set nomor gabungan 1 register 32 ke kecepatan 50. ax12SetRegister2(2, 32, 50);//set nomor gabungan 2 register 32 ke kecepatan 50. ax12SetRegister2(3, 32, 50);//set nomor gabungan 3 register 32 ke kecepatan 50. ax12SetRegister2(4, 32, 50);//set nomor gabungan 4 register 32 ke kecepatan 50. ax12SetRegister2(5, 32, 100);//set nomor gabungan 5 register 32 untuk mempercepat 100. //inisialisasi variabel id = 1; pos = 0; IDPeriksa = 1; JalankanPeriksa = 0; //buka port serial Serial.begin(9600); penundaan (500); Serial.println("########################################"); Serial.println("Komunikasi Serial Terbentuk.");

//Periksa Tegangan Baterai Lipo Periksa Tegangan();

//Scan Servos, kembalikan posisi MoveTest(); Pindah rumah(); Pilihan Menu(); JalankanPeriksa = 1; }

void loop(){ // membaca sensor: int inByte = Serial.read();

beralih (dalamByte) {

kasus '1': MovePose1(); merusak;

kasus '2': MovePose2(); merusak; kasus '3': MovePose3(); merusak;

kasus '4': MovePose4(); merusak;

kasus '5': MoveHome(); merusak; kasus '6': Ambil(); merusak;

kasus '7': LEDTest(); merusak;

kasus '8': RelaxServos(); merusak; } }

void CheckVoltage(){ // tunggu, lalu periksa voltase (keamanan LiPO) voltase float = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println("########################################"); Serial.print ("Tegangan Sistem: "); Serial.print (tegangan); Serial.println("volt."); if (tegangan 10.0){ Serial.println("Tingkat tegangan nominal."); } if (RunCheck == 1){ MenuOptions(); } Serial.println("########################################"); }

batal MoveHome(){ delay(100); // disarankan jeda bioloid.loadPose(Home); // memuat pose dari FLASH, ke buffer nextPose bioloid.readPose(); // membaca posisi servo saat ini ke buffer curPose Serial.println("############################################"); Serial.println("Memindahkan servo ke posisi Home"); Serial.println("########################################"); penundaan (1000); bioloid.interpolateSetup(1000); // setup untuk interpolasi dari saat ini->berikutnya selama 1/2 detik while(bioloid.interpolating > 0){ // lakukan ini saat kita belum mencapai pose baru kita bioloid.interpolateStep(); // pindahkan servos, jika perlu. penundaan (3); } if (RunCheck == 1){ MenuOptions(); } }

void MovePose1(){ delay(100); // disarankan jeda bioloid.loadPose(Pose1); // memuat pose dari FLASH, ke buffer nextPose bioloid.readPose(); // membaca posisi servo saat ini ke buffer curPose Serial.println("############################################"); Serial.println("Memindahkan servo ke posisi 1"); Serial.println("########################################"); penundaan (1000); bioloid.interpolateSetup(1000); // setup untuk interpolasi dari saat ini->berikutnya lebih dari 1/2 detik while(bioloid.interpolating > 0){ // lakukan ini saat kita belum mencapai pose baru kita bioloid.interpolateStep(); // pindahkan servos, jika perlu. penundaan (3); } SetPosition(3, 291); //set posisi joint 3 ke '0' delay(100);//tunggu joint bergerak if (RunCheck == 1){ MenuOptions(); } }

void MovePose2(){ delay(100); // disarankan jeda bioloid.loadPose(Pose2); // memuat pose dari FLASH, ke buffer nextPose bioloid.readPose(); // membaca dalam posisi servo saat ini ke buffer curPose Serial.println("############################################"); Serial.println("Memindahkan servo ke posisi 2"); Serial.println("########################################"); penundaan (1000); bioloid.interpolateSetup(1000); // setup untuk interpolasi dari saat ini->berikutnya selama 1/2 detik while(bioloid.interpolating > 0){ // lakukan ini saat kita belum mencapai pose baru kita bioloid.interpolateStep(); // pindahkan servos, jika perlu. penundaan (3); } SetPosition(3, 291); //set posisi joint 3 ke '0' delay(100);//tunggu joint bergerak if (RunCheck == 1){ MenuOptions(); } } batal MovePose3(){ delay(100); // disarankan jeda bioloid.loadPose(Pose3); // memuat pose dari FLASH, ke buffer nextPose bioloid.readPose(); // membaca posisi servo saat ini ke buffer curPose Serial.println("############################################"); Serial.println("Memindahkan servo ke posisi 3"); Serial.println("########################################"); penundaan (1000); bioloid.interpolateSetup(1000); // setup untuk interpolasi dari saat ini->berikutnya selama 1/2 detik while(bioloid.interpolating > 0){ // lakukan ini saat kita belum mencapai pose baru kita bioloid.interpolateStep(); // pindahkan servos, jika perlu. penundaan (3); } SetPosition(3, 291); //set posisi joint 3 ke '0' delay(100);//tunggu joint bergerak if (RunCheck == 1){ MenuOptions(); } }

void MovePose4(){ delay(100); // disarankan jeda bioloid.loadPose(Pose4); // memuat pose dari FLASH, ke buffer nextPose bioloid.readPose(); // membaca dalam posisi servo saat ini ke buffer curPose Serial.println("############################################"); Serial.println("Memindahkan servo ke posisi 4"); Serial.println("########################################"); penundaan (1000); bioloid.interpolateSetup(1000); // setup untuk interpolasi dari saat ini->berikutnya lebih dari 1/2 detik while(bioloid.interpolating > 0){ // lakukan ini saat kita belum mencapai pose baru kita bioloid.interpolateStep(); // pindahkan servos, jika perlu. penundaan (3); } SetPosition(3, 291); //set posisi joint 3 ke '0' delay(100);//tunggu joint bergerak if (RunCheck == 1){ MenuOptions(); } }

void MoveTest(){ Serial.println("##############################################"); Serial.println("Inisialisasi Tes Tanda Gerakan"); Serial.println("########################################"); penundaan (500); nomor = 1; pos = 512; while(id <= SERVOCOUNT){ Serial.print("Memindahkan ID Servo: "); Serial.println(id);

while(pos >= 312){ SetPosition(id, pos); pos = pos--; penundaan (10); }

while(pos <= 512){ SetPosition(id, pos); pos = pos++; penundaan (10); }

// beralih ke servo ID berikutnya id = id++;

} if (RunCheck == 1){ MenuOptions(); } }

void MenuOptions(){ Serial.println("##############################################"); Serial.println("Silakan masukkan opsi 1-5 untuk menjalankan tes individu lagi."); Serial.println("1) Posisi 1"); Serial.println("2) Posisi 2"); Serial.println("3) Posisi 3"); Serial.println("4) Posisi 4"); Serial.println("5) Posisi Awal"); Serial.println("6) Periksa Tegangan Sistem"); Serial.println("7) Lakukan Uji LED"); Serial.println("8) Servo Santai"); Serial.println("########################################"); }

void RelaxServos(){ id = 1; Serial.println("########################################"); Serial.println("Servo Santai."); Serial.println("########################################"); while(id <= SERVOCOUNT){ Santai(id); id = (id++)%SERVOCOUNT; penundaan (50); } if (RunCheck == 1){ MenuOptions(); } }

void LEDTest(){ id = 1; Serial.println("########################################"); Serial.println("Menjalankan Tes LED"); Serial.println("########################################"); while(id <= SERVOCOUNT){ ax12SetRegister(id, 25, 1); Serial.print("LED NYALA - ID Servo: "); Serial.println(id); penundaan(3000); ax12SetRegister(id, 25, 0); Serial.print("LED MATI - ID Servo: "); Serial.println(id); penundaan(3000); id = id++; } if (RunCheck == 1){ MenuOptions(); } }

void Grab(){ SetPosition(5, 800); //set posisi joint 1 ke '0' delay(100);//tunggu joint bergerak

}

Kami telah mendasarkan program kami pada program PincherTest pabrikan dengan beberapa penyesuaian besar dalam hal penentuan posisi. Kami menggunakan poses.h agar robot memiliki posisi dalam memori. Pertama kami mencoba membuat lengan permainan kami dengan Pixycam menjadi otomatis, tetapi karena masalah layar yang ringan dan kecil, itu tidak dapat terjadi. Robot memiliki posisi dasar rumah, setelah meng-upload program, ia akan menguji semua servos yang terdapat pada robot. Kami telah mengatur pose untuk 1-4 tombol, sehingga akan mudah diingat. Jangan ragu untuk menggunakan program ini.

Langkah 4: Panduan Video

Langkah 5: Kesimpulan

Kesimpulannya, robot adalah proyek kecil yang menyenangkan bagi kami dan hal yang menyenangkan untuk dimainkan dan bereksperimen. Saya mendorong Anda untuk mencobanya dan menyesuaikannya juga.

Direkomendasikan: