‘uwb arduino’로 검색하면 나오는 글은 대부분 거리 측정에서 멈춘다.
시중 UWB 모듈 두 개를 연결하고, 오픈소스 거리측정 라이브러리를 돌리면, 시리얼 모니터에 미터 단위 숫자가 찍힌다.
그런데 그 거리 세 개를 바닥 위 한 점으로 바꾸려는 순간, 전부 무너진다.
이 글은 바로 그 틈을 메운다.
거리는 위치가 아니다. 거리는 태그가 앵커 하나에서 얼마나 떨어졌는지만 알려준다.
위치는 태그가 실제로 어디 있는지를 알려준다. 찍고, 기록하고, 로봇에 넘길 수 있는 X,Y 좌표다.
거리에서 위치로 가려면 삼변측량, 앵커 배치, 안테나 딜레이 보정을 직접 해야 한다.
이 글은 정직한 직접 제작(DIY) 경로를 먼저 짚는다. 그다음 오늘 당장 좌표가 필요한 사람에게 지름길을 보여준다.
X,Y 좌표는 어떻게 얻나 (거리 말고)?
즉답: 앵커 최소 3개, 삼변측량 단계, 보정된 안테나 딜레이가 필요하다.
거리 하나만으로는 원이 나오지, 점이 나오지 않는다.
원리는 이렇다. 앵커 하나와 태그 하나는 거리 하나만 준다. 예를 들어 4.2m다.
그 거리는 앵커를 중심으로 원을 그리고, 태그는 그 원 위 어딘가에 있다. 앵커를 하나 더 두면 원 두 개가 두 점에서 만난다. 세 번째 앵커를 두면 세 원이 한 점에서 겹친다. 그 점이 당신의 X,Y다.
DIY 장비에서는 이 계산을 직접 해야 한다. 아두이노 스케치 안에서, 원거리 값으로부터 당신이 짜야 한다.

여기서 두 가지가 발목을 잡는다.
첫째, 안테나 딜레이다. UWB 모듈은 신호가 안테나를 떠나기 전에 작고 고정된 시간 오차를 더한다.
보정을 건너뛰면 그 오차가 수십 cm의 거리 오차로 바뀐다. 그러면 계산된 위치까지 뭉개진다. 딜레이는 모듈마다,
기준 거리를 놓고, 손으로 맞춰야 한다.
둘째, 앵커 좌표다. 삼변측량은 각 앵커가 정확히 어디 있는지 코드가 알아야 작동한다.
앵커 위치를 10cm 틀리게 재면, 모든 태그 값이 그 오차를 물려받는다.
불가능한 일은 아니다. 그저 품이 드는 일이다. 그리고 거리측정 튜토리얼이 건너뛰는 바로 그 품이다.
키트 경로는 삼변측량 단계를 없앤다. GrowSpace 개발자 태그는 삼변측량을 태그 안에서 돌린다.
시리얼로 lep 명령을 보내면, 태그가 ‘POS,’로 시작하는 완성된 좌표 문자열로 답한다. 삼변측량 코드를 짤 일이 없다.
콤마로 나뉜 한 줄을 파싱하면 X,Y가 손에 들어온다.
2D 측위에 앵커는 몇 개 필요한가?
최소 3개다. 전체 요건은 아래 표와 같다.
| 측위 목적 | 필요 앵커 | 업데이트 | 키트 정확도 |
| 거리만 | 1개 | 최대 10Hz | 10~30cm |
| 2D 위치(X, Y) | 3개 이상 | 최대 10Hz | 10~30cm |
| 3D 위치(X, Y, Z) | 4개 이상 | 최대 10Hz | 10~30cm |
앵커 하나는 거리를 준다. 앵커 두 개는 후보점 두 개를 남기고, 고를 방법이 없다.
앵커 세 개는 평면 위 X,Y 한 점을 확정한다. 높이 Z까지 원하나? 앵커를 네 개로 늘리고, 서로 다른 높이로 흩어 놓아라.
앵커가 한 높이에만 있으면 수직 움직임을 구분하지 못한다.
앵커는 최소 2m 떨어뜨린다. 실내에서는 이웃 앵커 간격을 15m 안쪽으로 두면 거리값이 깨끗하다.
UWB 위치값이 자꾸 튀는 이유는?
흔한 원인 셋: 앵커 부족, 앵커 좌표 오입력, 신호 경로의 장애물이다.
앵커 부족부터 확인하라. 태그가 특정 순간에 앵커 둘만 보면, 위치가 무너지거나 후보점 사이를 오간다. 벽, 지게차,
사람은 모두 UWB를 막는다. 그래서 서류상 잡아둔 앵커가 현장에선 빠질 수 있다. 앵커를 늘리고, 잘 흩고, 값을 안정시켜라.
좌표 오입력은 더 교묘하다. 앵커 위치를 실제 2.8m인데 2.5m로 치면, 태그는 확신에 찬, 안정된, 틀린 위치를 보고한다. 다시 재라. 자꾸 뒤집히는 축을 다시 확인하라.
장애물이 세 번째다. 금속 선반과 차체는 UWB 펄스를 반사한다. 반사된 펄스는 늦게 도착해 거리를 부풀린다. 이게 멀티패스다. 평범한 DIY 세팅에선, 금속 많은 방의 멀티패스가 오차를 수 미터까지 벌린다.

여기서 하드웨어 선택이 갈린다. 손으로 만든 장비는 이 반사파에 측위가 무너진다. 현장에서 검증된 장비는 다르게 버틴다. 증거는 숫자에 있다. 차량 수천 대가 빽빽한 금속 밀집 자동차-물류 현장에서, 실측 23.05cm가 나왔다. 이 값은 UWB에 RTK-GPS를 더한 융합 측위 값이다. 키트 단독 사양은 10~30cm다. 취미용 장비를 망가뜨리는 반사파를, 현장 검증이 버텨낸 셈이다.
같은 엔진이 40곳 넘는 산업 현장에서 실증을 거쳤다. 금속, 분진, 진동, 고온. 책상 위 시제품을 무너뜨리는 조건에서 좌표 스트림은 살아남는다.
UWB 태그를 아두이노에 어떻게 연결하나?
태그 우측 5V 커넥터를 쓰고, TX를 RX로 교차하고, D8·D9 핀의 AltSoftSerial로 읽는다. 배선은 이 한 줄이 전부다.
이제 세부인데, 그중 하나는 보드를 태울 수 있다.
개발자 태그에는 커넥터가 둘이고, 전압이 다르다. 왼쪽 커넥터는 3.3V로, 라즈베리파이와 ESP32용이다.
오른쪽 커넥터는 5V로, 아두이노용이다.
아두이노를 3.3V 쪽에, 또는 파이 GPIO를 5V 쪽에 연결하면 회로가 상한다. 전압부터 매번 맞춰라.
전압 다음은 교차다. 태그 TX는 아두이노 RX로 가고, 태그 RX는 아두이노 TX로 간다. 두 신호가 엇갈린다.
TX를 TX에 꽂으면 아무 통신도 안 된다.

아두이노 우노에는 함정이 있다. 하드웨어 시리얼 포트가 하나뿐인데, USB 모니터가 이미 그걸 쓴다.
그래서 태그는 소프트웨어 시리얼로 우회한다. AltSoftSerial 라이브러리로 RX는 D8, TX는 D9 핀을 쓴다.
빠르고 안정적인 시리얼이 필요한가? 하드웨어 포트 4개를 주는 메가로 올라가면, 소프트웨어 시리얼의 불안정을 피한다.
연결은 115200 baud로 맞추고, 명령마다 캐리지 리턴(CR)을 보낸다. 먼저 si를 친다. 태그가 시스템 정보로 답하면,
연결이 살아 있다. 보드별 전체 핀맵은 [셋업 가이드][setup]에 있다.
파싱은 이렇다. 태그는 lep에서 ‘POS,’로, lec에서 ‘DIST,’로 시작하는 줄을 흘린다.
콤마로 자르고 원하는 필드를 꺼내면 된다.
// UWB 개발자 태그의 lep 출력 읽기
// 예시 줄: POS,-3.41,9.54,-1.53,74
if (line.startsWith("POS,")) {
int c1 = line.indexOf(',');
int c2 = line.indexOf(',', c1 + 1);
int c3 = line.indexOf(',', c2 + 1);
float x = line.substring(c1 + 1, c2).toFloat();
float y = line.substring(c2 + 1, c3).toFloat();
// x, y는 미터 단위. 찍고, 기록하고, 동작에 넘긴다.
}
끝의 74는 품질지수(QF)로, 0~100 신뢰도 점수다. 60~80 이상이면 안정적인 측위다.
이 값이 떨어지는 걸 보면,
멀티패스가 실시간으로 잡힌다.
한 가지 짚어둔다. 위 코드는 개발자 태그를 직결로 읽을 때 기준이다.
태그 직결 출력은 ‘POS,X,Y,Z,QF’라 X가 첫 필드에 온다. 같은 스트림을 리스너로 읽으면 형식이 바뀐다.
리스너 출력은 ‘POS,임시번호,태그ID,X,Y,Z,QF’라 X가 세 번째 필드로 밀린다.
리스너로 읽으면서 태그 형식대로 파싱하면, 좌표가 어긋난 자리에서 잡힌다.
직접 만들기 vs 키트, 뭐가 맞나
배움이 목적이면 부품으로 만들어라. 삼변측량을 직접 짜고 안테나 딜레이를 맞추는 과정이 UWB를 속부터 가르친다.
책상 하나에서 도는 연구용 스케치라면, 그 시간은 값지다.
좌표가 목적이면 완성형 키트를 잡아라. 마감이 코앞이고, 금속 가득한 방에서, 오늘 X,Y가 필요할 때,
손으로 짠 삼변측량이 데모를 가로막는 벽이 된다.
GrowSpace 크리에이터 키트는 키트 쪽에 선다. 앵커 3개, 개발자 태그, 리스너가 상자에 들어 있다.
태그가 위치를 태그 안에서 계산해 ‘POS,’ 문자열을 시리얼로 넘긴다. 직접 짤 삼변측량이 이미 하드웨어 안에서
돈다는 뜻이다. 리스너는 USB로 PC에 바로 꽂힌다. 게이트웨이 없이 태그 좌표를 흘려서, 초기 테스트에 잘 맞는다.
동반 소프트웨어 SpaceLite와 SpaceLite Pro도 있다. 이 소프트웨어가 좌표를 지도에 찍어준다.
로그를 노려보는 대신 데이터가 움직이는 걸 본다. 동선 재생과 히트맵은 GrowSpace 관제 소프트웨어의 기능이다.
솔직히 짚을 게 하나 있다. 이 키트에선 앵커 좌표를 손으로, mm 단위로, aps 명령으로 입력한다.
앵커를 놓고, 재고, 숫자를 친다. 키트는 삼변측량을 덜어주지, 앵커 매핑까지 덜어주진 않는다.
자주 묻는 질문 (FAQ)
된다. 앵커 3개와 직접 짠 삼변측량 코드가 있으면 된다. 우노는 하드웨어 시리얼이 하나라 AltSoftSerial(D8/D9)로 밀리지만, 기본 2D 세팅은 우노로도 잘 돈다.
시리얼, 즉 UART로 연결한다. 115200 baud, 명령마다 CR이다. 네트워크로 여러 태그를 다루려면 게이트웨이를 거쳐 MQTT 구독으로 좌표 피드를 받는다. 어느 쪽이든 따로 설치할 건 없다. 스트림을 바로 읽는다.
키트 사양은 10~30cm다. 금속과 장애물이 가득한 실제 방은 어떤 UWB에서도 이 값을 넓힌다. 꼼꼼한 앵커 배치와 현장 검증된 하드웨어가 그걸 막는다.
DIY 경로는 진짜다. 작동하고, 배울 것도 많다. 하지만 시리얼 명령 한 줄로 X,Y를 받고 싶다면, 완성형 키트가 지름길이다.
구성과 가격은 제품 페이지에서 확인하세요: [GrowSpace 크리에이터 키트], [setup]

