작성자 : 김경만

프로세싱을 이용하여 조도센서값 시각화하기

1. 개요

현재 밝음의 정도를 측정할 수 있는 조도센서를 이용하여 수치값만을 얻어내지 않고 수치값이 원의 반지름이 되도록 시각화시켜 밝기의 변화를 한눈에 보디 쉽게 합니다. 


준비물

아두이노 기판, 브래드 보드, 조도센서, 10kΩ 저항

여기서 잠깐, 조도센서란?

cds 센서라고도 불리는 조도센서는 황화카드뮴에 다리를 붙인 센서로서 어두운 곳에서는 잘 전류가 흐르지 않다가 가시광선이 닿으면 전류가 잘 흐르는 성질을 가지고 있습니다. 이 성질을 이용해서 어두운 곳에서는 높은 저항, 밝은 곳에서는 작은 저항을 가지고 있는 가변저항처럼 사용이 가능합니다. 


2. Breadboard & Schematic


조도센서는 빛에 따라 저항값이 바뀌는 것을 이용해서 입력핀에 들어온 전류값으로 빛의 양을 판단하는 것입니다. 그렇기 때문에 항상 일정하고 정확한 전압이 가해져야만 정확한 빛의 정도를 측정할 수 있습니다. 그래서 5V와 연결하는 것이며 아날로그값이기 때문에 A0에 연결하였습니다. 10kΩ 저항을 사용한 이유는 두 갈래길 중 큰 저항이 한쪽에 있음으로써 적은 전류값이 A0에 들어가게해서 안정된 구조를 이룰 수 있기 때문입니다. 




3. Code

① 아두이노

②프로세싱

아두이노에게 받은 수치값으로 원을 그려야 합니다.

4. Video



중간에 연속적인 데이터 통신으로 잠깐 멈칫하기도 한다. 이때는 아두이노와 프로세싱의 주기가 돌때의 딜레이를 잘 조절하여 데이터가 원활하게 이동될 수 있도록 해야합니다. 


5. 결론

조도센서에 대해 배우기 전 조도센서가 빛의 양을 측정하여 수치값을 아두이노에게 보내주는 것으로 알고있었습니다. 이 프로젝트를 진행하며 조도센서가 빛의 양에 따라 저항을 바꾸는 것이며 아두이노가 그 전류값들을 받아 수치값들을 계산하는 것임을 알았습니다. 또한 프로세싱을 이용하여 시각화하니 훨씬 달라지는 빛의 양을 쉽게 인지할 수 있었으며 프로세싱을 이용하여 많은 데이터들을 시각화할 수 있을것이라 생각했습니다.   



출처 <조도센서 사진 : http://dmd10.wordpress.com/2010/05/09/cds-sensor_%ED%99%A9%EC%99%95%EC%A4%80>

Posted by 김경만 트랙백 0 : 댓글 5

댓글을 달아 주세요

  1. addr | edit/del | reply banhyo 2013.11.03 17:02 신고

    소스를 똑같이 썻는데 String message = myPort.readStringUntil(10); 에에러가있다네요
    The funcyion readStringUntil(int) does not exist.
    기초가 없어서 그런데 좀 알려주세요

    • addr | edit/del 수아기 2013.11.04 19:59 신고

      해당 코드는 아두이노쪽이 아닌 프로세싱 쪽에서 수행되는 코드입니다. 프로세싱쪽에 입력하셨는지 체크해보시구요. 그래도 안되면 다시 말씀해주세요.

  2. addr | edit/del | reply 정수기 2016.05.29 02:08

    프로세싱 코트
    println(Serial.list());
    이부분에서 경고가 떠서 실행이 안됩니다
    Type String[] of the last argument to method println(Object..) doesn`t exactly match varag parameer type 어쩌구...
    저런 경고문 뜨는데 어덯게하나요

  3. addr | edit/del | reply 2016.05.29 02:20

    i는 왜 선언한거고
    serial p는 왜 한거예요?

  4. addr | edit/del | reply 정수기 2016.05.29 02:22

    import processing.serial.*;
    int i;
    Serial myPort;
    float data;

    public static int ON = 1;
    public static int OFF = 0;

    void setup(){
    size(1000,800);
    delay(3000);

    String portName= Serial.list()[0];
    printArray(Serial.list());
    myPort = new Serial(this,portName,9600);

    }

    void draw(){
    background(255);
    String message = myPort.readStringUntil(10);
    if(message!=null)
    {
    print("Received: ");
    println(message);
    data=float(message);
    }
    ellipse(500,400,data,data);
    fill(0,0,0);
    }

    //void serialEvent(Serial i){
    // String message = myPort.readStringUntil(10);
    // if(message!=null)
    // {
    // print("Received: ");
    // println(message);
    // data=float(message);
    // }
    //}
    이렇게 하니깐 되네오