嘿,如果你正在制作一个基本的机器人设置,一个电机驱动器控制器板,它通过板载 MCU 控制电机驱动器并具有用于蓝牙连接的 HC01 BT 模块,那么这里有什么超级酷和有用的东西。
我在 PCB 上添加了四个安装孔,因此我可以添加 PCB 支架以将电机驱动器固定在电路板的顶部。使用支架是一种聪明的方法,因为我们可以使用这种方法添加多个模块,只需将它们堆叠在一排支架中即可。
我还在电路板的一侧添加了一个 HC-SR04 超声波传感器分线针,因此它可以用来制作一个避障机器人。
本文将介绍这款电机驱动器的构建过程,让我们开始吧。
以下是我在这个项目中使用的东西-
这是我准备的原理图,它由与 HC01 模块连接的最小 Atmega328PU 设置组成。在 Atmega328PU 和 HC01 之间,有一个 AMS1117 3.3V 稳压器,用于将 5V 从 VCC 降压到 3.3V 以使 HC01 工作。
我添加了一堆连接器,用于将东西与 atmega 连接,其中包括 ISP 输出,Atmega 的分支 SPI 引脚用于闪烁,然后我还添加了用于电机驱动器 IN1、IN2、IN3 和 IN4 的 CON4 与 D6、D9、D10 和D11。
我还添加了一些带 D2、D3 和 D4 的 LED 以及一个 CON4 插头引脚,用于将超声波传感器与该板连接。
完成原理图后,我将其转换为电路板文件。
至于设计,我制作了一个边缘有倒角的矩形板,还在板的中心放置了四个安装孔,这样我就可以使用 Standoffs 将 L298N 电机驱动器放置在这个 PCB 上。
完成设计后,我在PCBWAY的报价页面上传了Gerber数据,选择了红色的阻焊层颜色,然后下单。
下订单后,我在一周内收到了 PCB,PCB 质量非常好。
这种形状是完全随机的,所以很难制作,但他们在制作这个 PCB 方面做得非常出色,没有任何错误。
一定要检查一下,以更低的价格获得出色的 PCB 服务。
PCB组装过程将具有以下步骤。
第一步是在每个元件焊盘上涂抹焊膏。
我使用了普通的 Sn-Pb 焊膏,其熔化温度为 140 至 270 °C。
添加锡膏后,我们进入下一个过程,即“PICK & Place Process”
然后,我使用 ESD Tweeaser 小心地将每个 SMD 组件一个一个地挑选并放置在指定的位置,这需要大约 30 秒的时间,但结果是一个完美的 PCB,所有组件都放置在它们的位置。
在“PICK & Place Process”之后,我小心翼翼地将整个电路板抬起并放在我的 DIY SMT Hotplate 上,它也是自制的,就像这个项目一样。
几分钟后,当热板达到焊膏熔化温度时,所有组件都将通过此热回流工艺焊接。
然后我们从热板上取下 PCB 以冷却所有组件和电路板表面。
然后我通过 USB 端口插入 5V 电源以检查 HC01 是否工作,如果设置正常工作,HC01 一侧的 LED 将闪烁。
最后,我们将 THT 组件添加到 PCB,它们是 Atmega 插座和接头引脚。
完成后,我们的电路就完成了!
现在,此设置使用 Atmega328PU。Atmega328PU 有一个小十六进制文件,称为引导加载程序,类似于 BIOS。便宜的 atmega328PU 通常不附带预装的引导加载程序,因此我必须将引导加载程序刻录到 MCU 上,为此,我使用了我之前的一个项目,即基于 Arduino 的 Attiny Programmer。
该程序员是为将引导加载程序和 Flash 代码刻录到 Attiny MCU 中,使用上传到常规 Arduino Nano R3 的“Arduino as ISP Sketch”进行一些调整(在复位和 GND 之间添加 1uf Cap)
请参阅我以前的项目以制作此程序员并开始使用此闪烁方法。
我将 Atmega328PU 的 SPI 引脚通过 Arduino Nano 的 SPI 引脚通过一个插头插座连接在一起,并烧录 Atmega328PU 的引导程序,并上传 ULTRASONIC SENSO TEST SKETCH 用于测试 Atmega 芯片。
{
序列号.开始();
pinMode(trigPin,输出);
pinMode(echoPin,输入);
pinMode(LED,输出);
pinMode(led2,输出);
pinMode(led3,输出);
}
{
,距离;
数字写入(trigPin,低);
延迟微秒();
数字写入(trigPin,高);
延迟微秒();
数字写入(trigPin,低);
持续时间=脉冲输入(回声针,高);
距离 = (持续时间/ ) / ;
(距离 <= ){
数字写入(领导,高);
}
{
数字写入(领导,低);
}
(距离 < ){
数字写入(led2,高);
}
{
数字写入(led2,低);
}
(距离 < ){
数字写入(led3,高);
}
{
数字写入(led3,低);
}
延迟();
}
我将 HC-SR04 超声波传感器模块添加到其分配的 Header Pin 插座中,并上传了我制作的测试草图。当我们将任何东西放在它前面 30 厘米的距离处时,第一个 LED 会发光,通过减小其他两个 LED 发光的距离。
垃圾;
字符串输入字符串 = ;
{
序列号.开始();
pinMode(,OUTPUT)也应如此;
}
{
(Serial.available()){
(Serial.available())
{
inChar = ( )Serial.read();
inputString += inChar;
}
Serial.println(inputString);
(Serial.available() > )
{
垃圾 = Serial.read() ; }
}
(inputString == ){
digitalWrite( , HIGH);
}
(inputString == ){
digitalWrite( , LOW);
}
输入字符串 = ;
}
检查超声波传感器后,我将BT测试草图上传到MCU并使用BT终端APP与HC01连接。
通过BT终端APP向HC01发送“on”,LED点亮,发送“off”将其关闭。
添加带 PCB 支架的电机驱动器
在测试板工作正常后,我继续下一步,即使用 PCB Standoffs 将 L298N 电机驱动器添加到主板。
然后我在电机控制器的 VCC GND 和 5V 以及电机驱动器的 VCC GND 和 5V 之间添加了电线。
然后我在电机控制器的控制引脚和 Atmega328pu 的 Pwm 引脚之间添加了电线。
设置完成,现在我们可以将电池添加到电机驱动器的 VCC 和 GND 端口,并将电机端子添加到电机驱动器的连接器。
motorLpin1 = ;
motorLpin2 = ;
motorRpin1 = ;
motorRpin2 = ;
LED1 = ;
LED2 = ;
LED3 = ;
{
序列号.开始();
Serial.flush();
pinMode(motorLpin1,输出);
pinMode(motorLpin2,输出);
pinMode(电机Rpin1,输出);
pinMode(电机Rpin2,输出);
pinMode(LED1,输出);
pinMode(LED2,输出);
pinMode(LED3,输出);
}
{
字符串输入= ;
(Serial.available()){
输入+=()Serial.read();
延迟();
}
(输入== ){
马达停止();
}
(输入== ){
马达前进();
}
(输入== ){
电机后退();
}
(输入== ){
左电机();
}
(输入== ){
右电机();
}
}
{
数字写入(motorLpin1,HIGH);
数字写入(motorLpin2,LOW);
数字写入(motorRpin1,HIGH);
数字写入(电机Rpin2,低);
数字写入(LED1,高);
数字写入(LED2,低);
数字写入(LED3,低);
}
{
数字写入(motorLpin1,LOW);
数字写入(motorLpin2,HIGH);
数字写入(电机Rpin1,低);
数字写入(motorRpin2,HIGH);
数字写入(LED1,低);
数字写入(LED2,高);
数字写入(LED3,低);
}
{
数字写入(motorLpin1,HIGH);
数字写入(motorLpin2,LOW);
数字写入(电机Rpin1,低);
数字写入(motorRpin2,HIGH);
数字写入(LED1,低);
数字写入(LED2,低);
数字写入(LED3,高);
}
{
数字写入(motorLpin1,LOW);
数字写入(motorLpin2,HIGH);
数字写入(motorRpin1,HIGH);
数字写入(电机Rpin2,低);
数字写入(LED1,低);
数字写入(LED2,低);
数字写入(LED3,高);
}
{
数字写入(motorLpin1,LOW);
数字写入(motorLpin2,LOW);
数字写入(电机Rpin1,低);
数字写入(电机Rpin2,低);
数字写入(LED1,低);
数字写入(LED2,低);
数字写入(LED3,低);
}
我将上面的草图上传到 Atmega 中,然后添加了一个带有电机驱动器连接器的齿轮直流电机,并添加了一个 12V 电池组来为整个系统供电。
为了控制电机,我正在使用与 HC01 模块连接的 BT 终端应用程序向 MCU 发送“F”表示前进,“B”表示后退。
为了停止电机,我们通过 BT 端子发送“S”,电机停止旋转。
此电机控制器的下一步或下一步用途将是构建一个机器人,我目前正在设计一个将使用此控制器设置的机器人,敬请期待。
如果您喜欢机器人,请查看我以前的机器人项目-
谢谢,PCBWAY 支持这个项目,如果你需要更好的 PCB 服务以降低成本,请检查它们,我很快就会带着新项目回来。
和平
|
int motorLpin1 = 6; |
|
int motorLpin2 = 9; |
|
int motorRpin1 = 10; |
|
int motorRpin2 = 11; |
|
int LED1 = 2; |
|
int LED2 = 3; |
|
int LED3 = 4; |
|
|
|
void setup() |
|
{ |
|
Serial.begin(9600); |
|
Serial.flush(); |
|
pinMode(motorLpin1,OUTPUT); |
|
pinMode(motorLpin2,OUTPUT); |
|
pinMode(motorRpin1,OUTPUT); |
|
pinMode(motorRpin2,OUTPUT); |
|
pinMode(LED1,OUTPUT); |
|
pinMode(LED2,OUTPUT); |
|
pinMode(LED3,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=="TL"){ |
|
MotorLeft(); |
|
} |
|
else if(input=="TR"){ |
|
MotorRight(); |
|
} |
|
|
|
} |
|
|
|
void MotorForward(void) |
|
{ |
|
digitalWrite(motorLpin1,HIGH); |
|
digitalWrite(motorLpin2,LOW); |
|
digitalWrite(motorRpin1,HIGH); |
|
digitalWrite(motorRpin2,LOW); |
|
digitalWrite(LED1,HIGH); |
|
digitalWrite(LED2,LOW); |
|
digitalWrite(LED3,LOW); |
|
} |
|
|
|
void MotorBackward(void) |
|
{ |
|
|
|
digitalWrite(motorLpin1,LOW); |
|
digitalWrite(motorLpin2,HIGH); |
|
digitalWrite(motorRpin1,LOW); |
|
digitalWrite(motorRpin2,HIGH); |
|
digitalWrite(LED1,LOW); |
|
digitalWrite(LED2,HIGH); |
|
digitalWrite(LED3,LOW); |
|
} |
|
void MotorLeft(void) |
|
{ |
|
digitalWrite(motorLpin1,HIGH); |
|
digitalWrite(motorLpin2,LOW); |
|
digitalWrite(motorRpin1,LOW); |
|
digitalWrite(motorRpin2,HIGH); |
|
digitalWrite(LED1,LOW); |
|
digitalWrite(LED2,LOW); |
|
digitalWrite(LED3,HIGH); |
|
} |
|
void MotorRight(void) |
|
{ |
|
|
|
digitalWrite(motorLpin1,LOW); |
|
digitalWrite(motorLpin2,HIGH); |
|
digitalWrite(motorRpin1,HIGH); |
|
digitalWrite(motorRpin2,LOW); |
|
digitalWrite(LED1,LOW); |
|
digitalWrite(LED2,LOW); |
|
digitalWrite(LED3,HIGH); |
|
|
|
} |
|
void MotorStop(void) |
|
{ |
|
|
|
digitalWrite(motorLpin1,LOW); |
|
digitalWrite(motorLpin2,LOW); |
|
digitalWrite(motorRpin1,LOW); |
|
digitalWrite(motorRpin2,LOW); |
|
digitalWrite(LED1,LOW); |
|
digitalWrite(LED2,LOW); |
|
digitalWrite(LED3,LOW); |
|
|
|
} |
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !