电滑板攻略-手持遥控器

动力老男孩发布于 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是巡航模式,请大家忽略吧,那是很久之前设想的一个功能:在一定速度的时候按下摇杆按钮,滑板就会保持当前的速度进行巡航,玩家可以松开遥控器了。在需要刹车的时候,再按一下摇杆按钮,或者直接刹车,都会退出这个巡航模式。
现在回想起来,这真是个“为用户着想”的反面教材,玩电滑板的时候,最主要的是安全,在此基础上是易操作。把手柄放开,在危险时又急急忙忙拿起来操作,这本身就够危险的了。
最近,这个遥控器又有了新的版本,手感好多了。这里先卖一个关子,等后续攻略写完之后再继续改进。
-----------------------------------
回到目录点这里
-----------------------------------
另外,我建了一个电动滑板的小组,如果有朋友想讨论的话,可以猛戳链接进行讨论,谢谢!

 
BASHEN2016-12-15 23:03:06
有谁根据这代码做出来了吗。小白掉坑里出不来了。这423627219群还有人吗,正在用百度每段代码问题出在哪
.YuaN2015-10-21 17:39:56
动力哥 有手机端的遥控程序么   有源码最好 谢啦  h568018728@gmail.com
动力老男孩2015-10-22 19:48:20
423627219 在这个QQ群的文件里有 
冰清的理想乡2015-09-08 16:39:52
动力哥 想问下图上6号口和16号口直接连接是什么意思呢?  还有 怎么给遥控器的电池充电?
动力老男孩2015-09-10 15:14:00
抱歉,这个图画的不太对,这个地方应该是改过,但是我找不到正确的那个图了
其实joystick有一个是button,这部分应该是再接一个电阻到5V拉高,按下按钮时降压到0
- 。-2015-08-29 20:44:16
动力哥 我有几个问题要问您 加我qq 1356585513 行么  就是关于遥控的
动力老男孩2015-08-31 10:07:38
加这个群试试:423627219
- 。-2015-09-01 14:17:01
回复 动力老男孩 : 已加群
sss2015-08-09 03:31:41
成本多少啊
动力老男孩2015-08-11 23:15:27
从淘宝搜罗的东西,加起来100以内吧,建议你自己diy一个,不贵
就是时间成本太高,我做了好几天才调好
sss2015-08-08 09:25:22
能卖给我一个成品吗?
动力老男孩2015-08-08 22:18:21
没有时间做啊 T_T
达达shshn2015-08-02 12:39:20
那个pcb板是不是要发图纸给厂家做的啊。。
动力老男孩2015-08-02 16:16:00
对,有很多做板子的淘宝店,一般至少得做几十块
达达shshn2015-08-02 12:22:14
现在拿着自己焊的遥控器真是。。。
动力老男孩2015-08-02 16:15:23
哈哈,用wii小鸡腿改吧,空间略有点儿小,没法用电路板,直接飞线把器件都塞进去
达达shshn2015-07-24 00:59:11
下面那个达达shshn是我。。我试了一下x和y分别是控制x和y轴的,sw还没试,应该是按下去的那个按钮,我的接线是 vcc接主芯片的vcc,gnd接gnd,VRx接A2,最后测试成功,可以遥控
动力老男孩2015-07-24 14:55:35
赞!
BASHEN2016-12-16 01:00:57
我好像买的也是你这款。不知道为什么不能控制。是要在摇杆下拉电阻吗
达达_shshn2015-07-20 17:46:02
请问,那个电路图里面的蓝牙四针是不是指Rx Tx GND Vcc这四针啊?
动力老男孩2015-07-21 18:58:14
是滴~~
达达_shshn2015-07-21 22:56:06
回复 动力老男孩 : 其实,我还有点看不懂摇杆的电路图,我TB买到的joystick只有5针,GND、+5V、VRX、VRY、SW.。。这要怎样接啊?
动力老男孩2015-07-22 07:51:48
回复 达达_shshn :  oh?这很奇怪啊,你买的joystick是什么样的?给我发个链接看看
达达_shshn2015-07-22 08:33:08
回复 动力老男孩 : http://detail.tmall.com/item.htm?spm=a230r.1.14.11.AUxbqw&id=40084759007&cm_id=140105335569ed55e27b&abbucket=17这样的。。
动力老男孩2015-07-22 14:04:18
回复 达达_shshn :  明白了,VRx和VRy分别是横向摇杆和纵向摇杆的读数,sw是开关,估计按下以后是5V,松开时0V
动力老男孩2015-07-22 14:04:39
回复 达达_shshn : 关于sw,你需要用万用表量一下
super34862015-06-29 07:09:14
我好喜歡您的作品 但我資質淺薄 我很樂意學習,希望能學習。感謝
动力老男孩2015-07-21 18:58:32
客气了,互相学习,共同进步 :)
百ろ2015-06-27 09:47:54
楼主加了鸡腿外壳的遥控器发图出来看看效果啊,我也入手了两个鸡腿。
动力老男孩2015-06-27 22:04:43
好。这两天有点儿忙,明天发
动力老男孩2015-07-02 14:56:18
呼呼,鸡腿的效果已经发了,看首页的作品
还有arduino库
莫克丁2015-06-11 14:30:26
可以好好借鉴借鉴
动力老男孩2015-06-11 21:51:36
欢迎讨论 :)
David2015-06-15 12:37:18
回复 动力老男孩 : 您做好的板子能不能卖给我一块呀。眼馋呀!
动力老男孩2015-06-15 13:31:53
回复 David : 可以啊,你在哪里?
David2015-06-16 08:16:13
回复 动力老男孩 : 宁波。
动力老男孩2015-06-16 14:30:47
回复 David : 你是要裸板还是焊好的?
说实话这个板子做的还不是很完善,比如所有的插口都没有做防错的设置,买回去的话你可能需要自己调一调
David2015-06-17 08:30:08
回复 动力老男孩 : 这个板子可以外面加个外壳,我可以设计好3d打印出来,到时候分享给大家。
诸葛小新2015-06-09 11:06:10
哈哈,定速巡航这个“高大上”的功能我在手机上也做过,触摸手机滑动加速,觉得速度够了就松开,再次触摸定速解除,试用之前洋洋得意了好一阵。结果和你一样,徒增复杂性和控制难度。其实从设计的角度稍微想一下就知道了,这种设计破坏了一致性,手离开控制器的时候油门就应该归零了,不应该再有匀速油门的状态。
开模了就是帅气~ 眼馋啊
动力老男孩2015-06-09 16:47:21
没错,太容易误操作了 :)
我淘了一个wii小鸡腿,把它改装成了遥控器,手感非常好
诸葛小新2015-06-09 17:02:22
回复 动力老男孩 : wii手柄啊,任天堂打磨出来的经典工业设计造型,爽!!!

作者

动力老男孩

北京,海淀

195粉丝 11作品 14随笔
  关注 私信

作者的最新随笔


阅读数: 19214