Arduino入门笔记(9):蓝牙模块及第一辆蓝牙遥控小车

简介: 转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi  欢迎加入讨论群 64770604 一、本次实验所需器材 1、Arduino UNO板 https://item.

转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 

欢迎加入讨论群  64770604

一、本次实验所需器材

1、Arduino UNO板 https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-15820725129.16.AtgoEm&id=545093340395

2、蓝牙模块

3、蓝牙小车底盘(可从淘宝网购买)

4、L298驱动模块:1个

3、面包板:1个

二、蓝牙模块的使用

实验:给蓝牙模块发送h,回复i am here;发送b,回复see you.

硬件连接:

Untitled Sketch 2_bb

 

代码:

char getstr;
void setup()
{
  Serial.begin(9600);
}
void loop()
{
  getstr=Serial.read();
  if(getstr=='h')
  {
    Serial.println("I am here!");
  }
  else if(getstr=='b'){
    Serial.println("See you!");
  }
}

将以上代码写入arduino时,要注意先将蓝牙断开,写入完成后,再连上蓝牙,否则会出错。

手机端下载一个bluetooth spp或者蓝牙串口程序即可,这里我用的是http://www.mumayi.com/android-92724.html

然后通过手机与该蓝牙模块进行连接,一般默认连接码是1234或者0000。连接后,发送h,会显示I am here,发送b,会显示See you!

三、蓝牙遥控小车制作

1、从网上购买了蓝牙小车底盘,组装后如下图:

11

2、L298驱动模块

2222

该模块的IN1、IN2、IN3、IN4分别连接arduino的12、11、10、9接口,电源12V口接arduino的5V,GND接地。

例子:

char getstr;
int in1=12;
int in2=11;
int in3=10;
int in4=9;
//上面定义了板上的4个控制端,12一组,34一组
void _mRight(int pin1,int pin2)//当in1和in2中有一个接高位时,电机会向某一方向转动

{
  digitalWrite(pin1,HIGH);
  digitalWrite(pin2,LOW);
}
void _mLeft(int pin1,int pin2)//同上
{
  digitalWrite(pin1,LOW);
  digitalWrite(pin2,HIGH);
}
void _mStop(int pin1,int pin2)//紧急制动,实际就是将电机两个端短接了
{
  digitalWrite(pin1,HIGH);
  digitalWrite(pin2,HIGH);
}
void setup()
{
  Serial.begin(9600);
  pinMode(in1,OUTPUT);
  pinMode(in2,OUTPUT);
  pinMode(in3,OUTPUT);
  pinMode(in4,OUTPUT);
  //下面程序开始时让控制端都为高电平,电机保持不动。
  digitalWrite(in1,HIGH);
  digitalWrite(in2,HIGH);
  digitalWrite(in3,HIGH);
  digitalWrite(in4,HIGH);
}

void loop()
{
  getstr=Serial.read();
  if(getstr=='f')
  {
    Serial.println("go forward!");
    _mStop(in1,in2);
    _mStop(in3,in4);   
    _mRight(in1,in2);
    _mRight(in3,in4);
  }
  else if(getstr=='b'){
    Serial.println("go back!");
    _mStop(in1,in2);
    _mStop(in3,in4);
    _mLeft(in1,in2);
    _mLeft(in3,in4);
  }
  else if(getstr=='l'){
    Serial.println("go left!");
    _mStop(in1,in2);
    _mStop(in3,in4);
    _mRight(in1,in2);
    _mLeft(in3,in4);
  }
  else if(getstr=='r'){
    Serial.println("go right!");
    _mStop(in1,in2);
    _mStop(in3,in4);
    _mRight(in3,in4);
    _mLeft(in1,in2);
  }
  else if(getstr=='s'){
    Serial.println("Stop!");
    _mStop(in1,in2);
    _mStop(in3,in4);  
  }
}

注意,当输入f\b\l\r时,无论前往、后退、左转、右转,电机都是先停一下,再转,这样电机都流畅。

3、蓝牙模块

接法与二中蓝牙模块的使用接法相同。

4、超声波测距模块

连接方法是将VCC接5V,GND接地,trig接5口,Echo接6口。

5、硬件连接图

2014-3-12_20187-89

2014-3-12_201753-26

2014-3-12_201624-50

6、代码

char getstr;
int in1=12;
int in2=11;
int in3=10;
int in4=9;
//上面定义了板上的4个控制端,12一组,34一组
int TrigPin = 5; 
int EchoPin = 6;
float cm;
int i=0;//记录测量次数,每5次取一下平均值
float cmsum;//计算5次总值
float cmeve;//计算5次平均值

void _mRun(int pin1,int pin2)//电机右转,电机到底是右转还是左转取决于电机端的接线和控制脚的顺序
{
  digitalWrite(pin1,HIGH);
  digitalWrite(pin2,LOW);
}
void _mBack(int pin1,int pin2)//同上
{
  digitalWrite(pin1,LOW);
  digitalWrite(pin2,HIGH);
}
void _mStop(int pin1,int pin2)//紧急制动,实际就是将电机两个端短接了
{
  digitalWrite(pin1,HIGH);
  digitalWrite(pin2,HIGH);
}
 
void setup()
{
  Serial.begin(9600);
  pinMode(in1,OUTPUT);
  pinMode(in2,OUTPUT);
  pinMode(in3,OUTPUT);
  pinMode(in4,OUTPUT);
  pinMode(TrigPin, OUTPUT);
  pinMode(EchoPin, INPUT); 
  //下面程序开始时让控制端都为高电平,电机保持不动。
  digitalWrite(in1,HIGH);
  digitalWrite(in2,HIGH);
  digitalWrite(in3,HIGH);
  digitalWrite(in4,HIGH);
}

void loop()
{
  getstr=Serial.read();
  delayMicroseconds(60);
  digitalWrite(TrigPin, HIGH);
  delayMicroseconds(60);
  digitalWrite(TrigPin, LOW);
  
  cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm 
  cm = (int(cm * 100.0)) / 100.0; //保留两位小数 
  
  if (i==5){//连接测5次,计算平均值,如果小于10厘米则紧急停车
    i=0;
    cmeve=cmsum/5;
    cmsum=0;
    
    if (cmeve<10 and cmeve>0) {
      Serial.println(cmeve);
      _mStop(in1,in2);
      _mStop(in3,in4);
    } 
  }
  else {
    i=i+1;
    cmsum=cmsum+cm;
  }


  if(getstr=='f')
  {
    Serial.println("go forward!");
    _mStop(in1,in2);
    _mStop(in3,in4);    
    _mRun(in1,in2);
    _mRun(in3,in4);
  }
  else if(getstr=='b'){
    Serial.println("go back!");
    _mStop(in1,in2);
    _mStop(in3,in4); 
    
    _mBack(in1,in2);
    _mBack(in3,in4);
  }
  else if(getstr=='l'){
    Serial.println("go left!");
    _mStop(in1,in2);
    _mStop(in3,in4); 
    
    _mRun(in1,in2);
    _mBack(in3,in4);
  }
  else if(getstr=='r'){
    Serial.println("go left!");
    _mStop(in1,in2);
    _mStop(in3,in4); 
    
    _mRun(in3,in4);
    _mBack(in1,in2);
  }
  else if(getstr=='s'){
    Serial.println("Stop!");
    _mStop(in1,in2);
    _mStop(in3,in4);   
  }
}

7、视频

目录
相关文章
|
7月前
|
芯片
毕业设计 基于51单片机的手机蓝牙控制8位LED灯亮灭设计
毕业设计 基于51单片机的手机蓝牙控制8位LED灯亮灭设计
104 0
H8
|
物联网 数据安全/隐私保护 智能硬件
女朋友问: 你知道蓝牙耳机的原理吗?
蓝牙是一种无线通讯技术标准,用来让固定与移动设备,在短距离间交换资料,以形成个人局域网(PAN)。其使用短波特高频(UHF)无线电波,经由2.4至2.485GHz的ISM频段来进行通信。1994年由电信商(Ericsson)发展出这个技术。它最初的设计,是希望创建一个RS-232数据线的无线通信替代版本。
H8
458 0
|
2月前
|
监控 IDE 机器人
基于Nodemcu的手机控制小车
基于Nodemcu的手机控制小车
47 0
|
开发框架 JSON 物联网
Nanoframework 操作单片机蓝牙配置WIFI的案例
通过`Nanoframework`的蓝牙配置Wifi的名称和密码
146 0
|
传感器 Ubuntu Java
ESP-IDF 蓝牙开发实战 — 传感器数据上传及手机控制开发板
ESP32-C3 蓝牙部分我们学习了GATT,本文博主手把手带领大家使用 ESP32-C3的蓝牙做一个简单的小应用。
1354 0
ESP-IDF 蓝牙开发实战 — 传感器数据上传及手机控制开发板
|
IDE 物联网 开发工具
CH573第一篇:实现自拍杆蓝牙遥控器1
CH573第一篇:实现自拍杆蓝牙遥控器1
|
物联网 Android开发
聊聊身边的嵌入式,形态各异的手机蓝牙遥控器
聊聊身边的嵌入式,形态各异的手机蓝牙遥控器
|
传感器 存储 缓存
基于51单片机的蓝牙电子秤设计
基于51单片机的蓝牙电子秤设计
|
传感器 前端开发 机器人
LabVIEW Arduino无线蓝牙遥控智能车(项目篇—2)
智能小车是以轮子作为移动机构,并且能够实现自主行驶的机器人,又被称为轮式机器人。由于具有智能化的特点,可以应用于不适合人类工作的环境中,例如灾难救援、户外探险等。智能小车有别于遥控小车,因为后者需要操作人员来控制其转向、启停和前进后退,以及控制其速度,常见的模型小车,都属于这类遥控车。智能小车,则可以通过计算机编程来实现其对行驶方向、启停以及速度的控制,无须人工干预,也可以通过修改智能小车的程序来改变它的行驶方式。 ———————————————— 版权声明:本文为CSDN博主「不脱发的程序猿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:htt
基于wemos的Arduino环境WIFI控制小车前后左右源码
基于wemos的Arduino环境WIFI控制小车前后左右源码
149 0
基于wemos的Arduino环境WIFI控制小车前后左右源码