HW 공작소

아두이노 6: 앱인벤터와 아두이노로 LED 차례로 동작시키기

kusson 2017. 5. 31. 17:25
반응형
728x170

 이번 시간에는 앱인벤터와 아두이노 우노 보드로 LED를 차례로 동작시키기는 방법에 대해 알아보겠다. 요즘들어 앱인벤터와 우노브드로 3개의 LED를 제어 하는 방법에 대해 문의하는 학생들이 많았다.  그래서 학생들에게 조금이나마 도움이 되고자 3개의 LED를 차례로 동작시키고 계속 루프를 돌리는 방법에 대해 설명한다. 지난번에 설명했던 과정에서 조금 더 들어간 것으로 생각해 주기 바란다. 학생들 입장에서 생각해 보면 핸드폰으로 아두이노 우노보드에 연결된 LED를 제어 한다니까 조금 신기한 모양이다. 실제로 이 방법이 IoT(Internet of Things) 즉 사물인터넷의 가장 기본적인 형태이기 때문에 중요하면서도 재미있는 실험이긴 하다.

 

 

 

 먼저 앱인벤터의 디자이너 창에 LED제어를 위한 버튼 2개를 배치하고 아두이노와 통신을 위해 좌측 Palette 패널의 Connectivity에서 Web 콤포넌트를 하나 드래그해서 디자이너 화면에 드랍시킨다. 그러면 화면하단에 Web1이라고 자리를 잡을 것이다. 그러면 Web1의 Url에 http://192.168.****.****:12345등과 같이 자신의 컴퓨터 IP주소와 간단한  숫자를 적어준다. 이 숫자는 앱인벤터와 프로세싱 서버사이의 인식번호로 쓰이기 때문에 잘 기억해 둔다. 자신의 컴퓨터 IP주소는 윈도우 화면에서 좌측 아래 시작버튼을 눌러 실행창에 cmd를 입력해 실행시키고, 프람프트 창이 뜨면 "ipconfig"를 입력하면 알 수 있다. 자세한 사항은 나의 이전 아두이노 강의를 참고하기 바란다.

 

 

 다음은 블럭에디터에 위와 같이 프로그램을 작성한다. Screen1.Initialize 이벤트 블럭에는 Web1.Url을 입력한다. 디자이너 화면에서입력한 숫자와 동일한 숫자를 입력해야 한다. ButtonOn 버튼을 클릭하면 시리얼 포트로 "1"이란 숫자를 보내고 ButtonOff 버튼을 클릭하면 시리얼 포트로 "0"이란 숫자를 보낸다. 그리고 버튼의 색깔을 다른 색으로 바꾼다.

 

 

 아두이노 우노보드와 브레드보드를 위의 사진과 같이 꾸민다. GND와 5V전원핀은 잘 보고 설치해야 한다. 우노보드의 하단부에 있는 Power단에서 GND와 5V출력단자를 잘 보고 전선을 연결해야 한다. 위의 사진에 나오는  스위치 두개는 여기서는 사용하지 않으므로 무시한다. 상단 오른쪽 3개의 LED만 사용할 것이다. 앱인벤터에서 1이란 숫자가 들어오면 우측 3개의 LED가 녹색, 노란색, 빨간색 순으로 반복해서 켜질것이다.

 

 아래는 아두이노 스케치 프로그램이다. 우노보드의 2, 3, 4 번 핀을 출력으로 설정했다. 핀번호는 얼마든지 필요에 따라 바꿀 수 있다.

 

void setup() {
  Serial.begin(9600); 
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
 }

void loop(){
      int b= Serial.read();
      if(b == 0) {                              //앱인벤터에서 0이 들어오면 LED를 끈다.
           digitalWrite(2, LOW); 
           digitalWrite(3, LOW);  
           digitalWrite(4, LOW);         
      }  


      if(b == 1) {                             //앱인벤터에서 1이 들어오면 LED를 순차적으로 점등한다.
        while(1){                              //루프를 계속 돈다.
            digitalWrite(2, HIGH); 
            digitalWrite(3, LOW);  
            digitalWrite(4, LOW);
            delay(1000);                     //1초의 지연 시간을 준다.
            digitalWrite(2, LOW); 
            digitalWrite(3, HIGH);  
            digitalWrite(4, LOW);
            delay(1000);
            digitalWrite(2, LOW); 
            digitalWrite(3, LOW);  
            digitalWrite(4, HIGH);
            delay(1000); 
        } 
     }
}

 

먼저 프로세싱 서버 프로그램을 실행시키기 전에 아두이노 스케치 프로그램을 컴파일, 업로드시켜야 한다. 반대로 하면 에러가 발생하므로 주의 해야 한다.

 

 

아래는 프로세싱서버의 스케치 프로그램이다.

 

//processing: arduinoLEDTest;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);       //[1]이 시리얼 포트 번호이므로 자신의 컴퓨터와 맞춘다.

                                                            //컴퓨터 마다 다를 수 있으므로 맞는 번호를 찾아야 한다.
  s = new Server(this, 123);
}

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'){         //앱인벤터에서 들어온 숫자가 1이면
            p.write('1');fill(255, 0, 0);          //아두이노로 1을 보내고 실행창에 "On"이라는 숫자를 출력한다.
            text("On", 20, 40);
          }
         
         if(input.charAt(237)=='0'){         //앱인벤터에서 들어온 숫자가 0이면
            p.write('0');fill(0, 0, 0);            //아두이노로 1을 보내고 실행창에 "On"이라는 숫자를 출력한다.
            text("Off", 20, 40);
         }
      ellipse(50,70,80,50);
    }
  }
}


 이제 실행버튼을 눌러 프로세싱 스케치를 실행시킨다. 에러가 없으면 실행창이 뜨면서 앱인벤터의 숫자를 기다릴 것이다.

 

 여기까지 잘 따라 왔다면 3색 LED가 반복적으로 교차 점등하고 있을 것이다. 그러나 위의 프로그램으로는 루프를 중지 시키지 못한다. 다음 시간에는 인터럽트를 이용해서 루프를 중지시켜 LED를 끄고 켜는 동작을 실험해 보겠다.

반응형
그리드형