세상을 바꾼 아이디어들은 형태에 변형에 따라 다양한 모습으로 진화해왔다. 기존에 있는 것들에 새로운 기능을 추가하거나 아니면 빼거나. 그것도 아니라면 완전하게 다른 시각에서 접근하기도 했다. 이 모든 것은 작은 시도에서 출발한다. 이 작은 출발도 그러하기를 바라본다. 프로젝트는 다음의 순서에 따라 진행했다.

*전통적인 프로젝트 진행 방식과는 다를 수 있다.

 

●제품컨셉구상

●사양 정의

●구현

●제품 디자인

●제작 및 시연


1. 제품 컨셉 구상

 

 지난번 프로젝트에서 기능을 축소해 시간만 표시하는 작은 인테리어 소품을 고민했다. 가장 중요한 점은 시간 설정 및 유지에 불편함이 없어야 한다는 점. 이를 기술적으로 해결하기 위한 방법은 있다.

하나, GPS 모듈을 통해 GPS의 시간을 받아 온다.
둘, 네트워크를 통해 타임 서버에서 시간을 받아 온다.
셋, 직접 시간을 입력하고 RTC(Real Time Clock)으로 시간을 유지한다.

 이중 가장 간편한 방법은 GPS 모듈을 통해 GPS의 시간을 받아 오는 것이다. 하지만 이 프로젝트의 이름이 GPS Clock이 아닌 이유는 ‘사양 정의’ 부분에서 자세하게 설명한다. 이 프로젝트의 정확한 이름은 다음과 같다.

GPS Logger

 


 

2. 사양 정의

 

 인터페이스를 결정하기에 앞서 GPS 모듈에 대한 사전 시험을 진행했다. 그리고 당황을 금치 못했다. 처음 써보는 부품이니 당연한 일이었다.

‘실내에서는 GPS 신호가 도달하기 어렵다.’

 어차피 손에 들어온 GPS 모듈이었다. 이참에 제대로 해보자는 생각이 들었다. 스마트 워치가 제공하는 운동 기능을 모방한 형태의 제품을 만들어 보면 좋겠다고 생각했다. 이미 이전 프로젝트를 진행하면서 보유한 부품을 최대한 활용하기로 했다. 사양은 다음과 같다.

 

·하드웨어

MCU : ESP32 (WiFi, Bluetooth 내장)

공식 홈페이지

LCD : TFT LCD 2.4인치 (SD card 인터페이스 포함)

ILI 9341

GPS : GY-NEO6MV2

Power : 3.7V 배터리(18650) * 2EA

ESP32 동작 전압을 확인하지 않고 구매했다가 추가 구매하여 용량이 다르다. 추가 구매 시에도 확인을 못해서 참사가 벌어졌다.

 

 Weather clock에서 지원해야 하는 기능은 다음과 같다.

 

구분

설명

·필수 기능

GPS 모듈 통신

GPS 시간 및 정보 화면 출력(JPG 이미지 출력)

GPS 데이터 기록을 위한 화면 터치 제어

GPS 데이터 저장을 위한 SD 카드 제어

··부가 기능

서버 통신 중 로고 띄우기(GIF 이미지 출력)


 

3. 구현

 

 구현 내용은 추후 각 단계별로 상세하게 정리해서 올릴 예정이다. 실제 구현은 라이브러리 내에서 제공하는 모든 예제를 활용했다. 사용한 라이브러리만 기능 별로 간단하게 정리한다.


·필수 기능

 

ㄱ. GPS 모듈 통신 : Tiny GPS

 GPS 통신은 모듈의 칩에서 자동으로 해준다. ESP32에서 할 일은 시리얼 통신으로 데이터를 받아오는 것이다. 데이터 파싱도 제공하는 라이브러리에서 자동으로 해준다.

 

ㄴ. GPS 시간 및 정보 화면 출력(JPG 이미지 출력) : TFT_eSPI

 JPG 출력은 예제만으로 문제없다. 다만 화면 구성 및 이미지 버튼 처리가 조금 성가셨다. 프로젝트 진행 중에 아두이노에 적용 가능한 GUI 라이브러리가 있는 것을 확인했다. 추후 다른 프로젝트 진행 시에 적용해볼까 한다.

 

ㄷ. GPS 데이터 기록을 위한 화면 터치 제어 : Adafruit TouchScreen

 이 부분이 조금 성가시다. 구글의 도움을 받아 터치 동작까지는 확인했으나 Arduino Uno(아두이노 우노)에서 동작과 다르다. 핀맵에도 문제가 없었다. 며칠을 헤매고 나서야 원인을 찾을 수 있었다.

ADC 해상도

Arduino Uno ADC 해상도 : 10bit(0 ~ 1023)
ESP32 ADC 해상도 : 12bit(0 ~ 4095)

 

*여기서 기술적인 이야기를 잠시 짚고 넘어가 보자.

 

/** 
감압식 터치 값은 각 ADC 핀을 통한 전압 차로 확인한다. 
LCD에 공급되는 3.3V를 기준으로 변환된 디지털 값을 map 함수를 통해 실제 좌표 값으로 변환하게 된다. 
그렇다. Arduino Uno 나 ESP32 나 LCD에 공급되는 3.3V 값은 달라지지 않기 때문에 
0 ~ 1023의 디지털 값이 발생하게 된다. 
ESP32는 0 ~ 4095 영역의 공간 중 0 ~ 1023 공간만 사용하게 되는 것이다. 

해결할 수 있는 방법은 하나다. 
ESP32 ADC 해상도를 제한하는 것. 
친절하게도 기본으로 제공되는 간단한 함수로 해결이 가능하다. 

*/ 

analogReadResolution(10); // ADC 해상도 범위를 10bit로 설정.

 

ㄹ. GPS 데이터 저장을 위한 SD 카드 제어 : ESP32 Dev Module 예제.

ESP32에서 SD카드를 사용하려면 FAT32로 포맷해야 한다. SD 인식 및 제어는 예제를 활용하면 어렵지 않다.

 

··부가 기능.

ㄱ. 서버 통신 중 로고 띄우기(GIF 이미지 출력) : AnimatedGIFs_SD_Master

별도의 변경 없이 지난번 프로젝트에 적용한 부분을 그대로 적용했다.

 

* GIF 이미지 출력에 대한 이야기는 아래 Weather clock 만들기 참고.

2020/09/17 - [BerryMixLab/Arduino Project] - 아두이노 프로젝트 - Weather clock 만들기

 

아두이노 프로젝트 - Weather clock 만들기

 바야흐로 아두이노 세상에 살고 있다. 초등생, 혹은 유치원생부터 청장년층에 이르기까지 코딩 좀 한다 하면 아두이노의 경험이 있다. 예외도 있지만, 이렇게 많은 사람들의 관심과 노력 속에

berrymixstreet.tistory.com


 

4. 제품 디자인

 Fusion 360을 사용하여 제품을 디자인했다. 별도로 참고한 디자인은 없으며 크기를 최소화하는데 집중했다. 쓸 데 없이 큰 배터리를 구매한 덕분에 케이스 크기가 커진 감이 있다. 달려있는 커넥터만 변경했어도 더 줄일 수 있었을 텐데.

 출력은 보유 중인 유일한 3D 프린터인 Ender 5 Plus를 사용했다.

 

 

 

 

5. 제작 및 시연

https://youtu.be/7X0HEIJEBuk

완성 후 아내를 불러 GPS Logger의 기능을 설명하며 자세히 보여주었다.

“빨간색에 뒤에 검은색 버튼 달려 있으니까 코카콜라 굿즈 같다.
그런데 무슨 말인지는 하나도 모르겠다.”


▶ Trouble shooting.

1. 실내에서 GPS 신호가 잡히지 않는다.

 저층이나 개방된 공간이라면 상황이 달랐겠지만 이와 같은 이유로 테스트에 어려움을 겪었다. 중간중간 마스크를 착용하고 밖으로 나가는 것 말고는 다른 방법이 없었다.

2. GPS Logger 동작 중 jpg 이미지가 깨진다.

 아직까지 이유는 확인하지 못했다. draw string 등 함수가 반복해서 동작할 때 jpg로 그려놓은 메모리 영역을 일부 침범하는 게 아닐까 한다.

 

“이거 왜 이러지?”

 아내가 물었다. 잘 쓰던 수유등에 불이 들어오지 않는다. 아내는 USB 케이블을 의심했지만 여지없이 침대에 달린 USB 포트가 나갔다. 수유등도 망가졌다. 수유등이 USB 포트를 잡아먹으며 같이 죽은 모양이다. 그래서 시작했다. 아두이노를 활용한 간단한 수유등(무드등) 만들기 프로젝트는 다음의 순서로 진행했다.

 

●제품 컨셉 구상

●사양 정의

●구현

●제품 디자인

●조립 및 시연


1. 제품 컨셉 구상

 

불만 들어오면 됐다. 다른 것은 고민할 게 없었다. 놀고 있는 Arduino Uno(아두이노 우노)가 최선의 선택지였다. 최대한 빠른 시간 내에 불편함을 해소해야 했다. 그냥 하나 사자는 말이 나오기 전에 말이다.


2. 사양 정의

 

기존에 쓰던 수유등의 기능을 그대로 제공해야 했다.

· USB 충전

· 편리한 전원 ON/OFF

· 밝기 제어.

 

이 중에 밝기 제어 기능은 제외했다. 크게 필요 없을 것 같다는 것이 그 이유였다. 아래는 사용한 부품 목록이다.

 

· Arduino Uno

· WS2812B LED(원형)

· 18650 배터리(3.7V)

· USB 충방전 보드

· Switch


3. 구현

 

 구현이랄 게 없다. 전원이 인가되면 LED를 전부 켜면 그걸로 끝이다. 코드랄 것도 없다. RGB 값은 구글링으로 기존 불빛과 가장 비슷한 색을 찾아 넣었다.

#include <Adafruit_NeoPixel.h>    

#define PIN 6                     // PWM 디지털핀
#define LEDNUM 8                  // 연결된 네오픽셀의 개수
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LEDNUM, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  strip.begin();                           
}

void loop() {                              
  strip.setPixelColor(0, 0xf5, 0x7f, 0x17);     
  strip.setPixelColor(1, 0xf5, 0x7f, 0x17);     
  strip.setPixelColor(2, 0xf5, 0x7f, 0x17);     
  strip.setPixelColor(3, 0xf5, 0x7f, 0x17);     
  strip.setPixelColor(4, 0xf5, 0x7f, 0x17);     
  strip.setPixelColor(5, 0xf5, 0x7f, 0x17);   
  strip.setPixelColor(6, 0xf5, 0x7f, 0x17);   
  strip.setPixelColor(7, 0xf5, 0x7f, 0x17);

  strip.show();  
  delay(1000);  // 이 부분에 delay가 없으면 눈이 아플 수 있다.
/*  
어차피 LED 점등만 시킬 것이라서 setup부분에서 동작 시켰어야 했다는 후회가 밀려온다.
쓸데 없이 LED 설정을 반복할 필요는 없었는데.
하지만 아무렴 어떠한가?
불만 들어오면 되는데!
*/
}

 


4. 제품 디자인

 최대한 간단하며 반복 사용에도 모든 부품이 제자리에 있어야 했다. 제작 중에 수정을 가하긴 했지만 일부분 개선이 필요해 보인다.

 

 

5. 제작 및 시연

https://youtu.be/H8alClHi6RY

 

수유등을 완성한 후 아내를 불렀다. 그리고 '기와지붕 같다.'라는 답변을 기대하며 동작하는 모습을 보여주었다.

“오, 괜찮네. 근데 바람개비 같다.”

그래도 괜찮다는 말은 기분이 좋다.


Trouble shooting

밝기 조절 기능을 뺀 관계로 아내와 아이 모두 눈부심에 시달렸다.

▶ 안경 닦이를 덮어두어 임시 조치를 취했다.

▶ Version2에서 해결할 예정.

 

 

 바야흐로 아두이노 세상에 살고 있다. 초등생, 혹은 유치원생부터 청장년층에 이르기까지 코딩 좀 한다 하면 아두이노의 경험이 있다. 예외도 있지만, 이렇게 많은 사람들의 관심과 노력 속에 아두이노도 많은 발전을 거듭했다. 이제는 보드 하나면 WiFi, Bluetooth까지 연결이 가능하니 말이다. 이 프로젝트는 다음의 순서에 따라 진행했다.

*전통적인 프로젝트 진행 방식과는 다를 수 있다.

 

●제품 컨셉 구상

●사양 정의

●구현

●제품 디자인

●제작 및 시연


1. 제품 컨셉 구상

 

 책상에 올려둘 수 있는 아기자기한 인테리어 소품이 뭐가 있을까 며칠을 고민했다. 이런저런 아이디어들을 고민하다가 다다른 곳은 날씨와 시계였다. 날씨와 시간은 하루에 한 번씩은 들여다보게 되어 있으므로. 그래서 정한 프로젝트의 이름은 다음과 같다.

Weather clock

 


2. 사양 정의

보드는 정했으나 어떤 인터페이스를 제공할지가 문제였다. 모든 센서를 적용하고 포털 사이트나 스마트폰 어플 정도의 기능을 지원하면 좋다고 생각했다. 하지만 부품 비용을 최소화하고 기간을 단축하는 것에 집중했다. 사양은 다음과 같다.

 

·하드웨어

MCU : ESP32 (WiFi, Bluetooth 내장)

공식 홈페이지

LCD : TFT LCD 2.4인치 (SD card 인터페이스 포함)

중국산이라 공식 홈페이지를 찾기 어렵다.


Weather clock에서 지원해야 하는 기능은 다음과 같다.

구분

설명

·필수 기능

시간 서버 동기화

기상청 RSS 받아오기

날씨와 시간 화면 출력 (JPG 이미지 출력)

··부가 기능

서버 통신 중 로고 띄우기(GIF 이미지 출력)

 


3. 구현

실제 구현 내용을 별도로 기록하지 않는 이유는 다음과 같다.

첫째, 구현 내용이 광범위하다.

둘째, 기억이 나지 않는다.

다른 블로그에서 참조해서 진행한 내용이 대부분이며 상세하게 잘 기록되어 있으니 그 부분을 참고하는 편이 좋다.


·필수 기능

ㄱ. 시간 서버 동기화

비교적 간단하다. WiFi 연결 후 time.bora.net등 익히 알고 있는 시간 서버에 연결해 time 구조체에 시간을 받아와 그대로 출력한다. 시간 출력하는 예제를 조금만 응용하면 된다.

 

ㄴ. 기상청 RSS 받아오기

3시간 단위 기상 예보만 받아올 수 있다. 욕심을 내서 구글이나 다른 곳에 있는 기상 정보로 실시간 날씨 정보를 표출하고 싶었지만 꾹 참았다. 애초에 실시간 기상 정보를 띄우기로 기획한 것은 아니었기 때문에. 추후에 기회가 된다면 진행해 볼 수도 있다.

 

ㄷ. 날씨와 시간 화면 출력(JPG 이미지 출력)

이제 받아온 시간과 날씨를 표출할 차례다. 날씨 이미지 표출은 SD card jpg 출력 예제를 활용했다. 앞서 언급한 시간 출력 예제를 함께 활용하면 큰 문제는 없다.

 

··부가 기능

ㄱ. 서버 통신 중 로고 띄우기(GIF 이미지 출력)

프로젝트 진행 중 가장 큰 문제에 봉착했다. 서버와 통신해서 받아온 데이터를 표출하기 전까지 검은 화면만 보여주게 생긴 것이다. 사전에 파악한 정보를 다시 되짚어 보았다. 눈에 띄는 정보 하나가 있었다.

Dual core

ESP32, 이건 정말 물건이다 싶었다. 바로 펌웨어 구조 수정에 들어갔다. 한쪽 코어로는 서버 통신 중에 로딩 이미지를 띄우고 다른 코어로는 서버 통신을 담당하도록 지정했다.


4. 제품 디자인

어떤 디자인을 할까 크게 고민하지 않았다. 구관이 명관이다. 존경해 마지않는 디자인, 애플의 초기 매킨토시를 참고했다.

디자인도 디자인이지만 케이스 제작이 문제였다. 무드 등을 만드는 프로젝트에서 방망이 깎는 노인처럼 했던 톱질. 그 고생을 또다시 할 수 없었다.

*톱질에 대한 이야기는 아래 DIY 아두이노 무드 등 만들기 참고.

2020/05/11 - [주전부리 레시피/berryMixLab] - DIY 아두이노 무드등 만들기

 

DIY 아두이노 무드등 만들기

나 때는 말이야.  이 글은 이렇게 시작한다. 처음 직장 생활을 시작했을 때, 스마트폰의 물결이 시작되고 있었다. 옴니아가 아이폰의 대항마로 등장했을 즈음 말이다. 그때만 해도 개발 보드 같�

berrymixstreet.tistory.com

그래서 샀다. 3D 프린터. 가성비를 최우선으로 고려했다.

Ender 5 Plus

제대로 된 물건을 출력할 때까지 애 많이 먹었다.


5. 제작 및 시연

https://youtu.be/HxMA5mHx_1g

 

완성 후 아내를 불러 동작하는 모습을 보여주었다. 그 당시에도 반응은 나쁘지 않았는데 한참이 지나 나를 다시 부른다.

“그거 부품 한 세트 밖에 없지?”

“왜?”

“있으면 하나 더 만들어서 친구 하나 줄까 했지.”

 

▶ Trouble shooting.

1. ESP32의 프로그램 업로드가 되지 않았다.

다른 호환 보드들도 이런 문제가 있는지 모르겠지만 프로그램 업로드 시 프로그램 Write 진행률이 표시될 때까지 Boot 스위치를 누르고 있어야 한다.

2. 아두이노 라이브러리로 추가한 예제로 LCD가 동작하지 않았다.

중국산이라 그런지 LCD IC의 chip 아이디가 읽히지 않아 한참 애먹었다. 예제에서 chip ID를 하나하나 선택해보면 언젠가는 동작한다.

3. ESP32와 LCD를 연결하는 핀맵 정보가 부족하다.

구글링으로 간신히 찾은 자료를 참고하여 LCD 연결에 성공했다. 판매되고 있는 TFT 2.4인치 LCD의 종류가 참 다양하다.

4. 배송사고

첫 택배는 분실됐다. 어떤 이의 손아귀에 들어갔는지 알 수는 없다. 그것도 아니라면 고물상에. 분실 보상은 받았으니 나쁠 것은 없다.

 

소유에 대하여

닌텐도 패미컴 시절부터 현재에 이르기까지 수많은 게임을 경험하고 게임기를 소유했다. 지금도 플레이스테이션을 비롯한 여러 게임기를 소유하고 있다. 그럼에도 불구하고 개발 보드에서 에뮬레이터를 테스트하고자 하는 것은 인간 본연의 어떤 욕망이 아닌가 한다.


새로운 프로젝트

ppsspp 공식 홈페이지

 앞선 프로젝트에서 MAME를 돌려보기 위해 검색하던 중 ppsspp라는 것을 발견했다. 소니에서 출시했던 포터블 게임기인 PSP의 에뮬레이터였다. MAME도 불법의 논란이 있지만 ppsspp는 그 논란이 가중될 것이다. 라즈베리파이나 하드커널의 오드로이드 보드 사양 시험 목적으로 올려보는 것 같다. 적용은 다음의 순서를 따랐다.

1. ppsspp 컴파일

2. 테스트 플레이

*MAME 돌려보기에 대한 내용은 아래 글에서 확인할 수 있다.

2020/06/04 - [주전부리 레시피/berryMixLab] - Jetson Nano에서 MAME를

 

Jetson Nano에서 MAME를

개발 보드로 무언가 한다는 것.  개발 보드로 무언가 한다는 것은 신나는 일이다. 인생 처음 Hello world를 마주한 그날처럼. 처음 이 작은 보드로 무수히 많은 일이 가능하다는 것을 알게 된 그날��

berrymixstreet.tistory.com

 


1. ppsspp 빌드

 전체 과정은 오드로이드를 위한 ppsspp build를 참고했다. 그래서 별도로 기록하지 않는다. (절대로 귀찮거나 기억이 나지 않아서는 아니다.)

 Jetson nano에서 동작시키기 위한 설정 부분이 조금 다르다. 별도로 기록해 놓지 않아 기억이 희미하다. 아마 cmakelist 옵션에서 architecure 부분을 tegra(aarch64)로 설정했던 것 같다. 소스 폴더 안의 설정을 확인해서 수정했던 것으로 기억한다.

https://magazine.odroid.com/article/building-ppsspp-for-ubuntu-on-the-odroid-xu3-xu4/

 

Building PPSSPP for Ubuntu on the ODROID-XU3/XU4 | ODROID Magazine

PPSSPP is a Playstation emulator that runs on many platforms, including Linux and Android.  ▶

magazine.odroid.com

Build에 성공하면 다음과 같은 화면이 기다린다.

 

 


2. 테스트 플레이

그래픽 성능을 확인하기 위해 철권6 및 God of war를 플레이해보았다. God of war의 경우 프레임 저하가 있지만 플레이에 큰 문제는 없다.

*ppsspp 동작 및 테스트 플레이 전체 과정은 아래 영상에서 확인할 수 있다.

https://youtu.be/RwY5Xg6Ru7w

 ppsspp에서 철권 6의 대기 화면이다. 생각보다 그래픽이 나쁘지 않았다.

어서 10단 콤보를 쓰고 싶다.

 ppsspp에서 God of war의 대기 화면이다. PS Vita를 닌텐도 스위치처럼 플레이할 수 있다면 다시 구매해도 괜찮겠다고 생각했다. (PS Vita 용 God of war가 있는진 모르겠다.)

이때만 해도 크레토스가 많이 젊었다.

 


프로젝트 진행 중 이슈

1. Build는 정상적으로 완료됐는데 실행 중 오류가 발생한다.

 Build 후 실행이 되지 않을 경우 다음의 명령어를 실행 후 다시 시도해보기 바란다. 100% 문제 해결에 도움이 되지 않을 수도 있지만.

sudo killall ibus-daemon

2. ppsspp 동작 중 젯슨 나노 전원이 꺼진다.

 ppsspp 그래픽 설정에 따라 보드 전원이 꺼질 수 있다. 설정 변경 후 꺼지지 않고 잘 동작하는 것을 확인했다.


글을 마치며

 기회가 된다면 라즈베리파이나 오드로이드에서도 ppsspp를 테스트해보고 싶다. 우선 그전에 Jetson nano에서 재밌는 것들을 시도해본 후에.

'BerryMixLab > Jetson Nano Project' 카테고리의 다른 글

Jetson Nano에서 MAME를  (0) 2020.06.04

+ Recent posts