- Kinakailangan ang Mga Bahagi
- Paghahanda ng 3D naka-print na Robotic ARM
- Diagram ng Circuit
- Mga hakbang na kasangkot sa Programming LPC2148 para sa Robotic Arm
- Coding Paliwanag
- Pagpili ng Servo Motor upang paikutin gamit ang mga pindutan ng Push
- Paggawa ng Pumili at Ilagay ang Robotic Arm
Ang Robotic Arms, ay isa sa mga kamangha-manghang mga nilikha sa engineering at palaging kaakit-akit na panoorin ang mga bagay na ikiling at pan upang makakuha ng mga kumplikadong bagay tulad ng gagawin ng isang bisig ng tao. Ang mga sandatang robotic na ito ay karaniwang matatagpuan sa mga industriya sa linya ng pagpupulong na gumaganap ng matinding gawaing mekanikal tulad ng hinang, pagbabarena, pagpipinta atbp, kamakailan lamang na mga advanced na robotic arm na may mataas na katumpakan din ang binuo upang maisagawa ang mga kumplikadong operasyon sa pag-opera. Kaya sa tutorial na ito magtayo tayo ng isang simpleng Robotic Arm gamit ang ARM7-LPC2148 microcontroller para sa pagpili at paglalagay ng isang bagay sa pamamagitan ng manu-manong pagkontrol sa ilang mga potensyal.
Sa tutorial na ito gagamitin namin ang isang 3D naka-print na robotic ARM na itinayo sa pamamagitan ng pagsunod sa pamamaraan sa thingiverse. Gumagamit ang ARM ng 4 servo motor para sa robotic ARM na paggalaw. Kung wala kang isang printer, maaari mo ring buuin ang iyong braso gamit ang mga simpleng karton tulad ng itinayo namin para sa aming Arduino Robotic Arm Project. Para sa inspirasyon maaari ka ring mag-refer sa Record at Play Robotic Arm na itinayo namin kanina gamit ang Arduino.
Kaya't ihanda na natin ang mga bagay para sa aming proyekto
Kinakailangan ang Mga Bahagi
- 3D Printer Robotic ARM
- ARM7-LPC2148
- SG-90 Servo Motor (4)
- 10k Potensyomiter (4)
- Pindutan ng Push (4)
- LED (4)
- 5V (1A) DC Power Adapter
- Mga Resistor (10k (4), 2.2k (4))
- Breadboard
- Mga Koneksyon sa Mga Wires
Paghahanda ng 3D naka-print na Robotic ARM
Ang 3D na naka-print na Robotic Arm na ginamit sa tutorial na ito ay ginawa sa pamamagitan ng pagsunod sa disenyo na ibinigay ng EEZYbotARM na magagamit sa Thingiverse. Ang kumpletong pamamaraan para sa paggawa ng naka-print na robotic arm na 3D at ang detalye ng pag-iipon sa video ay naroroon sa link ng thingiverse, na ibinabahagi sa itaas.
Ito ang imahe ng aking 3D na naka-print na Robotic Arm pagkatapos ng assembling sa 4 Servo Motors.
Diagram ng Circuit
Ipinapakita ng sumusunod na imahe ang mga koneksyon sa circuit ng batay sa ARM na Robotic Arm.
Ang mga koneksyon sa circuit para sa proyekto ay simple. Tiyaking i-power ang Servo Motors na may hiwalay na 5V DC power adapter. Para sa mga potentiometro at pindutan ng push maaari naming gamitin ang 3.3V na magagamit mula sa LPC2148 microcontroller.
Narito ginagamit namin ang 4 na mga ADC pin ng LPC2148 na may 4 na potentiometers. At mayroon ding 4 PWM na pin ng LPC2148 na konektado sa mga PWM na pin ng servo motor. Nakakonekta din namin ang 4 na mga pindutan ng push upang mapili kung aling motor ang gagana. Kaya, pagkatapos ng pagpindot sa pindutan ng respetado potensyomiter ay iba-iba upang baguhin ang posisyon ng servo motor.
Ang mga pindutan ng itulak sa isang dulo na konektado sa GPIO ng LPC2148 ay pull-down sa pamamagitan ng risistor ng 10k at isa pang dulo ay konektado sa 3.3V. Gayundin ang 4 LEDs ay konektado upang ipahiwatig kung aling servo motor ang napili upang baguhin ang posisyon.
Mga koneksyon sa circuit sa pagitan ng 4 Servo Motor & LPC2148:
LPC2148 | Servo Motor |
P0.1 | SERVO1 (PWM-Orange) |
P0.7 | SERVO2 (PWM-Orange) |
P0.8 | SERVO3 (PWM-Orange) |
P0.21 | SERVO4 (PWM-Orange) |
Mga koneksyon sa circuit sa pagitan ng 4 Potentiometer at LPC2148:
LPC2148 | Potentiometer Center Pin Left Pin - 0V GND ng LPC2148 Right Pin - 3.3V ng LPC2148 |
P0.25 | Potensyomiter1 |
P0.28 | Potensyomiter2 |
P0.29 | Potensyomiter3 |
P0.30 | Potensyomiter4 |
Mga koneksyon sa circuit ng 4 LED's sa LPC2148:
LPC2148 | LED Anode (Ang Cathode ng lahat ng LED ay GND) |
P1.28 | LED1 (Anode) |
P1.29 | LED2 (Anode) |
P1.30 | LED3 (Anode) |
P1.31 | LED4 (Anode) |
Mga koneksyon sa circuit ng 4 na push button na may LPC2148:
LPC2148 | Button ng Push (Na may Pull-Down Resistor 10k) |
P1.17 | Pushbutton1 |
P1.18 | Pushbutton2 |
P1.19 | Pushbutton3 |
P1.20 | Pushbutton4 |
Mga hakbang na kasangkot sa Programming LPC2148 para sa Robotic Arm
Bago mag-program para sa Robotic Arm na ito, kailangan nating malaman ang tungkol sa pagbuo ng PWM sa LPC2148 at paggamit ng ADC sa ARM7-LPC2148. Para doon, sumangguni sa aming mga nakaraang proyekto sa Interfacing Servo motor na may LPC2148 at kung paano gamitin ang ADC sa LPC2148.
Ang pag-convert ng ADC gamit ang LPC2148
Tulad ng kailangan naming magbigay ng mga halagang ADC para sa pagtatakda ng halaga ng cycle ng tungkulin para sa pagbuo ng output ng PWM para sa pagkontrol sa posisyon ng servo Motor. Kailangan nating maghanap ng mga halaga ng ADC ng potensyomiter. Dahil mayroon kaming apat na potentiometers para sa pagkontrol ng apat na Servo motor, kailangan namin ng 4 na ADC channel ng LPC2148. Dito sa tutorial na ito ay gumagamit kami ng mga ADC pin (P0.25, P0.28, P0.29, P0.30) ng mga ADC channel na 4,1,2,3 ayon sa pagkakabanggit na naroroon sa LPC2148.
Bumubuo ng mga signal ng PWM para sa Servo Motor na gumagamit ng LPC2148
Tulad ng kailangan namin upang makabuo ng mga signal ng PWM para sa pagkontrol ng posisyon ng servo motor. Kailangan nating itakda ang cycle ng tungkulin ng PWM. Mayroon kaming apat na motor ng Servo na konektado sa robotic arm kaya kailangan namin ng 4 PWM channel ng LPC2148. Dito sa tutorial na ito ay gumagamit kami ng mga PWM pin (P0.1, P0.7, P0.8, P0.21) ng mga PWM channel na 3,2,4,5 ayon sa pagkakasunod na naroroon sa LPC2148.
Programming at Flashing Hex File sa LPC2148
Upang Program ARM7-LPC2148 kailangan namin ng keil uVision at i-flash ang HEX code sa LPC2148 Flash Magic tool na kinakailangan. Ginagamit ang isang USB Cable dito upang mai- program ang ARM7 Stick sa pamamagitan ng micro USB port. Nagsusulat kami ng code gamit ang Keil at lumikha ng isang hex file at pagkatapos ang HEX file ay na- flash sa ARM7 stick gamit ang Flash Magic. Upang malaman ang higit pa tungkol sa pag-install ng keil uVision at Flash Magic at kung paano gamitin ang mga ito sundin ang link na Nagsisimula Sa ARM7 LPC2148 Microcontroller at Program ito gamit ang Keil uVision.
Coding Paliwanag
Ang kumpletong programa para sa Robotic Arm Project na ito ay ibinibigay sa pagtatapos ng tutorial. Tingnan natin nang detalyado ang pag-program.
Ang pag-configure ng PORT ng LPC2148 para sa paggamit ng GPIO, PWM at ADC:
Gamit ang rehistro ng PINSEL1 upang paganahin ang mga ADC channel- ADC0.4, ADC0.1, ADC0.2, ADC0.3 para sa mga pin na P0.25, P0.28, P0.29, P0.30. At gayundin, para sa PWM5 para sa pin P0.21 (1 << 10).
#define AD04 (1 << 18) // Piliin ang AD0.4 na function para sa P0.25 #define AD01 (1 << 24) // Piliin ang AD0.1 na pag-andar para sa P0.28 #define AD02 (1 << 26) / / Piliin ang pagpapaandar ng AD0.2 para sa P0.29 # tukuyin ang AD03 (1 << 28) // Piliin ang AD0.3 na pag-andar para sa P0.30 PINSEL1 - = AD04 - AD01 - AD02 - AD03 - (1 << 10);
Gamit ang rehistro ng PINSEL0 upang paganahin ang mga PWM channel PWM3, PWM2, PWM4 para sa mga pin na P0.1, P0.7, P0.8 ng LPC2148.
PINSEL0 = 0x000A800A;
Gamit ang rehistro ng PINSEL2 upang paganahin ang pagpapaandar ng GPIO pin para sa lahat ng mga pin sa PORT1 na ginamit para sa koneksyon ng LED at pushbutton.
PINSEL2 = 0x00000000;
Upang gawin ang mga LED pin bilang Output at Pushbutton pin bilang Input ang IODIR1 register ay ginagamit. (0 para sa INPUT at 1 para sa OUTPUT)
IODIR1 = ((0 << 17) - (0 << 18) - (0 << 19) - (0 << 20) - (1 << 28) - (1 << 29) - (1 << 30) - (1 << 31));
Habang ang mga numero ng pin ay tinukoy bilang
#define SwitchPinNumber1 17 // (Nakakonekta sa P1.17) #define SwitchPinNumber2 18 // (Nakakonekta sa P1.18) #define SwitchPinNumber3 19 // (Nakakonekta sa P1.19) #define SwitchPinNumber4 20 // (Nakakonekta sa P1. 20) #define LedPinNumber1 28 // (Nakakonekta sa P1.28) #define LedPinNumber2 29 // (Nakakonekta sa P1.29) #define LedPinNumber3 30 // (Nakakonekta sa P1.30) #define LedPinNumber4 31 // (Nakakonekta sa P1.31)
Pag-configure ng setting ng conversion ng ADC
Susunod na mode ng ADC conversion at ang orasan para sa ADC ay nakatakda gamit ang rehistro ng AD0CR_setup.
unsigned mahabang AD0CR_setup = (CLKDIV << 8) - BURST_MODE_OFF - PowerUP; // Pagse-set up ng ADC Mode
Habang ang CLCKDIV, Burst Mode at PowerUP ay tinukoy bilang
#define CLKDIV (15-1) #define BURST_MODE_OFF (0 << 16) // 1 for on and 0 for off #define PowerUP (1 << 21)
Itinatakda ang orasan para sa ADC Conversion (CLKDIV)
Ginagamit ito upang makabuo ng orasan para sa ADC. 4Mhz ADC na orasan (ADC_CLOCK = PCLK / CLKDIV) kung saan talagang ginagamit ang "CLKDIV-1", sa aming kaso PCLK = 60mhz
Burst Mode (Bit-16): Ang bit na ito ay ginagamit para sa BURST conversion. Kung ang bit na ito ay itinakda ang ADC module ay gagawin ang conversion para sa lahat ng mga channel na napili (SET) sa SEL bits. Ang pagtatakda ng 0 sa bit na ito ay hindi magpapagana ng BURST conversion.
Power Down Mode (Bit-21): Ginagamit ito para sa pag-ON o OFF ng ADC. Ang pagtatakda ng (1) sa bit na ito ay nagdudulot ng ADC sa labas ng power down mode at ginagawa itong pagpapatakbo. Ang pag-clear sa bit na ito ay magpapagana sa ADC.
Ang pag-configure ng setting ng conversion ng PWM
Unang I-reset at huwag paganahin ang counter para sa PWM gamit ang rehistro ng PWMTCR at i-set up ang PWM Timer Prescale Rehistro na may prescaler na halaga.
PWMTCR = 0x02; PWMPR = 0x1D;
Susunod na itakda ang maximum na bilang ng mga bilang sa isang siklo. Ginagawa ito sa Match Rehistro 0 (PWMMR0). Tulad ng mayroon kaming 20000 dahil ito ay isang PWM alon ng 20msecs
PWMMR0 = 20000;
Matapos itakda ang halaga para sa cycle ng tungkulin sa mga rehistro ng tugma, gumagamit kami ng PWMMR4, PWMMR2, PWMMR3, PWMMR5. Dito ay nagtatakda kami ng mga paunang halaga ng 0 msec (Toff)
PWMMR4 = 0; PWMMR2 = 0; PWMMR3 = 0; PWMMR5 = 0;
Pagkatapos nito ay itakda ang PWM Match Control Rehistro upang maging sanhi ng isang counter reset kapag nangyari ang rehistro ng tugma.
PWMMCR = 0x00000002; // I-reset sa tugma sa MR0
Pagkatapos nito, ang PWM latch Paganahin ang Pagrehistro upang paganahin ang paggamit ng halaga ng pagtutugma (PWMLER)
PWMLER = 0x7C; // Latch paganahin ang para sa PWM2, PWM4, PWM4 at PWM5
I-reset ang timer counter gamit ang kaunti sa PWM Timer Control Register (PWMTCR) at pinapayagan din nito ang PWM.
PWMTCR = 0x09; // Paganahin ang PWM at counter
Susunod na paganahin ang mga output ng PWM at itakda ang PWM sa iisang gilid na kinokontrol na mode sa PWM control register (PWMPCR).
PWMPCR = 0x7C00; // Paganahin ang PWM2, PWM4, PWM4 at PWM5, solong gilid na kinokontrol na PWM
Pagpili ng Servo Motor upang paikutin gamit ang mga pindutan ng Push
Mayroon kaming apat na mga pindutan ng push na kung saan ay ginagamit upang paikutin ang apat na magkakaibang mga servo motor. Sa pamamagitan ng pagpili ng isang pindutan ng itulak at iba-iba ang kaukulang potensyomiter, itinatakda ng halaga ng ADC ang cycle ng tungkulin at binabago ng katapat na servo motor ang posisyon nito. Upang makuha ang katayuan ng switch ng push button
switchStatus1 = (IOPIN1 >> SwitchPinNumber1) & 0x01;
Kaya, sa pamamagitan ng pag-asa sa kung aling halaga ng paglipat ay TAAS ang ADC conversion ay tumatagal ng mga lugar at pagkatapos pagkatapos ng matagumpay na pag-convert ng halaga ng ADC (0 hanggang 1023), nai-map ito sa mga tuntunin ng (0 hanggang 2045) at pagkatapos ang halaga ng cycle ng tungkulin ay nakasulat sa ang (PWMMRx) PWM pin na konektado sa servo motor. At gayun din, ang isang LED ay nakabukas MATATAAS para sa pagpapahiwatig kung aling switch ang pinindot. Ang sumusunod ay isang halimbawa para sa unang pindutan ng push
kung (switchStatus1 == 1) { IOPIN1 = (1 <
Paggawa ng Pumili at Ilagay ang Robotic Arm
Matapos ang pag-upload ng code sa LPC2148, pindutin ang anumang switch at ibahin ang kaukulang potensyomiter upang baguhin ang posisyon ng robotic arm.
Kinokontrol ng bawat switch at potentiometer ang bawat kilusang servomotor na base sa kaliwa o kanang kilusan, pataas o pababa na paggalaw, pasulong o paatras at pagkatapos ay ang gripper upang hawakan at bitawan ang kilusan. Ang kumpletong code na may isang detalyadong gumaganang video ay ibinibigay sa ibaba.