Jeffrey Cross
Jeffrey Cross

Pedál na kole přes virtuální realitu za méně než 100 dolarů

"Arduino věc" Paula Yana přináší jízdu na virtuální realitě do sféry cenové dostupnosti. Yan přiznává: „Já naprosto nenávidím cvičení a chci, aby tato zkušenost byla o něco méně bolestivá a otupující.“ To spolu s jeho představou, že Arduino je „alternativní herní řadič“, přineslo myšlenku virtuální reality cyklistické zkušenosti. Přístroj pracuje na dvou mechanismech: měří otáčky kola kola otáčkoměrem, který využívá infračervené světlo, a dokáže tyto informace sdělit smartphonu přes BLE. Tyto mechanismy spolupracují na měření vašeho šlapacího výstupu a jeho nasazení do prostředí virtuální reality.

Yan postavil své kolo na stacionárním vnitřním trenažéru, který mu umožnil šlapat na místě. Krása jeho zařízení je, že je široce kompatibilní nejen s jakýmkoliv typem motocyklu, ale teoreticky také s jakýmkoliv zařízením, které má smyčkový nebo otočný povrch, jako je například běžecký pás. To je proto, že optický tachometr je relativně neinvazivní a vyžaduje jen malý kousek papíru, který je přilepen k pneumatice. Yan vysvětluje, že „pokaždé, když kolo udělá úplnou rotaci, Arduino zjistí, kdy kus papíru projde kolem, a pak odešle do mobilního telefonu bezdrátovou zprávu,“ čímž posouvá virtuální kolo vpřed svým virtuálním prostředím.

Yan používá tuto náhlavní soupravu v hodnotě 10 dolarů a jednoduché kreslené město vytvořené s jednotkou Unity, kterou poskytuje pro VR pomocí SDK služby Google Cardboard. Vysvětluje, jak nastavil virtuální kolo, aby se mohl pohybovat v prostředí:

Použil jsem balíček třetí strany nazvaný Simple Waypoint System k vylosování spline cesty. Pokud víte, co děláte, tento balíček není nutný, ale život byl mnohem snazší. Jeden z jejich příkladů byl postaven tak, aby tlačil auto po cestě pomocí tlačítka nahoru na klávesnici, takže jsem nahradil auto kamerovým zařízením a příchozí BLE ping zavolal stejnou funkci jako tlačítko nahoru.

Celkově vzato, Yan cituje jeho cenu jako $ 30 za Arduino a $ 10 za headset, který se dostal na celkový součet $ 40 za projekt. Je však důležité poznamenat, že prostředí Unity je 10 dolarů ke stažení, balíček třetí strany, který podporuje BLE pro iOS a Android, je další 10 USD a volitelný systém Simple Waypoint System je $ 15. Budete také muset postavit nebo získat stacionární nastavení kol, průlom BLE a infračervené čidlo pro připojení k Arduinu. Navíc, pokud chcete schopnost řídit kolo vlevo a vpravo, bude to vyžadovat i další komponenty.I když tyto dodatečné úvahy jistě přinášejí cenu nad 40 dolarů, mohou být stále postaveny za méně než 100 dolarů, což není příliš ošuntělý.

Níže je Yanův schematický i Arduinový kód.

Arduino má dvě klíčové složky: průlom BLE (nRF8001) a reflexní IR senzor. Reflexní senzor má dvě strany: jednu s IR LED („E“) a druhou s IR fototranzistorem („S“). Připájel jsem je na malou desku od Arduina s prodlužovací šňůrou z 18 drátů. Drát je dostatečně tlustý, aby zavěsil desku perf ve vzduchu, ale dostatečně flexibilní, aby upravil svou polohu a zamířil jako husí krk. Útěk nRF8001 BLE zabírá kolíky 2, 9, 10, 11, 12 a 13, ale nastavení se pravděpodobně bude lišit.

#include #include "Adafruit_BLE_UART.h" // nRF8001 piny: 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); dlouhá doba bez znaménka = 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 tripBetween; boolean detectState = false; boolean lastDetectState = false; void setup (void) {Serial.begin (9600); pinMode (irPin, OUTPUT); pinMode (irSensorPin, INPUT); pinMode (testLEDPin, OUTPUT); uart.setDeviceName ("YanBLE"); / * definovat jméno BLE: max. 7 znaků! * / 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) {// spustit první čas je detekován Serial.println ("zpráva odeslána přes BLE"); if (connection == true) {sendBlueMessage ("1"); // zde jsou předávány fiktivní data, to může být jakákoliv hodnota. Potřebujeme pouze ping app} lastDetectState = true; } else {// zde vidíme stejný odraz v několika rámcích // zapneme testovací LED diodu, aby vizuální indikaci pozitivního odrazu digitalWrite (testLEDPin, HIGH); }} else {detectState = false; lastDetectState = false; digitalWrite (testLEDPin, LOW); }} / *********************************************** *************************** / / *! Funkce související s BLE pod tímto bodem * / / **************************************** ********************************************** / void aciCallback (událost aci_evt_opcode_t) {// tato funkce je volána vždy, když vyberete Události ACI se stávají přepínačem (event) {případ ACI_EVT_DEVICE_STARTED: Serial.println (F ("Reklama byla spuštěna")); přestávka; případ ACI_EVT_CONNECTED: Serial.println (F ("Připojeno!")); connection = true; přestávka; případ ACI_EVT_DISCONNECTED: Serial.println (F ("Odpojeno")); connection = false; přestávka; default: break; }} void rxCallback (uint8_t * buffer, uint8_t len) {// tato funkce je volána vždy, když data přijdou na kanál RX} void sendBlueMessage (String message) {uint8_t sendbuffer [20]; message.getBytes (sendbuffer, 20); char sendbuffersize = min (20, message.length ()); Serial.print (F ("n * Odesílání ->")); Serial.print ((char *) sendbuffer); Serial.println (""); // zapsat data uart.write (sendbuffer, sendbuffersize); }

Podíl

Zanechat Komentář