Satura rādītājs:

Klavieru flīzes, kas spēlē robota roku: 5 soļi
Klavieru flīzes, kas spēlē robota roku: 5 soļi

Video: Klavieru flīzes, kas spēlē robota roku: 5 soļi

Video: Klavieru flīzes, kas spēlē robota roku: 5 soļi
Video: 8 самоделок своими руками по ремонту за 5 лет. 2024, Jūlijs
Anonim
Klavieru flīzes spēlē robota roku
Klavieru flīzes spēlē robota roku

Grupu veido 2 automatizācijas inženieri no UCN, kuri nāca klajā ar izcilu ideju, ko mēs esam motivēti darīt un attīstīt. Idejas pamatā ir Arduino tāfele, kas kontrolē robotu roku. Arduino dēlis ir operācijas smadzenes, un tad operācijas izpildmehānisms - robotizētā roka - darīs to, kas tam nepieciešams. Sīkāks skaidrojums tiks sniegts vēlāk.

1. solis: aprīkojums

Aprīkojums
Aprīkojums

Robota roka:

Phantomx Pincher robotu roku komplekts Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)

Programmatūra robotam- https://www.arduino.cc/en/Main/OldSoftwareRelease… Krāsu noteikšanas kamera:

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

Programmatūra - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)

2. darbība: Arduino iestatīšana

Arduino iestatīšana
Arduino iestatīšana

Šeit varat redzēt iestatījumus uz tāfeles, kas ir ļoti vienkārši.

Kreisajā pusē ir barošanas avots.

Vidējais ir paredzēts pirmajam servo, kas vēlāk ir savienots ar citiem servos, servo pa servo.

Apakšējā daļa ir vieta, kur mēs kontrolējam dēli no datora vai klēpjdatora, kura otrā galā ir USB ieeja.

3. solis: galīgā programma

||| PROGRAMMA |||

#iekļaut

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

#define POSECOUNT 5

BioloidController bioloid = BioloidController (1000000);

const int SERVOKONTS = 5; int id; int pos; Būla IDCheck; Būla RunCheck;

void setup () {pinMode (0, OUTPUT); ax12SetRegister2 (1, 32, 50); // iestatiet kopīgo numuru 1 reģistru 32 uz ātrumu 50. ax12SetRegister2 (2, 32, 50); // iestatiet savienojuma 2. numuru reģistru 32 uz ātrumu 50. ax12SetRegister2 (3, 32, 50); // iestatiet kopīgo numuru 3 reģistru 32 uz ātrumu 50. ax12SetRegister2 (4, 32, 50); // iestatiet kopīgo numuru 4 reģistru 32 uz ātrumu 50. ax12SetRegister2 (5, 32, 100); // iestatiet kopīgā numura 5 reģistru 32 līdz ātrumam 100. // inicializēt mainīgos id = 1; poz = 0; IDCheck = 1; RunCheck = 0; // atvērt seriālo portu Serial.begin (9600); kavēšanās (500); Serial.println ("#########################"); Serial.println ("Izveidota seriālā komunikācija.");

// Check Lipo Battery Voltage CheckVoltage ();

// Scan Servos, atgriešanās pozīcija MoveTest (); MoveHome (); MenuOptions (); RunCheck = 1; }

void loop () {// lasīt sensoru: int inByte = Serial.read ();

slēdzis (inByte) {

gadījums '1': MovePose1 (); pārtraukums;

gadījums '2': MovePose2 (); pārtraukums; gadījums '3': MovePose3 (); pārtraukums;

gadījums '4': MovePose4 (); pārtraukums;

gadījums '5': MoveHome (); pārtraukums; gadījums '6': Grab (); pārtraukums;

gadījums '7': LEDTest (); pārtraukums;

gadījums '8': RelaxServos (); pārtraukums; }}

void CheckVoltage () {// pagaidiet, tad pārbaudiet sprieguma (LiPO drošība) pludiņa spriegumu = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println ("#########################"); Serial.print ("Sistēmas spriegums:"); Sērijas nospiedums (spriegums); Serial.println ("volti"); ja (spriegums 10,0) {Serial.println ("Sprieguma līmeņi nomināli."); } ja (RunCheck == 1) {MenuOptions (); } Serial.println ("##########################"); }

void MoveHome () {kavēšanās (100); // ieteicamā pauze bioloid.loadPose (Home); // ielādēt pozu no FLASH, nextPose buferšķīdumā bioloid.readPose (); // nolasīt pašreizējās servo pozīcijās uz curPose buferi Serial.println ("#########################"); Serial.println ("Servo pārvietošana sākuma stāvoklī"); Serial.println ("#########################"); kavēšanās (1000); bioloid.interpolateSetup (1000); // uzstādīšana interpolācijai no strāvas-> nākamais vairāk nekā 1/2 sekundi (bioloid.interpolating> 0) {// dariet to, kamēr neesam sasnieguši savu jauno pozu bioloid.interpolateStep (); // pārvietot servos, ja nepieciešams. kavēšanās (3); } ja (RunCheck == 1) {MenuOptions (); }}

void MovePose1 () {kavēšanās (100); // ieteicamā pauze bioloid.loadPose (Pose1); // ielādēt pozu no FLASH, nextPose buferšķīdumā bioloid.readPose (); // nolasīt pašreizējās servo pozīcijās uz curPose buferi Serial.println ("#########################"); Serial.println ("Servo pārvietošana uz 1. pozīciju"); Serial.println ("#########################"); kavēšanās (1000); bioloid.interpolateSetup (1000); // uzstādīšana interpolācijai no strāvas-> nākamā vairāk nekā 1/2 sekundes, kamēr (bioloid.interpolating> 0) {// dariet to, kamēr neesam sasnieguši savu jauno pozu bioloid.interpolateStep (); // pārvietot servos, ja nepieciešams. kavēšanās (3); } SetPosition (3, 291); // iestatiet savienojuma 3 pozīciju uz '0' aizkavi (100); // gaidiet, kamēr savienojums pārvietosies, ja (RunCheck == 1) {MenuOptions (); }}

void MovePose2 () {kavēšanās (100); // ieteicamā pauze bioloid.loadPose (Pose2); // ielādēt pozu no FLASH, nextPose buferšķīdumā bioloid.readPose (); // nolasīt pašreizējās servo pozīcijās uz curPose buferi Serial.println ("#########################"); Serial.println ("Servo pārvietošana uz 2. pozīciju"); Serial.println ("#########################"); kavēšanās (1000); bioloid.interpolateSetup (1000); // uzstādīšana interpolācijai no strāvas-> nākamais vairāk nekā 1/2 sekundi (bioloid.interpolating> 0) {// dariet to, kamēr neesam sasnieguši savu jauno pozu bioloid.interpolateStep (); // pārvietot servos, ja nepieciešams. kavēšanās (3); } SetPosition (3, 291); // iestatiet locītavas 3 pozīciju uz '0' aizkavi (100); // gaidiet, kamēr savienojums pārvietosies, ja (RunCheck == 1) {MenuOptions (); }} void MovePose3 () {kavēšanās (100); // ieteicamā pauze bioloid.loadPose (Pose3); // ielādēt pozu no FLASH, nextPose buferšķīdumā bioloid.readPose (); // nolasīt pašreizējās servo pozīcijās uz curPose buferi Serial.println ("#########################"); Serial.println ("Servo pārvietošana uz 3. pozīciju"); Serial.println ("#########################"); kavēšanās (1000); bioloid.interpolateSetup (1000); // uzstādīšana interpolācijai no strāvas-> nākamā vairāk nekā 1/2 sekundes, kamēr (bioloid.interpolating> 0) {// dariet to, kamēr neesam sasnieguši savu jauno pozu bioloid.interpolateStep (); // pārvietot servos, ja nepieciešams. kavēšanās (3); } SetPosition (3, 291); // iestatiet locītavas 3 pozīciju uz '0' aizkavi (100); // gaidiet, kamēr savienojums pārvietosies, ja (RunCheck == 1) {MenuOptions (); }}

void MovePose4 () {kavēšanās (100); // ieteicamā pauze bioloid.loadPose (Pose4); // ielādēt pozu no FLASH, nextPose buferšķīdumā bioloid.readPose (); // nolasīt pašreizējās servo pozīcijās uz curPose buferi Serial.println ("#########################"); Serial.println ("Servo pārvietošana uz 4. pozīciju"); Serial.println ("#########################"); kavēšanās (1000); bioloid.interpolateSetup (1000); // uzstādīšana interpolācijai no strāvas-> nākamā vairāk nekā 1/2 sekundes, kamēr (bioloid.interpolating> 0) {// dariet to, kamēr neesam sasnieguši savu jauno pozu bioloid.interpolateStep (); // pārvietot servos, ja nepieciešams. kavēšanās (3); } SetPosition (3, 291); // iestatiet savienojuma 3 pozīciju uz '0' aizkavi (100); // gaidiet, kamēr savienojums pārvietosies, ja (RunCheck == 1) {MenuOptions (); }}

void MoveTest () {Serial.println ("########################")); Serial.println ("Kustības zīmju testa inicializēšana"); Serial.println ("#########################"); kavēšanās (500); id = 1; poz = 512; while (id <= SERVOCOUNT) {Serial.print ("Moving Servo ID:"); Sērijas.println (id);

while (poz> = 312) {SetPosition (id, pos); poz = pos--; kavēšanās (10); }

while (poz <= 512) {SetPosition (id, pos); poz = pos ++; kavēšanās (10); }

// atkārtot līdz nākamajam servo ID id = id ++;

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

void MenuOptions () {Serial.println ("########################")); Serial.println ("Lūdzu, ievadiet opciju 1-5, lai vēlreiz palaistu atsevišķus testus."); Serial.println ("1) 1. pozīcija"); Serial.println ("2) 2. pozīcija"); Serial.println ("3) 3. pozīcija"); Serial.println ("4) 4. pozīcija"); Serial.println ("5) Sākuma stāvoklis"); Serial.println ("6) Pārbaudiet sistēmas spriegumu"); Serial.println ("7) Veikt LED testu"); Serial.println ("8) Relax Servos"); Serial.println ("#########################"); }

anulēts RelaxServos () {id = 1; Serial.println ("#########################"); Serial.println ("Relaksējoši servi."); Serial.println ("#########################"); while (id <= SERVOCOUNT) {Relax (id); id = (id ++)%SERVOCOUNT; kavēšanās (50); } ja (RunCheck == 1) {MenuOptions (); }}

void LEDTest () {id = 1; Serial.println ("#########################"); Serial.println ("Running LED Test"); Serial.println ("#########################"); while (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print ("LED ON - Servo ID:"); Sērijas.println (id); kavēšanās (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED OFF - Servo ID:"); Sērijas.println (id); kavēšanās (3000); id = id ++; } ja (RunCheck == 1) {MenuOptions (); }}

void Grab () {SetPosition (5, 800); // iestatiet savienojuma 1 pozīciju uz “0” aizkavi (100); // pagaidiet, līdz savienojums pārvietosies

}

Mēs esam balstījuši savu programmu uz ražotāja PincherTest programmu ar dažiem lieliem pielāgojumiem pozicionēšanas gadījumā. Mēs izmantojām pozas.h, lai robotam atmiņā būtu pozīcijas. Pirmkārt, mēs centāmies izveidot savu spēles roku ar Pixycam automātisku, taču gaismas un mazu ekrāna problēmu dēļ tas nevarēja notikt. Robotam ir pamata mājas pozīcija, pēc programmas augšupielādes tas pārbaudīs visus robotā atrastos servos. Mēs esam iestatījuši pozas 1-4 pogām, tāpēc to būs viegli atcerēties. Jūtieties brīvi izmantot programmu.

4. darbība. Video ceļvedis

5. darbība. Secinājums

Noslēgumā jāsaka, ka robots mums ir mazs jautrs projekts un jautra rotaļa un eksperiments. Es iesaku jums to izmēģināt un arī pielāgot.

Ieteicams: