【 아두이노모듈#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);
}
▶ 아두이노 코드 다운로드 :
▶ 회로 동작 영상 :
(YouTube : 1080P 고화질로 보기)
'아두이노 > 3. 아두이노 모듈' 카테고리의 다른 글
【 아두이노모듈#20】 nRF24L01 : 조이스틱으로 서보모터 무선 제어하기! (3) | 2019.07.08 |
---|---|
【 아두이노모듈#19】 nRF24L01 : 2.4G RF 무선통신 하기! ( Arduino 통신 ) (8) | 2019.07.04 |
【 아두이노모듈#17】아두이노 2대로 블루투스 통신하여 LED ON/OFF 제어 하기! (HC-05) (10) | 2019.06.18 |
【 아두이노모듈#16】 아두이노 2대로 블루투스 통신! (HC-05) (11) | 2019.06.17 |
【 아두이노모듈#15】 L9110S #1(모터 드라이버) 모듈 사용하기 (7) | 2019.05.07 |