개발자/Arduino

NANO 33 BLE Sense - 1. 온보드 RGB LED 실습

지구빵집 2020. 5. 10. 15:20
반응형

 

NANO 33 BLE Sense - 1. Built In RGB LED 실습

 

실습 전에 아두이노 통합개발환경을 설치해야 하고, 보드 매니저에서 Nano 33 ble sense 보드를 사용할 수 있도록 드라이버를 설치해야 하고, 센서를 실습하기 위해 필요한 라이브러리를 설치해야 합니다. 이런 과정에 대해 잘 모르시는 분은 아래 링크를 따라 참고하세요.

 

arduino nano 33 ble sense 개발 가이드 1 - 시작하기

 

위 링크로 시작하는 강의는 어려운 과정을 압축하여 강의한 내용이므로 이해하기에 다소 어려울 수 있습니다. Arduino nano 33 sense 보드의 여러 가지 센서들을 하나하나 쉽게 사용하고 의미를 알아볼 수 있도록 다시 자세한 코드와 실습과정을 설명한 강의 전체를 아래에 링크로 소개하니 참고하시기 바랍니다.

 

Arduino nano 33 BLE Sense 보드 모든 구성품 실습 강의

 

NANO 33 BLE Sense - 1. 온보드 RGB LED 실습

NANO 33 BLE Sense - 2. LSM9DS1, 9축 IMU센서 정보 활용

NANO 33 BLE Sense - 3. 기압 센서 사용해보기

NANO 33 BLE Sense - 4. 온습도 센서 HTS221 실습

NANO 33 BLE Sense - 5. 온보드 제스처 센싱 실습

NANO 33 BLE Sense - 6. 온보드 컬러 인식 RGB 센서 실습

NANO 33 BLE Sense - 7. 온보드 거리센서 실습

NANO 33 BLE Sense - 8. 더 살펴볼 것, 리소스와 더 많은 기능

 

RGB LED는 쿨한 부품입니다. 쉽고 재미있는 이유로 많은 학생이 가장 실습하기 좋아합니다. RGB LED는 프로젝트에서 큰 가능성을 제공하고 공간을 절약하게 해 줍니다. 여기에서는 PWM 방식을 사용하여 간단한 색을 제어하는 실습을 진행합니다. 우선 공통 양극, 공통 음극 LED가 내부적으로 어떻게 연결되어 있는지 확인해봅니다. common은 공통이란 의미이고, Cathode는  GND, Anode는 VCC를 의미합니다.

 

Nano 33 BLE sense 보드의 RGB Led는 Common Anode 연결입니다. 그래서 22, 23, 24번 핀을 출력으로 설정하고 LOW로 출력을 해야 불이 들어옵니다.

 

전부 off 하는 코드

  digitalWrite(RED, HIGH);
  digitalWrite(GREEN, HIGH);
  digitalWrite(BLUE, HIGH);

전부 on 하는 코드

 

  digitalWrite(RED, LOW);
  digitalWrite(GREEN, LOW);
  digitalWrite(BLUE, LOW);

 

 

Common Cathode 연결 RGB LED 

 

위의 다이어그램은 공통 음극 RGB LED의 내부 연결을 보여줍니다. Red, Green 및 Blue LED는 마이크로 컨트롤러의 이 세 핀을 사용하여 개별적으로 공급됩니다. 개별 LED를 활성화하면 빨강, 녹색 또는 파랑이 방출될 때 이러한 LED를 개별적으로 또는 함께 활성화할 수 있습니다. 그러나 함께 작동하면이 세 가지 색상과 다른 색상을 얻을 수 있습니다. PWM 신호로 이 3 개의 핀을 구동하면 페이딩 효과뿐만 아니라 다른 색상이 생성됩니다.

 

Common anode 연결 RGB LED 

다음은 Common Anode RGB LED의 내부 다이어그램입니다. 공통 음극과 공통 양극 구성의 주요 차이점은 LED의 공급 방식입니다. 공통 양극 구성에서 LED는 Vcc와 같은 전원 공급 장치를 통해 공급됩니다. 그리고 마이크로 컨트롤러를 통해 전류를 싱킹 하여 활성화됩니다. 따라서 프로젝트에서 RGB LED를 사용할 때 공통 음극의 경우 가장 긴 핀을 접지에 연결하고 공통 양극의 경우 RGB LED의 가장 긴 핀을 Vcc 소스 전압에 연결합니다.

 

주소 지정 가능한 RGB LED 스트립 WS2812B :

위에서 본 LED는 마이크로 컨트롤러에서 3 개의 핀을 사용하므로 모든 경우에 가능하지는 않습니다. 따라서 다른 유형의 RGB LED를 처리할 수 ​​있습니다. 이것은 하나의 핀만 필요하며 이를 사용하여 하나 이상의 LED를 작동시킬 수 있습니다. 이러한 RGB LED는 주소 지정이 가능합니다 (예 : WS2812B 또는 단색 등). 이 유형의 LED는 작동에 필요한 제한 저항의 대부분을 이미 내장하고 있습니다. 이 LED 모듈을 구동하고 원하는 색상과 효과를 생성하기 위해 정확한 PWM 신호를 생성하기만 하면 됩니다.

 

PWM 신호 :

디지털 신호 인 펄스폭 변조는 회로의 전류를 지속적으로 켜고 끄는 스위치처럼 작동합니다. PWM의 두 가지 주요 요인은 마이크로 컨트롤러를 통해 두 가지 모두를 제어할 수 있는 주파수와 듀티 사이클입니다. 주파수는 PWM 신호 주기를 완료하는 속도와 그에 따라 높은 (켜기) 및 낮은 (끄기) 상태를 얼마나 빨리 전환하는지 결정합니다. duty cycle 신호가 높은 (켜짐) 상태 인 시간입니다. 한 주기를 완료하는 데 걸리는 총시간의 백분율 이 동작을 회로에 충분히 빠르게 수행하면 출력이 정전압처럼 작동하여 LED에 구동 신호로 제공됩니다. 아래 그래프는 PWM에 대한 이해를 높여줍니다.

 

PWM – 0 % 듀티 사이클

 

100 % 듀티 사이클

 

PWM – 50 % 듀티 사이클

 

PWM 신호의 다른 응용 :

PWM은 DC 모터 속도 제어에도 널리 사용됩니다. 또한 선형 전력 공급을 초래하는 손실 없이 부하로 공급되는 전력량을 제어하는 데 사용할 수 있습니다. PWM의 또 다른 용도는 오디오 증폭기입니다.

 

RGB LED는 각각 GPIO D22, D23, D24에 연결되어 있다. 아래 예제를 업로드하여 온보드 RGB를 실습한다.

 


const int RED = 22;
const int GREEN = 23;
const int BLUE = 24;

void setup() 
{
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(BLUE, OUTPUT);
  digitalWrite(RED, HIGH);
  digitalWrite(GREEN, HIGH);
  digitalWrite(BLUE, HIGH);
}

void loop() 
{
  digitalWrite(RED, LOW);
  digitalWrite(GREEN, HIGH);
  digitalWrite(BLUE, HIGH);
  delay(1000);
  digitalWrite(RED, HIGH);
  digitalWrite(GREEN, LOW);
  digitalWrite(BLUE, HIGH);
  delay(1000);
  digitalWrite(RED, HIGH);
  digitalWrite(GREEN, HIGH);
  digitalWrite(BLUE, LOW);
  delay(1000);
}

 

RGB LED가 정상적으로 작동하는 것을 확인할 수 있다. 보드에 내장된 RGB LED는 PWM 작동도 지원하기 때문에 원하는 색상을 원하는 만큼 섞어 다양한 색을 만들 수 있다. 아래 소스코드에서 PWM 방식으로 RGB Led를 제어한다. 

 

int ledPin1 = 22; //red led
int ledPin2 = 23; //green led
int ledPin3 = 24; //blue led

void setup() {
  // nothing happens in setup
}

void loop() {
  // fade in from min to max in increments of 5 points:
  for (int fadeValue1 = 0 ; fadeValue1 <= 255; fadeValue1 += 5) {
    // sets the value (range from 0 to 255):
    analogWrite(ledPin1, fadeValue1);
    // wait for 30 milliseconds to see the dimming effect
    delay(50);
  }
  
  // fade out from max to min in increments of 5 points:
  for (int fadeValue1 = 255 ; fadeValue1 >= 0; fadeValue1 -= 5) {
    // sets the value (range from 0 to 255):
    analogWrite(ledPin1, fadeValue1);
    // wait for 30 milliseconds to see the dimming effect
    delay(50);  
  }
  
  // fade in from min to max in increments of 5 points:
  for (int fadeValue2 = 0 ; fadeValue2 <= 255; fadeValue2 += 5) {
    // sets the value (range from 0 to 255):
    analogWrite(ledPin2, fadeValue2);
    // wait for 30 milliseconds to see the dimming effect
    delay(50);
  }
  
  // fade out from max to min in increments of 5 points:
  for (int fadeValue2 = 255 ; fadeValue2 >= 0; fadeValue2 -= 5) {
    // sets the value (range from 0 to 255):
    analogWrite(ledPin2, fadeValue2);
    // wait for 30 milliseconds to see the dimming effect
    delay(50);
  }
  
  // fade in from min to max in increments of 5 points:
  for (int fadeValue3 = 0 ; fadeValue3 <= 255; fadeValue3 += 5) {
    // sets the value (range from 0 to 255):
    analogWrite(ledPin3, fadeValue3);
    // wait for 30 milliseconds to see the dimming effect
    delay(50);
  }
  
  // fade out from max to min in increments of 5 points:
  for (int fadeValue3 = 255 ; fadeValue3 >= 0; fadeValue3 -= 5) {
    // sets the value (range from 0 to 255):
    analogWrite(ledPin3, fadeValue3);
    // wait for 30 milliseconds to see the dimming effect
    delay(50);
  }
}

실습 코드 출처: Driving RGB LEDs with PWM signal using Arduino

 

nano 33 ble sense 보드 rgb led control

 

참고사이트: Driving RGB LEDs with PWM signal using Arduino  

 

 

 

 

 

반응형