Sisukord:

Klaveriplaadid mängivad robotkätt: 5 sammu
Klaveriplaadid mängivad robotkätt: 5 sammu

Video: Klaveriplaadid mängivad robotkätt: 5 sammu

Video: Klaveriplaadid mängivad robotkätt: 5 sammu
Video: БОЗАРТМА ИЗ КУРИЦЫ ПО АЗЕРБАЙДЖАНСКИ. ПРОСТОЙ ВКУСНЫЙ СУП 2024, Juuli
Anonim
Klaveriplaadid mängivad robotkätt
Klaveriplaadid mängivad robotkätt

Gruppi kuuluvad 2 automaatikainseneri UCN -ist, kes tulid geniaalse ideega, mida oleme motiveeritud tegema ja arendama. Idee põhineb Arduino plaadil, mis juhib robotkätt. Arduino plaat on operatsiooni ajud ja seejärel teeb operatsiooni täitur Robotic arm seda, mida vaja. Põhjalikum selgitus tuleb hiljem.

Samm: varustus

Varustus
Varustus

Roboti käsi:

Phantomx Pincher robotkäe komplekt Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)

Roboti tarkvara- https://www.arduino.cc/en/Main/OldSoftwareRelease… Värvide tuvastamise kaamera:

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

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

Samm: Arduino seadistamine

Arduino seadistamine
Arduino seadistamine

Seadistust näete tahvlil siin, mis on väga lihtne.

Vasakul on toiteallikas.

Keskmine on esimese servo jaoks, mis on hiljem ühendatud teiste servodega, servo servo kaupa.

Alumine on koht, kus me juhime tahvlit arvutist või sülearvutist, mille teises otsas on USB -sisend.

3. samm: lõplik programm

||| PROGRAMM |||

#kaasake

#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; loogiline RunCheck;

void setup () {pinMode (0, VÄLJUND); ax12SetRegister2 (1, 32, 50); // määrake liigendi number 1 register 32 kiirusele 50. ax12SetRegister2 (2, 32, 50); // määrake liigendi number 2 register 32 kiirusele 50. ax12SetRegister2 (3, 32, 50); // määrake ühisnumbri 3 register 32 kiirusele 50. ax12SetRegister2 (4, 32, 50); // määrake ühisnumbri 4 register 32 kiirusele 50. ax12SetRegister2 (5, 32, 100); // määrake ühisnumbri 5 register 32 kuni kiirus 100. // initsialiseerida muutujad id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // ava jadaport Serial.begin (9600); viivitus (500); Serial.println ("#########################"); Serial.println ("Seeriaühendus loodud.");

// Kontrolli Lipo aku pinget CheckVoltage ();

// Scan Servos, tagastusasend MoveTest (); MoveHome (); Menüüvalikud (); RunCheck = 1; }

void loop () {// loe andurit: int inByte = Serial.read ();

lüliti (inByte) {

juhtum '1': MovePose1 (); murda;

juhtum '2': MovePose2 (); murda; juhtum '3': MovePose3 (); murda;

juhtum '4': MovePose4 (); murda;

juhtum '5': MoveHome (); murda; juhtum '6': Haara (); murda;

juhtum '7': LEDTest (); murda;

juhtum '8': RelaxServos (); murda; }}

void CheckVoltage () {// oota, siis kontrolli pinget (LiPO ohutus) ujukpinge = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println ("#########################"); Serial.print ("Süsteemi pinge:"); Jadajälg (pinge); Serial.println ("volti"); if (pinge 10,0) {Serial.println ("Pingetasemed nominaalsed."); } if (RunCheck == 1) {MenuOptions (); } Serial.println ("##########################"); }

tühine MoveHome () {viivitus (100); // soovitatav paus bioloid.loadPose (Home); // laadige poseerimine FLASH -ist järgmisesse poosi puhverisse bioloid.readPose (); // lugeda praegustes servopositsioonides curPose puhvrisse Serial.println ("##########################"); Serial.println ("Servode liigutamine algasendisse"); Serial.println ("#########################"); viivitus (1000); bioloid.interpolateSetup (1000); // seadistus interpoleerimiseks praegusest-> järgmine üle 1/2 sekundi (bioloid.interpolating> 0) {// tehke seda seni, kuni me pole jõudnud oma uue poosi bioloid.interpolateStep (); // liiguta servosid, kui vaja. viivitus (3); } if (RunCheck == 1) {MenuOptions (); }}

tühine MovePose1 () {viivitus (100); // soovitatav paus bioloid.loadPose (Pose1); // laadige poseerimine FLASH -ist järgmisesse poosi puhverisse bioloid.readPose (); // lugeda praegustes servopositsioonides curPose puhvrisse Serial.println ("##########################"); Serial.println ("Servode liigutamine 1. positsioonile"); Serial.println ("#########################"); viivitus (1000); bioloid.interpolateSetup (1000); // seadistus interpoleerimiseks voolust-> järgmine üle 1/2 sekundi (bioloid.interpolating> 0) {// tehke seda seni, kuni me pole jõudnud oma uuele positsioonile bioloid.interpolateStep (); // liiguta servosid, kui vaja. viivitus (3); } SetPosition (3, 291); // määrake liigendi 3 asendiks '0' viivitus (100); // oodake liigese liikumist, kui (RunCheck == 1) {MenuOptions (); }}

tühine MovePose2 () {viivitus (100); // soovitatav paus bioloid.loadPose (Pose2); // laadige poseerimine FLASH -ist järgmisesse poosi puhverisse bioloid.readPose (); // lugeda praegustes servopositsioonides curPose puhvrisse Serial.println ("##########################"); Serial.println ("Servode teisaldamine 2. positsioonile"); Serial.println ("#########################"); viivitus (1000); bioloid.interpolateSetup (1000); // seadistus interpoleerimiseks praegusest-> järgmine üle 1/2 sekundi (bioloid.interpolating> 0) {// tehke seda seni, kuni me pole jõudnud oma uue poosi bioloid.interpolateStep (); // liiguta servosid, kui vaja. viivitus (3); } SetPosition (3, 291); // määrake liigendi 3 asendiks '0' viivitus (100); // oodake liigese liikumist, kui (RunCheck == 1) {MenuOptions (); }} tühine MovePose3 () {delay (100); // soovitatav paus bioloid.loadPose (Pose3); // laadige poseerimine FLASH -ist järgmisesse poosi puhverisse bioloid.readPose (); // lugeda praegustes servopositsioonides curPose puhvrisse Serial.println ("##########################"); Serial.println ("Servode liigutamine 3. positsioonile"); Serial.println ("#########################"); viivitus (1000); bioloid.interpolateSetup (1000); // seadistus interpoleerimiseks voolust-> järgmine üle 1/2 sekundi (bioloid.interpolating> 0) {// tehke seda seni, kuni me pole jõudnud oma uuele positsioonile bioloid.interpolateStep (); // liiguta servosid, kui vaja. viivitus (3); } SetPosition (3, 291); // määrake liigendi 3 asendiks '0' viivitus (100); // oodake liigese liikumist, kui (RunCheck == 1) {MenuOptions (); }}

tühine MovePose4 () {viivitus (100); // soovitatav paus bioloid.loadPose (Pose4); // laadige poos FLASH -ist järgmisesse poosi puhverisse bioloid.readPose (); // lugeda praegustes servopositsioonides curPose puhvrisse Serial.println ("##########################"); Serial.println ("Servode liigutamine 4. positsioonile"); Serial.println ("#########################"); viivitus (1000); bioloid.interpolateSetup (1000); // seadistus interpoleerimiseks praegusest-> järgmine üle 1/2 sekundi (bioloid.interpolating> 0) {// tehke seda seni, kuni me pole jõudnud oma uue poosi bioloid.interpolateStep (); // liiguta servosid, kui vaja. viivitus (3); } SetPosition (3, 291); // määrake liigendi 3 asendiks '0' viivitus (100); // oodake liigese liikumist, kui (RunCheck == 1) {MenuOptions (); }}

void MoveTest () {Serial.println ("#########################" "); Serial.println ("Liikumismärgi testi initsialiseerimine"); Serial.println ("#########################"); viivitus (500); id = 1; pos = 512; while (id <= SERVOCOUNT) {Serial.print ("Liikuva servo ID:"); Serial.println (id);

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

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

// iteraat järgmise servo ID -ga id = id ++;

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

void MenuOptions () {Serial.println ("#########################" "); Serial.println ("Palun sisestage valik 1-5 üksikute testide uuesti käivitamiseks."); Serial.println ("1) 1. positsioon"); Serial.println ("2) 2. positsioon"); Serial.println ("3) 3. positsioon"); Serial.println ("4) 4. positsioon"); Serial.println ("5) Kodupositsioon"); Serial.println ("6) Kontrollige süsteemi pinget"); Serial.println ("7) Tehke LED -test"); Serial.println ("8) Relax Servos"); Serial.println ("#########################"); }

tühine RelaxServos () {id = 1; Serial.println ("#########################"); Serial.println ("Lõõgastavad servod."); Serial.println ("#########################"); while (id <= SERVOCOUNT) {Lõdvestu (id); id = (id ++)%SERVOCOUNT; viivitus (50); } if (RunCheck == 1) {MenuOptions (); }}

tühine LEDTest () {id = 1; Serial.println ("#########################"); Serial.println ("Jooksev LED -test"); Serial.println ("#########################"); while (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print ("LED ON - Servo ID:"); Serial.println (id); viivitus (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED OFF - Servo ID:"); Serial.println (id); viivitus (3000); id = id ++; } if (RunCheck == 1) {MenuOptions (); }}

void Grab () {SetPosition (5, 800); // määrake liigendi 1 asend „0” viivitusele (100); // oodake liigese liikumist

}

Oleme oma programmi aluseks võtnud tootjate PincherTesti programmi, mille positsioneerimise puhul on tehtud mõningaid suuri muudatusi. Kasutasime poses.h, et robotil oleks mälus positsioonid. Esiteks proovisime luua oma mängukäe Pixycamiga automaatseks, kuid valguse ja väikeste ekraaniprobleemide tõttu ei saanud seda juhtuda. Robotil on põhiline koduasend, pärast programmi üleslaadimist testib see kõiki robotist leitud servosid. Oleme määranud 1-4 nuppude poosid, nii et seda on lihtne meelde jätta. Kasutage programmi julgelt.

4. samm: videojuhend

5. samm: järeldus

Kokkuvõtteks võib öelda, et robot on meie jaoks lõbus väike projekt ning lõbus mängimine ja katsetamine. Soovitan teil seda proovida ja kohandada.

Soovitan: