프로젝트

나도 메이커! 메이커스 여러분들의 작품/프로젝트를 공유하는 공간입니다.

(6) 전도성펜 x 오렌지보드-런던시티-도시제어하기

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Ω) 다이오드 블루투스 모듈

 

 

 

 

 

하드웨어 making

 

 

 

 

 

 

소프트웨어 coding 및 스마트폰 페어링

 

 

 

1. ATcommand 진입하여 블루투스 모듈 이름 변경하기

 

(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' 문구가 출력되면 블루투스 모듈 이름 변경 성공!

 

 

 

 

2. 런던시티 제어하기 위한 소스코드 작성 하기

 

- 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 범위의 값으로 제어 합니다.
    }
  }
}

 

 

 

 

 

 

3. 블루투스 모듈 - 스마트폰 페어링 하기 & 어플리케이션 셋팅하기

 

* 어플리케이션 다운로드 링크 : http://bitly.kr/FafE

   (플레이스토어에서 검색되지 않습니다)

 

 


 

작동 영상

 

kocoafab

전도성펜, 런던시티 키트, 아두이노, 오렌지보드