2015年05月 文档列表

炫酷的磁悬浮彩灯

之前做过磁悬浮的陀螺和鸡蛋,其实原理都一样,只要是带磁铁的底座,加上想悬浮的东西就可以了。
如果想看制作磁悬浮的详细攻略,可以看之前的博客:http://www.diy-robots.com/?page_id=685
这次要悬浮的是一个LED的彩灯,之所以做这个东西,是因为kickstarter上有一款悬浮灯(名字就不说了)居然众筹到了61万美元!
啊,美国的同学们哪,你们有空真应该多上上淘宝……
磁悬浮的LED彩灯

磁悬浮的LED彩灯

Step 1: 磁悬浮的底座

首先,你得有个磁悬浮的底座。有了底座,上面的东西基本只要别太重就好了:

悬浮状态的盗梦陀螺截图

Step 2: 量尺寸,准备3D打印一个底座

自从有了3D打印机,妈妈再也不用担心我用电锯切到手了!

为了做悬浮灯,我买了一个LED的灯泡,把它拆了。阿弥陀佛,真是作孽啊。
量量尺寸,用3D做一个模型,然后把剩下的事情交给打印机……
买回来的LED灯泡,还没发挥余热就被拆解了

买回来的LED灯泡,还没发挥余热就被拆解了

量悬浮磁铁的尺寸

量悬浮磁铁的尺寸

量灯泡内部空间的尺寸

量灯泡内部空间的尺寸

Step 3: 3D模型和打印出来的结果

3D打印的灯座

3D打印的灯座

看上去效果不错 :)

其实强度也挺好

附件:

灯座的3D打印模型:megfloat.stl

Step 4: 焊接彩灯

焊接好的LED彩灯们

焊接好的LED彩灯们

为了简单起见,我直接买了那种会变色的LED灯。

通电之后,这个LED就会按一定的顺序变幻彩色,很好看。
这里焊了3个,连成金字塔形。需要注意的是,我这里使用了锂电池来供电,电压一般超过3.7V。而这种LED大多是3V的电压。
所以需要把3个灯并联之后,再串联一个小电阻,我用的是27欧的。
最下面还留了一个电源插口,用来插上电池。电池的部分忘了拍照,由于灯泡内的空间较小,所以选用了16340锂电池。

Step 5: 大功告成

悬浮灯效果1

悬浮灯效果1

悬浮灯效果2

悬浮灯效果2

看看效果吧,贴了两张不同颜色的状态。
如果看视频的话,你会发现这个灯还是一直旋转的。
这个功能其实是“不小心”设计出来的,如果一个悬浮物的磁力中心和它的重心不重合,那么磁场为了纠正重心位置,就会不断的向悬浮物施加电磁力。这个悬浮的东西就会慢慢的跟随程序调节的频率旋转起来。
如果是非常对称的悬浮物,则不会保持旋转。

电滑板攻略 – 主控板程序

这一部分内容也许会有点儿枯燥,对Arduino了解不多的同学,可能要先去预习一下。如果大家有需要的话,我也可以考虑发一系列Arduino的入门教程 :)

主控板是指的装在滑板上的那一部分电路板,首先贴一下电路原理图:
电动滑板源代码

电动滑板源代码

对着原理图,说说电滑板的几个功能:
1. JP1用来连接电调,这部分电路的供电也是从电调来来。说到这里顺便说一句,很多电调自带BEC功能,可以提供5V或6V的电压给单片机用。
电流可以支持到1A以上,带动各种传感器完全无压力。但是如果要点亮灯带或者响个大喇叭的话,就需要从电池直接引电压。
2. 标记SPK是个无源小喇叭,通过一定频率的方波来发出声音。
3. 中间那个方块就是Arduino pro mini,选用的是5V 16M的版本,它就是整个控制系统的“神经中枢”
4. Bluetooth就是蓝牙的插座,我们选用的蓝牙模块一共有6根针,我们用了最简的四根针方案,如果你需要修改蓝牙设置,得手动用夹子给Key针脚接高电平
5. LDR和4k7,是一个光敏电阻和一个4k7的电阻。一般的光敏电阻,电阻值随着光线的增大而减小,我们通过测量获取的电压,就可以评估当前的环境亮度。这样晚上天黑的时候,滑板的夜行灯就可以自动亮起来了
6. 那4个圆圈,它的目标是当主板需要采电时,把电池的正负极接到这里,然后再引出去。因为电压比较高电流比较大,所以一共4个大圆圈。
7. 圆圈边上的JP3,是用来接灯带的,因为我们用的是6S的电池,电压平时在24V左右,所以可以选用两条12V的灯带串联一下。
灯带边上是场效应管,你可以理解为一个电子开关,通过输入0或者1来关闭或打开灯带。
8. 左下角的JP2 是个独立的东西,它的作用是把原来电调的开关引到这个板子上来,避免甩着一个小尾巴(这个功能不用也可以)
代码如下,有些地方我写了注释,不好理解的地方请大家留言,我在后续的攻略里会继续介绍。
  1. #include <EEPROM.h>
  2. #include <Servo.h>
  3. #include <SoftwareSerial.h>
  4. SoftwareSerial mySerial(11, 5); //Product board
  5. int motorPin = 12;    // The pin output PWM to control motor
  6. int motorPin2 = 0;   // For the new board with 2 motors, if motorPin2 < 0, then ignore it
  7. int hornPin = 10;
  8. int hornOffTime = 1000; // Cannot use horn too long, must less than 1s
  9. int hornStartTime = 0;
  10. int power = 50;       // Control pow value, from 0 to 100;
  11. long lastRecvTime = 0; // If cannot recv control info in 0.2s, stop the moto
  12. int shutDownTimeRange = 200;
  13. int powerScale = 100;  //if set the power scale by mobile
  14. int testingValue = 0;
  15. int lightMode = 2;   // 1: on; 2:off; 3: auto
  16. int lightCtrlPin = 10;
  17. int envLightSensorPin = 1;
  18. boolean lightStatus = false;  // shutdown ligth by default
  19. Servo powerServo;
  20. Servo powerServo2;
  21. // The Led pin for debug
  22. int ledPin = 13;
  23. int light = 1;
  24. int counter = 0;
  25. // Beep pin
  26. int beepPin = 6;
  27. boolean beepStatus = false;
  28. // Connect to speaker
  29. int tonePin = 6;
  30. // battery pin
  31. int batteryPin = 0;
  32. float batteryScale = 11;
  33. float batteryAlert = 3.5;
  34. void setup()
  35. {
  36. pinMode(ledPin,OUTPUT);
  37. pinMode(beepPin,OUTPUT);
  38. pinMode(lightCtrlPin,OUTPUT);
  39. pinMode(hornPin,OUTPUT);
  40. powerScale = EEPROM.read(0);
  41. if (powerScale <= 0 || powerScale > 100) powerScale = 100;
  42. lightMode = EEPROM.read(1);
  43. if (lightMode <= 0 || lightMode > 3) lightMode = 2; // default light off
  44. Serial.begin(9600);
  45. mySerial.begin(9600);
  46. powerServo.attach(motorPin);
  47. if (motorPin2 > 0) powerServo2.attach(motorPin2);
  48. }
  49. void checkBattery()
  50. {
  51. if (counter == 0 || counter == 200) {
  52. int readValue = analogRead(batteryPin);
  53. if (readValue > 5 && batteryScale * readValue / 1024 * 5 < batteryAlert * 6) {
  54. digitalWrite(beepPin, beepStatus);
  55. beepStatus = !beepStatus;
  56. } else {
  57. digitalWrite(beepPin, 0);
  58. }
  59. }
  60. }
  61. void updateCounter() {
  62. counter++;
  63. if (counter >= 400) counter = 0;
  64. }
  65. void switchLight()
  66. {
  67. if (counter == 0) {
  68. digitalWrite(ledPin, light);
  69. light = 1 - light;
  70. //Serial.println(testingValue);
  71. }
  72. }
  73. void sendPowerInfo()
  74. {
  75. if (counter == 0) {
  76. mySerial.write((byte)(analogRead(batteryPin) / 4));
  77. }
  78. }
  79. void loop()
  80. {
  81. long t0 = micros();
  82. int readPower = -1;
  83. while(mySerial.available()) {
  84. readPower = mySerial.read();
  85. lastRecvTime = micros();
  86. digitalWrite(ledPin, light);
  87. light = 1 - light;
  88. //counter = 0;
  89. if (readPower > 100) {
  90. break;
  91. }
  92. }
  93. if (readPower > -1 && readPower <= 100) {
  94. // Normal status
  95. power = readPower;
  96. }
  97. if (readPower == 255 || (lastRecvTime > 0 && (t0-lastRecvTime)/1000 > shutDownTimeRange)) {
  98. power = 50; // 松手默认滑行
  99. }
  100. if (readPower > 100 && readPower <= 200) {
  101. powerScale = readPower - 100;
  102. EEPROM.write(0, (byte) powerScale);
  103. }
  104. if (readPower > 200 && readPower <= 203) {
  105. lightMode = readPower - 200;
  106. EEPROM.write(1, (byte) lightMode);
  107. }
  108. if (readPower == 204) {
  109. digitalWrite(hornPin, 1);  // start horn
  110. hornStartTime = t0;
  111. tone(tonePin, 4000);
  112. }
  113. //if (readPower == 205 || (hornStartTime > 0 && (t0 - hornStartTime) / 1000 > hornOffTime)) {
  114. if (readPower == 205) {
  115. digitalWrite(hornPin, 0);  // stop horn
  116. hornStartTime = 0;
  117. noTone(tonePin);
  118. }
  119. // light control
  120. if (lightMode == 1) {
  121. // light on
  122. digitalWrite(lightCtrlPin, 1);
  123. lightStatus = true;
  124. } else if (lightMode == 2){
  125. // light off
  126. digitalWrite(lightCtrlPin, 0);
  127. lightStatus = false;
  128. } else {
  129. //auto
  130. int envLight = analogRead(envLightSensorPin);
  131. testingValue = envLight;
  132. if (!lightStatus && envLight < 800) {
  133. lightStatus = true;
  134. }
  135. if (lightStatus && envLight > 900) {
  136. lightStatus = false;
  137. }
  138. digitalWrite(lightCtrlPin, lightStatus);
  139. }
  140. updateCounter();
  141. switchLight();
  142. checkBattery();
  143. double T = 2500;
  144. // if has power scale
  145. double scaledPower = power;
  146. if (power > 50) {
  147. scaledPower = 50 + (power - 50) * powerScale / 100;
  148. }
  149. double len = 900 + scaledPower * 12; //(0~100对应总周期0.9ms~2.1ms)
  150. powerServo.writeMicroseconds(len);
  151. if (motorPin2 > 0) powerServo2.writeMicroseconds(len);
  152. int leftMs = (int) (t0 + T - micros());
  153. if (leftMs > 1500 && (t0-lastRecvTime)/1000 < shutDownTimeRange) {
  154. sendPowerInfo();
  155. leftMs = (int) (t0 + T - micros());
  156. }
  157. if (leftMs < 1) leftMs = 1;
  158. delayMicroseconds(leftMs);
  159. }
不知道为什么,这里的源代码格式功能不好用了,如果需要做过高亮的代码,请点击这里:

电动滑板攻略 – 蓝牙控制原理

目前市面上的电动滑板,大多都是用的车模的2.4G遥控器,基本上都是单向控制。在我的改装里,把遥控换成了蓝牙通讯(其实蓝牙的波段也是2.4G,不过是制定了数据通讯协议),改用蓝牙之后有很多好处:

1. 可以双向通讯,滑板可以通知遥控器电量、速度或者未来还可以有载重等信息;
2. 大量的蓝牙设备可以用来当遥控器,最常见的就是手机,还可以有游戏柄、手环、指环,以后没准还可以脑波控制;
3. 开发简单,蓝牙配对之后可以模拟成串口,直接发送数据就可以了;
说起蓝牙,这个名字真是够怪的。它的起名来源是一位国王,据说爱吃蓝莓以至于牙真的是蓝色的,所以有个绰号叫Bluetooth。可能是因为这个家伙比较擅长沟通,所以发明蓝牙的科学家就用它来命名最新的通讯协议了。我们常见的无线通讯协议还有WIFI和ZigBee,分别应用于不同的场景。
蓝牙模块
蓝牙设备都是成对儿使用的,以电动滑板为例,其中一个是主设备,另外一个是从设备。就像相亲一样,总得其中一个主动点儿才能成功配对。
我们选用的蓝牙模块是 HC-05 主从一体的蓝牙模块,也就是同样的一个蓝牙模块,你可以把它设置成主设备,也可以把它设置为从设备。你在淘宝购买的时候,可能会发现长的不一样的蓝牙模块,有的边缘有锯齿,我们一般叫“邮票板”;还有的是带底板的,用插针连出来。
邮票板的每个缺口都是一个引脚,有很多功能其实是我们用不上的。插针板其实就是给邮票板加上了一个底板,一般还会用热缩管套起来。它把我们最常用的一些引脚引出来,方便开发和调试。相对的来说体积就会大一点儿。不管是什么板,大多数蓝牙模块都包含下面的这些引脚:
蓝牙模块

蓝牙模块

其中GND表示电源地;VCC是电源正极,需要看好是3.3V还是5V;TX(Transmit)用于发送数据;RX(Receive)用于接受数据。这4个引脚是所有蓝牙模块都会有的,其他的一些常见的引脚包括:Key(或EN),设置为高电平才能进入AT设置模式;State(或LED),通常用于连接一个闪烁的灯,表示蓝牙的状态。
需要注意的是,不管是蓝牙还是别的什么串口,RX和TX都是对换着接的。例如蓝牙模块的RX需要对应Arduino的TX,蓝牙模块的TX对应Arduino的RX。这也很好理解,一方的发送端肯定是要连到对方的接收端嘛。
AT指令
前面提到了用Key或EN可以让蓝牙进入AT模式,所谓的AT模式是指蓝牙的设置模式,在这个模式下,可以设置蓝牙的名字、密码、配对信息等等。
如果要用电脑调试蓝牙,你需要一个USB转串口的模块(请在某宝搜 USB+串口+UART+模块 ),这种模块一般带有USB插头直接可以接电脑,另一头则是一些插针用于连接设备。设置蓝牙的话,请按下图连线:
usb转串口

usb转串口

连接之后在电脑上就会发现新硬件,比尔盖子会帮你找到驱动,完事儿之后你会在设备里看到一个新硬件,并映射出一个COM端口。
这时候你可以用Arduino的串口监视器来测试AT指令,在输入框输入AT后回车,你会发现蓝牙给你返回了一个OK,这就表示AT指令是可用的。不同厂家的AT指令并不完全相同,所以最好要找卖家要说明文档,不过一些常见的AT指令应该都支持。
其中AT指令包括查询和设置,以蓝牙的名称为例:
AT+NAME=ChuangKoo  这个命令把蓝牙模块的名字设置成ChuangKoo,蓝牙返回OK
AT+NAME? 这个命令蓝牙返回ChuangKoo
还有一些常见的命令包括:
AT+ROLE=M  设置蓝牙为主(Master)模式,等号后面是S的话则表示从(Slave)模式
AT+DEFAULT  还原为默认设置
AT+RESTART  软件复位(重启)
AT+ADDR?    查询本模块的Mac地址
AT+BIND=0002,0a,01eea7   自动绑定对方的Mac地址,只对主模式有效
其中我们主要就是靠AT+BIND来实现遥控器和电滑板的配对的。
Arduino程序
我的遥控器和电滑板上,都各自有一块Arduino Pro Mini和一个蓝牙模块。蓝牙模块设置了自动配对之后,它们只要加了电就会自动连接,这时候它们就进入“透传”状态,也就是说两个Arduino之间就像直接连上了一样。
在硬件上,Arduino有两种方式可以连接蓝牙,一种是直连,就是把Arduino板子上的RX、TX分别和蓝牙模块的TX、RX相连,在代码里用Serial类来操作;
这种方式据说会比较稳定,但是令人烦躁的是,当我们需要烧录程序的时候,需要把Arduino的RX、TX和烧写器相连;一旦接上蓝牙之后,烧程序就没法用了。
另外一种是软件串口的方式,随便选Arduino上的两个数字输出口,例如11和12,用它们来连接蓝牙的RX和TX,在代码里用SoftwareSerial类来操作。
这样烧代码的时候,就不需要把蓝牙拔下来了,而且一个Arduino板子可以控制好几个软件串口。
接线示意图如下:
电动滑板蓝牙连接示意图

电动滑板蓝牙连接示意图

遥控器端的代码是这样的:
  1. #include <SoftwareSerial.h>
  2. SoftwareSerial mySerial(12, 11);
  3. void setup()
  4. {
  5. mySerial.begin(9600);  //设置波特率
  6. }
  7. void loop()
  8. {
  9. int readValue = 50;  //这里会换成从摇杆得到的读数
  10. mySerial.write((byte)readValue);
  11. delay(100);
  12. }

mySerial就是软件串口,你可以看到就用简单的 mySerial.write(xxx) 就可以从遥控器向滑板发送数据了。

接收端的代码是这样的:
  1. #include <SoftwareSerial.h>
  2. SoftwareSerial mySerial(12, 11);
  3. int powerValue = 50;  //摇杆默认位于0~100的中点
  4. void setup()
  5. {
  6. mySerial.begin(9600);  //设置波特率
  7. }
  8. void loop()
  9. {
  10. while(mySerial.available()) {
  11. powerValue = mySerial.read();
  12. }
  13. // 此处用powerValue来控制电机
  14. delay(2500);
  15. }

其中两个主要的函数 mySerial.available() 用于判断当前蓝牙模块是否有数据进来;mySerial.read() 用于读一个字节的数据。

所以蓝牙配对之后,两个设备之间有什么想说的悄悄话,只需要其中一个用Serial.write 写入,另一个就可以用Serial.read 来读取了,真是超级方便!
———————————–
回到目录点这里

电动滑板攻略 – 无刷电机控制原理

机械部分就绪之后,就是各种软件和电子的工作了,首先我们看看怎么控制一个无刷电机。我们用的电机是外转子无刷电机,型号是5065。

外转子无刷电机

外转子无刷电机

这种电机和常见的直流电机不同,它的线圈是不动的,周围是一圈磁瓦。工作的时候,三条电线里面的电流方向会不断的切换,这个切换是通过电子方式实现的,所以不需要传统电机的电刷。
跟它必须同时提到的就是电调,全称是电子调速器。它的作用就是在这3条电线里,不断的切换电流状态,从而控制电机转速。
电调

电调

至于调试方式,传动的直流电机,可以通过电压调节,转速随着电压增大而增大。而无刷电机是通过可编程控制器来调速,一般是用一种叫做PWM的方式。

PWM是“怕玩命”的缩写,英文写法是“Pulse-width modulation”,也有些外行人士把它翻译成“脉冲宽度调制”。对于没有听说过PWM的同学,请先参考一下我的另一篇博客Arduino的模拟输入和输出

简单的说,对于传统的控制信号,假设最高速的时候控制电压是1,那么可以输出0.5来表示一般的速度。但是对于单片机来说,输出0和1是方便的,输出0.5会比较麻烦。这种情况了,可以快速的在0和1之间切换,达到的效果就和0.5很相似了。

pwm1.gif (601×197)

电调的控制,就是使用了PWM的方式。不过它不是通过占空的比例来控制转速,而是用1的脉冲宽度来判断:
输出高电平2.1ms左右,表示最大值;

输出高电平0.9ms左右,表示最小值。

下面这段代码,用蓝牙发送0~100的数值给单片机,就可以模拟航模摇杆从油门最小推到最大的情况:

#include <Servo.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(11, 5);

int motorPin = 12;    // 用于控制电机的管脚
Servo powerServo;

void setup()
{
  mySerial.begin(9600);
  powerServo.attach(motorPin);
}

void loop()
{
  double T = 2500; // 脉冲周期2.5ms,相当于400Hz
  long t0 = micros();  // 记录当前时间

  int readPower = 50; //默认是中点位置50
  while(mySerial.available()) {
    // 从蓝牙输入一个0~100的值
    readPower = mySerial.read();
  }

  double len = 900 + readPower * 12; //(0~100对应总周期0.9ms~2.1ms)
  powerServo.writeMicroseconds(len);

  int leftMs = (int) (t0 + T - micros());  //休眠到下一个周期继续循环
  delayMicroseconds(leftMs);
}

需要注意的是,航模和车模的电调操控方式是不同的。航模的油门是从最低点开始,推到头是最大值;而车模的电调平时处于中点位置,向上推到头表示加速,向下拉到头表示刹车。滑板就是使用的车模电调模式,也就是说高电平从 1.5ms~2.1ms是加速区域、从1.5ms~0.9ms是刹车区域。

好盈的电调一般都支持很多模式,另外还有很多可选的参数。如果想修改它的模式,可以按住小按钮后接通电源,然后按照说明书的提示进行设置。

不差钱的同学可以买一个编程器,插上电调之后可以直接设置。

———————————–
回到目录点这里

电动滑板攻略 – 传动和连接

对于技术宅来说,最麻烦的事情莫过于加工零件了,因为大部分人家里不会有车床铣床这样的加工工具。

而电动滑板的改装,机械传动几乎必不可少,目前大部分的方案是用一对儿同步轮来减速,另外需要一个支架把它们固定住。如果你跟我一样喜欢干体力活,可以尝试自己动手加工一点儿东西,如果没有条件的话,也可以去某宝买定制的器件。
首先说同步轮,同步轮需要固定在原来的轮子上。我选用的是8352的聚氨酯耐磨轮,其中8352的意思是直径83mm,厚度52mm,一般来说菜鸟喜欢大轮 :)
8352滑板大轮

8352滑板大轮

一般来说,卖轮子的地方都会卖轴承,因为不同价格的轴承质量差别很大,所以卖家一般都会把两个分开卖。默认的滑板大轮轴承尺寸是 8mm*22mm*7mm(内径*外径*厚度),这样的轴承是刚好装进轴承座的。
需要注意的是,我们需要固定同步轮,所以可以额外买一个厚一点儿的轴承,例如8*22*9或8*22*10的。用于固定同步轮。
定制的大同步轮

定制的大同步轮

我选用的同步轮大轮是66齿的,这个齿数的轮子,正好比滑板轮小一点儿,而且大吉大利 :)
标准的同步轮,是没有前面这个凸起的,也没有螺丝孔,所以这个就需要找卖家定制,可以用下面的图纸,其中只有下面的一侧有齿轮挡边,未来安装的时候才比较方便:
同步轮图纸_新

同步轮图纸_新

这个凸台正好可以卡到之前伸出来的那个轴承上
固定好的同步轮

固定好的同步轮

另一端需要用螺丝固定,同样需要加工一个圆片,因为这个件受力不大,主要用于固定位置,所以可以直接用3D打印来做一个。
3D打印的垫片

3D打印的垫片

组装之后,大同步轮就被牢牢的固定在滑板轮上了。
固定齿轮

固定齿轮

接下来需要把大轮、小轮还有电机都固定到滑板的支架上。这个我前前后后做过好多个版本,最初是用钢导轨一点点打磨成支架的样子,后来也画过图纸请卖家加工:
电机支架

电机支架

总的来说,做支架是非常考验耐心的活,你可能磨了两个小时,手一抖磨多了,这个件就成了废品。肯定有同学会问,这么一个片,该怎么固定在支架上呢?
一种方式是把支架做厚一点儿,然后从侧边拧上螺丝;另外一种方式是用环氧树脂的胶粘住它,或者直接用电焊焊死。
卖家还会对应的给你配一个后桥支架,下单的时候要告诉卖家车多少轴距,如果用8352大轮的话,建议车43mm。
改造的后桥

改造的后桥

小轮我用的是18齿的,如果你想跑的快点儿,就用更多的齿数,想跑的慢点儿,就用更少的齿数(小于16齿就没法做了,因为电机的轴是8mm,不能再小了)
组装以后的效果是这样滴:
安装好的结果

安装好的结果

———————————–
回到目录点这里

电动滑板器件清单

终于到了大家最关注的器件清单了,电滑板的方案非常非常多,作为DIYer,很多时候需要选择适合自己的器件。比如我改装活力板的时候,就使用了电动自行车的电调,还有越速400W的有刷电机,因为后轮很大;后来改装滑板的时候,因为轮径很小,就改用了无刷电机的方案。这里的器件清单是我测试过,比较好用的方案,其中有些器件并不一定是最优的,仅供大家参考。大部分器件在万能的淘宝都可以搜到,因为价格波动比较大,我就不推荐链接了。

1. 滑板

之前讲过了:长板、双翘板、小鱼板,根据喜好自己选择。

2. 海鸥架

海鸥架也有不同尺寸的,改装电滑板最好用长板的海鸥架。下面这个图里的海鸥架,其中右边的那个带法兰盘(就是那个凸台),是专门用来安装电滑板的。可惜现在这种支架已经买不到了,只能用左边那种标准支架来改装了。

海鸥架

海鸥架

3. 电机 (推荐型号:N5065)

我选用的电机是N5065无刷电机,其中5065表示电机的直径是50mm,长度是65mm。N表示电机型号,具体代表什么我也不清楚,下面是N5065和C5065的对比:

无刷电机

无刷电机

可以看到,N5065的屁股是平的,C5065的屁股是尖的,相对来说 N5065的功率会大一些,当然价格也要贵一些。
需要注意的是,这些电机几乎都是为航模设计的,所以特性跟滑板的需求并不一致。航模应用里是带动螺旋桨,转速越高的时候负载越大。而电滑板在启动的阶段阻力非常大,一旦跑起来的之后阻力会突然变小,之后才又随着速度增加而增大。所以电动滑板在启动之后经常会有一个突然加速(美国那边一万多块钱的boosted board也这样),请大家务必要小心。要解决顿挫感,可能唯一的办法是换大轮子和大直径的电机。

有些同学可能会觉得N5065比较贵,实际上我试过很多电机,以我的体重70公斤为参考,C5065、C5055、N5055这些电机都可以带动。启动的时候会有一些区别,功率小的电机,启动的时候会比较费劲。如果你体重比较轻,可以试试小号的电机。

电机还有一个重要参数叫KV值,所谓的KV值就是电压增加1伏的时候,转速增加的数量。简单的说:KV值越大转速越快。那么问题来了,KV值是越大越好呢,还是越小越好?对于咱们的电滑板来说,基本上是越小越好,因为电机的转速对滑板来说太快了,遥控器基本上没有机会推到头。我一般选用的是KV270左右的电机,假如最高时速是25公里,那么选用KV400的电机,最高时速就可能达到37公里,这个速度摔倒的话基本就得去医院住一阵子了……

4. 电调(推荐型号:150A)

电调

电调

电调的全称是“电子调速器”,它的作用是调节电机转速。遥控器或手机发出的控制信号,是通过蓝牙传给单片机。单片机的功率非常小,带一个玩具小马达还凑合,带动滑板这么大的家伙,就需要电调了。电调最主要的参数就是电流,比如80A,150A。这个值显然越大越好,当然也是越大越贵。

我刚做滑板的时候还是冬天,那会儿先买了个80A的电调回来测试,发现还挺好用的。接着春天到了,万物复苏,阳光明媚,电调爆了……
在公园里跑着跑着,滑板下面直接开始冒绿色的明火,呼呼的开始烧。换一块烧一块,几天功夫烧掉了3块。这才知道是因为气温升高,散热不如冬天好了。
随后我换了一个150A的电调,具体型号是 QuicRun WP-8BL150,之后就再也没有烧过了。

有一些朋友说120A的应该也可以用,不过我没有试过。不是因为有钱任性,而是之前烧怕了,如果有用过120A电调的朋友,欢迎分享一下自己的型号和经验。

5. 电池 (推荐6S 5200mAh锂电池)

锂电池

锂电池

锂电池的种类也有好多种,我选用的这种是航模用的锂电池,6S表示是6片锂电池串联而成,江湖上的黑话叫“六串”。每片电池充满电的时候是4.2V左右,整块电池是25.2V。随着电池的使用,电压会逐步下降。电压过低会严重影响锂电池的寿命,所以建议在3.5V时就要开始充电,如果低于3V的话基本就算是废了。后面的程序部分,我会介绍如何在板上采集电池电压,然后在低电量的时候让喇叭发出滴滴的警报。

6. 充电器  (推荐 B6)

B6充电器

B6充电器

这种锂电池需要使用专门的平衡充,最常见的充电器就是这种B6充电器。充电略有点儿麻烦,需要稍微设置一下。

7. 传动结构(需要定制)

电滑板传动结构

电滑板传动结构

目前常见的电滑板方案,都是一对减速齿轮,用皮带连接,通过一个支架安装在轮子上。
我选用的齿轮比是大轮66齿,小轮16齿,用15mm*232齿的皮带连接,传动比大约是4:1左右。

支架的安装是个麻烦的事情,对于有法兰盘的海鸥架,只需要用一个片来连接就行,在该打孔的地方打上孔。如果不定制的话,也可以自己动手磨。我收集的百宝箱里有一段钢制的导轨,最初两个版本的支架,就是用砂轮磨出来的。其中那些奇怪的曲线,是因为钢轨打孔非常困难,只好用砂轮从外面掏进去。

手工打造的电滑板固定架

手工打造的电滑板固定架

8. 轮子 (推荐83mm*52mm长板轮)


滑板的轮子尺寸种类都很多,对于电滑板来说,平稳非常重要,所以轮子需要大一点儿。需要注意的是,很多店家卖轮子的时候,是不包含轴承的,因为轴承这东西价格差别很大,专业的玩家可能使用的轴承比轮子还贵。这个就看你的不差钱程度啦。

另外还需要注意的是,7里面的传动结构,跟轮子和海鸥架都需要配合,所以最好等海鸥架和轮子都到手之后,量好尺寸,再开始定制同步轮和支架。

9. 控制板 (自己做)

控制板是在滑板上的,用来接收信号和控制电机的部分。它的核心是一块Arduino单片机,通信部分是一个蓝牙模块。

电滑板控制电路

电滑板控制电路

这是我的长板上的控制部分,这个板子可以接两个电机,上面还带了电池电量检测、环境亮度检测、灯带、警报喇叭等功能。这一部分需要的零七八碎的部件比较多,统一和遥控器的清单列在最后面。在后面的攻略里,会发出原理图,有兴趣的同学可以去照单采购。强大的HelloPlanet同学做出了PCB板(后面提到的遥控器板子也做了),患有电路恐惧症的同学,也许可以直接购买(暂时没有淘宝链接,先看看有没有同学需要吧)

10. 遥控器

如果你手头有一个android手机的话,其实完全可以不需要遥控器,很多人会担心手机操控不方便,玩滑板的时候怎么能看着手机呢?
其实不用担心,我的APP做成了全屏界面,你完全不需要看着手机,直接用手在屏幕上下移动就可以了。上半屏幕是加速,越往上速度越快;下半屏幕是刹车,越往下刹车越重。手指头越过中间的区域时,我会让手机震动一下,就知道是过了中点了。

电滑板遥控程序(Android)

电滑板遥控程序(Android)

如果你是土豪型的iPhone用户,或者觉得手机的手感不太好,或者怕紧急情况下把手机摔坏,也可以做一个手持的遥控器。跟它对比的是常见的枪式车模遥控器,这个枪型的东西其实用户体验很糟糕。扣板机是加速,向前推扳机是刹车。问题是遇到紧急情况时,很多人下意识的反应是握拳,反而会出现危险。

手持滑板遥控器

手持滑板遥控器

手持的遥控器,主要部分也是由Arduino和蓝牙模块组成(遥控器的蓝牙需要使用主设备,滑板上的使用从设备)。具体的原理图和器件清单,我也会在后续的攻略中陆续发出。

~~~~~~~~~~~~~~~~~~这是一条分割线~~~~~~~~~~~~~~~~~~~~~~

控制板和遥控器中使用的器件清单,有些略有调整,不一定都更新在里面了。

我写攻略比较啰嗦,所以更新的比较慢,大家不要着急。这里是目录页,我每写一篇就会更新到这个里面。