Sadržaj:

Robotska ruka za igranje klavirskih pločica: 5 koraka
Robotska ruka za igranje klavirskih pločica: 5 koraka

Video: Robotska ruka za igranje klavirskih pločica: 5 koraka

Video: Robotska ruka za igranje klavirskih pločica: 5 koraka
Video: How to Make Hydraulic Powered Robotic Arm from Cardboard 2024, Juli
Anonim
Robotske igračke za klavirske pločice
Robotske igračke za klavirske pločice

Grupu čine 2 inženjera automatizacije iz UCN -a, koji su došli do briljantne ideje za koju smo motivirani raditi i razvijati se. Ideja se temelji na Arduino ploči koja kontrolira robotsku ruku. Arduino ploča je mozak operacije i tada će pokretač operacije, robotska ruka, učiniti ono što treba. Detaljnije objašnjenje će doći kasnije.

Korak 1: Oprema

Oprema
Oprema

Robotska ruka:

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

Softver za robota- https://www.arduino.cc/en/Main/OldSoftwareRelease… Kamera za otkrivanje boje:

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

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

Korak 2: Arduino postavljanje

Arduino postavljanje
Arduino postavljanje

Postavke na ploči možete vidjeti ovdje, što je vrlo jednostavno.

Na lijevoj strani je napajanje.

Srednji je za prvi servo, koji je kasnije povezan sa ostalim servo, servo po servo.

Sa donje strane upravljamo pločom sa računara ili prijenosnog računara koja ima USB ulaz na drugom kraju.

Korak 3: Završni program

||| PROGRAM |||

#include

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

#define 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); // postavljanje registra broja 32 zgloba na brzinu 50. ax12SetRegister2 (2, 32, 50); // postavljanje registra broja 32 zgloba 32 na brzinu 50. ax12SetRegister2 (3, 32, 50); // postavite registar broja 3 zgloba 32 na brzinu 50. ax12SetRegister2 (4, 32, 50); // postavite registar broja zgloba 4 na brzinu 50. ax12SetRegister2 (5, 32, 100); // postavite broj registra 5 zgloba 32 do brzine 100. // inicijaliziranje varijabli id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // otvaranje serijskog porta Serial.begin (9600); kašnjenje (500); Serial.println ("###########################"); Serial.println ("Uspostavljena serijska komunikacija.");

// Provjera napona Lipo baterije CheckVoltage ();

// Skeniranje servomotora, povratna pozicija MoveTest (); MoveHome (); MenuOptions (); RunCheck = 1; }

void loop () {// čita senzor: int inByte = Serial.read ();

switch (inByte) {

slučaj '1': MovePose1 (); break;

slučaj '2': MovePose2 (); break; slučaj '3': MovePose3 (); break;

slučaj '4': MovePose4 (); break;

slučaj '5': MoveHome (); break; slučaj '6': Grab (); break;

slučaj '7': LEDTest (); break;

slučaj '8': RelaxServos (); break; }}

void CheckVoltage () {// pričekajte, zatim provjerite napon (LiPO sigurnosni) plivajući napon = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10,0; Serial.println ("###########################"); Serial.print ("Napon sistema:"); Serial.print (napon); Serial.println ("volti."); if (napon 10,0) {Serial.println ("Nominalni nivoi napona."); } if (RunCheck == 1) {MenuOptions (); } Serial.println ("##########################"); }

void MoveHome () {odgoda (100); // preporučena pauza bioloid.loadPose (Početna); // učitavanje poze iz FLASH -a, u nextPose tampon bioloid.readPose (); // očitavanje u trenutnim pozicijama serva u međuspremnik curPose Serial.println ("##########################"); Serial.println ("Premještanje servo upravljača u početni položaj"); Serial.println ("###########################"); kašnjenje (1000); bioloid.interpolateSetup (1000); // postavljanje za interpolaciju od trenutne-> slijedeće više od 1/2 sekunde while (bioloid.interpolating> 0) {// učinite to dok nismo dosegli našu novu pozu bioloid.interpolateStep (); // premještanje servo motora, ako je potrebno. kašnjenje (3); } if (RunCheck == 1) {MenuOptions (); }}

void MovePose1 () {odgoda (100); // preporučena pauza bioloid.loadPose (Pose1); // učitavanje poze iz FLASH -a, u nextPose tampon bioloid.readPose (); // očitavanje u trenutnim pozicijama serva u međuspremniku curPose Serial.println ("##########################"); Serial.println ("Premještanje servo upravljača na 1. poziciju"); Serial.println ("###########################"); kašnjenje (1000); bioloid.interpolateSetup (1000); // postavljanje za interpolaciju od trenutne-> slijedeće više od 1/2 sekunde while (bioloid.interpolating> 0) {// učinite to dok nismo dosegli našu novu pozu bioloid.interpolateStep (); // premještanje servo motora, ako je potrebno. kašnjenje (3); } SetPosition (3, 291); // postavljamo poziciju zgloba 3 na '0' delay (100); // čekamo da se zglob pomakne if (RunCheck == 1) {MenuOptions (); }}

void MovePose2 () {odgoda (100); // preporučena pauza bioloid.loadPose (Pose2); // učitavanje poze iz FLASH -a, u nextPose tampon bioloid.readPose (); // očitavanje u trenutnim pozicijama serva u međuspremniku curPose Serial.println ("##########################"); Serial.println ("Premještanje servo upravljača na 2. poziciju"); Serial.println ("###########################"); kašnjenje (1000); bioloid.interpolateSetup (1000); // postavljanje za interpolaciju od trenutne-> slijedeće više od 1/2 sekunde while (bioloid.interpolating> 0) {// učinite to dok nismo dosegli našu novu pozu bioloid.interpolateStep (); // premještanje servo motora, ako je potrebno. kašnjenje (3); } SetPosition (3, 291); // postavljamo poziciju zgloba 3 na '0' delay (100); // čekamo da se zglob pomakne if (RunCheck == 1) {MenuOptions (); }} void MovePose3 () {delay (100); // preporučena pauza bioloid.loadPose (Pose3); // učitavanje poze iz FLASH -a, u nextPose tampon bioloid.readPose (); // očitavanje u trenutnim pozicijama serva u međuspremniku curPose Serial.println ("##########################"); Serial.println ("Premještanje servo upravljača na 3. poziciju"); Serial.println ("###########################"); kašnjenje (1000); bioloid.interpolateSetup (1000); // postavljanje za interpolaciju od trenutne-> slijedeće više od 1/2 sekunde while (bioloid.interpolating> 0) {// učinite to dok nismo dosegli našu novu pozu bioloid.interpolateStep (); // premještanje servo motora, ako je potrebno. kašnjenje (3); } SetPosition (3, 291); // postavljamo poziciju zgloba 3 na '0' delay (100); // čekamo da se zglob pomakne if (RunCheck == 1) {MenuOptions (); }}

void MovePose4 () {odgoda (100); // preporučena pauza bioloid.loadPose (Pose4); // učitavanje poze iz FLASH -a, u nextPose tampon bioloid.readPose (); // očitavanje u trenutnim pozicijama serva u međuspremnik curPose Serial.println ("##########################"); Serial.println ("Premještanje servo upravljača na 4. poziciju"); Serial.println ("###########################"); kašnjenje (1000); bioloid.interpolateSetup (1000); // postavljanje za interpolaciju od trenutne-> slijedeće više od 1/2 sekunde while (bioloid.interpolating> 0) {// učinite to dok nismo dosegli našu novu pozu bioloid.interpolateStep (); // premještanje servo motora, ako je potrebno. kašnjenje (3); } SetPosition (3, 291); // postavljamo poziciju zgloba 3 na '0' delay (100); // čekamo da se zglob pomakne if (RunCheck == 1) {MenuOptions (); }}

void MoveTest () {Serial.println ("###########################"); Serial.println ("Pokretanje testa znakova kretanja"); Serial.println ("###########################"); kašnjenje (500); id = 1; pos = 512; while (id <= SERVOCOUNT) {Serial.print ("Premještanje servo ID -a:"); Serial.println (id);

while (pos> = 312) {SetPosition (id, pos); pos = pos--; kašnjenje (10); }

while (pos <= 512) {SetPosition (id, pos); pos = pos ++; kašnjenje (10); }

// ponavljanje na sljedeći servo ID id = id ++;

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

void MenuOptions () {Serial.println ("###########################"); Serial.println ("Molimo unesite opciju 1-5 za ponovno pokretanje pojedinačnih testova."); Serial.println ("1) 1. pozicija"); Serial.println ("2) 2. pozicija"); Serial.println ("3) 3. pozicija"); Serial.println ("4) 4. pozicija"); Serial.println ("5) Početna pozicija"); Serial.println ("6) Provjerite napon sistema"); Serial.println ("7) Obavi LED test"); Serial.println ("8) Opustite servomotore"); Serial.println ("###########################"); }

void RelaxServos () {id = 1; Serial.println ("###########################"); Serial.println ("Opuštajući servo uređaji."); Serial.println ("###########################"); while (id <= SERVOCOUNT) {Opustite se (id); id = (id ++)%SERVOCOUNT; kašnjenje (50); } if (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 UKLJUČEN - Servo ID:"); Serial.println (id); kašnjenje (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED OFF - Servo ID:"); Serial.println (id); kašnjenje (3000); id = id ++; } if (RunCheck == 1) {MenuOptions (); }}

void Grab () {SetPosition (5, 800); // postavljamo poziciju zgloba 1 na '0' delay (100); // čekamo da se zglob pomakne

}

Naš program smo zasnovali na programu proizvođača PincherTest s nekim velikim izmjenama u slučaju pozicioniranja. Koristili smo poses.h da robot ima pozicije u memoriji. Prvo smo pokušali stvoriti automatsku ruku za igranje s Pixycam -om, ali zbog problema sa svjetlom i malim ekranom to se nije moglo dogoditi. Robot ima osnovni početni položaj, nakon što učita program, testirat će sve servo sisteme koji se nalaze u robotu. Postavili smo poze za dugmad 1-4, tako da će biti lako zapamtiti. Slobodno koristite program.

Korak 4: Video vodič

Korak 5: Zaključak

Zaključno, robot je za nas zabavan mali projekt i zabavno lupanje s kojim se možemo igrati i eksperimentirati. Potičem vas da isprobate i prilagodite ga.

Preporučuje se: