이 글은 싼 가격으로 무선 로봇을 개발하는 방법에 대해 정리한다.
예를 들어 무선조정 탱크와 같은 것들을 3~4만원 이하가격으로 만들 수 있다. 여기에 몇 십원정도하는 광센서를 이용하면, 라인트레이서 기능을 추가할 수 있다. 또한, 초음파 센서를 사용하면, 장애물을 자율적으로 피해다니는 스마트 기능을 추가할 수 있다.
이런 기능을 개발하기 위해서는 다음과 같은 장치가 필요하다.
- 모터 드라이버: 모터 속도, 방향을 제어한다.
- 무선 통신 칩: 데이터를 통신하여, 모터를 제어한다.
- 아두이노 보드: 모터와 무선 통신칩을 제어한다.
- 기타: DC모터, 로버 프레임, 배터리 등
1. 모터 드라이버
아래 글은 매우 싼 모터 드라이버를 이용해, 일반 DC모터의 속도, 방향을 제어할 수 있는 방법을 설명한 글이다.
여기서 사용하는 드라이버 칩은 L293D이고, 대략 3000원 이하로 구할 수 있다.
이 보다 더 손쉽게 제어할 수 있는 SN754410NE를 사용할 수도 있다. 이 칩은 두개의 모터 방향을 각각 제어할 수 있다.
2. 테스트
다음 링크의 글을 참고하여, SN754410NE를 이용해, 모터를 제어해 본다.
- Dual Motor Driver with Arduino using a SN754410NE Quad Half H-Bridge
- Autonomous Arduino Tank (A.A.T)
우선, 글에 표시한 대로, 회로를 결선한다. 그리고, 아두이노 코딩을 한다. 동작은 1초 전진, 1초 후진, 1초 좌회전, 2초 우회전을 계속 반복하게 코딩되어 있다.
// Use this code to test your motor with the Arduino board:
// if you need PWM, just use the PWM outputs on the Arduino
// and instead of digitalWrite, you should use the analogWrite command
// ————————————————————————— Motors
int motor_left[] = {2, 3};
int motor_right[] = {7, 8};
int ledPin = 13; // LED connected to digital pin 13
// ————————————————————————— Setup
void setup() {
Serial.begin(9600);
// Setup motors
int i;
for(i = 0; i < 2; i++){
pinMode(motor_left[i], OUTPUT);
pinMode(motor_right[i], OUTPUT);
pinMode(ledPin, OUTPUT);
}
}
// ————————————————————————— Loop
void loop() {
drive_forward();
delay(1000);
motor_stop();
Serial.println("1");
drive_backward();
delay(1000);
motor_stop();
Serial.println("2");
turn_left();
delay(1000);
motor_stop();
Serial.println("3");
turn_right();
delay(1000);
motor_stop();
Serial.println("4");
motor_stop();
delay(1000);
motor_stop();
Serial.println("5");
digitalWrite(ledPin, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(ledPin, LOW); // set the LED off
delay(1000); // wait for a second
}
void motor_stop(){
digitalWrite(motor_left[0], LOW);
digitalWrite(motor_left[1], LOW);
digitalWrite(motor_right[0], LOW);
digitalWrite(motor_right[1], LOW);
delay(25);
}
void drive_forward(){
digitalWrite(motor_left[0], HIGH);
digitalWrite(motor_left[1], LOW);
digitalWrite(motor_right[0], HIGH);
digitalWrite(motor_right[1], LOW);
}
void drive_backward(){
digitalWrite(motor_left[0], LOW);
digitalWrite(motor_left[1], HIGH);
digitalWrite(motor_right[0], LOW);
digitalWrite(motor_right[1], HIGH);
}
void turn_left(){
digitalWrite(motor_left[0], LOW);
digitalWrite(motor_left[1], HIGH);
digitalWrite(motor_right[0], HIGH);
digitalWrite(motor_right[1], LOW);
}
void turn_right(){
digitalWrite(motor_left[0], HIGH);
digitalWrite(motor_left[1], LOW);
digitalWrite(motor_right[0], LOW);
digitalWrite(motor_right[1], HIGH);
}
실행해 보면, 다음과 같이 좌, 우측 모터가 코딩한 대로 동작하는 것을 확인할 수 있다.
이제, 캐터필러로 본체를 움직이도록 해 보자. 다음과 같이 잘 동작하는 것을 확인할 수 있다.
3. 무선통신 칩
RF(Radio Frequency) 기반 무선 통신을 위해서는 nRF24송수신기 칩을 이용하면 된다. 가격은 대략 9,000~10,000원 정도 한다. 주파수는 2.4GHz를 사용하고, 데이터 전송 거리는 1000m (1km)이다. 이 때문에, RC 헬리콥터, UAV 등에서도 잘 사용된다.
nRF24L01 + ant 와 RF2400P
다음은 nRF24L01을 사용해, 두개의 아두이노 송수신기를 만든 후, 데이터를 송수신하는 예제이다.
4. 제작 사례
이제, 부품들을 이용해, RF(Radio Frequency)기반, 무선 조정 로봇을 개발할 수 있다. 아두이이노를 이용한 사례는 다음 링크를 참고하라.
다음은 아두이노 메가를 이용해, RF 신호를 받는 예이다.
레퍼런스
- Long Range, 1.8km, Arduino to Arduino Wireless Communication With the HC-12. : 6 Steps
- Simple Arduino Wireless Mesh : 5 Steps
- RF 433MHz Transmitter/Receiver Module With Arduino
- Gravity: GNSS Positioning Module High Precision GNSS Wiki - DFRobot
- Make Your Own GPS Transmitter with the HC-12 Transceiver - Projects
- Long range communication (1kilo meter) between multiple Arduinos
댓글 없음:
댓글 쓰기