태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

Welcome to youlsa's home!

'라즈베리파이'에 해당되는 글 2건

  1. 헬스 자전거로 Zwift 즐기기 (최종) (1)
  2. 헬스 자전거로 Zwift 즐기기 (2) (3)

헬스 자전거로 Zwift 즐기기 (최종)

자전거 이야기

3편을 이제서야 씁니다. 2편 쓴 후 거의 1년 다 되어 가네요. 죄송합니다.-_-


숀리 엑스 바이크의 크랭크에 감아놓은 케이던스 센서의 신호를 받아서 파워값을 환산하여 PC로 쏘아주도록 하는 프로그램을 작성해서 한동안 개인적으로 써왔습니다...만 너무 대충 만들어서 소스가 너무 더럽고 정리가 귀찮아 차일피일 미루게 되었습니다.


그러던 중 우연히 비슷한 일을 해주는 프로젝트를 발견해서(vpower) 여기에 엑스바이크 관련 작업을 조금 추가하여 좀 더 깔끔하게 다듬었습니다.


vpower 프로젝트의 원래 페이지는 이곳입니다.

https://github.com/dhague/vpower


엑스바이크 관련 파일들을 맘대로 추가하기 위해 프로젝트를 아래의 위치로 포크해왔습니다.

https://github.com/youlsa/vpower


포크 이후 작업한 내용들은 이렇습니다.

1. 엑스바이크의 부하곡선 그래프 공식을 적용한 계산 루틴 추가. (XBikePowerCalculator 모듈)

2. 속도 센서가 아닌 케이던스 센서를 사용하도록 수정.



준비물

아래와 같은 준비물이 필요합니다.


좌측으로부터...

1. ANT+ 동글

2. 마이크로 SD카드 (8기가면 충분)

3. 라즈베리파이 2 (또는 3)

4. 라즈베리파이 케이스(없어도 됨)


사진에 없는 것들로는..

5. 전원 어댑터 (핸드폰 충전기 써도 됩니다)

6. 케이던스 센서

7. 키보드, 마우스, HDMI 케이블, 모니터 (이것들은 SD 작업할 때에만 필요함)



SD 카드 만들기

[정말 보시려면 클릭!]



조립

완성된 SD 카드를 라즈베리파이에 꽂고 케이스를 조립하고 ANT+ 동글을 꽂아주면 완성입니다.



숀리 엑스바이크 주변에 라즈베리파이를 두고 전원을 켭니다.


어댑터를 연결해서 전원을 넣으면 잠시의 부팅 시간을 거친 후, 바로 주변에서 날아오는 케이던스 센서의 ANT+ 신호를 받아서 파워값으로 변환한 후 ANT+로 다시 쏘기 시작합니다. 부팅 되고 전원 내려질때까지 이 일만 합니다.



즈위프트를 실행하고 페어링 화면에서 ANT+ 파워미터를 찾도록 하면 아래와 같이 파워미터로 검색이 됩니다.



이제 숀리 엑스 바이크 실내 자전거로 Zwift게임을 신나게 즐기면 됩니다. ^^



추가사항
1. 숀리 엑스 바이크의 부하 조절 노브를 10단 중에 8단에 맞춰놓고 써야 정확한 파워값이 나옵니다.


2. 원래는 케이던스 센서의 ANT+ ID값을 페어링 시켜주는 과정이 필요한데, 그냥 귀찮아서 주변의 모든 케이던스 센서의 신호를 모두 받도록 했습니다. 따라서 1개 이상의 케이던스 센서가 주변에 있으면 파워값이 이상한 값이 나옵니다. 숀리 엑스 바이크 인근에는 딱 1개의 케이던스 센서만 동작하고 있도록 주의 바랍니다.


3. ANT+ 동글은 일반적으로 시중에 판매하는 ANT+ 동글은 모두 동작합니다만, 가민 Vector2와 함께 온 가민 ANT+ 동글은 동작을 안합니다. 제품 ID가 한 글자 차이가 나기 때문이라 약간만 수정하면 되는데... 귀찮아서..


4.마이크로 SD 카드를 만드는 과정이 조금 복잡해 보이는데요, 디스크 이미지를 올려놓으면 편리하게 이용이 가능하실것 같다는 생각이 들었습니다. 하지만, 파티션이 여러개이고 디스크 이미지의 전체 용량이 어마어마해서 올리기 어려울 것 같습니다. 방법을 찾아보도록 하겠습니다.


5. 숀리 엑스 바이크가 아닌 다른 종류의 실내 자전거에 대해서도 속도-파워 데이타를 추출해서 보내주시면 해당 내용을 추가할수 있을 것 같습니다.


(덧붙임) 앗? 그러고보니, 엑스 바이크에는 속도와 칼로리 등등을 보여주는 화면이 있네요. 이거 뜯어서 배선 빼면 케이던스 센서 없이도 똑같이 구현이 될거 같습니다??? 왜 그 생각을 안해봤지???


(덧붙임2) 가정용 헬스 자전거에 케이던스나 파워 데이타를 ANT+/BLE로 전송해주는 기능을 포함한 자전거가 나올법도 한데 없는 것 같습니다. 요즘엔 스마트워치도 많이 쓰고 Zwift같은 게임도 갈수록 늘어가는데다, 무엇보다 건강에 대한 관심들이 높아져 가니 이쪽 수요가 분명히 있을텐데 말입니다. 혹시 헬스 자전거 업체 관계자 분께서 보신다면 저렴하고 좋은 제품 좀 하나 만들어주시면 진심 감사드리겠습니다.

헬스 자전거로 Zwift 즐기기 (2)

자전거 이야기

속도-파워 그래프를 얻었으니 이제 실내 자전거의 속도를 얻어내려면 어떻게 해야 하는지 알아보겠습니다.



일단 자전거에서 뭔가 속도를 얻어내는 센서에는 2가지가 있습니다. 첫번째는 바퀴에 부착되어 현재 자전거의 속도를 계산해내는 속도(speed) 센서이고요, 다른 하나는 페달에 부착하여 현재 페달의 회전수를 알아내는 케이던스(cadence) 센서입니다.


아래가 스피드 센서.




이게 케이던스 센서.



보통 헬스케어/피트니스 제품들에서는 ANT+라는 무선 프로토콜을 사용합니다. 근래 많이 쓰이는 BLE와 유사한 면이 많은 저전력 프로토콜인데요, 역사는 생각보다 오래 되었습니다. 각종 심박계나 자전거 센서들, 런닝용 발걸음 센서, 저울, 산소측정기 등도 사실상 거의 모두 ANT+ 프로토콜을 사용합니다. 근래에는 ANT+와 BLE를 동시에 지원하는 경우도 나오기는 합니다만, 여전히 대세는 ANT+ 프로토콜입니다.


이 프로토콜의 홈페이지는 이곳입니다. https://www.thisisant.com/



ANT+ 프로토콜을 지원하는 디바이스들은 보통 Garmin 등의 헬스케어 전문기업의 기기들이나 Sony 휴대폰 등 의외로 많은 제품들이 제공합니다.


하지만, PC에서 쓰기 위해서는 별도의 USB 동글을 이용해야 합니다.

ANT+ USB 동글은 아래와 같이 생겼습니다.



PC를 사용하면 좋겠지만, 실내 자전거에 붙여 사용해야 하는 용도이기 때문에 라즈베리 파이를 사용해봅니다.


기본적으로 많이 사용하는 OS인 Raspbian을 설치하고 ANT+를 꽂습니다.






lsusb 정보를 봅니다. Vendor ID가 0fcf이고 PID가 1009인걸 알 수 있습니다.




해당 USB 동글을 인식시키기 위해 /etc/udev/rules.d/garmin-ant2.rules 파일을 추가해서 아래의 내용을 추가합니다.


SUBSYSTEM=="usb", ATTRS{idVendor}=="0fcf", ATTRS{idProduct}=="1009", RUN+="/sbin/modprobe usbserial vendor=0x0fcf product=0x1008", MODE="0666", OWNER="pi", GROUP="root"



이 과정을 거친 후, 해당 ANT+ 동글을 꽂으면 /dev/ttyUSB0 으로 잡히게 됩니다.



이제 소프트웨어를 준비합니다.

먼저 python용 ANT+ 라이브러리를 설치합니다.



git clone https://github.com/baderj/python-ant.git

sudo python setup.py install


이렇게 하면 설치됩니다.




이제 코딩만 하면 됩니다.



두 센서의 프로파일 문서를 얻어봅니다. https://www.thisisant.com/developer/resources/downloads/#documents_tab 이곳에서 "ANT+ Device Profile - Bicycle Speed and Cadence" 문서를 받아봅니다.


속도 센서와 케이던스 센서, 두 센서의 프로파일을 비교하며 살펴보니 두 센서 모두 1회전당 1회의 펄스가 나오는게 원칙인데, 몇회에 걸쳐 누적된 수치를 한번에 보내주기도 하는 등 행동 양태에 따른 차이점은 거의 없습니다. 두 센서의 송출 데이타상의 차이점은 Device Type이 속도 센서는 0x7B이고, 케이던스 센서는 0x7A인 점이 다를 뿐입니다.


한가지 더 꼽아보자면, 센서의 데이타 수집 주기가 4Hz 내외라서 1초에 4회 정도씩 수집하도록 되어 있는데, 속도 센서는 8118/32768초에 한번씩, 케이던스 센서는 8102/32768초에 한번씩 데이타를 수집하는 것이 기본입니다.


두 센서 모두 Roll-over time은 64초, 65536회전입니다. 이 처리도 필요합니다.


실내 자전거에는 바퀴가 따로 없이 바퀴의 회전수가 곧 페달의 회전수이기 때문에 둘 중에 아무 센서나 사용해도 상관이 없습니다. 가격도 2가지 센서 거의 동일합니다. 다만, 원래 페달의 크랭크에 설치하기로 되어 있는 케이던스 센서가 좀 더 부착이 쉬우므로 이것을 사용하기로 합니다.



센서에서 펄스가 올 때마다 지난번 펄스의 시간과 대조하여 해당 구간의 델타 속도를 계산해낼 수 있습니다. 제대로 현재 속도를 표시하기 위해서는 델타 속도의 변화 추세를 미분하여 평탄화 작업을 해줘야 하지만, 우리의 목적은 어차피 역시나 해당 델타에서의 파워값만 얻어내어 무책임하게(?) 쏴주면 그 다음에는 속도계에서 알아서 할테니 굳이 복잡한 계산은 생략해도 별 지장 없습니다.


소스는 맨 아래에 있습니다. 페달을 돌려보니 아래와 같은 속도와 파워값 결과가 나옵니다.


대략 데이타의 적절성을 살펴보면..

REVO=21일때, 속도가 18.78mile/h일때에 149.29W가 나옵니다.

REVO=44일때, 속도가 34.27mile/h일때에 452.55W가 나오는걸 보니 몸이(허벅지가^^) 기억하는 파워값과 크게 다르지 않은 파워값을 얻어내는걸 알수 있습니다.






페달을 밟는 속도에 따른 파워값을 얻어낼 수 있으니 이제는 이걸 Zwift 게임에 쏘아주면 됩니다. 이 부분은 다음번에...






소스보기


티스토리 툴바