취미 프로젝트에 동작 및 방향 감지 기능 추가 | DigiKey

이유는 모르겠지만 저는 오랫동안 LED를 활용한 취미 프로젝트를 즐겨 왔습니다. 저는 “반짝이는 LED만 보면 침을 흘린다”고 말하곤 합니다. 최근에는 취미 프로젝트에 동작 및 방향 감지를 추가하는 데 관심을 갖게 되었습니다. 실제로 얼마 전에는 각각 3색 LED가 장착된 탁구공의 12 x 12 어레이 기능을 추가했습니다.

하지만 처음부터 말씀드리겠습니다. 2020년 봄 즈음에 David Humrich라는 호주의 은퇴한 엔지니어와 이메일을 주고받고 있었습니다. David는 3색 LED의 소형 매트릭스를 구매했다며 이 매트릭스로 무엇을 할 수 있을지 추천해달라고 했습니다. 저는 답변으로 수년 전 8 x 8 LED 어레이에 구현했던 간단한 웜 프로그램에 관한 짧은 동영상을 게시했습니다.

David를 위해 이 동영상을 만들다 보니, 더 큰 어레이를 구축하는 프로젝트를 잠시 제쳐두고 있었던 것이 생각났습니다. 탁구공을 사용한 매우 흥미로운 여러 디스플레이를 보았기 때문에 탁구공을 사용하기로 했습니다. 큰 봉지에 담긴 저렴한 탁구공을 구매한 다음 12 x 12 = 144 어레이에 배치했습니다(그림 1).

그림 1: 각각 3색 LED가 장착된 탁구공의 12 x 12 어레이를 자랑스럽게 들고 있는 모습(이미지 출처: Max Maxfield)

이러한 유형의 프로젝트에 적합한 LED는 미터당 30NeoPixel인 1376 스트립과 같은 Adafruit의 WS2818 3채널 LED 드라이버 기반 NeoPixel입니다. 이 5m 스트립은 어레이 144픽셀, 전압 레벨 컨버터 1픽셀, 예비 5픽셀로, 총 150픽셀로 구성되었습니다. 이 스트립을 1픽셀 조각으로 자른 후, 탁구공마다 뒷면에 1픽셀을 부착했습니다.

한쪽 모서리부터 시작해서 어레이를 가로질러 왔다 갔다 하며 위쪽을 향해 지그재그 패턴으로 픽셀을 연결하게 되었습니다. 실제로는 직접 어레이를 구축하는 경우, 픽셀 [0,0]이 왼쪽 하단 모서리에 두고(어레이를 바라보는 방향에서) 0번부터 11번까지의 12개의 열(X축)과 12개의 행(Y축)으로 구성된 어레이를 생각하기 때문에, 픽셀을 연결하는 순서는 그리 중요하지 않습니다. 따라서 어레이를 구동할 프로그램을 작성할 때, X값과 Y값을 인수로 하여, 어레이 연결 방식에 따른 알고리즘을 통해 문자열에 해당 픽셀의 번호를 반환하는 GetNeoNum()과 같은 함수를 사용합니다.

다색 페이드를 비롯한 몇 가지 흥미로운 효과를 구현하려고 했기 때문에, 어레이를 구동하기 위해서는 적정한 용량의 메모리, 비교적 빠른 클록, 큰 처리 용량을 갖춘 마이크로 컨트롤러가 필요했습니다. 결국 Seeed Technology102010328 Seeeduino XIAO를 선택했습니다(그림 2). AtmelATSAMD21G18A-MUT SAMD21G18 마이크로 컨트롤러로 구동되는 XIAO는 매우 작아서 Seeeduino 제품군 중 가장 작은 Arduino 호환 마이크로 컨트롤러 개발 기판입니다. 이 마이크로 컨트롤러는 48MHz로 실행되는 32-bit Arm Cortex-M0+ 프로세서 코어를 특징으로 하며 256Kbytes의 플래시 메모리와 64Kbytes의 SRAM이 제공됩니다.

그림 2: 현재 Seeeduino 제품군에서 가장 작은 Arduino 호환 마이크로 컨트롤러 개발 기판인 Seeeduino XIAO는 브레드 기판 친화적이며 사용자에게 48MHz로 실행되는 강력한 32-bit Arm Cortex-M0+ 프로세서를 제공합니다. (이미지 출처: Seeed Studio)

11개의 XIAO 핀 각각을 아날로그 입력, 디지털 입력, 디지털 출력으로 사용할 수 있습니다. 10개의 핀은 펄스 폭 변조(PWM)를 지원하고, 1개의 핀에는 디지털 아날로그 컨버터(DAC)가 장착되어 있어 진정한 아날로그 출력 기능을 제공할 수 있습니다. 또한 필요한 경우, 핀 4와 5를 사용하여 I2C 인터페이스를, 핀 6과 7을 사용하여 UART 인터페이스를, 핀 8, 9, 10을 사용하여 SPI 인터페이스를 지원할 수 있습니다.

앞서 말씀드렸듯이, 최근에는 취미 프로젝트에 동작 및 방향 감지를 추가하는 데 관심을 갖게 되었습니다. 테스트 목적으로 12 x 12 탁구공 어레이에 이 기능을 추가하기로 했습니다.

제가 원했던 것은 센서에 3축 가속도계, 3축 자이로스코프, 3축 자력계가 포함된 초소형 전기 기계 시스템(MEMS) 센서가 장착된 소형 브레이크아웃 기판(BOB)입니다. 얼마 되지 않아 미가공 센서 데이터를 조정하고 이해하기가 너무 복잡해서 머리가 터질 것 같은 지경이 되었습니다. 그래서 대안으로 Bosch의 9DoF BNO055 센서가 장착된 Adafruit의 2472 BOB를 사용하기로 했습니다.

그림 3: Adafruit 2472 BOB에 장착된 BNO055 센서는 3축 가속도계, 3축 자이로스코프, 3축 자력계 외에도 센서 융합을 수행하는 Arm Cortex-M0 프로세서를 포함합니다. (이미지 출처: Adafruit)

BOB는 2선 I2C 인터페이스를 사용하여 XIAO 마이크로 컨트롤러와 통신합니다. BNO055의 장점은 3개의 센서에서 수집된 원본 데이터를 가지고 정교한 센서 융합을 수행하며 제게 필요한 데이터를 필요한 형식으로 제공하는 32비트 Arm Cortex-M0+ 프로세서를 포함한다는 점입니다. 이 동영상에서 확인할 수 있듯이 첫 번째 테스트는 어레이를 수평으로 고정한 다음 어레이를 기울여 디스플레이에서 "공"(픽셀)을 "굴리는" 것이었습니다.

결론

첫 번째 테스트는 예상했던 것보다 훨씬 성공적이었지만 실제로는 간단했습니다. 어레이 기울기가 특정 값(현재 10도로 설정됨)을 초과하면 "공"을 일정한 속도로 해당 방향으로 이동시키기만 하면 됩니다. 다음 단계는 관성과 가속도 등을 더 정확하게 모델링하고 이러한 기능을 사용하여 일련의 게임을 구현하는 것입니다.

중요한 점은 이렇게 첫 실험이 성공했기 때문에 다른 프로젝트에도 동작 및 방향 감지 기능을 추가하여 성능을 크게 향상하게 되었다는 점입니다. 여러분은 어떠신가요? 이동 방식과 방향을 감지하는 기능을 통해 성능을 향상할 수 있는 취미 프로젝트가 있으신가요?

작성자 정보

Image of Max Maxfield

Clive "Max" Maxfield는 1980년 영국 Sheffield Hallam University에서 제어 공학 학사 학위를 받았으며 이후 중앙 컴퓨터용 중앙 처리 장치(CPU) 설계자로 일하기 시작했습니다. 수년에 걸쳐 Max는 실리콘 칩에서 회로 기판, 뇌파 증폭기에서 스팀펑크 예언 엔진(steampunk Prognostication Engines)에 이르는 다양한 제품을 설계했습니다. 또한 30년 이상 전자 설계 자동화(EDA) 부문을 이끌어 왔습니다.

Max는 Designus Maximus Unleashed(앨라배마에서는 금서임), Bebop to the Boolean Boogie(전자 제품 관련 색다른 안내서), EDA: Where Electronics Begins, FPGA: Instant Access 및 How Computers Do Math 등 다양한 도서의 저자/공동저자입니다. Max가 운영 중인 “Max’s Cool Beans” 블로그에 방문해 보세요.

More posts by Clive "Max" Maxfield
 TechForum

Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.

Visit TechForum