HW 공작소

아두이노7(2): 앱인벤터와 아두이노로 3가지 색 LED 제어

kusson 2017. 6. 8. 05:57
반응형
728x170

 지난 시간에는 아두이노 보드만으로 3가지색의 LED를 차례로 동작시키는 방법에 대해서 알아 보았다.  이번 시간에는 앱인벤터로 지난 시간에 했던 실험을 똑같이 재현해 보겠다. 지난 시간에 했던 실험을 잘 따라와준 분들이라면 이번 시간에는 쉽게 넘어 갈 수 있을 것이다.

 

 앱인벤터의 On 버튼을 누르면 3가지색의 LED가 차례로 동작하고 Off 신호가 들어오지 않는 이상 계속 루프를 돌게 된다. 그러다 Off 신호가 들어오면 3가지 LED 모두의 불이 꺼지고 루프를 빠져 나오게 된다. 그러다 또 On 신호가 들어오면 위의 과정을 반복한다. 이것이 우리가 생각하는 이상적인 형태일 것이다. 지난 시간과의 차이점이라면 아두이노 스케치에서 앱인벤터와 아두이노 우노보드와의 통신 부분만 추가하면 된다. 다른 부분은 거의 비슷하나 몇가지 점에서 차이가 있는 것을 알 수 있었는데 아래 코드부분에서 설명하겠다.

 

 먼저 아두이노 우노보드와 브레드 보드를 이용해 아래 그림과 같은 회로를 구성한다. 회로는 지난 시간과 똑같고 두개의 스위치만 없애면 된다. 두개의 스위치 역할을 앱인벤터의 On/Off 버튼이 대신할 것이다. 

 

 

먼저 아두이노 쪽의 스케치 프로그램을 다음과 같이 작성한다.

void setup() {

Serial.begin(9600);                          //보 레이트다.
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
}                                               //3개의 LED를 Off 시켜 놓지 않아도 Off 상태로 시작한다.

 

void loop(){
 if(Serial.available()){                    //시리얼 포트와 통신하는 부분이다.
    int b = Serial.read();               //시리얼 포트로 들어오는 신호를 읽어서 정수형 변수 b에 대입한다.
        while(b == 1){                  //b의 값이 1이면 다음 루프를 실행한다.

        digitalWrite(3, HIGH);          //3번 핀으로 5V를 출력한다.
        digitalWrite(4, LOW);           //4번 핀으로 0V를 출력한다.
        digitalWrite(5, LOW);           //5번 핀으로 0V를 출력한다.
        delay(1000);                      //1초간 지연 시간을 둔다.


        digitalWrite(3, LOW);
        digitalWrite(4, HIGH);
        digitalWrite(5, LOW);
        delay(1000);


        digitalWrite(3, LOW);
        digitalWrite(4, LOW);
        digitalWrite(5, HIGH);
        delay(1000);

 

//여기가 LED를 Off 시키는 루틴이다.

        int b = Serial.read();             //b의 값을 읽어 오기 위해 다시한번 변수선언을 해준다(필수적이다).
            if(b == 0) {                    //b의 값이 0이면 아래의 명령을 실행한다.
             digitalWrite(3, LOW);      //LED를 Off 시킨다.
             digitalWrite(4, LOW);
             digitalWrite(5, LOW);
             break;                         //루프를 빠져 나온다.
             }
         }       
    }
}

 

위와 같이 스케치 프로그램을 작성하고 컴파일과 업로드를 한다.

 

 

 

 다음은 프로세싱 서버 프로그램을 다음과 같이 작성한다. 프로세싱 서버 프로그램은 한번 작성해 두면 거의 손볼것 없이 사용할 수 있으므로 한번 작성할때 확실히 해두자.

 

//processing: arduino3LEDTest;WifiServer
import processing.serial.*;
import processing.net.*;
Serial p;
Server s;
Client c;

void setup(){
  println(Serial.list());
  textSize(32);
  p = new Serial(this, Serial.list()[1],9600);            //이 부분만 본인의 컴퓨터 포트와 관련된 부분이다. 
  s = new Server(this, 123);                              //포트에 따라 [2], [3]번을 설정해야 할 수도 있다.
}

String input;
void draw(){
  c = s.available();
 
  if(c!=null){
    input = c.readString();
   
      if(input.length()>237){
        println(input.charAt(237));
        background(127);
       
          if(input.charAt(237)=='1'){
            p.write(1);fill(255, 0, 0);       //시리얼 포트로 1을 보낸다. (앱인벤터의 On 버튼시 실행된다.)
            text("1", 20, 40);               //실행창에는 "1"을  써서 1번을 보냈음을 나타낸다.
          }
         
         if(input.charAt(237)=='0'){
            p.write(0);fill(0, 0, 0);        //시리얼 포트로 1을 보낸다. (앱인벤터의 On 버튼시 실행된다.)
            text("0", 20, 40);             //실행창에는 "0"을 써서 0번을 보냈음을 나타낸다.
         }
      ellipse(50,70,80,50);              //타원과 타원의 색으로 신호가 신호가 제대로 나오는지 표시한다.
    }
  }
}

 프로세싱 서버 프로그램도 실행을 시키고 그 다음 앱인벤터를 기동한다. 순서가 중요하므로 유의하기 바란다. 프로그램을 수정하게 되면 일단 프로세싱 서버프로그램을 중지 시키고 항상 아두이노 스케치 프로그램을 먼저 컴파일, 업로드 한 다음 프로세싱 서버프로그램을 실행시켜야 한다. 과정이 바뀌거나 프로세싱 프로그램을 중지 시키지 않고 아두이노 스케치를 컴파일 하면 에러가 발생하니 조심한다.

(아두이노 스케치 컴파일 및 업로드 ->프로세싱 서버 프로그램 실행 -> 앱인벤터 기동)의 순이다.

 

 앱인벤터 프로그램은 http://kusson.tistory.com/131을 참고 하기 바란다. 똑 같은 프로그램을 사용하기 때문에 따로 설명하지는 않겠다. 궁금한 것이 있거나 의문사항은 댓글로 남겨 주기 바란다.

 

 앱인벤터의 On 버튼을 누르면 3가지 색 LED가 차례로 켜지면서 계속 루프를 도는 것을 확인할 수 있다. LED를 끄고 싶으면 앱인벤터의 Off 버튼을 누른다. 여기서도 루프 진행상 5번 LED가 켜져야 다음 LED를 끄는 루틴이 전개 된다. 때문에 앱인벤터의 Off 버튼을 누르고도 5번 LED의 불이 켜진후에야 전체 LED의 불이 꺼진다. 더 빨리 LED가 꺼지질 원하면 아두이노 스케치 프로그램에서 원하는 부분에 LED Off 루틴을 넣으면 된다. 

 

 앱인벤터로 3가지 색의 LED를 제어하는 과정을 동영상으로 공개한다. 필자가 생각하는 대로 잘 동작하고 있다는 것을 알 수 있다. 브레드보드의 스위치로 제어하는 것이나 무선으로 앱인벤터를 이용하거나 똑같이 동작한다.

 

 이번 시간에는 지난 시간에 했던 실험을 앱인벤터를 이용해 똑같이 재현해 보았다. 여기서 우리가 배울 수 있는 것은 유선이던 무선이던 똑같은 실험을 진행할 수 있다는 것이고 무선의 경우에는 이것이 IoT를 개발 할 수 있는 기본 지식이 된다는 것이다. 집밖에서 핸드폰으로 집에 있는 보일러를 켜거나 끌 수 있고 TV나 전등도 얼마든지 제어할 수 있다. 앱인벤터가 IoT를 개발하는 가장좋은 툴은 아니겠지만 기본적인 알고리즘은 제공할 수 있고 간단한 제어의 경우에는 앱인벤터로도 얼마든지 개발 할 수 있다는 것이다. 오늘은 여기까지.......

 

반응형
그리드형