蓝牙逗猫小车
蓝牙逗猫小车

蓝牙逗猫小车

目录

疫情封城,在家隔离无聊,用以前的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 口

需要注意的一点是:

  1. arduino必须和驱动板为同一电压源输入,例如我这里就是12v的电池输入,当然除了DC口也可以通过arduino上的vim口输入(在两个接地口下方)
  2. 如果L298N和arduino使用不同的电源供电的话,那么需要将arduino的GND和模块上的GND连接在一起,只有这样单片机上过来的逻辑信号才有个参考0点。此点非常重要

蓝牙模块

想要使用 Arduino 的蓝牙模块,首先要对蓝牙模块进行基本参数设置。基本参数设置主要包含:蓝牙名称、模式以及匹配密码等。设置蓝牙模块可以使用 USB-TTL 连接电脑使用串口调试软件进入 AT 模式进行设置,也可以使用 Arduino 连接蓝牙模块进行设置,本文主要介绍后一种方法。

在连接蓝牙的时候,要注意线的连接是否正确,检查清楚再进行通电,除此之外,还要主要不要让针脚短路,我在首次使用蓝牙模块的时候,因为没注意接线,导致一个蓝牙模块损坏了,只能发信息不能收信息,所以为了避免不必要的损失,这里要注意。

首先,将 Arduino 断电,然后按着蓝牙模块上的黑色按钮,再让 Arduino 通电,如果蓝牙模块指示灯按2秒的频率闪烁,表明蓝牙模块已经正确进入 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 <SoftwareSerial.h> 
// 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"); 
}

				
			

发表回复

您的电子邮箱地址不会被公开。