본문 바로가기

교육 자료/Raduino

12. 원격제어 로봇 - BT 이용


원격제어(Radio Control) 로봇은 전파를 보내는 송신기와 신호를 받는 수신기를 이용하여 원거리에서 로봇을 조작하는 것이다. 즉, 원격제어를 통해 사람의 센싱과 작업능력을, 사람이 존재하는 공간에서 멀리 떨어진 공간까지 확대시킬 수 있어 사람이 직접 조작하기 위험한 경우에 응용되는 등 생산성과 안전성이 높아지는 데 기여할 수 있는 기술이다. 원격제어 기술이 발전된다면, 간단한 명령만으로 여러 대의 로봇을 제어할 수도 있고, 기술이 발달하면 현장감을 생생하게 느끼면서 정밀제어도 가능해질 수 있다. 이러한 장점이 다양한 로봇과 합쳐지면 그 시너지 효과도 배로 나타날 것이다.  



블루투스는 휴대 기기들을 약 10m 이내의 근거리에서 무선으로 연결하는 통신 기술로다른 기기와의 호환성이 뛰어나고 간단한 절차만 거치면 연결도 쉽게 할 수 있다. 블루투스의 특징은 단거리저전력저비용으로 장치들을 무선 연결할 수 있도록 해준다는 것이다블루투스의 무선 시스템은 ISM 주파수 대역인 2400~2483.5MHz를 사용한다이 중 위-아래 주파수를 쓰는 다른 시스템들의 간섭을 막기 위해 2400MHz 이후 2MHz, 483.5MHz 이전 3.5MHz까지의 범위를 제외한 2402~2480MHz, 총 79개 채널을 쓴다블루투스는 무선 네트워크가 요구되는 모든 상황에 적합한 프로토콜은 아니지만근거리 통신망을 만드는데 유용한 프로토콜이며다른 프로토콜에 비해 편리한 연결 과정을 제공한다사물인터넷(IoT)의 핵심인 네트워크 환경에서 블루투스 역할의 중요성이 커지고 있다

  


블루투스 송수신 모듈 | HC-06  

블루투스

V2.0 

동작전압 

3.3V / 5V 

baud rate 

48000bps ~ 1382400bps 

크기

28 x 15 x 2.35mm 

동작전류

40mA 

대기전류 

1mA 

기본설정

Slave, 9600, N, 8, 1, pincode 1234  



BT 통신 예제 


라두이노에 블루투스 모듈을 추가하게 되면 10m 이내의 거리에서 무선으로 데이터를 보내거나 받을 수 있다. 이를 활용해 모터를 동작시켜 무선으로 기기제어가 가능하다, 통신 거리가 제한되어 있기 때문에 범위 밖을 벗어나게 되면 블루투스 모듈과 연결이 끊길 수 있다는 점을 유의하며, BT 통신 예제를 실험해보자 


준비물 : TT모터, 모터드라이버, 초음파, 적외선, 라두이노, 점퍼케이블, 데이터케이블, PC, HC-06 블루투스 모듈, 라두이노 

 

▼ 회로도





▼ 프로그램 코드 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// 모터 변수
//EN1 , IN1a , IN1b : 왼쪽모터   Motor1
//EN2 , IN2a , IN2b : 오른쪽모터 Motor2
int EN1 = 2int EN2 = 3int IN1a = 4int IN1b = 5int IN2a = 6int IN2b = 7;
 
// HC-SR04
// trig 53 , echo 50 : 왼쪽 초음파센서
// trig 8  , echo 10 : 오른쪽 초음파센서
int trig[2= {53,8};   int echo[2= {50,10};
int distance[2]; int Tdis[2];
 
// 적외선센서 GP2Y0A41SK0F
int IR_Sensor = A0; int IRDistance;
float Voltage;
 
void Motor1(int pwm){  
  if(pwm>=0) {
    digitalWrite(IN1a, HIGH);    
    digitalWrite(IN1b, LOW);    
  }
  else {
    digitalWrite(IN1a,LOW);
    digitalWrite(IN1b,HIGH);
  }
  analogWrite(EN1, abs(pwm));
}
 
void Motor2(int pwm){  
  if(pwm>=0) {
    digitalWrite(IN2a, HIGH);    
    digitalWrite(IN2b, LOW);    
  }
  else {
    digitalWrite(IN2a,LOW);
    digitalWrite(IN2b,HIGH);
  }
  analogWrite(EN2, abs(pwm));
}
 
float us_op(int num)
{
  float Dis=0;
  digitalWrite(trig[num], HIGH);                                
  delayMicroseconds(10);                                       
  digitalWrite(trig[num], LOW);                                  
  distance[num] = pulseIn(echo[num], HIGH, 5000L) * 17/1000
  
  Dis = distance[num];
  if(Dis<=0) Dis=0;
  if(Dis>30) Dis=0;
  distance[num]=0;  
  return Dis;
}
 
void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);
  
  int i; 
  for(i=0; i<2; i++){
    pinMode(trig[i], OUTPUT);  pinMode(echo[i], INPUT);
  }  
  for(i = 2; i<=7;i++)  pinMode(i,OUTPUT);
}
 
void loop() 
{
  Voltage = analogRead(IR_Sensor)*0.0048828125;  // value from IR_Sensor * (5/1024)
  IRDistance = 13*pow(Voltage, -1); // worked out from datasheet graph
  if(IRDistance > 15) IRDistance = 0;
 
    if(Serial1.available())
    {
      char bt = Serial1.read();
      Serial.println(bt);
      if(bt == '5') {
        Motor1(0);
        Motor2(0);
      }
      if(bt == '1') {
        Motor1(100-int(1500/us_op(1))-int(1500/IRDistance));    
        Motor2(100-int(1500/us_op(0))+int(1500/IRDistance));
      }
      if(bt == '2'){
        Motor1(-100); 
        Motor2(-100);
      }
      if(bt == '3'){
        Motor1(-100); 
        Motor2(100);
      }
      if(bt == '4'){
        Motor1(100); 
        Motor2(-100);
      }
    }
}
cs


▼ 소스코드 다운로드 

BT_car_1026.zip


▼ 스마트폰 앱 개발 




▼ 앱 인벤터 BLE 조종 프로그램 






실행파일 : BT 자동차 어플리케이션 설치 파일

BT_car.apk