안녕하세요. 애드라이프 입니다.
한창 HOME IOT를 진행하다가 아내의 부탁으로 화장대에 조명을 달아 달라고 해서....
급하게 IOT를 접고 아내화장대 거울에 거울을 달기 위해 준비를 시작하게 되었습니다.
기본계획은 밝기 조정이 가능한 조명을 달기 위함입니다.
그렇기 위해서는 조명 선정이 필요합니다.
한번도 써본적은 없지만 Adafruit사의 네오픽셀을 선택하게 되었습니다.
제가 쓰려고 하는 조명의 정식 명칭은 네오픽셀 RGB LED 스틱 -8 WS2812입니다.▼
네오픽셀 WS2812 Datasheet ▼
저는 제가 쓰기 편하게 양옆에 뺐다 꼈다 할 수 있도록 커넥터를 연결했습니다.▼
실제로 아두이노와 연결하는 부분은 DIN 핀이 있는쪽을 사용합니다.
DOUT이 있는 부분은 다음 LED와 연결할 때 사용합니다.(여러개의 LED를 동시에 사용할 경우)
회로도가 매우 간단하기 때문에 바로 회로를 살펴보도록 하겠습니다.▼
네오픽셀 5V -> 아두이노 5V
네오픽셀 GND -> 아두이노 GND
네오픽셀 DIN -> 아두이노 D6
연결은 아두이노에 네오픽셀만 연결하면 끝입니다.
회로도 간단하니 바로 프로그램을 살펴보겠습니다.
라이브러리를 이용하여 간단한 예제를 통해 제어가 가능하기 때문에 프로그램은 어렵지 않습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #include <Adafruit_NeoPixel.h> //라이브러리 등록 파일을 첨부해 두었으니 확인해주세요. #define NeoPixelPin 6 //네오픽셀 DIN핀에 연결 할 아두이노 D6핀으로 설정합니다. //네오픽셀을 사용하기 위해 객체 하나를 생성한다. //첫번째 인자값은 네오픽셀의 LED의 개수 //두번째 인자값은 네오픽셀이 연결된 아두이노의 핀번호 //세번째 인자값은 네오픽셀의 타입에 따라 바뀌는 flag Adafruit_NeoPixel strip = Adafruit_NeoPixel(8, NeoPixelPin, NEO_GRB + NEO_KHZ800); void setup() { strip.begin(); //네오픽셀을 초기화하기 위해 모든LED를 off시킨다. strip.show(); //실제 네오픽셀에 적용합니다. } void loop() { colorWipe(strip.Color(0, 0, 100), 50); //파랑색 LED만 LED당 50ms의 딜레이간격으로 순차적 ON strip.show(); //실제 네오픽셀에 적용합니다. delay(1000); colorWipe(strip.Color(0, 100, 0), 50); //초록색 LED만 LED당 50ms의 딜레이간격으로 순차적 ON strip.show(); //실제 네오픽셀에 적용합니다. delay(1000); colorWipe(strip.Color(100, 0, 0), 50); //빨간색 LED만 LED당 50ms의 딜레이간격으로 순차적 ON strip.show(); //실제 네오픽셀에 적용합니다. delay(1000); } void colorWipe(uint32_t c, uint8_t wait) { for(uint16_t i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, c); strip.show(); delay(wait); } } | cs |
프로그램의 전체적인 흐름은 주석을 참고해 주세요.(옆으로 넘기면서 보실 수 있습니다.)
네오픽셀 라이브러리 ▲
1 2 3 4 5 6 7 8 | void colorWipe(uint32_t c, uint8_t wait) { //colorWipe(strip.Color(0,0,100),50);을 예를 들어 설명하자면 for(uint16_t i=0; i<strip.numPixels(); i++) { //strip.Color(0,0,100) -> uint32_t c / 50 -> uint8_t wait strip.setPixelColor(i, c); //uint32_t c를 디스플레이 해보면 (0,0,100)부분을 각각 2진수로 표현했을 때 strip.show(); //(0000 0000, 0000 0000, 0110 0100)이고 다 이었을 경우 000000000000000001100100 delay(wait); //즉 십진수로 100입니다. strip.Color(0,0,100)이부분을 그냥 100으로 써도 같은 결과입니다. } } | cs |
함수설명은 주석을 참고해 주세요.(옆으로 넘기면서 보실 수 있습니다.)
프로그램을 업로드 한 후 결과를 동영상을 확인 하면서 이번 포스팅을 마치겠습니다.▼
나중에 알게된 사실 추가합니다.
colorWipe(strip.Color(100, 100, 100), 50); 이렇게 R,G,B부분을 모두 같게 해주면 빛의 삼원색의 원리로
흰색이 출력됩니다. 하지만 색을 두개이상 조합시 밝기가 다르게 켜진다거나 색이 원하는 색이 나오지 않는 경우가 빈번히 생기더군요.
딜레이부분을 다르게 해도 결과는 같았습니다. 혹시 이 부분의 해결책을 아시는 분은 댓글남겨주시면 감사하겠습니다.
우선 화장대에 있는 조명용으로 써야해서 흰색이 주로 필요한데 흰색출력시 오류가 있어서...
계속 햬결이 안되면 조명선적을 다시해야 할 것 같습니다.
지금까지 아두이노(Arduino) DIY 프로젝트 화장대에 밝기 조정 가능한 조명 설치하기 1편 네오픽셀 LED를 다뤘습니다.
계속해서 도움되는 포스팅으로 찾아 뵙겠습니다.
by 애드라이프
'DIY 프로젝트' 카테고리의 다른 글
아두이노(Arduino) 어두운 통로를 밝혀줄 인체감지센서등 만들기 1편 (1) | 2019.01.08 |
---|---|
아두이노(Arduino) WIFI모듈을 이용한 DIY HomeIoT(Blynk) - 캔들등 제어 2편 (0) | 2019.01.04 |
아두이노(Arduino) WIFI모듈을 이용한 DIY HomeIoT(Blynk) - 캔들등 제어 (0) | 2019.01.02 |
아두이노(Arduino) DIY 프로젝트 화장대에 밝기 조정 가능한 조명 설치하기 3편 (0) | 2018.12.31 |
아두이노(Arduino) DIY 프로젝트 화장대에 밝기 조정 가능한 조명 설치하기 2편 (0) | 2018.12.30 |