프로젝트

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

페이지 정보

작성자 Edgar 작성일16-03-16 15:44 조회6,900회 댓글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초동안 표시되었다가 다시 무지개빛으로 돌아가는 모습니다! 

댓글목록

등록된 댓글이 없습니다.


메이크쉐어 PC버전 로그인
로그인 해주세요.

회원가입

쪽지

포인트

스크랩
기초강좌(배우고)
부품사용법(익히고)
프로젝트(공유하고)
게시판
메이크쉐어 PC버전 로그인