转载请注明:@小五义 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.

硬件连接:

代码:

char getstr;
void setup()
{
Serial.begin();
}
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、从网上购买了蓝牙小车底盘,组装后如下图:

2、L298驱动模块

该模块的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、硬件连接图

6、代码

char getstr;
int in1=;
int in2=;
int in3=;
int in4=;
//上面定义了板上的4个控制端,12一组,34一组
int TrigPin = ;
int EchoPin = ;
float cm;
int i=;//记录测量次数,每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();
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();
digitalWrite(TrigPin, HIGH);
delayMicroseconds();
digitalWrite(TrigPin, LOW); cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
cm = (int(cm * 100.0)) / 100.0; //保留两位小数 if (i==){//连接测5次,计算平均值,如果小于10厘米则紧急停车
i=;
cmeve=cmsum/;
cmsum=; if (cmeve< and cmeve>) {
Serial.println(cmeve);
_mStop(in1,in2);
_mStop(in3,in4);
}
}
else {
i=i+;
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、视频

Arduino入门笔记(9):蓝牙模块及第一辆蓝牙遥控小车的更多相关文章

  1. Arduino入门笔记(4):用蜂鸣器演奏音乐并配有LED闪烁

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

  2. Arduino入门笔记(1):认识Arduino

    转载请注明:@小五义http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 各种网站论坛里经常看到网友DIY各种遥控小车.机器人什么的,一直很好奇,很想学习一 ...

  3. Arduino入门笔记(3):单LED闪烁

    转载请注明:@小五义http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 在搭建好arduino开发环境(http://www.cnblogs.com/xi ...

  4. Arduino入门笔记(6):温度传感器及感温杯实验

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

  5. Arduino入门笔记(5):1602液晶实验(实现时钟)

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

  6. Arduino入门笔记(8):利用12864和ADXL345学习重力感应控制

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

  7. Arduino入门笔记(7):利用1602、1302实现时钟和定时器

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 常常听到老妈在做饭时说“开锅15分钟后叫我一下”,为何不做个定时器,来提醒老妈呢 ...

  8. Arduino入门笔记(2):Arduino的开发和virtualbreadboard仿真环境

    欢迎加入讨论群 64770604 1.开发环境 (1)下载开发环境 Arduino的开发环境从http://arduino.cc/en/Main/Software官网下载即可,分为windows版本. ...

  9. Arduino入门笔记【1】

    刚刚接触这个东西只知道这是类似于单片机的开发板,可以做一些单片机实现或者不能实现的东西,但是比单片机要简单得多. Arduino到底是什么? 维基百科上的描述是:Arduino是一块开发板的微控制器和 ...

随机推荐

  1. ElasticSearch 使用小结

    写在前面 要做个元数据服务,包括存储和查询.元数据除了一些基本字段外,其他格式是自由的,存储输入为一个JSON形式.比如下面是一个文件对象的元数据: { "name":" ...

  2. 【 js 基础 】【 源码学习 】backbone 源码阅读(三)

    最近看完了 backbone.js 的源码,这里对于源码的细节就不再赘述了,大家可以 star 我的源码阅读项目(https://github.com/JiayiLi/source-code-stud ...

  3. Software-Defined Networking A Comprehensive Survey --阅读_day2

    3. 什么是SDN?(WHAT IS SOFTWARE-DEFINED NETWORKING?) The term SDN was originally coined to represent the ...

  4. js-权威指南-Web套接字

    HTTP是一种无状态的协议,,由客户端请求和服务端响应组成.HTTP实际上是比较特殊的网络协议. 大多数基于因特网的网络连接通常包含长连接和基于TCP套接字的双向消息交换.让不信任的客户端脚本访问底层 ...

  5. Ubuntu16.10上安装NodeJS6.9.2

    1.下载 https://nodejs.org/en/download/ 2.解压 tar -xJf node-v6.9.2-linux-x64.tar.xz 3. 移到通用的软件安装目录 /opt/ ...

  6. windows 10安装jdk8

    1.下载jdk,选择jdk软件版本和对应windows 32/64位版本 jdk下载链接:https://www.oracle.com/technetwork/java/javase/download ...

  7. Android:Error:Execution failed for task ':app:clean'. > Unable to delete directory

    as  clean项目之后有时候会报错. 可以找得到目录删掉,然后重启as,但是下次clean可能又会报类似的错误. 解决方法如下: 进入File-Setting-Build,Execution,De ...

  8. RecyclerView-- 侧滑删除和拖动排序

    实现这么个功能我们不需要再去继承RecyclerView,只需要去了解ItemTouchHelper这个类即可,接下来我们就去看看都有些什么 ItemTouchHelper.Callback 默认需要 ...

  9. [WPF 容易忽视的细节] —— x:Name与Name属性

    一.前言 WPF使用XAML来对界面进行编写,界面与后台逻辑分离.我们也可以写Style.Trigger来实现一些界面效果, 这些都是通过Name来定位控件的,例如Setter.TargetName. ...

  10. Software Development Engineer, RDS Database Engines, Seattle

    DESCRIPTION About UsAmazon Aurora is an exciting new area of innovation for AWS, and the PostgreSQL- ...