반응형

【 레오나르도활용#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;     
}

▶ 아두이노 파일다운 :
(다운로드하여서 압축을 풀어 사용하세요)

Leo_2_TMP36_CDS_LED_LIGHT.zip
0.00MB

 【프로세싱 코딩】  : 
/* 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());  // 두 번째 데이터 값 저장
}

 

▶ 프로세싱 코드 다운로드 :
(다운로드하여서 압축을 풀어 사용하세요)

imageTempCDS (Ras).zip
4.87MB

▶ 프로세싱에서 글꼴 생성
(프로세싱 출력 화면에서 윈도의 폰트를 사용하기 위해서는 아래와 같은 과정을 통해 , 프로세싱에서 사용할 수 있는 비트맵 형태의 폰트로 변환하는 과정이 필요하다)

[ 도구 메뉴 》 글꼴 생성 》 폰트(크기) 선택 》 OK클릭 》 파일 이름 복사 》 프로세싱 코드에 붙여 넣기 ]

 

▶ 영상강좌 :  
(전체 화면 & 고화질 보기로 보세요)

https://youtu.be/Hdi8QHBYS2I

 

(카카오로 TV로 보기)

 

▶ 에러 대처 :  
【 아두이노 IDE에서 스케치를 실행할 때 아래와 같은 에러가 나타날 경우 

 'Keyboard' 가 없습니다. 스케치에서 '#include '를 포함했나요?

 분명, 'Keyboard.h 헤더 파일을 추가하였지만 에러가 나게 되는데  
만약 위와 같은 에러가 나타난다면, 아두이노 스케치에서 툴 메뉴 아래 보드 메뉴에서 보드를 Leonardo 보드로 선택을 하였는 확인이 필요하다.  보드 선택이 Leonardo로 선택이 되어 있지 않다면, 컴파일만 하더라도 실행이 되지 않고 이와 같이 'Keyboard' 에러를 발생시키게 된다.  

 

반응형