目录
疫情封城,在家隔离无聊,用以前的arduino UNO、蓝牙模块和马达配件等,制作了通过手机蓝牙控制运动的逗猫小车。



L298N继电器
电机驱动,驱动一般使用L298N,L298N 是一种双H桥电机驱动芯片,其中每个H桥可以提供2A的电流,功率部分的供电电压范围是2.5-48v,逻辑部分5v供电,接受5vTTL电平。现在有很多成品模块卖,而且价格也不贵,很适合大家diy智能小车。L298N模块多数都是长下边这个样子,这里要注意,L298N模块12v是给模块供电,5v是输出,意思就是L298N的模块接入12V电源,同时输出5V电源可以给其他模块供电。

- 输出A和输出B: 连接小车电机
- 12V + : 接电池盒子的正极
- GND: 接电池盒子的负极(如连了USB进行调试时,不接方形电池的DC线扣的原型)
- 5v+: 因为板载5V是使能的,通过杜邦线连接方形电池的DC线扣的方形部分
- IN1 ~ IN4: 按顺序接 Anrduin UNO 2,3,4,5 pin 口
需要注意的一点是:
- arduino必须和驱动板为同一电压源输入,例如我这里就是12v的电池输入,当然除了DC口也可以通过arduino上的vim口输入(在两个接地口下方)
- 如果L298N和arduino使用不同的电源供电的话,那么需要将arduino的GND和模块上的GND连接在一起,只有这样单片机上过来的逻辑信号才有个参考0点。此点非常重要
蓝牙模块
想要使用 Arduino 的蓝牙模块,首先要对蓝牙模块进行基本参数设置。基本参数设置主要包含:蓝牙名称、模式以及匹配密码等。设置蓝牙模块可以使用 USB-TTL 连接电脑使用串口调试软件进入 AT 模式进行设置,也可以使用 Arduino 连接蓝牙模块进行设置,本文主要介绍后一种方法。
在连接蓝牙的时候,要注意线的连接是否正确,检查清楚再进行通电,除此之外,还要主要不要让针脚短路,我在首次使用蓝牙模块的时候,因为没注意接线,导致一个蓝牙模块损坏了,只能发信息不能收信息,所以为了避免不必要的损失,这里要注意。
首先,将 Arduino 断电,然后按着蓝牙模块上的黑色按钮,再让 Arduino 通电,如果蓝牙模块指示灯按2秒的频率闪烁,表明蓝牙模块已经正确进入 AT 模式。
打开 Arduino IDE 的串口监视器,选择正确的端口,将输出格式设置为
然后,输入
接下来,我们即可对蓝牙模块进行设置,常用 AT 命令如下:
打开 Arduino IDE 的串口监视器,选择正确的端口,将输出格式设置为
Both: NL & CR
,波特率设置为 38400
,可以看到串口监视器中显示 BT is ready!
的信息。然后,输入
AT
,如果一切正常,串口显示器会显示 OK
。接下来,我们即可对蓝牙模块进行设置,常用 AT 命令如下:
AT+ORGL # 恢复出厂模式
AT+NAME=<Name> # 设置蓝牙名称
AT+ROLE=0 # 设置蓝牙为从模式
AT+CMODE=1 # 设置蓝牙为任意设备连接模式
AT+PSWD=<Pwd> # 设置蓝牙匹配密码
正常情况下,命令发送后,会返回
OK
,如果没有返回任何信息,请检查接线是否正确,蓝牙模块是否已经进入 AT 模式,如果上述两点都没有问题,可能是蓝牙模块的问题。设置完毕后,断开电源,再次通电,这时,蓝牙模块指示灯会快速闪烁,这表明蓝牙已经进入正常工作模式。


直接上手




#include
// Pin10 BT
// Pin11 BT
SoftwareSerial BT(10, 11);
char val;
int in1 = 2;
int in2 = 3;
int in3 = 4;
int in4 = 5;
void setup() {
// put your setup code here, to run once:
pinMode(in1,OUTPUT);
pinMode(in2,OUTPUT);
pinMode(in3,OUTPUT);
pinMode(in4,OUTPUT);
Serial.begin(38400);
Serial.println("bluetooth is ready!");
BT.begin(38400);
}
void loop() {
if (Serial.available()) {
val = Serial.read();
BT.print(val);}
if(val == 'f')
{//forward 向前转
go();}
if(val == 'b')
{ //stop 停止
back();}
if(val == 'l')
{ //forward 向左转
go_left();}
if(val == 'r')
{ //back 向右转
go_right();}
if(val == 's')
{ //stop
car_stop();}
val=0;
if (BT.available()) {
val = BT.read();
Serial.print(val);
}
}
void car_stop()
{
digitalWrite(in1,LOW);
digitalWrite(in2,LOW);
digitalWrite(in3,LOW);
digitalWrite(in4,LOW);
// delay(1000);
}
void go()
{
digitalWrite(in1,HIGH);
digitalWrite(in2,LOW);
digitalWrite(in3,LOW);
digitalWrite(in4,HIGH);
delay(1000);
Serial.print("Forward!!");
}
void back()
{
digitalWrite(in1,LOW);
digitalWrite(in2,HIGH);
digitalWrite(in3,HIGH);
digitalWrite(in4,LOW);
delay(1000);
Serial.print("Forward!!");
}
void go_left()
{
digitalWrite(in1,HIGH);
analogWrite(in2,LOW);
digitalWrite(in3,LOW);
digitalWrite(in4,LOW);
delay(1000);
Serial.print("Left");
}
void go_right()
{
digitalWrite(in1,LOW);
digitalWrite(in2,LOW);
digitalWrite(in3,HIGH);
analogWrite(in4,LOW);
delay(1000);
Serial.print("Right");
}