Arduino入门笔记(9):蓝牙模块及第一辆蓝牙遥控小车
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi
一、本次实验所需器材
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):蓝牙模块及第一辆蓝牙遥控小车的更多相关文章
- Arduino入门笔记(4):用蜂鸣器演奏音乐并配有LED闪烁
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.本次实验所需器材 1.Arduino板 https://item.taoba ...
- Arduino入门笔记(1):认识Arduino
转载请注明:@小五义http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 各种网站论坛里经常看到网友DIY各种遥控小车.机器人什么的,一直很好奇,很想学习一 ...
- Arduino入门笔记(3):单LED闪烁
转载请注明:@小五义http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 在搭建好arduino开发环境(http://www.cnblogs.com/xi ...
- Arduino入门笔记(6):温度传感器及感温杯实验
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.本次实验所需器材 1.Arduino板 :https://item.taob ...
- Arduino入门笔记(5):1602液晶实验(实现时钟)
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.本次实验所需器材 1.Arduino板 https://item.taoba ...
- Arduino入门笔记(8):利用12864和ADXL345学习重力感应控制
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.本次实验所需器材 1.Arduino UNO板 https://item.t ...
- Arduino入门笔记(7):利用1602、1302实现时钟和定时器
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 常常听到老妈在做饭时说“开锅15分钟后叫我一下”,为何不做个定时器,来提醒老妈呢 ...
- Arduino入门笔记(2):Arduino的开发和virtualbreadboard仿真环境
欢迎加入讨论群 64770604 1.开发环境 (1)下载开发环境 Arduino的开发环境从http://arduino.cc/en/Main/Software官网下载即可,分为windows版本. ...
- Arduino入门笔记【1】
刚刚接触这个东西只知道这是类似于单片机的开发板,可以做一些单片机实现或者不能实现的东西,但是比单片机要简单得多. Arduino到底是什么? 维基百科上的描述是:Arduino是一块开发板的微控制器和 ...
随机推荐
- 关于UltraWinGrid选中行只读设置
刚开始设置了 一些属性不起作用,后来检查下属性发现一旦对DataSource赋值 则属性会被重置 如果是通过绑定DataSet的方式 则需要再后面设置 ].Override.CellClickActi ...
- 《JavaScript DOM 编程艺术》读书笔记
<JS DOM 编程艺术>笔记 一. 三种节点 元素节点.文本节点.属性节点 二. 获取元素 1.document.getElementById 2.(element)document.g ...
- 初识Java作业
初识Java作业 一. 填空题 Java技术按照用途不同分为三大版本,分别是JavaSE. javaEE 和JavaMe Java虚拟机就是一个虚拟的用于执行 .class ...
- 关于latex编译中文不显示问题的解决方法。
我的编译环境是texlive2018 + texstudio 配置如图 默认编码格式为utf8 直接上代码 %\documentclass{article} %\usepackage{xeCJK} \ ...
- js 匿名函数立即执行问题
js立即执行函数写法理解 这篇真的写得很清楚了,不光括号可以将函数声明转换成函数表达式然后立即执行,!,+,-,=也都可以转换,但是可能会带来意外的结果,因此一般都用括号实现. 还有关于for (va ...
- log4net 本地环境没问题 生产环境无法输出日志
log4net输出日志大概分两块 1.程序代码编写问题 2.配置文件问题 当程序本地可以正常输出日志.配置文件也都正常可用的情况下,发布到生产环境后,有的程序可以输出日志,有的程序不可以输出,程序无问 ...
- 关于ajax 传递的参数
ajax 发送的数据,默认都是字符串,不能直接传递list(列表),或者dict(字典). 若要 传递list(列表),或者dict(字典),需要进行一些操作. list 需要进行列表序列化,在aja ...
- 【Redis】Redis学习(二) master/slave、sentinel、Cluster简单总结
项目中用到Redis,所以准备学习一下,感觉Redis的概念还是很多的,什么主从模式.sentinel模式.集群模式的,一下子都晕了,我觉得还是有必要先理清这些基本概念再说. 一.单节点实例 单节点实 ...
- EL表达式和标签
1.什么是EL expression language 表达式语言 特点: 语言简单,使用方便 .${表达式}. 提供自动类型转换的功能 如果返回结果为null时 String -- ”” Numbe ...
- 快速了解Vuex
提要:提起react就会想起其应用最广泛的redux状态管理工具,vue中的官方推荐的状态管理工具就是Vuex. 看到同事在鼓捣Vuex的东西,前面项目完成后也没有好好总结一下Vuex的知识,所有就再 ...