Sadržaj:
- Korak 1: Oprema
- Korak 2: Arduino postavljanje
- Korak 3: Završni program
- Korak 4: Video vodič
- Korak 5: Zaključak
Video: Robotska ruka za igranje klavirskih pločica: 5 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:08
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
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
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:
Robotska ruka sa hvataljkom: 9 koraka (sa slikama)
Robotska ruka sa hvataljkom: Berba stabala limuna smatra se teškim radom, zbog velike veličine drveća, kao i zbog vruće klime u regijama u kojima se sadi limunovo drveće. Zato nam je potrebno još nešto da pomognemo poljoprivrednim radnicima da više završe svoj posao
3D robotska ruka sa koračnim motorima sa Bluetooth kontrolom: 12 koraka
3D robotska ruka sa koračnim motorima kontroliranim Bluetooth-om: U ovom vodiču ćemo vidjeti kako napraviti 3D robotsku ruku, sa 28byj-48 koračnim motorima, servo motorom i 3D ispisanim dijelovima. Štampana ploča, izvorni kod, električni dijagram, izvorni kod i mnogo informacija nalaze se na mojoj web stranici
Robotska ruka: 15 koraka
Robotska ruka: Automatski sistem
Moslty 3D štampana robotska ruka koja oponaša lutkarski kontroler: 11 koraka (sa slikama)
Moslty 3D štampana robotska ruka koja oponaša lutkarskog kontrolera: Ja sam student mašinstva iz Indije i ovo je moj diplomski projekat. Ovaj projekat je fokusiran na razvoj jeftine robotske ruke koja je uglavnom 3D štampana i ima 5 DOF-ova sa 2 prsta hvataljka. Robotskom rukom upravlja se
Robotska ruka: 3 koraka
Robotska ruka: Ciao a tutti! Vediamo dođite i izradite konstrukciju s bračnim robotskim upravljačkim uređajem za daljinsko upravljanje