Ezduino Firefly

반딧불이

한여름밤을 수놓는... 이라는 수식어로 설명되는 반딧불이, 이제 우리나라 여름밤을 수놓긴 커녕 찾아보기 조차도 힘들게 된 것이 사실이다. 80년대생도 본 기억이 가물가물할 정도인데 2010년대생은 그야말로 구글 이미지로나 볼 수 있는 존재가 되지 않았나 싶다.

Ezduino Kit 프로젝트 2탄으로 제작해보았다.

반딧불이 키트 사진

부품

1. 광센서

빛의 세기를 수치로 바꾸어주는 광센서는 5V 전압과 10k 저항 한개를 필요로 한다. 전압분배의 법칙을 사용하여 센서를 연결해야 하는데 전기의 재미난 특성이 나타나므로 주의해서 따라하도록 하자.

전압분배의 법칙

우선 전압분배의 법칙은 입력전압을 일정한 비율로 나누어주기 위해서 쓰는 기술이다. 광센서를 영어로는 Photo Resistor 라고 쓰는데 이는 빛의 세기에 따라 저항의 값이 달라지기 때문이다. 계산 수식은 아래와 같다.

수식

즉, R1 이 커지거나 작아짐에 따라 출력 전압이 변화하는 것이다. 광센서는 이 R1 의 위치에 10k 저항은 R2 의 위치에 연결하여 출력 전압을 조정하고, Arduino SDK 에서 AnalogRead() 명령어를 사용하여 그 값을 읽도록 한다.

아래 코드로 테스트해보자.

int lightPin = A0;

void setup()
{
    Serial.begin(9600);
}

void loop()
{
    Serial.println(analogRead(lightPin)); 
    delay(10);
}

2. 코드

컨셉은 단순하다. 주위가 어두어지면 세 LED 가 깜빡거리며 반딧불과 같은 행동을 보인다. 소스는 Github에서도 찾을 수 있다.

int cds = A0;
int delay_led = 256/3;

const int led0 = 10; // LED 핀 번호 설정
const int led1 = 9;
const int led2 = 11;

int firefry0 = 0;
int firefry1 = 0 - delay_led;
int firefry2 = 0 - delay_led * 2;

int increment0 = 1;
int increment1 = 1;
int increment2 = 1;

void setup() {       
  Serial.begin(9600);
}

void loop() {
  int sensorValue = analogRead(cds);
  Serial.println(sensorValue);
  if(sensorValue < 200) {
    if(firefry0 > 255)
    {
      increment0 = -2;
    }  
    else if(firefry0 < 1)
    {
      increment0 = 2;
    }

    if(firefry1 > 255)
    {
      increment1 = -2;
    }  
    else if(firefry1 < 1)
    {
      increment1 = 2;
    }

    if(firefry2 > 255)
    {
      increment2 = -2;
    }  
    else if(firefry2 < 1)
    {
      increment2 = 2;
    }

    firefry0 = firefry0 + increment0;
    firefry1 = firefry1 + increment1;
    firefry2 = firefry2 + increment2;

    analogWrite(led0, constrain(firefry0, 0, 255));    // LED의 밝기를 PWM으로 조절
    analogWrite(led1, constrain(firefry1, 0, 255));
    analogWrite(led2, constrain(firefry2, 0, 255));

    delay(10);
  } else {
    analogWrite(led0, 0);
    analogWrite(led1, 0);
    analogWrite(led2, 0);

    firefry0 = 0;
    firefry1 = 0 - delay_led;
    firefry2 = 0 - delay_led * 2;
  }
}

3. 3D 케이스

스케치업을 통해 간단하게 LED와 Photo Resistor 가 들어갈 수 있도록 디자인 하였다. 3D 프린터를 이용해 출력하면 케이스로 사용할 수 있다.

3D Model Sketch

다운로드

4. 완성

3D 모델을 분실한 모델로 향후 변경될 예정이나, 케이스는 위와 같은 형태로 상단에 센서가 부착되고 하단부에 3개의 LED 를 연결한다.

comments powered by Disqus