Kazalo:

Klavirske ploščice, ki igrajo robotsko roko: 5 korakov
Klavirske ploščice, ki igrajo robotsko roko: 5 korakov

Video: Klavirske ploščice, ki igrajo robotsko roko: 5 korakov

Video: Klavirske ploščice, ki igrajo robotsko roko: 5 korakov
Video: КАК НАСТРОИТЬ L4D2 2024, Julij
Anonim
Klavirske ploščice igrajo robotsko roko
Klavirske ploščice igrajo robotsko roko

Skupino sestavljata 2 inženirja avtomatizacije iz UCN, ki sta se domislila briljantne ideje, da smo motivirani za razvoj in razvoj. Ideja temelji na plošči Arduino, ki upravlja robotsko roko. Plošča Arduino je možgani operacije, nato pa bo aktuator operacije, robotska roka, naredil vse, kar mora. Bolj poglobljena razlaga bo prišla kasneje.

1. korak: Oprema

Oprema
Oprema

Robotska roka:

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

Programska oprema za robota- https://www.arduino.cc/en/Main/OldSoftwareRelease… Kamera za zaznavanje barv:

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

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

Korak: Namestitev Arduina

Namestitev Arduina
Namestitev Arduina

Namestitev na plošči si lahko ogledate tukaj, kar je zelo enostavno.

Na levi strani je napajalnik.

Srednji je za prvi servo, ki je pozneje povezan z drugimi servomotorji, servo s servo.

Spodnji del je, kjer nadzorujemo ploščo iz računalnika ali prenosnika, ki ima na drugem koncu USB vhod.

3. korak: Končni program

||| PROGRAM |||

#vključi

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

#define POSECOUNT 5

BioloidController bioloid = BioloidController (1000000);

const int SERVOCOUNT = 5; int id; int pos; logična IDCheck; boolean RunCheck;

void setup () {pinMode (0, OUTPUT); ax12SetRegister2 (1, 32, 50); // nastavite register številke 1 registra 32 na hitrost 50. ax12SetRegister2 (2, 32, 50); // nastavite register številk 2 registra 32 na hitrost 50. ax12SetRegister2 (3, 32, 50); // nastavimo register številke 3 registra 32 na 50 32 do hitrosti 100. // inicializiramo spremenljivke id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // odprite serijska vrata Serial.begin (9600); zamuda (500); Serial.println ("###########################"); Serial.println ("Serijska komunikacija vzpostavljena.");

// Preverite napetost akumulatorja Lipo CheckVoltage ();

// Skeniraj servomotorje, povratni položaj MoveTest (); MoveHome (); MenuOptions (); RunCheck = 1; }

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

switch (inByte) {

primer '1': MovePose1 (); prekiniti;

primer '2': MovePose2 (); prekiniti; primer '3': MovePose3 (); prekiniti;

primer '4': MovePose4 (); prekiniti;

primer '5': MoveHome (); prekiniti; primer '6': Zgrabi (); prekiniti;

primer '7': LEDTest (); prekiniti;

primer '8': RelaxServos (); prekiniti; }}

void CheckVoltage () {// počakajte, nato preverite napetost (LiPO varnost) plavajoča napetost = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10,0; Serial.println ("###########################"); Serial.print ("Sistemska napetost:"); Serial.print (napetost); Serial.println ("volti"); if (napetost 10,0) {Serial.println ("Nazivne ravni napetosti."); } if (RunCheck == 1) {MenuOptions (); } Serial.println ("##########################"); }

void MoveHome () {zakasnitev (100); // priporočena pavza bioloid.loadPose (Domov); // naložimo pozo iz FLASH -a v bioloid nextPose medpomnilnika.readPose (); // beremo v trenutnih položajih servo v vmesnem pomnilniku curPose Serial.println ("#########################"); Serial.println ("Premikanje servomotorjev v začetni položaj"); Serial.println ("##########################"); zamuda (1000); bioloid.interpolateSetup (1000); // nastavitev za interpolacijo od trenutnega-> naslednjih več kot 1/2 sekunde medtem (bioloid.interpolating> 0) {// to storite, dokler nismo dosegli naše nove bioge bioze.interpolateStep (); // premaknite servomotorje, če je potrebno. zamuda (3); } if (RunCheck == 1) {MenuOptions (); }}

void MovePose1 () {zakasnitev (100); // priporočena pavza bioloid.loadPose (Pose1); // naložimo pozo iz FLASH -a v bioloid nextPose medpomnilnika.readPose (); // beremo v trenutnih položajih servo vmesnika curPose Serial.println ("#########################"); Serial.println ("Premikanje servomotorjev na 1. mesto"); Serial.println ("##########################"); zamuda (1000); bioloid.interpolateSetup (1000); // nastavitev za interpolacijo od trenutnega-> naslednjih več kot 1/2 sekunde medtem (bioloid.interpolating> 0) {// to storite, dokler nismo dosegli naše nove bioge bioze.interpolateStep (); // premaknite servomotorje, če je potrebno. zamuda (3); } SetPosition (3, 291); // nastavimo položaj spoja 3 na zakasnitev '0' (100); // počakamo, da se zgib premakne, če (RunCheck == 1) {MenuOptions (); }}

void MovePose2 () {zakasnitev (100); // priporočena pavza bioloid.loadPose (Pose2); // naložimo pozo iz FLASH -a v bioloid nextPose medpomnilnika.readPose (); // beremo v trenutnih položajih servo v vmesnem pomnilniku curPose Serial.println ("#########################"); Serial.println ("Premikanje servomotorjev na 2. mesto"); Serial.println ("##########################"); zamuda (1000); bioloid.interpolateSetup (1000); // nastavitev za interpolacijo od trenutnega-> naslednjih več kot 1/2 sekunde medtem (bioloid.interpolating> 0) {// to storite, dokler nismo dosegli naše nove bioge bioze.interpolateStep (); // premaknite servomotorje, če je potrebno. zamuda (3); } SetPosition (3, 291); // nastavimo položaj spoja 3 na zakasnitev '0' (100); // počakamo, da se zgib premakne, če (RunCheck == 1) {MenuOptions (); }} void MovePose3 () {zakasnitev (100); // priporočena pavza bioloid.loadPose (Pose3); // naložimo pozo iz FLASH -a v bioloid nextPose medpomnilnika.readPose (); // beremo v trenutnih položajih servo vmesnika curPose Serial.println ("#########################"); Serial.println ("Premikanje servomotorjev na 3. mesto"); Serial.println ("###########################"); zamuda (1000); bioloid.interpolateSetup (1000); // nastavitev za interpolacijo od trenutnega-> naslednjih več kot 1/2 sekunde medtem (bioloid.interpolating> 0) {// to naredimo, dokler še nismo dosegli naše nove bioge poze.interpolateStep (); // premaknite servomotorje, če je potrebno. zamuda (3); } SetPosition (3, 291); // nastavimo položaj spoja 3 na zakasnitev '0' (100); // počakamo, da se zgib premakne, če (RunCheck == 1) {MenuOptions (); }}

void MovePose4 () {zakasnitev (100); // priporočena pavza bioloid.loadPose (Pose4); // naložimo pozo iz FLASH -a v bioloid nextPose medpomnilnika.readPose (); // beremo v trenutnih položajih servo v vmesnem pomnilniku curPose Serial.println ("#########################"); Serial.println ("Premikanje servomotorjev na 4. mesto"); Serial.println ("###########################"); zamuda (1000); bioloid.interpolateSetup (1000); // nastavitev za interpolacijo od trenutnega-> naslednjih več kot 1/2 sekunde medtem (bioloid.interpolating> 0) {// to storite, dokler nismo dosegli naše nove bioge bioze.interpolateStep (); // premaknite servomotorje, če je potrebno. zamuda (3); } SetPosition (3, 291); // nastavimo položaj spoja 3 na zakasnitev '0' (100); // počakamo, da se zgib premakne, če (RunCheck == 1) {MenuOptions (); }}

void MoveTest () {Serial.println ("##########################"); Serial.println ("Inicializacija preskusa znakov gibanja"); Serial.println ("##########################"); zamuda (500); id = 1; poz = 512; while (id <= SERVOCOUNT) {Serial.print ("Premikanje servo ID -ja:"); Serial.println (id);

while (pos> = 312) {SetPosition (id, pos); pos = pos--; zamuda (10); }

while (pos <= 512) {SetPosition (id, pos); pos = pos ++; zamuda (10); }

// iterate to next servo ID id = id ++;

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

void MenuOptions () {Serial.println ("###########################"); Serial.println ("Prosimo, vnesite možnost 1-5, če želite znova zagnati posamezne teste."); Serial.println ("1) 1. položaj"); Serial.println ("2) 2. mesto"); Serial.println ("3) 3. položaj"); Serial.println ("4) 4. položaj"); Serial.println ("5) Domači položaj"); Serial.println ("6) Preverite sistemsko napetost"); Serial.println ("7) Izvedite preskus LED"); Serial.println ("8) Sprostite servomotorje"); Serial.println ("##########################"); }

void RelaxServos () {id = 1; Serial.println ("###########################"); Serial.println ("Sproščujoči servomotorji."); Serial.println ("##########################"); while (id <= SERVOCOUNT) {Sprosti se (id); id = (id ++)%SERVOCOUNT; zamuda (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 ON - Servo ID:"); Serial.println (id); zamuda (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED OFF - Servo ID:"); Serial.println (id); zamuda (3000); id = id ++; } if (RunCheck == 1) {MenuOptions (); }}

void Grab () {SetPosition (5, 800); // nastavimo položaj spoja 1 na zakasnitev '0' (100); // počakamo, da se zgib premakne

}

Naš program smo zasnovali na programu proizvajalcev PincherTest z nekaj večjimi spremembami v primeru pozicioniranja. Uporabili smo poses.h, da je imel robot položaje v spominu. Najprej smo poskušali ustvariti samodejno roko za igranje s Pixycam, vendar se zaradi težav s svetlobo in majhnim zaslonom to ni zgodilo. Robot ima osnovni domači položaj, po nalaganju programa bo preizkusil vse servomotorje, ki jih najdemo v robotu. Postavili smo poze za gumbe 1-4, zato si jih bomo zlahka zapomnili. Uporabite program.

4. korak: Video vodič

5. korak: Zaključek

Skratka, robot je za nas zabaven majhen projekt in zabavno lupkanje, s katerim se lahko igramo in eksperimentiramo. Predlagam, da ga preizkusite in prilagodite.

Priporočena: