我们最初的项目是从头开始构建一个电动滑板,我们可以通过手机应用程序中的滑块来控制它。然而,这首先需要能够通过蓝牙向 Arduino 发送 PWM 信号,以及反转电机方向的命令。作为一个 Arduino 新手,我首先必须在互联网上搜索可以作为创建自己项目的垫脚石的项目,以便学习和应用关键概念。这是从一开始就学习 Arduino 几周的结果,我很高兴知道这是否反过来帮助任何人学习了一两件事!
这个构建是滑板上使用的小规模原型,只需稍作修改即可扩展。我将首先给出所需的部分以及它们背后的一些解释,然后是电路以及随附的代码,最后将说明如何自定义应用程序以使用该程序。
你会需要:
HC-06 将接收从主蓝牙设备发出的串行数据,这些数据将通过连接到板的引脚 5 和 4 的接收/发送引脚 RX/TX 与 Arduino 通信。它的 GND 和 VCC 引脚将分别连接到 GND 和 +5V。
L293D 中的 H 桥将允许我们通过打开或关闭一对开关来控制电机的旋转方向,其中 4 个开关呈 H 形排列,因此得名。
该电机驱动器还能够以不同的速度驱动两台电机,但本项目仅使用一台。
要启用电机,请将“ 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)。
这是连接到面包板上时应该是什么样子的图片:
已添加注释以帮助解释代码,但可能需要更多说明。
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 的应用程序,因为它提供了创建仪表板以及自定义仪表板上组件发送的数据或它们如何相互交互的选项。
为了创建这个界面,您需要编辑一个新的仪表板,并从编辑菜单中选择一个滑块、一个按钮和一个文本框。
滑块必须这样编辑:
按钮应该这样编辑(释放文本留空):
然后,您可以添加文本以阐明仪表板。
在我们创建这个项目时,我获得了一些我认为可以与其他 Arduino 初学者分享的智慧,因为虽然其中一些可能听起来很明显,但对我来说这是一条陡峭的学习曲线。
1. 使用在线提供的程序构建项目时,始终确保调整代码并对其进行测试以了解所有部分的作用。我经常剥离代码以尝试隔离某些功能并了解如何以不同的方式执行它们,通过这样做,我了解这些代码的工作方式要好得多,并且能够从它们中获得灵感来自己创造一些新的东西,而不是只需复制和粘贴整个程序。
2. 这听起来很明显,但我犯了很多次这个错误:看起来相似的组件并不总是相同的!在使用晶体管和双列直插式封装(如 L293D)时,我尤其犯了这个错误。手头有类似的组件,我尝试构建电路,但它们从未工作过,并且必须订购正确的组件才能使它们发挥作用。
3. 当你卡在某件事上时,有针对性的互联网研究可以解决大多数问题,只是需要一些耐心阅读和理解,无论是关于代码元素还是电子元件。
如果您受到启发来构建这个项目,我建议您随意修改它以更好地满足您的目标并了解有关如何创建自己的 Arduino 项目的更多信息。由于它是电动滑板电机控制系统的原型,以下是我们认为可以实施的一些潜在想法和示例:
永远记住是安全的,这只是电动滑板电机控制系统的一个小规模原型,我们没有尝试在实际中使用它,我们不建议将其用于此目的,因为它未经测试真正的滑板,可能很危险。
我们希望这对您有所帮助,并且您会在该项目中获得乐趣!
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !