【 레오나르도활용#3】 온도& 밝기값 PC로 비주얼화 하기 (Leonardo)
아두이노 레오나르도(Leonardo)를 통해 온도 센서와 광센서(CDS)의 데이터를 실시간으로 PC로 수집도 하고, 이 데이터를 프로세싱(Processing) IDE를 통해 보기 좋게 비주얼화 해보자. 물론 이렇게 수집된 데이터는 엑셀로 차트를 만들어 볼 수 있어 이번 프로젝트는 활용도가 매우 높다. 코딩도 생각만큼 길지 않으니 차근차근 해보면 어렵지 않다.
그럼 재미있게 즐겨보자~! Let's go~!
▶ 선수 학습 :
1. [레오나르도 활용#1] 레오나르도 보드 사용법(보드 스펙& 설치-연결 참조) ☜(클릭)
2. [레오나르도 활용#2] 온도와 밝기 값 PC로 수집하기(회로 연결 참조) ☜(클릭)
3. [아두이노 센서#3] TMP36 온도 센서 (온도센서 참조) ☜ (클릭)
4. [아두이노 센서#3] 포토레지스터(CDS) 제어(cds 광센서 참조) ☜ (클릭)
▶ 실습 목표 :
1. [ 레오나르도 보드에 온도센서(Tmp36)와 광센서(cds) 회로를 연결하고 동작시킬 수 있다.]
2. [ 온도센서와 광센서로 부터의 데이터 값을 PC메모장을 통해 전송시킬 수 있다.]
3. [ 전송된 데이터를 엑셀 등을 이용해서 활용해 볼 수 있다 ]
4. [ 전송된 데이터를 프로세싱 IDE 코딩을 통해 보기 좋게 비주얼화 시킬 수 있다. ]
▶ 실습 회로도면 : 앞선 실습1과 회로 연결은 동일합니다.
(이미지 클릭하면 확대 가능)
▶ 실행 결과 이미지 :
▶ 【아두이노 코딩】 :
/* Leonardo 보드로 온도 & 밝기 데이터 수집하기 */
#include <Keyboard.h>
const int TEMP = 0; // A0 포트
const int CDS = 1; // A1 포트
const int LED = 12;
const int BUTTON = 11;
boolean lastBtn = LOW;
boolean currentBtn = LOW;
boolean running = false;
int counter = 1;
void setup ( ) {
pinMode(LED, OUTPUT);
Keyboard.begin();
}
void loop ( ) {
currentBtn = debounce (lastBtn);
if (lastBtn == LOW && currentBtn == HIGH) //버튼 누름
{
running = !running; // 상태 값 반대로 변경
}
lastBtn = currentBtn; // 버튼 상태값 업뎃
if (running) // 데이터 기록 중
{
digitalWrite(LED, HIGH);
// millis() 함수는 데이터를 ms 단위로 반환해 줌, 백그라운드 동작
// delay() 함수를 사용할 수 없을 때 사용
if (millis()%1000 == 0) // 1초마다 if문을 실행
{
int temperature = analogRead(TEMP);
int brightness = analogRead(CDS);
float mVoltage = temperature*5000.0/1024.0; //섭씨온도 값 변환
float TempDotC = (mVoltage - 500) / 10.0; //섭씨온도값 변환
Keyboard.print(counter); // 데이터 앞줄마다 번호 매김
Keyboard.print(",");
Keyboard.print(TempDotC); // 온도 데이터
Keyboard.print(",");
Keyboard.print(brightness); // 밝기 데이터
Keyboard.print("\n");
counter++;
}
}
else
{
digitalWrite(LED, LOW);
}
}
//버튼의 체터링 현상 방지를 위한 서브 함수 생성
boolean debounce (boolean last)
{
boolean current = digitalRead (BUTTON);
if(last != current)
{
delay(5);
current = digitalRead(BUTTON);
}
return current;
}
▶ 아두이노 파일다운 :
(다운로드하여서 압축을 풀어 사용하세요)
▶ 【프로세싱 코딩】 :
/* Leonardo 보드의 온도 & 밝기 데이터 비주얼화 하기 */
PImage imgCDS;
PImage imgTemp;
PFont font;
import processing.serial.*;
Serial port;
String temp ="";
String br ="";
String data="";
int index=0;
void setup () {
size(800, 600); // 출력 화면 크기 설정
background(255);
port =new Serial(this, "COM21", 9600); //보드와 통신 포트 번호를 일치시킴
port.bufferUntil('.');
font=loadFont("Arial-Black-50.vlw"); // 출력에 표시할 폰트 지정
textFont(font, 200); // 출력 폰트 사이즈 조절
}
void draw() {
background(255,255,255);
imgTemp = loadImage("Temp1.png"); // 온도 이미지 삽입
imgCDS = loadImage("cds1.png"); // cds 이미지 삽입
image(imgTemp, 0, 0); // ('이미지 이름', '위치 x', '위치 y')
image(imgCDS, 450, 10, 250,250); //('이미지 이름', '위치 x', '위치 y', '폭', ;높이')
fill(150, 150, 10);
text(temp, 70, 500); // ('데이터 변수명', '위치 x', '위치 y')
fill(50, 0, 200);
text(br, 450, 500);
}
void serialEvent(Serial port) { // 통신 데이터가 있을 경우 실행
data=port.readStringUntil('.'); // 마침표를 읽을 때까지 이벤트를 실행
data=data.substring(0, data.length()-1); // 첫 번째 데이터 값 저장
index=data.indexOf(","); // 데이터를 '콤마' 기준으로 구분
temp=data.substring(0, index);
br=data.substring(index+1, data.length()); // 두 번째 데이터 값 저장
}
▶ 프로세싱 코드 다운로드 :
(다운로드하여서 압축을 풀어 사용하세요)
▶ 프로세싱에서 글꼴 생성
(프로세싱 출력 화면에서 윈도의 폰트를 사용하기 위해서는 아래와 같은 과정을 통해 , 프로세싱에서 사용할 수 있는 비트맵 형태의 폰트로 변환하는 과정이 필요하다)
[ 도구 메뉴 》 글꼴 생성 》 폰트(크기) 선택 》 OK클릭 》 파일 이름 복사 》 프로세싱 코드에 붙여 넣기 ]
▶ 영상강좌 :
(전체 화면 & 고화질 보기로 보세요)
(카카오로 TV로 보기)
▶ 에러 대처 :
【 아두이노 IDE에서 스케치를 실행할 때 아래와 같은 에러가 나타날 경우 】
'Keyboard' 가 없습니다. 스케치에서 '#include '를 포함했나요?
분명, 'Keyboard.h 헤더 파일을 추가하였지만 에러가 나게 되는데
만약 위와 같은 에러가 나타난다면, 아두이노 스케치에서 툴 메뉴 아래 보드 메뉴에서 보드를 Leonardo 보드로 선택을 하였는 확인이 필요하다. 보드 선택이 Leonardo로 선택이 되어 있지 않다면, 컴파일만 하더라도 실행이 되지 않고 이와 같이 'Keyboard' 에러를 발생시키게 된다.
'아두이노 > 5. 아두이노-프렌즈' 카테고리의 다른 글
【 레오나르도활용#3】어두워 지면 PC 화면 잠그기 (Leonardo) (3) | 2019.06.10 |
---|---|
【 Leonardo #3】 Visualize Temperature& Brightness Data on your PC with Leonardo (0) | 2019.05.28 |
【 Leonardo #1】 Let's collect Temperature & Brightness data to PC! (0) | 2019.05.15 |
【 레오나르도활용#2】 온도와 밝기값 PC로 수집하기 (Leonardo #2) (0) | 2019.05.15 |
【 레오나르도활용#1】 아두이노 레오나르도 보드 사용법 (Leonardo #1) (0) | 2019.05.13 |