- 遥控车用无芯直流电动机
- 所需材料
- 使用Arduino的RC汽车的RF游戏杆
- Arduino RC汽车电路图
- Arduino RC车的PCB制造
- 组装PCB
- 3D打印轮和马达支架
- 编程Arduino
- Arduino RC Car的工作
遥控车总是很有趣,我个人是这些遥控车的忠实 拥护者, 并且已经广泛使用(仍然这样做)。今天,这些汽车中的大多数都提供了巨大的扭矩来应对崎terrain的地形,但总有一些东西滞后,那就是速度!..因此,在这个项目中,我们将使用Arduino制造一种完全不同类型的 RC汽车,主要这款车的目标是达到最高速度,因此我决定为RC车尝试 无芯直流电动机。这些电动机通常用于无人机,额定功率为 39000 RPM 这应该足以消除我们的速度渴求。该汽车将使用小型锂电池供电,并且可以使用nRF24L01 RF模块进行远程控制。或者,如果您正在寻找简单的东西,则还可以检查此Simple RF Robot和Raspberry Pi Bluetooth Car项目。
遥控车用无芯直流电动机
下图显示了该项目中使用的无芯直流电动机。您可以轻松找到它们,因为它们广泛用于微型无人机中。只要寻找8520电磁微型无铁芯电动机,您就会发现这些。
现在,将直流电动机用于RC汽车存在某些缺点。首先,它们提供了非常低的启动扭矩,因此我们的RC车应尽可能轻巧。这就是为什么我决定使用SMD组件在PCB的顶部构建整辆汽车并尽可能减小电路板尺寸的原因。第二个问题是它的高速性,难以处理39000 RPM(轴的RPM),因此我们需要在Arduino端使用MOSFET构建的速度控制电路。第三件事是,这些电动机将由工作电压在3.6V至4.2V之间的单个锂聚合物电池供电,因此我们必须将电路设计为在3.3V电压下工作。这就是为什么我们使用3.3V Arduino Pro mini的原因作为我们遥控车的大脑。解决了这些问题后,让我们看看构建该项目所需的材料。
所需材料
- 3.3V Arduino Pro迷你版
- Arduino纳米
- NRF24L01 – 2个
- 游戏杆模块
- SI2302 MOSFET
- 1N5819二极管
- 无芯无刷直流电动机
- AMS1117-3.3V
- 锂聚合物电池
- 电阻器,电容器
- 连接线
使用Arduino的RC汽车的RF游戏杆
如前所述,RC赛车将使用RF游戏杆进行远程控制。该操纵杆还将使用Arduino和nRF24L01 RF模块构建,我们还使用操纵杆模块在所需方向上控制RC。如果您完全不熟悉这两个模块,则可以考虑阅读Arduino与nRF24L01的接口和Joystick与Arduino的接口文章,以了解它们的工作原理和使用方法。要构建您的Arduino RF远程操纵杆,您可以按照以下电路图进行操作。
可以使用纳米板的USB端口为RF游戏杆电路供电。nRF24L01模块仅在3.3V电压下运行,因此我们在Arduino上使用了3.3V引脚。我已经在面包板上构建了电路,如下所示,如果需要,您也可以为此创建PCB。
射频操纵杆的Arduino代码非常简单,我们必须从操纵杆读取X值和Y值,然后通过nRF24L01将其发送到RC汽车。该电路的完整程序可以在本页底部找到。因为我们已经在上面共享的接口项目链接中讨论了它,所以我们将不对此进行解释。
Arduino RC汽车电路图
下面显示了我们的遥控Arduino汽车的完整电路图。电路图还包括一个向我们的汽车添加两个TCRT5000 IR模块的选项。计划这样做是为了使我们的RC汽车能够像机器人之后的生产线一样工作,以便它可以独立工作而无需外部控制。但是,出于这个项目的考虑,我们将不再专注于此,请继续关注另一个项目教程,在该教程中我们将尝试构建“最快的线路跟随器机器人”。为了简化构建,我将这两种电路都组合在一个PCB上,您可以忽略此项目的IR传感器和运算放大器部分。
RC车将由连接到端子P1的锂电池供电。该AMS117-3.3V用来调节3.3V为我们的nRF24L01和我们亲迷你板。我们还可以直接在裸针上为Arduino板供电,但是pro mini上的板载3.3V稳压器将无法为我们的RF模块提供足够的电流,因此我们使用了外部稳压器。
为了驱动两个BLDC电机,我们使用了两个SI2302 MOSFET。重要的是要确保这些MOSFET可以由3.3V驱动。如果找不到完全相同的部件号,则可以寻找具有以下传输特性的等效MOSFET
电机可能消耗高达7A的峰值电流(经测试在负载下连续电流为3A),因此MOSFET的漏极电流应为7A或更高,并且应在3.3V时完全导通。如您所见,我们选择的MOSFET即使在2.25V电压下也能提供10A电流,因此它是理想的选择。
Arduino RC车的PCB制造
建立该项目的有趣之处在于PCB开发。这里的PCB不仅构成电路,而且还充当着我们汽车的底盘,因此我们为汽车设计了外形看起来很美的汽车,并带有可轻松安装我们的电机的选件。您也可以尝试使用上面的电路设计自己的PCB,或者一旦完成,就可以使用下面的我的PCB设计。
如您所见,我将PCB设计为易于安装电池,电动机和其他组件。您可以从链接下载该PCB的Gerber文件。准备好Gerber文件后,就可以制作文件了。要使PCBGOGO轻松完成PCB,请执行以下步骤
第1步: 进入www.pcbgogo.com,如果这是您第一次,请注册。然后,在“ PCB原型”选项卡中,输入PCB的尺寸,层数和所需的PCB数。我的PCB是80cm×80cm,因此选项卡如下所示。
第2步: 单击 立即报价 按钮继续。如果需要,您将转到一个页面,在其中可以设置一些其他参数,例如使用的轨道间距等材料。但是大多数情况下,默认值都可以正常工作。我们在这里唯一需要考虑的是价格和时间。如您所见,构建时间仅为2-3天,而我们的PSB仅花费5美元。然后,您可以根据自己的需求选择首选的运输方式。
第3步: 最后一步是上传Gerber文件并继续付款。为确保流程顺利进行,PCBGOGO在继续付款之前会验证您的Gerber文件是否有效。这样,您可以确保您的PCB易于制造,并且能够按承诺完成。
组装PCB
订购该板后,几天后我便到达了我,尽管快递员装在一个整齐有序的包装好的盒子中,而且像往常一样,PCB的质量很棒。我分享了以下木板的一些图片供您判断。
我打开了焊锡棒,开始组装电路板。由于脚印,焊盘,通孔和丝网印刷都具有正确的形状和大小,因此我组装电路板没有问题。拆箱后仅需10分钟即可准备好板子。
焊接后电路板的一些图片 如下所示。
3D打印轮和马达支架
如您在上图中可能已经注意到的,我们需要对机器人的电机安装座和轮子进行3D处理。如果您使用了上面共享的PCB Gerber文件,那么也可以通过从该东西链接下载3D模型来使用它。
我已经使用Cura对模型进行切片,并使用Tevo Terantuala在没有支撑物和0%填充以减轻重量的情况下进行了打印。您可以更改设置以适合我们的打印机。由于电机旋转非常快,因此我发现很难设计出一个能紧贴电机轴并紧紧固定的车轮。因此,我决定使用车轮内的无人机叶片,如下所示
我发现它更可靠,更坚固,但是请尝试使用不同的轮毂设计,并在评论部分让我知道对您有用的。
编程Arduino
该项目的完整程序(包括Arduino nano和pro mini)可在此页面底部找到。您的RC程序的说明如下
我们通过包含所需的头文件来启动程序。请注意,nRF24l01模块需要将库添加到Arduino IDE,您可以使用此链接从Github下载RF24库。除此之外,我们已经为机器人定义了最小速度和最大速度。最小和最大范围分别为0到1024。
#define min_speed 200 #define max_speed 800 #include
然后在设置函数中,我们初始化nRF24L01模块。我们使用了115个频段,因为它不会出现拥塞,并且已将模块设置为低功耗运行,您也可以使用这些设置。
void setup(){Serial.begin(9600); myRadio.begin(); myRadio.setChannel(115); // WIFI上方的115频段表示myRadio.setPALevel(RF24_PA_MIN); // MIN低功耗myRadio.setDataRate(RF24_250KBPS); //最低速度}
接下来,在主循环函数中,我们将仅执行ReadData函数,通过该函数我们将不断读取从Transmitter游戏杆模块发送的值。请注意,程序中提到的管道地址应与变送器程序中提到的管道地址相同。我们还打印了我们收到的用于调试目的的值。成功读取该值后,我们将基于从
Rf模块接收的值执行Control Car功能来控制RC car 。
void ReadData(){myRadio.openReadingPipe(1,0xF0F0F0F0AA); //读取哪个管道,40位地址myRadio.startListening(); //如果((myRadio.available()){while(myRadio.available()){myRadio.read(&data,sizeof(data)); } Serial.print(“ \ nReceived:”); Serial.println(data.msg); 收到= data.msg; Control_Car(); }}
在“控制车”功能内,我们将使用模拟写入功能控制连接到PWM引脚的电机。在我们的变送器程序中,我们已将Nano的A0和A1引脚的模拟值转换为1到10、11到20、21到30和31到40,以分别控制汽车的前进,后退,左和右。以下程序用于向前控制机器人
if(received> = 1 && receive <= 10)//向前移动{int PWM_Value = map(received,1,10,min_speed,max_speed); AnalogWrite(R_MR,PWM_Value); AnalogWrite(L_MR,PWM_Value); }
同样,我们还可以为反向,向左和向右控制编写另外三个函数,如下所示。
if(received> = 11 && receive <= 20)// Break {int PWM_Value = map(received,11,20,min_speed,max_speed); AnalogWrite(R_MR,0); AnalogWrite(L_MR,0); } if(received> = 21 && receive <= 30)//向左转{int PWM_Value = map(received,21,30,min_speed,max_speed); AnalogWrite(R_MR,PWM_Value); AnalogWrite(L_MR,0); } if(received> = 31 && receive <= 40)//向右转{int PWM_Value = map(received,31,40,min_speed,max_speed); AnalogWrite(R_MR,0); AnalogWrite(L_MR,PWM_Value); }
Arduino RC Car的工作
完成代码后,将其上传到专业版。通过FTDI模块取出电池和电路板进行测试。启动您的代码,打开串行电池,您应该从变送器的操纵杆模块接收到该值。连接电池,电动机也应开始旋转。
您可以在本页底部的视频链接中找到该项目的完整工作。如果您有任何问题,请在评论部分中保留。您也可以使用我们的论坛来快速解决其他技术问题。