Collegare un tapis roulant a Zwift o Garmin come sensore Ant+

Vorreste collegare un vecchio tapis roulant al vostro account Zwift o al vostro dispositivo Garmin per allenarvi nelle fredde giornate invernali? Se avete un animo nerd e un po’ di pratica, si può fare, grazie ad un Raspberry e qualche gadget.

In primis mi preme dire che non è tutta farina del mio sacco, la guida arriva direttamente da QUI, io mi sono semplicemente interessato di correggere alcuni link, adattarla al Raspberry di prima generazione (PI B+) e riportarla.

La procedura non è così complicata come si possa pensare, bastano pochi accessori, 3 file per collegare il Raspberry al sensore e un po’ di codice, ma partiamo con la lista della spesa:

  • un Raspberry Pi. Va bene qualsiasi modello, ma visto il periodo storico in cui i chip costano più dell’oro, io ho optato per uno di prima generazione (Raspberry Pi B+) che da tempo riposava in cassetto, di conseguenza tutti i link che trovare in questa guida fanno riferimento a quell’hardware, se usate un dispositivo più recente dovrete modificare la versione di NodeJS scelta,
  • una micro sd su cui installare Raspbian (se avete già un sistema funzionate potete utilizzare quello),
  • un adattatore USB per la connessione Ant+, io ne utilizzo uno molto economico che trovate qui: amzn.to/38XNL0J
  • un sensore infrarosso come questo amzn.to/3la9Yyu, se volete spendere poco e non avete fretta, vi conviene cercare su AliExpress:

Passiamo a lavorare sul software, accediamo al Raspberry come meglio crediamo (in locale o tramite ssh) e sul terminale iniziamo a digitare:

sudo apt update
sudo apt upgrade
sudo reboot
sudo apt install git libudev-dev

Ora dobbiamo conoscere l’architettura su cui si basa la nostra versione di SO:

uname -m

se state utilizzando un Raspberry Pi B+, sarà: armv6l

ma è meglio essere sicuri, se risultasse una diversa architettura, dovremmo recuperare i file giusti per l’installazione che segue.

Proseguiamo installando NodeJS:

wget https://nodejs.org/dist/latest-v11.x/node-v11.15.0-linux-armv6l.tar.gz
tar -xzf node-v11.15.0-linux-armv6l.tar.gz
cd node-v11.15.0-linux-armv6l/
sudo cp -R * /usr/local/

Verifichiamo che NodeJS e npm siano correttamente installati nella versione che ci serve:

node - v
v11.15.0

npm -v
6.7.0

E’ giunto il momento di inserire l’adattatore Ant+ in una delle porte USB e verificarne le caratteristiche:

lsusb

il terminale dovrebbe restituirci qualcosa del genere:

Bus 001 Device 004: ID 0fcf:1008 Dynastream Innovations, Inc. ANTUSB-m Stick

Se il vostro modello fosse diverso non disperate, basterà modificare i dati nelle operazioni che seguono.

Creiamo una regola UDEV per abilitare l’accesso al dispositivo ANT+:

sudo nano /etc/udev/rules.d/Dynastream-ANTUSB-m.rules

copiamo all’interno i seguenti parametri:

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

salviamo (CRTL+O) e usciamo (CTRL+X).

Prestiamo particolare attenzione a quello che abbiamo appena scritto nel file in oggetto, perché se il nostro dispositvo Ant+ ha delle specifiche diverse bisogna correggere i dati. Controlliamo che i valori idVendor, idProduct e successivi corrispondano a quelli restituiti in precedenza dal terminale quando abbiamo digitato lsusb.

Ora rimuoviamo l’adattatore Ant+, attendiamo qualche istante, ricolleghiamolo e digitiamo sul teminale:

ls /dev/ttyUSB0

se non ci sono problemi dovremmo leggere:

/dev/ttyUSB0

Procediamo danto i seguendi comandi:

git clone https://github.com/Loghorn/ant-plus.git
cd ant-plus/
nano ant-plus.js

ora modifichiamo il file aggiungendo al blocco “module.export” una riga:

module.exports = {
       ...
       Messages: Ant.Messages,
};

salviamo il file e continuiamo digitando:

npm install

al termine delle operazioni:

node sample/sample.js

se tutto funziona dovremmo leggere qualcosa di simile:

3 Stick found
3 startup
3 Max channels: 8
3 sensor1 attached

fermiamo la ricerca con CTRL+C e preseguimo:

npm install rpi-gpio
cd ./sample
git clone https://github.com/gallochri/strideSpeedDistance.git
node strideSpeedDistance/start.js

modifichiamo il file strideSpeedDistance.js:

nano  /home/pi/ant-plus/sample/strideSpeedDistance/strideSpeedDistance.js

correggendo il valore preimpostato “const stick = new Ant.GarminStick3();” con “const stick = new Ant.GarminStick2();”.

(se il vostro modello di stick Ant+ fosse, ad esempio, un 0fcf:1009, non avete bisogno di effettuare questa modifica)

avviamo lo script:

node strideSpeedDistance/start.js

in questo modo il nostro Raspberry inizia a trasmettere, ovviamente nulla visto che non abbiamo ancora eseguito i collegamenti; se lo script funziona e rimane attivo possiamo terminarlo momentaneamente premendo CRTL+C.

Misuriamo approssimativamente la lunghezza del nostro tappeto e impostiamola correttamente nel file apposito (in cm, ci sono i riferimenti all’interno):

nano /home/pi/ant-plus/sample/strideSpeedDistance/speedMeter.js

Salviamo il file. Se vogliamo eseguire lo script automaticamente e in backgroud ad ogni accensione del Raspberry, ci sono diversi sistemi: PM2, forever… ma io ho optato per un più semplice e immediato edit del Cron:

sudo crontab -e

aggiungendo:

@reboot /usr/local/bin/node /home/pi/ant-plus/sample/strideSpeedDistance/start.js &

A questo punto non ci resta che occuparci dei collegamenti, molto semplici:

  • alimentiamo il sensore infrarossi collegando il pin VCC al pin 2 del Raspberry per avere la 5V,
  • colleghiamo il pin GRD al pin 6 per la massa,
  • colleghiamo il pin OUT al pin 7 per il segnale.

Finito. Ora non ci resta che fare un po’ di bricolage. Io ho inserito il sensore infrarossi all’interno di una piccola scatoletta di plastica e l’ho fissato al bordo destro del tapis roulant, poi ho fatto un segno bianco del tappeto che sarà il riferimento che leggerà il sensore. Fate alcune prove avviando il tapis roulant e se tutto funziona a dovere ma la velocità non dovesse corrispondere esattamente, potete sempre regolarla agendo sull’impostazione della lunghezza.

Piccolo “bonus”: se volete aumentare la precisione del rilevamento e la velocità con cui vengono inviati i dati, potete aggiungere un segno sul tappeto equidistante dal precedente (dividendo quindi il tappeto in quattro parti uguali) e dimezzare di conseguenza il valore della lunghezza nel file speedMeter.js.

Alessandro Salgoni
Alessandro Salgoni
4 1 voto
Valutazione Articolo
Sottoscrivi
Notificami
guest
0 Commenti
Feedback in linea
Visualizza tutti i commenti