控制/MCU
在开发机器人项目时,电机是整个项目中最重要的部分之一,并且总是需要多个电机。但是微控制器板的 GPIO 引脚不允许您提取电机所需的电流量。这就是使用电机驱动器 IC 的原因。您可以通过使用一些电子元件来构建电机驱动器电路,或者您可以构建一个几乎现成的解决方案,即电机驱动器屏蔽。
在这个 DIY 教程中,我们将构建一个 NodeMCU Motor Driver Shield 来驱动直流电机。此电机驱动器扩展板包括一个 L293D 电机驱动器 IC、一个用于打开/关闭电源的 6 针开关、一个用于调节 5V 电压的 LM7805 稳压器,以及一些用于传感器、继电器等的额外针脚。
NodeMCU 电机护罩所需的组件:
节点单片机
L293D电机驱动IC
7805稳压器
电容器(1×0.1µf、1×0.33µf、1×10µf)
1× 220 Ω 电阻器
16针IC底座
2×螺丝端子
1× LED
1× DC 电源插孔母头
NodeMCU 电机驱动器屏蔽电路图
L293D Motor Driver Shield的完整原理图如下所示。原理图是使用 EasyEDA 绘制的。
此电机驱动器扩展板由 L293D 电机驱动器 IC、用于打开/关闭电源的 6 针开关和用于调节 5V 的 LM7805 稳压器组成。它可以控制两个直流电机。NodeMCU 数字引脚 D3 和 D4 连接到左电机,数字引脚 D5 和 D6 连接到右电机。此外,此屏蔽板还具有用于传感器、继电器或其他设备的额外插头引脚。
为 NodeMCU 电机驱动器屏蔽制造 PCB
原理图完成后,我们可以继续布置 PCB。您可以使用您选择的任何 PCB 软件来设计 PCB。我们已经使用 EasyEDA 为这个项目制造 PCB。您可以通过从“层”窗口中选择层来查看 PCB 的任何层(Top、Bottom、Topsilk、bottomsilk 等)。除此之外,您还可以获得 PCB 的 3D 模型视图,了解它在制造后的外观。下面是 Pi Motor Driver HAT PCB 顶层和底层的 3D 模型视图。
组装NodeMCU 电机驱动器屏蔽 PCB
板子的顶层和底层如下图所示:
在确保轨道和脚印正确之后。我继续组装PCB。完全焊接的电路板如下图所示:
NodeMCU电机驱动代码说明
在这个项目中,我们正在对 NodeMCU 进行编程,以在两秒的时间间隔内同时驱动正向、反向、向左和向右方向的两个直流电机。完整的代码在文档末尾给出。在这里,我们将解释代码的一些重要部分。
通过定义连接电机引脚的引脚开始代码。在这里,我将电机 A 的输入 1 连接到 D3,输入 2 连接到 D4,电机 B 的输入 1 连接到 D5,输入 2 连接到 D6。
常量 int inputPin1 = D3; 常量 int inputPin2 = D4; 常量 int inputPin3 = D5; 常量 int inputPin4 = D6;
在setup() 函数中,将电机 A 和电机 B 的所有四个引脚定义为输出。
无效设置() { pinMode(inputPin1, OUTPUT); pinMode(输入Pin2,输出); pinMode(inputPin3, OUTPUT); pinMode(inputPin4, OUTPUT); }
接下来,在loop()函数内部,在两秒的时间间隔内同时驱动两个直流电机正向、反向、向左和向右方向。下表显示了电机方向的输入引脚状态组合:
无效循环()
{ //向前 数字写入(输入引脚1,高); 数字写入(输入引脚2,低); 数字写入(输入引脚3,高); 数字写入(输入引脚4,低); 延迟(2000); //剩下 数字写入(输入引脚1,低); 数字写入(输入引脚2,低); 数字写入(输入引脚3,高); 数字写入(输入引脚4,低); 延迟(2000); //正确的 数字写入(输入引脚1,高); 数字写入(输入引脚2,低); 数字写入(inputPin3,低); 数字写入(输入引脚4,低); 延迟(2000); //撤销 数字写入(输入引脚1,低); 数字写入(输入引脚2,高); 数字写入(inputPin3,低); digitalWrite(inputPin4, HIGH); 延迟(2000); //停止 数字写入(输入引脚1,低); 数字写入(输入引脚2,低); 数字写入(inputPin3,低); 数字写入(输入引脚4,低); 延迟(2000); }
测试 NodeMCU 电机驱动器屏蔽
完成 PCB 组装后,将代码上传到 NodeMCU,然后将 L293D IC 和 NodeMCU 安装在驱动器屏蔽上。如果一切顺利,连接到 NodeMCU 的直流电机将每两秒同时向左、前、右和反向移动。
//电机A
常量 int inputPin1 = D3;
常量 int inputPin2 = D4;
//电机B
常量 int inputPin3 = D5;
常量 int inputPin4 = D6;
无效设置()
{
pinMode(inputPin1, OUTPUT);
pinMode(输入Pin2,输出);
pinMode(inputPin3, OUTPUT);
pinMode(inputPin4, OUTPUT);
}
无效循环()
{
//向前
数字写入(输入引脚1,高);
数字写入(输入引脚2,低);
数字写入(输入引脚3,高);
数字写入(输入引脚4,低);
延迟(2000);
//剩下
数字写入(输入引脚1,低);
数字写入(输入引脚2,低);
数字写入(输入引脚3,高);
数字写入(输入引脚4,低);
延迟(2000);
//正确的
数字写入(输入引脚1,高);
数字写入(输入引脚2,低);
数字写入(inputPin3,低);
数字写入(输入引脚4,低);
延迟(2000);
//撤销
数字写入(输入引脚1,低);
数字写入(输入引脚2,高);
数字写入(inputPin3,低);
digitalWrite(inputPin4, HIGH);
延迟(2000);
//停止
数字写入(输入引脚1,低);
数字写入(输入引脚2,低);
数字写入(inputPin3,低);
数字写入(输入引脚4,低);
延迟(2000);
}
全部0条评论
快来发表一下你的评论吧 !