반응형

【 아두이노모듈#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

반응형
반응형

【 아두이노모듈#17】아두이노 2대로 블루투스 통신하여 LED ON/OFF 제어하기! (HC-05

 지난 시간 HC-05 모듈을 이용해서 블루투스 설정과 기본 페어링에 대해 학습해 보았다. 

 이번 시간 부터는 본격적으로 블루투스 상호간 통신을 활용한 응용작품 들을 구현해보고자 한다. 

선없이 무선으로 컨트롤 된다는 것은 매우 매력적이며, 관심과 흥미 또한 엄청나게 커질 것이다. 

 그 첫 시간으로 블루투스(회로) 기기 상호간 버튼제어를 해보려 한다. BT Master(회로)에서 버튼을 누르면, BT Slave(회로) 에서 LED가 켜지도록 할 것이다.  또한 그 반대도 가능하도록 두 회로 모두 버튼과 LED를 달아서, 동일한 회로 두개를 만들면 된다.   코딩도 마스터, 슬레이브 구분 없이 동일한 코드를 사용한다. 


 (단, 기계식의 버튼(스위치)을 사용하게 되면 , 예전에 다룬 것처럼 채터링 현상(바운싱)이 일어 나게 되니,  채터링 방지 루틴을 참고하여 넣을 것이다.   아래, 선수 학습 참조)   

Let's get it~!

 

▶ 선수 학습 :

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

   2. [아두이노기초#06] 채터링과 디바운스 (버튼의 바운싱 현상 제거)  ☜ (클릭)

 

▶ 실습 회로 도면 :

▶ 실습목표  :  

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

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

 

▶ 실습절차  :  

    1. 위와 같은 회로 두 개를 만들고, "회로1"의 HC-05 모듈은 Master 모드로 설정한다. 

    2. "회로2" 의 HC-05 모듈은 Slave 모드로 설정하고 아래 코드를 업로드 한다. 

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

    4. '회로1'의 스위치를 누르면  숫자 '1'이 블루투스 모듈을 통해 '회로2'로 전달 되며, '회로2'에서는
        전달받는 신호('1')가 있을 경우 LED를 ON 시킨다.    그 반대의 경우도 동일하게 동작하여야 한다. 

    5. '회로1'에서 스위치를 누를 경우 '회로1' 에 있는 자신의 LED도 'SW 누름 확인'을 위해 한 번 깜빡이도록 한다.('회로2'에서도 마찬가지)

    6. 채터링(스위치의 기계적 다중 접점에 의한 바운싱 현상) 현상 해결을 위해 바운싱 방지 알고리즘을 적용한다.
       (선수학습 참조)

 

▶ 회로 동작 영상 :

 

▶ 아두이노 코드 :   (아래코드를 동일하게 만든 두 개의 회로에 각각 업로드 한다)

 

/* LED_SW On-Off  블루투스 Master/Slave code        */

#include  <SoftwareSerial.h>
#define SW 12 
#define LED 11
#define bounceTimer 200   
// 바운싱 카운트 200으로 설정 
u8 keyState = HIGH;   
// 버튼의 상태 저장용 변수
u8 bounceCount = 0; 
// 바운스 변수 선언
SoftwareSerial BTSerial(2, 3); 
// BTSerial(Rx, Tx)
int BTstates=0;         
// 블루투스 신호 상태 저장용 변수

void setup()  {
Serial.begin(9600);
BTSerial.begin(9600);  // 자신의 BT모듈의 설정값으로 변경 할 것
pinMode(SW, INPUT);
pinMode(LED, OUTPUT);
}

void loop()  {
// ---- 버튼 바운싱에러 방지 코드와 블루투스 신호 발신 영역 ----
  u8 key = digitalRead(SW); 
// 버튼 값 읽어 key변수에 저장
  if(key == HIGH)  {          
// 버튼이 눌러졌다면
    if(keyState == LOW) {     
// 이전의 버튼 상태가 LOW 였었다면
          if(bounceCount == 0) {  
            bounceCount = bounceTimer;   
            Serial.println("Push");          
            BTSerial.write('1'); 
// 버튼이 눌러졌으니,블루투스를 통해1을 전송
            digitalWrite(LED, HIGH); 
//버튼 눌림 확인용 LED On
            delay(100);
            digitalWrite(LED, LOW); 
//버튼 눌림 확인용 LED Off
            keyState = key;   
// 현재의 키값 저장
          }  
          else {
              bounceCount --; 
//  바운스 카운트 값 감소
          }      
    }    
  }    
  else{                          
 // 버튼이 안 눌러졌었다면
    if(keyState == HIGH)  {    
// 이전의 상태가 눌린 상태였다면
      Serial.println("Pull");    
 // 버튼을 놓은(Pull) 것임 
      keyState = key;   }     
 // 놓은(Pull)버튼 상태 저장
  }

//--- 수신되는 블루투스 신호 체크 후 LED ON/OFF 루틴 ---
  if (BTSerial.available())
  {
    char str=BTSerial.read();
    if (str=='1')
    {
      BTstates=!BTstates;
      Serial.println(str);
      digitalWrite(LED, BTstates);
    }    
  } 
}

 

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

02_LEDSW_MS.zip
0.00MB

 

▶ 전체 과정 영상 :

(YouTube 1080P로 보기)

https://youtu.be/NqZV7kYnl-I

 

(카카오)

 

반응형