Talaan ng mga Nilalaman:

Mga Piano Tile Playing Robot Arm: 5 Mga Hakbang
Mga Piano Tile Playing Robot Arm: 5 Mga Hakbang

Video: Mga Piano Tile Playing Robot Arm: 5 Mga Hakbang

Video: Mga Piano Tile Playing Robot Arm: 5 Mga Hakbang
Video: Minecraft Herobrine in Trouble #Shorts 2024, Nobyembre
Anonim
Mga Piano Tile na Naglalaro ng Robot Arm
Mga Piano Tile na Naglalaro ng Robot Arm

Ang pangkat ay binubuo ng 2 Mga Engineer ng Automation mula sa UCN, na nakaisip ng isang makinang na ideya na uudyok kaming gawin at paunlarin. Ang ideya ay batay sa isang Arduino board na kumokontrol sa isang robotic arm. Ang Arduino board ay ang utak ng operasyon at pagkatapos ay ang tagapagtaguyod ng operasyon, ang Robotic arm, ay gagawin kung ano ang kinakailangan nito. Ang higit na malalim na paliwanag ay darating mamaya.

Hakbang 1: Kagamitan

Kagamitan
Kagamitan

Robot arm:

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

Software para sa robot- https://www.arduino.cc/en/Main/OldSoftwareRelease… Kulay ng camera sa pagtuklas:

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

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

Hakbang 2: Pag-setup ng Arduino

Pag-setup ng Arduino
Pag-setup ng Arduino

Maaari mong makita ang pag-setup sa board dito, na napakadali.

Sa kaliwa ay ang Power Supply.

Ang gitnang isa ay para sa unang servo, na kung saan ay sa paglaon ay nakakonekta sa iba pang mga servos, servo ng servo.

Ang ibabang bahagi ay kung saan kinokontrol namin ang board mula sa isang PC o Laptop, na mayroong isang input ng USB sa kabilang dulo.

Hakbang 3: Pangwakas na Programa

|| PROGRAM ||

# isama

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

# tukuyin ang POSECOUNT 5

BioloidController bioloid = BioloidController (1000000);

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

void setup () {pinMode (0, OUTPUT); ax12SetRegister2 (1, 32, 50); // set joint number 1 register 32 to speed 50. ax12SetRegister2 (2, 32, 50); // set joint number 2 register 32 to speed 50. ax12SetRegister2 (3, 32, 50); // set joint number 3 register 32 to speed 50. ax12SetRegister2 (4, 32, 50); // set joint number 4 register 32 to speed 50. ax12SetRegister2 (5, 32, 100); // set joint number 5 register 32 upang mapabilis ang 100. // ipasimula ang mga variable id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // buksan ang serial port Serial.begin (9600); pagkaantala (500); Serial.println ("#### Serial.println ("Serial Communication Established.");

// Check Lipo Battery Voltage CheckVoltage ();

// Scan Servos, ibalik ang posisyon na MoveTest (); MoveHome (); Mga Opsyon ng Menu (); RunCheck = 1; }

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

lumipat (inByte) {

case '1': MovePose1 (); pahinga;

case '2': MovePose2 (); pahinga; case '3': MovePose3 (); pahinga;

case '4': MovePose4 (); pahinga;

case '5': MoveHome (); pahinga; kaso '6': Grab (); pahinga;

case '7': LEDTest (); pahinga;

kaso '8': RelaxServos (); pahinga; }}

walang bisa ang CheckVoltage () {// maghintay, pagkatapos suriin ang boltahe (kaligtasan ng LiPO) float voltage = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println ("#### Serial.print ("System Voltage:"); Serial.print (boltahe); Serial.println ("volts."); kung (boltahe 10.0) {Serial.println ("Mga antas ng boltahe nominal."); } kung (RunCheck == 1) {MenuOptions (); } Serial.println ("#### }

walang bisa ang MoveHome () {pagkaantala (100); // inirekumendang bioloid.loadPose (Home); // load the pose from FLASH, into the nextPose buffer bioloid.readPose (); // basahin sa kasalukuyang mga posisyon ng servo sa buffer ng curPose Serial.println ("############################"); Serial.println ("Paglilipat ng mga servo sa posisyon ng Home"); Serial.println ("#### pagkaantala (1000); bioloid.interpolateSetup (1000); // setup for interpolation from current-> susunod higit sa 1/2 isang segundo habang (bioloid.interpolating> 0) {// gawin ito habang hindi namin naabot ang aming bagong pose bioloid.interpolateStep (); // ilipat servos, kung kinakailangan. antala (3); } kung (RunCheck == 1) {MenuOptions (); }}

walang bisa ang MovePose1 () {pagkaantala (100); // inirekumendang bioloid.loadPose (Pose1); // load the pose from FLASH, into the nextPose buffer bioloid.readPose (); // basahin sa kasalukuyang mga posisyon ng servo sa buffer ng curPose Serial.println ("############################"); Serial.println ("Paglilipat ng mga servo sa unang posisyon"); Serial.println ("#### pagkaantala (1000); bioloid.interpolateSetup (1000); // setup for interpolation from current-> susunod higit sa 1/2 isang segundo habang (bioloid.interpolating> 0) {// gawin ito habang hindi namin naabot ang aming bagong pose bioloid.interpolateStep (); // ilipat servos, kung kinakailangan. antala (3); } SetPosition (3, 291); // itakda ang posisyon ng magkasanib na 3 sa '0' pagkaantala (100); // maghintay para sa magkasanib na ilipat kung (RunCheck == 1) {MenuOptions (); }}

walang bisa ang MovePose2 () {pagkaantala (100); // inirekumendang bioloid.loadPose (Pose2); // load the pose from FLASH, into the nextPose buffer bioloid.readPose (); // basahin sa kasalukuyang mga posisyon ng servo sa buffer ng curPose Serial.println ("############################"); Serial.println ("Paglilipat ng mga servos sa ika-2 posisyon"); Serial.println ("#### pagkaantala (1000); bioloid.interpolateSetup (1000); // setup for interpolation from current-> susunod higit sa 1/2 isang segundo habang (bioloid.interpolating> 0) {// gawin ito habang hindi namin naabot ang aming bagong pose bioloid.interpolateStep (); // ilipat servos, kung kinakailangan. antala (3); } SetPosition (3, 291); // itakda ang posisyon ng magkasanib na 3 sa '0' pagkaantala (100); // maghintay para sa magkasanib na ilipat kung (RunCheck == 1) {MenuOptions (); }} walang bisa ang MovePose3 () {pagkaantala (100); // inirekumendang bioloid.loadPose (Pose3); // load the pose from FLASH, into the nextPose buffer bioloid.readPose (); // basahin sa kasalukuyang mga posisyon ng servo sa curPose buffer na Serial.println ("########### ###################"); Serial.println ("Paglilipat ng mga servos sa ika-3 posisyon"); Serial.println ("#### pagkaantala (1000); bioloid.interpolateSetup (1000); // setup for interpolation from current-> susunod higit sa 1/2 isang segundo habang (bioloid.interpolating> 0) {// gawin ito habang hindi namin naabot ang aming bagong pose bioloid.interpolateStep (); // ilipat servos, kung kinakailangan. antala (3); } SetPosition (3, 291); // itakda ang posisyon ng magkasanib na 3 sa '0' pagkaantala (100); // maghintay para sa magkasanib na ilipat kung (RunCheck == 1) {MenuOptions (); }}

walang bisa ang MovePose4 () {pagkaantala (100); // inirekumendang bioloid.loadPose (Pose4); // load the pose from FLASH, into the nextPose buffer bioloid.readPose (); // basahin sa kasalukuyang mga posisyon ng servo sa buffer ng curPose Serial.println ("############################"); Serial.println ("Paglilipat ng mga servos sa ika-4 na posisyon"); Serial.println ("#### pagkaantala (1000); bioloid.interpolateSetup (1000); // setup for interpolation from current-> susunod higit sa 1/2 isang segundo habang (bioloid.interpolating> 0) {// gawin ito habang hindi namin naabot ang aming bagong pose bioloid.interpolateStep (); // ilipat servos, kung kinakailangan. antala (3); } SetPosition (3, 291); // itakda ang posisyon ng magkasanib na 3 sa '0' pagkaantala (100); // maghintay para sa magkasanib na ilipat kung (RunCheck == 1) {MenuOptions (); }}

walang bisa ang MoveTest () {Serial.println ("######### #####################"); Serial.println ("Pagsisimula ng Pagsubok sa Pag-sign ng Kilusan"); Serial.println ("#### pagkaantala (500); id = 1; pos = 512; habang (id <= SERVOCOUNT) {Serial.print ("Moving Servo ID:"); Serial.println (id);

habang (pos> = 312) {SetPosition (id, pos); pos = pos--; antala (10); }

habang (pos <= 512) {SetPosition (id, pos); pos = pos ++; antala (10); }

// iterate sa susunod na servo ID id = id ++;

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

walang bisa ang MenuOptions () {Serial.println ("#### Serial.println ("Mangyaring ipasok ang pagpipiliang 1-5 upang muling patakbuhin ang mga indibidwal na pagsubok."); Serial.println ("1) 1st Position"); Serial.println ("2) Pangalawang Posisyon"); Serial.println ("3) Pangatlong Posisyon"); Serial.println ("4) 4th Position"); Serial.println ("5) Posisyon sa Bahay"); Serial.println ("6) Suriin ang Boltahe ng System"); Serial.println ("7) Magsagawa ng LED Test"); Serial.println ("8) Relax Servos"); Serial.println ("#### }

walang bisa RelaxServos () {id = 1; Serial.println ("#### Serial.println ("Nakakarelaks na Mga Serbisyo."); Serial.println ("#### habang (id <= SERVOCOUNT) {Relax (id); id = (id ++)% SERVOCOUNT; antala (50); } kung (RunCheck == 1) {MenuOptions (); }}

walang bisa ang LEDTest () {id = 1; Serial.println ("#### Serial.println ("Running LED Test"); Serial.println ("#### habang (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print ("LED ON - Servo ID:"); Serial.println (id); pagkaantala (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED OFF - Servo ID:"); Serial.println (id); pagkaantala (3000); id = id ++; } kung (RunCheck == 1) {MenuOptions (); }}

walang bisa Grab () {SetPosition (5, 800); // itakda ang posisyon ng magkasanib na 1 sa '0' pagkaantala (100); // maghintay para sa paggalaw ng magkasanib

}

Nakabatay kami sa aming programa sa tagagawa ng PincherTest na programa na may ilang pangunahing pag-aayos sa kaso ng pagpoposisyon. Ginamit namin ang mga poses.h para sa robot na magkaroon ng mga posisyon sa memorya. Una sinubukan naming likhain ang aming paglalaro ng braso sa Pixycam upang maging awtomatiko, ngunit dahil sa magaan at maliit na mga problema sa screen, hindi ito maaaring mangyari. Ang robot ay may pangunahing posisyon sa bahay, pagkatapos mag-upload ng programa, susubukan nito ang lahat ng mga servo na matatagpuan sa robot. Itinakda namin ang mga pose para sa 1-4 na mga pindutan, kaya madali itong matandaan. Huwag mag-atubiling gamitin ang programa.

Hakbang 4: Patnubay sa Video

Hakbang 5: Konklusyon

Sa konklusyon, ang robot ay isang nakakatuwang maliit na proyekto para sa amin at isang kasiyahan na maglaro at mag-eksperimento. Hinihimok ko kayo na subukan ito at ipasadya din.

Inirerekumendang: