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


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


반응형
블로그 이미지

두리뭉실2:해피파인더그룹

레고가 좋고~ PBL 매력에 빠졌으며~ 취미로 개발하는 두리둥실

,


사진 왼쪽에 있는 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()함수실행하기 전까지지정한 색으로 표시 되지 않는다.  



반응형
블로그 이미지

두리뭉실2:해피파인더그룹

레고가 좋고~ PBL 매력에 빠졌으며~ 취미로 개발하는 두리둥실

,