电滑板攻略-手持遥控器
动力老男孩发布于 2015-06-08 23:45
上周玩了几天无线供电的磁悬浮彩灯,耽误了一点儿时间,今天继续写滑板攻略 :)
说起遥控器,之前我们也提到过,目前市面上常见的电滑板遥控是这样滴:
这个就是所谓的“枪式遥控器”,它的操作是向后扣扳机加速、向前推扳机刹车。这种遥控器最早用于车模,跟航模遥控器相比,优点是可以单手操作(其实也不知道另一只手该干什么)
但是车模跟人在上面的滑板完全不一样,这种设计非常反人类。尤其是当遇到危险的时候,很多人下意识的会握拳,结果就是加速的更厉害。
据说某位清华美院的学生,毕设打算改进电滑板,结果启动滑板的瞬间一紧张,直接把扳机捏到了头,于是就骨折住院了……
所以我使用游戏手柄中常见的摇杆来作为手持遥控器,这个是我用洞洞板焊出来的手板:
这个洞洞板其实手感挺不错的,由于到处都是飞线,必须用黑胶布包裹起来,不然很容易短路(比如扔到金属桌面上的时候)。
后来用这个板的原型,在网上找了一家工厂开了模,做了一些专业一点儿的小板子:
工厂做出来的小板子小巧多了,看上去也很精致,不过也有朋友吐槽说太小了手不好抓……好吧,兄弟,咱们可以粘一块长电池用来改进手感 :)
这个手持遥控器的功能包括:1. 向前推加速,向后拉刹车;
2. 按下按钮,会触发滑板上的某个开关,暂定为小喇叭;
3. 蓝牙连接成功后,Arduino的13号管脚灯会快速闪烁;
4. 检测电量,当电池亏电时,小喇叭会滴滴响;
5. 当滑板电量不足时,遥控器也会滴滴响;
电路图如下:
其中的Joystick就是摇杆,它可以前后左右的摇动,并且自带一个可以按下的按钮。注意这里要使用3.3V,8M的Arduino Pro Mini。因为锂电池供电的电压是4V左右,如果使用5V,16M的Arduino板可能会无法带动,还需要额外的一个升压芯片。
源代码如下
#include <SoftwareSerial.h> SoftwareSerial mySerial(12, 11); int readPin = 2; //用来连接电位器 // The Led pin for debug int ledPin = 13; int light = 1; int counter = 0; // Use to check if the button is down boolean buttonDown = false; // battery related int batteryPin = 0; int batteryScale = 2; // Connect to speaker int tonePin = 5; // For Cruise functions int buttonPin = 1; // 定义中断引脚为1,也就是D3引脚 boolean inCruiseMode = false; // 进入定速巡航模式 int cruisePower = 0; int pressToUnlockFrom = 45; //在55和45(中点附近)再次按下,可以解除巡航 int pressToUnlockTo = 55; int breakToUnlock = 25; //或刹车到25以下,也可以解除巡航 void buttonStateChange () { buttonDown = digitalRead(3); if (buttonDown) { //tone(tonePin, 4000); mySerial.write((byte) 204); } else { //noTone(tonePin); mySerial.write((byte) 205); } } void stateChange() { int readValue = readPowerValue(); if (inCruiseMode) { if (readValue < pressToUnlockTo && readValue > pressToUnlockFrom) { inCruiseMode = false; cruisePower = 0; } } else { if (readValue > pressToUnlockTo) { inCruiseMode = true; cruisePower = readValue; } } } void setup() { Serial.begin(9600); mySerial.begin(9600); //attachInterrupt(buttonPin, stateChange, RISING); attachInterrupt(buttonPin, buttonStateChange, CHANGE); } void switchLight() { counter++; if (counter >= 12) counter = 0; else return; digitalWrite(ledPin, light); light = 1 - light; } int readPowerValue() { //读取电位器(传感器)的读数,值范围从0到1023 int readValue = analogRead(readPin) / 10; if (readValue > 100) readValue = 100; return readValue; } void loop() { long t0 = millis(); if (mySerial.available()) { while(mySerial.available()) { byte r = mySerial.read(); //Serial.write(r); } //Serial.write("\r\n"); digitalWrite(ledPin, light); light = 1 - light; counter = 0; } if (Serial.available()) { while(Serial.available()) { byte r = Serial.read(); mySerial.write(r); } } //读取电位器(传感器)的读数,如果是巡航模式则保持速度 int readValue = readPowerValue(); if (inCruiseMode && readValue > breakToUnlock) { readValue = cruisePower; } else { inCruiseMode = false; } switchLight(); mySerial.write((byte)readValue); //Serial.print(readValue);Serial.print("\r\n"); double T = 100; int leftMs = (int) (t0 + T - millis()); delay(leftMs); }
其中的CruiseMode是巡航模式,请大家忽略吧,那是很久之前设想的一个功能:在一定速度的时候按下摇杆按钮,滑板就会保持当前的速度进行巡航,玩家可以松开遥控器了。在需要刹车的时候,再按一下摇杆按钮,或者直接刹车,都会退出这个巡航模式。
现在回想起来,这真是个“为用户着想”的反面教材,玩电滑板的时候,最主要的是安全,在此基础上是易操作。把手柄放开,在危险时又急急忙忙拿起来操作,这本身就够危险的了。
最近,这个遥控器又有了新的版本,手感好多了。这里先卖一个关子,等后续攻略写完之后再继续改进。
-----------------------------------
回到目录点这里
-----------------------------------
另外,我建了一个电动滑板的小组,如果有朋友想讨论的话,可以猛戳链接进行讨论,谢谢!
登录以发表评论
有谁根据这代码做出来了吗。小白掉坑里出不来了。这423627219群还有人吗,正在用百度每段代码问题出在哪
动力哥 有手机端的遥控程序么 有源码最好 谢啦 h568018728@gmail.com
423627219 在这个QQ群的文件里有
动力哥 想问下图上6号口和16号口直接连接是什么意思呢? 还有 怎么给遥控器的电池充电?
抱歉,这个图画的不太对,这个地方应该是改过,但是我找不到正确的那个图了
其实joystick有一个是button,这部分应该是再接一个电阻到5V拉高,按下按钮时降压到0
动力哥 我有几个问题要问您 加我qq 1356585513 行么 就是关于遥控的
加这个群试试:423627219
回复 动力老男孩 : 已加群
成本多少啊
从淘宝搜罗的东西,加起来100以内吧,建议你自己diy一个,不贵
就是时间成本太高,我做了好几天才调好
就是时间成本太高,我做了好几天才调好
能卖给我一个成品吗?
没有时间做啊 T_T
那个pcb板是不是要发图纸给厂家做的啊。。
对,有很多做板子的淘宝店,一般至少得做几十块
现在拿着自己焊的遥控器真是。。。
哈哈,用wii小鸡腿改吧,空间略有点儿小,没法用电路板,直接飞线把器件都塞进去
下面那个达达shshn是我。。我试了一下x和y分别是控制x和y轴的,sw还没试,应该是按下去的那个按钮,我的接线是 vcc接主芯片的vcc,gnd接gnd,VRx接A2,最后测试成功,可以遥控
赞!
我好像买的也是你这款。不知道为什么不能控制。是要在摇杆下拉电阻吗
请问,那个电路图里面的蓝牙四针是不是指Rx Tx GND Vcc这四针啊?
是滴~~
回复 动力老男孩 : 其实,我还有点看不懂摇杆的电路图,我TB买到的joystick只有5针,GND、+5V、VRX、VRY、SW.。。这要怎样接啊?
回复 达达_shshn : oh?这很奇怪啊,你买的joystick是什么样的?给我发个链接看看
回复 动力老男孩 : http://detail.tmall.com/item.htm?spm=a230r.1.14.11.AUxbqw&id=40084759007&cm_id=140105335569ed55e27b&abbucket=17这样的。。
回复 达达_shshn : 明白了,VRx和VRy分别是横向摇杆和纵向摇杆的读数,sw是开关,估计按下以后是5V,松开时0V
回复 达达_shshn : 关于sw,你需要用万用表量一下
我好喜歡您的作品 但我資質淺薄 我很樂意學習,希望能學習。感謝
客气了,互相学习,共同进步 :)
楼主加了鸡腿外壳的遥控器发图出来看看效果啊,我也入手了两个鸡腿。
好。这两天有点儿忙,明天发
呼呼,鸡腿的效果已经发了,看首页的作品
还有arduino库
可以好好借鉴借鉴
欢迎讨论 :)
回复 动力老男孩 : 您做好的板子能不能卖给我一块呀。眼馋呀!
回复 David : 可以啊,你在哪里?
回复 动力老男孩 : 宁波。
回复 David : 你是要裸板还是焊好的?
说实话这个板子做的还不是很完善,比如所有的插口都没有做防错的设置,买回去的话你可能需要自己调一调
回复 动力老男孩 : 这个板子可以外面加个外壳,我可以设计好3d打印出来,到时候分享给大家。
哈哈,定速巡航这个“高大上”的功能我在手机上也做过,触摸手机滑动加速,觉得速度够了就松开,再次触摸定速解除,试用之前洋洋得意了好一阵。结果和你一样,徒增复杂性和控制难度。其实从设计的角度稍微想一下就知道了,这种设计破坏了一致性,手离开控制器的时候油门就应该归零了,不应该再有匀速油门的状态。
开模了就是帅气~ 眼馋啊
没错,太容易误操作了 :)
我淘了一个wii小鸡腿,把它改装成了遥控器,手感非常好
回复 动力老男孩 : wii手柄啊,任天堂打磨出来的经典工业设计造型,爽!!!
作者的最新随笔
-
愚蠢的地球人:为什么太阳和月亮看上去一样大?
2016-12-12 17:11发布
-
手机端遥控程序
2016-01-23 23:48发布
-
电滑板攻略-手持遥控器
2015-06-08 23:45发布
-
电滑板攻略 - 主控板程序
2015-05-21 22:22发布
-
电动滑板攻略 - 蓝牙控制原理
2015-05-18 19:10发布
阅读数: 19214