Obsah:

Klavírne dlaždice hrajúce na robotickom ramene: 5 krokov
Klavírne dlaždice hrajúce na robotickom ramene: 5 krokov

Video: Klavírne dlaždice hrajúce na robotickom ramene: 5 krokov

Video: Klavírne dlaždice hrajúce na robotickom ramene: 5 krokov
Video: Pat a Mat Dlaždice music 21.3 coververze 2024, November
Anonim
Klavírne dlaždice hrajúce na rameno robota
Klavírne dlaždice hrajúce na rameno robota

Skupinu tvoria 2 automatizační inžinieri z UCN, ktorí prišli s geniálnym nápadom, ktorý sme motivovaní robiť a rozvíjať. Myšlienka je založená na doske Arduino ovládajúcej robotické rameno. Doska Arduino je mozgom operácie a potom aktivátor operácie, robotické rameno, urobí, čo potrebuje. Hlbšie vysvetlenie príde neskôr.

Krok 1: Zariadenie

Zariadenie
Zariadenie

Rameno robota:

Súprava robotického ramena Phantomx Pincher Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)

Softvér pre robota- https://www.arduino.cc/en/Main/OldSoftwareRelease… Farebná kamera:

Fotoaparát CMUcam5 Pixy - (https://charmedlabs.com/default/pixy-cmucam5/)

Softvér - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)

Krok 2: Nastavenie Arduino

Nastavenie Arduino
Nastavenie Arduino

Tu môžete vidieť nastavenie na doske, ktoré je veľmi jednoduché.

Vľavo je napájací zdroj.

Stredný je pre prvé servo, ktoré je neskôr pripojené k iným servám, servo za servom.

V spodnej časti ovládame dosku z počítača alebo prenosného počítača, ktorá má na druhom konci vstup USB.

Krok 3: Záverečný program

||| PROGRAM |||

#zahrnúť

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

#define POSECOUNT 5

BioloidController bioloid = BioloidController (10 000 000);

const int SERVOCOUNT = 5; int id; int pos; booleovský IDCheck; booleovský RunCheck;

void setup () {pinMode (0, OUTPUT); ax12SetRegister2 (1, 32, 50); // nastavenie spoja číslo 1 register 32 na rýchlosť 50. ax12SetRegister2 (2, 32, 50); // nastavenie spoja číslo 2 register 32 na rýchlosť 50. ax12SetRegister2 (3, 32, 50); // nastavenie kĺbu číslo 3 register 32 na rýchlosť 50. ax12SetRegister2 (4, 32, 50); // nastavenie spoja číslo 4 register 32 na rýchlosť 50. ax12SetRegister2 (5, 32, 100); // nastavenie kĺbu číslo 5 register 32 na rýchlosť 100. // inicializácia premenných id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // otvorený sériový port Serial.begin (9600); oneskorenie (500); Serial.println ("###############################"); Serial.println ("Sériová komunikácia nadviazaná.");

// Kontrola napätia batérie Lipo CheckVoltage ();

// Skenovanie serv, návrat polohy MoveTest (); MoveHome (); Možnosti ponuky (); RunCheck = 1; }

void loop () {// prečítaj senzor: int inByte = Serial.read ();

switch (inByte) {

prípad '1': MovePose1 (); prestávka;

prípad '2': MovePose2 (); prestávka; prípad '3': MovePose3 (); prestávka;

prípad '4': MovePose4 (); prestávka;

prípad '5': MoveHome (); prestávka; prípad '6': Grab (); prestávka;

prípad '7': LEDTest (); prestávka;

prípad '8': RelaxServos (); prestávka; }}

neplatné CheckVoltage () {// počkajte, potom skontrolujte napätie (bezpečnosť LiPO) float napätie = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10,0; Serial.println ("################################"); Serial.print ("Napätie systému:"); Serial.print (napätie); Serial.println ("volty."); if (napätie 10,0) {Serial.println ("Úrovne napätia nominálne."); } if (RunCheck == 1) {MenuOptions (); } Serial.println ("################################"); }

neplatné MoveHome () {oneskorenie (100); // odporúčaná pauza bioloid.loadPose (Domov); // načítanie pózy z FLASH, do pufra nextPose bioloid.readPose (); // čítanie v aktuálnych polohách servo do vyrovnávacej pamäte curPose Serial.println ("###############################"); Serial.println ("Premiestňovanie servov do základnej polohy"); Serial.println ("###############################"); oneskorenie (1000); bioloid.interpolateSetup (1000); // nastavenie interpolácie z prúdu-> ďalšie viac ako 1/2 sekundy, kým (bioloid.interpolation> 0) {// urobte to, kým sme nedosiahli našu novú pozíciu bioloid.interpolateStep (); // v prípade potreby presuňte servá. oneskorenie (3); } if (RunCheck == 1) {MenuOptions (); }}

neplatné MovePose1 () {oneskorenie (100); // odporúčaná pauza bioloid.loadPose (Pose1); // načítanie pózy z FLASH, do pufra nextPose bioloid.readPose (); // čítanie v aktuálnych polohách serv do vyrovnávacej pamäte curPose Serial.println ("##############################"); Serial.println ("Premiestňovanie serva na 1. pozíciu"); Serial.println ("###############################"); oneskorenie (1000); bioloid.interpolateSetup (1000); // nastavenie interpolácie z prúdu-> ďalšie viac ako 1/2 sekundy, kým (bioloid.interpolation> 0) {// urobte to, kým sme nedosiahli našu novú pozíciu bioloid.interpolateStep (); // v prípade potreby presuňte servá. oneskorenie (3); } Nastav.pozícia (3, 291); // nastavenie polohy spoja 3 na oneskorenie '0' (100); // čakanie na pohyb kĺbu, ak (RunCheck == 1) {MenuOptions (); }}

neplatné MovePose2 () {oneskorenie (100); // odporúčaná pauza bioloid.loadPose (Pose2); // načítanie pózy z FLASH, do pufra nextPose bioloid.readPose (); // čítanie v aktuálnych polohách serv do vyrovnávacej pamäte curPose Serial.println ("##############################"); Serial.println ("Premiestňovanie serva na 2. pozíciu"); Serial.println ("###############################"); oneskorenie (1000); bioloid.interpolateSetup (1000); // nastavenie interpolácie z prúdu-> ďalšie viac ako 1/2 sekundy, kým (bioloid.interpolation> 0) {// urobte to, kým sme nedosiahli našu novú pozíciu bioloid.interpolateStep (); // v prípade potreby presuňte servá. oneskorenie (3); } Nastav.pozícia (3, 291); // nastavenie polohy spoja 3 na oneskorenie '0' (100); // čakanie na pohyb kĺbu, ak (RunCheck == 1) {MenuOptions (); }} neplatné MovePose3 () {oneskorenie (100); // odporúčaná pauza bioloid.loadPose (Pose3); // načítanie pózy z FLASH, do pufra nextPose bioloid.readPose (); // čítanie v aktuálnych polohách servo do vyrovnávacej pamäte curPose Serial.println ("###############################"); Serial.println ("Premiestňovanie serva na 3. pozíciu"); Serial.println ("################################"); oneskorenie (1000); bioloid.interpolateSetup (1000); // nastavenie interpolácie z prúdu-> ďalšie viac ako 1/2 sekundy, kým (bioloid.interpolation> 0) {// urobte to, kým sme nedosiahli našu novú pozíciu bioloid.interpolateStep (); // v prípade potreby presuňte servá. oneskorenie (3); } Nastav.pozícia (3, 291); // nastavenie polohy spoja 3 na oneskorenie '0' (100); // čakanie na pohyb kĺbu, ak (RunCheck == 1) {MenuOptions (); }}

neplatné MovePose4 () {oneskorenie (100); // odporúčaná pauza bioloid.loadPose (Pose4); // načítanie pózy z FLASH, do pufra nextPose bioloid.readPose (); // čítanie v aktuálnych polohách serv do vyrovnávacej pamäte curPose Serial.println ("##############################"); Serial.println ("Presunutie serv na 4. pozíciu"); Serial.println ("###############################"); oneskorenie (1000); bioloid.interpolateSetup (1000); // nastavenie interpolácie z prúdu-> ďalšie viac ako 1/2 sekundy, kým (bioloid.interpolation> 0) {// urobte to, kým sme nedosiahli našu novú pozíciu bioloid.interpolateStep (); // v prípade potreby presuňte servá. oneskorenie (3); } Nastav.pozícia (3, 291); // nastavenie polohy spoja 3 na oneskorenie '0' (100); // čakanie na pohyb kĺbu, ak (RunCheck == 1) {MenuOptions (); }}

neplatné MoveTest () {Serial.println ("##############################"); Serial.println ("Inicializácia testu pohybových znakov"); Serial.println ("###############################"); oneskorenie (500); id = 1; pos = 512; while (id <= SERVOCOUNT) {Serial.print ("Moving Servo ID:"); Serial.println (id);

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

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

// iterácia na ďalšie servo ID id = id ++;

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

neplatné MenuOptions () {Serial.println ("##############################"); Serial.println („Ak chcete znova spustiť jednotlivé testy, zadajte voľbu 1-5.“); Serial.println ("1) 1. pozícia"); Serial.println ("2) 2. pozícia"); Serial.println ("3) 3. pozícia"); Serial.println ("4) 4. pozícia"); Serial.println ("5) domovská pozícia"); Serial.println ("6) Skontrolujte napätie v systéme"); Serial.println ("7) Vykonajte test LED"); Serial.println ("8) Relax Servos"); Serial.println ("###############################"); }

neplatné RelaxServos () {id = 1; Serial.println ("###############################"); Serial.println („Relaxačné serva“); Serial.println ("###############################"); while (id <= SERVOCOUNT) {Relax (id); id = (id ++)%SERVOCOUNT; oneskorenie (50); } if (RunCheck == 1) {MenuOptions (); }}

neplatné LEDTest () {id = 1; Serial.println ("################################"); Serial.println ("Spustený test LED"); Serial.println ("################################"); while (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print ("LED svieti - ID serva:"); Serial.println (id); oneskorenie (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED VYPNUTÁ - Servo ID:"); Serial.println (id); oneskorenie (3000); id = id ++; } if (RunCheck == 1) {MenuOptions (); }}

void Grab () {SetPosition (5, 800); // nastavenie polohy spoja 1 na oneskorenie '0' (100); // počkajte, kým sa kĺb pohne

}

Náš program sme založili na programe výrobcov PincherTest s niekoľkými zásadnými úpravami v prípade polohovania. Použili sme poses.h, aby mal robot polohy v pamäti. Najprv sme sa pokúsili vytvoriť naše hracie rameno s Pixycam automatické, ale kvôli problémom so svetlom a malou obrazovkou sa to nemohlo stať. Robot má základnú domácu polohu, po nahraní programu otestuje všetky servá nájdené v robote. Pózy pre 1-4 tlačidlá sme nastavili, takže si ich budete ľahko pamätať. Neváhajte program použiť.

Krok 4: Videonávod

Krok 5: Záver

Na záver je robot pre nás zábavný malý projekt a zábavné hranie a experimentovanie. Odporúčame vám to vyskúšať a tiež prispôsobiť.

Odporúča: