一板网电子技术论坛

风筝
发表于: 2020-2-1 11:45:56 | 显示全部楼层

遥控小车是一项很有趣的小制作,我个人是遥控小车的忠实拥护者,并且已经广泛使用。今天,这些小车中的大多数都提供了巨大的扭矩来应对复杂的地形,但总有一些东西滞后,比如它的速度!! ..因此,在本篇文章中,我们将使用Arduino制作一种完全不同类型的遥控小车,这辆车的目标是达到最高速度,因此我决定为遥控小车尝试无芯直流电机。这些电机通常用于无人机,额定功率为39000 RPM,应该足以满足我们的速度要求。该小车将使用小型锂电池供电,并且可以使用nRF24L01 RF模块进行远程控制。


遥控小车使用的无芯直流电机

下图显示了本文使用的无芯直流电机。您可以轻松找到,因为它们已在微型无人机中广泛使用。只要寻找8520电磁微型无铁芯电机,您就会找到这些。

BLDC-Motor.jpg


现在,将直流电机用于遥控小车存在一些不足。首先,它们提供了非常低的启动扭矩,因此我们的遥控小车应尽可能轻巧。第二个问题是它的速度,难以处理39000 RPM,因此我们需要在Arduino端使用MOSFET构建的速度控制电路。第三个问题是,这些电动机将由工作电压在3.6V至4.2V之间的单个锂聚合物电池供电,因此我们必须将电路设计为在3.3V电压下工作。这就是为什么我们将3.3V Arduino Pro mini用作遥控小车的主控的原因。解决了这些问题后,让我们看看制作该项目所需的材料。


所需的材料

●    3.3V Arduino Pro Mini开发板

●    Arduino Nano开发板

●    NRF24L01模块

●    摇杆模块

●    SI2302 MOSFET

●    1N5819二极管

●    无芯无刷直流电机

●    AMS1117-3.3V

●    锂聚合物电池

●    连接导线


遥控小车的RF摇杆模块

如前所述,遥控小车将使用RF摇杆进行远程控制。该摇杆还使用Arduino和nRF24L01 RF模块制作,我们还使用摇杆模块在所需方向上控制小车。要制作您的Arduino RF远程遥杆,您可以按照以下电路图进行操作。

Arduino-RC-Car-Circuit-Diagram.png


可以使用Nano开发板的USB端口为RF摇杆电路供电。 nRF24L01模块在3.3V电压下运行,因此我们在Arduino上使用了3.3V引脚。我已经在面包板上构建了电路,如下所示,如果需要,您也可以为此制作PCB。

Arduino-RC-Car-Circuit-Connection.jpg

RF摇杆的Arduino代码非常简单,我们需要从摇杆读取X值和Y值,然后通过nRF24L01将其发送到遥控小车。该电路的完整程序可在本页底部找到。


Arduino遥控小车电路图

下面显示了我们的遥控Arduino小车的完整电路图。电路图还包括一个向小车添加两个TCRT5000 IR模块的可选项。计划这样做是为了使我们的遥控小车能够像机器人之后的生产线一样工作,以便它可以独立工作而无需外部控制。为了简化构造,我将两个电路都组合在一个PCB上,您可以忽略本文的IR传感器和运算放大器部分。

Arduino-RC-Car-using-nRF24L01-Circuit-Diagram.png

遥控小车(RC Car)将由连接到端子P1的锂电池供电。 AMS117-3.3V用于为我们的nRF24L01和Mini开发板调节3.3V。我们还可以直接在插针上为Arduino开发板供电,但是pro mini上的板载3.3V稳压器将无法为我们的RF模块提供足够的电流,因此我们使用了外部稳压器。


为了驱动两个BLDC电机,我们使用了两个SI2302 MOSFET。重要的是要确保这些MOSFET可以由3.3V驱动。如果找不到完全相同的部件号,则可以寻找具有以下传输特性的等效MOSFET

MOSFET-Transfer-Characteristics.jpg


电机可能消耗高达7A的峰值电流(经负载测试连续电流为3A),因此MOSFET的漏极电流应为7A或更高,并且应在3.3V时完全导通。如您所见,我们选择的MOSFET即使在2.25V电压下也能提供10A电流,因此它是理想的选择。


Arduino遥控PCB制作

建立该项目的有趣之处在于PCB开发。这里的PCB不仅构成电路,而且还充当小车的底盘,因此我们设计了一个类似小车外形,可轻松安装电机。您也可以尝试使用上面的电路设计自己的PCB,下面是我的PCB设计。

PCB-Board-Design.jpg


如您所见,我将PCB设计为易于安装电池、电动机和其他组件。您可以从链接下载该PCB的Gerber文件。准备好Gerber文件后,就可以制作文件了。


组装PCB

以下是制作的几张PCB电路板的图片。

Arduino-Car-PCB-Board_1.jpg

开始组装电路板。由于封装、焊盘、通孔和丝网印刷都具有正确的形状和大小,因此可以很容易地组装电路板。拆箱后仅需10分钟即可准备好板子。


焊接后的几张图如下所示。

Arduino-RC-Car-Assembly.jpg


3D打印车轮和马达支架

您可能已经在上图中注意到了,我们需要对小车的电机安装座和轮子进行3D建模。如果您使用了上面共享的PCB Gerber文件,那么也可以通过从该链接下载3D模型来使用它。

3D-Printing.jpg


我已经使用Cura对模型进行切片,并使用Tevo Terantuala在没有支撑物和0%填充以减轻重量的情况下进行打印。您可以更改设置以适合我们的打印机。由于电动机的旋转速度非常快,因此我发现很难设计出能紧贴电动机轴并紧紧固定的车轮。因此,我决定使用车轮内的无人机叶片,如下所示

3D-Printing-Wheels_0.jpg


编程Arduino

该项目的完整程序(Arduino nano和pro mini)可在此页面底部找到。遥控小车程序说明如下


首先包含所需的头文件。请注意,nRF24l01模块需要将库添加到Arduino IDE,您可以使用此链接从Github下载RF24库。除此之外,我们已经为小车定义了最小速度和最大速度。最小和最大范围分别为0到1024。

  1. #define min_speed 200
  2. #define max_speed 800
  3. #include <SPI.h>
  4. #include "RF24.h"
  5. RF24 myRadio (7, 8);
复制代码

然后在setup函数中,我们初始化nRF24L01模块。我们使用了115个频段,并且已将模块设置为低功耗运行,您也可以尝试使用这些设置。

  1. void setup() {
  2.   Serial.begin (9600);
  3.   myRadio.begin();
  4.   myRadio.setChannel(115);  //115 band above WIFI signals
  5.   myRadio.setPALevel(RF24_PA_MIN); //MIN power low rage
  6.   myRadio.setDataRate( RF24_250KBPS ) ;  //Minimum speed
  7. }
复制代码

接下来,在loop函数中,我们将仅执行ReadData函数,通过该函数我们将不断读取从发送器摇杆模块发送的值。请注意,程序中提到的管道地址应与发送器程序中提到的管道地址相同。我们还打印了我们收到的用于调试的值。成功读取该值后,我们将执行Control Car函数,根据从RF模块接收到的值来控制RC小车。

  1. void ReadData()
  2. {
  3.   myRadio.openReadingPipe(1, 0xF0F0F0F0AA); //Which pipe to read, 40 bit Address
  4.   myRadio.startListening(); //Stop Transminting and start Reveicing
  5.   if ( myRadio.available())
  6.   {
  7.     while (myRadio.available())
  8.     {
  9.       myRadio.read( &data, sizeof(data) );
  10.     }
  11.     Serial.print("\nReceived:");
  12.     Serial.println(data.msg);
  13.     received = data.msg;
  14.     Control_Car();
  15.   }
  16. }
复制代码

在Control Car函数内,我们将使用模拟写入功能来控制连接到PWM引脚的电机。在我们的发送器程序中,我们已将Nano的A0和A1引脚的模拟值转换为1到10、11到20、21到30以及31到40,以分别控制汽车向前、向后、向左和向右。以下程序用于向前控制小车

  1. if (received>=1 && received <=10) // Move Forward
  2.   {
  3.     int PWM_Value =  map (received, 1, 10, min_speed, max_speed);
  4.     analogWrite(R_MR,PWM_Value);
  5.     analogWrite(L_MR,PWM_Value);
  6.   }
复制代码

类似地,我们还可以为反向、向左和向右控制编写另外三个函数,如下所示。

  1.     if (received>=11 && received <=20) // Break
  2.   {
  3.     int PWM_Value =  map (received, 11, 20, min_speed, max_speed);
  4.     analogWrite(R_MR,0);
  5.     analogWrite(L_MR,0);
  6.   }
  7.     if (received>=21 && received <=30) // Turn left
  8.   {
  9.     int PWM_Value =  map (received, 21, 30, min_speed, max_speed);
  10.     analogWrite(R_MR,PWM_Value);
  11.     analogWrite(L_MR,0);
  12.   }
  13.       if (received>=31 && received <=40) // Turn Right
  14.   {
  15.     int PWM_Value =  map (received, 31, 40, min_speed, max_speed);
  16.     analogWrite(R_MR,0);
  17.     analogWrite(L_MR,PWM_Value);
  18.   }
复制代码

Arduino遥控小车的工作

完成代码后,将其上传到pro mini开发板。通过FTDI模块取出电池和电路板进行测试。启动代码,打开串口监视器,您应该从发送器的摇杆模块接收到该值。连接电池,电动机也应开始旋转。

Arduino-RC-Car-Working.jpg


代码

以下是本文使用的完整代码: main.rar (1.51 KB, 下载次数: 29)

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 551 | 回复: 1061



手机版|

GMT+8, 2021-1-16 04:43 , Processed in 0.074214 second(s), 32 queries . Powered by Discuz! X3.4

YiBoard一板网 © 2015-2020 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表