아두이노 코딩-166: Bluetooth Processing 코드에 의한 아두이노 LED Dimmering

in #kr6 years ago (edited)

윈도우즈7 PC에서 Blutooth 설정을 통해 수신 및 발신 COM포트가 설정되었으면 이 중 발신COM 포트를 사용하여 Processing 으로 코딩을 진행하자.

noname01.png

Processing 헤더 영역에서 시리얼 인터페이스를 위한 라이브러리를 불러들이자.
import processing.serial.*;

블루투스 통신의 기본 원칙 중의 하나가 반드시 시리얼 인터페이스 형식을 통해 구현된다는 점이다. 물론 윈도우즈 PC에 설치되어 있는 USB 포트에 유선 방식의 아두이노 USB 케이블을 설치하면 아두이노 보드를 인식하는게 표준이겠지만 무선 방식의 블루투스 동글을 USB 포트에 설치해도 PC에서 유사한 방식으로 COM 포트를 할당하되 ZIO BT-40의 경우에서처럼 수신과 발신을 나누어 따로따로 하나씩 항당하게 된다.

라이브러리를 불러들인 후 클라스 명령인 Serial을 간단히 port 로 선언해 두자.
setup() 문에서 Processing 의 그래픽 화면을 (256, 150)으로 설정한다. 폭을 256으로 설정하면 마우스를 스캔함에 따라 0∼255까지의 정수 값을 생성할 수 있다. 이 값을 즉시 전송하여 아두이노에 설치된 LED에 anlogWrite 명령을 적용함에 있어서 LED 의 밝기 값을 실시간으로 부여할 수 있다.

예전 프로젝트 사례를 보면 이더넷과 같이 유선인 경우는 연속적인 밝기 변화를 볼 수 있었으나 HTTP 방식에 의해 ESP8266 칩을 장착한 WeMos D1 보드의 경우에는 와이파이 통신을 주고 받으며 확인하는 과정에 의해서 밝기가 불연속적으로 변하는 것을 관찰할 수 있었다. 블루투스의 경우도 무선이지만 와이파이 방식과는 달리 통신속도가 이더넷의 유선 방식처럼 빨라 연속적인 밝기 변화를 관찰할 수 있어 큰 장점으로 볼 수 있다.

noname02.png

Serial.list() 명령에 따른 출력 결과는 현재 실행 중인 Processing 이 PC에서 점유하고 있는 장치 관리자 정보를 나타낸다. 다음과 같이 콘솔 창에 출력 결과를 볼 수 있는데 COM34 가 이미 HC-06 블루투스보드로 가는 발신 포트임을 Bluetooth COM 포트 정보에서 알고 있어야 할 것이다. 왜냐하면 사용자가 설정했으므로.

noname03.png

Processing 코드 와 아두이노와의 통신에서 유선 USB케이블을 사용한다면 바로 앞에서 확인한 것처럼 new Serial() 명령에 Serial.list()[5]...를 사용하면 된다. [5]는 [0],[1]...{4},[5] 다음의 6번째 포트를 의미하기 때문이다.
port = new Serial(this, Serial.list()[5], 9600);
아니면 직접적으로 COM포트를 다음과 같이 입력할 수도 있다.
port = new Serial(this, "COM34", 9600);
baud rate 9600 도 조심해야 한다. 아두이노 보드에서 HC-06의 baud rate를 혹시 변경하지 않았는지 확인하기 바란다.

noname04.png

무한 loop를 도는 draw()문을 작성하자. 0∼255까지 명암이 들어간 그래픽 화면을 준비하자. stroke(255, i, i) 가 그 명령어인데 다음 그림을 참조해서 사용자가 원하는 패턴으로 명암을 생성해 보자.

noname05.png

line(i, 0, I, 150) 명령은 좌표(i,0)에서 (i,150)까지 정해진 stroke 컬러대로 수직선을 조밀하게 긋는 알고리듬이다. Processing 에서 원점은 좌측 상단임에 유의하자.
마지막 port.write 명령에서 port는 블루투스 통신을 위해 이미 클라스 명령 Serial에서 port 로 설정이 되었으며 Processing에서 write 명령은 바이트 데이터를 출력하게끔 설정되어 있다. 특히 mouseX 라는 명령은 현재 실행 중인 그래픽 화면에서 마우스의 X좌표 값을 읽어낸다. 그래픽 화면의 범위가 0∼255이므로 어느 값을 읽어도 8비트 1바이트 정수형 데이터로 적합함을 알 수 있다.

아두이노 측에서 컴파일 업로딩 후 RX, TX 점퍼선을 끼워 HC-06의 LED가 껍뻑이는 준비 상태에서 Processing 코드를 실행하면 Pairing이 되면서 아두이노 보드의 LED를 Dimmering 시킬 수 있게 된다.

//Processing_Dimmer_01
import processing.serial.*;
Serial port;

void setup() {
size(256, 150);

println("Available serial ports:");
println(Serial.list());

port = new Serial(this, "COM34", 9600);
//port = new Serial(this, Serial.list()[4], 9600);

}

void draw() {
// draw a gradient from black to white
for (int i = 0; i < 256; i++) {
stroke(255,i,i);
line(i, 0, i, 150);
}

// write the current X-position of the mouse to the serial port
port.write(mouseX);

}//End of Processing program

아두이노 배선과 코딩

아두이노 배선은 다음 그림을 참조하자.

noname06.png

반드시 HC-0으로부터의 RX, TX 점퍼선을 뽑아둔 상태에서 아두이노 코드를 컴파일 업로딩 한 후 다시 점퍼선을 끼우도록 한다. Paring 되기 전까지는 계속 껌뻑거린다.

#Dimmer_01
const int ledPin = 9; // LED 설치 데이터 핀 번호
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}

void loop() {
byte brightness;

if (Serial.available()) { // 프로세싱의 시리얼 출력 여부 확인
brightness = Serial.read(); // 프로세싱의 시리얼 출력 결과물 확인
analogWrite(ledPin, brightness);// 밝기 지정에 따른 LED on
}
}//프로그램 끝

Sort:  

jjm.jpeg
짱짱맨 호출에 응답하여 보팅하였습니다.

짱짱맨은 저자응원 프로그램입니다. 더 많은 저자 분들에게 더 큰 혜택을 드리고자 스파임대 스폰서를 받고 있습니다. 스폰서 참여방법과 짱짱맨 프로그램에 관해서는 이 글을 읽어 주세요. 기업형 예비증인 북이오(@bukio)가 짱짱맨 프로그램을 운영하고 있습니다. 여러분의 증인 보팅은 큰 힘이 됩니다. Vote for @bukio

Coin Marketplace

STEEM 0.19
TRX 0.15
JST 0.029
BTC 63101.67
ETH 2588.03
USDT 1.00
SBD 2.74