Isi kandungan:

Jubin Piano Memainkan Lengan Robot: 5 Langkah
Jubin Piano Memainkan Lengan Robot: 5 Langkah

Video: Jubin Piano Memainkan Lengan Robot: 5 Langkah

Video: Jubin Piano Memainkan Lengan Robot: 5 Langkah
Video: Quincy part 2 #dewivanow #robot #quincyrobotartis #mobix 2024, November
Anonim
Jubin Piano Bermain Lengan Robot
Jubin Piano Bermain Lengan Robot

Kumpulan ini terdiri daripada 2 Jurutera Automasi dari UCN, yang menghasilkan idea bernas bahawa kami termotivasi untuk melakukan dan mengembangkan. Ideanya berdasarkan pada papan Arduino yang mengendalikan lengan robot. Papan Arduino adalah otak operasi dan kemudian penggerak operasi, lengan Robotik, akan melakukan apa yang diperlukannya. Penjelasan yang lebih mendalam akan datang kemudian.

Langkah 1: Peralatan

Peralatan
Peralatan

Lengan robot:

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

Perisian untuk robot- https://www.arduino.cc/en/Main/OldSoftwareRelease… Kamera pengesanan warna:

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

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

Langkah 2: Persediaan Arduino

Persediaan Arduino
Persediaan Arduino

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

Di sebelah kiri adalah Bekalan Kuasa.

Yang tengah adalah untuk servo pertama, yang kemudiannya disambungkan ke servo yang lain, servo dengan servo.

Yang paling bawah adalah di mana kita mengendalikan papan dari PC atau Laptop, yang mempunyai input USB di hujung yang lain.

Langkah 3: Program Akhir

||| PROGRAM |||

#sertakan

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

#tentukan POSECOUNT 5

BioloidController bioloid = BioloidController (1000000);

const int SERVOCOUNT = 5; int id; int pos; IDCheck boolean; RunCheck boolean;

batal persediaan () {pinMode (0, OUTPUT); ax12SetRegister2 (1, 32, 50); // tetapkan nombor sambungan 1 daftar 32 ke kelajuan 50. ax12SetRegister2 (2, 32, 50); // tetapkan nombor sambungan 2 daftar 32 ke kelajuan 50. ax12SetRegister2 (3, 32, 50); // tetapkan nombor sambungan 3 daftar 32 ke kelajuan 50. ax12SetRegister2 (4, 32, 50); // tetapkan nombor sambungan 4 daftar 32 ke kelajuan 50. ax12SetRegister2 (5, 32, 100); // tetapkan nombor bersama 5 daftar 32 hingga laju 100. // memulakan pemboleh ubah id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // port bersiri terbuka Serial.begin (9600); kelewatan (500); Serial.println ("###########################"); Serial.println ("Komunikasi Bersiri Ditubuhkan.");

// Periksa Voltan Bateri Lipo CheckVoltage ();

// Imbas Servos, kembali kedudukan MoveTest (); MoveHome (); MenuPilihan (); RunCheck = 1; }

gelung void () {// baca sensor: int inByte = Serial.read ();

tukar (dalamByte) {

kes '1': MovePose1 (); rehat;

kes '2': MovePose2 (); rehat; kes '3': MovePose3 (); rehat;

kes '4': MovePose4 (); rehat;

kes '5': MoveHome (); rehat; kes '6': Ambil (); rehat;

kes '7': LEDTest (); rehat;

kes '8': RelaxServos (); rehat; }}

batal CheckVoltage () {// tunggu, kemudian periksa voltan (keselamatan LiPO) voltan apungan = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println ("###########################"); Serial.print ("Voltan Sistem:"); Cetakan bersiri (voltan); Serial.println ("volt."); jika (voltan 10.0) {Serial.println ("Tahap voltan nominal."); } jika (RunCheck == 1) {MenuOptions (); } Serial.println ("###########################"); }

batal MoveHome () {kelewatan (100); // disyorkan jeda bioloid.loadPose (Rumah); // muatkan pose dari FLASH, ke bioloid.readPose buffer nextPose (); // baca dalam posisi servo semasa ke curPose buffer Serial.println ("###########################"); Serial.println ("Memindahkan servos ke kedudukan Rumah"); Serial.println ("###########################"); kelewatan (1000); bioloid.interpolateSetup (1000); // persediaan untuk interpolasi dari arus-> seterusnya lebih dari 1/2 saat sementara (bioloid.interpolating> 0) {// lakukan ini sementara kami belum mencapai bioloid baru.interpolateStep (); // pindahkan servos, jika perlu. kelewatan (3); } jika (RunCheck == 1) {MenuOptions (); }}

batal MovePose1 () {kelewatan (100); // disyorkan jeda bioloid.loadPose (Pose1); // muatkan pose dari FLASH, ke bioloid.readPose buffer nextPose (); // baca dalam kedudukan servo semasa ke curPose buffer Serial.println ("###########################"); Serial.println ("Memindahkan servos ke kedudukan pertama"); Serial.println ("###########################"); kelewatan (1000); bioloid.interpolateSetup (1000); // persediaan untuk interpolasi dari arus-> seterusnya lebih dari 1/2 saat sementara (bioloid.interpolating> 0) {// lakukan ini sementara kami belum mencapai bioloid.interpolateStep (); // pindahkan servos, jika perlu. kelewatan (3); } SetPosition (3, 291); // tetapkan kedudukan sendi 3 hingga kelewatan '0' (100); // tunggu sendi bergerak jika (RunCheck == 1) {MenuOptions (); }}

batal MovePose2 () {kelewatan (100); // disyorkan jeda bioloid.loadPose (Pose2); // muatkan pose dari FLASH, ke bioloid.readPose buffer nextPose (); // baca dalam kedudukan servo semasa ke curPose buffer Serial.println ("###########################"); Serial.println ("Memindahkan servos ke kedudukan ke-2"); Serial.println ("###########################"); kelewatan (1000); bioloid.interpolateSetup (1000); // persediaan untuk interpolasi dari arus-> seterusnya lebih dari 1/2 saat sementara (bioloid.interpolating> 0) {// lakukan ini sementara kami belum mencapai bioloid baru.interpolateStep (); // pindahkan servos, jika perlu. kelewatan (3); } SetPosition (3, 291); // tetapkan kedudukan sambungan 3 hingga kelewatan '0' (100); // tunggu sendi bergerak jika (RunCheck == 1) {MenuOptions (); }} batal MovePose3 () {kelewatan (100); // disyorkan jeda bioloid.loadPose (Pose3); // muatkan pose dari FLASH, ke bioloid.readPose buffer nextPose (); // baca dalam posisi servo semasa ke curPose buffer Serial.println ("###########################"); Serial.println ("Memindahkan servos ke kedudukan ke-3"); Serial.println ("###########################"); kelewatan (1000); bioloid.interpolateSetup (1000); // persediaan untuk interpolasi dari arus-> seterusnya lebih dari 1/2 saat sementara (bioloid.interpolating> 0) {// lakukan ini sementara kami belum mencapai bioloid baru.interpolateStep (); // pindahkan servos, jika perlu. kelewatan (3); } SetPosition (3, 291); // tetapkan kedudukan sambungan 3 hingga kelewatan '0' (100); // tunggu sendi bergerak jika (RunCheck == 1) {MenuOptions (); }}

batal MovePose4 () {kelewatan (100); // disyorkan jeda bioloid.loadPose (Pose4); // muatkan pose dari FLASH, ke bioloid.readPose buffer nextPose (); // baca dalam posisi servo semasa ke curPose buffer Serial.println ("###########################"); Serial.println ("Memindahkan servos ke kedudukan ke-4"); Serial.println ("###########################"); kelewatan (1000); bioloid.interpolateSetup (1000); // persediaan untuk interpolasi dari arus-> seterusnya lebih dari 1/2 saat sementara (bioloid.interpolating> 0) {// lakukan ini sementara kami belum mencapai bioloid.interpolateStep (); // pindahkan servos, jika perlu. kelewatan (3); } SetPosition (3, 291); // tetapkan kedudukan sambungan 3 hingga kelewatan '0' (100); // tunggu sendi bergerak jika (RunCheck == 1) {MenuOptions (); }}

batal MoveTest () {Serial.println ("###########################"); Serial.println ("Memulakan Ujian Tanda Pergerakan"); Serial.println ("###########################"); kelewatan (500); id = 1; pos = 512; sementara (id <= SERVOCOUNT) {Serial.print ("Moving Servo ID:"); Serial.println (id);

sementara (pos> = 312) {SetPosition (id, pos); pos = pos--; kelewatan (10); }

sementara (pos <= 512) {SetPosition (id, pos); pos = pos ++; kelewatan (10); }

// iterate ke id servo seterusnya id = id ++;

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

batal MenuOptions () {Serial.println ("###########################"); Serial.println ("Sila masukkan pilihan 1-5 untuk menjalankan ujian individu sekali lagi."); Serial.println ("1) Kedudukan 1"); Serial.println ("2) Kedudukan ke-2"); Serial.println ("3) Kedudukan ke-3"); Serial.println ("4) Kedudukan ke-4"); Serial.println ("5) Kedudukan Rumah"); Serial.println ("6) Periksa Voltan Sistem"); Serial.println ("7) Lakukan Ujian LED"); Serial.println ("8) Relax Servos"); Serial.println ("###########################"); }

batal RelaxServos () {id = 1; Serial.println ("###########################"); Serial.println ("Santai Servo."); Serial.println ("###########################"); sambil (id <= SERVOCOUNT) {Santai (id); id = (id ++)% PERKHIDMATAN; kelewatan (50); } jika (RunCheck == 1) {MenuOptions (); }}

batal LEDTest () {id = 1; Serial.println ("###########################"); Serial.println ("Running LED Test"); Serial.println ("###########################"); sementara (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print ("LED ON - Servo ID:"); Serial.println (id); kelewatan (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED OFF - Servo ID:"); Serial.println (id); kelewatan (3000); id = id ++; } jika (RunCheck == 1) {MenuOptions (); }}

kekosongan Grab () {SetPosition (5, 800); // tetapkan kedudukan sendi 1 hingga '0' kelewatan (100); // tunggu sendi bergerak

}

Kami telah mendasarkan program kami pada program PincherTest pengeluar dengan beberapa perubahan utama dalam hal kedudukan. Kami menggunakan pose.h agar robot mempunyai kedudukan dalam ingatan. Mula-mula kami cuba menjadikan permainan bermain dengan Pixycam agar automatik, tetapi kerana masalah skrin kecil dan ringan, itu tidak dapat terjadi. Robot mempunyai kedudukan rumah asas, setelah memuat naik program, ia akan menguji semua servo yang terdapat di robot. Kami telah menetapkan pose untuk butang 1-4, jadi akan mudah diingat. Jangan ragu untuk menggunakan program ini.

Langkah 4: Panduan Video

Langkah 5: Kesimpulannya

Kesimpulannya, robot adalah projek kecil yang menyeronokkan untuk kita dan keseronokan untuk bermain-main dan bereksperimen. Saya mendorong anda untuk mencubanya dan menyesuaikannya juga.

Disyorkan: