电路设计论坛
直播中

李凤津

7年用户 982经验值
私信 关注
[资料]

制作一个带蓝牙的微型战斗机BOT

描述
带蓝牙的微型战斗机BOT

这是我的 Micro Fighter Bot 或 Micro Robot V2,它是一个易于制作的微型机器人,由 Arduino Nano 板和 L293D 电机驱动器 IC 供电。

是的,我在这里使用蓝牙,好的旧 HC01 模块。



机器人背后的想法
制作机器人的目标是制作一个小型机器人平台,我可以在我的下一个项目中使用它,这是一个格斗机器人组合。基本上,我想准备一个小而快的机器人,可以和其他小机器人战斗,不是死战,而是普通的相扑比赛。



之前,我做了一个类似的只有两个轮子的微型机器人,那个机器人的问题是稳定性。
此外,它也不能很好地通过障碍物,例如岩石地形、急剧下降或低摩擦区域。

为了改善这一点,我准备了这个有 4 个轮子的机器人,所以它有一个坚固的框架,重心位于机器人的最中心部分,因为这有助于高速急转弯。

我在 Fusion360 中设计了这个机器人 首先,这里的想法是制作一个底座,用于从底座的底部拧紧电机支架,并且有 3 个支柱,可以在其上安装 PCB。在 PCB 和底座之间,放置了一块锂离子电池。
所以这就是计划。

所需材料
  • 底座 x 1
  • 马达座 x 4
  • 前盾 x 1
  • 柱子 x 3

成分
  • L293D电机驱动IC
  • 阿杜诺纳米
  • 定制PCB(由PCBWAY提供)
  • 微型齿轮直流电机
  • 母头针
  • DC 筒式千斤顶
  • AMS1117
  • 4.7uf Cap 1206 封装
  • 22uf Cap 1206 封装
  • 贴片 LED 0603 封装
  • 1K电阻0603封装
  • HC01模块
  • 电池 JST 连接器

PCB设计
制作 PCB 项目的第一步是制作原理图,其中包含我们运行项目所需的所有组件。



我准备了一个简单的设置,其中包括一个 Arduino Nano 与 L293D 电机驱动器 IC 连接在正确的配置中,HC01 也与 Arduino Nano 连接。
我在此设置中使用了 12V 2.6A 电池,不建议直接使用 Arduino 的 VIN 端口添加 12V,因此我添加了 AMS1117 以将此 12V 降压为 3.3V,以便 Arduino 和 HC01 运行而不会出现任何问题。



完成此原理图后,我导入其网表并将其转换为 PCB 设计。
至于PCB Outline,我使用了fusion360 Model的参考尺寸,然后根据它制作PCB。
我导出了 Gerber 数据,然后将其发送到 PCBWay 以获取样本。

PCBWAY评论


笔记-


在开始组装过程之前,这里有一个简单的事实。我正在使用一个很难找到的 HC01 模块,你可以很容易地在互联网上找到它的分线板,但这些模块并不容易获得。
此外,它们的成本很高,所以我所做的是,我拿了一个 HC05 模块并将其放在我的回流焊炉上,然后从分线板上取下 HC01 模块。

PCB组装
收到 PCB 后,剩下要做的就是在每个元件焊盘上涂抹焊膏。

1. 锡膏分配


我使用了普通的 Sn-Pb 焊膏,其熔化温度为 140 至 270 °C
锡膏点胶方法比较简单,我们在每个元件焊盘上一点一点地涂抹少量锡膏,这需要时间。
添加锡膏后,我们需要做“PICK and Place Process”

2. 拾取和放置过程


然后,我使用 ESD 镊子仔细挑选每个组件并将其一个一个放置在指定的位置,这需要大约 3 分钟的时间,但最终结果是一个完美的 PCB,所有组件都以正确的方向放置在它们的位置。

3. 热板回流


在“PICK and Place Process”之后,我小心翼翼地将整个电路板抬起并放在我的 DIY SMT Hotplate 上,它也是自制的,就像这个项目一样。
几分钟后,当热板达到焊膏熔化温度时,所有组件都将通过此热回流工艺焊接。

4. THT 组件


现在我们必须添加 THT 组件,即 Header 引脚、DC Jack、L293D IC 和电池 JST 连接器。
我只是用普通的烙铁来完成这项工作。
最后,我们将 Arduino Nano 放在头针上。





正如您在此处看到的,我在 PCB 上添加了跳线引脚,它们与 TX 和 RX 串联。
你看,如果我们直接在 PCB 上添加带有 HC01 的 Arduino 的 RX 和 TX,而没有任何分线点,我们将因为 UART 错误而无法对 Arduino nano 进行编程。



我已经在 PCB 上添加了这两个插头引脚,因此我可以将它们短路,通过这个 HC01 将与 Arduino Nano 通信,当我们必须对 Arduino Nano 进行编程时,我们只需从这些插头引脚上移除两个跳线。
您也可以移除 Arduino Nano 并使用草图对其进行编程,然后将其放回 PCB 上,这种方法可行,但对我来说工作量太大,所以我更喜欢使用接头引脚。
无论如何,在这样做之后,我们的 PCB 终于准备好了。但我们仍然需要检查电路是否正常工作。

测试电路!








为了测试这块板,我基本上会使用两件事,首先,我将使用这个电池,它是一个 12V 的锂离子电池组,我有一个 BMS,所以我们不必担心它的很多相关的事情电池保护。
  • 我们首先将电池添加到我们的 PCB 上,并以正确的极性连接 JST。
  • 然后我们打开开关,我们的 Arduino nano 和 HC01 正在工作。
  • HC05 LED 闪烁并且 LED 在 Arduino nano 中发光,这意味着这两个模块都可以正常工作。
  • 接下来,我在 DC Barrel 插孔上添加了一个 12V 5A SMPS,用于为车载电池组充电。DC 插孔一侧的 LED 发光,这意味着一切都很好而且花花公子。
  • 现在,我终于拿出手机和HC01模块配对了。
  • 然后我在手机中打开了一个蓝牙终端应用程序并连接了HC01。连接后,LED 停止其频繁的闪烁序列,这表明模块现在已与设备连接。
所以我们的 PCB 现在已经通过了它的测试过程,现在我们将准备 3D 打印的基体,它将容纳 PCB 和其他东西。

3D 打印零件和车身装配


这是这个下部底座,它从底部固定着四个带有电机安装支架的直流电机。
然后三个支柱在对面,这些支柱将用于将 PCB 和 Base 安装在一起。
在 PCB 和 Base 之间,放置了一个锂离子电池,所以它是一个紧凑的设置,可以很好地将所有东西结合在一起。



至于这些 3D 打印部件的材料,我选择透明 PLA 和透明黄色 PLA,看起来有点像金色,但不是。



将所有内容加在一起后,我在中间部分添加了电池并将其端子与 JST 连接器连接。
然后我按此顺序将电线添加到电机和 PCB



代码
int motorLpin1 = 2 ;
int motorLpin2 = 3 ;
int motorRpin1 = 4;
int motorRpin2 = 5 ;
int rightMotorENA = 10 ;
int leftMotorENB = 11 ;


int电机速度 = 200 ;
整数转= 50;
无效 设置()
{
序列号.开始(9600);
Serial.flush();
pinMode(motorLpin1,输出);
pinMode(motorLpin2,输出);
pinMode(电机Rpin1,输出);
pinMode(电机Rpin2,输出);
pinMode(右MotorENA,输出);
pinMode(左MotorENB,输出);


}

无效 循环() {
字符串输入= “”;
而(Serial.available()){
输入+=(字符)Serial.read();
延迟(5);
}

如果(输入== “S”){
马达停止();
}
否则 如果(输入== “F”){
电机前锋();
}
否则 如果(输入== “R”){
电机后退();
}
否则 if (input.indexOf( "TR" )> -1 ){
左电机();
}
否则 if (input.indexOf( "TL" )> -1 ){
马达右();
}

否则 if (input.indexOf( "SQ" )> -1 ){
正方形();
}


}

无效 电机前锋(无效)
{
数字写入(motorLpin1,HIGH);
数字写入(motorLpin2,LOW);
数字写入(motorRpin1,HIGH);
数字写入(电机Rpin2,低);
模拟写入(左MotorENB,200);
模拟写入(右MotorENA,200);
}

无效 电机后退(无效)
{

数字写入(motorLpin1,LOW);
数字写入(motorLpin2,HIGH);
数字写入(motorRpin1,LOW);
数字写入(motorRpin2,HIGH);
模拟写入(左MotorENB,200);
模拟写入(右MotorENA,200);
}
无效 电机(无效)
{
数字写入(motorLpin1,HIGH);
数字写入(motorLpin2,LOW);
数字写入(motorRpin1,LOW);
数字写入(motorRpin2,HIGH);
类比写入(左MotorENB,50);
类比写入(右MotorENA,50);
}
无效 MotorRight (无效)
{

数字写入(motorLpin1,LOW);
数字写入(motorLpin2,HIGH);
数字写入(motorRpin1,HIGH);
数字写入(电机Rpin2,低);
类比写入(左MotorENB,50);
类比写入(右MotorENA,50);
}
无效 马达停止(无效)
{

数字写入(motorLpin1,LOW);
数字写入(motorLpin2,LOW);
数字写入(motorRpin1,LOW);
数字写入(电机Rpin2,低);
digitalWrite(leftMotorENB,LOW);
digitalWrite(右MotorENA,LOW);
}

无效 广场(无效)
{


}

上传过程非常简单,我们首先从 HC01 Header 引脚上移除跳线,然后将 Arduino nano 连接到我们的计算机并使用 Arduino IDE 刷新 Bot,这几乎就是上传过程!
代码非常简单,您可以根据需要或要求进行更改。
(刷机过程后别忘了加跳线回原位)
我们的 MicroBot 已准备好进行首次运行!

应用程序


现在,以前的版本是一个 blynk 应用程序的控制器,但我在这个项目中没有使用 ESP32 或 ESP8266。我们需要一个蓝牙终端应用程序。

打开这个应用程序并将您的 HC01 与它配对,然后打开它的控制器模式并为按钮分配它们的值,在我们的例子中就是这些。
  • TL 左转
  • TR 右转
  • F代表前进
  • R 反向
  • S 停止
现在我们只需按任意按钮来控制这个机器人!


结果/测试运行

结论与改进


如您所见,我们的机器人正在工作!它非常快,这是我的目标,让它尽可能快和坚固。



现在,这个设置就像一个开发平台,一个微型战斗机平台。
这里的想法是制作多个这些根并让它们进行战斗和其他事情。此外,我们还必须在这些机器人中添加一些噱头,例如普通武器护盾盔甲等。

这个项目是完全开源的,所以如果这里有人想要制作其中一个机器人,那么所有的文件都附上了。
如果您需要更多帮助,请评论/DM。

代码

int motorLpin1 = 2;

int motorLpin2 = 3;

int motorRpin1 = 4;

int motorRpin2 = 5;

int rightMotorENA = 10;

int leftMotorENB = 11;





int motorSpeed = 200;

int turn=50;

void setup()

{

Serial.begin(9600);

Serial.flush();

pinMode(motorLpin1,OUTPUT);

pinMode(motorLpin2,OUTPUT);

pinMode(motorRpin1,OUTPUT);

pinMode(motorRpin2,OUTPUT);

pinMode(rightMotorENA,OUTPUT);

pinMode(leftMotorENB,OUTPUT);





}



void loop(){

String input="";

while(Serial.available()){

input+=(char)Serial.read();

delay(5);

}



if(input=="S"){

MotorStop();

}

else if(input=="F"){

MotorForward();

}

else if(input=="R"){

MotorBackward();

}

else if(input.indexOf("TR")>-1){

MotorLeft();

}

else if(input.indexOf("TL")>-1){

MotorRight();

}



else if(input.indexOf("SQ")>-1){

SQUARE();

}





}



void MotorForward(void)

{

digitalWrite(motorLpin1,HIGH);

digitalWrite(motorLpin2,LOW);

digitalWrite(motorRpin1,HIGH);

digitalWrite(motorRpin2,LOW);

analogWrite(leftMotorENB,200);

analogWrite(rightMotorENA,200);

}



void MotorBackward(void)

{



digitalWrite(motorLpin1,LOW);

digitalWrite(motorLpin2,HIGH);

digitalWrite(motorRpin1,LOW);

digitalWrite(motorRpin2,HIGH);

analogWrite(leftMotorENB,200);

analogWrite(rightMotorENA,200);

}

void MotorLeft(void)

{

digitalWrite(motorLpin1,HIGH);

digitalWrite(motorLpin2,LOW);

digitalWrite(motorRpin1,LOW);

digitalWrite(motorRpin2,HIGH);

analogWrite(leftMotorENB,50);

analogWrite(rightMotorENA,50);

}

void MotorRight(void)

{



digitalWrite(motorLpin1,LOW);

digitalWrite(motorLpin2,HIGH);

digitalWrite(motorRpin1,HIGH);

digitalWrite(motorRpin2,LOW);

analogWrite(leftMotorENB,50);

analogWrite(rightMotorENA,50);

}

void MotorStop(void)

{



digitalWrite(motorLpin1,LOW);

digitalWrite(motorLpin2,LOW);

digitalWrite(motorRpin1,LOW);

digitalWrite(motorRpin2,LOW);

digitalWrite(leftMotorENB,LOW);

digitalWrite(rightMotorENA,LOW);

}



void SQUARE(void)

{





}

更多回帖

发帖
×
20
完善资料,
赚取积分