반응형

【 아두이노모듈#18】아두이노 2대 블루투스 통신: 볼륨(Var)으로 서보모터 제어! (HC-05

 지난시간 블루투스 모듈을 이용하여 간단히 스위치(LED On/Off)제어 실습을 해보았다. 이제부터는 본격적으로 좀더 다양하고 활용도가 높은 것들을 제어 해보도록 하자. 

 이번시간에는 가변저항(Variable Resistor)을 돌려 저항값을 변화 시키면 블루투스로 페어링(연결)된 아두이노 회로2의 서보모터를 작동 시켜볼 것이다.   더불어 가변저항을 돌릴 때 변화되는 모습을 눈으로 직관할 수 있도록 LED도 달아 보았다. 

 선이 없는 무선은 자유로움과 함께 흥미로움도 한 층 끌어 올려 줄 것이다.  그럼,  Let's get it~!

 

▶ 선수 학습 :

   1. [아두이노모듈#16] 아두이노 2대로 블루투스통신! (블루투스 기본설정법)  ☜ (클릭)

   2. [아두이노기초#17] 아두이노 블루투스 ... LED On/Off 제어(블루투스 기초사용법)  ☜ (클릭)

   3. [아두이노에러해결#4] 서보모터 떨림 현상해결 (서보모터&블루투스 에러 대처)  ☜ (클릭)

 

▶ 실습 회로 도면 :

【회로 1- 서보모터-Slave 회로】

 

【회로 2- Var-LED-Master 회로】

 

▶ 실습목표  :  

    1. 블루투스 모듈(HC-05,06)의 설정과 사용법에 대해 익힌다. (페어링, 기타 설정법)

    2. 블루투스 상호간 통신을 이해하고, 이를 이용해 아두이노 상호간 데이터를 주고 받거나 제어할 수 있다.

    3. 블루투스 통신을 통해 서보모터의 회전(위치)제어를 할 수 있다(블루투스 데이터 처리법 등)

 

▶ 실습절차  :  

   1.  위 회로 1의 도면을 보고 회로를 구성하라. "회로1"의 HC-05 모듈은 'Slave' 모드로 설정한다. 

   2.  위 회로 2의 도면을 보고 회로를 구성하라. "회로2"의 HC-05 모듈은 'Master' 모드로 설정한다.  

   3.  아래에 있는 각각의 아두이노 코드를 보고, 작성하거나 다운받아 각각의 아두이노에 업로드 한다. 

   4.  '회로1'과 '회로2'에 전원을 공급하고 인접하게 두 면 페어링(연결)에 성공한다.

   5. '회로2'의 VAR(가변저항)의 레버를 손으로 돌리면 저항값이 변화되고, 변화되는 정도에 따라 LED 밝기가 변하며, 그 값을 블루투스 모듈을 통해 전송한다. 

   6.  '회로1'에서는 블루투스 데이터를 전달 받아서 서보모터가 범위 영역에서 잘 회전을 하는지 확인 한다. 

   7.  아래 코드는 기본 제어 코드에서 서보모터의 떨림현상을 제어하기 위한 코드가 추가 되었다.  이 부분에 대해 확인 및 이해를 하고, 본인만의 제어 코드를 적용해 보라. ( 선수학습 3번, "... 서보모터 떨림 현상 해결편" 참조 ) 

▶ 코딩 :

 【 '코드 1'- 서보모터-Slave 회로】

/* 블루투스 LED버튼 켜기 & VAR-Servo Control [ Servo part ] */
/* 아두이노/라즈베리파이-IOT 교육자료는 Rasino.tistory.com   */
#include <SoftwareSerial.h>
#include <Servo.h>
#define servoPin 10
SoftwareSerial BTSerial(2, 3); // BTSerial(Rx, Tx)
Servo myservo;
int BTstates=0;       // 블루투스 신호 상태 저장용 변수
int currentVar=0 ;
int previousVar=0;
int readVar = 0;

void setup()  {
  Serial.begin(9600);
  BTSerial.begin(9600);  
  myservo.attach(servoPin);
  pinMode(servoPin, OUTPUT);
}

void loop()  {  
  if (BTSerial.available())  {    
  // --- 수신되는 Var 값을 체크 후 서보 모터 구동 루틴 ---
    currentVar=BTSerial.read();
    Serial.println(currentVar);      
      // 값을 ±4 이상의 변화에서만 모터가 작동되도록하여 떨림현상 제거(값 조정가능)
      if ((currentVar > previousVar+4) or (currentVar < previousVar-4)) {
        myservo.attach(servoPin);
        myservo.write(currentVar); 
        delay(35); 
        previousVar = currentVar;        
    }   
    myservo.detach();   // 서보 모터 정지
  } 
}

 

 【 '코드 2'- VAR_LED-Master 회로】

/* 가변저항으로 서보모터 구동하기 with 블루투스 [VAR part]   */ 
#include  
#define LED 10 
#define VAR A0 
SoftwareSerial BTSerial(2, 3); // BTSerial(Rx, Tx) 
int brightness = 0; 
int readVar = 0; 

void setup()  { 
  Serial.begin(9600); 
  BTSerial.begin(9600);   
  pinMode(LED, OUTPUT); 
} 
void loop()  { 
//--- VAR 값을 체크 후 LED Fade In/Out과 서보모터 구동용 BT신호 발송  
  readVar = map(analogRead(VAR),0,1023,0,179); //서보모터 각도(0~180도) 
  brightness = map(analogRead(VAR),0,1023,0,255);//LED 밝기(0~255) 
  Serial.println(readVar); 
  Serial.println(brightness); 
  BTSerial.write(readVar);      
  analogWrite(LED, brightness);   
} 

 

▶ 아두이노 코드 다운로드 :

 

01_BT_LED_Servo.zip
0.00MB
02_BT_LED_VAR.zip
0.00MB

 

▶ 회로 동작 영상 :

(YouTube : 1080P 고화질로 보기)

https://youtu.be/LL-jOJ7VTcA

반응형