지금까지는 아두이노와 센서 및 액추에이터를 유선으로만 제어를 했었는데 앞으로는 블루투스를 통해 스마트폰과 연결해서 제어하기 위해서 앞글에서 블루투스 모듈을 연결하는 과정을 정리했었다.
이제 실제 안드로이드 스마트폰과 아두이노를 연결해서 제어를 해볼 텐데 간단한 예제를 만들면서 정리를 해볼 것이다. 예제는 화면에 몇 개의 버튼을 배치하는 앱을 만든 후 버튼을 클릭할 때마다 아두이노에 연결된 LED가 깜빡거리도록 제어해볼 생각이다.
그러기 위해서는 스마트폰과 아두이노 그리고 블루투스 모듈이 필요하다.
▲ 사진에 보이는 녀석이 지난 글에서 정리했던 블루투스 모듈인데 스마트폰에서 보낸 데이터를 이 녀석이 받아서 LED를 켜고 끄도록 할 것이다.
▲ 대충 이렇게 버튼을 네 개 배치한 후 위쪽을 누르면 LED 두 개가 모두 켜지게 하고 오른쪽은 빨간색, 왼쪽은 흰색이 켜지도록 하고 있으며 아래쪽 버튼을 눌렀을 때도 역시 두 개 모두 켜지도록 해봤다.
이런 예제를 만들어보는 이유는 대충 눈치챈 사람들도 있겠지만 네 개의 버튼으로 두 개의 모터를 제어해서 전진, 후진, 우회전, 좌회전하는 RC카를 만들어보기 위해 준비하는 것이다. 물론 그런 종류의 키트가 이미 있지만 나 같은 초보는 이렇게 하나씩 만들어봐야 그 원리를 정확히 이해하는데 도움이 될 거 같아서 만들어 보는 것이다.
다음 글에서는 저 LED 대신에 두 개의 모터를 연결해서 앞에서 말한 예제를 만들어보기로 하고 여기서는 LED를 컨트롤하는 과정을 정리해본다.
▲ 일단 회로를 대충 보자면 두 개의 LED를 각각 8번과 9번 디지털 핀에 연결을 했다. 그리고 블루투스 모듈은 지난 글에서 알아봤던 것처럼 5V, GND를 연결한 후 [TX > RX (0번핀)], [RX > TX (1번핀)]으로 각각 연결을 했다.
▲ 아두이노 보드에서 나가는 선을 보면 대충 알겠지만 각각 5V, GND, 8, 9, 0, 1번 핀이다. 이제 스케치 프로그램에서 블루투스 통신을 위한 코딩을 해보자.
▲ 먼저 setup()에서는 각각의 LED에 연결된 핀을 OUTPUT으로 초기화했으며 Serial 통신을 시작하도록 했다.
▲ loop()에서는 블루투스를 통해서 들어오는 데이터를 int형으로 받아서 변수 a에 저장하도록 했으며 만약 개행에 해당하는 '\n'이면 들어온 a 값을 파악해서 각각 LED를 켜거나 끄도록 하고 있는데 안드로이드 앱에서 버튼을 누를 때마다 숫자 8개를 보내게 될 것이다.
8개나 전달되는 이유는 네 개의 버튼을 누를 때와 뗄 때 서로 다른 숫자들을 보내기 때문인데 쉽게 생각해서 버튼을 누르면 특정 LED가 켜지게 하고 손가락을 떼는 순간 꺼지도록 하기 위한 것이다. 그 내용은 안드로이드 앱 만드는 과정에서 다시 한 번 정리하기로 하고 일단 상황에 따라서 8개의 숫자가 들어온다는 것만 알고 넘어가자.
소스 코드의 내용을 다시 보자면 숫자 1이 들어오면 두 개의 LED를 모두 켜도록 하고 있으며 5가 들어오면 다시 끄도록 하고 있다. 즉, 1은 맨 위의 버튼을 눌렀을 때 전달되는 숫자이고 그 버튼에서 손을 때면 5가 전달된다. 2와 6은 디지털 8번에 연결된 빨간색 LED를 켜고 끄도록 하고 있는데 이 숫자는 역시 앱에서 오른쪽에 있는 버튼을 눌렀을 때 전달되는 숫자들이다.
▲ 3과 7은 왼쪽 버튼을 눌렀다가 뗐을 때 흰색이 켜졌다가 꺼지도록 하고 있으며 맨 아래 버튼은 각각 4와 8을 전달하는데 일단은 이 상황에도 두 개의 LED를 모두 켰다가 끄도록 하고 있다.(RC카에서는 후진 버튼으로 사용될 것이다.)
초보가 그냥 생각나는 대로 단순하게 만들어본 내용이고 IF 문만 넣어서 만들어봤는데 고수님들이 보시면 웃을 수도 있겠다. ㅎㅎ 암튼 공부하는 녀석이 만들어본 거니까 이해하고... 이제 안드로이드 앱을 만들어서 버튼을 눌렀을 때 각각의 숫자를 블루투스를 통해 아두이노에 보내보자.
안드로이드 앱을 만들 때는 고수님들이 사용하는 스튜디오 등에서 만드는 것이 아니고 아래 주소의 홈페이지에서 스크래치처럼 블록을 쌓아서 간단하게 앱을 만들 수 있는 APP INVENTOR2라는 프로그램을 사용할 것이다.
App Inventor 홈페이지로 이동하면 구글 계정으로 로그인을 해야 이용할 수 있는데 이미 안드로이드 폰을 사용하고 있다면 구글 계정이 있을 테고 없다면 후다닥 하나 만들어서 로그인을 하면 된다.
▲ 이 녀석을 이용해서 이렇게 간단하게 버튼 등을 배치한 후....
▲ 스크래치처럼 블록을 쌓아서 안드로이드 어플을 만들 수 있다. 안드로이드 프로그래밍 언어를 거의 모르는 나도 어렵지 않게 버튼을 손가락을 터치했을 때와 뗐을 때 각각의 숫자(1~8)와 '\n' 문자를 보내는 내용으로 블록을 쌓아서 만들 수 있었고 이 앱을 내려받아서 스마트폰에 설치 한 후 버튼을 클릭하면 앞에서 봤던 영상처럼 LED를 제어할 수 있게 된다.
이 App Inventor를 처음 만져보는 나도 모르는 게 많기 때문에 좀 더 익숙해지면 이 녀석에 대해서 다시 한 번 정리하기로 하고 이번 글에서는 이렇게 간단하게 앱을 만들어서 사용할 수도 있구나 정도만 알고 넘어가자.
이제 스마트폰의 어플을 실행해서 블루투스와 연결한 후 LED를 제어하는 과정까지 영상으로 확인해보고 마무리하자.
▲ 영상을 보자면 시작과 함께 블루투스 모듈이 대기 상태로 깜빡 거리고 있는 걸 알 수 있다. 그리고 스마트폰에서는 앞에서 만든 앱을 실행한 후 Connect 버튼을 눌러서 대기 중인 모듈에 연결하자 깜빡거리던 녀석이 멈추면서 계속 켜져 있게 되고 버튼을 누르자 코딩한 대로 LED들이 깜빡 거리는 걸 알 수 있다.
여기까지 해봤으니 다음 글에서는 LED 대신에 모터에 연결을 해서 그것들을 제어해보자.