HelloWord-Keyboard 프로젝트는 모듈식 설계, 사용자 정의 펌웨어 및 다양한 확장 기능을 제공하는 오픈소스 스마트 키보드입니다. 이 가이드에서는 프로젝트 구조, 하드웨어 설계, 펌웨어 개발 및 조립 과정을 다룹니다.
HelloWord 스마트 키보드 개요
이 키보드는 왼쪽에 위치한 교체 가능한 "Dynamic 모듈"이 핵심 특징이며, 전자 잉크 디스플레이와 FOC 포스 피드백 노브를 통합합니다. 전체 프로젝트는 하드웨어 설계 파일, 펌웨어 소스 코드 및 소프트웨어 도구를 포함하여 완전히 오픈소스로 제공됩니다.
주요 장점
- 모듈식 설계: 키보드 본체와 기능 모듈이 분리되어 사용자 맞춤 확장이 용이
- 오픈소스 하드웨어: 완전한 PCB 설계 파일 제공으로 자체 제작 가능
- 유연한 펌웨어: STM32 HAL 라이브러리 기반으로 높은 커스터마이징 가능
- 풍부한 기능: 풀키 RGB 조명, 포스 피드백 노브, 전자 잉크 디스플레이 지원
- 상세 문서: 하드웨어부터 소프트웨어까지 완전한 개발 가이드 제공
프로젝트 파일 구조
HelloWord-Keyboard 프로젝트는 다음과 같은 주요 디렉토리로 구성됩니다.
하드웨어 설계 파일 (Hardware/)
이 디렉토리에는 모든 PCB 설계 파일이 포함되어 있으며, EasyEDA Pro 형식을 사용합니다.
- 메인 키보드 PCB (HelloWord-Keyboard)
- Dynamic 모듈 PCB (HelloWord-Ctrl)
- 커넥터, 엔코더, OLED 등 보조 모듈 PCB
모든 회로도 파일은 PDF 형식으로 1.Hardware/ 디렉토리에 있습니다(예: SCH_HelloWord-Keyboard_2022-07-31.pdf).
펌웨어 소스 코드 (Firmware/)
펌웨어 디렉토리에는 두 개의 주요 프로젝트가 있습니다.
- HelloWord-Keyboard-fw: 키 스캔, RGB 제어, HID 프로토콜 구현을 위한 메인 키보드 펌웨어
- HelloWord-Dynamic-fw: 모터 제어, 디스플레이 드라이버 구현을 위한 Dynamic 모듈 펌웨어
미리 컴파일된 펌웨어는 2.Firmware/_Release/ 디렉토리에서 찾을 수 있습니다.
3D 프린팅 모델 (5.3D Model/)
기본 버전과 확장 버전의 구조 설계를 제공하며, 상단 케이스, 하단 케이스, 플레이트 등 모든 부품의 STL 파일이 포함되어 있습니다.
하드웨어 아키텍처
전체 구조 설계
HelloWord 스마트 키보드는 3계층 구조로 설계되었습니다.
- 도킹 스테이션 베이스: 전원 및 데이터 인터페이스 제공
- 키보드 입력 모듈: 75키 배열의 기계식 키보드 본체
- 다기능 상호작용 모듈: 교체 가능한 왼쪽 Dynamic 모듈
핵심 하드웨어 사양
- 메인 컨트롤러: STM32F103CBT6 (키보드), STM32F405 (Dynamic 모듈)
- 자석 엔코더: AS5047P, 노브 위치 피드백용
- 시프트 레지스터: 74HC165, 효율적인 키 스캔 구현
- 모터 드라이버: FD8288Q, FOC 포스 피드백 제어용
시작하기: 키보드 제작
준비물
- 3D 프린팅 부품:
5.3D Model/디렉토리에서 STL 파일을 다운로드하여 프린팅 - 전자 부품:
1.Hardware/디렉토리의 BOM 목록에 따라 조달 - 도구: 납땜 인두, 납, 드라이버, 와이어 스트리퍼 등
- 디버깅 도구: ST-Link 또는 J-Link 디버거
프로젝트 클론
git clone https://gitcode.com/gh_mirrors/he/HelloWord-Keyboard
조립 단계
- 3D 프린팅된 케이스 부품을 준비합니다.
- PCB에 전자 부품을 납땜합니다.
- 스위치를 플레이트에 장착하고 케이블을 연결합니다.
- 펌웨어를 STM32 ST-LINK Utility(v4.5.0)를 사용하여 플래시합니다.
펌웨어 개발 기초
개발 환경
CLion 또는 STM32CubeIDE를 권장합니다. 프로젝트는 STM32CubeMX .ioc 파일을 제공하여 쉽게 프로젝트를 생성할 수 있습니다.
키 매핑 설정
키 매핑은 2.Firmware/HelloWord-Keyboard-fw/UserApp/configurations.h 파일에서 2차원 배열을 통해 정의됩니다.
RGB 조명 제어
펌웨어는 SPI-DMA를 통해 WS2812B LED를 구동합니다. 다음 코드로 RGB 효과를 설정할 수 있습니다.
for (uint8_t i = 0; i < HWKeyboard::LED_NUMBER; i++)
keyboard.SetRgbBuffer(i, HWKeyboard::Color_t{(uint8_t) t, 50, 0});
keyboard.SyncLights();
고급 기능: Dynamic 모듈 개발
Dynamic 모듈의 FOC 포스 피드백 노브와 전자 잉크 디스플레이는 2.Firmware/HelloWord-Dynamic-fw/Ctrl/ 디렉토리에서 제어됩니다.
포스 피드백 제어
PID 알고리즘을 사용하여 노브의 포스 피드백을 구현하며, 핵심 코드는 pid.cpp 파일에 있습니다.
전자 잉크 디스플레이
u8g2 라이브러리를 사용하여 전자 잉크 디스플레이를 구동합니다. 예제 코드는 BSP/u8g2/ 디렉토리에서 확인할 수 있습니다.
소프트웨어 도구
3.Software/ 디렉토리에는 다음 도구가 포함되어 있습니다.
- HelloWord_plugin.js: RGB 조명 제어를 위한 SignalRGB 플러그인
- 수정_전자잉크_이미지.zip: 전자 잉크 디스플레이 콘텐츠를 사용자 정의하는 도구
HID 프로토콜
키보드는 사용자 정의 HID 프로토콜을 사용하며, 설명자는 2.Firmware/HelloWord-Keyboard-fw/USB_DEVICE/App/usbd_desc.c 파일에 정의되어 있습니다. 전체 키 무충돌(N-key rollover)과 사용자 정의 메시지를 지원합니다.
더 자세한 정보는 프로젝트 저장소에서 확인할 수 있습니다. HelloWord-Keyboard 프로젝트