{"id":14735,"date":"2026-06-20T18:19:13","date_gmt":"2026-06-20T18:19:13","guid":{"rendered":"https:\/\/8657085.xyz\/?p=14735"},"modified":"2026-06-20T18:19:13","modified_gmt":"2026-06-20T18:19:13","slug":"a-web-app-turns-valves-steam-controller-into-a-desk-sized-rc-car","status":"publish","type":"post","link":"https:\/\/8657085.xyz\/?p=14735","title":{"rendered":"A Web App Turns Valve&#8217;s Steam Controller Into a Desk-Sized RC Car"},"content":{"rendered":"<p> <div style=\"display: grid; grid-template-columns: 300px 160px; gap: 2px; width: 460px; background: #eee; padding: 2px;\">\r\n\r\n  <!-- \u6574\u884c\u5bbd\u5e7f\u544a -->\r\n  <div style=\"grid-column: 1\/-1; width: 460px; height: 250px; background: #ccc; display: grid; place-items: center;\">\r\n  <script async type=\"application\/javascript\" src=\"https:\/\/a.magsrv.com\/ad-provider.js\"><\/script> \r\n <ins class=\"eas6a97888e2\" data-zoneid=\"5876674\"><\/ins> \r\n <script>(AdProvider = window.AdProvider || []).push({\"serve\": {}});<\/script>\r\n  <\/div>\r\n  <div style=\"grid-column: 1\/-1; width: 460px; height: 90px; background: #ccc; display: grid; place-items: center;\">\r\n  <script async type=\"application\/javascript\" src=\"https:\/\/a.magsrv.com\/ad-provider.js\"><\/script> \r\n <ins class=\"eas6a97888e2\" data-zoneid=\"5876676\"><\/ins> \r\n <script>(AdProvider = window.AdProvider || []).push({\"serve\": {}});<\/script>\r\n  <\/div>\r\n\r\n  <!-- \u5de6\u4fa7\u7ad6\u6392 -->\r\n  <div style=\"height: 250px; background: #ccc; display: grid; place-items: center;\">\r\n  <script async type=\"application\/javascript\" src=\"https:\/\/a.magsrv.com\/ad-provider.js\"><\/script> \r\n <ins class=\"eas6a97888e2\" data-zoneid=\"5876672\"><\/ins> \r\n <script>(AdProvider = window.AdProvider || []).push({\"serve\": {}});<\/script>\r\n  <\/div>\r\n  <div style=\"height: 500px; background: #ccc; display: grid; place-items: center;\">\r\n  <script async type=\"application\/javascript\" src=\"https:\/\/a.magsrv.com\/ad-provider.js\"><\/script> \r\n <ins class=\"eas6a97888e2\" data-zoneid=\"5876680\"><\/ins> \r\n <script>(AdProvider = window.AdProvider || []).push({\"serve\": {}});<\/script>\r\n  <\/div>\r\n\r\n  <!-- \u53f3\u4fa7\u6469\u5929\u697c\uff08\u548c\u5de6\u4fa7\u5b8c\u5168\u5bf9\u9f50\uff09 -->\r\n  <div style=\"grid-row: 3\/5; height: 750px; background: #ccc; display: grid; place-items: center;\">\r\n  <script async type=\"application\/javascript\" src=\"https:\/\/a.magsrv.com\/ad-provider.js\"><\/script> \r\n <ins class=\"eas6a97888e2\" data-zoneid=\"5876678\"><\/ins> \r\n <script>(AdProvider = window.AdProvider || []).push({\"serve\": {}});<\/script>\r\n  <\/div>\r\n  \r\n  <script async type=\"application\/javascript\" src=\"https:\/\/a.magsrv.com\/ad-provider.js\"><\/script> \r\n <ins class=\"eas6a97888e6\" data-zoneid=\"5876682\"><\/ins> \r\n <script>(AdProvider = window.AdProvider || []).push({\"serve\": {}});<\/script>\r\n<\/div><br \/>\n<\/p>\n<div>\n<p><img decoding=\"async\" src=\"https:\/\/images.techeblog.com\/wp-content\/uploads\/2026\/06\/20110038\/driving-valve-steam-controller-rc-car.jpg\" alt=\"Driving Valve Steam Controller R\/C Car\" width=\"960\" height=\"961\"\/><br \/>Valve shipped its latest Steam Controller earlier this year with a fresh set of haptic motors built into the grips. Those motors were meant for richer game feedback. One developer saw another possibility. A short web page now lets the controller pull itself across a smooth table, turn left or right, and respond to simple keyboard commands. No wires added, no case opened, no firmware changed.<\/p>\n<p><span id=\"more-247424\"\/><br \/><iframe title=\"You Can Now Drive a Steam Controller\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/g-8S8zk4dn8?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><noscript><iframe title=\"You Can Now Drive a Steam Controller\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/g-8S8zk4dn8?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/noscript><br \/>The complete setup is available through a single web address, so users can start by clicking on any Chromium browser. When you hit the connect button, the page seeks permission to communicate directly with the controller via the browser\u2019s built-in features, allowing it to access your hardware. Once the link is established, press the Up arrow or W, and both grip motors will begin to pulse in a constant beat. These vibrations then move through the body and interact with the surface it is seated on, gently but steadily moving it forward.<\/p>\n<p>\nSteering is simple: hold A and the left side of the controller slows down while the right side continues to work and pivots to the left, or press D and the opposite happens. Pressing the spacebar causes both motors to stop dead and the controller to come to a standstill. There is still no backward direction, so every time you start off, you must orient the controller in the correct direction.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/images.techeblog.com\/wp-content\/uploads\/2026\/06\/20110030\/driving-valve-steam-controller-rc-car-1.jpg\" alt=\"Driving Valve Steam Controller R\/C Car\" width=\"1280\" height=\"720\"\/><br \/>Its movement is dependent on timing rather than physical force, and because the controller\u2019s weight and the friction beneath it do not react in the same manner to every single vibration, short pulses put together provide a slight push in one direction. When the pulses on either side diverge, the entire controller begins to tilt and revolve. A small developer panel nestled away on the page allows you to adjust pulse length, frequency, and strength in real time. This converts the entire arrangement into a live test bench for anyone inquisitive about how different patterns effect motion.<\/p>\n<p>It varies slightly depending on the surface you\u2019re dealing with, as a smooth glass or wooden surface allows the controller to slide along, but a rough finish or soft material causes it to slow down. The controller performs better in short sessions rather than extended runs across the conference table since the vibrations that cause it to move eventually wear out the contact points. The inventor freely admits this and recommends that you test it on surfaces that don\u2019t mind minor scuffing.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/images.techeblog.com\/wp-content\/uploads\/2026\/06\/20110035\/driving-valve-steam-controller-rc-car-2.jpg\" alt=\"Driving Valve Steam Controller R\/C Car\" width=\"1280\" height=\"720\"\/><br \/>Earlier experiments using the same controller had demonstrated that the grip motors could produce identifiable patterns just through vibration. Those tests demonstrated that the actuators had sufficient control and force to move the body around, as long as the surface cooperated. Adding keyboard input and a bit of simple steering logic converted that into a completely usable remote control toy, and the whole thing stays in one browser tab because web standards have gotten good enough now to talk to USB devices without needing any extra software on your machine.<br \/><span>[Source]<\/span><\/p>\n<\/p><\/div>\n<p><!-- \u603b\u5bb9\u5668\uff1a\u6700\u5927\u5bbd908px Grid\u7d27\u51d1\u5e03\u5c40 -->\r\n<div style=\"display: grid; grid-template-columns: 728px 160px; gap:2px; width:908px; background:#eee; padding:2px;\">\r\n\r\n  <!-- \u901a\u680f\u9876\u90e8\uff1a\u6700\u5927\u6a2a\u5e45 908x258 \u8de8\u6574\u884c -->\r\n  <div style=\"grid-column:1\/-1; height:258px; background:#ff6b6b; display:grid; place-items:center;\">\r\n    <!-- JuicyAds v3.0 -->\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async src=\"https:\/\/poweredby.jads.co\/js\/jads.js\"><\/script>\r\n<ins id=\"1114307\" data-width=\"908\" data-height=\"258\"><\/ins>\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async>(adsbyjuicy = window.adsbyjuicy || []).push({'adzone':1114307});<\/script>\r\n<!--JuicyAds END-->\r\n  <\/div>\r\n\r\n  <!-- \u7b2c\u4e8c\u901a\u680f\uff1a728\u00d790 \u901a\u680f -->\r\n  <div style=\"grid-column:1\/-1; height:90px; background:#4ecdc4; display:grid; place-items:center;\">\r\n    <!-- JuicyAds v3.0 -->\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async src=\"https:\/\/poweredby.jads.co\/js\/jads.js\"><\/script>\r\n<ins id=\"1114300\" data-width=\"728\" data-height=\"90\"><\/ins>\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async>(adsbyjuicy = window.adsbyjuicy || []).push({'adzone':1114300});<\/script>\r\n<!--JuicyAds END-->\r\n  <\/div>\r\n\r\n  <!-- \u5de6\u4fa7\u4e3b\u680f\uff1a\u591a\u5e7f\u544a\u5806\u53e0 -->\r\n  <div style=\"display:grid; gap:2px;\">\r\n    <div style=\"height:60px; background:#45b7d1; display:grid; place-items:center;\">\r\n\t<!-- JuicyAds v3.0 -->\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async src=\"https:\/\/poweredby.jads.co\/js\/jads.js\"><\/script>\r\n<ins id=\"1114308\" data-width=\"468\" data-height=\"60\"><\/ins>\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async>(adsbyjuicy = window.adsbyjuicy || []).push({'adzone':1114308});<\/script>\r\n<!--JuicyAds END-->\r\n\t<\/div>\r\n    <div style=\"height:250px; background:#ffe066; display:grid; place-items:center;\">\r\n\t<!-- JuicyAds v3.0 -->\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async src=\"https:\/\/poweredby.jads.co\/js\/jads.js\"><\/script>\r\n<ins id=\"1114299\" data-width=\"300\" data-height=\"250\"><\/ins>\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async>(adsbyjuicy = window.adsbyjuicy || []).push({'adzone':1114299});<\/script>\r\n<!--JuicyAds END-->\r\n\t<\/div>\r\n    <div style=\"height:250px; background:#ff9ecd; display:grid; place-items:center;\">\r\n\t<!-- JuicyAds v3.0 -->\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async src=\"https:\/\/poweredby.jads.co\/js\/jads.js\"><\/script>\r\n<ins id=\"1114305\" data-width=\"250\" data-height=\"250\"><\/ins>\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async>(adsbyjuicy = window.adsbyjuicy || []).push({'adzone':1114305});<\/script>\r\n<!--JuicyAds END-->\r\n\t<\/div>\r\n    <div style=\"height:139px; background:#c792ea; display:grid; place-items:center;\">\r\n\t<!-- JuicyAds v3.0 -->\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async src=\"https:\/\/poweredby.jads.co\/js\/jads.js\"><\/script>\r\n<ins id=\"1114302\" data-width=\"133\" data-height=\"139\"><\/ins>\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async>(adsbyjuicy = window.adsbyjuicy || []).push({'adzone':1114302});<\/script>\r\n<!--JuicyAds END-->\r\n\t<\/div>\r\n    <div style=\"height:125px; background:#91e7ac; display:grid; place-items:center;\">\r\n\t\r\n<!-- JuicyAds v3.0 -->\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async src=\"https:\/\/poweredby.jads.co\/js\/jads.js\"><\/script>\r\n<ins id=\"1114303\" data-width=\"125\" data-height=\"125\"><\/ins>\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async>(adsbyjuicy = window.adsbyjuicy || []).push({'adzone':1114303});<\/script>\r\n<!--JuicyAds END-->\r\n\t<\/div>\r\n  <\/div>\r\n\r\n  <!-- \u53f3\u4fa7\u7ad6\u680f\uff1a160\u00d7600 \u6574\u5217\u9ad8\u5e7f\u544a -->\r\n  <div style=\"grid-row:3\/8; height:600px;  display:grid; place-items:center;\">\r\n    <!-- JuicyAds v3.0 -->\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async src=\"https:\/\/poweredby.jads.co\/js\/jads.js\"><\/script>\r\n<ins id=\"1114301\" data-width=\"160\" data-height=\"600\"><\/ins>\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async>(adsbyjuicy = window.adsbyjuicy || []).push({'adzone':1114301});<\/script>\r\n<!--JuicyAds END-->\r\n  <\/div>\r\n\r\n<\/div><br \/>\n<br \/> A Web App Turns Valve&#8217;s Steam Controller Into a Desk-Sized RC Car<br \/>\n<br \/>#Web #App #Turns #Valves #Steam #Controller #DeskSized #Car<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Valve shipped its latest Steam Controller earlier this year with a fresh set of haptic&#8230;<\/p>\n","protected":false},"author":1,"featured_media":14736,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[1339,767,3488,13021,5895,494,8769,173],"class_list":["post-14735","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech","tag-app","tag-car","tag-controller","tag-desksized","tag-steam","tag-turns","tag-valves","tag-web"],"featured_image_urls":{"full":["https:\/\/8657085.xyz\/wp-content\/uploads\/2026\/06\/driving-valve-steam-controller-rc-car.jpg",960,961,false],"thumbnail":["https:\/\/8657085.xyz\/wp-content\/uploads\/2026\/06\/driving-valve-steam-controller-rc-car-150x150.jpg",150,150,true],"medium":["https:\/\/8657085.xyz\/wp-content\/uploads\/2026\/06\/driving-valve-steam-controller-rc-car-300x300.jpg",300,300,true],"medium_large":["https:\/\/8657085.xyz\/wp-content\/uploads\/2026\/06\/driving-valve-steam-controller-rc-car-768x769.jpg",640,641,true],"large":["https:\/\/8657085.xyz\/wp-content\/uploads\/2026\/06\/driving-valve-steam-controller-rc-car.jpg",640,641,false],"1536x1536":["https:\/\/8657085.xyz\/wp-content\/uploads\/2026\/06\/driving-valve-steam-controller-rc-car.jpg",960,961,false],"2048x2048":["https:\/\/8657085.xyz\/wp-content\/uploads\/2026\/06\/driving-valve-steam-controller-rc-car.jpg",960,961,false],"covernews-slider-full":["https:\/\/8657085.xyz\/wp-content\/uploads\/2026\/06\/driving-valve-steam-controller-rc-car-960x715.jpg",960,715,true],"covernews-slider-center":["https:\/\/8657085.xyz\/wp-content\/uploads\/2026\/06\/driving-valve-steam-controller-rc-car-800x500.jpg",800,500,true],"covernews-featured":["https:\/\/8657085.xyz\/wp-content\/uploads\/2026\/06\/driving-valve-steam-controller-rc-car.jpg",960,961,false],"covernews-medium":["https:\/\/8657085.xyz\/wp-content\/uploads\/2026\/06\/driving-valve-steam-controller-rc-car-540x340.jpg",540,340,true],"covernews-medium-square":["https:\/\/8657085.xyz\/wp-content\/uploads\/2026\/06\/driving-valve-steam-controller-rc-car-400x250.jpg",400,250,true]},"author_info":{"display_name":"admin","author_link":"https:\/\/8657085.xyz\/?author=1"},"category_info":"<a href=\"https:\/\/8657085.xyz\/?cat=8\" rel=\"category\">Tech<\/a>","tag_info":"Tech","comment_count":"0","_links":{"self":[{"href":"https:\/\/8657085.xyz\/index.php?rest_route=\/wp\/v2\/posts\/14735","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/8657085.xyz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/8657085.xyz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/8657085.xyz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/8657085.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=14735"}],"version-history":[{"count":0,"href":"https:\/\/8657085.xyz\/index.php?rest_route=\/wp\/v2\/posts\/14735\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/8657085.xyz\/index.php?rest_route=\/wp\/v2\/media\/14736"}],"wp:attachment":[{"href":"https:\/\/8657085.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=14735"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/8657085.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=14735"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/8657085.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=14735"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}