| GO TO INDEX |
1. 설명
아두이노와 SG90 서보모터2개, HS-5645MG 서보모터 3개를 이용한 로봇암 제작 및 제어
2. 시스템
1) 시스템 구성

2) 모듈 구성
| 모듈 | 설명 |
| TRUSERCON02 | TRARM02 로봇팔 모듈 제어를 위한 사용자 컨트롤 모듈 - 가변저항 10kOhm 5EA 사용 |
| TRMCU01 | 아두이노 제어모듈 - Arduino UNO r3 |
| TRARM02 | 4축 + 로봇그립퍼 로봇팔 모듈 - SG90 RC 서보모터 2EA + HS-5645MG RC 서보모터 3EA 사용 - 로봇그립퍼는 TRGRIP01 사용 |
3. 하드웨어
1) 기구부품 디자인
(1) TRARM02 기구부품 디자인

2) 전자부품 와이어링
(1) 시스템 전자부품 와이어링

(2) TRARM02 전자부품 와이어링

TRARM02 전자부품 와이어링 [2][3]
(※ TRUSERCON02, TRMCU01 모듈의 상세 전자부품 와이어링은 "6. 참조" 의 링크 참조)
3) 구매부품 목록
| 부품명 | 수량 (EA) | 설명 |
| PCA9685 | 1 | 서보모터 드라이버 |
| SG90 | 2 | SG90 RC 서보모터 |
| HS-5645MG | 3 | HS-5645MG RC 서보모터 |
| 볼트 M2x6 (접시머리) 너트 M2 |
6 6 |
M2 볼트/너트 |
| 볼트 M3x6 (접시머리) 볼트 M3x12 (접시머리) 볼트 M3x6 (둥근머리) |
4 8 8 |
M3 볼트/너트 |
(※ TRUSERCON02, TRMCU01 모듈 부품 포함 안됨)
4. 소프트웨어
1) 아두이노 소프트웨어
//--------------------------------------------------------------------------------
// File TRARM02_TRUSERCON02.ino
//
// Version v0.1 2025.12.02 Tony Kwon
// Initial revision
//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
// Configuration
//--------------------------------------------------------------------------------
int adc_min[5] = {336, 367, 341, 346, 710};
int adc_max[5] = {670, 702, 692, 687, 800};
int tick_init[5] = {402, 362, 402, 394, 357};
int tick_min[5] = {294, 262, 294, 292, 340};
int tick_max[5] = {510, 463, 510, 497, 446};
int angle_init[5] = {0, 0, 0, 0, 0};
int angle_min[5] = {-45, -45, -45, -45, -45};
int angle_max[5] = {45, 45, 45, 45, 45};
//--------------------------------------------------------------------------------
// Serial communication
//--------------------------------------------------------------------------------
#define SERIAL_BAUD 115200
void setupSerial() {
Serial.begin(SERIAL_BAUD);
while (! Serial);
}
//--------------------------------------------------------------------------------
// Servo motor driver for PCA9685
//--------------------------------------------------------------------------------
#include <Adafruit_PWMServoDriver.h>
#define MOTOR_PWM_FREQ 50 // 50[Hz] frequency = 20[ms] period
#define MOTOR_CH_MAX 16
Adafruit_PWMServoDriver motorServoDriver = Adafruit_PWMServoDriver(0x40);
void setupMotor() {
motorServoDriver.begin();
motorServoDriver.setPWMFreq(MOTOR_PWM_FREQ);
for(int i = 0; i < 5; i++) {
motorServoDriver.setPWM(i, 0, tick_init[5]);
}
}
//--------------------------------------------------------------------------------
// Setup
//--------------------------------------------------------------------------------
void setup() {
setupSerial();
setupMotor();
}
//--------------------------------------------------------------------------------
// Loop
//--------------------------------------------------------------------------------
void loop() {
//----------------------------------------
// Read ADC
//----------------------------------------
int adc_raw[5];
int adc[5];
adc_raw[0] = analogRead(A0);
adc_raw[1] = analogRead(A1);
adc_raw[2] = analogRead(A2);
adc_raw[3] = analogRead(A3);
adc_raw[4] = analogRead(A4);
for(int i = 0; i < 5; i++) {
adc[i] = max(adc_min[i], min(adc_raw[i], adc_max[i]));
}
//----------------------------------------
// Rotate TRARM02 motors
//----------------------------------------
int tick[5];
for(int i = 0; i < 5; i++) {
tick[i] = map(adc[i], adc_min[i], adc_max[i], tick_min[i], tick_max[i]);
}
tick[0] = (tick_max[0] - (tick[0] - tick_min[0]));
tick[1] = (tick_max[1] - (tick[1] - tick_min[1]));
tick[2] = (tick_max[2] - (tick[2] - tick_min[2]));
for(int i = 0; i < 5; i++) {
motorServoDriver.setPWM(i, 0, tick[i]);
}
delay(10);
}
TRARM02_TRUSERCON02.zip
0.00MB
5. 테스트
1) 테스트 영상
https://www.youtube.com/watch?v=tJqS3V3ZpfE
6. 참조
[2] Arduino UNO, PCA9685 이미지 출처
[4] TRUSERCON02 - 가변저항 5개를 이용한 로봇팔 사용자 컨트롤 모듈
[5] TRMCU01 - Arduino UNO r3 마이크로컨트롤러 모듈
[6] YouTube (토니로보랩 TONYROBOLab)
[7] GitHub Repository (tonyrobolab/robotarm-trarm02)
| GO TO INDEX |
'Project > Robot Arm' 카테고리의 다른 글
| [Robot Arm] 아두이노 + SG90 서보모터로 로봇팔 만들기 (TRARM01) (0) | 2025.11.20 |
|---|---|
| [Robot Arm] INDEX (0) | 2025.11.20 |