Orodha ya maudhui:

Vigae vya piano kucheza mkono wa Robot: Hatua 5
Vigae vya piano kucheza mkono wa Robot: Hatua 5

Video: Vigae vya piano kucheza mkono wa Robot: Hatua 5

Video: Vigae vya piano kucheza mkono wa Robot: Hatua 5
Video: Zuchu Amwaga Machozi Baada Ya kupewa Kiss Na Diamond Platinumz 2024, Julai
Anonim
Vigae vya piano kucheza mkono wa Robot
Vigae vya piano kucheza mkono wa Robot

Kikundi hicho kinaundwa na Wahandisi 2 wa Utengenezaji kutoka UCN, ambao walikuja na wazo nzuri ambalo tunachochewa kufanya na kukuza. Wazo linategemea bodi ya Arduino inayodhibiti mkono wa roboti. Bodi ya Arduino ni akili ya operesheni na kisha mshawishi wa operesheni, mkono wa Robotic, atafanya kile inachohitaji. Maelezo ya kina zaidi yatakuja baadaye.

Hatua ya 1: Vifaa

Vifaa
Vifaa

Mkono wa Robot:

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

Programu ya roboti- https://www.arduino.cc/en/Main/OldSoftwareRelease ……. Kamera ya kugundua rangi:

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

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

Hatua ya 2: Usanidi wa Arduino

Usanidi wa Arduino
Usanidi wa Arduino

Unaweza kuona usanidi kwenye ubao hapa, ambayo ni rahisi sana.

Kushoto ni Ugavi wa Umeme.

Ya kati ni ya servo ya kwanza, ambayo baadaye imeunganishwa na servos zingine, servo na servo.

Ya chini ni mahali tunapodhibiti bodi kutoka kwa PC au Laptop, ambayo ina pembejeo la USB upande mwingine.

Hatua ya 3: Mpango wa Mwisho

||| PROGRAM |||

# pamoja

# pamoja na # pamoja na "pozi.h" # pamoja na // Pixy Library # pamoja

#fafanua POSECOUNT 5

BioloidController bioloid = BioloidController (1000000);

const int SERVOCOUNT = 5; id id; int pos; ID ya boolean Angalia; Run Run ya kuangalia;

kuanzisha batili () {pinMode (0, OUTPUT); ax12SetRegister2 (1, 32, 50);; 32 kuharakisha 100. // Anzisha vigezo id = 1; pos = 0; Angalia = 1; RunCheck = 0; // bandari wazi ya serial Serial.begin (9600); kuchelewesha (500); Serial.println ("# # # # # # # # #" #; Serial.println ("Mawasiliano ya Siri Imesimamishwa.");

// Angalia Lipo Voltage CheckVoltage ();

// Scan Servos, nafasi ya kurudi MoveTest (); Hoja ya Nyumbani (); MenyuOptions (); RunCheck = 1; }

kitanzi batili () {// soma sensor: int inByte = Serial.read ();

kubadili (inByte) {

kesi '1': MovePose1 (); kuvunja;

kesi '2': MovePose2 (); kuvunja; kesi '3': MovePose3 (); kuvunja;

kesi '4': MovePose4 (); kuvunja;

kesi '5': MoveHome (); kuvunja; kesi '6': Kunyakua (); kuvunja;

kesi '7': LEDTest (); kuvunja;

kesi '8': RelaxServos (); kuvunja; }}

batili CheckVoltage () {// subiri, kisha angalia voltage (usalama wa LiPO) voltage ya kuelea = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println ("# # # # # # # # # #" #; Serial.print ("Voltage ya Mfumo:"); Printa ya serial (voltage); Serial.println ("volts."); ikiwa (voltage 10.0) {Serial.println ("Viwango vya Voltage hutajwa."); } ikiwa (RunCheck == 1) {MenuOptions (); } Serial.println ("# # # # # # # # # #" #; }

batili MoveHome () {kuchelewesha (100); // ilipendekeza pause bioloid. Pakia (Nyumbani); // pakia pozi kutoka kwa FLASH, kwenye bafu inayofuata ya Poose bioloid.readPose (); // soma katika nafasi za sasa za servo kwa bafa ya Pera Serial.println ("# # # # # # # # # # #" #; Serial.println ("Kuhamisha servos kwenda kwa nafasi ya Nyumbani"); Serial.println ("# # # # # # # # # #" #; kuchelewesha (1000); bioloid.interpolateSetup (1000); // usanidi wa kuingiliana kutoka kwa sasa-> ijayo zaidi ya 1/2 kwa sekunde wakati (bioloid.interpolating> 0) {// fanya hivi wakati hatujafikia poolo yetu mpya ya bioloid.interpolateStep (); // songa servos, ikiwa ni lazima. kuchelewesha (3); } ikiwa (RunCheck == 1) {MenuOptions (); }}

batili MovePose1 () {kuchelewesha (100); // ilipendekeza pause bioloid. LoosePose (Pose1); // pakia pozi kutoka kwa FLASH, kwenye bafu inayofuata ya Poose bioloid.readPose (); // soma katika nafasi za sasa za servo kwa bafa ya Pera Serial.println ("# # # # # # # # # # # # # # # Serial.println ("Kuhamisha servos hadi nafasi ya 1"); Serial.println ("# # # # # # # # # #" #; kuchelewesha (1000); bioloid.interpolateSetup (1000); // usanidi wa kuingiliana kutoka kwa sasa-> ijayo zaidi ya 1/2 kwa sekunde wakati (bioloid.interpolating> 0) {// fanya hivi wakati hatujafikia poolo yetu mpya ya bioloid.interpolateStep (); // songa servos, ikiwa ni lazima. kuchelewesha (3); } Mpangilio wa Kuweka (3, 291); // weka nafasi ya ucheleweshaji wa pamoja wa 3 hadi '0' (100); // subiri kwa pamoja kusonga ikiwa (RunCheck == 1) {MenuOptions (); }}

batili MovePose2 () {kuchelewesha (100); // ilipendekeza pause bioloid. LoosePose (Pose2); // pakia pozi kutoka kwa FLASH, kwenye bafu inayofuata ya Poose bioloid.readPose (); // soma katika nafasi za sasa za servo kwa bafa ya Pera Serial.println ("# # # # # # # # # # #" #; Serial.println ("Kuhamisha servos kwenda nafasi ya 2"); Serial.println ("# # # # # # # # # #" #; kuchelewesha (1000); bioloid.interpolateSetup (1000); // usanidi wa kuingiliana kutoka kwa sasa-> ijayo zaidi ya 1/2 kwa sekunde wakati (bioloid.interpolating> 0) {// fanya hivi wakati hatujafikia poolo yetu mpya ya bioloid.interpolateStep (); // songa servos, ikiwa ni lazima. kuchelewesha (3); } Mpangilio wa Kuweka (3, 291); // weka nafasi ya ucheleweshaji wa pamoja wa 3 hadi '0' (100); // subiri kwa pamoja kusonga ikiwa (RunCheck == 1) {MenuOptions (); }} batili MovePose3 () {kuchelewesha (100); // ilipendekeza pause bioloid. LoosePose (Pose3); // pakia pozi kutoka kwa FLASH, kwenye bafu inayofuata ya Poose bioloid.readPose (); // soma katika nafasi za sasa za servo kwa bafa ya Pera Serial.println ("# # # # # # # # # # # # # # # Serial.println ("Kuhamisha servos hadi nafasi ya 3"); Serial.println ("# # # # # # # # # #" #; kuchelewesha (1000); bioloid.interpolateSetup (1000); // usanidi wa kuingiliana kutoka kwa sasa-> ijayo zaidi ya 1/2 kwa sekunde wakati (bioloid.interpolating> 0) {// fanya hivi wakati hatujafikia poolo yetu mpya ya bioloid.interpolateStep (); // songa servos, ikiwa ni lazima. kuchelewesha (3); } Mpangilio wa Kuweka (3, 291); // weka nafasi ya ucheleweshaji wa pamoja wa 3 hadi '0' (100); // subiri kwa pamoja kusonga ikiwa (RunCheck == 1) {MenuOptions (); }}

batili MovePose4 () {kuchelewesha (100); // ilipendekeza pause bioloid. LoosePose (Pose4); // pakia pozi kutoka kwa FLASH, kwenye bafu inayofuata ya Poose bioloid.readPose (); // soma katika nafasi za sasa za servo kwa bafa ya Pera Serial.println ("# # # # # # # # # # # # # # # Serial.println ("Kuhamisha servos hadi nafasi ya 4"); Serial.println ("# # # # # # # # #" #; kuchelewesha (1000); bioloid.interpolateSetup (1000); // usanidi wa kuingiliana kutoka kwa sasa-> ijayo zaidi ya 1/2 kwa sekunde wakati (bioloid.interpolating> 0) {// fanya hivi wakati hatujafikia poolo yetu mpya ya bioloid.interpolateStep (); // songa servos, ikiwa ni lazima. kuchelewesha (3); } Mpangilio wa Kuweka (3, 291); // weka nafasi ya ucheleweshaji wa pamoja wa 3 hadi '0' (100); // subiri kwa pamoja kusonga ikiwa (RunCheck == 1) {MenuOptions (); }}

batili MoveTest () {Serial.println ("# # # # # # # # # # # #" #; Serial.println ("Kuanzisha Jaribio la Ishara ya Harakati"); Serial.println ("# # # # # # # # #" #; kuchelewesha (500); id = 1; pos = 512; wakati (id <= SERVOCOUNT) {Serial.print ("Kusonga Kitambulisho cha Servo:"); Serial.println (id);

wakati (pos> = 312) {SetPosition (id, pos); pos = pos--; kuchelewesha (10); }

wakati (pos <= 512) {SetPosition (id, pos); pos = pos ++; kuchelewesha (10); }

// iterate hadi ijayo servo ID id = id ++;

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

batili MenyuOptions () {Serial.println ("# # # # # # # # # Serial.println ("Tafadhali ingiza chaguo 1-5 ili kuendesha majaribio ya kibinafsi tena."); Serial.println ("1) Nafasi ya 1"); Serial.println ("2) Nafasi ya 2"); Serial.println ("3) Nafasi ya 3"); Serial.println ("4) Nafasi ya 4"); Serial.println ("5) Nafasi ya Nyumbani"); Serial.println ("6) Angalia Voltage ya Mfumo"); Serial.println ("7) Fanya Mtihani wa LED"); Serial.println ("8) Pumzika Servos"); Serial.println ("# # # # # # # # #" #; }

utupu RelaxServos () {id = 1; Serial.println ("# # # # # # # # # #" #; Serial.println ("Kupumzika Servos."); Serial.println ("# # # # # # # # # #" #; wakati (id <= SERVOCOUNT) {Pumzika (id); id = (id ++)% SERVOCOUNT; kuchelewesha (50); } ikiwa (RunCheck == 1) {MenuOptions (); }}

Tupu ya LEDTest () {id = 1; Serial.println ("# # # # # # # # # #" #; Serial.println ("Running LED Test"); Serial.println ("# # # # # # # # # #" #; wakati (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print ("LED ON - Kitambulisho cha Servo:"); Serial.println (id); kuchelewesha (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED OFF - Kitambulisho cha Servo:"); Serial.println (id); kuchelewesha (3000); id = id ++; } ikiwa (RunCheck == 1) {MenuOptions (); }}

Kunyakua batili () {SetPosition (5, 800); // weka nafasi ya ucheleweshaji wa pamoja wa 1 hadi '0' (100); // subiri kwa pamoja kusonga

}

Tumeweka mpango wetu kwenye mpango wa wazalishaji wa PincherTest na viboreshaji kadhaa katika hali ya kuweka nafasi. Tulitumia pozi.h kwa roboti kuwa na nafasi kwenye kumbukumbu. Kwanza tulijaribu kuunda mkono wetu wa kucheza na Pixycam kuwa otomatiki, lakini kwa sababu ya shida nyepesi na ndogo za skrini, hiyo haikuweza kutokea. Roboti ina nafasi ya msingi ya nyumbani, baada ya kupakia programu hiyo, itajaribu servos zote zinazopatikana kwenye roboti. Tumeweka pozi kwa vifungo 1-4, kwa hivyo itakuwa rahisi kukumbuka. Jisikie huru kutumia programu.

Hatua ya 4: Mwongozo wa Video

Hatua ya 5: Hitimisho

Kwa kumalizia, roboti ni mradi mdogo wa kufurahisha kwetu na wizi wa kufurahisha kucheza karibu na kujaribu. Ninakuhimiza ujaribu na uibadilishe pia.

Ilipendekeza: