Table of Contents

Arduino Uno-based controller development

1602 LCD 키패드 실드 테스트

알리익스프레스에서 구입한 실드에 핀헤더를 납땜하였다. 보드 아랫쪽에는 핀 설명이 인쇄되어 있지만 윗쪽 7개 핀은 그렇지 않다.

LCD 및 저항 사다리를 통한 버튼 스위치(4개 방향키 + OK + Reset = 6개)를 위해 쓰인 핀을 제외하면 A1-A5, D0, D1, D2, D3, D11, D12 그리고 D13을 I/O 용도로 사용할 수 있다. 버튼 누름 신호는 A0을 통해 입력된다.

이 실드의 작동 테스트용 코드는 여기에서 입수하였다. Arduino IDE 2.3.8에서 업로드하니 잘 작동하였다.

Sketch uses 2344 bytes (7%) of program storage space. Maximum is 32256 bytes.
Global variables use 167 bytes (8%) of dynamic memory, leaving 1881 bytes for local variables. Maximum is 2048 bytes.

UNO ↔ Pi 직렬 통신 개통

간단한 파이썬 스크립트(pi_button_monitory.py)를 이용하여 Pi가 UNO에게 보내는 메시지를 UNO가 1602 LCD에 표시하도록 하고, 반대로 UNO의 버튼 입력을 Pi의 터미널 창에 표시하게 하였다(SELECT 버튼의 long press 포함). 가급적 TFT-LCD에서 많은 상태 정보를 표시하고 싶었으나, SSH가 끊어지거나 또는 전혀 반응하지 않는 일이 생겨서 일단 TFT-LCD는 쓰지 않고 개발을 이어가기로 하였다. TFT-LCD를 쓰지 않으니 SSH가 끊어지는 일은 발생하지 않았다.

이렇게 정보가 가득한 화면을 보는 것은 잠시 미루기로 한다.

몇 가지 해결해야 할 문제가 있다.

장치 이름으로 시리얼 디바이스 찾아 연결하기

ls -l /dev/serial/by-id/
usb-Arduino__www.arduino.cc__Arduino_Uno_123456-if00 -> ../../ttyACM1
# Python 코드 안에서 다음과 같이 포트 지정
PORT = "/dev/serial/by-id/usb-Arduino__www.arduino.cc__Arduino_Uno_123456-if00"

이번 개발 과정과 관련한 ChatGPT 대화 기록.

처음으로 소리를 내 보기

USB audio interface(Behringer UCA 200)과 USB MIDI keyboard controller(Akai MPK Mini MkII)를 연결한 상태에서 라즈베리파이를 부팅한 뒤 fluidardule_state_stage7c_autodac_bootsafe.py를 실행하면 다음을 순차적으로 실행한다.

  1. 아두이노 우노와 시리얼 통신 수립
  2. USB DAC가 연결된 것을 확인하고 FluidSynth 실행(SalC5Light2.sf2)
  3. 건반을 두드리면 소리가 남
  4. A2에 연결된 pot은 볼륨(CC7)

현재 아두이노 UNO에는 1602 LCD + 키패드 모듈과 pot만 연결된 상태이다. Select 버튼을 길게 누르면 halt/reboot 메뉴로 들어가며, 이 기능이 잘 작동하는 것까지 확인하였다.

하드웨어 구성 완료 후 개발 진행 상황

로터리 인코더와 3개의 LED를 연결하였다. 회로는 이것 이상으로 달라지지 않을 것이다. 이 사진에서는 보이지 않았지만, Mackie Onyx Producer 2-2 오디오 인터페이스까지 포함해야 Fluid Ardule이라고 부를 수 있다.

I2C 2004 LCD로 교체

2026년 4월 4일, 조작성을 높이기 위해서 I2C 2004 LCD 모듈과 별도의 5버튼 키패드를 달았다. 키패드의 저항 조건을 알아내고 인코더 동작을 안정화하느라 약간 어려움이 있었다. 모든 부품을 나무판 위에 임시로 고정하였다.

Version 1.3으로 하드웨어 구성 전면 변경

프로그램 테스트 요령

2026년 3월 27일 버전에서는 부팅 후 systemd에 의해서 다음의 두 서비스가 자동적으로 실행된다.

tft-splash.service # 부팅 시 TFT-LCD에 스플래시 이미지를 띄움
fluid_ardule.service

설정 파일은 /etc/systemd/system에 있다. 하지만 이것은 실행 파일이 아니라 설정 파일이다. 실제 각 서비스가 불러오는 스크립트는 /home/pi/scripts에 존재한다(tft-splash.sh, launch_fluidardule.py).

인코더 작동 등 앞으로 추가해 나갈 스크립트 테스트할 때에는 fluid_ardule.service를 끈 상태에서 하는 것이 좋다. 스플래시 이미지는 그대로 두자.

sudo systemctl stop fluid_ardule.service # 즉시 멈춤
sudo systemctl disable fluid_ardule.service # 재부팅 후에도 작동하지 않게 함

systemd 서비스 스크립트를 변경한 경우 'sudo systemctl daemon-reload'를 실행해야 한다.