윤누리
윤누리
Admin
🧙 AI 위자드
🎻 루키 파트너
🌈 지피터스금손
🚀 SNS 챌린지 달성자
☕ 커피챗 오픈

시중에 팔아도 안 부끄러울(?) 음성 인식 고양이 급식기 완성기

지난 편에서 검볼머신을 개조해 "로나 트릿" 한마디로 간식이 나오는 데모까지 성공했어요. 그런데 장난감이라 만듦새가 조악해서 사료가 틈으로 줄줄 새더라고요. 그래서 3D 프린팅 도안(Munch-E)을 찾아 부품을 주문하고, 지인의 3D 프린터에 출력을 맡긴 채 글을 마쳤습니다. (지난 편 보기)

이번 편은 그 출력물이 도착한 날부터 나흘의 기록이에요.

결론부터 말씀드리면 — 조립도 했고, 화면도 붙였고, 소리도 나게 했고, 디스플레이도 만들었어요. 🙃

스마트폰 옆 탁자 위에 개밥 한 그릇

그 나흘에서 제일 크게 배운 건 이거예요. 문제는 고칠 때마다 다른 데로 도망갑니다. 하나 뚫으면 그 뒤에 있던 게 새 문제가 돼요. 이걸 모르면 "고쳤는데 왜 그대로지?" 하면서 같은 자리를 계속 파게 되더라고요.

완성햇지만 뭔가 이상한 결과물부터 보시죠


1. 부품 이름부터 몰라서, 사진에 이름표를 붙였어요

지인이 뽑아준 출력물 9개를 수령했습니다. 조립 순서는 도안에 있는데... 각 부품을 뭐라고 부르는지를 모르니 설명을 읽어도 뭐가 뭔지 알 수가 없더라고요.

내가 각각의 부품 부위 이름을 모르거든? [사진] 알려줘

클로드가 사진을 보고 9종을 다 짚어줬는데, 텍스트로 읽으니 여전히 헷갈렸어요. 그래서 한 번 더 요청했죠.

내가 준 사진 위에 각각 명칭을 표시해서 다시 사진으로 줘봐.

그랬더니 제 사진 위에 번호와 이름, 리더선을 직접 그려서 새 이미지로 만들어 줬어요.

테이블 위에 기어와 기타 부품이 있는 3D 프린터

이걸 별도 창에 띄워놓고 조립 내내 "④번을 ⑥번에 끼우면 되죠?" 하는 식으로 대화했습니다. 이게 이번 조립에서 제일 유용했어요.

아두이노 아두이노 아두이노 아두이노 아두이노 아두이노

그리고 모터와 ESP32도 열심히 조립을 했습니다....


2. "왜 시원하게 안 나오지?" — 오거는 원래 찔끔찔끔 나옵니다

조립하고 트릿을 넣어 손으로 돌려봤는데, 아무리 돌려도 컵이 거의 비어 있었어요.

뭔가 스크류가 돌아도 시원하게 안 나옴 스큐류가 너무 작아서 그런가

클로드 답이 의외였어요. "그게 정상이고, 오히려 그래야 한다"는 거예요. 오거는 한 바퀴에 나선 한 칸만큼만 밀어내는 장치라, 시원하게 쏟아지면 그게 고장이라고요. 트릿 1~3개를 정밀하게 주는 게 목표니까 딱 맞는 특성이라는 설명이었어요.

전선이 들어 있는 블랙박스 클로즈업

그런데 반대 문제가 생겼어요. 트릿을 조금만 넣으면 바닥에 깔려서 나선에 아예 안 닿아 한 알도 안 나오더라고요. 여기서 제가 아이디어를 냈어요.

바닥에 조금 뭔가 채워주면? 박스같은걸 바닥에 붙여서 틈 높이를 좀 줄여주거나? 별론가

별로가 아니라 정석이래요. 상용 급식기 바닥이 죄다 경사면인 이유가 그거라고. 그래서... 페트병을 잘라서 손으로 붙였습니다. 🥲 3D 프린팅한 근사한 기계 안에 페트병 조각이 들어가 있는 게 좀 웃프지만, 실제로 효과가 있었어요. (경사가 아직 완만해서 더 손봐야 하지만요)

한 사람이 체가 들어 있는 작은 검은색 상자를 들고 있습니다.

배출량을 재보니 편차도 컸어요. 같은 시간을 돌려도 0알이 나왔다가 6알이 나왔다가. 원인은 브리징이었습니다. 도넛 모양 트릿이 입구에서 서로 팔짱을 껴서 아치를 만들고 버티는 거예요. 아치가 버티면 0알, 무너지면 우르르. 이건 아직 완전히 못 잡았어요.


3. 그리고 "로나 트릿" — 진짜 나왔습니다 🎉

배선을 정리하고 음성 인식을 붙였어요. 여기서도 한 번 크게 헤맸는데, 모터가 1초 돌다 멈추길래 기계가 뻑뻑한 줄 알았거든요. 알고 보니 모터에 물린 선이 조립 중에 빠져 있었어요.

사람이 두 개의 전선을 함께 잡고 있다

악어클립으로 물려뒀더니 진동에 자꾸 빠져서, 절연테이프로도 안 되고. 클로드가 낸 대안이 좋았어요. 모터 단자에 구멍이 있으니 전선 피복을 벗겨 그 구멍에 꿰고 5~6바퀴 감으라는 것. 물고 있는 게 아니라 걸려 있는 구조라 진동에 안 빠지더라고요. 납땜 없이 해결.

모터가 금속 기둥에 부착되어 있습니다.

그리고 "로나 트릿"이라고 말하자 — 새 기계에서도 간식이 나왔습니다. 검볼머신에 이어 두 번째로 말을 알아듣는 기계가 됐어요.

참고로 지금 이 기계는 이렇게 생긴 구조로 돌아갑니다. 셋이 각자 역할이 있어요.

한국어의 다양한 유형을 보여주는 다이어그램

4. 잘못 주문한 디스플레이가 눈에 들어왔습니다 (여기서부터 지옥)

사실 예전에 터치가 안 되는 걸 모르고 주문한 2.8인치 화면이 하나 굴러다니고 있었어요. 원래는 이런 걸 띄워두고 있었죠.

LCD 화면이 플라스틱 조각에 표시됩니다.

반품하려다가 문득 이런 생각이 들었어요.

여기에 로나 얼굴을 띄우고, 오늘 간식 몇 번 줬는지 보여주면 되지 않나?

...이때부터 지옥이 시작됐습니다. 😇

첫 화면: 색이 반전되고, 화면이 뿌옇고

굽자마자 이상했어요.

귀신처럼 떴어. 색이 이상해.
메시지가 적힌 TV 화면

흰색이 검게, 초록이 보라로 나왔어요. 색 막대를 띄우는 테스트 화면을 굽고 제가 눈으로 확인해 가며 원인을 찾았는데, 화면 색을 뒤집는 설정 한 줄이 빠져 있었어요.

한 사람이 고양이 이미지가 있는 PCB를 들고 있습니다.

색은 돌아왔는데 이번엔 전체가 뿌옜어요. 보호 필름 문제인 줄 알았는데 아니었고요. 원인이 황당했어요 — 화면을 그리는 라이브러리가 선명도 관련 설정을 아예 안 보내고 있었어요. 그래서 화면 기본값이 그대로 쓰였고, 그 기본값이 뿌옇던 거예요. 데이터시트를 뒤져 직접 값을 써넣으니 그제야 선명해졌습니다.

한 사람이 고양이 이미지가 있는 TV 화면을 들고 있습니다.

💡 이런 건 검색해도 안 나와요. 실물을 보면서 하나씩 지워나가야만 찾을 수 있는 종류였어요. 그래서 클로드한테 "이유를 코드 주석에 길게 적어두자"고 했어요. 다음에 또 헤맬 게 뻔하니까요.

rona treat이라고 적힌 게임 스크린샷

그렇게 나온 급식기 얼굴이 이거예요. 위엔 로나가 트릿을 들고 서 있고, 아래엔 오늘 몇 번 줬는지와 준 시각이 뜹니다.

캘린더 화면은 목업부터

"이번 주에 얼마나 줬는지"를 보고 싶었는데, 화면에 굽고 확인하는 게 한 번에 3분씩 걸려서 답답했어요. 그래서 웹 목업을 먼저 만들어 브라우저로 비교했습니다. 320×240 실제 크기 그대로요.

다양한 그래프를 보여주는 웹페이지 스크린샷

시안 3개를 나란히 보고 월간·주간 두 개를 골랐어요. 실기에 구워보니 또 달랐지만요.

달력이 있는 LCD 디스플레이
monthly도 목업과 좀 다른 느낌이야. 그래프나 박스가 둥글둥글하지 않고 네모가 뾰족뾰족해.

목업에서 CSS로 준 둥근 모서리가 실제 코드엔 반영이 안 돼 있었던 거예요. 목업은 방향을 잡는 데까지만 쓰고, 결국 실물을 봐야 끝나더라고요.

마이크는 배선 정보가 정반대였어요

화면 다음은 마이크. 급식기 앞에서 말할 수 있게 하려면 이 보드의 마이크를 써야 했거든요. 그런데 아무리 해도 마이크 값이 0이었어요.

여기서 클로드가 접근을 잘했다고 생각하는데, 마이크 대신 스피커부터 테스트했어요. 소리가 나면 회로는 살아 있다는 뜻이니 문제를 절반으로 줄일 수 있으니까요.

그다음이 재밌었어요. 배선 후보가 24가지나 되는데 제가 일일이 들어보고 판단하기 힘드니까, 후보마다 다른 음높이로 소리를 내게 하고 맥북 마이크로 66초를 녹음해서, 주파수를 분석해 정답을 역산하더라고요. 사람 귀에 의존하지 않는 방법이었어요.

결국 보드 제조사 정보를 찾아냈고 — 알고 있던 마이크 배선이 정확히 반대였습니다. 입력과 출력이 뒤바뀐 채로 계속 시도했던 거예요.


5. "왜 느리지"에서 시작해, 병목이 세 번 옮겨갔어요

화면도 나오고 마이크도 되는데, 말하고 화면이 바뀌기까지 4~5초가 걸렸어요. 당연히 이렇게 생각했죠. 모델이 무거워서 그렇겠지.

그런데 클로드가 제동을 걸었어요.

추측으로 파라미터를 만지지 말고, 먼저 구간별로 몇 초가 걸리는지 재봅시다.

설정을 6가지로 바꿔가며 매번 직접 소리 내어 말하고 로그를 남겼어요.

설정

6번 중 성공

걸린 시간

기본 (무거운 모델)

2번

4.0초

가벼운 모델로 교체

0번

2.0초

중간 설정

3번

3.6초

"빠르다"는 최신 모델

2번

6.4초

제 가설이 세 개 다 틀렸어요.

  • 가벼운 모델은 빨랐지만 한국어를 못 알아들었어요. "주간"을 "안녕"으로, 다른 말은 "고춧가루"로 받아 적더라고요

  • "빠르다"고 소문난 최신 모델이 오히려 1.7배 느렸어요. 짧은 문장에서는 앞단이 시간을 다 잡아먹어서 이득이 없었고요

  • 처리할 오디오 길이를 줄여도 속도가 그대로였어요. 이 라이브러리는 입력이 2초든 4초든 무조건 30초 분량으로 늘려서 처리하거든요

그리고 진짜 범인은 따로 있었어요. 한 달 전에 띄워놓고 잊어버린 옛날 프로그램이 46시간째 살아서 CPU를 389% 물고 있었어요. 심지어 안전장치가 꺼진 버전이라, 제가 모르는 사이 로나한테 간식을 7번 준 상태였고요. 🙀

이날 시도했다 접은 것들을 모아보면 이렇습니다. 초록 하나 빼고 전부 실패예요.

한국어 - 스크린샷 1

병목 ①: 소리 감지 — 아무리 만져도 안 되는 벽

속도를 잡고 나니 이번엔 인식이 들쭉날쭉했어요. "소리가 났는지 판단하는 기준값"을 만지기 시작했죠. 높이면 말해도 무시하고, 낮추면 냉장고 소리에도 반응하고.

며칠 그러다 클로드가 배경 소음 214개를 재서 보여줬어요.

  • 조용할 때 소음: 중간값 0.019

  • 제가 말할 때: 대략 0.10

  • 판정 기준선: 0.018

다양한 언어를 지원하는 한국어 앱

조용할 때 소음이 이미 기준선을 넘고 있었어요. 목소리와 소음 차이가 5배밖에 안 나니, 선을 어디에 그어도 "조용한데 시끄러운 순간"과 "말했는데 작은 순간"이 겹칠 수밖에 없었던 거죠.

[AI 분석] 소리 크기로 발화를 가려내겠다는 목표 자체가 이 조건에서는 성립하지 않습니다. 기준값을 아무리 조정해도 못 넘습니다.

이 말이 좀 충격이었는데, "이 방향은 답이 없다"를 확인한 게 오히려 진도를 나가게 했어요. 막다른 길을 인정해야 다른 길을 찾으니까요.

그래서 문득 생각했어요. 기계를 못 고치면 내가 말하는 방식을 바꾸면 되지 않나?

호출어 "로나 주간 보여줘"로 길게 바꿔서 테스트해줘

원래는 "주간"이라고 두 글자만 말했거든요. 길게 바꿨더니 7번 중 7번 다 통과했어요.

이유를 듣고 나니 당연했어요. 시스템은 3초 구간의 평균 소리 크기를 봐요. "주간"은 0.5초라 나머지 정적에 희석되는데, "로나 주간 보여줘"는 1.5초를 채우니 평균이 살아남는 거예요.

한국어 한국어 한국어 한국어 한국어 한국어 한국어 한국어

같은 목소리인데 길게 말했다는 이유만으로 두 배 유리해지는 구조였습니다.

병목 ②: 받아쓰기 — 이번엔 표기가 틀렸어요

기뻐한 것도 잠시. 소리는 다 잡히는데 글자가 틀렸어요.

  • "주간" → 주관 · "월간" → 웨감, 외관

  • "트릿" → 트림 · "로나" → 루나, 누나

자주 틀리는 표기를 사전처럼 등록하기로 했는데, 여기서 클로드가 중요한 걸 짚었어요.

⚠️ 단어 하나만 넣으면 안 됩니다. "주관"만 등록하면 "그건 주관적으로 보면..." 하는 일상 대화에서 화면이 바뀝니다. 반드시 뒤따르는 말까지 묶어서 "주관보여"로 넣어야 합니다.

일상어와 헛소리 13개로 오작동하지 않는지 검증까지 하고 반영했어요. 결과는 인식률 14% → 75%. 기준값·모델·창 길이를 며칠 만져도 13~14%에 머물던 게, 사전 하나로 풀렸습니다.

한국어의 다양한 단계를 보여주는 다이어그램

💡 이게 이 글의 핵심이에요. 저는 "인식이 안 된다"를 하나의 문제로 봤는데, 실제로는 소리 감지 → 받아쓰기 → 단어 판정이라는 세 관문이었고 매번 막히는 곳이 달랐어요. 앞을 뚫으면 뒤가 새 병목이 됩니다. "고쳤는데 왜 그대로지?"가 아니라 "이번엔 어디가 막혔지?"를 매번 다시 물어야 해요.


6. 보드가 타 죽어서, 검볼머신을 뜯었습니다

합체하려고 전원을 넣었는데 급식기 쪽 보드가 응답이 없었어요.

ESP가 너무 뜨겁구만. 일단 선은 다 꽂았어.
맨몸인데도 뜨겁다.. 검볼머신의 esp를 가져와?

아무것도 안 물린 상태에서도 뜨거웠어요. 칩이 간 거죠. 원인은 아직도 못 찾았어요.

이때 클로드가 신중했던 게 기억에 남아요. 바로 예비 보드를 쓰라고 하지 않고, **"모터 드라이버가 범인이면 두 번째 보드도 잃는다"**고 위험을 먼저 알려주더라고요. 그러고는 오늘 멈출지, 모터 없이만 확인할지, 끝까지 갈지를 제가 고르게 했어요.

결국 지난 편의 주인공 검볼머신에서 보드를 뽑아 이식했습니다. 발열 정상, 모터도 잘 돌았어요. 1세대가 2세대에게 장기를 기증한 셈이네요. 🥲

참고로 이 과정에서 IP 주소 하나를 제 폰이 뺏어가고 있던 것도 발견했어요. 증상이 고약한 게, 신호는 폰이 대신 받아주고 실제 통신만 거부되니까 계속 기계를 의심하게 되거든요.


7. 3.9초를 못 줄여서, 점 3개를 띄웠어요

여기까지 왔는데도 3.9초는 그대로였어요. 노트북이 음성을 글자로 바꾸는 시간이라 어쩔 수가 없더라고요.

한국어 한국어 한국어 한국어 한국어 한국어 한국어 한국어

문제는 그 3.9초 동안 화면이 완전히 정지해 있다는 거였어요. 말이 먹혔는지 알 수가 없으니 자꾸 다시 말하게 되고, 그러면 두 명령이 겹쳐 오작동하고요.

화면 전환되는데 시간이 조금 걸리잖아? 이때 스피너가 돌거나 해서
조금 덜 지루하게 만들 수 있을까? 바로 해달라는 것은 아니고 일단 검토만 해줘.

그래서 말풍선 안에 점 3개가 차례로 켜지게 했어요. 카톡에서 상대가 입력 중일 때 뜨는 그거요.

지연은 1초도 안 줄었어요. 그냥 "듣고 있어요"를 보여줄 뿐이에요. 그런데 이게 재발화를 막아주니, 겹쳐 말해서 생기던 오작동이 같이 사라졌습니다. 성능 개선에 실패해서 만든 게 다른 문제를 푼 셈이에요.

그런데 점을 붙이니 안 보이던 게 보였어요

점을 띄우고 이상한 걸 발견했어요. 아무 말도 안 했는데 점이 자꾸 떠요.

로그를 보니 94번 반응 중 실제로 글자가 나온 건 24번뿐. 나머지 70번은 헛것을 들은 거였어요.

여기서 좀 서늘했던 게 — 이건 원래부터 그랬다는 거예요. 지금까지는 헛것을 들어도 화면에 아무 일이 없으니 아무도 몰랐던 거죠. 표시를 붙였더니 원래 있던 문제가 드러난 것뿐이었어요.

고칠 때 클로드의 판단이 인상적이었어요.

인식 기준값은 건드리지 않겠습니다. 인식률이 걸린 값이고 이미 여러 번 실패한 영역입니다. 대신 "점을 띄울지"만 정하는 별도 기준을 새로 둡니다. 이건 잘못 걸러도 최악이 "점이 안 뜬다"이고 인식은 그대로 돌아가요. 손해가 비대칭이라 마음껏 엄격해도 됩니다.

같은 문제라도 틀렸을 때 손해가 큰 곳과 작은 곳을 나눠서 다루자는 얘기였는데, 이건 코딩 말고 다른 일에도 쓸 수 있겠더라고요.


8. 소리까지 — 후보 16개를 다 들어보고 골랐어요

화면이 됐으니 소리도 내보고 싶었어요.

현재 급식기 디스플레이에 스피커가 달려있잖아? 여기서 어떤 소리들을 낼 수 있어?
개발은 하지말고 소리만 좀 듣고 싶어.

먼저 한국어 안내 음성을 만들어 들려줬는데, 바로 기각했어요.

한국어 넘나 어색함 ㅋㅋㅋ 그냥 효과음만 있는게 낫겠어.

그래서 효과음 후보 16개를 만들어 맥에서 먼저 들려주는 방식으로 갔어요. 보드에 굽지 않고 고를 수 있으니 훨씬 빨랐고요. 그중 두 개를 골랐습니다.

  • 화면음 — 주간·월간 화면이 뜰 때, 위로 훑어 올라가는 소리

  • 트릿음 — 간식이 나올 때, 도·미·솔·도 올라가는 소리

여기서 클로드가 짚은 제약이 흥미로웠어요. 소리를 내는 동안에는 마이크가 멈춘다는 거예요. 그래서 화면별로 정리했어요. 기준은 하나 — "지금 마이크가 일하는 중인가?"

한국 앱 스크린샷

그리고 스피커는 소리 낼 때만 켜게 했어요. 켜둔 채로 마이크가 돌면 자기 소리를 다시 듣고 자기가 낸 소리를 말로 착각하거든요. 🤖


9. 그리고 발표 전날 밤, 화면이 깨졌습니다

여기까지 오면 이제 급식기와 화면을 물리적으로 붙이기만 하면 끝이었어요. 당 충전하려고 아이스크림을 가지러 갔다 왔는데...

디스플레이 나 안 건드렸는데 갑자기 개진거처럼 되었는데 왜 이러지....?
개 이미지가 있는 TV 화면

액정이 눌린 것처럼 화면 한가운데가 검게 번져 있었어요. 만진 적도 없는데요.

처음엔 소프트웨어 문제인 줄 알고 재부팅부터 해봤어요. 색이 반전되거나 뿌예지는 건 설정이 날아간 거라 재부팅으로 돌아오거든요. 그런데 사진을 본 클로드 판단은 물리적 손상이었어요. 재부팅해도 같은 자리가 같은 모양으로 번지면 소프트웨어가 아니라는 거죠. 실제로 그랬고요.

한 사람이 달력이 표시된 TV 화면을 들고 있습니다.

문제는 하필 번진 자리가 말풍선 위치라는 거였어요. "Say Rona treat" 문구가 통째로 안 읽히는 상태. 그리고 저는...

내가 이걸로 사례 발표를 해야되는데.... 라이브는 아니더라도 영상이라도 찍어야함.
배송은 시간이 오래 걸리고

새 화면은 배송이 오래 걸리고, 발표는 내일이고. 진짜 욕이 나오는 상황이었어요. 😇

여기서 클로드가 낸 대안이 현실적이었어요. 화면이 다 죽은 게 아니라 가운데 띠만 상했으니, 글자를 성한 자리로 옮기자는 것.

fed at 자리에 말풍선을 옮겨주고 나머지는 지금 그대로 둬도 될 듯

말풍선을 아래쪽 성한 구역으로 내렸어요. 대기 중에 도는 점 3개도 말풍선을 따라가게 묶어뒀고요. 그리고 코드에 이렇게 남겼습니다.

중국판 게임 스크린샷

🩹 패널이 물리적으로 상했다. 액정이 눌려 화면 중앙 대역이 검게 번지는데, 하필 말풍선이 그 한가운데라 문구가 통째로 안 읽힌다. 발표 영상을 찍어야 해서 문구만 깨끗한 아래쪽으로 내렸다. 새 패널로 바꾸면 이 한 줄만 원래대로 돌리면 된다.

손상 모드를 켜고 끄는 스위치 한 줄로 만들어둔 거예요. 새 화면이 오면 그 줄만 되돌리면 원래 배치로 돌아옵니다. 급하게 때운 것도 나중에 정리하기 쉽게 때우는 게 있더라고요.

💡 이날 배운 건 이거예요. 완성이라는 상태는 없다. 다 됐다고 생각한 순간에 물리적 사고가 나고, 그때 필요한 건 "고치는 능력"보다 **"망가진 채로 굴러가게 만드는 능력"**이었어요. 발표는 해야 하니까요.


결과

Before (지난 편 끝)

After (나흘 뒤)

기계

검볼머신 개조, 사료 샘

3D 프린팅 Munch-E, 오거 정밀 배출

말이 먹혔는지

트릿이 나오나 기다림

점 3개 + 효과음으로 즉시 알 수 있음

인식 정확도

측정도 안 해봄

14% → 75%

서 있을 자리

노트북 앞

급식기 앞 (보드 마이크로 수음)

화면

없음

로나 얼굴 + 오늘 급여 + 주간/월간 통계

솔직하게, 아직 안 된 것들

  • 인식률 75% — 넷 중 하나는 여전히 실패해요

  • 자동 배출은 아직 잠가뒀어요 — 조용할 때 헛것을 들어서, 자는 사이 간식이 쏟아질까 봐요

  • 헛 점은 24%만 줄었어요 — 근본 원인(마이크 성능)은 그대로예요

  • ESP32 하나 태워먹었고 원인도 못 찾았어요

  • 액정은 깨진 채로 발표하러 갑니다 🫠

  • 페트병 경사로는... 아직 페트병이에요



하드웨어를 1도 모르던 사람이 여기까지 왔네요. 화면은 깨졌고 인식률도 75%지만, 로나는 오늘도 "로나야 트릿 먹자" 소리에 달려옵니다. 😸

다음은 깨진 화면 교체하고, 남은 25%를 잡고, 안심하고 자동 배출을 켜는 것. 아직 갈 길이 남았어요.

8
3개의 답글
밀어주고 끌어주는

온·오프라인 AI 스터디

AI로 어디까지 할 수 있는지
직접 확인하실 분만 신청하세요.