电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>电子资料>通过蓝牙对直流电机进行PWM和方向控制

通过蓝牙对直流电机进行PWM和方向控制

2022-11-16 | zip | 0.07 MB | 次下载 | 免费

资料介绍

描述

启示

我们最初的项目是从头开始构建一个电动滑板,我们可以通过手机应用程序中的滑块来控制它。然而,这首先需要能够通过蓝牙Arduino 发送 PWM 信号,以及反转电机方向的命令。作为一个 Arduino 新手,我首先必须在互联网上搜索可以作为创建自己项目的垫脚石的项目,以便学习和应用关键概念。这是从一开始就学习 Arduino 几周的结果,我很高兴知道这是否反过来帮助任何人学习了一两件事!

这个构建是滑板上使用的小规模原型,只需稍作修改即可扩展。我将首先给出所需的部分以及它们背后的一些解释,然后是电路以及随附的代码,最后将说明如何自定义应用程序以使用该程序。

所需零件

你会需要:

  • 一个 Arduino Uno 或 Nano;
  • 蓝牙低功耗 (BLE) 模块,例如仅作为从机的 HC-06,或者可以作为主机或从机的 HC-05。两者都可以工作,因为该模块将用作从站。它们还共享相同的四个中间引脚,这是我们唯一需要的;
pYYBAGNy7riAPoYlAAGuq6E79Vw259.png
横向对比。信用:eggelectricunicycle.bitbucket.io
 
  • L293D电机驱动IC。这个 16 针双 H 桥电机驱动器可以让我们控制电机的旋转方向和速度;
 
 
 
poYBAGNy7ruAahNdAABiES_ZGaU740.png
 
1 / 2L293D 引脚布局。信用:components101.com
 
  • 12V直流电机;
  • 12V电池组;
  • 跳线和面包板。

电路

HC-06 将接收从主蓝牙设备发出的串行数据,这些数据将通过连接到板的引脚 5 和 4 的接收/发送引脚 RX/TX 与 Arduino 通信它的 GND 和 VCC 引脚将分别连接到 GND 和 +5V。

L293D 中的 H 桥将允许我们通过打开或关闭一对开关来控制电机的旋转方向,其中 4 个开关呈 H 形排列,因此得名。

pYYBAGNy7r2AQ-YrAABfgs1bLBs922.png
信用:http://axotron.se/
 

该电机驱动器还能够以不同的速度驱动两台电机,但本项目仅使用一台。

要启用电机,请将“ Enable 1, 2 ”(引脚 1)和“ Vcc1 ”(引脚 16)连接到 +5V。将“ Vcc2 ”(引脚 8)连接到 12V 电池组的正极。将引脚 4、5、12 和 13 连接到 GND。将“输入 1 ”(引脚 2)连接到 Arduino 的引脚 10,它将传输pwm2信号,将“输入 2 ”(引脚 7)连接到引脚 9,用于pwm1. 在这些之间切换将允许我们切换旋转方向。最后,将直流电机连接到输出 1 和 2(引脚 3 和 6)。

pYYBAGNy7sCAXlg2AADzWcALois192.jpg
电路示意图(用 Fritzing 制作)。
 

这是连接到面包板上时应该是什么样子的图片:

 
 
 
poYBAGNy7sKAIoNGAADx7pKw24g017.jpg
 
1 / 2电路图(在 Tinkercad 上制作)。
 

该程序

已添加注释以帮助解释代码,但可能需要更多说明。

pwm1并且pwm2是相反的,并允许我们切换旋转方向。应用程序发送的串行数据是一个字符串,c,这是速度和方向数据的位置。为了完成这项工作,速度位于字符串c[1]c[2]c[3]中,这就是为什么它必须作为 3 位数字接收的原因。这就是为什么在应用程序中,我们自定义滑块以发送 100 到 255 之间的数字。然后可以将其映射到 Arduino 中的 [0:255] 下的新速度变量,如下所示:

new_speed = map(speed_value,100,255,0,255) 

然而,我们决定简单地从 speed_value 中减去 100,以使速度属于区间 [0:155],因为 155 对于我们的原型来说已经足够快了。

#include
SoftwareSerial bt_ser(4,5); //connected to RX and TX pins for serial data communication
char c[6];
int i=0,speed_value=0,send_value;
#define pwm1     9   //input 2
#define pwm2    10   //input 1
boolean motor_dir = 0;
void setup()
{
 Serial.begin(9600);
 bt_ser.begin(9600);
 pinMode(pwm1,   OUTPUT);
 pinMode(pwm2,   OUTPUT);
}
void loop()
{
  while(bt_ser.available())   //when data is transmitted
    {
      if(bt_ser.available()>0)
      {
        c[i] = bt_ser.read();   //reading the string sent from master device
        Serial.print(c[i]); 
        i++;  
      }
      if(c[i-1]=='N')    //if button is pressed
       {
         motor_dir = !motor_dir;     //toggle direction variable
         if(motor_dir)               //setting direction, pwm1 and pwm2 are opposites
           digitalWrite(pwm2, 0);
         else
           digitalWrite(pwm1, 0); 
       }
     }
      speed_value = (c[1]-48)*100+(c[2]-48)*10+(c[3]-48)*1;  //interpreting speed from string
      if(motor_dir)   //for a given direction
         {
           if(c[i-1]=='#'){   //if data has been transmitted from slider
             analogWrite(pwm1, speed_value-100);  //-100 so that when slider is on "0" speed is 0
             i=0;
           }
         }
       else{       //for opposite direction
         if(c[i-1]=='#'){
           analogWrite(pwm2, speed_value-100);
           i=0;
         }
       }
}   

该应用程序

我们决定使用我们在 Play 商店中找到的名为 Bluetooth Electronics 的应用程序,因为它提供了创建仪表板以及自定义仪表板上组件发送的数据或它们如何相互交互的选项。

pYYBAGNy7sWAG4QVAABasy6do-s901.jpg
创建的仪表板的屏幕截图。
 

为了创建这个界面,您需要编辑一个新的仪表板,并从编辑菜单中选择一个滑块、一个按钮和一个文本框。

滑块必须这样编辑:

  • 最小值:100
  • 最大值:255
  • 在滑块更改时发送字符串
  • 字符串以 : * 开头
  • 字符串以 : # 结尾

按钮应该这样编辑(释放文本留空):

  • 新闻正文:N
  • 发布文本:

然后,您可以添加文本以阐明仪表板。

结果

 

我作为初学者学到的一些教训

在我们创建这个项目时,我获得了一些我认为可以与其他 Arduino 初学者分享的智慧,因为虽然其中一些可能听起来很明显,但对我来说这是一条陡峭的学习曲线。

1. 使用在线提供的程序构建项目时,始终确保调整代码并对其进行测试以了解所有部分的作用。我经常剥离代码以尝试隔离某些功能并了解如何以不同的方式执行它们,通过这样做,我了解这些代码的工作方式要好得多,并且能够从它们中获得灵感来自己创造一些新的东西,而不是只需复制和粘贴整个程序。

2. 这听起来很明显,但我犯了很多次这个错误:看起来相似的组件并不总是相同的!在使用晶体管和双列直插式封装(如 L293D)时,我尤其犯了这个错误。手头有类似的组件,我尝试构建电路,但它们从未工作过,并且必须订购正确的组件才能使它们发挥作用。

3. 当你卡在某件事上时,有针对性的互联网研究可以解决大多数问题,只是需要一些耐心阅读和理解,无论是关于代码元素还是电子元件。

结论

如果您受到启发来构建这个项目,我建议您随意修改它以更好地满足您的目标并了解有关如何创建自己的 Arduino 项目的更多信息由于它是电动滑板电机控制系统的原型,以下是我们认为可以实施的一些潜在想法和示例:

  • 开/关开关;
  • 在能够激活反向按钮之前将滑块拖动到“0”位置的要求;
  • 刹车命令(逐渐停止,而不是从关闭或倒车按钮立即停止,或者必须手动逐渐降低速度);
  • 甚至创建您自己的移动应用程序来控制电机,因为我们使用了应用程序商店中提供的一个。麻省理工学院应用程序发明者似乎是创建此类应用程序的好平台;
  • 手持遥控器也可以代替手机,如果是电动滑板,肯定是更安全的选择;
  • 我们还认为,在滑板甲板上添加一个压力传感器可以在用户摔倒时实现紧急停止,尽管遥控器和 Arduino 之间的距离读数也可以实现该目标,一旦遥控器/用户停止它太远。

永远记住是安全的,这只是电动滑板电机控制系统的一个小规模原型,我们没有尝试在实际中使用它,我们不建议将其用于此目的,因为它未经测试真正的滑板,可能很危险。

我们希望这对您有所帮助,并且您会在该项目中获得乐趣!


下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1山景DSP芯片AP8248A2数据手册
  2. 1.06 MB  |  532次下载  |  免费
  3. 2RK3399完整板原理图(支持平板,盒子VR)
  4. 3.28 MB  |  339次下载  |  免费
  5. 3TC358743XBG评估板参考手册
  6. 1.36 MB  |  330次下载  |  免费
  7. 4DFM软件使用教程
  8. 0.84 MB  |  295次下载  |  免费
  9. 5元宇宙深度解析—未来的未来-风口还是泡沫
  10. 6.40 MB  |  227次下载  |  免费
  11. 6迪文DGUS开发指南
  12. 31.67 MB  |  194次下载  |  免费
  13. 7元宇宙底层硬件系列报告
  14. 13.42 MB  |  182次下载  |  免费
  15. 8FP5207XR-G1中文应用手册
  16. 1.09 MB  |  178次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33566次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537798次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420027次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191187次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183279次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费