산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노로 만드는 멋진 LED 하트 포토 프레임: 단계별 DIY 가이드

이 아두이노 프로젝트에서는 아두이노를 사용해 멋진 LED 하트 포토 프레임을 만드는 방법을 보여드리겠습니다. 아래 비디오를 시청하거나 작성된 글을 읽어보세요.

겉보기엔 평범한 포토 프레임이지만 뒷면의 스위치를 누르면 특별한 포토 프레임으로 변신합니다. 이 아두이노 프로젝트는 만들기 매우 재미있으며 발렌타인 데이, 생일, 기념일 선물로 완벽합니다. 이제 제작을 시작해 볼까요?

포토 프레임 준비


아두이노로 만드는 멋진 LED 하트 포토 프레임: 단계별 DIY 가이드

먼저 18 x 13 cm 크기의 심플한 포토 프레임과 프레임 크기에 맞춘 파이버보드가 필요합니다. 이 보드에 LED를 삽입할 구멍을 뚫을 것입니다. 32개 LED로 하트 모양을 그려 출력해 패턴으로 사용합니다. 드릴로 LED 구멍을 뚫습니다.

아두이노로 만드는 멋진 LED 하트 포토 프레임: 단계별 DIY 가이드

구멍 뚫기가 완료되면 LED를 삽입합니다. 모든 LED를 같은 면에 삽입하고, 애노드(긴 다리)가 바깥쪽을 향하게 해 나중에 구부려 모든 LED의 애노드를 함께 납땜할 수 있게 합니다.

아두이노로 만드는 멋진 LED 하트 포토 프레임: 단계별 DIY 가이드

모든 LED 납땜이 완료되면 정상 작동하는지 확인합니다. 양극 5V VCC를 220옴 저항을 통해 LED 애노드에 연결하고 그라운드 핀으로 각 LED가 켜지는지 확인합니다.

회로도


이 프로젝트의 회로도는 다음과 같으며, 아래에 필요한 부품 전체 목록이 있습니다. 아두이노 나노와 두 개의 TLC5940 IC를 사용해 LED를 제어합니다. TLC5940은 PWM 출력을 제공하는 16채널 LED 드라이버입니다. 이 IC를 아두이노와 연결하고 사용하는 자세한 방법은 저의 아두이노 TLC5940 튜토리얼을 참조하세요.

아두이노로 만드는 멋진 LED 하트 포토 프레임: 단계별 DIY 가이드

이 아두이노 프로젝트에 필요한 부품


아래 사이트에서 부품을 구할 수 있습니다:

  • 아두이노 나노
  • 초고휘도 적색 LED
  • 스위치
  • 파워 잭
  • DC 5V >1A 어댑터
  • 2개 x TLC5940 LED 드라이버
  • 2개 x 2K 저항
  • 1uF & 0.1uF 커패시터

조립


먼저 IC 소켓과 핀 헤더를 제자리에 놓고 프로토타입 PCB에 납땜해 IC와 아두이노 나노를 장착할 수 있게 합니다. 전원(5V VCC)과 그라운드 핀용으로 몇 개의 슬롯이 있는 핀 헤더 두 개와 디커플링용 커패시터 두 개도 필요합니다.

아두이노로 만드는 멋진 LED 하트 포토 프레임: 단계별 DIY 가이드

많은 와이어 때문에 잘못 연결하면 매우 복잡해질 수 있으니 부품 연결 시 매우 주의해야 합니다. 이 시점에서 아두이노 코드를 업로드해 모든 것이 제대로 연결되었는지 확인합니다.

아두이노로 만드는 멋진 LED 하트 포토 프레임: 단계별 DIY 가이드

아두이노 코드


이 프로젝트를 위해 만든 아두이노 코드를 살펴보겠습니다. Alex Leone이 만든 TLC5940 라이브러리를 사용합니다. 라이브러리를 다운로드해 설치한 후 tlc_config.h 파일을 수정해 NUM_TLCS 변수 값을 직렬로 연결된 TLC5940 IC 개수로 변경해야 합니다. 우리 경우는 2입니다.

아두이노로 만드는 멋진 LED 하트 포토 프레임: 단계별 DIY 가이드

이제 0부터 31까지 모든 LED를 쉽게 제어할 수 있습니다. 처음에는 프로그램에 필요한 변수들을 정의합니다. 설정 섹션에서 TLC를 초기화하고 루프 섹션에서 프로그램을 만듭니다. 스위치 문을 사용해 프로그램을 9가지 다른 단계(LED 라이트 쇼)로 구성했습니다.

예를 들어 첫 번째 단계를 보면 0~31 사이의 랜덤 정수 값을 생성해 LED 주소로 사용합니다. Tlc.set() 함수로 어떤 LED를 켤지 설정합니다. 첫 번째 매개변수는 LED 주소, 두 번째는 LED 밝기 또는 PWM 값(0~4095)입니다. 하지만 이는 즉시 LED를 켜는 것이 아니라 Tlc.update() 함수가 실행될 때 켤 LED를 설정하는 것입니다. "if" 문을 사용해 8개 랜덤 LED가 켜지면 두 번째 단계를 활성화합니다. 또 다른 예로 3단계를 보면 "for" 루프로 32개 모든 LED를 켜도록 설정하고 Tlc.update()로 실행합니다. 0.5초 지연 후 Tlc.clear()로 모든 LED를 끕니다. 비슷한 방식으로 코드를 수정해 더 많은 라이트 쇼를 추가할 수 있습니다.

/* LED 하트 포토 프레임 - 아두이노 프로젝트
 * Program made by Dejan Nedelkovski,
 * www.HowToMechatronics.com
 */
/* TLC5940 Library by Alex Leone, https://code.google.com/archive/p/tlc5940arduino/
 * tlc_config.h 파일을 수정해 NUM_TLCS 변수 값을 연결된 TLC5940 IC 개수로 변경해야 함
 */
#include "Tlc5940.h"
int stage = 0;
int randomNumber;
int count = 0;
int brightness = 3500;
int brightUp = 50;
int dir = 1;
void setup() {
  Tlc.init();
}
void loop() {
  switch(stage) {
    //-----1단계
    case 0:
      randomNumber = (int)random(0,31);
      Tlc.set(randomNumber, 4095);
      delay(1500);
      Tlc.update();
      if(count >= 8) {
        stage = 1;
        count = 0;
      } else {
        ++count;
      }
      break;
    //-----2단계
    case 1:
      delay(75);
      for(int i=31; i>=0; i--) {
        Tlc.set(i, 4095);
        delay(100);
        Tlc.update();
      }
      delay(500);
      Tlc.clear();
      Tlc.update();
      stage = 2;
      delay(500);
      break;
    //-----3단계
    case 2:
      for(int i=0; i<=31; i++) {
        Tlc.set(i, 4095);
      }
      Tlc.update();
      delay(500);
      Tlc.clear();
      Tlc.update();
      delay(350);
      if(count > 6) {
        stage = 3;
        count = 0;
      } else {
        ++count;
      }
      break;
    //-----4단계
    case 3:
      for (int i=0; i<=15; i++) {
        Tlc.set(i, 4095);
        Tlc.set(31-i, 4095);
        Tlc.update();
        delay(70);
      }
      delay(50);
      for (int i=15; i>=0; i--) {
        Tlc.set(i, 0);
        Tlc.set(31-i, 0);
        Tlc.update();
        delay(70);
      }
      for (int i=15; i>=0; i--) {
        Tlc.set(i, 4095);
        Tlc.set(31-i, 4095);
        Tlc.update();
        delay(70);
      }
      for (int i=0; i<=15; i++) {
        Tlc.set(i, 0);
        Tlc.set(31-i, 0);
        Tlc.update();
        delay(70);
      }
      delay(50);
      Tlc.clear();
      Tlc.update();
      delay(100);
      if(count > 1) {
        stage = 4;
        count = 0;
      } else {
        ++count;
      }
      break;
    //-----5단계
    case 4:
      for (int i=15; i>=count; i--) {
        Tlc.set(32-i, 4095);
        Tlc.update();
        delay(5);
        Tlc.set(32-i-1, 0);
        Tlc.update();
        delay(5);
        Tlc.set(i, 4095);
        Tlc.update();
        delay(5);
        Tlc.set(i+1, 0);
        Tlc.update();
        delay(50);
      }
      if(count > 15) {
        Tlc.set(16, 4095);
        Tlc.update();
        delay(2000);
        stage = 5;
        count = 0;
      } else {
        ++count;
      }
      break;
    //-----6단계
    case 5:
      for (int i=0; i<=31; i++) {
        Tlc.set(i, brightness);
        Tlc.update();
      }
      Tlc.update();
      brightness = brightness + brightUp;
      if (brightness >= 3500) { brightUp = -50; ++count; }
      if (brightness <= 150) { brightUp = 50; }
      if(count > 6) {
        stage = 6;
        count = 0;
        brightness = 3500;
        Tlc.clear();
        Tlc.update();
      }
      delay(40);
      break;
    //-----7단계
    case 6:
      for (int i=0; i<=30; i+=2) {
        Tlc.set(i, 4095);
        Tlc.set(i+1, 0);
      }
      Tlc.update();
      delay(500);
      for (int i=0; i<=30; i+=2) {
        Tlc.set(i, 0);
        Tlc.set(i+1, 4095);
      }
      Tlc.update();
      delay(500);
      if(count > 20) {
        stage = 7;
        count = 0;
      } else {
        ++count;
      }
      break;
    //-----8단계
    case 7:
      for(int i=31; i>=16; i--) {
        Tlc.clear();
        Tlc.update();
        delay(2);
        Tlc.set(i, 4095);
        Tlc.set(i+1, 2000);
        Tlc.set(i+2, 1000);
        Tlc.set(i+3, 500);
        Tlc.set(i+4, 300);
        Tlc.set(i+5, 200);
        Tlc.set(i+6, 100);
        Tlc.set(i+7, 50);
        Tlc.set(i+8, 0);
        Tlc.set(i-16, 4095);
        Tlc.set(i-15, 2000);
        Tlc.set(i-14, 1000);
        Tlc.set(i-13, 500);
        Tlc.set(i-12, 300);
        Tlc.set(i-11, 200);
        Tlc.set(i-10, 100);
        Tlc.set(i-9, 50);
        Tlc.set(i-8, 0);
        Tlc.update();
        delay(50);
      }
      if(count > 8) {
        for(int i=31; i>=0; i--) {
          Tlc.set(i, 4095);
          Tlc.update();
          delay(50);
        }
        stage = 8;
        count = 0;
      } else {
        ++count;
      }
      break;
    //-----9단계
    case 8:
      for(int i=31; i>=0; i--) {
        Tlc.set(i+8, 4095);
        Tlc.set(i+7, 2000);
        Tlc.set(i+6, 1000);
        Tlc.set(i+5, 500);
        Tlc.set(i+4, 300);
        Tlc.set(i+3, 200);
        Tlc.set(i+2, 100);
        Tlc.set(i+1, 50);
        Tlc.set(i, 0);
        Tlc.update();
        delay(50);
      }
      for(int i=31; i>=0; i--) {
        Tlc.set(i, 4095);
      }
      Tlc.update();
      delay(10);
      if(count > 8) {
        delay(8000);
        Tlc.clear();
        Tlc.update();
        stage = 0;
        count = 0;
      } else {
        ++count;
      }
      break;
  }
}

마무리 작업


프로그래밍이 완료되고 모든 것이 잘 작동함을 확인하면 글루건으로 LED를 파이버보드에 고정합니다. 그런 다음 글루건과 크기에 맞게 자른 파이버보드 4개로 전자 부품용 커버 박스를 만듭니다.

아두이노로 만드는 멋진 LED 하트 포토 프레임: 단계별 DIY 가이드

이제 포토 프레임의 파이버보드에 장착된 스위치와 파워 잭에서 나온 전원 라인을 연결하고, 사진을 넣고, 전체 박스를 포토 프레임에 고정하면 완성입니다!

아두이노로 만드는 멋진 LED 하트 포토 프레임: 단계별 DIY 가이드

아래에서 LED 하트 포토 프레임의 전체 데모 비디오를 볼 수 있습니다.

댓글 섹션에서 자유롭게 질문해 주세요!

제조공정

  1. 나만의 LUMAZOID 만들기: DIY 아두이노 음악 비주얼라이저
  2. 아두이노로 만드는 신뢰도 높은 적외선 심박 센서: 단계별 가이드
  3. 아두이노 오디오 주파수 감지기 - 고감도 사운드 모듈로 최대 음량 피크 주파수 측정
  4. 아두이노 블루투스로 LED 제어하기 - HC-05 & MIT App Inventor 입문 가이드
  5. 아두이노 틱택토 게임 - MAX7219 LED 매트릭스와 골판지 케이스
  6. 아두이노와 노키아 5110 LCD로 만드는 DIY 전압계 - 단계별 가이드
  7. 스마트 아두이노 4족 보행 로봇 제작: 단계별 완벽 가이드
  8. 스파크펀 7-세그먼트 디스플레이로 신뢰할 수 있는 아두이노 카운트다운 타이머 만들기
  9. 아두이노 RGB LED 컬러 믹서: 입문자 친화적 DIY 프로젝트
  10. DIY 아두이노 라디오닉스 EMR 치료 기기 제작