Talaan ng mga Nilalaman:
- Hakbang 1: Kagamitan
- Hakbang 2: Pag-setup ng Arduino
- Hakbang 3: Pangwakas na Programa
- Hakbang 4: Patnubay sa Video
- Hakbang 5: Konklusyon
Video: Mga Piano Tile Playing Robot Arm: 5 Mga Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:14
Ang pangkat ay binubuo ng 2 Mga Engineer ng Automation mula sa UCN, na nakaisip ng isang makinang na ideya na uudyok kaming gawin at paunlarin. Ang ideya ay batay sa isang Arduino board na kumokontrol sa isang robotic arm. Ang Arduino board ay ang utak ng operasyon at pagkatapos ay ang tagapagtaguyod ng operasyon, ang Robotic arm, ay gagawin kung ano ang kinakailangan nito. Ang higit na malalim na paliwanag ay darating mamaya.
Hakbang 1: Kagamitan
Robot arm:
Phantomx Pincher Robot Arm Kit Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)
Software para sa robot- https://www.arduino.cc/en/Main/OldSoftwareRelease… Kulay ng camera sa pagtuklas:
CMUcam5 Pixy camera - (https://charmedlabs.com/default/pixy-cmucam5/)
Software - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)
Hakbang 2: Pag-setup ng Arduino
Maaari mong makita ang pag-setup sa board dito, na napakadali.
Sa kaliwa ay ang Power Supply.
Ang gitnang isa ay para sa unang servo, na kung saan ay sa paglaon ay nakakonekta sa iba pang mga servos, servo ng servo.
Ang ibabang bahagi ay kung saan kinokontrol namin ang board mula sa isang PC o Laptop, na mayroong isang input ng USB sa kabilang dulo.
Hakbang 3: Pangwakas na Programa
|| PROGRAM ||
# isama
#include #include "poses.h" #include // Pixy Library #include
# tukuyin ang 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); // set joint number 1 register 32 to speed 50. ax12SetRegister2 (2, 32, 50); // set joint number 2 register 32 to speed 50. ax12SetRegister2 (3, 32, 50); // set joint number 3 register 32 to speed 50. ax12SetRegister2 (4, 32, 50); // set joint number 4 register 32 to speed 50. ax12SetRegister2 (5, 32, 100); // set joint number 5 register 32 upang mapabilis ang 100. // ipasimula ang mga variable id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // buksan ang serial port Serial.begin (9600); pagkaantala (500); Serial.println ("#### Serial.println ("Serial Communication Established.");
// Check Lipo Battery Voltage CheckVoltage ();
// Scan Servos, ibalik ang posisyon na MoveTest (); MoveHome (); Mga Opsyon ng Menu (); RunCheck = 1; }
void loop () {// basahin ang sensor: int inByte = Serial.read ();
lumipat (inByte) {
case '1': MovePose1 (); pahinga;
case '2': MovePose2 (); pahinga; case '3': MovePose3 (); pahinga;
case '4': MovePose4 (); pahinga;
case '5': MoveHome (); pahinga; kaso '6': Grab (); pahinga;
case '7': LEDTest (); pahinga;
kaso '8': RelaxServos (); pahinga; }}
walang bisa ang CheckVoltage () {// maghintay, pagkatapos suriin ang boltahe (kaligtasan ng LiPO) float voltage = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println ("#### Serial.print ("System Voltage:"); Serial.print (boltahe); Serial.println ("volts."); kung (boltahe 10.0) {Serial.println ("Mga antas ng boltahe nominal."); } kung (RunCheck == 1) {MenuOptions (); } Serial.println ("#### }
walang bisa ang MoveHome () {pagkaantala (100); // inirekumendang bioloid.loadPose (Home); // load the pose from FLASH, into the nextPose buffer bioloid.readPose (); // basahin sa kasalukuyang mga posisyon ng servo sa buffer ng curPose Serial.println ("############################"); Serial.println ("Paglilipat ng mga servo sa posisyon ng Home"); Serial.println ("#### pagkaantala (1000); bioloid.interpolateSetup (1000); // setup for interpolation from current-> susunod higit sa 1/2 isang segundo habang (bioloid.interpolating> 0) {// gawin ito habang hindi namin naabot ang aming bagong pose bioloid.interpolateStep (); // ilipat servos, kung kinakailangan. antala (3); } kung (RunCheck == 1) {MenuOptions (); }}
walang bisa ang MovePose1 () {pagkaantala (100); // inirekumendang bioloid.loadPose (Pose1); // load the pose from FLASH, into the nextPose buffer bioloid.readPose (); // basahin sa kasalukuyang mga posisyon ng servo sa buffer ng curPose Serial.println ("############################"); Serial.println ("Paglilipat ng mga servo sa unang posisyon"); Serial.println ("#### pagkaantala (1000); bioloid.interpolateSetup (1000); // setup for interpolation from current-> susunod higit sa 1/2 isang segundo habang (bioloid.interpolating> 0) {// gawin ito habang hindi namin naabot ang aming bagong pose bioloid.interpolateStep (); // ilipat servos, kung kinakailangan. antala (3); } SetPosition (3, 291); // itakda ang posisyon ng magkasanib na 3 sa '0' pagkaantala (100); // maghintay para sa magkasanib na ilipat kung (RunCheck == 1) {MenuOptions (); }}
walang bisa ang MovePose2 () {pagkaantala (100); // inirekumendang bioloid.loadPose (Pose2); // load the pose from FLASH, into the nextPose buffer bioloid.readPose (); // basahin sa kasalukuyang mga posisyon ng servo sa buffer ng curPose Serial.println ("############################"); Serial.println ("Paglilipat ng mga servos sa ika-2 posisyon"); Serial.println ("#### pagkaantala (1000); bioloid.interpolateSetup (1000); // setup for interpolation from current-> susunod higit sa 1/2 isang segundo habang (bioloid.interpolating> 0) {// gawin ito habang hindi namin naabot ang aming bagong pose bioloid.interpolateStep (); // ilipat servos, kung kinakailangan. antala (3); } SetPosition (3, 291); // itakda ang posisyon ng magkasanib na 3 sa '0' pagkaantala (100); // maghintay para sa magkasanib na ilipat kung (RunCheck == 1) {MenuOptions (); }} walang bisa ang MovePose3 () {pagkaantala (100); // inirekumendang bioloid.loadPose (Pose3); // load the pose from FLASH, into the nextPose buffer bioloid.readPose (); // basahin sa kasalukuyang mga posisyon ng servo sa curPose buffer na Serial.println ("########### ###################"); Serial.println ("Paglilipat ng mga servos sa ika-3 posisyon"); Serial.println ("#### pagkaantala (1000); bioloid.interpolateSetup (1000); // setup for interpolation from current-> susunod higit sa 1/2 isang segundo habang (bioloid.interpolating> 0) {// gawin ito habang hindi namin naabot ang aming bagong pose bioloid.interpolateStep (); // ilipat servos, kung kinakailangan. antala (3); } SetPosition (3, 291); // itakda ang posisyon ng magkasanib na 3 sa '0' pagkaantala (100); // maghintay para sa magkasanib na ilipat kung (RunCheck == 1) {MenuOptions (); }}
walang bisa ang MovePose4 () {pagkaantala (100); // inirekumendang bioloid.loadPose (Pose4); // load the pose from FLASH, into the nextPose buffer bioloid.readPose (); // basahin sa kasalukuyang mga posisyon ng servo sa buffer ng curPose Serial.println ("############################"); Serial.println ("Paglilipat ng mga servos sa ika-4 na posisyon"); Serial.println ("#### pagkaantala (1000); bioloid.interpolateSetup (1000); // setup for interpolation from current-> susunod higit sa 1/2 isang segundo habang (bioloid.interpolating> 0) {// gawin ito habang hindi namin naabot ang aming bagong pose bioloid.interpolateStep (); // ilipat servos, kung kinakailangan. antala (3); } SetPosition (3, 291); // itakda ang posisyon ng magkasanib na 3 sa '0' pagkaantala (100); // maghintay para sa magkasanib na ilipat kung (RunCheck == 1) {MenuOptions (); }}
walang bisa ang MoveTest () {Serial.println ("######### #####################"); Serial.println ("Pagsisimula ng Pagsubok sa Pag-sign ng Kilusan"); Serial.println ("#### pagkaantala (500); id = 1; pos = 512; habang (id <= SERVOCOUNT) {Serial.print ("Moving Servo ID:"); Serial.println (id);
habang (pos> = 312) {SetPosition (id, pos); pos = pos--; antala (10); }
habang (pos <= 512) {SetPosition (id, pos); pos = pos ++; antala (10); }
// iterate sa susunod na servo ID id = id ++;
} kung (RunCheck == 1) {MenuOptions (); }}
walang bisa ang MenuOptions () {Serial.println ("#### Serial.println ("Mangyaring ipasok ang pagpipiliang 1-5 upang muling patakbuhin ang mga indibidwal na pagsubok."); Serial.println ("1) 1st Position"); Serial.println ("2) Pangalawang Posisyon"); Serial.println ("3) Pangatlong Posisyon"); Serial.println ("4) 4th Position"); Serial.println ("5) Posisyon sa Bahay"); Serial.println ("6) Suriin ang Boltahe ng System"); Serial.println ("7) Magsagawa ng LED Test"); Serial.println ("8) Relax Servos"); Serial.println ("#### }
walang bisa RelaxServos () {id = 1; Serial.println ("#### Serial.println ("Nakakarelaks na Mga Serbisyo."); Serial.println ("#### habang (id <= SERVOCOUNT) {Relax (id); id = (id ++)% SERVOCOUNT; antala (50); } kung (RunCheck == 1) {MenuOptions (); }}
walang bisa ang LEDTest () {id = 1; Serial.println ("#### Serial.println ("Running LED Test"); Serial.println ("#### habang (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print ("LED ON - Servo ID:"); Serial.println (id); pagkaantala (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED OFF - Servo ID:"); Serial.println (id); pagkaantala (3000); id = id ++; } kung (RunCheck == 1) {MenuOptions (); }}
walang bisa Grab () {SetPosition (5, 800); // itakda ang posisyon ng magkasanib na 1 sa '0' pagkaantala (100); // maghintay para sa paggalaw ng magkasanib
}
Nakabatay kami sa aming programa sa tagagawa ng PincherTest na programa na may ilang pangunahing pag-aayos sa kaso ng pagpoposisyon. Ginamit namin ang mga poses.h para sa robot na magkaroon ng mga posisyon sa memorya. Una sinubukan naming likhain ang aming paglalaro ng braso sa Pixycam upang maging awtomatiko, ngunit dahil sa magaan at maliit na mga problema sa screen, hindi ito maaaring mangyari. Ang robot ay may pangunahing posisyon sa bahay, pagkatapos mag-upload ng programa, susubukan nito ang lahat ng mga servo na matatagpuan sa robot. Itinakda namin ang mga pose para sa 1-4 na mga pindutan, kaya madali itong matandaan. Huwag mag-atubiling gamitin ang programa.
Hakbang 4: Patnubay sa Video
Hakbang 5: Konklusyon
Sa konklusyon, ang robot ay isang nakakatuwang maliit na proyekto para sa amin at isang kasiyahan na maglaro at mag-eksperimento. Hinihimok ko kayo na subukan ito at ipasadya din.
Inirerekumendang:
Golf Playing Robot Gamit ang Witblox: 7 Hakbang
Golf Playing Robot Gamit ang Witblox: Pagbati sa lahat. Ngayon ay gumawa ako ng robot sa paglalaro ng golf. Tulad ng alam nating lahat ng isang rotatory na galaw ay maaaring mapalitan sa pagganti na paggalaw. Sa gayon gumagamit ng parehong kababalaghan na ginawa ko sa proyektong ito kung saan ang bola ay patuloy na nag-oscillate sa landas na nagbibigay
Tchaibotsky (isang Piano Playing Robot): 12 Hakbang (na may Mga Larawan)
Tchaibotsky (isang Piano Playing Robot): Ang itinuro na ito ay nilikha bilang pagtupad sa kinakailangan ng proyekto ng Makecourse sa University of South Florida (www.makecourse.com) Ang Tchaibotsky ay isang robot na tumutugtog ng piano ng Arduino. Ang pagganyak ay upang bumuo ng isang bagay na maaaring
Arduino - Mga Piano Tile: 16 Hakbang (na may Mga Larawan)
Arduino - Mga Piano Tile: Kumusta mga tao sa internet, ito ay tungkol sa kung paano gawin kung ano ang tiyak na hindi isang rip off ng isang mobile game sa isang arduino uno r3.so upang magsimula, kakailanganin mo ang lahat ng mga bahagi, na kung saan ay ang mga sumusunod ! 1x Arduino Uno r3 ($ 42) 2x LCD Keypad Shield ($ 19 bawat isa) 5
Paano Gumawa ng isang Autonomous Basketball Playing Robot Paggamit ng isang IRobot Lumikha Bilang Base: 7 Mga Hakbang (na may Mga Larawan)
Paano Gumawa ng isang Autonomous Basketball Playing Robot Paggamit ng isang IRobot Lumikha Bilang Base: Ito ang aking entry para sa hamon sa iRobot Lumikha. Ang pinakamahirap na bahagi ng buong prosesong ito para sa akin ay ang pagpapasya kung ano ang gagawin ng robot. Nais kong ipakita ang mga cool na tampok ng Lumikha, habang nagdaragdag din sa ilang robo flair. Lahat ng akin
Paano Gumawa ng isang RockBand Guitar Playing Robot !: 15 Hakbang (na may Mga Larawan)
Paano Gumawa ng isang RockBand Guitar Playing Robot !: Para sa aking unang itinuro … Ano ang masasabi ko, gustung-gusto kong mag-drum sa rockband set ngunit bihirang mayroon akong isang makakalaro; marahil kailangan ko ng higit pang mga kaibigan, ngunit sa aking tila malungkot na buhay (jk) ay dumating ang isang medyo cool na hindi makakaakit. Mayroon akong disenyo