프로젝트

크리스마스 대비! 3D프린터와 네오픽셀, 부저를 이용한 캐럴연주하기 [아두이노 작품]

페이지 정보

작성자 메카 작성일16-03-17 18:52 조회4,642회 댓글0건

본문

본 예제는 납땜이 필요한 예제임을 앞서 밝힙니다. %EA%B9%9C%EC%B0%8D 


 

크리스마스에 적합한 프로젝트를 준비했습니다.

네오픽셀과 아두이노, 부저만 있으면 재미있고 아기자기한 크리스마스를 보낼 수 있습니다!


02cd46d8a607ca14b01d10ead866e139_1458208
 


 

(동영상)


 

 


촬영을 위해 망설임없이 협조해주신 포켓몬 친구들께 감사를 표합니다.( 쓸모없었지만... ) 


확실히 실물이 훨~~씬 좋습니다! 영상으로 찍으니 별로네요..%EC%97%89%EC%97%89%20%EB%8F%99%EA%B8%80%EC%9D%B4




간단히 설명드리자면 tone이라는 함수를 응용하여 캐럴을 연주하고,


크리스마스 하면 빠질 수 없는 크리스마스 트리를 3D프린터로 뽑은 후


캐럴에 맞춰 네오픽셀이 켜졌다 꺼졌다 합니다 !


우선! 본론으로 들어가기 전에 네오픽셀에 대해 알아보겠습니다.


 

네오픽셀이란?


02cd46d8a607ca14b01d10ead866e139_1458208


네오픽셀은 LED 제품으로 단일로도 사용할 수 있고 여러 개를 한 번에 제어할 수도 있습니다.


몇 개를 사용하던 한 개의 디지털 핀으로 모두 제어할 수 있으며, 굽히거나 접는 등 여러 모양을 만들 수 있고,


유연하며 사용법이 쉽기에 초보자도 간단히 사용할 수 있습니다.


또, 현재 모든 네오픽셀은 Abafruit의 라이브러리로 통합되어 있어 다른 제품이라도 호환이 됩니다.


02cd46d8a607ca14b01d10ead866e139_1458208
 


위 사진을 보시면 알 수 있겠지만, 각각의 네오픽셀이 붙어있습니다.


또, 제품을 유심히 보시면 화살표 방향이 되어있는데, 그 방향에 맞추어 네오픽셀을 연장할 수도 있고,


필요 없으면 잘라내어 필요한 부분만 사용할 수도 있습니다.


02cd46d8a607ca14b01d10ead866e139_1458208
 


네오픽셀에는 3개의 LED가 내장되어있습니다.


빨강 파랑 초록의 LED가 내장되어있는데 각각의 LED 밝기에 따라 빛의 색이 결정됩니다.


02cd46d8a607ca14b01d10ead866e139_1458208
 


원하시는 색의 빛을 내고 싶으실 땐, 빛의 3원색을 참고하여 빛의 색을 만들어 내시면 됩니다.




작품 만들기


준비물 : 아두이노우노 미니 브레드보드 , 네오픽셀 5개 다량의 점퍼선 ,  , 테이프 또는 글루건,

네오픽셀을 덮을 속이 비어있고 색이 다른 통 5개

( 해당 예제에선 3D 프린터 작품 사용)


(저희가 판매하는 준비물을 클릭하시면 구매 사이트로 이동)



02cd46d8a607ca14b01d10ead866e139_1458208
 

(↑회로도↑)
 

이번에 사용할 네오픽셀은 5개입니다.


02cd46d8a607ca14b01d10ead866e139_1458208
 


위 사진과 같이 점퍼선으로 각각을 납땜하여 회로도의 네오픽셀에 해당하는 부분에 연결해줍니다.


02cd46d8a607ca14b01d10ead866e139_1458208
 


3D 프린터 STL파일 다운 사이트 )


3D 프린터를 사용하여 색이 다른 나무 5개를 뽑아줍니다.

( 가장 많은 시간이 소요됨 )


본래는 LED를 끼우지만 네오픽셀로 더 밝으며 각각의 빛을 내도록 하였습니다.


( 색이 다른 플라스틱 통으로 대체하셔도 무관합니다! )


02cd46d8a607ca14b01d10ead866e139_1458208
 


그다음 나무에 네오픽셀을 붙여줍니다.


02cd46d8a607ca14b01d10ead866e139_1458208
 


부저까지 끼워주면 완성!




 코

 

//라이브러리와 소스파일은 첨부하였습니다.

 

int speakerPin = 5;

 

#include <Adafruit_NeoPixel.h>

 

#define PIN            6

 

#define NUMPIXELS      5

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

int length = 51; // 노래의 총 길이 설정

char notes[] = "eeeeeeegcde fffffeeeeddedgeeeeeeegcde fffffeeeggfdc"; // 음계 설정

int beats[] = { 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 4,

                1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,

                1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 4,

                1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4};  // 해당하는 음이 울리는 길이 설정

int tempo = 200; // 캐럴이 연주되는 속도

void playTone(int tone, int duration)

{

  for (long i = 0; i < duration * 1000L; i += tone * 2)

  {

    digitalWrite(speakerPin, HIGH);

    delayMicroseconds(tone);

    digitalWrite(speakerPin, LOW);

    delayMicroseconds(tone);

  }

  for(int c = 0; c< 5;c++)

  {

    //digitalWrite(c,LOW);

    pixels.setPixelColor(c, pixels.Color(0,0,0));

  } 

  pixels.show();

}

void playNote(char note, int duration)

{

  char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };  //음계 함수 설정

  int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 }; // 음계 톤 설정

    switch(note)

    {

        case 'c': pixels.setPixelColor(0, pixels.Color(255,0,0)); break;

        case 'd': pixels.setPixelColor(1, pixels.Color(0,0,255)); break;

        case 'e': pixels.setPixelColor(2, pixels.Color(255,255,0)); break;

        case 'f': pixels.setPixelColor(3, pixels.Color(0,255,0)); break;

        case 'g': pixels.setPixelColor(4, pixels.Color(255,255,255)); break;

      }

       pixels.show();

  for (int i = 0; i < 8; i++)

  {

    if (names[i] == note)

    {

      playTone(tones[i], duration);

    }

  }

}

void setup()

{

  pinMode(speakerPin, OUTPUT);

  pixels.begin();

}

void loop() {

  for (int i = 0; i < length; i++)

  

  { 

    if (notes[i] == ' ')

    {

      delay(beats[i] * tempo); // rest

    } 

    else

    {

      playNote(notes[i], beats[i] * tempo);

    }

    delay(tempo / 10);

  }

  delay(500);

}

댓글목록

등록된 댓글이 없습니다.


모바일 버전으로 보기