Përmbajtje:

Pllaka pianoje që luajnë krahun robot: 5 hapa
Pllaka pianoje që luajnë krahun robot: 5 hapa

Video: Pllaka pianoje që luajnë krahun robot: 5 hapa

Video: Pllaka pianoje që luajnë krahun robot: 5 hapa
Video: "Dëgjojeni perlën e Jorit"😅😅 - Big Brother Vip Albania 2024, Korrik
Anonim
Pllaka pianoje që luajnë krahun robot
Pllaka pianoje që luajnë krahun robot

Grupi përbëhet nga 2 Inxhinierë Automatizimi nga UCN, të cilët dolën me një ide brilante që ne jemi të motivuar për ta bërë dhe zhvilluar. Ideja bazohet në një bord Arduino që kontrollon një krah robotik. Bordi Arduino është truri i operacionit dhe më pas aktivizuesi i operacionit, krahu Robotik, do të bëjë atë që i nevojitet. Shpjegimi më i thelluar do të vijë më vonë.

Hapi 1: Pajisjet

Pajisjet
Pajisjet

Krahu i robotit:

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

Softuer për robotin- https://www.arduino.cc/en/Main/OldSoftwareRelease… Kamera e zbulimit të ngjyrave:

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

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

Hapi 2: Konfigurimi i Arduino

Arduino Setup
Arduino Setup

Këtu mund ta shihni konfigurimin në tabelë, i cili është shumë i lehtë.

Në të majtë është Furnizimi me energji elektrike.

E mesmja është për servo -n e parë, e cila më vonë lidhet me servos e tjerë, servo me servo.

Pjesa e poshtme është ajo ku ne kontrollojmë bordin nga një kompjuter ose laptop, që ka një hyrje USB në anën tjetër.

Hapi 3: Programi Final

||| PROGRAMI |||

#përfshi

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

#përcaktoni 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); // vendosni numrin e bashkimit 1 regjistri 32 në shpejtësinë 50. ax12SetRegister2 (2, 32, 50); // vendosni numrin e bashkimit 2 regjistri 32 në shpejtësinë 50. ax12SetRegister2 (3, 32, 50); // vendosni numrin e përbashkët 3 regjistrin 32 në shpejtësinë 50. ax12SetRegister2 (4, 32, 50); // vendosni numrin e përbashkët 4 regjistrin 32 në shpejtësinë 50. ax12SetRegister2 (5, 32, 100); // vendosni numrin e bashkimit 5 regjistrin 32 në shpejtësinë 100. // inicializoni variablat id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // porta seriale e hapur Serial.begin (9600); vonesë (500); Serial.println ("############################"); Serial.println ("Komunikimi Serial i vendosur.");

// Kontrolloni tensionin e baterisë Lipo CheckVoltage ();

// Skanoni Servos, kthejeni pozicionin MoveTest (); MoveHome (); MenuOptions (); RunCheck = 1; }

void loop () {// lexoni sensorin: int inByte = Serial.read ();

kaloni (inByte) {

rasti '1': MovePose1 (); pushim;

rasti '2': MovePose2 (); pushim; rasti '3': MovePose3 (); pushim;

rasti '4': MovePose4 (); pushim;

rasti '5': MoveHome (); pushim; rasti '6': Kap (); pushim;

rasti '7': LEDTest (); pushim;

rasti '8': RelaxServos (); pushim; }}

void CheckVoltage () {// prisni, pastaj kontrolloni tensionin (siguria LiPO) tensionin e notimit = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println ("############################"); Serial.print ("Tensioni i Sistemit:"); Serial.print (tension); Serial.println ("volt."); if (tension 10.0) {Serial.println ("Nivelet e tensionit nominal."); } if (RunCheck == 1) {MenuOptions (); } Serial.println ("############################"); }

void MoveHome () {vonesë (100); // pauza e rekomanduar bioloid.loadPose (Faqja kryesore); // ngarkoni pozën nga FLASH, në tampon nextPose bioloid.readPose (); // lexoni në pozicionet aktuale servo në tampon curPose Serial.println ("############################"); Serial.println ("Zhvendosja e servos në pozicionin e shtëpisë"); Serial.println ("############################"); vonesa (1000); bioloid.interpolateSetup (1000); // konfigurimi për interpolimin nga rryma-> tjetra mbi 1/2 të sekondës ndërsa (bioloid.interpolating> 0) {// bëjeni këtë ndërkohë që nuk kemi arritur pozën tonë të re bioloid.interpolateStep (); // lëviz servos, nëse është e nevojshme. vonesa (3); } if (RunCheck == 1) {MenuOptions (); }}

void MovePose1 () {vonesë (100); // pauza e rekomanduar bioloid.loadPose (Pose1); // ngarkoni pozën nga FLASH, në tampon nextPose bioloid.readPose (); // lexoni në pozicionet servo aktuale në tampon curPose Serial.println ("############################"); Serial.println ("Zhvendosja e servos në pozicionin e parë"); Serial.println ("############################"); vonesa (1000); bioloid.interpolateSetup (1000); // konfigurimi për interpolimin nga rryma-> tjetra mbi 1/2 të sekondës ndërsa (bioloid.interpolating> 0) {// bëjeni këtë ndërkohë që nuk kemi arritur pozën tonë të re bioloid.interpolateStep (); // lëviz servos, nëse është e nevojshme. vonesa (3); } SetPosition (3, 291); // vendosni pozicionin e nyjës 3 në '0' vonesë (100); // prisni që nyja të lëvizë nëse (RunCheck == 1) {MenuOptions (); }}

pavlefshme MovePose2 () {vonesë (100); // pauza e rekomanduar bioloid.loadPose (Pose2); // ngarkoni pozën nga FLASH, në tampon nextPose bioloid.readPose (); // lexoni në pozicionet aktuale servo në tampon curPose Serial.println ("############################"); Serial.println ("Zhvendosja e servos në pozicionin e dytë"); Serial.println ("############################"); vonesa (1000); bioloid.interpolateSetup (1000); // konfigurimi për interpolimin nga rryma-> e ardhshme mbi 1/2 e sekondës ndërsa (bioloid.interpolating> 0) {// bëjeni këtë ndërkohë që nuk kemi arritur pozën tonë të re bioloid.interpolateStep (); // lëviz servos, nëse është e nevojshme. vonesa (3); } SetPosition (3, 291); // vendosni pozicionin e nyjës 3 në '0' vonesë (100); // prisni që nyja të lëvizë nëse (RunCheck == 1) {MenuOptions (); }} void MovePose3 () {vonesë (100); // pauza e rekomanduar bioloid.loadPose (Pose3); // ngarkoni pozën nga FLASH, në tampon nextPose bioloid.readPose (); // lexoni në pozicionet servo aktuale në tampon curPose Serial.println ("############################"); Serial.println ("Zhvendosja e servos në pozicionin e tretë"); Serial.println ("############################"); vonesa (1000); bioloid.interpolateSetup (1000); // konfigurimi për interpolimin nga rryma-> e ardhshme mbi 1/2 e sekondës ndërsa (bioloid.interpolating> 0) {// bëjeni këtë ndërkohë që nuk kemi arritur pozën tonë të re bioloid.interpolateStep (); // lëviz servos, nëse është e nevojshme. vonesa (3); } SetPosition (3, 291); // vendosni pozicionin e nyjës 3 në '0' vonesë (100); // prisni që nyja të lëvizë nëse (RunCheck == 1) {MenuOptions (); }}

void MovePose4 () {vonesë (100); // pauza e rekomanduar bioloid.loadPose (Pose4); // ngarkoni pozën nga FLASH, në tampon nextPose bioloid.readPose (); // lexoni në pozicionet servo aktuale në tampon curPose Serial.println ("############################"); Serial.println ("Zhvendosja e servos në pozicionin e 4 -të"); Serial.println ("############################"); vonesa (1000); bioloid.interpolateSetup (1000); // konfigurimi për interpolimin nga rryma-> e ardhshme mbi 1/2 e sekondës ndërsa (bioloid.interpolating> 0) {// bëjeni këtë ndërkohë që nuk kemi arritur pozën tonë të re bioloid.interpolateStep (); // lëviz servos, nëse është e nevojshme. vonesa (3); } SetPosition (3, 291); // vendosni pozicionin e nyjës 3 në '0' vonesë (100); // prisni që nyja të lëvizë nëse (RunCheck == 1) {MenuOptions (); }}

void MoveTest () {Serial.println ("############################"); Serial.println ("Fillimi i Testit të Shenjës së Lëvizjes"); Serial.println ("############################"); vonesë (500); id = 1; pos = 512; ndërsa (id <= SERVOCOUNT) {Serial.print ("Lëviz Servo ID:"); Serial.println (id);

ndërsa (pos> = 312) {SetPosition (id, pos); pos = pos--; vonesa (10); }

ndërsa (pos <= 512) {SetPosition (id, pos); pos = pos ++; vonesa (10); }

// përsëris te servo ID tjetër id = id ++;

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

void MenuOptions () {Serial.println ("############################"); Serial.println ("Ju lutemi futni opsionin 1-5 për të kryer përsëri teste individuale."); Serial.println ("1) Pozita e Parë"); Serial.println ("2) Pozita e 2 -të"); Serial.println ("3) Pozicioni i 3 -të"); Serial.println ("4) Pozicioni i 4 -të"); Serial.println ("5) Pozicioni i Shtëpisë"); Serial.println ("6) Kontrolloni Tensionin e Sistemit"); Serial.println ("7) Kryeni Test LED"); Serial.println ("8" Relax Servos "); Serial.println ("############################"); }

void RelaxServos () {id = 1; Serial.println ("############################"); Serial.println ("Shërbime relaksuese".); Serial.println ("############################"); ndërsa (id <= SERVOCOUNT) {Relax (id); id = (id ++)%SERVOCOUNT; vonesë (50); } if (RunCheck == 1) {MenuOptions (); }}

void LEDTest () {id = 1; Serial.println ("############################"); Serial.println ("Running LED Test"); Serial.println ("############################"); ndërsa (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print ("LED ON - Servo ID:"); Serial.println (id); vonesë (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED OFF - Servo ID:"); Serial.println (id); vonesë (3000); id = id ++; } if (RunCheck == 1) {MenuOptions (); }}

void Grab () {SetPosition (5, 800); // vendosni pozicionin e nyjës 1 në vonesën '0' (100); // prisni që nyja të lëvizë

}

Ne e kemi bazuar programin tonë në programin e prodhuesve PincherTest me disa ndryshime të mëdha në rastin e pozicionimit. Ne përdorëm poza.h që roboti të ketë pozicionet në kujtesë. Së pari ne u përpoqëm që krahu ynë i lojës me Pixycam të ishte automatik, por për shkak të dritës dhe problemeve të vogla të ekranit, kjo nuk mund të ndodhte. Roboti ka një pozicion bazë në shtëpi, pasi të ngarkojë programin, ai do të testojë të gjitha servot e gjetura në robot. Ne kemi vendosur pozat për butonat 1-4, kështu që do të jetë e lehtë për t'u mbajtur mend. Mos ngurroni të përdorni programin.

Hapi 4: Udhëzues video

Hapi 5: Përfundimi

Si përfundim, roboti është një projekt i vogël argëtues për ne dhe një lojë argëtuese për të luajtur dhe eksperimentuar. Ju inkurajoj që ta provoni dhe ta personalizoni gjithashtu.

Recommended: