마이크로비트네오픽셀터치센서이용하여 돼지등동작하는 것을 확인 했다. 그러나 실생활에 사용하기 위해서는 배터리 이용해야 하고, 전원 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()부분은 빼도 된다. 그 부분을 루프에 넣으면 된다.


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


블로그 이미지

김코치 나미쵸

컴퓨터 코치 김코치

댓글을 달아 주세요