Jeffrey Cross
Jeffrey Cross

Pedal Bike skozi virtualno realnost za manj kot 100 $

"Arduino stvar" Paula Yana prinaša kolesarjenje virtualne realnosti v področje cenovne dostopnosti. Yan priznava: "Popolnoma sovražim vadbo in želim, da bi bila ta izkušnja malo manj boleča in umirajoča." To je skupaj z njegovo idejo, da je Arduino "alternativna vrsta igralnega krmilnika", prinesla idejo za virtualno resničnost. kolesarjenje. Naprava deluje na dveh mehanizmih: meri vrtljaje kolesnega kolesa s tahometrom, ki uporablja infrardečo svetlobo, in lahko posreduje te informacije pametnemu telefonu preko BLE. Ti mehanizmi sodelujejo pri merjenju izhoda pedaliranja in ga vnašajo v okolje navidezne resničnosti.

Yan je postavil svoje kolo na nepremični notranji trener, kar mu je omogočilo, da je stopil na svoje mesto. Lepota njegove naprave je ta, da je široko združljiva ne le z vsemi vrstami koles, temveč tudi s katero koli napravo, ki ima zanko ali vrtljivo površino, kot je npr. To je zato, ker je optični tahometer relativno neinvaziven in zahteva le majhen kos papirja, ki je pritrjen na pnevmatiko. Yan pojasnjuje, da »vsakič, ko kolo opravi popolno rotacijo, bo Arduino zaznal, kdaj list papirja mimo in nato pošlje brezžično sporočilo na mobilni telefon«, s čimer se virtualno kolo premakne naprej skozi njegovo virtualno okolje.

Yan uporablja te slušalke v višini $ 10 in preprosto mesto z risankami, razvito z Unity, ki ga za VR uporablja za brezplačen SDK storitve Google Cardboard. Pojasnjuje, kako je vzpostavil virtualno kolo za premikanje po okolju:

Uporabil sem paket tretje osebe, imenovan Simple Waypoint System, da bi izvlekel pot spline. Če veste, kaj počnete, ta paket ni potreben, vendar je olajšal življenje. Eden od njihovih primerov je bil zgrajen za potiskanje avtomobila po poti z uporabo gumba na tipkovnici, tako da sem avtomobil zamenjal s kamero in imel dohodni BLE ping enako funkcijo kot gumb za gor.

V celoti gledano, Yan navaja svoj strošek kot $ 30 za Arduino in 10 $ za slušalke, kar je znašalo 40 $ za projekt. Vendar pa je pomembno omeniti, da je okolje Unity 10 $ prenosov, paket tretje stranke, ki podpira BLE za iOS in Android, je še 10 $, izbirni sistem Simple Waypoint pa je 15 $. Prav tako boste morali zgraditi ali pridobiti nepremično nastavitev kolesa, BLE zlom in IR senzor, ki bo priključen na Arduino. Če želite imeti možnost usmerjanja kolesa levo in desno, boste potrebovali tudi dodatne komponente. Medtem ko ti dodatni premisleki zagotovo prinašajo ceno nad 40 $, je še vedno mogoče zgraditi za manj kot 100 $, kar tudi ni preveč zanikrno.

Spodaj je Yanova shematična in Arduino koda.

Arduino ima dve ključni komponenti: BLE lom (Adafruit's nRF8001) in refleksni IR senzor. Odsevni senzor ima dve strani: eno z IR LED ("E") in drugo z IR fototranzistorjem ("S"). Te spajkal sem na majhno perford od Arduino z podaljškom, sestavljenim iz 18 merilnih žic. Žica je dovolj debela, da zadrži perford v zraku, vendar dovolj prožna, da prilagodi svoj položaj in se usmeri kot žarnica z gosjim vratom. NRF8001 BLE preboj zavzema nožice 2, 9, 10, 11, 12 in 13, vendar se bo vaša nastavitev verjetno razlikovala.

#include #include "Adafruit_BLE_UART.h" // nRF8001 zaponke: SCK: 13, MISO: 12, MOSI: 11, REQ: 10, ACI: X, RST: 9, 3Vo: X #define ADAFRUITBLE_REQ 10 #define ADAFRUITBLE_RST 9 # define ADAFRUITBLE_RDY 2 Adafruit_BLE_UART uart = Adafruit_BLE_UART (ADAFRUITBLE_REQ, ADAFRUITBLE_RDY, ADAFRUITBLE_RST); nepodpisan dolg čas = 0l; boolean connection = false; uint8_t btm = 65; uint8_t out = btm; uint8_t cap = 90; #define persec 30 #define sendat (1000 / persec) int irPin = 7; int irSensorPin = 5; int testLEDPin = 4; int tripTime = 0; int lastTrip = 0; int tripBez med; boolean detectState = false; boolean lastDetectState = false; void setup (void) {Serial.begin (9600); pinMode (irPin, OUTPUT); pinMode (irSensorPin, INPUT); pinMode (testLEDPin, IZHOD); uart.setDeviceName ("YanBLE"); / * določite ime BLE: največ 7 znakov! * / uart.setRXcallback (rxCallback); uart.setACIcallback (aciCallback); uart.begin (); } void loop () {pollIR (); // IR senzor uart.pollACI (); // BLE} void pollIR () {digitalWrite (irPin, HIGH); if (digitalRead (irSensorPin) == LOW) {detectState = true; if (detectState! = lastDetectState) {// zažene prvič, ko je zaznan odsev Serial.println ("sporočilo poslano prek BLE"); if (povezava == true) {sendBlueMessage ("1"); // dummy podatki, ki so bili posredovani tukaj, je lahko katera koli vrednost. Potrebujemo samo pinganje aplikacije} lastDetectState = true; } else {// tukaj vidimo isti odsev v več okvirih // vklopimo LED-test, da prikažemo vizualno pozitivno refleksijsko digitalno pisavo (testLEDPin, HIGH); }} else {detectState = false; lastDetectState = false; digitalWrite (testLEDPin, LOW); }} / *********************************************** *************************** / / *! Funkcije, povezane z BLE pod to točko * / / **************************************** ********************************** / void aciCallback (dogodek aci_evt_opcode_t) {// ta funkcija se imenuje kadarkoli izberete Dogodki ACI se izvajajo prek stikala (dogodek) {case ACI_EVT_DEVICE_STARTED: Serial.println (F ("Oglaševanje se je začelo")); odmor; case ACI_EVT_CONNECTED: Serial.println (F ("Povezano!")); povezava = res; odmor; case ACI_EVT_DISCONNECTED: Serial.println (F ("prekinjena povezava")); connection = false; odmor; privzeto: break; }} void rxCallback (uint8_t * buffer, uint8_t len) {// ta funkcija se imenuje, ko podatki pridejo na kanal RX} void sendBlueMessage (sporočilo String) {uint8_t sendbuffer [20]; message.getBytes (sendbuffer, 20); char sendbuffersize = min (20, message.length ()); Serial.print (F ("" *) Pošiljanje -> "")); Serial.print ((char *) sendbuffer); Serial.println (""); // zapišemo podatke uart.write (sendbuffer, sendbuffersize); }

Delež

Pustite Komentar