Sisällysluettelo:

Piano -laatat, jotka soittavat robottivartta: 5 vaihetta
Piano -laatat, jotka soittavat robottivartta: 5 vaihetta

Video: Piano -laatat, jotka soittavat robottivartta: 5 vaihetta

Video: Piano -laatat, jotka soittavat robottivartta: 5 vaihetta
Video: 20 лучших фортепианных песен всех времен | Шопен, Бетховен, Бах, Моцарт 2024, Marraskuu
Anonim
Piano laatat soittavat robotti käsivarsi
Piano laatat soittavat robotti käsivarsi

Ryhmään kuuluu 2 automaatioinsinööriä UCN: stä, jotka keksivät loistavan idean, jota olemme motivoituneita tekemään ja kehittämään. Idea perustuu Arduino -korttiin, joka ohjaa robottivartta. Arduino -levy on operaation aivot, ja sitten operaation toimilaite, robotti, tekee mitä se tarvitsee. Tarkempi selitys tulee myöhemmin.

Vaihe 1: Laitteet

Laitteet
Laitteet

Robotti käsivarsi:

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

Ohjelmisto robotille- https://www.arduino.cc/en/Main/OldSoftwareRelease… Värintunnistuskamera:

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

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

Vaihe 2: Arduino -asennus

Arduinon asennus
Arduinon asennus

Näet asetukset taululla täältä, mikä on erittäin helppoa.

Vasemmalla on virtalähde.

Keskimmäinen on ensimmäistä servoa varten, joka on myöhemmin liitetty muihin servoihin, servo servolta.

Alareunassa hallitsemme korttia tietokoneelta tai kannettavalta tietokoneelta, jonka toisessa päässä on USB -tulo.

Vaihe 3: Lopullinen ohjelma

||| OHJELMA |||

#sisältää

#sisällytä #sisällytä "poses.h" #sisällytä // Pixy -kirjasto #sisällytä

#määritä TILA 5

BioloidController bioloid = BioloidController (1000000);

const int PALVELU = 5; int id; int pos; boolean IDCheck; boolean RunCheck;

void setup () {pinMode (0, OUTPUT); ax12SetRegister2 (1, 32, 50); // aseta liitoksen numero 1 rekisteri 32 nopeuteen 50. ax12SetRegister2 (2, 32, 50); // aseta liitoksen numero 2 rekisteri 32 nopeuteen 50. ax12SetRegister2 (3, 32, 50); // aseta yhteinen numero 3 -rekisteri 32 nopeuteen 50. ax12SetRegister2 (4, 32, 50); // aseta yhteinen numero 4 -rekisteri 32 nopeuteen 50. ax12SetRegister2 (5, 32, 100); // aseta yhteinen numero 5 -rekisteri 32 nopeuteen 100. // alustavat muuttujat id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // avaa sarjaportti Serial.begin (9600); viive (500); Serial.println ("##########################" "); Serial.println ("Sarjaliikenne perustettu.");

// Tarkista Lipon akun jännite CheckVoltage ();

// Skannauspalvelut, paluupaikka MoveTest (); MoveHome (); MenuValinnat (); RunCheck = 1; }

void loop () {// lue anturi: int inByte = Serial.read ();

kytkin (inByte) {

tapaus '1': MovePose1 (); tauko;

tapaus '2': MovePose2 (); tauko; tapaus '3': MovePose3 (); tauko;

tapaus '4': MovePose4 (); tauko;

tapaus '5': MoveHome (); tauko; tapaus '6': Tartu (); tauko;

tapaus '7': LEDTest (); tauko;

tapaus '8': RelaxServos (); tauko; }}

void CheckVoltage () {// odota ja tarkista sitten jännite (LiPO -turvallisuus) kelluva jännite = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println ("##########################"); Serial.print ("Järjestelmän jännite:"); Sarjajälki (jännite); Serial.println ("volttia"); if (jännite 10,0) {Serial.println ("Jännitetasot nimelliset"); } if (RunCheck == 1) {MenuOptions (); } Serial.println ("##########################" "); }

void MoveHome () {delay (100); // suositeltava tauko bioloid.loadPose (Home); // lataa pose FLASH: sta nextPose -puskuriin bioloid.readPose (); // lukee nykyisissä servoasemissa curPose -puskuriin Serial.println ("###########################"); Serial.println ("Servojen siirtäminen alkuasentoon"); Serial.println ("##########################" "); viive (1000); bioloid.interpolateSetup (1000); // interpoloinnin asetukset nykyisestä-> seuraavaksi yli 1/2 sekuntia (bioloid.interpolation> 0) {// tee tämä, kun emme ole saavuttaneet uutta bioloid-asentoa.interpolateStep (); // siirrä servoja tarvittaessa. viive (3); } if (RunCheck == 1) {MenuOptions (); }}

void MovePose1 () {delay (100); // suositeltava tauko bioloid.loadPose (Pose1); // lataa pose FLASH: sta nextPose -puskuriin bioloid.readPose (); // lukee nykyisissä servoasemissa curPose -puskuriin Serial.println ("###########################"); Serial.println ("Servojen siirtäminen 1. asemaan"); Serial.println ("##########################" "); viive (1000); bioloid.interpolateSetup (1000); // interpoloinnin asetukset nykyisestä-> seuraavaksi yli 1/2 sekuntia (bioloid.interpolation> 0) {// tee tämä, kun emme ole saavuttaneet uutta bioloid-asentoa.interpolateStep (); // siirrä servoja tarvittaessa. viive (3); } SetPosition (3, 291); // aseta nivelen 3 sijainti 0 -viiveeksi (100); // odota liitoksen liikkua, jos (RunCheck == 1) {MenuOptions (); }}

void MovePose2 () {viive (100); // suositeltava tauko bioloid.loadPose (Pose2); // lataa pose FLASH: sta nextPose -puskuriin bioloid.readPose (); // lukee nykyisissä servoasemissa curPose -puskuriin Serial.println ("###########################"); Serial.println ("Servojen siirtäminen toiseen asemaan"); Serial.println ("##########################" "); viive (1000); bioloid.interpolateSetup (1000); // interpoloinnin asetukset nykyisestä-> seuraavaksi yli 1/2 sekuntia (bioloid.interpolation> 0) {// tee tämä, kun emme ole saavuttaneet uutta bioloid-asentoa.interpolateStep (); // siirrä servoja tarvittaessa. viive (3); } SetPosition (3, 291); // aseta nivelen 3 sijainti 0 -viiveeksi (100); // odota liitoksen liikkua, jos (RunCheck == 1) {MenuOptions (); }} void MovePose3 () {delay (100); // suositeltava tauko bioloid.loadPose (Pose3); // lataa pose FLASH: sta nextPose -puskuriin bioloid.readPose (); // lukee nykyisissä servoasemissa curPose -puskuriin Serial.println ("###########################"); Serial.println ("Servojen siirtäminen kolmanteen asemaan"); Serial.println ("##########################" "); viive (1000); bioloid.interpolateSetup (1000); // interpoloinnin asetukset nykyisestä-> seuraavaksi yli 1/2 sekuntia (bioloid.interpolation> 0) {// tee tämä, kun emme ole saavuttaneet uutta bioloid-asentoa.interpolateStep (); // siirrä servoja tarvittaessa. viive (3); } SetPosition (3, 291); // aseta nivelen 3 sijainti 0 -viiveeksi (100); // odota liitoksen liikkua, jos (RunCheck == 1) {MenuOptions (); }}

void MovePose4 () {viive (100); // suositeltava tauko bioloid.loadPose (Pose4); // lataa pose FLASH: sta nextPose -puskuriin bioloid.readPose (); // lukee nykyisissä servoasemissa curPose -puskuriin Serial.println ("###########################"); Serial.println ("Servojen siirtäminen 4. asemaan"); Serial.println ("##########################" "); viive (1000); bioloid.interpolateSetup (1000); // asetukset interpolointiin nykyisestä-> seuraavaksi yli 1/2 sekuntia (bioloid.interpolation> 0) {// tee tämä, kun emme ole saavuttaneet uutta bioloid-asentoa.interpolateStep (); // siirrä servoja tarvittaessa. viive (3); } SetPosition (3, 291); // aseta nivelen 3 sijainti 0 -viiveeksi (100); // odota liitoksen liikkua, jos (RunCheck == 1) {MenuOptions (); }}

void MoveTest () {Serial.println ("###########################"); Serial.println ("Liikkeen merkkitestin alustus"); Serial.println ("##########################" "); viive (500); id = 1; pos = 512; while (id <= SERVOCOUNT) {Serial.print ("Moving Servo ID:"); Sarja.println (id);

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

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

// iteroi seuraavaan servotunnukseen id = id ++;

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

void MenuOptions () {Serial.println ("###########################"); Serial.println ("Anna vaihtoehto 1-5 suorittaaksesi yksittäiset testit uudelleen."); Serial.println ("1) 1. asema"); Serial.println ("2) 2. asema"); Serial.println ("3) 3. sija"); Serial.println ("4) 4. sija"); Serial.println ("5) kotiasema"); Serial.println ("6) Tarkista järjestelmän jännite"); Serial.println ("7) Suorita LED -testi"); Serial.println ("8) Relax Servot"); Serial.println ("##########################"); }

mitätön RelaxServos () {id = 1; Serial.println ("##########################" "); Serial.println ("Rentouttavat servot"); Serial.println ("##########################"); while (id <= SERVOCOUNT) {Rentoudu (id); id = (id ++)%SERVOCOUNT; viive (50); } if (RunCheck == 1) {MenuOptions (); }}

mitätön 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:"); Sarja.println (id); viive (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED OFF - Servo ID:"); Sarja.println (id); viive (3000); id = id ++; } if (RunCheck == 1) {MenuOptions (); }}

void Grab () {SetPosition (5, 800); // aseta nivelen 1 asento '0' viiveeksi (100); // odota liitoksen liikettä

}

Olemme perustaneet ohjelmamme valmistajien PincherTest -ohjelmaan, jossa on joitain suuria parannuksia paikannuksessa. Käytimme poses.h -kohtaa, jotta robotilla olisi paikat muistissa. Ensinnäkin yritimme luoda pelivarren Pixycamilla automaattiseksi, mutta valon ja pienien näyttöongelmien vuoksi se ei voinut tapahtua. Robotilla on perusasento, ohjelman lataamisen jälkeen se testaa kaikki robotissa olevat servot. Olemme asettaneet 1-4 painikkeiden asennot, joten ne on helppo muistaa. Voit vapaasti käyttää ohjelmaa.

Vaihe 4: Video -opas

Vaihe 5: Johtopäätös

Yhteenvetona voidaan todeta, että robotti on meille hauska pieni projekti ja hauska leikki ja kokeilu. Kehotan sinua kokeilemaan sitä ja muokkaamaan sitä myös.

Suositeltava: