Përmbajtje:
- Hapi 1: Pajisjet
- Hapi 2: Konfigurimi i Arduino
- Hapi 3: Programi Final
- Hapi 4: Udhëzues video
- Hapi 5: Përfundimi
Video: Pllaka pianoje që luajnë krahun robot: 5 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:26
Grupi përbëhet nga 2 Inxhinierë Automatizimi nga UCN, të cilët dolën me një ide brilante që ne jemi të motivuar për ta bërë dhe zhvilluar. Ideja bazohet në një bord Arduino që kontrollon një krah robotik. Bordi Arduino është truri i operacionit dhe më pas aktivizuesi i operacionit, krahu Robotik, do të bëjë atë që i nevojitet. Shpjegimi më i thelluar do të vijë më vonë.
Hapi 1: Pajisjet
Krahu i robotit:
Phantomx Pincher Robot Arm Kit Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)
Softuer për robotin- https://www.arduino.cc/en/Main/OldSoftwareRelease… Kamera e zbulimit të ngjyrave:
Kamera CMUcam5 Pixy - (https://charmedlabs.com/default/pixy-cmucam5/)
Softuer - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)
Hapi 2: Konfigurimi i Arduino
Këtu mund ta shihni konfigurimin në tabelë, i cili është shumë i lehtë.
Në të majtë është Furnizimi me energji elektrike.
E mesmja është për servo -n e parë, e cila më vonë lidhet me servos e tjerë, servo me servo.
Pjesa e poshtme është ajo ku ne kontrollojmë bordin nga një kompjuter ose laptop, që ka një hyrje USB në anën tjetër.
Hapi 3: Programi Final
||| PROGRAMI |||
#përfshi
#include #include "poses.h" #include // Pixy Library #include
#përcaktoni 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); // vendosni numrin e bashkimit 1 regjistri 32 në shpejtësinë 50. ax12SetRegister2 (2, 32, 50); // vendosni numrin e bashkimit 2 regjistri 32 në shpejtësinë 50. ax12SetRegister2 (3, 32, 50); // vendosni numrin e përbashkët 3 regjistrin 32 në shpejtësinë 50. ax12SetRegister2 (4, 32, 50); // vendosni numrin e përbashkët 4 regjistrin 32 në shpejtësinë 50. ax12SetRegister2 (5, 32, 100); // vendosni numrin e bashkimit 5 regjistrin 32 në shpejtësinë 100. // inicializoni variablat id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // porta seriale e hapur Serial.begin (9600); vonesë (500); Serial.println ("############################"); Serial.println ("Komunikimi Serial i vendosur.");
// Kontrolloni tensionin e baterisë Lipo CheckVoltage ();
// Skanoni Servos, kthejeni pozicionin MoveTest (); MoveHome (); MenuOptions (); RunCheck = 1; }
void loop () {// lexoni sensorin: int inByte = Serial.read ();
kaloni (inByte) {
rasti '1': MovePose1 (); pushim;
rasti '2': MovePose2 (); pushim; rasti '3': MovePose3 (); pushim;
rasti '4': MovePose4 (); pushim;
rasti '5': MoveHome (); pushim; rasti '6': Kap (); pushim;
rasti '7': LEDTest (); pushim;
rasti '8': RelaxServos (); pushim; }}
void CheckVoltage () {// prisni, pastaj kontrolloni tensionin (siguria LiPO) tensionin e notimit = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println ("############################"); Serial.print ("Tensioni i Sistemit:"); Serial.print (tension); Serial.println ("volt."); if (tension 10.0) {Serial.println ("Nivelet e tensionit nominal."); } if (RunCheck == 1) {MenuOptions (); } Serial.println ("############################"); }
void MoveHome () {vonesë (100); // pauza e rekomanduar bioloid.loadPose (Faqja kryesore); // ngarkoni pozën nga FLASH, në tampon nextPose bioloid.readPose (); // lexoni në pozicionet aktuale servo në tampon curPose Serial.println ("############################"); Serial.println ("Zhvendosja e servos në pozicionin e shtëpisë"); Serial.println ("############################"); vonesa (1000); bioloid.interpolateSetup (1000); // konfigurimi për interpolimin nga rryma-> tjetra mbi 1/2 të sekondës ndërsa (bioloid.interpolating> 0) {// bëjeni këtë ndërkohë që nuk kemi arritur pozën tonë të re bioloid.interpolateStep (); // lëviz servos, nëse është e nevojshme. vonesa (3); } if (RunCheck == 1) {MenuOptions (); }}
void MovePose1 () {vonesë (100); // pauza e rekomanduar bioloid.loadPose (Pose1); // ngarkoni pozën nga FLASH, në tampon nextPose bioloid.readPose (); // lexoni në pozicionet servo aktuale në tampon curPose Serial.println ("############################"); Serial.println ("Zhvendosja e servos në pozicionin e parë"); Serial.println ("############################"); vonesa (1000); bioloid.interpolateSetup (1000); // konfigurimi për interpolimin nga rryma-> tjetra mbi 1/2 të sekondës ndërsa (bioloid.interpolating> 0) {// bëjeni këtë ndërkohë që nuk kemi arritur pozën tonë të re bioloid.interpolateStep (); // lëviz servos, nëse është e nevojshme. vonesa (3); } SetPosition (3, 291); // vendosni pozicionin e nyjës 3 në '0' vonesë (100); // prisni që nyja të lëvizë nëse (RunCheck == 1) {MenuOptions (); }}
pavlefshme MovePose2 () {vonesë (100); // pauza e rekomanduar bioloid.loadPose (Pose2); // ngarkoni pozën nga FLASH, në tampon nextPose bioloid.readPose (); // lexoni në pozicionet aktuale servo në tampon curPose Serial.println ("############################"); Serial.println ("Zhvendosja e servos në pozicionin e dytë"); Serial.println ("############################"); vonesa (1000); bioloid.interpolateSetup (1000); // konfigurimi për interpolimin nga rryma-> e ardhshme mbi 1/2 e sekondës ndërsa (bioloid.interpolating> 0) {// bëjeni këtë ndërkohë që nuk kemi arritur pozën tonë të re bioloid.interpolateStep (); // lëviz servos, nëse është e nevojshme. vonesa (3); } SetPosition (3, 291); // vendosni pozicionin e nyjës 3 në '0' vonesë (100); // prisni që nyja të lëvizë nëse (RunCheck == 1) {MenuOptions (); }} void MovePose3 () {vonesë (100); // pauza e rekomanduar bioloid.loadPose (Pose3); // ngarkoni pozën nga FLASH, në tampon nextPose bioloid.readPose (); // lexoni në pozicionet servo aktuale në tampon curPose Serial.println ("############################"); Serial.println ("Zhvendosja e servos në pozicionin e tretë"); Serial.println ("############################"); vonesa (1000); bioloid.interpolateSetup (1000); // konfigurimi për interpolimin nga rryma-> e ardhshme mbi 1/2 e sekondës ndërsa (bioloid.interpolating> 0) {// bëjeni këtë ndërkohë që nuk kemi arritur pozën tonë të re bioloid.interpolateStep (); // lëviz servos, nëse është e nevojshme. vonesa (3); } SetPosition (3, 291); // vendosni pozicionin e nyjës 3 në '0' vonesë (100); // prisni që nyja të lëvizë nëse (RunCheck == 1) {MenuOptions (); }}
void MovePose4 () {vonesë (100); // pauza e rekomanduar bioloid.loadPose (Pose4); // ngarkoni pozën nga FLASH, në tampon nextPose bioloid.readPose (); // lexoni në pozicionet servo aktuale në tampon curPose Serial.println ("############################"); Serial.println ("Zhvendosja e servos në pozicionin e 4 -të"); Serial.println ("############################"); vonesa (1000); bioloid.interpolateSetup (1000); // konfigurimi për interpolimin nga rryma-> e ardhshme mbi 1/2 e sekondës ndërsa (bioloid.interpolating> 0) {// bëjeni këtë ndërkohë që nuk kemi arritur pozën tonë të re bioloid.interpolateStep (); // lëviz servos, nëse është e nevojshme. vonesa (3); } SetPosition (3, 291); // vendosni pozicionin e nyjës 3 në '0' vonesë (100); // prisni që nyja të lëvizë nëse (RunCheck == 1) {MenuOptions (); }}
void MoveTest () {Serial.println ("############################"); Serial.println ("Fillimi i Testit të Shenjës së Lëvizjes"); Serial.println ("############################"); vonesë (500); id = 1; pos = 512; ndërsa (id <= SERVOCOUNT) {Serial.print ("Lëviz Servo ID:"); Serial.println (id);
ndërsa (pos> = 312) {SetPosition (id, pos); pos = pos--; vonesa (10); }
ndërsa (pos <= 512) {SetPosition (id, pos); pos = pos ++; vonesa (10); }
// përsëris te servo ID tjetër id = id ++;
} if (RunCheck == 1) {MenuOptions (); }}
void MenuOptions () {Serial.println ("############################"); Serial.println ("Ju lutemi futni opsionin 1-5 për të kryer përsëri teste individuale."); Serial.println ("1) Pozita e Parë"); Serial.println ("2) Pozita e 2 -të"); Serial.println ("3) Pozicioni i 3 -të"); Serial.println ("4) Pozicioni i 4 -të"); Serial.println ("5) Pozicioni i Shtëpisë"); Serial.println ("6) Kontrolloni Tensionin e Sistemit"); Serial.println ("7) Kryeni Test LED"); Serial.println ("8" Relax Servos "); Serial.println ("############################"); }
void RelaxServos () {id = 1; Serial.println ("############################"); Serial.println ("Shërbime relaksuese".); Serial.println ("############################"); ndërsa (id <= SERVOCOUNT) {Relax (id); id = (id ++)%SERVOCOUNT; vonesë (50); } if (RunCheck == 1) {MenuOptions (); }}
void LEDTest () {id = 1; Serial.println ("############################"); Serial.println ("Running LED Test"); Serial.println ("############################"); ndërsa (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print ("LED ON - Servo ID:"); Serial.println (id); vonesë (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED OFF - Servo ID:"); Serial.println (id); vonesë (3000); id = id ++; } if (RunCheck == 1) {MenuOptions (); }}
void Grab () {SetPosition (5, 800); // vendosni pozicionin e nyjës 1 në vonesën '0' (100); // prisni që nyja të lëvizë
}
Ne e kemi bazuar programin tonë në programin e prodhuesve PincherTest me disa ndryshime të mëdha në rastin e pozicionimit. Ne përdorëm poza.h që roboti të ketë pozicionet në kujtesë. Së pari ne u përpoqëm që krahu ynë i lojës me Pixycam të ishte automatik, por për shkak të dritës dhe problemeve të vogla të ekranit, kjo nuk mund të ndodhte. Roboti ka një pozicion bazë në shtëpi, pasi të ngarkojë programin, ai do të testojë të gjitha servot e gjetura në robot. Ne kemi vendosur pozat për butonat 1-4, kështu që do të jetë e lehtë për t'u mbajtur mend. Mos ngurroni të përdorni programin.
Hapi 4: Udhëzues video
Hapi 5: Përfundimi
Si përfundim, roboti është një projekt i vogël argëtues për ne dhe një lojë argëtuese për të luajtur dhe eksperimentuar. Ju inkurajoj që ta provoni dhe ta personalizoni gjithashtu.
Recommended:
PlotClock, WeMos dhe Blynk Luajnë Vintage AMI Jukebox: 6 hapa (me fotografi)
PlotClock, WeMos dhe Blynk Playing Vintage AMI Jukebox: Katër inovacione teknike e bënë të mundur këtë projekt: 1977 Rowe AMI Jukebox, komplet robotësh PlotClock, mikrokontrollues WeMos/ESP 8266 dhe shërbim Blynk App/Cloud. SHOTNIM: Nëse nuk e keni Jukebox në dorë - mos ndaloni së lexuari! Ky projekt mund të
Si të bëni një dorezë pianoje me ajër pa tel: 9 hapa
Si të bëni një dorezë pianoje me ajër pa tel: Qëllimet dhe funksionet: Projekti ynë i teknologjisë së veshshme është krijimi i një doreze pianoje ajri pa tel me drita të sinkronizuara duke përdorur elektronikë bazë, një mikrokontrollues si një HexWear dhe një kompjuter portativ me softuer Arduino dhe Max 8 Me Përdorimet e projektit tonë
Ndaloni fëmijët tuaj të luajnë gjatë studimit: 4 hapa
Ndaloni fëmijët tuaj të luajnë gjatë studimit: Luajtja e lojërave video është një problem i madh që kanë studentët ndërsa duhet të studiojnë. Shumë studentë vuajnë nga lojërat në vend që të studiojnë, gjë që u jep nota të këqija. Prindërit janë të zemëruar dhe të shqetësuar për fëmijën e tyre, kështu që ata vendosën të marrin
Arduino - Pllaka pianoje: 16 hapa (me fotografi)
Arduino - Pllaka pianoje: Përshëndetje njerëz të internetit, kjo do të jetë sesi të bëni atë që PEFRFUNDIMisht nuk është një grisje e një loje celulare në një arduino uno r3. Kështu që për të filluar, do t'ju duhen të gjitha pjesët, të cilat janë si më poshtë ! 1x Arduino Uno r3 (42 dollarë) 2x Mburoja e tastierës LCD (19 dollarë secila) 5
Lojtar pianoje: 10 hapa (me fotografi)
Lojtari i Pianos: Për më tepër ju do të lexoni një sistem që do të përdorë një sistem të programeve në lagjet e përvojës dixhitale të një aplikacioni ó në një piano për një iPad 2. Projekti më i mirë do të krijojë një sistem të vetëm për grado të lirisë së desplazamiento lin