코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2018-12-27 15:28:11
런던시티 키트는 '소프트웨어 코딩 + 오렌지보드 활용 + 전도성펜 회로이해'의 삼박자를 모두 갖춘 키트로
소프트웨어 코딩교육(엔트리, 스크래치, 스케치 등)을 초급부터 고급까지 단계별로 실습해 볼 수 있으며,
오렌지보드로 실습결과를 직접 확인할 수 있습니다.
안드로이드와 오렌지보드 BLE, 또는 블루투스 모듈 간의 블루투스 통신에 대해 자세히 알고 싶으신 분들은 아래 링크를 참고하시길 바랍니다.
- 안드로이드와 아두이노 간의 블루투스 통신 기초 : http://kocoafab.cc/tutorial/view/97
- 안드로이드와 아두이노 간의 블루투스 통신 응용 : http://kocoafab.cc/tutorial/view/96
이 밖에 블루투스 통신을 이용한 튜토리얼이 업로드 되어 있으니, 코코아팹 홈페이지 검색 란에 '블루투스'로 검색 후 다른 실습 예제들을 참고해 주세요!
※ 부품 목록은 기본적인 가이드를 위해 작성된 것으로 자유롭게 사용하고 싶은 부품을 이용하여 만들어 주시면 됩니다.
반드시 아래의 목록에 있는 부품들만 이용해야 되는 것은 아니니 참고만 해 주시길 바랍니다!
No | 부품명 | 수량 | 상세 설명 |
1 | 오렌지 보드(또는 오렌지 보드 BLE) | 1 | |
2 | 브레드 보드 | 2 | |
3 | 점퍼케이블 | 20 | |
4 | DC모터 | 1 | |
5 | 트랜지스터(npn형-KSP2222A) | 1 | |
6 | 저항(330Ω) | 1 | |
7 | 다이오드 | 1 | |
8 | 블루투스 모듈 | 1 |
HC-05, HC-06 본 예제 에서는 HC-06 사용 |
부품명 | 오렌지보드 | 브레드보드 | 점퍼케이블 | DC모터 |
파트 |
트랜지스터 | 저항(330Ω) | 다이오드 | 블루투스 모듈 |
(1) AT Command 진입을 위한 소스 작성하기
오렌지보드 BLE가 아닌 블루투스 모듈(HC-05, HC-06)을 사용하여 연결할 때는 모듈에 대한 기본정보 세팅(예 : 모듈 이름 변경)이 필요합니다.
이런 기본 정보들은 ATcommand 를 이용해 설정/변경 할 수 있습니다.
아래의 튜토리얼 링크를 클릭 하시면 더 다양한 AT명령어와 HC-05/HC-06의 차이점, 설정 방법 등을 알 수 있습니다.
(블루투스 모듈 ATCommand 모드 사용하기 : http://kocoafab.cc/tutorial/view/619)
간단하게 ATcommand 를 이용해 블루투스 모듈의 이름을 변경해 보도록 하겠습니다.
먼저, 아래의 소스를 작성한 뒤 업로드를 완료시켜 줍니다.
/*
제목 : 블루투스 모듈 사용하기
내용 : 블루투스 모듈 ATcommand 사용하기
*/
#include <SoftwareSerial.h> // 블루투스 통신을 위한 SoftwareSerial 라이브러리를 불러옵니다.
SoftwareSerial BTSerial(2, 3); // 블루투스 모듈 사용을 위한 RX(디지털 2번) 와 TX(디지털 3번) 포트를 설정합니다.
void setup() {
Serial.begin(9600); // Serial 통신 속도를 9600 으로 정해줍니다.
BTSerial.begin(9600); // 블루투스 모듈 UART 통신 속도를 9600 으로 맞춰줍니다. (HC-06 기본 통신 속도 9600)
Serial.println("ATcommand"); // 시리얼 모니터에 "ATCommand" 텍스트를 출력합니다.
}
void loop() {
if (BTSerial.available()) // 만약, 블루투스 모듈로부터 데이터가 수신되면
Serial.write(BTSerial.read()); // 블루투스 모듈로부터 수신된 데이터를 시리얼 모니터에 출력합니다.
if (Serial.available()) // 만약, 시리얼 모니터로부터 데이터가 수신되면
BTSerial.write(Serial.read()); // 시리얼 모니터로부터 수신된 데이터를 블루투스 모듈에서 읽어줍니다.
}
(2) 시리얼 모니터에서 ATcommand 입력하기
소스 업로드 완료 후 시리얼 모니터 창을 열어줍니다.
'AT' 명령어를 입력해 AT모드에 진입이 잘 되었는지 확인합니다. 'OK' 문구가 출력되면 AT모드 진입 성공!
'AT+NAME변경할이름' (ex:AT+NAMESMLEE)명령어를 입력해 블루투스 모듈의 이름을 변경해 줍니다.
'OKsetname' 문구가 출력되면 블루투스 모듈 이름 변경 성공!
- LED 한꺼번에 제어하는 소스 코드
/*
제목 : 블루투스 통신으로 런던시티 제어하기
내용 : 블루투스 모듈 이용한 런던시티 제어하는 소스코드를 작성해 봅니다.
*/
#include <SoftwareSerial.h> // 블루투스 통신을 위한 SoftwareSerial 라이브러리를 불러옵니다.
SoftwareSerial BTSerial(2, 3); // 블루투스 모듈 사용을 위한 RX(디지털 2번) 와 TX(디지털 3번) 포트를 설정합니다.
int motor = 11; //DC모터를 11번 핀으로 설정합니다.
int LED_1 = 4; //LED_1를 4번 핀으로 설정합니다.
int LED_2 = 6; //LED_2를 6번 핀으로 설정합니다.
int LED_3 = 9; //LED_3를 9번 핀으로 설정합니다.
int LED_4 = 12; //LED_4를 12번 핀으로 설정합니다.
void setup() {
Serial.begin(9600); // Serial 통신 속도를 9600 으로 정해줍니다.
BTSerial.begin(9600); // 블루투스 모듈 UART 통신 속도를 9600 으로 맞춰줍니다. (HC-06 기본 통신 속도 9600 bps)
Serial.println("Welcome to London city!"); // 시리얼 모니터에 "Welcome to London city!" 텍스트를 출력합니다.
pinMode(LED_1, OUTPUT); // 디지털 4번 핀에 연결된 LED_1를 OUTPUT 으로 설정합니다.
pinMode(LED_2, OUTPUT); // 디지털 6번 핀에 연결된 LED_2를 OUTPUT 으로 설정합니다.
pinMode(LED_3, OUTPUT); // 디지털 9번 핀에 연결된 LED_3를 OUTPUT 으로 설정합니다.
pinMode(LED_4, OUTPUT); // 디지털 12번 핀에 연결된 LED_4를 OUTPUT 으로 설정합니다.
pinMode(motor, OUTPUT); // 디지털 11번 핀에 연결된 motor를 OUTPUT 으로 설정합니다.
}
void loop() {
if (BTSerial.available()) { // 만약, 블루투스 모듈로부터 데이터가 수신되면
byte data = BTSerial.read(); // 블루투스 모듈로부터 수신된 데이터를 byte형의 'data' 변수에 저장합니다.
Serial.println(data); // 'data'변수에 저장된 값을 시리얼 모니터에 출력합니다.
if (data == 'A') {
digitalWrite(LED_1, HIGH); // LED_1에 연결된 핀의 로직레벨을 HIGH(5V)로 설정하여, LED가 켜지도록 합니다.
digitalWrite(LED_2, HIGH); // LED_2에 연결된 핀의 로직레벨을 HIGH(5V)로 설정하여, LED가 켜지도록 합니다.
digitalWrite(LED_3, HIGH); // LED_3에 연결된 핀의 로직레벨을 HIGH(5V)로 설정하여, LED가 켜지도록 합니다.
digitalWrite(LED_4, HIGH); // LED_4에 연결된 핀의 로직레벨을 HIGH(5V)로 설정하여, LED가 켜지도록 합니다.
Serial.println("LED ON");
}
else if (data == 'B') {
digitalWrite(LED_1, LOW); // LED_1에 연결된 핀의 로직레벨을 LOW(0V)로 설정하여, LED가 꺼지도록 합니다.
digitalWrite(LED_2, LOW); // LED_2에 연결된 핀의 로직레벨을 LOW(0V)로 설정하여, LED가 꺼지도록 합니다.
digitalWrite(LED_3, LOW); // LED_3에 연결된 핀의 로직레벨을 LOW(0V)로 설정하여, LED가 꺼지도록 합니다.
digitalWrite(LED_4, LOW); // LED_4에 연결된 핀의 로직레벨을 LOW(0V)로 설정하여, LED가 꺼지도록 합니다.
Serial.println("LED OFF");
}
else if (data == 'C') {
analogWrite(motor, 255); // DC모터의 회전속도를 0~255 범위의 값으로 제어 합니다.
Serial.println("MOTOR ON");
}
else if (data == 'D') {
analogWrite(motor, 0); // DC모터의 회전속도를 0~255 범위의 값으로 제어 합니다.
Serial.println("MOTOR OFF");
}
}
}
- LED 각각 제어하는 소스 코드
/*
제목 : 블루투스 통신으로 런던시티 제어하기_2
내용 : 블루투스 모듈 이용한 런던시티 제어하는 소스코드를 작성해 봅니다.
*/
#include <SoftwareSerial.h> // 블루투스 통신을 위한 SoftwareSerial 라이브러리를 불러옵니다.
SoftwareSerial BTSerial(2, 3); // 블루투스 모듈 사용을 위한 RX(디지털 2번) 와 TX(디지털 3번) 포트를 설정합니다.
int motor = 11; //DC모터를 11번 핀으로 설정합니다.
int LED_1 = 4; //LED_1를 4번 핀으로 설정합니다.
int LED_2 = 6; //LED_2를 6번 핀으로 설정합니다.
int LED_3 = 9; //LED_3를 9번 핀으로 설정합니다.
int LED_4 = 12; //LED_4를 12번 핀으로 설정합니다.
void setup() {
Serial.begin(9600); // Serial 통신 속도를 9600 으로 정해줍니다.
BTSerial.begin(9600); // 블루투스 모듈 UART 통신 속도를 9600 으로 맞춰줍니다. (HC-06 기본 통신 속도 9600 bps)
Serial.println("Welcome to London city!"); // 시리얼 모니터에 "Welcome to London city!" 텍스트를 출력합니다.
pinMode(LED_1, OUTPUT); // 디지털 4번 핀에 연결된 LED_1를 OUTPUT 으로 설정합니다.
pinMode(LED_2, OUTPUT); // 디지털 6번 핀에 연결된 LED_2를 OUTPUT 으로 설정합니다.
pinMode(LED_3, OUTPUT); // 디지털 9번 핀에 연결된 LED_3를 OUTPUT 으로 설정합니다.
pinMode(LED_4, OUTPUT); // 디지털 12번 핀에 연결된 LED_4를 OUTPUT 으로 설정합니다.
pinMode(motor, OUTPUT); // 디지털 11번 핀에 연결된 motor를 OUTPUT 으로 설정합니다.
}
void loop() {
if (BTSerial.available()) { // 만약, 블루투스 모듈로부터 데이터가 수신되면
byte data = BTSerial.read(); // 블루투스 모듈로부터 수신된 데이터를 byte형의 'data' 변수에 저장합니다.
Serial.println(data); // 'data'변수에 저장된 값을 시리얼 모니터에 출력합니다.
if (data == 'A') {
digitalWrite(LED_1, HIGH); // LED_1에 연결된 핀의 로직레벨을 HIGH(5V)로 설정하여, LED가 켜지도록 합니다.
}
else if (data == 'B') {
digitalWrite(LED_1, LOW); // LED_1에 연결된 핀의 로직레벨을 LOW(0V)로 설정하여, LED가 꺼지도록 합니다.
}
else if (data == 'C') {
digitalWrite(LED_2, HIGH); // LED_2에 연결된 핀의 로직레벨을 HIGH(5V)로 설정하여, LED가 켜지도록 합니다.
}
else if (data == 'D') {
digitalWrite(LED_2, LOW); // LED_2에 연결된 핀의 로직레벨을 LOW(0V)로 설정하여, LED가 꺼지도록 합니다.
}
else if (data == 'E') {
digitalWrite(LED_3, HIGH); // LED_3에 연결된 핀의 로직레벨을 HIGH(5V)로 설정하여, LED가 켜지도록 합니다.
}
else if (data == 'F') {
digitalWrite(LED_3, LOW); // LED_3에 연결된 핀의 로직레벨을 LOW(0V)로 설정하여, LED가 꺼지도록 합니다.
}
else if (data == 'G') {
analogWrite(motor, 255); // DC모터의 회전속도를 0~255 범위의 값으로 제어 합니다.
}
else if (data == 'H') {
analogWrite(motor, 0); // DC모터의 회전속도를 0~255 범위의 값으로 제어 합니다.
}
}
}
* 어플리케이션 다운로드 링크 : http://bitly.kr/FafE
(플레이스토어에서 검색되지 않습니다)
kocoafab