Turinys:

Fortepijoninės plytelės, grojančios roboto ranką: 5 žingsniai
Fortepijoninės plytelės, grojančios roboto ranką: 5 žingsniai

Video: Fortepijoninės plytelės, grojančios roboto ranką: 5 žingsniai

Video: Fortepijoninės plytelės, grojančios roboto ranką: 5 žingsniai
Video: Nacionalinės M.K. Čiurlionio menų mokyklos mokytojai. Romanas Armonas 2024, Liepa
Anonim
Fortepijoninės plytelės, grojančios roboto ranką
Fortepijoninės plytelės, grojančios roboto ranką

Grupę sudaro 2 automatikos inžinieriai iš UCN, kurie sugalvojo puikią idėją, kurią esame motyvuoti daryti ir tobulėti. Idėja paremta „Arduino“lenta, valdančia robotą ranką. „Arduino“lenta yra operacijos smegenys, o tada operacijos pavara - robotų ranka padarys tai, ko reikia. Išsamesnis paaiškinimas bus pateiktas vėliau.

1 žingsnis: įranga

Įranga
Įranga

Roboto ranka:

„Phantomx Pincher“robotų rankų komplektas „Maek II“(https://learn.trossenrobotics.com/38-interbotix-ro…)

Programinė įranga robotui- https://www.arduino.cc/en/Main/OldSoftwareRelease… Spalvų aptikimo kamera:

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

Programinė įranga - „PixyMon“(https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)

2 žingsnis: „Arduino“sąranka

„Arduino“sąranka
„Arduino“sąranka

Čia galite pamatyti sąranką lentoje, o tai labai paprasta.

Kairėje yra maitinimo šaltinis.

Vidurinis yra skirtas pirmajam servui, kuris vėliau prijungiamas prie kitų servo, servo prie servo.

Apatinėje dalyje mes valdome plokštę iš kompiuterio ar nešiojamojo kompiuterio, kurio kitame gale yra USB įvestis.

3 žingsnis: galutinė programa

||| PROGRAMA |||

#įtraukti

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

#define POSECOUNT 5

BioloidController bioloid = BioloidController (1000000);

const int SERVOCOUNT = 5; int id; int pos; loginis IDCheck; loginis „RunCheck“;

void setup () {pinMode (0, OUTPUT); ax12SetRegister2 (1, 32, 50); // nustatykite jungties 1 registrą 32 į greitį 50. ax12SetRegister2 (2, 32, 50); // nustatykite jungties 2 registrą 32 į greitį 50. ax12SetRegister2 (3, 32, 50); // nustatykite jungties numerio 3 registrą 32 į greitį 50. ax12SetRegister2 (4, 32, 50); // nustatykite jungties numerio 4 registrą 32 į greitį 50. ax12SetRegister2 (5, 32, 100); // nustatykite jungties numerio 5 registrą 32 iki greičio 100. // inicijuoti kintamuosius id = 1; poz = 0; IDCheck = 1; „RunCheck“= 0; // atidaryti nuoseklųjį prievadą Serial.begin (9600); vėlavimas (500); Serial.println ("########################"); Serial.println („Serial Communication Established“);

// Tikrinti Lipo baterijos įtampą CheckVoltage ();

// Nuskaityti servus, grąžinti poziciją MoveTest (); „MoveHome“(); „MenuOptions“(); „RunCheck“= 1; }

void loop () {// skaityti jutiklį: int inByte = Serial.read ();

jungiklis (inByte) {

atvejis '1': MovePose1 (); pertrauka;

atvejis „2“: „MovePose2“(); pertrauka; atvejis „3“: „MovePose3“(); pertrauka;

atvejis „4“: „MovePose4“(); pertrauka;

atvejis „5“: „MoveHome“(); pertrauka; atvejis „6“: patraukti (); pertrauka;

atvejis '7': LEDTest (); pertrauka;

atvejis „8“: „RelaxServos“(); pertrauka; }}

void CheckVoltage () {// palaukite, tada patikrinkite įtampą (LiPO saugumas) plūdės įtampa = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println ("########################"); Serial.print („Sistemos įtampa:“); Serijinis atspaudas (įtampa); Serial.println („voltai“); if (įtampa 10,0) {Serial.println ("Įtampos lygiai nominalūs."); } if (RunCheck == 1) {MenuOptions (); } Serial.println ("#########################"); }

void MoveHome () {delay (100); // rekomenduojama pauzė bioloid.loadPose (Pagrindinis); // įkelkite pozą iš FLASH, į nextPose buferį bioloid.readPose (); // skaityti dabartinėse servo pozicijose į curPose buferį Serial.println ("#########################"); Serial.println („Servo perkėlimas į pradinę padėtį“); Serial.println ("########################"); vėlavimas (1000); bioloid.interpolateSetup (1000); // sąrankos interpoliacijai iš srovės-> kito per 1/2 sekundės (bioloid.interpolating> 0) {// darykite tai, kol nepasiekėme naujos pozos bioloid.interpolateStep (); // perkelti servus, jei reikia. vėlavimas (3); } if (RunCheck == 1) {MenuOptions (); }}

void MovePose1 () {delay (100); // rekomenduojama pauzė bioloid.loadPose (Pose1); // įkelti pozą iš FLASH, į nextPose buferį bioloid.readPose (); // skaityti dabartinėse servo pozicijose į curPose buferį Serial.println ("#########################"); Serial.println („Servo perkėlimas į 1 poziciją“); Serial.println ("########################"); vėlavimas (1000); bioloid.interpolateSetup (1000); // sąranka interpoliacijai iš srovės-> kitas per 1/2 sekundės (bioloid.interpolating> 0) {// darykite tai, kol nepasiekėme naujos pozos bioloid.interpolateStep (); // perkelti servus, jei reikia. vėlavimas (3); } „SetPosition“(3, 291); // nustatykite jungties 3 padėtį į „0“uždelsimą (100); // palaukite, kol jungtis pajudės, jei (RunCheck == 1) {MenuOptions (); }}

void MovePose2 () {delay (100); // rekomenduojama pauzė bioloid.loadPose (Pose2); // įkelti pozą iš FLASH, į nextPose buferį bioloid.readPose (); // skaityti dabartinėse servo pozicijose į curPose buferį Serial.println ("#########################"); Serial.println („Servo perkėlimas į 2 poziciją“); Serial.println ("#########################"); vėlavimas (1000); bioloid.interpolateSetup (1000); // sąranka interpoliacijai iš srovės-> kitas per 1/2 sekundės (bioloid.interpolating> 0) {// darykite tai, kol nepasiekėme naujos pozos bioloid.interpolateStep (); // perkelti servus, jei reikia. vėlavimas (3); } „SetPosition“(3, 291); // nustatykite jungties 3 padėtį į „0“uždelsimą (100); // palaukite, kol jungtis pajudės, jei (RunCheck == 1) {MenuOptions (); }} void MovePose3 () {delay (100); // rekomenduojama pauzė bioloid.loadPose (Pose3); // įkelkite pozą iš FLASH, į nextPose buferį bioloid.readPose (); // skaityti dabartinėse servo pozicijose į curPose buferį Serial.println ("#########################"); Serial.println („Servo perkėlimas į 3 poziciją“); Serial.println ("#########################"); vėlavimas (1000); bioloid.interpolateSetup (1000); // sąranka interpoliacijai iš srovės-> kitas per 1/2 sekundės (bioloid.interpolating> 0) {// darykite tai, kol nepasiekėme naujos pozos bioloid.interpolateStep (); // perkelti servus, jei reikia. vėlavimas (3); } „SetPosition“(3, 291); // nustatykite jungties 3 padėtį į „0“uždelsimą (100); // palaukite, kol jungtis pajudės, jei (RunCheck == 1) {MenuOptions (); }}

void MovePose4 () {delay (100); // rekomenduojama pauzė bioloid.loadPose (Pose4); // įkelkite pozą iš FLASH, į nextPose buferį bioloid.readPose (); // skaityti dabartinėse servo pozicijose į curPose buferį Serial.println ("#########################"); Serial.println („Servo perkėlimas į 4 poziciją“); Serial.println ("#########################"); vėlavimas (1000); bioloid.interpolateSetup (1000); // sąrankos interpoliacijai iš srovės-> kito per 1/2 sekundės (bioloid.interpolating> 0) {// darykite tai, kol nepasiekėme naujos pozos bioloid.interpolateStep (); // perkelti servus, jei reikia. vėlavimas (3); } „SetPosition“(3, 291); // nustatykite jungties 3 padėtį į „0“uždelsimą (100); // palaukite, kol jungtis pajudės, jei (RunCheck == 1) {MenuOptions (); }}

void MoveTest () {Serial.println ("########################")); Serial.println („Judėjimo ženklų testo inicijavimas“); Serial.println ("#########################"); vėlavimas (500); id = 1; poz = 512; while (id <= SERVOCOUNT) {Serial.print ("Judantis servo ID:"); Serial.println (id);

while (poz> = 312) {SetPosition (id, pos); poz = poz--; vėlavimas (10); }

while (poz <= 512) {SetPosition (id, pos); poz = poz ++; vėlavimas (10); }

// kartoti į kitą servo ID id = id ++;

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

void MenuOptions () {Serial.println ("########################")); Serial.println ("Įveskite 1-5 parinktį, kad vėl atliktumėte atskirus testus."); Serial.println ("1) 1 pozicija"); Serial.println ("2) 2 pozicija"); Serial.println ("3) 3 pozicija"); Serial.println ("4) 4 pozicija"); Serial.println ("5) Pradinė padėtis"); Serial.println ("6) Patikrinkite sistemos įtampą"); Serial.println ("7) Atlikti LED testą"); Serial.println ("8) Relax Servos"); Serial.println ("########################"); }

negaliojantis „RelaxServos“() {id = 1; Serial.println ("#########################"); Serial.println („Atpalaiduojantys servai“); Serial.println ("#########################"); while (id <= SERVOCOUNT) {Atsipalaiduoti (id); id = (id ++)%SERVOCOUNT; vėlavimas (50); } if (RunCheck == 1) {MenuOptions (); }}

void LEDTest () {id = 1; Serial.println ("########################"); Serial.println („Veikiantis LED testas“); Serial.println ("########################"); while (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print ("LED ON - Servo ID:"); Serial.println (id); vėlavimas (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED OFF - Servo ID:"); Serial.println (id); vėlavimas (3000); id = id ++; } if (RunCheck == 1) {MenuOptions (); }}

void Grab () {SetPosition (5, 800); // nustatykite 1 jungties padėtį į „0“uždelsimą (100); // palaukite, kol jungtis judės

}

Mes savo programą grindėme gamintojo „PincherTest“programa, padėdami keletą svarbių padėties nustatymo pakeitimų. Mes naudojome pozas.h, kad robotas atmintyje turėtų pozicijas. Pirmiausia bandėme sukurti automatinę žaidimo ranką su „Pixycam“, tačiau dėl šviesos ir mažų ekrano problemų tai negalėjo įvykti. Robotas turi pagrindinę namų padėtį, įkėlęs programą, jis patikrins visas robote esančias servo sistemas. Mes nustatėme 1-4 mygtukų pozas, todėl tai bus lengva prisiminti. Nesivaržykite naudotis programa.

4 žingsnis: vaizdo vadovas

5 žingsnis: Išvada

Apibendrinant galima pasakyti, kad robotas mums yra įdomus mažas projektas ir įdomus žaidimas, kuriame galima žaisti ir eksperimentuoti. Kviečiu išbandyti ir taip pat pritaikyti.

Rekomenduojamas: