Korean Institute of Information Technology

Current Issue

The Journal of Korean Institute of Information Technology - Vol. 20 , No. 11

[ Article ]
The Journal of Korean Institute of Information Technology - Vol. 20, No. 8, pp. 29-39
Abbreviation: Journal of KIIT
ISSN: 1598-8619 (Print) 2093-7571 (Online)
Print publication date 31 Aug 2022
Received 22 Jun 2022 Revised 05 Aug 2022 Accepted 08 Aug 2022
DOI: https://doi.org/10.14801/jkiit.2022.20.8.29

아두이노를 활용한 GUI 기반의 초보자용 피지컬 컴퓨팅 시스템의 구현
황일규* ; 김병주**
*동양미래대학교 로봇자동화공학부 교수(교신저자)
**메가존클라우드, AWS SA 매니저

Implementation of GUI-based Physical Computing System with Arduino for the Novice Education
Il-Kyu Hwang* ; Byung-Ju Kim**
Correspondence to : Il-Kyu Hwang School of Robot & Automation Engineering, Dongyang Mirae University, Gyeongin-ro 445, Guro-gu, Seoul, Korea Tel.: +82-2-2610-1834, Email: ikhwang@dongyang.ac.kr


초록

컴퓨팅 사고력(Computational Thinking)을 가진 창의적 인재의 양성을 위해 피지컬 컴퓨팅 교육의 중요성이 커지고 있다. 아두이노는 피지컬 컴퓨팅 교육을 위해 가장 많이 사용되는 도구 중의 하나이나, 초보자가 배우기 어려운 C 언어의 교육이 선행되어야 하는 단점이 존재한다. 본 연구에서는 초보자에게도 피지컬 컴퓨팅을 쉽게 교육할 수 있는 아두이노 기반의 시스템을 구현한다. 사용자는 터치스크린, 파이썬과 PyQT로 제작된 소프트웨어를 이용하여 구현된 간단한 GUI를 통한 Drag & Drop 방식으로 아두이노를 손쉽게 제어하고, 시스템은 자동으로 C 언어로 구성된 아두이노 제어를 위한 코드를 생성한다. 추후 C 언어를 배운 사용자가 자동으로 생성된 C 언어를 활용하여, 아두이노 코딩도 비교해 볼 수 있도록 시스템을 구성하고, 실제 테스트를 통하여 그 효용성을 검증하였다.

Abstract

The importance of physical computing education is increasing for the creative students with computational thinking mind. Arduino is one of the most useful tools for physical computing education, but it has a disadvantage that C language education, which is difficult for beginners to learn, has to be preceded. In this study, we implement an Arduino-based GUI system that can easily teach physical computing even for beginners. Users can easily control the Arduino system by drag & drop method by a simple GUI with a touch screen, software made with Python and PyQT, and the system automatically generates C language codes for Arduino control. The system makes users who learned C language compare Arduino coding with the automatically generated C codes, and we validated its effectiveness by the test.


Keywords: GUI, arduino, raspberry-pi, physical computing, education

Ⅰ. 서 론

4차 산업혁명은 정보, 빅데이터, 인공지능을 가진 컴퓨터를 기반으로 하는 산업혁명이다. 18세기 후반에 시작된 증기기관의 사용과 기계화의 1차 산업혁명, 19세기 후반 증기기관에서 전기와 석유를 활용한 2차 산업혁명, 그리고 20세기 후반 컴퓨터와 인터넷, 인공위성을 이용한 정보혁명인 3차 산업혁명에 이어서 인공지능, 사물인터넷, 빅데이터, 모바일 등 첨단 정보통신기술이 경제, 사회 전반에 융합되어 혁신적인 변화가 나타나는 차세대 산업혁명을 말한다[1]. 또한 4차 산업혁명의 변화를 통해 스마트팩토리(Smart factory) 등 생산 분야에서도 많은 변화가 예상된다[2]. 이에 따라 미래 사회의 중요한 능력으로 컴퓨팅 사고력(Computational thinking)의 중요성이 전 세계적으로 강조되고 있으며, 컴퓨팅 사고력을 가진 창의적 융합 인재의 양성이 소프트웨어 교육의 목표가 되고 있다. 컴퓨팅 사고력이란 컴퓨팅의 기본적인 개념과 원리를 기반으로 문제를 효율적으로 해결할 수 있는 사고 능력을 뜻한다. 이러한 컴퓨팅 사고력을 기르기 위해서는 일상생활 주변의 문제를 발견하고 이를 해결하기 위한 알고리즘을 고안하고 프로그래밍을 통해 구현하고 디버깅하는 과정이 필요하다[3]. 따라서 학생들이 학습한 것을 바탕으로 실생활의 문제를 해결할 수 있는 아이디어를 떠올리고 컴퓨팅 교육에 대한 지속적인 흥미를 끌어내기 위해서는 컴퓨팅 활동이 현실 세계와 연결될 수 있다는 사실을 경험할 수 있도록 하는 것이 중요하다[4].

피지컬 컴퓨팅(Physical computing)은 이를 경험한 학생들이 컴퓨팅이 우리 생활과 밀접하게 관련되어 있음을 느낌으로써 생활 속 문제를 해결하는 창의적인 아이디어를 얻거나 실제로 문제를 해결하는 데 도움을 준다. 피지컬 컴퓨팅이란 디지털 기술 및 장치를 이용해서 정보를 입력받고 여러 장치를 통해 처리된 정보를 물리적인 방식으로 출력하는 컴퓨팅이라고 정의할 수 있다. 현실 세계 속 데이터를 디지털 기기로 내려받아 소프트웨어 형태로 처리한 후, 그 결과를 모니터와 같은 여러 가지 장치로 출력하는 것을 말한다. 다시 말해 컴퓨터와 현실 세계가 데이터를 통하여 대화하는 것과 같다. 피지컬 컴퓨팅의 주된 내용은 뉴 미디어를 다루는 예술가들에 의해 발전되었다. 영상물이나 빛을 이용한 미디어아트 분야의 작품을 만들기 위해서 컴퓨터를 활용했다. 또한 피지컬 컴퓨팅은 사물 인터넷 분야의 기초가 된다. 센서를 통해 주변 환경을 인식하고, 네트워크를 통해 필요한 정보를 공유하거나 처리한다는 사물 인터넷의 특성을 생각해본다면 피지컬 컴퓨팅은 사물 인터넷 분야를 구성하는 중요한 기술이라고 할 수 있다.

일반적으로 초중등 학생들의 고등사고력(논리적 사고력, 문제해결력, 창의성)을 배양하고 피지컬 컴퓨팅 교육을 위하여, 교육용으로 만들어진 프로그래밍 언어(EPL, Educational Programming Language)를 사용하는 경우가 많으며, 그 종류도 스크래치(Scratch)[5], 엔트리(Entry)[6], 앨리스(Alice), 로고(Logo) 등이 있다. 그러나 특정한 보드의 사용, 추가적인 데스트 탑에서의 복잡한 설치 과정등으로 그 활용이 제한적이라 할 수 있다. 또한, 아두이노(Arduino)가 피지컬 컴퓨팅 교육을 위해 가장 많이 사용되는 도구 중의 하나이나, 아두이노를 사용하기 위해서는 어려운 C언어의 교육이 선행되어야 하는 단점이 존재한다. 특히, 컴퓨팅 사고력 교육이 중요한 초중고 학생 또는 초보자들에 대한 C언어 교육은 피지컬 컴퓨팅과 컴퓨팅 사고력에 대한 흥미마저 반감시키는 부작용이 있었다.

따라서 C언어와 같은 컴퓨터 언어를 모르는 초보자에게도 피지컬 컴퓨팅을 교육하기 위한 별도의 방안이 필요하다고 하겠다. 본 연구에서는 별도의 C 언어의 교육 없이 초보자에게 피지컬 컴퓨팅을 쉽게 교육할 수 있는 아두이노 기반의 시스템을 구현한다. 사용자는 터치스크린 및 파이썬과 PyQT로 제작된 소프트웨어를 이용하여 구현된 간단한 GUI를 통한 Drag & Drop 방식으로 아두이노를 손쉽게 제어하고, 추후 C언어를 배운 사용자가 제안된 시스템을 통해 자동으로 C언어로 생성된 아두이노 코딩도 확인할 수 있도록 시스템을 구성하였다.


Ⅱ. 관련 연구

미래산업에서 소프트웨어 개발의 중요성이 커짐에 따라 전문 인재 양성을 위한 소프트웨어 교육이 전산 관련 학과에서[7] 이루어지고 있다.

하지만 소프트웨어의 기초언어에 해당하고 전산 관련 학과에서 초보 프로그래밍 과정에서 가장 널리 채택되는 언어인 C언어는 교육적인 목적을 전혀 고려하지 않고 설계되었으므로, C언어를 배우는 학생들은 문제 해결에 집중하지 못하고 언어를 이해하는 데 많은 시간을 보내게 된다[8]. 예를 들어, 아두이노를 교육에 활용한 연구인 “공학프로그래밍 교육에 아두이노 활용 방안 사례연구[9]”를 보면, 학생들이 C언어를 먼저 공부하고, 아두이노의 하드웨어와 라이브러리(Library) 사용법을 배우게 된다. 아두이노 프로그래밍이 기존의 C언어를 학습하는 데에 있어서 큰 효과를 내는 것을 볼 수 있다. 하지만 대학생이 아닌 초, 중 학생을 대상으로 아두이노를 가지고 수업을 한 “예비교사에 적용한 초등정보 교과 교육 사례[10]”를 보면 스케치 같은 GUI 프로그램과 아두이노를 통해 수업하여 참여도 및 흥미도를 올리는 데에는 성공하였다. 다른 연구들에서는 아두이노를 통한 학습이 효과가 있고 보다 직관적이어서 수업에 도움이 된다는 결과가 많이 보인다[11]-[20]. 하지만 프로그래밍 과정에서 반복문과 변수의 사용에 어려움을 겪는 문제가 발생하였다. 이는 GUI를 통해 아두이노를 저학년 학생들에게 쉽게 접근하는 데에는 성공하였으나 프로그래밍의 본질적인 개념인 반복문과 변수에 대한 교육이 어려웠다는 점을 시사한다. 따라서 기존의 스케치와 같은 GUI 프로그래밍과 아두이노만을 이용한 프로그래밍의 교육에는 코딩 능력 향상에 한계가 있다고 하겠다.

본 연구에서는 사용자가 원하는 기능을 수행할 수 있도록 컴퓨터 화면의 메뉴에서 간단하게 마우스로 클릭하여 각종 센서를 선택하고 제어 루프를 설계하여 액추에이터(Actuator)를 구동할 수 있는 피지컬 컴퓨팅 시스템을 구현하였다. 본 논문의 3장에서는 피지컬 컴퓨팅 시스템의 상세한 하드웨어 및 소프트웨어의 구성을 설명하고, 4장에서는 GUI 프로그램의 구현에 대한 내용 및 실제 테스트 결과를 다룬다.


Ⅲ. 피지컬 컴퓨팅 시스템의 구현
3.1 하드웨어 선정 및 구성

피지컬 컴퓨팅을 가장 쉽게 구현할 수 있는 컴퓨팅 보드들은 대표적으로 라즈베리파이(Raspberry Pi), 라떼판다, 아두이노 등이 존재한다. 본 연구에서는 C언어의 교육 없이 아두이노를 활용한 피지컬 컴퓨팅 교육을 쉽게 하기 위해 아두이노와 연동이 가능하면서도 사용자의 입력을 보다 역동적으로 받을 수 있는 성능을 가진 소형 SBC(Single-Board Computer)로 라즈베리파이(Raspberry Pi 4 Model B, 8GB)를 선정하였다. 라즈베리 파이는 저렴한 가격과 아두이노와 연결하기 쉽게 USB 포트를 가지고 있으며 터치스크린과 키보드 등 사용자 입력을 위한 장치들의 종류도 다양하게 시장에 존재하기 때문에 확장성이 매우 높다고 판단되었기 때문이다.

라즈베리파이는 작은 크기에 좋은 컴퓨팅 능력을 갖추고 있으나 아직은 Full HD 및 그 이상의 해상도에서의 데스크탑 환경에서 작동이 다소 아쉬운 점이 있다. 특히, 라즈베리파이에서 깃(Git) 및 VSCode를 사용하여 GUI 프로그램을 구동하기에는 부하가 많이 걸린다. 따라서 라즈베리파이의 성능을 최대한으로 올리기 위해서 라즈베리파이 전용 쉴드 및 서멀 패드를 장착하였으며 보다 좋은 성능을 확보하기 위해 오버 클로킹 작업을 진행하였다. 라즈베리파이의 초기 성능은 이런 쉴드 및 서멀 패드의 장착이 없다는 가정하에 제한이 걸려 있기 때문에 상당히 낮은 상태로 동작하게 되지만, 이를 쉽게 변경할 수 있다. 본 연구에서는 여러 번의 부팅 테스트를 통해서 오버 클로킹 작업을 진행하였다. 라즈베리파이는 기본 제한 속도가 1.5GHz로 제한이 걸려있으나, 오버 클로킹을 통해서 최대 2.147GHz까지 가능하며, GPU의 경우 500MHz에서 750MHz까지 가능하다. 본 연구에서는 표 1과 같이 오버클록 값을 설정하였다.

Table 1. 
Overclock setting value
Variable Value
Over_voltage 6
Arm_freq 2000
GPU_freq 750

라즈베리파이에서 가장 최대로 활용할 수 있는 2.147GHz에 근접하게 2GHz에 할당하였으며 GPU는 가장 최댓값인 750MHz을 사용하며 이에 따라서 voltage 값은 0.15를 더한 1.35 값이 될 수 있도록 over_voltage 값은 6으로 할당하였다.

아두이노는 Arduino CLI에서 지원하는 보드의 버전이 정식 버전에서만 동작하기 때문에 아두이노의 정품 보드인 Arduino UNO R3를 사용하여 구성하였다. 또한 다른 센서류 및 소자들을 보다 쉽게 고정하기 위해서 아두이노에 ‘아두이노 호환 프로토쉴드(미니 브레드보드 포함)’을 장착하여 구성하였다. 아두이노의 GPIO를 이용하여 연결한 소자 및 센서는 HC-SR04(초음파 센서), LED, RGB LED 등으로 간단하게 연결하여 구성하였다. 추가로 HDMI 케이블을 통해 모니터에 연결하였으며 무선 키보드 마우스 세트를 사용하도록 구성하였다.

라즈베리파이의 경우 5V 3A 이상의 출력이 필요하여 이를 보장해줄 전원 어댑터를 사용하였으며, 16GB의 Class 10 수준의 SD 카드에 운영체제(OS)를 설치하고 필요한 소프트웨어들을 설치하였다.

라즈베리파이는 리눅스 기반의 Raspbian OS가 존재하지만, 현재 개발상의 문제로 Raspbian OS는 64bit는 데모 버전만이 출시되어 있으며 이에 따라 4GB 이상의 램 활용이 어려워 라즈베리파이 전용 Ubuntu(우분투)인 ‘Ubuntu Desktop 21.04 64 bit for Raspberry Pi’를 Micro SD 카드에 라즈베리파이 재단에서 제공 중인 ‘라즈베리파이 이미저(Imager)’를 사용하여 설치하는 과정을 거쳤다.

위의 설명과 같은 피지컬 컴퓨팅을 위해 구성한 시스템 구성도는 그림 1과 같이 구성되어 있으며, 라즈베리파이는 5V 3A의 전류를 공급받는다. 사용자는 HDMI에 연결된 모니터를 통해 결과를 확인할 수 있고, 키보드와 마우스를 통해 라즈베리파이를 사용할 수 있도록 구성하였다. 사용자는 본 연구에서 제작한 프로그램을 통해 보다 쉽게 아두이노의 피지컬 컴퓨팅을 USB/Serial 통신을 통해서 체험해 볼 수 있다. 아두이노에서는 USB/Serial 통신을 통해 받은 정보로 H/W 개발환경 구성에 있는 프로토쉴드에 같이 구성되어있는 브레드보드 위에 한 번에 연결된 RGB LED, LED, Ultrasonic(초음파) 센서 등 디지털 센서 및 Map 함수를 활용해 볼 수 있다.


Fig. 1. 
System configuration diagram for physical computing

3.2 소프트웨어의 구성

IDE 툴로는 마이크로소프트에서 무료로 제공하는 VSCode(Visual Studio Code)를 사용하였는데 이는 윈도우, 맥 등 다양한 환경에서 사용 가능한 멀티 플랫폼 개발프로그램이다. 마이크로소프트가 직접 서비스하므로 관리가 매우 잘 되고 있으며 마이크로소프트의 수많은 개발자가 자신들이 만든 확장 팩을 제공하고 있기 때문이다.

개발용 프로그래밍 언어로 파이썬을 선정하였다. 파이썬은 1990년 Guido Van Rossum이 개발한 개발 인터프리터 언어이다. 파이썬은 무료이면서 쉬운 문법과 강력한 라이브러리 등으로 인해 최근 들어서 빅데이터 및 AI 시장에서 가장 관심을 받는 언어로 부상되고 있다.

GUI를 위한 라이브러리로 PyQT를 이용하였다. QT는 노르웨이 회사 트롤텍에 의해서 개발되었으며. 주로 C++를 기본으로 사용하지만 파이썬, 루비 C, 펄, 파스칼과도 연동되는 오픈소스 GUI 크로스 플랫폼프레임워크이다.

Arduino CLI는 보드/라이브러리 관리자, 스케치 빌더, 보드 감지, 업로더 및 명령줄 또는 기계 인터페이스에서 아두이노 호환 보드 및 플랫폼을 사용하는 데 필요한 기타 여러 도구를 제공하는 올인원 솔루션이다. Arduino CLI를 통해서 사용자는 커맨드 환경에서도 아두이노의 업로드 및 보드 연결 등 다양한 작업을 할 수 있다.

PyduinoCLI는 Arduino CLI를 보다 쉽게 사용하기 위해 만들어진 파이썬 전용 라이브러리로 Arduino CLI의 명령어를 모듈로 사용할 수 있도록 설계된 간단한 라이브러리이다.

본 연구에서는 위에서 설명한 파이썬, PyQT와 Arduino CLI를 사용하고, Arduino CLI를 쉽게 사용할 수 있는 pyduinoCLI를 이용하여 시스템을 구현하여 사용자는 GUI를 통해 아두이노를 직접 제어할 수 있도록 구현하였다.

따라서 소프트웨어는 그림 2와 같이 구성이 되어있다. 즉, 라즈베리파이의 OS는 8GB 이상의 램을 지원하는 OS인 Ubuntu 64bit 버전을 채용하였으며, 베이스 개발 언어로는 파이썬을, 그리고 확장 프레임워크로는 UI 프레임워크인 QT의 파이썬 지원 버전인 PyQT를 채용하였으며, IDE 툴로는 VSCode(Visual Studio Code)를 이용하였다. 아두이노와의 통신 및 컴파일을 위해서 Arduino CLI를 채용하였다. 차후 서술할 프로그램을 통해서 사용자는 USB/Serial 통신을 통해서 Arduino를 보다 쉽고 빠르게 제어할 수 있도록 구성하였다.


Fig. 2. 
Software configuration diagram for physical computing


Ⅳ. 피지컬 컴퓨팅 교육을 위한 GUI 프로그램의 구현
4.1 GUI 구성 및 기능설명

본 연구에서 사용자는 아두이노 및 프로그램에 대한 지식이 거의 없는 상태라고 가정하여 GUI를 설계하였다. 프로그램의 메인 페이지(그림 3)는 교육의 단순화를 위해 특정 아두이노의 핀 번호를 쉽게 사용할 수 있도록 하였으며 다른 요소들 또한 최대한 사용자의 입력을 적게 받을 수 있도록 간단하게 3개의 메뉴로 구성하였다. openDragdrop, openCode, Serial Monitor로 버튼 명이 구성되어있으며 각각 스케치 UI(그림 4), 코드 업로드 UI(그림 5), 시리얼 모니터(그림 6)를 호출하도록 구현하였다.


Fig. 3. 
Main window


Fig. 4. 
Sketch UI with drag and drop method


Fig. 5. 
Code upload UI


Fig. 6. 
Arduino serial monitor with putty

스케치 UI(그림 4)는 List 방식의 UI를 채택하여 사용자가 마우스로 원하는 아두이노의 기능이 구현된 버튼을 클릭하여, 리스트에 순차적으로 끌어다 놓고, 디지털 핀 번호, sleep 타임 등의 필요한 옵션을 Add Option 버튼을 통해서 추가할 수 있다. 작성을 완료하면 Apply 버튼을 통해 해당 UI의 내용을 아두이노 C 코드로 변환된다. 해당 코드는 아래의 코드 업로드 UI(그림 5)에서 확인할 수 있다. Save 버튼을 통해서 코드의 저장 및 업로드 기능이 동작된다.

시리얼 모니터는 우리가 SSH 통신으로 대표적으로 자주 사용하는 putty를 활용하여 아두이노와 Serial 통신을 통해 주고받는 정보를 보여주는 기능이다(그림 6).

4.2 기능 동작범위

스케치 UI(그림 4)는 버튼을 사용해서 사용자가 코딩을 편하게 하도록 구현되어 있으며, 현재 버튼의 리스트 및 기능은 표 2를 기준으로 구현되어 있다. 옵션의 경우 Add Option 버튼을 통하여 추가할 수 있다. 예를 들어 가장 자주 사용하게 되는 if 문 버튼의 경우 if 버튼을 상단의 UI로 끌어다 놓고 “distance<5”와 같은 방식으로 조건을 설정할 수 있다.

Table 2. 
Buttons and functions of UI
Button Function/Option
Sleep Delay/time(ms)
LED_ON 13 PIN ON
LED_OFF 13 PIN OFF
Break Break
UltrasoundSensor Ultrasound sensor / Time(ms)
Digital_PIN_ON #N PIN ON / PIN Num
Digital_PIN_OFF #N PIN OFF / PIN Num
Loop-start(for) Loop start / Iteration number
Loop-end(for) Loop end
If-start If start / If condition
If-end If end
Analog_PIN_wt #N PIN PWM write/ PIN, value
Analog_PIN_rd #N PIN PWM read / PIN,

해당 옵션을 적용했을 시 사용자는 그림 4의 UI에서 해당 옵션이 적용이 되었는지 확인해 볼 수 있다. 초음파 센서 버튼의 경우 사용자가 끌어다 놓는 것만으로도 초음파 센서의 값과 거리를 계산하여 보여주고 사용할 수 있도록 구현되어 있다.

4.3 스크립트 구성도 및 구현방식 설명

그림 7은 사용자가 실행하는 동작과 관련된 파이썬 모듈을 보여주는 파이썬의 소스코드 파일들의 구성도이다.


Fig. 7. 
Script configuration diagram

흐린 배경색의 부분은 사용자가 직접 조작하거나 확인할 수 있는 부분이고, 나머지 부분들은 소프트웨어에 의하여 자동적으로 처리되는 부분이다. 사용자는 Main 소스코드와 UI를 기준으로 시작하여 DragDialog 코드와 UI를 통해서 개발을 할 수 있으며, 개발이 완료된 UI 결과물은 Convert 소스코드를 통해 변환이 된다. 이후 변환된 아두이노 코드는 CodeDialog의 스크립트와 UI를 통해 확인할 수 있으며, 이를 USB Serial 통신을 통해 업로드한다.

각 스크립트들의 기능 및 동작 방식은 다음과 같다. UI를 담당하는 스크립트는 총 3개이고, 나머지 2개는 스크립트 관리 및 기능 분리의 장점을 취하기 위해서 분리하였다. UI를 담당하는 Main.py 스크립트는 소프트웨어가 돌아갈 수 있도록 구성하는 최소한의 라이브러리 선택과 다른 UI를 호출할 수 있도록 간편하게 구성하였으며, qt Designer를 통해서 구성된 UI 파일을 기반으로 동작된다.

해당 UI의 구성 파일 및 필요 파일들은 분리된 스크립트 중 하나인 PathInfo에 Desingner를 통해 만들어진 UI파일들의 위치와 아이콘 이미지 생성에 필요한 PNG 파일들의 위치가 저장되어 있으며, 해당 스크립트를 통해서 위치를 공유하는 효과를 가지게 된다. Pyduinocli를 사용하기 위해 필요한 Arduino CLI의 위치 또한 해당 스크립트에 구성되어 있다. DragDialog.py 스크립트는 사용자가 Drag & Drop을 통해서 위에 설명한 기능들이 쉽게 동작할 수 있도록 간단하게 구현된 스크립트이다. 해당 스크립트에서는 사용자가 끌어서 놓는 데이터를 List 형식으로 Convert.py에 그림 8과 같이 제공된다.


Fig. 8. 
List type data and match dict data

Convert.py는 해당되는 리스트의 정보들을 취합하여 코드를 만들기 위한 베이스 스트링 형태의 데이터를 가지고 있으며, 변환을 위해서 List : code string 으로 이루어진 dict 형식의 데이터를 가지고 있다. DragDialog.py에서 전달받은 리스트 데이터를 기반으로 하여 dict에서 해당 데이터를 key로 사용하여 베이스 스트링에 format을 활용하여 비어진 부분을 채우거나 들여쓰기가 필요한 if 나 for 문의 경우 사용자가 if 문과 for 문을 end 문을 사용하기 전까지 사용한 횟수대로 자동으로 ‘\t’으로 코드가 들어가기 전에 합쳐지는 방식으로 동작된다.

만들어진 코드는 CodeDialog에서 확인 및 수정을 할 수 있고, 사용자는 해당 코드를 save 버튼을 누름과 동시에 지정된 위치에 지정된 이름으로 파일을 저장하게 되며 PathInfo에서 지정된 Arudino CLI 및 pyduino를 이용하여 해당 위치에 있는 파일을 아두이노에 자동으로 업로드 및 컴파일을 하며, 이에 대한 정보가 json 형식으로 돌아왔을 때 이를 파싱하여 업로드가 성공하였는지를 알게 된다. 이후 Arduino CLI에서 ino 파일을 컴파일하여 아두이노에 전송하여 동작된다.

4.4 예제 테스트 및 비교 결과

만들어진 소프트웨어의 효과와 효용성을 판단하기 위해 본 연구에서는 아두이노를 이용한 필요 기능 구현에 소요되는 시간을 기준으로 실험을 진행하였다. 진행방식은 다음과 같다.

우선 아두이노와 컴퓨터 언어를 모르는 초보자를 실험 대상으로 시스템으로 구현된 GUI 사용법을 교육하고, GUI를 통해 코딩된 코드의 작성 및 정상 동작시간을 측정한다. 다음으로, 동일 실험자에 대하여 간단한 기능을 아두이노로 구현할 수 있는 기초적인 C 언어를 교육하고 Arduino IDE를 이용하여 해당 코드를 직접 작성하게 하고 정상 동작시간을 확인한다. 이 실험을 통해서 사용자들이 비교적 자주 하는 문법적 실수와 이를 해결하는 시간 또한 같이 비교할 수 있다. UI 코딩과 사용자 직접 코딩의 목표는 아래와 같다. 또한 보다 정확한 비교를 위해서 시간은 초(Sec.) 단위로 코드 작성시간과 동작시간이 포함된 시간(단위 : 초, 첫째자리에서 반올림)으로 표시하였다. 5명의 대학 신입생을 대상으로 4개의 예제를 이용하여 실험을 진행하였다.

  • LED On/Off를 활용한 간단한 예제
  • LED On/Off와 for 문을 활용한 예제
  • 초음파 센서의 값을 출력하는 예제
  • 초음파 센서와 if 문, LED를 활용한 예제

1)번 예제는 500밀리초 단위로 LED를 ON/OFF를 반복하는 간단한 예제이며, 2)번 예제는 for 문을 이용하여 LED를 5번을 빠르게(300밀리초) 깜빡이고 1초 동안 꺼지도록 동작하는 예제이다.

3)번 예제는 사용자가 초음파센서를 사용하여 그 값을 표시해주는 예제이고, 4)번 예제의 사용자 목표는 초음파 센서와 그 값을 if 문을 사용하여 LED를 껐다 켰다하는 동작을 거리에 비례하여 동작하게 하는 것과 초음파 센서를 통해 측정된 거리를 계산하여 출력하는 것이다.

표 3표 4를 비교해 보면 전체적으로 GUI 코딩이 IDE를 이용한 직접적인 C 언어 코딩에 비해서 약 2배 ~ 22배의 시간의 차이가 발생하는 것을 볼 수 있다. 초음파 센서와 같이 한번의 드래그를 통해서 코딩을 구현하는 예제의 경우 22배로 차이가 가장 크게 나는 것으로 보인다. 또한 모든 경우의 표준편차(S. Dev)의 값을 비교해 보면 대부분의 경우에서 최대 39배까지도 차이가 나면서 대체적으로 GUI를 이용한 코딩에서 편차가 낮아지는 것을 확인할 수 있었다.

Table 3. 
Testing time for each example with GUI (Sec.)
GUI S1 S2 S3 S4 S5 Avg. S. Dev
#1 30 30 18 33 39 30 8
#2 57 121 68 234 134 123 70
#3 20 26 21 36 23 25 6
#4 107 246 162 423 121 212 130
Avg. 54 106 67 181 79 97 51

Table 4. 
Testing time for each example with Arduino IDE (Sec.)
GUI S1 S2 S3 S4 S5 Avg. S. Dev
#1 148 77 106 83 133 109 30
#2 330 143 121 146 211 190 76
#3 514 492 297 563 306 434 124
#4 573 811 404 338 461 518 185
Avg. 392 381 232 282 278 313 70

하지만 보다 복잡한 코딩에 대한 이해도가 필요하거나 프로그램에 대한 숙련도가 필요한 문제에 대하여는 GUI 코딩에서도 표준편차가 다소 크게 발생하는 것을 확인할 수 있다.


V. 결 론

일반 학생들의 피지컬 컴퓨팅 교육을 위하여 교육용으로 만들어진 프로그래밍 언어나 C언어와 같은 전문 프로그래머들이 사용하는 고급 프로그래밍 언어가 있으나, 그 활용이 제한적이거나 초보자가 배우기가 매우 어렵다고 할 수 있다.

본 연구에서는 아두이노를 이용하여 초보자가 간단하게 피지컬 컴퓨팅을 체험할 수 있도록 라즈베리파이에서 구동 가능한 Drag & Drop 방식의 GUI를 활용한 시스템을 개발하였다.

실제 사용 테스트를 통하여 기존의 아두이노 IDE 방식의 코딩 교육보다 더 빠른 시간에 피지컬 컴퓨팅을 구현해보고 학습할 수 있다는 것을 확인하였다. 이것은 C언어를 배우지 않아도 컴퓨팅 사고력을 가진 창의적 인재를 양성하고, 컴퓨터 교육에 대한 지속적인 흥미 유도가 가능하다는 의미이다. 또한 저 연령층의 초등 및 중등 학생들과 초보자에게 특히 효과적으로 교육할 수 있는 시스템이라는 뜻이다.

초음파센서를 활용한 네 번째 예제 테스트의 결과를 보면 GUI 코딩과 IDE 코딩의 시간 차이가 크게 발생하는 것을 알 수 있다. 이와 같이 계산이 필요하거나 특정 기능이 필요한 경우에도 이를 모듈화시킴으로써 각종 센서류에 대한 접근성과 활용성을 높일 수 있다.

또한 기존의 코딩 프로그램인 스케치 및 레고(Lego) 학습 프로그램의 경우에는 GUI를 이용한 코딩이 직접 아두이노에 호환되는 C언어 형태의 결과물을 볼 수 없어 UI를 이용한 코딩 이후에 추가적인 C언어 공부에 어려움이 있었으나, 이번 연구에서는 직접적으로 사용자에게 C언어 코딩의 결과를 동시에 보여줌으로써 기존 프로그램에 비하여 교육적인 효과를 확대할 수 있다.

향후 연구에서는 사용자가 어렵다고 느끼는 특정 기능에 대하여 단위별로 모듈들을 추가하고, 생성된 코딩에 대한 주석을 통한 설명 기능이나 코딩이 생성되었을 때 자동으로 순서도를 그릴 수 있도록 보여줄 수 있다면 보다 완벽한 피지컬 컴퓨팅 교육용 시스템에 다가갈 수 있으리라고 생각된다. 또한 다이나믹 모터 및 광소자등 다양한 센서류를 추가한다면 교육뿐만이 아닌 C언어를 모르는 사람들이 바로 활용할 수 있는 DIY에 어울리는 피지컬 컴퓨팅용 키트가 될 것으로 생각한다.


References
1. Telecommunication Technology Association, "The Fourth Industrial Revolution", Dictionary of Telecommunication Terms. http://terms.tta.or.kr/main.do. [accessed: Jun. 05, 2022]
2. Andreja Rojko, "Industry 4.0 Concept: Background and Overview", International Journal of Interactive Mobile Technologies, Vol. 11 No. 5, pp. 77-90, Jul. 2017.
3. J. Kim and D. Kim, "Development of Physical Computing Curriculum in Elementary Schools for Computational Thinking", Journal of The Korea Association of Information Education, Vol. 20, No. 1, pp. 69-82, Feb. 2016.
4. Dept. of curriculum Policy in Korean Ministry of Education, "Guide of SW education", Korean Ministry of Education, pp. 3, Feb. 2015.
5. https://scratch.mit.edu. [accessed: Jun. 05, 2022]
6. http://www.hyact.net/_en/bbs/coding_entry.php. [accessed: Jun. 05, 2022]
7. S. H. Nam, H. Jung, D. H. Kim, M. H. Jang, H. J. Kim, D. J. Kim, and H. C. Yu, "Software Education in Science Experiments Based on The Mini-Computer", The Korean Association Of Computer Education Conference Proceeding, Vol. 19, No. 12, pp. 51-55, Jan. 2015.
8. I. M. Kim and S. Y. Jung, "Design of Basic Programming Class", Korea Multimedia Society Conference Proceeding, pp. 716-719, Nov. 2006.
9. J. H. Park and S. H. Kim, "Case Study on Utilizing Arduino in Programming Education of Engineering" Journal of IKEEE, Vol. 19, No. 2, pp. 276-281, Jun. 2015.
10. K. Han, "A Case Study of Elementary School Informatics Education for Pre-service Teachers: Focusing on Programming Education", Journal of The Korean Association of Information Education, Vol. 25, No. 1, pp. 41-48, Feb. 2021.
11. D. Suh, "Introduction to Physical Computing - Concept and Technical Basics", KSDS Conference Proceeding, pp. 270-271, Oct. 2006.
12. J. H. Bang and S. Lee, "Case Study on Utilizing Arduino in Programming Education of Engineering", Journal of IKEEE, Vol. 19, No. 2, pp. 276-281, Jun. 2015.
13. J. H. Lee, J. S. Kim, and H. G. Lee, "Design to Tangible User Interface Module using Arduino for Computational Thinking education", Asia-pacific Journal of Multimedia Services Convergent with Art, Humanities, and Sociology, Vol. 8, No. 8, pp. 451-459, Aug. 2018.
14. J. G. Cha, "A Study on the Development of Coding Education Program based on Arduino", Smart Media, Vol. 6, No. 4, pp. 72-78. Dec. 2017.
15. Perenc I, Jaworski T, and Duch P., "Teaching programming using dedicated Arduino Educational Board", Comput. Appl. Eng. Educ. Vol. 27, pp. 943-954, Jun. 2019.
16. S. L. Choi, "A Method to Forecast the Computer Technology Trends based on Computer Language", Smart Media Journal, Vol. 5, No. 3, pp. 88-92, Sep. 2016.
17. Y. R. Jang, H. C. Lee, O. S. Hong, H. C. Kim, S. J. Ahn, Y. J. Lee, S. K. Han, K. W. Han, and J. W. Choi, "A Study on the Enhancement of ICT-SW Education in Elementary and Secondary School", Institute for Information & Communications Technology Promotion of Korea, Feb. 2015.
18. S. J. Ahn, Y. M. Seo, and Y. G. Lee, "A Review and Synthesis of Research in Educational Programming Language", Proceedings of the Korean Society of Computer Information Conference, pp. 139-142, Jan. 2012.
19. H. M. Jeon and E. J. Kim, "A Study on the Preference and Efficiency of Block-Base Programming and Text-based Programming", The Korea Institute of Information and Communication Engineering, pp. 486-489, Oct. 2021.
20. J. Y. Kim and E. J. Sohn, "Difficulty Analysis of an Introductory Computer Programming Course for non-Major Students", Journal of Creative Information Culture, Vol. 7, No. 2, pp. 69-77, May 2021.

저자소개
황 일 규 (Il-Kyu Hwang)

1988년 2월 : 서울대학교(공학사)

1990년 2월 : 한국과학기술원(공학석사)

1990년 ~ 1994년 : 삼성종합기술원 주임연구원

2002년 12월 : 미국 University of Wisconsin-Milwaukee 기계공학과(공학박사)

1994년 3월 ~ 현재 : 동양미래대학교 로봇자동화공학부 교수

관심분야 : 인공지능, 임베디드 시스템, CAD/CAM

김 병 주 (Byung-Ju Kim)

2015년 3월 ~ 2019년 8월 : 동양미래대학교 로봇자동화공학과(전문학사)

2020년 5월 ~ 2020년 8월 : 아이엠그루 엔터프라이즈 부서

2021년 3월 ~ 2022년 2월 : 동양미래대학교 자동화공학과(공학사)

2022년 4월 ~ 현재 : 매가존클라우드 Cloud Technology Center / AWS SA

관심분야 : 임베디드 시스템, 클라우드 컴퓨팅