아두이노를 하다보면 

 

하드웨어 문제인지 소프트웨어 문제인지 모를 때까 있다.

 

그 중에 하나가 이번 예제이다.

 

사실 이번에는

 

NodeMCU를 사용할 필요는 없지만

 

후에 wifi를 사용하기 위해서 연습한 것이다.

 

 

 

보       드 : NodeMCU 1.0

개발 환경 : Platformio IDE

 

부       품 : 

 

1. RGB led (Anode)

2. 전선 4가닥

3. 220 Ω (ohm) 저항 1개

4. 미니 빵판 2개

 

 

 

RGB led 는 7_Segment 처럼

Anode 와 Cathode 두 종류가 있다. 

 

이왕 산다면 직관적으로 제어할 수 있는 Cathode 를 추천한다. 

(Anode 하다가 눈물..ㅜ)

 

◈ Common Anode

 

Common Anode 는 공통 단자가 ( + ) 극이다.

나머지를 LOW 로 해야 불이 켜진다.

 

Common Anode

◈ Common Cathode

 

Common Cathode 는 공통 단자가 ( - ) 극이다.

나머지는 HIGH 로 해야 불이 켜진다.

Common Cathode

 

이 LED를 다룰 때는 전압 차에 따른 값 Analog 값을 잘 비교해야한다.

R : 2 ~ 2.2 V

G : 3 ~ 3.2 V

B : 3 ~ 3.2 V

 

즉, 이말은

 

아두이노 우노 보드의   AnalogWrite 값은 0 ~ 255

사용할 NodeMCU 의    AnalogWrite 값은 0 ~ 1023

 

이며 

아두이노 우노 보드는 

R      : 0~ 170

G, : 0~255  

 

NodeMCU 보드는

R      0~ 682 

G,  : 0~ 1023 

 

로 해야한다는 것이다.

 

처음에 전체 다 1023 에 맞춰서 했다가 빨간색 밖에 안떠서 하루간 고생을 했다.

 

 

 

사용할 핀은 D5, D6, D7 이다.  그외에 D1, D2 도 사용 가능

 

핀 선언할 때는 

 

#define R_pin D7

또는 

#define R_pin 13      <- GPIO14

 

이라고 하면된다.

 

 

-------------------<보드 모양만 우노 입니다.>---------------------

 

NodeMCU 출력은 3.3V 입니다.

 

일단 platformio IDE 나  Arduino IDE  를 사용해 파일을 만든다.

 

 

<코드>

 

#include <Arduino.h>

#define R_pin 7
#define G_pin 8
#define B_pin 9

void setRGB(int, int, int);

void setup() {
  Serial.begin(115200);
  analogWrite(R_pin, 1023);  // 공통 양이라서 0에 가까울 수록 켜짐
  analogWrite(G_pin, 1023);
  analogWrite(B_pin, 1023);

}

void loop() {

  setRGB(255,0,0);  //red
  delay(500);
  setRGB(0,255,0);  //green
  delay(500);
  setRGB(0,0,255);  //blue
  delay(500);
  setRGB(255,255,0);  //yellow
  delay(500);
  setRGB(0,255,255);  //cyan
  delay(500);
  setRGB(255,0,255);  //magenta
  delay(500);

}


void setRGB(int R_value, int G_value, int B_value){

//Anode
  R_value = map(R_value, 0, 255, 1023, 512);  //빨강이 너무 강해서 반으로 줄임
  G_value = map(G_value, 0, 255, 1023, 0);
  B_value = map(B_value, 0, 255, 1023, 0);

  analogWrite(R_pin, R_value);  // 공통 양이라서 0에 가까울 수록 켜짐
  analogWrite(G_pin, G_value);
  analogWrite(B_pin, B_value);

  Serial.print("R :");
  Serial.print(R_value);
  Serial.print("\t");
  Serial.print("G :");
  Serial.print(G_value);
  Serial.print("\t");
  Serial.print("B :");
  Serial.println(B_value);
  delay(1000);

}

 

<작동 모습>

 

보라색

https://youtu.be/IAuo04daSgo

 

 

+ Recent posts