电源设计技术信息网站

FAQ   订阅电子杂志   English   繁體中文   日本語   한국어

下载中心

TECH INFOArduino入门指南

基于Arduino的DIY电动滑板

这篇文章来源于DevicePlus.com英语网站的翻译稿。

DIY electric skateboard

 

本教程将全面地介绍如何构建属于您自己的DIY电动滑板。在这里我将向您展示的滑板是一个炫酷而有趣的交通工具,并且易于制作和使用!制作滑板所使用的是一些现成的电子和电气组件,基于Arduino微控制器进行设计,这意味着其功能还能扩展延伸到其他项目中。如果您在开始之前要了解有关Arduino微控制器的一些基础知识,请查看此教程!

在本指南中,我将向您展示如何以较低的成本对自己的DIY电动滑板进行构建和编程,并讨论我计划在未来的滑板迭代中对功能进行改进和扩展的一些方法。

硬件

  • • 1x Arduino Uno R3微控制器(任何Arduino微控制器都可以!)
  • • 1x 至少36英寸长的木制长板(板面越长意味着安装电子设备的空间越大),和至少10英寸宽的滑板桥(安装电机组件时,越长的桥就能提供越大的工作表面)。在本项目中,我使用的是36英寸的长板和10英寸宽的滑板桥。

 

使用没有翘起的平板(翘起的平板下方用于安装电子设备的空间较小)

四个75mm的长板轮子(轮子直径不必精确为75mm,但范围必须在70-75mm之间)

  • • 跳线和电阻器(用于将速度控制器和双手柄连接到Arduino)
  • • 12号绞线
  • • 1x FVT 120-Amp 电子速度控制器
  • • 1x Nyko Kama 无线 Wii 双手柄 (应配备配对的无线接收器)
  • • 1x Wii双手柄延长线缆
  • • 1x Turnigy Aerodrive SK3 或类似的无刷电机
  • • 2x 3S LiPo 电池, 如Zippy Flightmax 5000mAh

 

LiPo电池规格中的3s表示该电池中包含三个串联的LiPo电池。

  • • .1 英寸公排针
  • • 2x 4.7kΩ电阻
  • • 与电池上的连接器适配的连接器(我使用的是子弹头连接器)
  • • 与电机上的连接器适配的连接器(我使用的是子弹头连接器)
  • • 1x 16齿,5mm HTD节距,9mm宽同步带轮

 

https://shop.sdp-si.com/catalog/product/?id=A_6A55M016DF0906

  • • 1x 55齿,5mm HTD节距,9mm宽同步带

 

https://shop.sdp-si.com/catalog/product/?id=A%206R25M055090

软件

  • Arduino IDE
  • “Arduino双手柄” Arduino库
  • Autodesk Inventor 或类似的计算机辅助设计(CAD) 软件
  • Slic3r, ReplicatorG, 或类似的3D打印/切片软件

 

工具

  • • 拧紧硬件的工具(螺丝起子、螺母起子、扳手等)
  • • 3D打印机(用于制造电子设备的外壳)

 

3D打印机在该项目中不是必需的。电子部件的外壳也可以由木材或其它类似的更容易被加工的材料制成,或者使用小塑料容器来封装。

  • CNC铣床,用于加工安装电机的铝制部件
  • 钻床/手钻
  • 烙铁
  • 钳子和剪钳
  • 剥线钳

 

文件和相关链接

 

术语:

滑板部件:

  • • 板面:通常用于骑手站立的木制长形板面
  • • 滑板桥:安装在板面上的T形组件,用作安装滑板轮的轴。一个滑板上有两个滑板桥。

 

电动滑板术语:

  • • 减速比:电机转速与驱动组件输出级速度之比。减速比通常以“A:B”的形式表示,并且分数值通常大于1,表示电机通过比输出级更高的速度旋转。

 

步骤1 – 使用计算机辅助设计(CAD)软件设计滑板的驱动组件

DIY电动滑板由无刷直流电机驱动,该电机通过同步带连接到四个滑板轮子中的一个。同步带在两个同步带轮之间运行,减速比为2.5:1。从SDP-SI购买的16齿铝制带轮是这对带轮中较小的一个,可安装到电机的轴上,而40齿的带轮则是带轮减速的输出级,根据用户的滑板轮凹槽进行自定义设计。我在CAD软件中所设计的自定义铝零件可将电机固定在适当位置,并使同步带保持张紧状态。您可以自行设计将电机连接到滑板轮上的同步带组件。点击此处,您可以在SourceForge库中找到我的驱动组件的CAD模型。

DIY electric skateboard

图1:滑板驱动组件的CAD模型。右边的无刷电机(蓝色所示)通过同步带连接到左边的一个滑板轮子(绿色所示)上

为了创建用于将电机安装到滑板桥上的自定义零件,我首先下载并修改了一个线上的长板模型,例如GrabCAD的一个模型,该模型与我所使用的长板非常相似,精度很高。为了对模型进行修改,我测量了长板的一些重要尺寸(板面的长度和宽度,滑板桥的高度和宽度,以及轮子的尺寸),并将其与计算机模型进行比较,然后在需要的地方进行更改。

请注意,不必以100%的精度为滑板建模。相比于滑板的还原度,我更关注于上述的那些尺寸是否可以准确地表示出所添加零件与原始滑板零件之间的间隙。经过修改之后的模型效果很好!

DIY electric skateboard

图2:完整的滑板CAD模型。可以看到驱动组件安装在右下角的轴上

我在距输出级不同距离的零件上添加了用于安装电机的孔,以调整同步带的张紧程度。因为从同步带计算器(类似于这种)计算得到的两中心距离不能确保同步带处于理想的张紧状态,所以在零件上具有这种可调节性是一种很好的安全措施,也是保证在最终产品上的同步带有理想张力的好方法。

同时,我必须对DIY电动滑板最初使用的滑板桥中的一个进行修改,以便将电机支撑模块安装到该滑板桥上。原始零件具有逐渐变细的形状,并且在其表面有嵌入物,这会使安装过程变得困难。

DIY electric skateboard

图3:现有的滑板桥有两个特征:有一个凹槽且具有一个长锥度,我会将其移除,以使电机支撑模块能够与滑板桥相连接

我在CAD软件中直接从表面切掉了材料,在滑板桥这部分创建了一个圆柱体,即一种更易于模块安装的形状。经过机加工的部分和所连接的支撑模块如图4所示:

DIY electric skateboard

图4:图中所示的电机支撑模块已经夹紧在机加工后的滑板桥上。通过将桥轴直径调低到一个固定大小,其表面的锥度和凹槽都被移除

该圆柱体是原始滑板桥经过车床加工得到的。

为了确保40齿输出级带轮牢固地安装到驱动轮上,我对一个现有的CAD同步带轮进行了修改,添加了一些功能,例如添加了用于将带轮固定到轮子的螺钉孔,以及在与轮子的凹槽适配的带轮的一个表面添加了一个轮毂。

DIY electric skateboard

图5:自定义40齿带轮的CAD模型

带轮顶部的圆锥形形状使其可以更加紧密地插入滑板轮子的凹槽中。将螺钉拧入带轮表面的六个通孔中,以将带轮固定在轮子上。

DIY electric skateboard

图6:用螺钉将打印得到的带轮安装到其中一个滑板轮子上。自定义打印平板(如图顶部所示)用作锁紧螺母的大垫圈

我打印了一个很小的“平板”片,放置在轮子与带轮相对的表面上(图片中锁紧螺母下方的红色部分)。该平板有助于消除将两部分固定在一起并拧紧锁紧螺母时所产生的应力。与拧紧锁紧螺母时用软橡胶作为与轮子之间的垫圈相比,该平板可以提供更加平坦和坚固的支撑。

可以在一个标准台式3D打印机上打印此自定义带轮。为了将带轮固定在滑板轮子上,我需要对滑板轮子进行修改,以使其在安装位置具有与带轮相同的通孔。我使用了一个迷你磨机来完成这项工作!同时,我还为轮子的外侧打印了一块小平板(包含在该项目的模型中),作为将带轮和轮子连接在一起的螺钉上所使用拧紧螺母的垫圈。

DIY electric skateboard

图7:机加工后连接在一起的驱动组件

我设计了自己的电机支撑模块,使其顶部具有垂直的螺钉,如图7所示。该螺钉拧紧后可以将支撑模块夹紧到滑板桥上。

最后,我设计的安装到滑板上的最后一个组件是用于控制电子设备和电池的外壳。您可以点击此处在SourceForge库中找到我所设计外壳的CAD模型。我设计的外壳上打印有足够多的孔。Arduino用小螺钉固定在外壳上,其余的电子器件用扎线带固定。电池的外壳要经过精心设计,以使其可以紧贴并牢固地固定电池,同时在必要时便于取出电池。

您可以自行设计自己的外壳,以使其更适合于您的开发板。除了像我这样将电子设备安装在滑板面下方,您也可以选择经过仔细的设计和布线后将电子设备放在板面前部或后部的上方。

DIY electric skateboard

图8:滑板硬件的分解图

红色的外壳(如图8左上方所示)中装有控制电子设备:Arduino微控制器、电子速度控制器(ESC)和无线Wii双手柄接收器。白色的外壳(如图8右上方所示)装有两个“3S”锂聚合物(LiPo)电池。

步骤 2 – 制造部件

完成驱动组件和外壳的设计后,下一步就是把这些部件制造出来。我选择用铝来制造支撑模块,以保证滑板驱动所产生压力下的强度和刚度。考虑到不同的使用情况,例如道路上小物块的撞击,我通过CNC铣床将一个现有的铝棒制成零件。

如果您身边没有可用的CNC铣床,请尝试通过当地的制造厂或者公用的车间获取该设备!诸如TechShop之类的组织允许其成员在接受了有关安全操作机器的基础培训之后使用他们的加工设备。CNC铣床是制造此类铝制零件的最佳选择,因为这种零件具有复杂的三维特征,用等离子体加工或者水刀切割无法完成。

最后,想要制造您所设计或下载的自定义外壳和带轮,您需要使用3D打印机。任何台式3D打印机都能够满足该项目的要求—我使用Flashforge Creator Pro 和ABS filament打印了我所设计的所有塑料零部件。

以下是ReplicatorG环境中的打印设置示例:

DIY electric skateboard

图9:在ReplicatorG环境中设置电池盒子打印件。必须将盒子小心地放置在打印床上,以使其处于3D打印机的最大打印范围内(图中白线所示)

 

DIY electric skateboard

图10:打印40齿带轮比较简单,因为它尺寸较小。我在带轮上设置了较高的填充密度,以便它能够承受驱动滑板时所产生的压力

我最近改用了Slic3r(作为我的打印设置/切片软件),因为它能够提供更多的打印功能,并且通过一些特定的打印设置增加用户对滑板的控制模式。

步骤 3 – 连接电气和电子系统

DIY电动滑板上的电源和控制硬件分为电气系统控制电子设备电气系统由向控制电子设备和电机提供电流的电池,以及将电池和电机连接到控制电子设备的电线组成。控制电子设备包括电子速度控制器(ESC)、Arduino微控制器(滑板的“大脑”)和无线双手柄遥控接收器。

滑板的电气系统接线非常简单。但是,在开始之前,最好在长板上布置好不同的物理部件,这样就能很清楚地看到在哪里进行紧固件连接和接线,同时还能帮助您确定用于电池连接到电子设备的电线的长度。

按照下图将组件放置在滑板上,并在它们之间进行电气连接。

DIY electric skateboard

图11:滑板的电气布局。串联的两节LiPo电池连接到ESC,ESC可以与无刷电机和Arduino连接供电

首先,使用12 AWG导线和一些与电池上的连接器适配的连接器,从电池的端子进行连接。我们将两个电池串联起来,为滑板提供22伏的电源。

DIY electric skateboard

图12:由于我购买的电池带有子弹头连接器,所以我创建了一个互补型连接器,将它们串联起来

一个子弹头连接器外壳的“薄”侧连接到另一个子弹头连接器外壳的“厚”侧。通过将一个电池的正极引线与另一个电池的负极引线连接,我们可以通过两块3S电池创建出一个“6S”或6节串联的电池。

将电池的电源线和地线连接到ESC的电源线和地线。ESC将依次为电机和Arduino供电。如果电机的电线长度不足以插进ESC的三相电线,请使用相同的12号线来构造跳线,以连接ESC和电机。

将控制电子设备连接在一起会更复杂一些。Arduino直接从ESC的内置电池消除器电路(BEC)获取电源,BEC是ESC的内置电路,可将输入电池的电压转换为运行连接到ESC的控制器和接收器的较低电压。

按照下图连接所有电子设备!

DIY electric skateboard

图13:Arduino的完整接线示意图。请注意连接到双手柄 I2C引脚的两个4.7kΩ上拉电阻

从ESC的外壳中伸出的伺服电缆为三根不同颜色的电线:红色为来自BEC的电源线,约为5伏;白色为来自速度控制器的信号线,Arduino将通过该信号线将脉冲宽度调制(PWM)信号发送到速度控制器以调节电机转速;黑色为BEC的接地线。

  • • 首先,将红色电源线连接到Arduino的 Vin引脚。您可以通过将一根跳线插入Arduino的母头中或通过将跳线直接焊接到Vin引脚孔进行连接。可能您已经想到了,对地线要进行类似的连接操作。
  • • 将BEC的接地线连接到Arduino上的任何接地引脚。这两个连接完成后会形成一个闭合回路,为Arduino供电。
  • • Arduino和ESC之间最后需要连接的是信号线。信号线是Arduino 和ESC之间的PWM控制通道。Arduino调制由ESC解调的脉冲信号,以实现对提供给电机的电源的快速转换。只能将Arduino上标有“~”的特定数字输出用于PWM控制。我选择使用数字引脚9,将ESC伺服电缆的白色信号线连接到该引脚。

 

现在,您已经完成了ESC 和Arduino之间的所有连接,接下来我们可以把注意力放在Arduino和Wii双手柄(骑手用来控制滑板的手持式遥控器)的接口连接上。双手柄旨在与Wii遥控器连接并与之通信,所以我们必须对其进行破解以作为滑板的控制器。如果您仔细看一下无线双手柄随附的接收器,您会发现其公连接器内部有六个引脚。下图是连接器的引脚排布:

DIY electric skateboard

我们将使用延长线缆来对每个引脚进行连接:

  • • 首先,对延长线缆进行剪切,剩下的线缆长度足够与母端相连。将线缆剪切一半左右即可。
  • • 剥去大约2英寸长的外部白色绝缘层,您会发现内部有五条不同颜色的被一些防护层包裹的电线。小心地对防护层进行剪切,直到只剩下五根电线:
DIY electric skateboard

图14:剥离后的延长线缆,其中五根内部电线上焊接了跳线。在延长线缆中较小的电线根据其用途进行了颜色编码,但是所有延长线缆的颜色标识方式都不相同!

  • • 由于所有的双手柄延长线缆的内部接线都没有使用相同的颜色,因此您必须使用万用表确定线缆中的哪根线与母连接器上的哪个引脚相对应。非常重要的一点是,母连接器的引脚排列是公连接器的引脚排列的镜像。这意味着顶行的外侧引脚排列将被交换,底行的外侧引脚也将被交换,而这两行中间的两个引脚保持不变。

 

确定了引脚对应的电线后,您需要将电源线、接地线、数据线和时钟线分开并分别连接到Arduino上。第五个引脚将不会在本项目中使用。

  • • 电源线和接地线可以分别连接到Arduino的5V和接地引脚。

 

由于Arduino通过I2C与双手柄接收器进行通信,我们需要通过将延长线缆连接到Arduino的I2C引脚、模拟引脚0和模拟引脚1来建立数据和时钟的连接。想要了解更多有关I2C通信的知识,请查看本教程

  • • 将数据(SDA)线连接至Arduino的模拟引脚4,将时钟(SCL)线连接至Arduino的模拟引脚5。
  • • 电子设备组装的最后一步是在数据和时钟线上添加一些4.7kΩ的上拉电阻。这些上拉电阻能够使数据线和时钟线保持在有效逻辑电平上,从而防止“浮动引脚”干扰Arduino与接收器之间的通信。

 

我们已经完成了所有DIY电动滑板电子设备的组装工作!为了使电子设备更加紧凑、整洁,我使用了一个小块穿孔板来固定外围电子设备(ESC和双手柄接收器)与Arduino之间的所有连接:

DIY electric skateboard

图15:一个用来使Arduino的引脚连接更紧凑的小穿孔板。跳线直接焊接到Arduino的引脚上,而不是将跳线连接到其母头上

 

DIY electric skateboard

图16:滑板的电子设备盒子中装有ESC、Arduino和双手柄的无线接收器

现在,我们要进行在Arduino上运行的软件设计了,该软件将双手柄的输入转换为电机转速,从而对滑板进行驱动。

步骤 4 – 编写代码并上传至Arduino

对滑板进行组装和测试前的最后一步是编写控制软件并上传至Arduino。在将Arduino连接到您的笔记本电脑之前,请确保没有通过BEC由滑板电池供电。在由BEC供电的情况下将Arduino连接到计算机的USB端口可能会损坏计算机的USB端口或者Arduino,也有可能两个同时受到损坏!

您可以点击此处获取我在github上编写的Arduino控制软件!现在,该软件还只是一个非常简单的代码草图,能够实现将双手柄的输入转换为电机转速,并传送给ESC。我希望在不久之后能够写出更高级的控制软件,以提升滑板的性能。您可以根据自己的喜好调整和改进代码,并与我分享您的见解!

滑板控制Arduino草图:

/*  
      * Rahul Iyer
      */

    
      #include <Servo.h>
      #include <Wire.h>
      #include <ArduinoNunchuk.h>


      #define BAUDRATE 19200


      #define CHUCK_ZERO 133
      #define CHUCK_MAX 255
      #define ESC_ZERO 90
      #define SPEED_MAX 130

      ArduinoNunchuk nunchuk = ArduinoNunchuk();


      int escOutputValue = ESC_ZERO;
      float currentOutputValue = ESC_ZERO;


      int resetCounter = 0;
      Servo ESC;


      void setup()
      {
      ESC.attach(9);
      Serial.begin(BAUDRATE);


      nunchuk.init();
      delay(100);
      }


      void loop()
      {

      resetCounter++;



      if (resetCounter==40)
      {
         resetCounter=0;
         nunchuk.init();
         delay(100);
      }


      nunchuk.update();


      // Serial.print(nunchuk.analogX, DEC);
      // Serial.print(' ');
      // Serial.print(nunchuk.analogY, DEC);
      // Serial.print(' ');
      // Serial.print(nunchuk.accelX, DEC);
      // Serial.print(' ');
      // Serial.print(nunchuk.accelY, DEC);
      // Serial.print(' ');
      // Serial.print(nunchuk.accelZ, DEC);
      // Serial.print(' ');
      // Serial.print(nunchuk.zButton, DEC);
      // Serial.print(' ');
      // Serial.print(nunchuk.cButton, DEC);
      // Serial.print(' ');


      int yValue = nunchuk.analogY;

      if (yValue<CHUCK_ZERO)
      {
         yValue = CHUCK_ZERO; // no backwards
      }
     
      // escOutputValue = map(yValue, CHUCK_ZERO, CHUCK_MAX, ESC_ZERO, SPEED_MAX); //linear relationship between joystick value and ESC output value--deemed not good enough :P

      if (yValue == CHUCK_ZERO)
      {
         escOutputValue = ESC_ZERO; //if joystick is at zero, no power to motor (coast)
         currentOutputValue = ESC_ZERO; //reset
      }
      else
      {
         int maxPossibleSpeed = map (yValue, CHUCK_ZERO, CHUCK_MAX, ESC_ZERO, SPEED_MAX);

         if (escOutputValue > maxPossibleSpeed)
         {
           escOutputValue = maxPossibleSpeed;
         }
         else
         {
           float increment = (1.0 * (yValue - CHUCK_ZERO)) / (CHUCK_MAX - CHUCK_ZERO);



           currentOutputValue += increment;
           escOutputValue = (int) currentOutputValue;

           if (escOutputValue > maxPossibleSpeed)
           {
             escOutputValue = maxPossibleSpeed;
           }
         }
      }


      ESC.write(escOutputValue);
      Serial.println(escOutputValue); //for debugging
      }

 

结论

这是我第一次开发“电动交通工具”,并且对基于Arduino的DIY电动滑板组装配合的方式感到很满意。我将继续开发滑板的硬件和软件,以进一步探索电动交通工具在电子和控制软件方面的创新。

Arduino是此类项目中非常便于使用的微控制器,因为它易于与外部的电子设备连接,并且便于通过修改其中运行的软件代码来实现项目的改进。

在该DIY电动滑板未来的迭代版本中,我希望继续开发滑板的控制软件,这是能够提升滑板的控制性、效率和整体实用性的一种非常简单的方式。目前我对这种改进方式有这样一个想法,即通过使用编码器或类似的传感器来实现闭环控制,从而在平稳行驶时进行启动或变速。我还想在长板上添加读数设备,以显示电池电量百分比和按钮控件,使骑手可以在加速、制动或最大速度等方面进行调整。请继续关注该项目的进一步发展,并随时与我分享您的见解!

Rahul Iyer
Rahul Iyer

Rahul在UCLA学习电气工程,业余时间喜欢创建电子和机器人相关的项目,尤其对电动汽车技术和辅助机器人技术感兴趣。

分享到社交媒体