제스처 제어 로봇: ADXL335 가속도계 + RF 433MHz 무선 통신
프로젝트 개요
손목의 기울기를 ADXL335 3축 가속도계로 측정하여, RF 433MHz 무선 링크를 통해 로봇 자동차의 전진/후진/좌/우 회전을 제어하는 제스처 기반 원격 제어 시스템입니다. 아두이노 나노(송신부)와 아두이노 우노+모터 쉴드(수신부)로 구성된 분산 제어 구조입니다.
시스템 블록 다이어그램
[송신부 - 손목 착용] [수신부 - 로봇 본체]
┌─────────────────────┐ 433MHz RF ┌─────────────────────┐
│ Arduino Nano │ ◄─────────────► │ Arduino UNO │
│ + ADXL335 │ (HT12E/HT12D) │ + Motor Shield │
│ + RF Tx + HT12E │ │ + RF Rx + HT12D │
└─────────────────────┘ │ + DC 모터 × 4 │
└─────────────────────┘
부품 목록
| 부품 |
수량 |
역할 |
| Arduino UNO |
1 |
수신부 메인 컨트롤러 |
| Arduino Nano R3 |
1 |
송신부 컨트롤러 (휴대용) |
| RF 433MHz 송수신 모듈 |
1쌍 |
무선 데이터 링크 (최대 10m) |
| HT12E 인코더 / HT12D 디코더 |
각 1 |
병렬 4비트 데이터를 직렬 전송용 인코딩/디코딩 |
| ADXL335 3축 가속도계 |
1 |
손목 기울기 측정 (X/Y/Z 아날로그 출력) |
| Adafruit 모터 쉴드 v1 |
1 |
DC 모터 4채널 구동 (AFMotor 라이브러리) |
| DC 기어 모터 |
4 |
좌/우 바퀴 구동 (좌우 각각 2개 병렬 연결) |
가속도계 기반 제스처 인식 원리
ADXL335 특성
- ±3g 측정 범위, 3.3V 동작, 아날로그 전압 출력 (0~Vcc)
- 중력 가속도(g=9.8m/s²) 성분 분해로 정적 기울기 감지 가능
- 아두이노 10비트 ADC로 0~1023 정수값 획득
기울기-가속도 관계
손목이 기울면 X/Y축이 수직 방향과 각도를 이루며, 중력 가속도 성분이 각 축에 투영됩니다.
수평 상태: X≈512, Y≈512, Z≈512 (1.65V 기준)
전진 기울기: Y값 증가 (예: ≥390)
후진 기울기: Y값 감소 (예: ≤310)
우측 기울기: X값 증가 (예: ≥380)
좌측 기울기: X값 감소 (예: ≤320)
중립 영역: X 320~380, Y 310~390 → 정지
송신부 회로 (Arduino Nano + ADXL335 + HT12E + RF Tx)
ADXL335 연결
- X축 → A0, Y축 → A1 (또는 A3), Z축 → A2
- VCC → 3.3V, GND → GND
HT12E 인코더 연결
- 주소 핀 A0~A7: 모두 GND (수신측과 동일해야 통신 가능)
- 데이터 입력 핀 AD8~AD11 (4비트) → 나노 디지털 핀 9~12
- TE(전송 활성) 핀 → GND (상시 전송 모드)
- RF Tx 데이터 핀 → HT12E DOUT
명령 매핑 (HT12E 데이터 핀 HIGH 시)
| 디지털 핀 |
HT12E 핀 |
명령 |
| 9 |
AD8 |
전진 |
| 10 |
AD9 |
후진 |
| 11 |
AD10 |
좌회전 |
| 12 |
AD11 |
우회전 |
수신부 회로 (Arduino UNO + Motor Shield + HT12D + RF Rx)
HT12D 디코더 연결
- 주소 핀 A0~A7: 모두 GND (송신측과 동일)
- 데이터 출력 핀 D8~D11 (4비트) → 우노 아날로그 핀 A0~A3 (디지털 입력으로 사용)
- VT(유효 데이터) 핀 → 선택 사항 (LED 표시용)
- RF Rx 데이터 핀 → HT12D DIN
모터 쉴드 연결
- 좌측 모터 2개 병렬 → M3 단자
- 우측 모터 2개 병렬 → M4 단자
- 외부 전원: 9V 배터리 2~3개 병렬 연결 (모터 쉴드 전원 입력 단자)
소스 코드
송신부 (Arduino Nano)
int x_axis = 0, y_axis = 0;
const int forward = 9, backward = 10, right = 11, left = 12;
void setup() {
pinMode(A0, INPUT); // X축
pinMode(A3, INPUT); // Y축 (A1 사용 시 변경)
pinMode(forward, OUTPUT);
pinMode(backward, OUTPUT);
pinMode(right, OUTPUT);
pinMode(left, OUTPUT);
Serial.begin(9600);
}
void loop() {
x_axis = analogRead(A0);
y_axis = analogRead(A3);
// 모든 출력 초기화
digitalWrite(forward, LOW);
digitalWrite(backward, LOW);
digitalWrite(right, LOW);
digitalWrite(left, LOW);
// 임계값 기반 제스처 판별
if (y_axis >= 390) {
digitalWrite(forward, HIGH);
} else if (y_axis <= 310) {
digitalWrite(backward, HIGH);
} else if (x_axis >= 380) {
digitalWrite(right, HIGH);
} else if (x_axis <= 320) {
digitalWrite(left, HIGH);
}
// 중립 영역(320
수신부 (Arduino UNO + AFMotor 라이브러리)
#include
AF_DCMotor motor_right(3); // M3 단자
AF_DCMotor motor_left(4); // M4 단자
int forward=0, backward=0, right=0, left=0;
void setup() {
pinMode(A0, INPUT); // HT12D D8 (전진)
pinMode(A1, INPUT); // HT12D D9 (후진)
pinMode(A2, INPUT); // HT12D D10 (우회전)
pinMode(A3, INPUT); // HT12D D11 (좌회전)
Serial.begin(9600);
motor_right.setSpeed(255);
motor_left.setSpeed(255);
motor_right.run(RELEASE);
motor_left.run(RELEASE);
}
void loop() {
forward = digitalRead(A0);
backward = digitalRead(A1);
right = digitalRead(A2);
left = digitalRead(A3);
if (forward == HIGH) {
motor_right.run(FORWARD);
motor_left.run(FORWARD);
} else if (backward == HIGH) {
motor_right.run(BACKWARD);
motor_left.run(BACKWARD);
} else if (right == HIGH) {
motor_right.run(FORWARD);
motor_left.run(RELEASE); // 제자리 우회전
} else if (left == HIGH) {
motor_right.run(RELEASE);
motor_left.run(FORWARD); // 제자리 좌회전
} else {
motor_right.run(RELEASE);
motor_left.run(RELEASE);
}
delay(100);
}
중요 설계 고려사항
- 전원 분리: 서보/모터 구동 전류가 크므로 아두이노 5V 레귤레이터와 별도 전원(9V 배터리 → 7805 또는 UBEC) 필수
- 주소 매칭: HT12E/HT12D의 A0~A7 핀 설정이 동일해야 통신됨 (모두 GND 권장)
- 안테나: RF 모듈 안테나 길이 17.3cm (λ/4, 433MHz) 직선으로 연장 시 수신 거리 향상
- 디바운싱: 가속도계 노이즈로 인한 진동 방지를 위해 임계값에 히스테리시스 적용 권장
- 모터 병렬 연결: 동일 측 모터 2개를 병렬로 연결하여 토크 증대, 단 모터 쉴드 채널당 전류 한계 확인 필요
확장 아이디어
- MPU6050(자이로+가속도)로 교체하여 더 정교한 제스처 인식 (탭, 더블탭, 회전 등)
- nRF24L01 또는 LoRa 모듈로 통신 거리/신뢰성 향상
- 블루투스(BLE)로 스마트폰 앱 제어 추가
- 초음파 센서 추가로 장애물 회피 자율 주행 기능 결합
- 로봇 팔 제어로 확장 (3축 이상 제스처 매핑)