Բովանդակություն:

Դաշնամուրի սալիկներ ՝ նվագելով ռոբոտի բազուկ ՝ 5 քայլ
Դաշնամուրի սալիկներ ՝ նվագելով ռոբոտի բազուկ ՝ 5 քայլ

Video: Դաշնամուրի սալիկներ ՝ նվագելով ռոբոտի բազուկ ՝ 5 քայլ

Video: Դաշնամուրի սալիկներ ՝ նվագելով ռոբոտի բազուկ ՝ 5 քայլ
Video: MSC Seascape Full Ship Tour Tips Tricks & Review New Flagship Vista Megaship Project Italy 2024, Հուլիսի
Anonim
Դաշնամուրի սալիկներ ՝ նվագելով ռոբոտի բազուկ
Դաշնամուրի սալիկներ ՝ նվագելով ռոբոտի բազուկ

Խումբը կազմված է UCN- ի ավտոմատացման 2 ճարտարագետներից, ովքեր հանդես եկան փայլուն գաղափարով, որ մենք մոտիվացված ենք անել և զարգանալ: Գաղափարը հիմնված է Arduino տախտակի վրա, որը վերահսկում է ռոբոտացված ձեռքը: Arduino- ի տախտակը գործողության ուղեղն է, այնուհետև գործողության շարժիչը ՝ Robotic թևը, կանի այն, ինչ իրեն անհրաժեշտ է: Ավելի խորը բացատրությունը կգա ավելի ուշ:

Քայլ 1: Սարքավորումներ

Սարքավորումներ
Սարքավորումներ

Ռոբոտի թև.

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

Ռոբոտի ծրագրակազմ- https://www.arduino.cc/hy/Main/OldSoftwareRelease… Գույնի հայտնաբերման տեսախցիկ.

CMUcam5 Pixy տեսախցիկ - (https://charmedlabs.com/default/pixy-cmucam5/)

Softwareրագրային ապահովում - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)

Քայլ 2: Arduino- ի կարգավորում

Arduino կարգավորումը
Arduino կարգավորումը

Դուք կարող եք տեսնել տեղադրումը տախտակի վրա այստեղ, ինչը շատ հեշտ է:

Ձախ կողմում է Էներգամատակարարումը:

Միջինը առաջին սերվոյի համար է, որը հետագայում միանում է մյուս սերվոներին ՝ սերվոյով սերվոյով:

Ստորին մեկն այն է, որտեղ մենք վերահսկում ենք տախտակը համակարգչից կամ նոութբուքից, որը մյուս ծայրում ունի USB մուտք:

Քայլ 3: Վերջնական ծրագիր

||| ՐԱԳԻՐ |||

#ներառում

#ներառել #ներառել "poses.h" #include // Pixy Library #include

#սահմանեք ՊԱՇՏՈՆ 5

BioloidController bioloid = BioloidController (1000000);

const int ERԱՌԱՅՈԹՅՈՆ = 5; int id; int pos; բուլյան IDCheck; բուլյան RunCheck;

void setup () {pinMode (0, OUTPUT); ax12SetRegister2 (1, 32, 50); // համատեղ թիվ 1 գրանցամատյանը 32 սահմանել արագության 50. ax12SetRegister2 (2, 32, 50); // հոդի թիվ 2 գրանցամատյանը 32 սահմանել արագության 50. ax12SetRegister2 (3, 32, 50); // համատեղ թիվ 3 գրանցամատյան 32 -ը սահմանել արագության 50. ax12SetRegister2 (4, 32, 50); // համատեղ թիվ 4 գրանցամատյան 32 -ը սահմանել 50 արագության վրա: 32 -ից մինչև 100. // սկզբնականացնել փոփոխականներ id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // բացել սերիական նավահանգիստ Serial.begin (9600); ուշացում (500); Serial.println ("############################"); Serial.println («Սերիական հաղորդակցությունը հաստատված է»);

// Ստուգեք Lipo մարտկոցի լարման CheckVoltage ();

// Սկանավորեք ծառայությունները, վերադարձի դիրքը MoveTest (); MoveHome (); MenuOptions (); RunCheck = 1; }

void loop () {// կարդալ սենսորը ՝ int inByte = Serial.read ();

անջատիչ (inByte) {

գործ '1'. MovePose1 (); ընդմիջում;

գործ '2'. MovePose2 (); ընդմիջում; գործ '3'. MovePose3 (); ընդմիջում;

գործ '4'. MovePose4 (); ընդմիջում;

գործ '5'. MoveHome (); ընդմիջում; գործ '6'. Գրավ (); ընդմիջում;

գործ '7'. LEDTest (); ընդմիջում;

գործ '8'. RelaxServos (); ընդմիջում; }}

անվավեր CheckVoltage () {// սպասեք, ապա ստուգեք լարման (LiPO անվտանգություն) բոց լարման = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println ("############################"); Serial.print ("Համակարգի լարումը."); Serial.print (լարման); Serial.println («վոլտ»); if (լարման 10.0) {Serial.println («Լարման մակարդակները անվանական»); } if (RunCheck == 1) {MenuOptions (); } Serial.println ("############################"); }

անվավեր MoveHome () {հետաձգում (100); // առաջարկվող դադար bioloid.loadPose (Տուն); // բեռնել դիրքը FLASH- ից, nextPose բուֆերային bioloid.readPose (); // ընթացիկ սերվոյի դիրքերում կարդալ curPose բուֆերային Serial.println ("############################"); Serial.println («Սերվոների տեղափոխում տնային դիրք»); Serial.println ("############################"); ուշացում (1000); bioloid.interpolateSetup (1000); // միջակայքի տեղադրում ընթացիկից-> հաջորդ 1/2 վայրկյանի ընթացքում (bioloid.interpolating> 0) {// դա արեք, քանի դեռ չենք հասել մեր նոր դիրքին bioloid.interpolateStep (); // անհրաժեշտության դեպքում տեղափոխել սերվերը: ուշացում (3); } if (RunCheck == 1) {MenuOptions (); }}

անվավեր MovePose1 () {հետաձգում (100); // առաջարկվող դադար bioloid.loadPose (Pose1); // բեռնել դիրքորոշումը FLASH- ից, nextPose բուֆերային bioloid.readPose (); // ընթացիկ սերվոյի դիրքերում կարդալ curPose բուֆերային Serial.println ("############################"); Serial.println («Սերվոների տեղափոխում 1 -ին դիրք»); Serial.println ("############################"); ուշացում (1000); bioloid.interpolateSetup (1000); // միջակայքի տեղադրում ընթացիկից-> հաջորդ 1/2 վայրկյանի ընթացքում (bioloid.interpolating> 0) {// դա արեք, քանի դեռ չենք հասել մեր նոր դիրքին bioloid.interpolateStep (); // անհրաժեշտության դեպքում տեղափոխել սերվերը: ուշացում (3); } SetPosition (3, 291); // հոդի 3 -ի դիրքը սահմանել «0» հետաձգման (100); // սպասել, մինչև հոդի տեղաշարժը, եթե (RunCheck == 1) {MenuOptions (); }}

անվավեր MovePose2 () {հետաձգում (100); // առաջարկվող դադար bioloid.loadPose (Pose2); // բեռնել դիրքը FLASH- ից, nextPose բուֆերային bioloid.readPose (); // ընթացիկ սերվոյի դիրքերում կարդալ curPose բուֆերային Serial.println ("############################"); Serial.println («Սպասարկողների տեղափոխում 2 -րդ դիրք»); Serial.println ("############################"); ուշացում (1000); bioloid.interpolateSetup (1000); // կարգավորում ինտերպոլացիայի համար ընթացիկից-> հաջորդ 1/2 վայրկյանի ընթացքում (bioloid.interpolating> 0) {// դա արեք, քանի դեռ չենք հասել մեր նոր դիրքին bioloid.interpolateStep (); // անհրաժեշտության դեպքում տեղափոխել սերվերը: ուշացում (3); } SetPosition (3, 291); // հոդի 3 -ի դիրքը սահմանել «0» հետաձգման (100); // սպասել, մինչև հոդի տեղաշարժը, եթե (RunCheck == 1) {MenuOptions (); }} անվավեր MovePose3 () {հետաձգում (100); // առաջարկվող դադար bioloid.loadPose (Pose3); // բեռնել դիրքը FLASH- ից, nextPose բուֆերային bioloid.readPose (); // ընթացիկ սերվոյի դիրքերում կարդալ curPose բուֆերային Serial.println ("############################"); Serial.println («Սերվոների տեղափոխում 3 -րդ դիրք»); Serial.println ("############################"); ուշացում (1000); bioloid.interpolateSetup (1000); // միջակայքի տեղադրում ընթացիկից-> հաջորդ 1/2 վայրկյանի ընթացքում (bioloid.interpolating> 0) {// դա արեք, քանի դեռ չենք հասել մեր նոր դիրքին bioloid.interpolateStep (); // անհրաժեշտության դեպքում տեղափոխել սերվերը: ուշացում (3); } SetPosition (3, 291); // հոդի 3 -ի դիրքը սահմանել «0» հետաձգման (100); // սպասել, մինչև հոդի տեղաշարժը, եթե (RunCheck == 1) {MenuOptions (); }}

անվավեր MovePose4 () {հետաձգում (100); // առաջարկվող դադար bioloid.loadPose (Pose4); // բեռնել դիրքորոշումը FLASH- ից, nextPose բուֆերային bioloid.readPose (); // ընթացիկ սերվոյի դիրքերում կարդալ curPose բուֆերային Serial.println ("############################"); Serial.println («Սերվոների տեղափոխում 4 -րդ դիրք»); Serial.println ("############################"); ուշացում (1000); bioloid.interpolateSetup (1000); // կարգավորում ինտերպոլացիայի համար ընթացիկից-> հաջորդ 1/2 վայրկյանի ընթացքում (bioloid.interpolating> 0) {// դա արեք, քանի դեռ չենք հասել մեր նոր դիրքին bioloid.interpolateStep (); // անհրաժեշտության դեպքում տեղափոխել սերվերը: ուշացում (3); } SetPosition (3, 291); // հոդի 3 -ի դիրքը սահմանել «0» հետաձգման (100); // սպասել, մինչև հոդի տեղաշարժը, եթե (RunCheck == 1) {MenuOptions (); }}

void MoveTest () {Serial.println ("#############################"); Serial.println («Շարժման նշանի թեստի սկզբնականացում»); Serial.println ("############################"); ուշացում (500); id = 1; pos = 512; while (id <= SERVOCOUNT) {Serial.print ("Սերվոյի ID- ի տեղափոխում."); Serial.println (id);

while (pos> = 312) {SetPosition (id, pos); pos = pos--; ուշացում (10); }

while (pos <= 512) {SetPosition (id, pos); pos = pos ++; ուշացում (10); }

// կրկնել հաջորդ սերվոյի ID id = id ++;

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

void MenuOptions () {Serial.println ("#############################"); Serial.println ("Խնդրում ենք մուտքագրել 1-5-րդ տարբերակը` անհատական թեստերը կրկին գործարկելու համար "); Serial.println («1) 1 -ին պաշտոն»); Serial.println («2) 2 -րդ պաշտոն»); Serial.println («3) 3 -րդ պաշտոն»); Serial.println («4» 4 -րդ պաշտոն »); Serial.println ("5) Տնային պաշտոն"); Serial.println ("6) Ստուգեք համակարգի լարումը"); Serial.println ("7) Կատարել LED թեստ"); Serial.println ("8" Relax Servos "); Serial.println ("############################"); }

դատարկ RelaxServos () {id = 1; Serial.println ("############################"); Serial.println («Հանգստացնող ծառայություններ»); Serial.println ("############################"); while (id <= SERVOCOUNT) {Relax (id); id = (id ++)%ERԱՌԱՅՈԹՅՈՆ; ուշացում (50); } if (RunCheck == 1) {MenuOptions (); }}

անվավեր LEDTest () {id = 1; Serial.println ("############################"); Serial.println («Վազում է LED թեստ»); Serial.println ("############################"); while (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print ("LED ON - Servo ID:"); Serial.println (id); ուշացում (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED OFF - Servo ID:"); Serial.println (id); ուշացում (3000); id = id ++; } if (RunCheck == 1) {MenuOptions (); }}

void Grab () {SetPosition (5, 800); // հոդի 1 -ի դիրքը սահմանել «0» հետաձգման (100); // սպասել, որ հոդի շարժումը տեղի ունենա

}

Մենք մեր ծրագիրը հիմնվել ենք արտադրողների PincherTest ծրագրի վրա `դիրքավորման դեպքում որոշ խոշոր փոփոխություններով: Մենք ռոբոտի համար օգտագործեցինք poses.h- ն `հիշողության մեջ դիրքեր ունենալու համար: Սկզբում մենք փորձեցինք ստեղծել Pixycam- ի հետ խաղային թևը ավտոմատ, բայց լույսի և փոքր էկրանի խնդիրների պատճառով դա տեղի չունեցավ: Ռոբոտը ունի հիմնական տնային դիրք, ծրագիրը վերբեռնելուց հետո այն կփորձարկի ռոբոտի մեջ հայտնաբերված բոլոր ծառայությունները: Մենք սահմանել ենք 1-4 կոճակների պոզերը, այնպես որ դա հեշտ կլինի հիշել: Ազատ զգալ օգտագործել ծրագիրը:

Քայլ 4: Տեսաուղեցույց

Քայլ 5: Եզրակացություն

Եզրափակելով ՝ ռոբոտը մեզ համար զվարճալի փոքր նախագիծ է և զվարճալի խաղ, որը կարող է խաղալ և փորձարկել: Ես խրախուսում եմ ձեզ փորձել և հարմարեցնել այն նույնպես:

Խորհուրդ ենք տալիս: