본문 바로가기
기타

아두이노 오렌지보드 블루투스 통신(ble통신) 앱인벤터로 앱 만들기

by ash9river 2024. 6. 24.

주제결정

2022/ 2학기 기초설계 수업에서 교수님이 아두이노 오렌지보드를 이용하여 기존에 없는 제품을 만들어보라 과제를 받았다. 우리 조는 공유 킥보드의 무분별한 주차가 사회문제를 만들고 있다는 점에서 착안해서 공유 킥보드 관련 제품을 만들기로 결정하였다.

문제인식1

 

문제인식2

문제 인식

 

먼저, 공유 킥보드의 무분별한 주차가 도로 위 뿐만이 아니라, 그 어떤 물건도 있지 않아야 하는 시각장애인 유도블럭(이하 점자블럭)에도 주차되어 있는 것을 확인 할 수 있었다.

 

킥보드1

공유 킥보드가 잘 못 주차된 점자블럭을 시각장애인들이 지나갈 때, 다칠 위험이 생긴다. 그래서 우리는 공유 킥보드가 주차될 때, 주차하는 자리에 점자블럭이 있으면 주차 요청이 실패되는 방식의 앱을 아두이노를 활용해서 만들고자 하였다.

 

첫번째 단계로 어떻게 아두이노가 점자블럭을 인식하는가.

서울시를 포함한 일부 지자체에서는 GPS를 기반으로 하여 주차 금지 구역을 설정하여 대응하였다 그러나 일반 보행 보도의 너비가 2m 내외임을 감안하면 4m 내외의 오차를 보이는 민간 GPS는 정확도에 한계가 있어, 점자블록이 설치되어 있는 보도에는 사실 상 주차가 어려운 문제가 있었다.

image


그래서 pixy2 cam을 이용하는 방식을 채용하였다. pixy2 cam은 pixy사에서 만든 색 인식 기반 학습능력을 가진 카메라이다.

image

색 인식 기반이라고 하여서 그냥 노란색만 인식하면 효용성이 떨어지지 않나?

 

점자블럭을 이용하는 시각장애인들은 보통 점자블럭 바닥의 울퉁불퉁함보다는 노란색을 인식한다. 물론 시각장애의 정도가 그리 심하지 않은 저시력 시각장애를 가진 사람들이 노란색을 더 잘 인식 할 수 있다는 것이지만, 길가 바닥의 노란색을 토대로 보행한다는 것은 다르지 않다.


그러므로 다른 노란색이 있다면 되도록 피해주어야 한다는 것은 변하지 않았기에, 우리는 색 인식 기반 학습하는 pixy2 cam을 사용하기로 하였다. 색인식 알고리즘을 기반으로 하는 이 센서는, 사용자가 물체의 색을 지정하면 내장된 센서에서 각 RGB 픽셀의 색과 채도를 계산하고, 이를 필터링 매개 변수로 사용하여 물체를 구분하고 감지한다. 이것을 이용하여 점자블럭을 좀 더 효과적으로 인식할 수 있었다.

 

또한, pixy2사에서 아두이노 api를 지원해서 활용하기 쉬운 이점이 있었다. pixy2 cam을 활용하려면 아두이노 ide 내에서 복잡한 코드를 짤 필요가 없기 때문이다.


아래의 사진은 pixy 카메라를 사용하기 위한 라이브러리를 활용한 아두이노 코드이다.

 

image

 

두번째 단계인 아두이노의 블루투스 통신 앱을 만드는데 크나큰 어려움을 겪었다.

전공이 전자 관련이 이어서 어떤 방식으로 앱을 만들어야 할지 몰랐다. 기존에 생각했던 것은 그냥 구글에 검색만 하면 아두이노를 블루투스 통신 가능한 앱 제작 방식을 채택하는 것이였다. 그래서 별 생각 없이 그 방식을 따라서 앱을 만들었는데, 그 앱이 작동이 제대로 안되었다. 그래서 무슨 연유인가 확인을 해보았는데, 아두이노 오렌지보드가 지원하는 것은 블루투스 V5.0(BLE)었다.

아두이노 스펙

 


내가 인터넷에서 찾은 앱은 HC-06이라는 블루투스 모듈을 추가로 달은 아두이노 보드를 활용하는 방식이었다. 그래서 여기서 고민이 들었다. HC-06 모듈은 학교에서 제공하지 않는 모듈이라서 어떤 방식으로 해야되나 고민을 많이 하였다.

그래서 찾은 방식이 MIT에서 만든 app inventor를 활용하는 방식이다. 물론 오렌지보드 ble 방식을 어떻게 활용하는지 잘 나와있지 않아서, 우선 app invetor를 이용한 앱이 아두이노와 상호작용이 잘되는가를 먼저 알아보기 위해 블루투스 채팅 앱을 먼저 만들었다.

 

안드로이드 버전의 업그레이드에 따라 범용 고유 식별자인 uuid가 필요하게 되었다. 그래서 NRF connect 앱을 이용하여 아두이노의 uuid를 확인하였다.

 

아두이노 nRF

 

아두이노 Service UUID


기기의 uuid인 service uuid가 6e400001이고, RX characteristic uuid가 6e400002, TX characteristic uuid가 6e400003임을 확인할 수 있었다. 이 uuid를 이용하여 아두이노와 핸드폰을 블루투스로 연결하기 위해 전역변수로 설정하였다.

variable

app inventor에서 아두이노 보드의 ble통신관련 소스가 거의 존재하지 않아 문제 해결에 상당한 어려움이 있었다. 이 과정에서 원하는 값 반환이 제대로 이루어 지지 않아 무슨 자료형을 어떠한 형태로 받았는지 확인하기 위해서 함수를 여러 가지로 분화시켜가며 수많은 trial & error를 수행했고,

블럭코딩1


블루투스 데이터 송수신 기능을 채팅 앱 동작을 통해 잘 작동되는지 확인할 수 있었다.

 

아두이노 채팅앱 동작ble 동작


블루투스가 ble형식이기 때문에, 블루투스를 스캔하고, 권한을 얻어서 그 스캔한 블루투스에 연결을 하는 방식을 사용하였다. 여기에 블루투스로 데이터를 주고 받기 위해서 자료형의 등록과 등록 해제를 모두 빌딩했다.
블루투스를 연결할 때 registerforstring이란 블록으로 String형의 등록을 한다.자료형의 등록에서 보이는 characteristic uuid2는 , TX characteristic uuid, 아두이노에서 송신한 데이터값을 자료형에 스트링형으로 저장을 한다.
또한, 블루투스를 해제할때 unregisterforvalues를 이용해서 자료형의 등록 해제를 한다.

real act

 

앱 동작에 관여하는 블록들

먼저 좌측 상단에 requset 버튼이라 이름 지은 버튼은 주차요청버튼이다. 만약 블루투스가 연결되어 있을 때, 주차요청 버튼을 누르면 아두이노 오렌지보드로 1이라는 값이 수신된다.
그리고 만약 블루투스에서 String형을 받았을 경우 또한, String value를 TextBox1이라는 임시 메시지에 저장한 다음에, 그 값이 무엇인지 판별한다.
재요청을 의미하는 전역변수 jyc를 선언해서, request 버튼 우측에 위치한 jaeyo라는 이름의 버튼이 그 값에 따라 상태를 구분하고, 하단 우측에 위치한 clock1 블록은 아두이노의 루프와 비슷한 역할을 하여 jyc변수를 통해 상태에 따라 동작을 실행한다.

 

앱 인벤터(app inventor)를 활용하여 만든 앱의 UI이다

디자인


앱 아이콘은 다음과 같다

제목 없음

 

초기화면은 아래의 사진과 같으며, 좌측상단의 start scaning을 누르면 통신가능한 블루투스 기기를 찾고, 이를 통해 아두이노 보드와 연결이 가능해진다.

 

동작1

 


아래의 사진은 start scaning 동작시 나타나는 화면이다.

 

동작2

 

블루투스 연결이되면 status란에 connected라는 문구가 뜨며 앱과 아두이노, pixy cam이 동작한다. 킥보드 주차시 pixy cam에 점자 블럭이 감지 된다면, 주차요청버튼 입력시 주차 불가능 문자가 출력된다.

 

동작3

 

만약 감지되지 않는다면 주차가능 문자가 뜨게 함으로써 센서를 구현 하였다.

 

동작4우드락1


케이스는 우드락으로 제작하였으며, 다음은 시연영상들이다. (내리면 있음)

 

아두이노 오렌지보드 ble통신 앱으로 만들기 · Issue #1 · ash9river/arduino-Bluetooth-communication

2022/ 2학기 기초설계 수업에서 교수님이 아두이노 오렌지보드를 이용하여 기존에 없는 제품을 만들어보라 과제를 받았다. 우리 조는 공유 킥보드의 무분별한 주차가 사회문제를 만들고 있다는

github.com

 

 


2022년도 코딩 아예 모를 때, 했던 프로젝트 깃허브에 있던거 티스토리에 업로드

 

저래놓고 학점 B+받았엇는데 다시 생각해도 아쉽다

 

같이한 친구

 

EPMIAC - Overview

EPMIAC has 3 repositories available. Follow their code on GitHub.

github.com