프로젝트

[아두이노 프로젝트] 박수치면 시간이 나오는 LED 아날로그 시계

페이지 정보

작성자 Edgar 작성일16-03-16 15:44 조회6,886회 댓글0건

본문

 

안녕하세요 Edgar 입니다.

 

이번 프로젝트는 을 이용한 LED 아날로그 시계입니다.

 

 

6a63e30e67a05d4273e0cfc762ff3ef2_1458103

 

해시계와 비슷한 그림자를 이용한 LED 아날로그 시계입니다.

 

6a63e30e67a05d4273e0cfc762ff3ef2_1458103

 

 

시간만 계속 나타내고 있으면 재미없으므로 소리가 들리면 3초동안 시간을 표시하고, 그 외의 상황에서는 위의 사진과 같이 네오픽셀이 굉장히 예쁘게 무지개 색으로 빛이 나게 됩니다.

 

회로구성 및 준비물 입니다.

 

 

6a63e30e67a05d4273e0cfc762ff3ef2_1458105

 

회로에 구성된 부품들은

 

네오픽셀 링 24 두개아두이노 나노 보드DS1307 RTC 모듈LM393 사운드 센서 모듈 입니다.

(회로에는 LM393 모듈이 없어 스피커로 대체하여 그렸으나 LM393 모듈을 사용하여 주시면 됩니다.) 

 

 

사용한 소스코드 입니다.

 

RTC모듈과 네오픽셀의 라이브러리가 필요합니다.

 

(RTC네오픽셀)

 

 

#include <Arduino.h>

#include <Wire.h>        

#include "RTClib.h"

#if defined(ARDUINO_ARCH_SAMD)

#define Serial SerialUSB

#endif

RTC_DS1307 rtc;

bool fillter = true;

 

#include <Adafruit_NeoPixel.h>

#define PIN            6

#define NUMPIXELS    48

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

 

void setup ()

{

  pixels.begin();

  Serial.begin(57600);

  if (! rtc.begin()) {

    Serial.println("Couldn't find RTC");

    while (1);

  }

  if (! rtc.isrunning()) {

    Serial.println("RTC is NOT running!");

    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

  }

  attachInterrupt(0, timeView, RISING);

}

 

//네오픽셀의 동작 시작과 RTC 모듈의 실행, 인터럽트 설정

 

void loop () {

  rainbow(20);

  rainbowCycle(20);

}

 

//동작안할때의 무지개색 코드

 

void colorWipe(uint32_t c, uint8_t wait) {

  for (uint16_t i = 0; i < pixels.numPixels(); i++) {

    pixels.setPixelColor(i, c);

    pixels.show();

    delay(wait);

    Serial.println("AAA");

  }

}

 

//동작안할때의 무지개색 코드 함수1

 

void rainbow(uint8_t wait) {

  uint16_t i, j;

 

  for (j = 0; j < 256; j++) {

    for (i = 0; i < pixels.numPixels(); i++) {

      pixels.setPixelColor(i, Wheel((i + j) & 255));

    }

    pixels.show();

    delay(wait);

    Serial.println("AAA");

  }

}

 

//동작안할때의 무지개색 코드 함수2

 

void rainbowCycle(uint8_t wait) {

  uint16_t i, j;

 

  for (j = 0; j < 256 * 5; j++) { // 5 cycles of all colors on wheel

    for (i = 0; i < pixels.numPixels(); i++) {

      pixels.setPixelColor(i, Wheel(((i * 256 / pixels.numPixels()) + j) & 255));

    }

    pixels.show();

    delay(wait);

    Serial.println("AAA");

  }

}

 

//동작안할때의 무지개색 코드 함수3

 

uint32_t Wheel(byte WheelPos) {

  WheelPos = 255 - WheelPos;

  if (WheelPos < 85) {

    return pixels.Color(255 - WheelPos * 3, 0, WheelPos * 3);

  }

  if (WheelPos < 170) {

    WheelPos -= 85;

    return pixels.Color(0, WheelPos * 3, 255 - WheelPos * 3);

  }

  WheelPos -= 170;

  return pixels.Color(WheelPos * 3, 255 - WheelPos * 3, 0);

  Serial.println("AAA");

}

 

//동작안할때의 무지개색 코드 함수4

 

void timeView() {

  if (fillter) {

    fillter = false;

    pixels.clear();

    pixels.show();

    Serial.println("BBB");

 

    DateTime now = rtc.now();

    int T_h = (((now.hour() % 12) * 2) + (now.minute() < 30 ? 0 : 1));

    pixels.setPixelColor((T_h < 12 ? 6 + (6 - T_h) : 18 + (18 - T_h)) - 1, pixels.Color(84, 255, 84));

    int T_m = (now.minute() / 2.5);

    pixels.setPixelColor((T_m < 12 ? 6 + (6 - T_m) : 18 + (18 - T_m)) + 23, pixels.Color(50, 50, 255));

    pixels.show();

    delay(3000);

    fillter = true;

  }

}

 

//센서에 입력이 들어왔을 때의 동작 (인터럽트 사용)

 

 

별도로 아크릴을 이용하여 케이스를 제작 하였습니다.

 

 

 

6a63e30e67a05d4273e0cfc762ff3ef2_1458106

 

 

케이스에는 홈을 파서 원하는 각도를 조절 할 수 있게 하였습니다.

 

 

6a63e30e67a05d4273e0cfc762ff3ef2_1458103

 

평상시의, 시간을 표시하지 않을 때의 모습 입니다.

 

6a63e30e67a05d4273e0cfc762ff3ef2_1458103 

 


시간을 표시 할 때의 모습입니다.

 

 


  

 

동작 영상도 촬영하여 올립니다.

 

박수 소리에 반응하여 시간이 3초동안 표시되었다가 다시 무지개빛으로 돌아가는 모습니다! 

댓글목록

등록된 댓글이 없습니다.


모바일 버전으로 보기