아두이노프로세싱 프로그래밍

초보자를 위한 프로세싱과 아두이노의 시리얼 통신에 의한 3색 LED PWM 제어

coding art 2017. 3. 22. 19:36
728x90


메인 PC에서 돌라가는 프로세싱 프로그램과 아두이노와의 USB-2-시리얼 인터페이스에 의해서 아두이노 보드의 3색 LED의 색상 별 밝기를 각각 조절할 수 있는 프로그램을 작성하기로 하자. 이와같이 메인 PC에서 Processing 프로그램에 의해 아두이노 마이크로콘트롤러 보드를 제어할 경우 다채로우면서 다양한 아두이노 응용 프로그램을 짤 수 있는 이점이 있다.

이번 프로그램에서는 아두이노 프로그램을 Dimmer_01에서 조금 변형하여 일단 3 가지 색상을 각각 on해 보아 3색 LED의 색상을 확인해 보도록 하자. 그 후에 3색 LED를 연이어 on 시켜 어떤 색상이 디스플레이 되는지 시험해 보기로 한다.




아두이노에서 PWM  밝기 조절이 가능한 디지털 데이터 핀 3,5,6,9,10,11번 핀들 중에서 3-빨간색, 6-초록색, 9-청색 선을 배선한다. 한편  아울러 COMMON 선은 저항과 연결하되 전류 제한 저항의 다른 한쪽은 GND 즉 0V에 흑색으로 배선한다.






아두이노 프로그램 시작 부분에 어레이 LED[3]을 정의한다. 어레이는 미리 변수명과 갯수를 설정하여 메모리를 예약하는 역할을 한다. 특히 for loop 문을 사용하여 인덱스를 0에서 1씩 순차적으로 증가 시켜 불러 낼 경우 프로그램을 아주 압축적으로 짤 수 있는 이점이 있다.

setup()에서 통신 속도는 높을수록 좋다. 이 통신속도는 Processing의 port = new Serial(this, Serial.list()[2], 115200) 명령의 통신 속도와 일치해야 한다.

loop()의 초반은 Serial.available() 즉 시리얼 통신 버퍼에 무엇이 입력되었는지 Serial.read()에 의해 정수형 숫자 데이터로 읽어 들인다.


현재 예제 프로그램은 초록색 LED를 구동하도록 프로그램 되어 있다. Dimmer_01 프로그램에서처럼 프로세싱과 연동하여 초록색 LED의 밝기를 조절해 본다.

마찬가지로 빨간 색 LED 와 청색 LED에 대해서도 해당 부분을 활성화 시켜 즉 //를 제거하여 시험해 본다.



마지막 for loop문을 살려 실행 시켜 색상을 관찰해 보자. LED를 직접 들여다 보면 작은 RGB 불꽃이 보일 것이다. 동영상에서처럼 흰색 종이에 비춰보면 RGB를 확실하게 볼 수 있을 것이다.


이번 프로그램 작업에서는 바로 앞에 블로그에 올렸던  “초보자를 위한 프로세싱과 아두이노의 시리얼 통신에 의한 LED analogWrite() PWM 제어” 에서 사용하였던 Processing_Dimmer_01 프로그램을 수정 없이 사용하기로 한다. 즉 이 부분은 앞 블로그의 프로그램을 복사하여 사용하도록 한다.

프로세싱에서 그래픽 화면을 설정하고 가로 축을 따라 0에서 255 단계에 걸쳐 흑백 명암으로 이루어진 그래디언트 화면을 작도한다. for 루핑에 따른 stroke(i) 명령에서 i 값이 증가함에 따라 수직선의 명암이 점차 밝아지게 된다.

3색 LED의 경우에는 3개의 LED들이  하나에 들어 있으므로 3개의 PWM 이 가능한 아두이노 디지털 핀에 배선하게 되는 차이점이 있을 것이다.


프로세싱 프로그램이 실행되면 스트로크 조절에 의해 명암 그래디언트 화면이 얻어진다.

프로세싱 화면에서 마우스를 좌우로 이동 시키게 되면 0∼255 범위내에서 즉각적으로 발기가 변화되는 것을 볼 수 있을 것이다.










Three_Color_LED_Dimmer_01


byte LED[3] {3,6,9};
void setup() {
  Serial.begin(115200);
  byte i;
   for(i=0; i<3;i++) {
   pinMode(LED[i],OUTPUT); 
   }
}

void loop() {
  byte brightness;
  if (Serial.available()) { // 프로세싱의 시리얼 출력 여부 확인
    brightness = Serial.read(); // 프로세싱의 시리얼 출력 결과물 확인

    byte i;
  
//     for(i=0; i<3;i++) {               //빨간색 LED on
//      analogWrite(LED[0], brightness);// 밝기 지정에 따른  LED on
//     }//for loop ends
   
//     for(i=0; i<3;i++) {              //초록색 LED on
//      analogWrite(LED[1], brightness);// 밝기 지정에 따른  LED on
//     }//for loop ends
    
//      for(i=0; i<3;i++) {           //청색 LED on
//      analogWrite(LED[2], brightness);// 밝기 지정에 따른  LED on
//     }//for loop ends

     // 3 색 LED on: 3색 확인을 위해서 LED 위를 백색 종이로 비춰 보도록 한다
     for(i=0; i<3;i++) {
      analogWrite(LED[i], brightness);// 밝기 지정에 따른  LED on
     }//for loop ends

  }//if...ends
}//프로그램 끝