Pedál egy kerékpár a virtuális valóságon keresztül, 100 dollár alatt - 💡 Fix My Ideas

Pedál egy kerékpár a virtuális valóságon keresztül, 100 dollár alatt

Pedál egy kerékpár a virtuális valóságon keresztül, 100 dollár alatt


Szerző: Ethan Holmes, 2019

Paul Yan „Arduino-dologja” a virtuális valóság kerékpározást hozza a megfizethetőség területébe. Yan bevallja: „Teljesen utálom a testmozgást, és azt szeretném, hogy ez a tapasztalat kicsit kevésbé fájdalmas és lelkiismeretes legyen.” Ez azzal párhuzamosan, hogy Arduino „egy alternatív fajta játékvezérlő”, egy virtuális valóságot idézett elő kerékpáros élmény. A készülék két mechanizmussal működik: a keréktárcsa fordulatszámát egy infravörös fényt használó fordulatszámmérővel méri, és képes arra, hogy a BLE-n keresztül egy okostelefonra kommunikáljon. Ezek a mechanizmusok együttesen mérik a pedál kimenetét, és ezt egy virtuális valóság környezetbe táplálják.

Yan egy helyhez kötött beltéri edzőn állította be a kerékpárját, és lehetővé tette, hogy a helyén pedálozhasson. Eszközének szépsége, hogy széles körben kompatibilis nemcsak bármilyen kerékpárral, hanem elméletileg bármely olyan eszközzel is, amely hurkos vagy forgó felülettel rendelkezik, mint például futópad. Ez azért van, mert az optikai fordulatszámmérő viszonylag nem invazív, és csak egy kis darab papírra van szükség, amely a gumiabroncshoz van ragasztva. Yan elmagyarázza, hogy „minden alkalommal, amikor a kerék teljes körben forog, az Arduino felismeri, hogy mikor halad el a papír, és aztán vezeték nélküli üzenetet küld a mobiltelefonra”, ezáltal a virtuális kerékpárt a virtuális környezetben továbbítja.

Yan ezt a 10 dolláros fejhallgatót használja, és egy egyszerű rajzfilmvárost, amelyet az Unity segítségével fejlesztettek ki, amit a VR-nek a Google Cardboard ingyenes SDK használatával nyújt. Elmagyarázza, hogyan állította be a virtuális kerékpárt a környezetben való mozgáshoz:

Egy harmadik fél csomagot, az egyszerű útvonalválasztó rendszert használtam egy spline útvonal kiírásához. Ha tudod, mit csinálsz, ez a csomag nem szükséges, de sokkal könnyebbé tette az életet. Egyik példájuk az volt, hogy egy autót a billentyűzet felfelé mutató gombjával egy útra toljon, így helyettesítettem az autót a kamerarendszerrel, és a bejövő BLE ping ugyanazt a funkciót hívta meg, mint a fel gomb.

Mindent összevetve, Yan 30 dollárra hivatkozik az Arduino-ra és 10 dollárra a fejhallgatóra, ami összesen 40 dollárt ér el a projektért. Fontos azonban megjegyezni, hogy az Unity környezet egy 10 dolláros letöltés, a harmadik fél csomagja, amely támogatja a BLE-t az iOS és az Android számára, további 10 dollár, és az opcionális egyszerű útvonalválasztó rendszer 15 dollár. Be kell állítania vagy be kell állítania egy álló kerékpár-beállítást, egy BLE-kitörést és egy IR-érzékelőt, amely az Arduino-hoz vezet. Plusz, ha azt szeretné, hogy a kerékpár balra és jobbra irányítható legyen, akkor további alkatrészekre is szükség lesz.Bár ezek az extra megfontolások mindenképpen 40 dollár fölötti árat eredményeznek, még 100 dollár alatt is építhető, ami sem túl kopott.

Az alábbiakban a Yan vázlatos és az Arduino kódja látható.

Az Arduino-nak két fő összetevője van: a BLE kitörés (Adafruit nRF8001) és egy fényvisszaverő IR-érzékelő. A fényvisszaverő érzékelőnek két oldala van: egy infravörös LED („E”) és a másik egy IR fototranzisztor („S”). Ezeket egy kis méretű fedélzetre forrasztottam, amely az Arduino-tól távol volt, egy 18 mérőhuzalból álló hosszabbítóval. A huzal elég vastag ahhoz, hogy felfüggessze a perfekt fedélzetet a levegőben, mégis elég rugalmas ahhoz, hogy beállítsa pozícióját, és mint egy liba nyaklámpa. Az nRF8001 BLE kitörés 2-es, 9-es, 10-es, 11-es, 12-es és 13-as csapokat vesz fel, de a beállítás valószínűleg eltérő lesz.

#include #include "Adafruit_BLE_UART.h" // nRF8001 csapok: SCK: 13, MISO: 12, MOSI: 11, REQ: 10, ACI: X, RST: 9, 3Vo: X #define ADAFRUITBLE_REQ 10 #define ADAFRUITBLE_REQ 10 # define ADAFRUITBLE_RDY 2 Adafruit_BLE_UART uart = Adafruit_BLE_UART (ADAFRUITBLE_REQ, ADAFRUITBLE_RDY, ADAFRUITBLE_RST); nem aláírt hosszú idő = 0l; logikai kapcsolat = false; uint8_t btm = 65; uint8_t out = btm; uint8_t sapka = 90; #define persec 30 #define sendat (1000 / persec) int irPin = 7; int irSensorPin = 5; int testLEDPin = 4; int tripTime = 0; int lastTrip = 0; int tripBetween; logikai detektálásState = false; boolean lastDetectState = false; void setup (void) {Serial.begin (9600); pinMode (irPin, OUTPUT); pinMode (irSensorPin, INPUT); pinMode (tesztLEDPin, OUTPUT); uart.setDeviceName ( "YanBLE"); / * definiálja a BLE nevet: max. 7 karakter! * / uart.setRXcallback (rxCallback); uart.setACIcallback (aciCallback); uart.begin (); } void loop () {pollIR (); // IR-érzékelő uart.pollACI (); // BLE} void pollIR () {digitalWrite (irPin, HIGH); ha (digitalRead (irSensorPin) == LOW) {discoverState = true; ha (detektálás! = lastDetectState) {// futtassa az első alkalommal a reflexiót a Serial.println ("BLE-en keresztül küldött üzenet"); ha (kapcsolat == igaz) {sendBlueMessage ("1"); // itt átadott dummy adatok, ez bármilyen érték lehet. Csak meg kell pingelni az alkalmazást} lastDetectState = true; } else {// itt ugyanaz a reflexió több képkocka fölött // fordítsa be a teszt LED-et, hogy vizuális jelzést adjunk egy pozitív visszaverődésről (testLEDPin, HIGH); }} else {detectionState = false; lastDetectState = false; digitalWrite (tesztLEDPin, LOW); }} / *********************************************** *************************** / / *! BLE-vel kapcsolatos funkciók ezen a ponton * * / **************************************** ********************************** / void aciCallback (aci_evt_opcode_t esemény) {// ezt a függvényt hívják, amikor kiválasztják ACI események bekapcsolása (esemény) {case ACI_EVT_DEVICE_STARTED: Serial.println (F ("Reklám kezdődött")); szünet; ACI_EVT_CONNECTED eset: Serial.println (F ("Csatlakoztatott!")); kapcsolat = igaz; szünet; ACI_EVT_DISCONNECTED eset: Serial.println (F ("Disconnected")); kapcsolat = false; szünet; alapértelmezett: szünet; }} void rxCallback (uint8_t * puffer, uint8_t len) {// ezt a függvényt hívják meg, amikor az adat érkezik az RX csatornára} void sendBlueMessage (String message) {uint8_t sendbuffer [20]; message.getBytes (sendbuffer, 20); char sendbuffersize = min (20, message.length ()); Serial.print (F ("n * Sending ->" ")); Serial.print ((char *) sendbuffer); Serial.println (" ""); // írja az adatokat uart.write (sendbuffer, sendbuffersize); }


Lehet, Hogy Érdekli

Élő frissítések a Maker Faire Bay Area 2018-ból

Élő frissítések a Maker Faire Bay Area 2018-ból


Hozzáférés és a Makerspaces fenntarthatósága; New York-i Nigériába

Hozzáférés és a Makerspaces fenntarthatósága; New York-i Nigériába


Öt hiba történt az első Kickstarterem során

Öt hiba történt az első Kickstarterem során


A hét tippei: nyilvánvaló kiadás kapitány

A hét tippei: nyilvánvaló kiadás kapitány






Legutóbbi Hozzászólások