Sadržaj:

Robotske sviračke pločice za klavir: 5 koraka
Robotske sviračke pločice za klavir: 5 koraka

Video: Robotske sviračke pločice za klavir: 5 koraka

Video: Robotske sviračke pločice za klavir: 5 koraka
Video: Амелия 2.0 (Научная фантастика) Полнометражный фильм | 2017 год 2024, Srpanj
Anonim
Klavirske pločice sviraju robotsku ruku
Klavirske pločice sviraju robotsku ruku

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 doći će 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: Postavljanje Arduina

Arduino postavljanje
Arduino postavljanje

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

S lijeve strane nalazi se Napajanje.

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

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

Korak 3: Završni program

||| PROGRAM |||

#uključi

#include #include "poses.h" #include // Pixy Library #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); // postavite registar broj 1 zgloba 32 na brzinu 50. ax12SetRegister2 (2, 32, 50); // postavite registar broja 2 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 registar broja zgloba 5 32 do brzine 100. // inicijalizirati varijable 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, povratni položaj MoveTest (); MoveHome (); MenuOptions (); RunCheck = 1; }

void loop () {// čitanje senzora: int inByte = Serial.read ();

switch (inByte) {

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

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

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

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

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

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

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 sustava:"); Serijski.ispis (napon); Serial.println ("volti."); if (napon 10,0) {Serial.println ("Razine napona nominalne."); } if (RunCheck == 1) {MenuOptions (); } Serial.println ("##########################"); }

void MoveHome () {odgoda (100); // preporučena stanka bioloid.loadPose (Početna); // učitavanje poze iz FLASH -a, u nextPose međuspremnik bioloid.readPose (); // očitavanje na trenutnim pozicijama serva u međuspremniku 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 (); // premjestiti servomotore, ako je potrebno. kašnjenje (3); } if (RunCheck == 1) {MenuOptions (); }}

void MovePose1 () {odgoda (100); // preporučena stanka bioloid.loadPose (Pose1); // učitati pozu iz FLASH -a, u nextPose međuspremnik bioloid.readPose (); // očitavanje na trenutnim pozicijama serva u međuspremniku curPose Serial.println ("#########################"); Serial.println ("Premještanje servomotora 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 (); // premjestiti servomotore, ako je potrebno. kašnjenje (3); } SetPosition (3, 291); // postavljamo položaj spoja 3 na '0' delay (100); // čekamo da se zglob pomakne if (RunCheck == 1) {MenuOptions (); }}

void MovePose2 () {odgoda (100); // preporučena stanka bioloid.loadPose (Pose2); // učitavanje poze iz FLASH -a, u nextPose međuspremnik bioloid.readPose (); // očitavanje u trenutnim pozicijama serva u međuspremnik curPose Serial.println ("#########################"); Serial.println ("Premještanje servomotora 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 (); // premjestiti servomotore, ako je potrebno. kašnjenje (3); } SetPosition (3, 291); // postavljamo položaj spoja 3 na '0' delay (100); // čekamo da se zglob pomakne if (RunCheck == 1) {MenuOptions (); }} void MovePose3 () {delay (100); // preporučena stanka bioloid.loadPose (Pose3); // učitavanje poze iz FLASH -a, u nextPose međuspremnik bioloid.readPose (); // očitavanje na trenutnim pozicijama serva u međuspremniku curPose Serial.println ("#########################"); Serial.println ("Premještanje servomotora 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 (); // premjestiti servomotore, ako je potrebno. kašnjenje (3); } SetPosition (3, 291); // postavljamo položaj spoja 3 na '0' delay (100); // čekamo da se zglob pomakne if (RunCheck == 1) {MenuOptions (); }}

void MovePose4 () {odgoda (100); // preporučena stanka bioloid.loadPose (Pose4); // učitavanje poze iz FLASH -a, u nextPose međuspremnik bioloid.readPose (); // očitavanje na trenutnim pozicijama serva u međuspremniku curPose Serial.println ("#########################"); Serial.println ("Premještanje servomotora na 4. poziciju"); Serial.println ("###########################"); kašnjenje (1000); bioloid.interpolateSetup (1000); // postavljanje za interpolaciju od trenutne-> sljedećih više od 1/2 sekunde while (bioloid.interpolating> 0) {// učinite to dok nismo dosegli našu novu bioloidnu pozu.interpolateStep (); // premjestiti servomotore, ako je potrebno. kašnjenje (3); } SetPosition (3, 291); // postavljamo položaj spoja 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; poz = 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 sustava"); Serial.println ("7) Izvođenje LED ispitivanja"); Serial.println ("8) Opustite servomotore"); Serial.println ("###########################"); }

void RelaxServos () {id = 1; Serial.println ("###########################"); Serial.println ("Opuštajući servomotori".); 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 položaj zgloba 1 na '0' delay (100); // čekamo da se zglob pomakne

}

Naš smo program temeljili na programu proizvođača PincherTest s nekim velikim izmjenama u slučaju pozicioniranja. Koristili smo poze.h da robot ima pozicije u memoriji. Prvo smo pokušali stvoriti automatsku ruku za igranje s Pixycamom, no zbog problema sa svjetlom i malim zaslonom to se nije moglo dogoditi. Robot ima osnovni početni položaj, nakon što učita program, testirat će sve servomotore koji se nalaze u robotu. Postavili smo poze za gumbe 1-4, pa će se 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 ga isprobate i prilagodite.

Preporučeni: