마이크로비트네오픽셀터치센서이용하여 돼지등동작하는 것을 확인 했다. 그러나 실생활에 사용하기 위해서는 배터리 이용해야 하고, 전원 ON/OFF를 할 수 있어야 하고, 편하게 사용 할 수 있어야 한다. 어떻게든 마이크로비트로 가능 하겠지만 시중에 다른 사람들이 만들어 놓은 돼지등 무드등을 본다면 꽤나 휴대성 면에서 떨어진다. 그래서 그런 부분을 해결 하고자, 지 저금통 & 아두이노 나노 & 배터리 & 네오픽셀 & ON/OFF 스위치 & 충반전 모듈 & 터치 모듈& 여러개의 점퍼선을 가지고 만들어 봤다. 만든지는 꽤 됐는데, 이제서야 글을 쓴다 ㅡ.ㅡ


예전에도 그러했듯이 완성품 동영상을 보자.

<터치로 동작하는 돼지등 무드등 동영상>


며칠동안 밤에 들고 다녔는데, 괜찮은거 같다. 한여름 공원에 모여 얘기할때 옆에 돼지 무드등 있는거 상상해 보니, 좋다^^.


그럼 만들어 보자!


돼지 무드등 만들기 #1

재료

 돼지 저금통

 아두이노 나노

 배터리

 네오픽셀

 ON/OFF 스위치

 충반전 모듈

 터치 모듈

*다이소에서 500원에 구입 가능한 돼지 저금통이다. 

*꽤 오래전에 알리에서 구입한 것이다. 싼 가격에 막 쓸 수 있어서 좋다.

*LI-PO 18650 3.7V 500mA다. 옛날 휴대폰 충전지로 사용 가능 하다.

*일반 LED로 사용 가능 하며, 내가 원하는 색을 사용 할 수 있어서 대부분 네오식셀을 사용한다. 제어 하기도 편하다.

*돼지 무드등을 켜고 끄기 위해 필요하다.

*TP4056은 배터리를 충전 시키기 위한 모듈이다. 두가지 종류가 있다. 돼지 무드등에 사용한 배터리는 이미 보호 회로가 있기 때문에 충전 기능만 있는 모듈을 사용했다.

*알리에서 싸게 구입한 모듈이다. 앞에 어느 정도 두께가 가로 막아도 터치 동작이 잘 된다.

원래 계획은 아두이노 나노보다 더 작은 ATTINY85 모듈을 사용 할려고 했으나, 터치 센서 연결 후 프로그램 업로드를 하기 위해 컴퓨터에 연결 하면 인식을 못한다. 어떤 경우는 부트로트가 날라가 버린다 ㅠㅠ. 입력핀 쪽으로 기준 이상의 전류가 흘러 망가지는거 같은데...... 나중에 알아 봐야 겠다.


돼지 무드등 만들기 #2

재료들 연결 하기

회로도























실제 연결 사진

<회로도 사진>




<연결 사진>

*fritzing으로 회로도 그리는건 거의 처음이라 잘 다루지 못한다. 포토샵으로는 마구마구 변형이 가능한데......


*돼지 무드등에 들어가기 전 사진이 없다 ㅠㅠ. 그래서 동영상에 있는걸 캡쳐 했더니......


돼지 무드등 만들기 #2

코드

코드

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <Adafruit_NeoPixel.h>
#include <MsTimer2.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif
 
#define PIN 6
#define TouchSensor 9 // Pin for capactitive touch sensor
 
boolean currentState = LOW;
boolean lastState = LOW;
int event = 0;
int eventCount = 0;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(6, PIN, NEO_GRB + NEO_KHZ800);
 
 
void setup() {
  Serial.begin(9600);
  pinMode(TouchSensor, INPUT);
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
  
  MsTimer2::set(60, backGroundRun);
  MsTimer2::start();
}
 
void loop() {
     
  currentState = digitalRead(TouchSensor);
    if (currentState == LOW && lastState == HIGH){
      eventCount++;
      event = eventCount % 3;
  }
  lastState = currentState;
 
}
 
void backGroundRun()
{
  if(event == 0)
  {
    for(uint16_t i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, strip.Color(25500));
    }
    strip.show();
  }else if(event == 1)
  {
    for(uint16_t i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, strip.Color(02550));
    }
    strip.show();
  }
  else
  {
    for(uint16_t i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, strip.Color(255255255));
    }
    strip.show();
  } 
}
cs

*Color Scripter사요하는 것도 거의 처음이다. 편하다. 

 사이트에 들어가 

 코드 붙혀 넣고,

 필요한 설정을 한 다음,

 클립코드로 복사하고,

 원하는 곳에 붙혀넣기 하면 된다.


*팁으로 편집창에는 정상적으로 보이나, 실제 표시되는 것은 가운데 정렬로 된다. 그냥 선택 후 왼쪽 정렬 해주면 간단하게 해결 된다.


*단색만 지정할 경우는 backGroundRun()부분은 빼도 된다. 그 부분을 루프에 넣으면 된다.


*이벤트는 간단하게 손가락을 뗄때, 동작하도록 했다. 원래 코드에는 롱터치도 구현했지만, 뺐다!


블로그 이미지

김코치 나미쵸

컴퓨터 코치 김코치 컴퓨터 자격증 취득과 아는 힘의 즐거움을 드립니다. 나도 할 수 있다는 자신감은 덤으로 드립니다. 기초부터 실무까지 김코치를 찾아 주세요.

댓글을 달아 주세요

 돼지등DIY 카페에서 처음 DIY를 시작하는 분들이 간단하게 만드는 것중에 하나다. 값싸게 재료를 구할 수 있고, 작은 노력으로 집에서 평상시에 사용할 수 있다. 개인적으로 터치센서네오픽셀제어하기 위해 마이크로비트사용 하였다.


돼지등 만들기

(마이크로비트로 동작 확인 하기)

1. 돼지등이란


2. 재료













3. 동작 확인 동영상























4. 네오픽셀로 안에 들어갈 LED 만들기
























































5. 마이크로비트에 네오픽셀과 터치센서 연결하기

























































6. 터치센서 동작의 이해






















7. 블록코딩 하기


































































8. 자바스크립트 코드

 DIY 시작하는 분들이 값싼 재료를 이용하여 만드는 무드등이다. 


 스위치

 LED -> 네오픽셀 : 일반 LED 대신 색을 제어하기 위해 네오픽셀을 사용

 배터리 -> 요즘 DIY에서 흔히 많이 쓰는 18650배터리다

               휴대폰 보조배터리로도 많이 사용한다.

 1셀충전회로 -> TP4056이다. 충방전 회로가 있는건 사용하면 된다

 전선

 돼지저금통

 글루건

 납땜 세트

 ----------

 추가 터치 센서 

 추가 마이크로비트


 

 <https://youtu.be/iSLO6EvCeZY>


 터치할 때마다 등의 색이 바뀐다.



 

 <네오픽셀로 LED등 만들기 사진>

네오픽셀 6개로 등을 만들었다. 그냥 큐브(주사위) 각 면에 LED를 붙혔다고 생각하면 된다. 사실 둥글게 만들고 싶었지만 막손이라...... 각지게 만드는게 편해서 큐브 모양으로 만들었다.


 

 <네오픽셀등 완서된 사진>



 

<마이크로비트, 네오픽셀, 터치센서 사진>


 

 <fritzing로 만든 연결 사진>


 위 사진대로 연결 해 주면 면된다.

 P0 - DI -> 네오픽셀

 P1 - I/O -> 터치 센서


 터치센서동작은 3가지로 구분 할 수 있다.

  1. 터치 센서에 손가락을 처음 댄 상태        현재 상태 1 이전상태 0

  2. 처음 대고 그 상태를 유지한 상태           현재 상태 1 이전상태 1

  3. 대고 유지한 상태에서 손가락을 땐 상태  현재 상태 0 이전상태 1


 여기서 더 구분을 할 수 있으나, 돼지등에 터치 기능을 구현하는데는 3번만(1번으로 해도 된단) 필요하기 때문에 다음과 같이 블록을 만들었다. 

 

<터치센서 동작 부분 블록코딩 사진>

 

 

 <블록코딩 사진> 

microbit-네오픽셀터치센서누르는2 (19).hex


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
35
36
37
38
39
40
41
42
43
44
let item: neopixel.Strip = null
let eventCount = 0
let event = 0
let last = 0
let current = 0
current = 0
last = 0
event = 0
eventCount = 0
item = neopixel.create(DigitalPin.P0, 6, NeoPixelMode.RGB)
basic.forever(() =&gt; {
    current = pins.digitalReadPin(DigitalPin.P1)
    if (current == 0 &amp;&amp; last == 1) {
        event += 1
        eventCount = event % 3
    }
    last = current
})
control.inBackground(() =&gt; {
    while (true) {
        basic.showNumber(eventCount)
        if (eventCount == 0) {
            item.showColor(neopixel.colors(NeoPixelColors.White))
        } else if (eventCount == 1) {
            item.showColor(neopixel.colors(NeoPixelColors.Red))
        } else {
            item.showColor(neopixel.colors(NeoPixelColors.Red))
            basic.pause(200)
            item.showColor(neopixel.colors(NeoPixelColors.Orange))
            basic.pause(200)
            item.showColor(neopixel.colors(NeoPixelColors.Yellow))
            basic.pause(200)
            item.showColor(neopixel.colors(NeoPixelColors.Green))
            basic.pause(200)
            item.showColor(neopixel.colors(NeoPixelColors.Indigo))
            basic.pause(200)
            item.showColor(neopixel.colors(NeoPixelColors.Violet))
            basic.pause(200)
            item.showColor(neopixel.colors(NeoPixelColors.White))
            basic.pause(200)
        }
    }
})
 
cs

1. 쉽게 할 수도 있었는데...... run time error는 미리 알 수도 없고, 실제 소스 올리고 나서 나는 것들인데...... 에러나면 그냥 멈춘다...... 그것도 모르고 나는 고생을 했다. 0 / 3 ......


2. 네오픽셀을 단색으로 표현하는건 쉽다. 그러나 화려하게 레인보우를 적용하면 쓰레드가 필요한데...... 마이크로비트에서는 어떻게 해야 할지...... 백그라운드 실행으로 할려고 했으나, 내가 이전에 했던 생각한것처럼 안되어 이 글에는 빼 버렸다. 검색을 해야 겠다.


3. 동작 확인으로 마이크로비트를 사용했다. 이번 글에서 아쉬웠던건 실제 사용할 수 있도록 꾸밀 수가 있었는데, 그 부분이 조금 아쉽다. 마이크로비트로 동작 확인것이기 때문에 이걸로 만족한다.


4. 아래는 원래 목표했던 돼지등이다. 배터리와 충전회로를 넣어서 제품(?)처럼 만들었다. 이 글을 쓰는 시점에서 완성 되었다. 이것 또한 정리해서 올려야 겠다.




블로그 이미지

김코치 나미쵸

컴퓨터 코치 김코치 컴퓨터 자격증 취득과 아는 힘의 즐거움을 드립니다. 나도 할 수 있다는 자신감은 덤으로 드립니다. 기초부터 실무까지 김코치를 찾아 주세요.

댓글을 달아 주세요

<펄러비즈 하트 사진> 

출처 : http://blog.naver.com/amin0831/220667134588

 

 사진에 보이는 것처럼 펄러비즈로 만든 하트 모양을 마이크로비트 네오픽셀 LED를 이용하여 만들어 보려고 한다.  


재료는 아래와 같다.

 * 마이크로비트 1개 

 * 네오픽셀 RGB LED 27개

 * 점퍼선 3개

 * 하트모양 아크릴 앞 뒤 한개씩

 * 고정 너트(3개)와 볼트(6개) 



완성된 것을 먼저 보자

<27개의 네오픽셀에다가 레인보우적용한 것>


<27개의 네오픽셀에다가 내가 원하는 색을 적용한 것>


첫번째화려하지만, 오늘 목표두번째다. 자 이제 작해 보자! 크게 두 부분으로 나눠서 해야 된다. 한 부분은 내가 원하는 동작을 할 수 있게 재료들연결 해줘야 한다. 즉 피지컬(물리적인) 부분이다. 다른 한 부분소프트웨어다. 내가 원하는 색으로 네오픽셀 LED동작하게 끔 마이크로비트 블록코딩을 해야 한다. 먼저 소프트웨어 부분 부터 해보자.


 

<간단하게 목표 정리한 노트>

 

 다음은 종이에 정리한 내용이다.


 * 얼굴 부분과, 눈 부분 각각 제어

   한번에 전부 제어 할려면, 눈 모양 만큼 똑같은 걸 반복해야 해서, 

   반복을 피하려고 얼굴 부분과 눈 부분을 분리하여 제어 한다.


 * 오른쪽 하트속의 숫자

   네오픽셀 위치다. 위치는 0부터 시작 하기때문에 0~26을 사용 한다.


 * 을 제어할 네오픽셀 위치

   눈의 위치는 5, 6, 8, 9, 12, 13, 15, 16다.

   00 00 ->  5  6  8  9

   00 00     1223 1516


 * 눈 모양은 8가지로 한다.

   OO OO | OO OO | OO OO | OX  XO | XO  OX | XO  XO | OX  OX | OO OO 

   XO XO  | OX  OX | OX  XO | OO OO | OO OO | OO OO | OO OO | XO  OX




종이에 정리한 내용을 가지고 블록코딩을 하자.  microbit-하트 (8).hex

얼굴 부분




눈 부분

 

얼굴 부분 - face 배열 변수에는 얼굴 부분에 해당하는 네오픽셀 LED 위치가 저장되어 있다.

*얼굴색바꾸기 함수는 face 배열 변수의 있는 값을 하나씩 꺼내 그 위치에 있는 LED 색을 그린으로 설정한다.


눈 부분 - eyes 배열변수에는 눈 부분에 해당하는 네오픽셀 LED 위치가 저장되어 있으며, eyeShape 배열 변수에는 0,1로 눈 모양을 표현한 값들이 들어 있다. 예들 들면 다음과 같다.

  00 00 -> 0, 0, 0, 0 

  0X X0     0, 1, 1, 0

*눈모양바꾸기 함수는 랜덤으로 0~7 중에 한 숫자를 선택하여 눈모양을 결정하고, eyes 배열 변수와 eyeShape 벼열 변수의 값들을 가지고 눈 모양 위치에 있는 LED 색을 정해진 색으로 지정한다


<블록코딩 사진>


얼굴 부분과 눈 부분을 쉽게 제어하기 위해 배열을 사용했다. 블록코딩으로 배열은 가독성이 떨어져 코드로 아래와 같이 표현 한다.

face = [0, 1, 2, 3, 4, 7, 10, 11, 14, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26]

eyes = [5, 6, 8, 9,
12, 13, 15, 16]
eyeShape = [[0, 0, 0, 0,
1, 0, 1, 0],
[0, 0, 0, 0,
0, 1, 0, 1],
[0, 0, 0, 0,
0, 1, 1, 0],
[0, 0, 0, 0,
1, 0, 0, 1],
[0, 1, 1, 0,
0, 0, 0, 0],
[1, 0, 0, 1,
0, 0, 0, 0],
[1, 0, 1, 0,
0, 0, 0, 0],
[0, 1, 0, 1,
0, 0, 0, 0]]

 

 


이제 다른 한 부분피지컬(물리적인) 부분을 보자. 완성된 피지컬 부분은 아래 사진과 같다.

<만든어진 하트를 마이크로비트와 점퍼선으로 연견할 사진>


<하트모양 아크릴 & 네오픽셀 LED>


내가 사용한 네오픽셀은 스트립 타입이다. 그래서 옆의 사진처럼 필요한 만큼 짤라서 쓰고 이어서 쓸수 있다. 개수로 27개가 필요하다. 아크릴은 예전에 수원 셀프제작소에서 레이저로 잘라 만든 것이다. 시중에서 파는 것이 아니다...... 일단 저렇게 고정해 놓고, 잘린 부분은 선으로 이어 주면 된다.

 

<선을 연결 하기 전>


<선 연결 후>


사진에 보이는 대로 래 한줄인 네오픽셀 스트립을 필요한 만큼 잘라 하트 모양을 만들고 잘려진 부분을 으로 연결한 것이다. 네오픽셀 스트립을 이용하는 이유는 3선으로(GND, +5V, DI)로 쉽게 제어가 가능하기 때문이다.

피지컬(물리적인) 부분은 이것으로 완성이다. 


네오픽셀 LED는 사용&제어가 쉬워서 응용할 수 있는 부분이 많다. 할 수 있는 것들을 찾아봐야 겠다.

블로그 이미지

김코치 나미쵸

컴퓨터 코치 김코치 컴퓨터 자격증 취득과 아는 힘의 즐거움을 드립니다. 나도 할 수 있다는 자신감은 덤으로 드립니다. 기초부터 실무까지 김코치를 찾아 주세요.

댓글을 달아 주세요

아주 오래전에 만들어 놓은 하트 RGB LED다. 아두이노로 동작 시킬때는 정상적으로 됐는데! 왜 마이크로비트로 할때만 빨간색으로만 나오냐구 ㅠㅠ. 그것때문에 관련 글을 작성할 때, 이걸 못 섰다. 마이크로비트3.3V으로 동작하고 그것 때문에 동작 안하나 싶어서 외부전원으로 5V 넣기도 하고, 다른 확장보드이용해서 해보기도 하고...... 많이 LED를 연결해서 그런가 싶어서...... 아래 사진처럼 연결 되어 있던 선들을 하나하나 잘라 테스트도 했다. 그런데도 원인을 찾을 수가 없었다.


혹시나 설마...... 테스트기로 아래 사진 부분에 있는 점퍼선이 도통이 되는지 확인을 해봤다. +V5 -> 삐~, DI -> 삐~, GND -> ...... 이런 젠장...... GND 점퍼선 플라스틱 부분 안쪽에서 끊어진 것이다. 


분명 그곳이 문제가 있다고 증상이 있었는데, 내가 무시한거 같다. 정상적이라면 밝게 색이 빛나야 하는데......

아두이노로 연결했을 경우       -> 색이 표현 됐다. 그러나 많이 떨렸다.

마이크로비트로 연결했을 경우 -> 빨간색만 나왔다

 -> 정상적으로 3개의 선이 연결 되면 동작하는데, +5V&DI만 연결 되면 빨간색으로 나온다...... <- 이미 경험했던 거다.


결국, 이런 저런것들을 무시한 채 한 덕분하지 않아도 될 것들을 하게 됐다. 다시 연결하고 다른 것으로 교체 하니 정말 잘 작동한다.^^


블로그 이미지

김코치 나미쵸

컴퓨터 코치 김코치 컴퓨터 자격증 취득과 아는 힘의 즐거움을 드립니다. 나도 할 수 있다는 자신감은 덤으로 드립니다. 기초부터 실무까지 김코치를 찾아 주세요.

댓글을 달아 주세요


사진 왼쪽에 있는 ATTINY85 모듈 WS2812B 네이픽셀 RGB를 구동해보려고 한다. 일반적으로 연결 하는 부분은 아두이노같지만, 마지막 업로드 하는 부분에서 다르다. 이전에 이런 작업을 하지 않아도 따라하면 될 만큼 써보겠다. 왜냐면, 선 행동 후 정확하게 알기 위해서다.


엄청 자세한 내용은 https://blog.naver.com/roboholic84/220388177048에서 확인 하면 된다. 나도 이 게시물을 보고 따라 했다.


일단 대략적인 과정이다

 1)프로그램 다운로드 - 일단 소스를 작성할 수 있는 프로그램다운 받자!

 2)프로그램 실행 - 설치된 Arduino IDE - Digistump Release 프로그램실행 하자! 

 3)ATTINY85 보드 설정 - 가지고 있는 ATTINY85 모듈에 맞는 보드를  선택 하자!

 4)업로드 테스트 - 첫 업로드를 해보자!

 5)ATTINY85에 업로드 - 여기부터가 일반 아두이노업로드 하는 방법과 다르니 잘 보자.

 6)네오픽셀 연결 - ATTINY85네오픽셀연결하자

 7)네오픽셀동작할 수 있는 소스작성해보자. 



1)일단 소스작성할 수 있는 프로그램다운 받자! 

    https://github.com/digistump/DigistumpArduino/releases/download/v1.5.8C/DigistumpArduinoInstall1.5


  실행파일 이므로 다운로드 받고 설치 하자!

  

2)설치된 Arduino IDE - Digistump Release 프로그램실행 하자! 

아래 사진의 아이콘을 더블클릭하여 실행 하면 된다.

<실행 사진>


3)가지고 있는 ATTINY85 모듈에 맞는 보드를  선택 하자!

   도구 > 보드 > Digispark (Default - 16.5mhz)

<Digispark (Default - 16.5mhz 선택 사진>


4)첫 업로드를 해보자!

파일 > 예제 > Digispark_Examples > Start 순으로 클릭 한다.


5)여기부터가 일반 아두이노업로드 하는 방법과 다르니 잘 보자.

일단 보자

업로드 버튼 누르고 시간이 지나면  아래와 같은 메시지표시 된다.


Running Digispark Uploader... 

Plug in device now... (will timeout in 60 seconds)


이때 ATTINY85모듈을 컴퓨터 USB에 연결 한다.


그럼 아래와 같이 동작하고


> Please plug in the device ... 

......

>> Micronucleus done. Thank you!


Thank you!가 나오면 끝 그리고 모듈에서 빤짝빤짝 빛나고 있는 LED확인 할 수 있다


이제 목표했던 네오픽셀 RGB LED를 연결할 차례다!


6)ATTINY85네오픽셀연결하자

<ATTINY85&네오픽셀 연결 사진>


사진처럼 잘 연결해 주자.

5V    - +5V

P1    - DI -> 프로그램을 작성할때 중요한 것이므로 잘 기억하자

GND - GND


7)네오픽셀동작할 수 있는 소스작성해보자. 

아래 동영상은 예전에 만들어 놨던 하트에 ATTINY85를 연결하여 LED를 동작시킨 것이다. 예제만 살짝 바꾼것이니 그냥 따라하면 된다.


네오픽셀 사용하는 방법은  빨간색으로 강조한 부분이다. 기본 설정값(1)가지고 네오픽셀 제어할 수 있는 객체만들고(2), 초기화(3) 하고, 각각의 LED의 색을 지정(4)하고, 보여 준다(4).

// NeoPixel Ring simple sketch (c) 2013 Shae Erisson

// released under the GPLv3 license to match the rest of the AdaFruit NeoPixel library

#include <Adafruit_NeoPixel.h>


// Which pin on the Arduino is connected to the NeoPixels?

#define PIN            1


// How many NeoPixels are attached to the Arduino?

#define NUMPIXELS      23


// When we setup the NeoPixel library, we tell it how many pixels, and which pin to use to send signals.

// Note that for older NeoPixel strips you might need to change the third parameter--see the strandtest

// example for more information on possible values.

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


int delayval = 500; // delay for half a second


void setup() {

  pixels.begin(); // This initializes the NeoPixel library.

}


void loop() {

  // For a set of NeoPixels the first NeoPixel is 0, second is 1, all the way up to the count of pixels minus one.

  for(int i=0;i<NUMPIXELS;i++){

    // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255

    pixels.setPixelColor(i, pixels.Color(0,150,0)); // Moderately bright green color.

    pixels.show(); // This sends the updated pixel color to the hardware.

    delay(delayval); // Delay for a period of time (in milliseconds).

  }

}





(1)네오픽셀에 DI를  ATTINY85 P1핀연결하기 위해서 PIN1로 한다.



(1)네오픽셀 LED수를 설정 한다. 4개면 4 20개면 20으로 해준다.




(2)네오픽셀제어하기 위해 변수에 네오픽셀 객체를 만들어 저장 한다. 기본 예제는 NEO_GRB 가 아니고 NEO_RGB로 되어 있으니 고쳐 준다.



(3)초기화 한다.






(4)setPixelColor() 함수로 원하는 위치에 원하는 색을 설정한다. (5)show()함수실행하기 전까지지정한 색으로 표시 되지 않는다.  



블로그 이미지

김코치 나미쵸

컴퓨터 코치 김코치 컴퓨터 자격증 취득과 아는 힘의 즐거움을 드립니다. 나도 할 수 있다는 자신감은 덤으로 드립니다. 기초부터 실무까지 김코치를 찾아 주세요.

댓글을 달아 주세요

일단 무슨 기능인지 결과를 먼저 보자

<기능 추가한 동영상>

그렇다. 그냥 뺑글뺑글 도는 기능 추가한 것이다. 소스 코드에는 여러가지 흔적이 있지만 그냥 이걸 보여주는 걸로 만족 ㅋ


아래는 작업 과정이다.

이랬던 뒷면이 

<오크통뱅크 상판 뒷면_작업 하기전>

이렇게 바뀌었다. --.--

<오크통뱅크 상판 뒷면_작업 후>

막손이라 정리가 잘 안된다. <- 잘 안된거 숨기기 위해 글씨는 작게......


원래 오크통네오픽셀아두이노 나노가 들어갈 자리는 없다. 그런데 들어가 있다. 이유는 간단하다.

처음 배터리팩과 오크통을 구매할 당시 어거지로 넣다가 뺄수도 없고 완벽하게 넣을 수도 없는 중간에

걸린 상황이 되어 눈물(ㅠㅠ)을 머금고 오크통을 분해 했다. 조립하는 과정에서 공간을 만든다고 바닥을

아래의 사진처럼 만들었다.

<오크통뱅크 바닥>


분해된 오크통 재활용 하다보니 공간이 남아서 아두이노 나노를 넣을수 있었다. 그러나 꽉 찬다...... 


이제 소스 코드를 보자!

기본에 있는 예제 소스를 기본으로 몇개 추가 하고 수정 했다.


#include <Adafruit_NeoPixel.h>

//#include <MsTimer2.h>

#ifdef __AVR__

  #include <avr/power.h>

#endif


#define PIN 6


// Parameter 1 = number of pixels in strip

// Parameter 2 = Arduino pin number (most are valid)

// Parameter 3 = pixel type flags, add together as needed:

//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)

//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)

//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)

//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)

//   NEO_RGBW    Pixels are wired for RGBW bitstream (NeoPixel RGBW products)

Adafruit_NeoPixel strip = Adafruit_NeoPixel(13, PIN, NEO_GRB + NEO_KHZ800);

uint32_t oakStrip[13] = {strip.Color(0,255,0) //초록색

                        ,strip.Color(0,255,0)       //단색으로 돌릴대는 이부분 수정해 주면 된다. 적어도 앞 부분에 5개 정도 색을 지정해야

                        ,strip.Color(0,255,0)       //이쁘게 나온다.

                        ,strip.Color(0,255,0)

                        ,strip.Color(0,255,0)

                        ,strip.Color(0,0,0)

                        ,strip.Color(0,0,0)

                        ,strip.Color(0,0,0)

                        ,strip.Color(0,0,0)

                        ,strip.Color(0,0,0)

                        ,strip.Color(0,0,0)

                        ,strip.Color(0,0,0)

                        ,strip.Color(0,0,0)

};

int onStrip[13] = {1,1,1,1,1,0,0,0,0,0,0,0,0}; //

int currentPos = 10;

int fade = 2;


// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across

// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input

// and minimize distance between Arduino and first pixel.  Avoid connecting

// on a live circuit...if you must, connect GND first.


void setup() {

  // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket

  #if defined (__AVR_ATtiny85__)

    if (F_CPU == 16000000) clock_prescale_set(clock_div_1);

  #endif

  // End of trinket special code


  Serial.begin(9600);

  strip.begin();

  strip.show(); // Initialize all pixels to 'off'

  //MsTimer2::set(60, onFade); //숨쉬는 기능을 적용할려면 이 부분 주석을 풀어 부면 된다.

  //MsTimer2::start();

}


void loop() {

  

  //onColor(); //단색으로 돌리기

  

  rainbow(60); //무지개색으로 돌리기


}


void onColor()

{

  for(int j = 13 ; j > 0 ; j--){

    for(int i = 0 ; i < strip.numPixels() ; i++)

    {

     strip.setPixelColor(i, oakStrip[(j+i)%strip.numPixels()]);

    }

    strip.show();

    delay(60);

  }

}


void rainbow(uint8_t wait) {

  uint16_t i, j;


  //strip.setBrightness(0);

  //currentPos = 0;


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

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

      if(onStrip[(j+i)%13] == 1)

      {

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

      }

      else

      {

        strip.setPixelColor(i, 0);

      }

    }

    strip.show();

    delay(wait);

  }

}


// Input a value 0 to 255 to get a color value.

// The colours are a transition r - g - b - back to r.

uint32_t Wheel(byte WheelPos) {

  WheelPos = 255 - WheelPos;

  if(WheelPos < 85) {

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

  }

  if(WheelPos < 170) {

    WheelPos -= 85;

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

  }

  WheelPos -= 170;

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

}


void onFade() // 숨시기 기능 함수

{

  if( currentPos < 3 || currentPos > 125 )

  {

    fade = fade * (-1);

  }

  currentPos = currentPos + fade;

  strip.setBrightness(currentPos);

  Serial.println(currentPos);

}


소스코드는 이렇다. 그냥 쓰면 된다. 더 좋은 방법이 있다면 댓글로 살짝 알려 줬으면 좋겠다. 그래야 나도 보고 배우니까^^

여기에 추가 기능 하다 더 넣고 싶은게 있다. 배터리 전압을 체크 하여 배터리 전압대응하는 색으로 표시하는 기능이다.

mcu 자체적으로 내부 전압을 알수 있다고 하는데...... 검색해봐야 겠다.


오크통뱅크 자료는 에다이카페에 있다. 


___LED.ino

Adafruit_NeoPixel-master.zip


블로그 이미지

김코치 나미쵸

컴퓨터 코치 김코치 컴퓨터 자격증 취득과 아는 힘의 즐거움을 드립니다. 나도 할 수 있다는 자신감은 덤으로 드립니다. 기초부터 실무까지 김코치를 찾아 주세요.

댓글을 달아 주세요