Arduino编程控制与应用课件:完成蓝牙控制功能的实现_第1页
Arduino编程控制与应用课件:完成蓝牙控制功能的实现_第2页
Arduino编程控制与应用课件:完成蓝牙控制功能的实现_第3页
Arduino编程控制与应用课件:完成蓝牙控制功能的实现_第4页
Arduino编程控制与应用课件:完成蓝牙控制功能的实现_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Arduino

编程控制与应用Arduino

智能控制的应用完成蓝牙控制功能的实现在日常生活中,我们有许多用到蓝牙这项功能的智能设备,例如蓝牙耳机,蓝牙音响,在家居方面还有各种各样的蓝牙设备。同学们对使用蓝牙来远程控制设备的技术是不是也很好奇,今天我们就会使用Arduino

来逐步揭开蓝牙远程控制的神秘面纱。导入一、蓝牙技术二、HC02

蓝牙模块目

录蓝牙是一种低功耗、短距离的无线通信技术,目前广泛应用在耳机、音箱、键盘鼠标等数字设备的通信连接中。蓝牙技术位于全球通用的2.4GHzISM频段,其数据传输速率为1Mbps。(一)定义一、蓝牙技术蓝牙技术规定,每一对设备之间进行蓝牙通信时,必须一个为主角色,另一个为从角色。通信时,主设备主动查找,发起配

对,建立链接,然后双方才能开始收发数据。理论上一个蓝牙主

设备可以同时与7个蓝牙从设备进行通信。(二)通信方式一、蓝牙技术套件内的串口蓝牙模块扩展板采用了HC02蓝牙模块,基于蓝牙2.0版本研发,兼容BLE,双模,高稳定性,超低功耗,工业级的

蓝牙数传模块。(一)电气特性二

、HC02蓝牙模块二

、HC02

蓝牙模块HC02蓝牙模块的电气特性有:1.模块尺寸2.通讯接口

3.波特率

4.发射功率5.空中速率6.通信电流

7.工作湿度8.工作频段9.工作电压10.通信电平

11.参考距离12.天线接口

13.接收灵敏度

14.工作温度二

、HC02

蓝牙模块1.模块尺寸

2.通讯接口27mmx

13mmUART3.波特率1200~115200

bps4.发射功率6dBm

(

)7.工作湿度10%~90%5.空中速率2Mbps6.通信电流30mA二

、HC02

蓝牙模块二

、HC02蓝牙模块8.工作频段

9.工作电压2.4G3.0V~3.6V10.通信电平3.3V

TTL11.参考距离10m13.接收灵敏度-85dBm@2Mbps13.工作温度-25℃~+75°℃12.天线接口内置PCB

天线二

、HC02

蓝牙模块用户无需关心复杂的无线通信配置以及传输算法,只需要通过TTL

串口连接到设备。HC02蓝牙模块只能作为从机使用,可跟笔记本电脑、手机等蓝牙主设备配对后连接进行数据传输,连接原理如下图所示。unRXD支持Androdi4.3、iphone

4s以上版本vcCGND+3.3V+3.3V(二)连接原理二

、HC02

蓝牙模块数据透传单片机MCU等设备蓝牙模块(从机)任务实施Task

Implementation序号软件及硬件名称数量1Arduino

IDE/2联网的电脑1台/人3键盘1块/人4鼠标1块/人5Arduino控制开发套件1套/人6USB串口线1根/人(一)软件及硬件准备一、任务准备一

、任务准备火

(二)场地设备准备任务实施前需要做好场地防护准备以及检查实训场地和设备设施是否及存在安全隐患,如不正常请汇报老师并进行处理方可实施任务。(三)安全防护准备1

1.注意Arduino

控制开发套件与电脑的连接;2

2.注意连接端口的匹配;3

3.注意Arduino

控制开发套件的供电;4.注意使用含有库文件的程序时,检查Arduino

IDE中是否存在该库文件,4若无则要添加。步骤1:Arduino

控制开发套件线束连接首先给Arduino控制开发套件供上220V电,

通过旋钮使内部电源B输出的电压为12V左右,再

将线控小车驱动板与电源B

接通,最后将第一块

Arduino

开发板通过USB连接线与电脑连接。电压输出口连接220V电源舵机开关(一)控制电路连接二、实施步骤步骤2:在只连接Arduino

开发板的情况下,上传文件并等成功后再安装其它扩展板。因为安装

上扩展板后开发板上的RX

和TX

的管脚会被占用,将会导致程序上传不了。(一)控制程序编写与上传二、实施步骤二、实施步骤(二)控制电路连接◎

sketch

jun21a|Arduino

1.8.13

文件编辑项目工具帮助上传代码打开文件新建支档此处编译的时候有进度提示编译结果提示区域步骤1:打开Arduino

IDE软件,进入界面。当前编辑文档名称代码编写区域sketch

jun21as保存文档步骤2:在工具-端口-选择对应的端口。若分不清端口,先把开发板连接上,查看端口,有COM1

、COM3

、COM4

、COM5

、COM6;

断开开发板连接,查看端口,有COM3、COM4、COM5

、COM6;

少了一个COM10端口,那么COM10就是对应的端口。302泪IArduino

1.8.13

一102工具

帮助

泪Arduino

1.8.13工具帮助0(13()000sri200自动格式化

Ctrl+T项目存档修正编码并重新加载管理库

…Ctrl+Shift+I串口监视器Ctrl+Shift+M串口绘图器

Ctrl+Shift+L50(13()izi自动格式化项目存档修正编码并重新加载

管理库…串口监视器串口绘图器Ctrl+TCtrl+Shift+lCtrl+Shift+MCtrl+Shift+LWifFi101/WiFiNINAFirmwareUpdaterWiFi101/WiFiNINAFirmwareUpdater开发板:"Arduino

Uno"开发板:"Arduino

Uno°端口串行端口200ri0端口串行端口COM3COM4COM5COM6取得开发板信息COM100

取得开发板信息编程器:“AVRISP

mkl1-烧录引导程序COM3COM4COM5COM6编程器:"AVRISP

mkl"烧录引导程序(二)控制电路连接二、实施步骤>>步骤1:新建一个文档,//后的代码可删除;在【代码编写区域】中的viodsetup下方输入如图

所示代码。(三)蓝牙模块控制使用sketch_mar12a1//初始化函数2

void

setup(){Serial.begin

(9600);//

设置串口波特率为96004

for(inti=2;i<=10;i++)(//使

用for

循环加2-10号引脚设置为输出模式pinMode(i,OUTPUT);二、实施步骤步骤2:在【代码编写区域】中输入"voidLED(int

num){”,并在其下方输入如图所示代码pinMode(i,

OUTPUT);8//自定义函数,用来显示点亮LED,

可传入参数,该参数作为需要点亮的引脚号9yoidLED(intnum)(digitalwrite

(num,HIGH);

delay

(500);digitalwrite

(num,LOW);

delay

(500);(三)蓝牙模块控制使用二、实施步骤(9600);//设置串口波特率为9600i=2;i<=10;i++)(//

使用for

循环加2-10号引脚设置为输出模式2

void

setup()(Serial.beginfor

(intsketch_mar12a1//初始化函数12sketch_mar12a16

void

loop(){//if

函数判断串口是否有接收到数据if(Serial.available()){int

cmd=

Serial.parseInt();//

将接收的整数数值保存在整数型变量cmd中switch(cmd)(

//

使用switch语句判断cmd的数值case

2:

//

当cmd等于2时LED(2);//

调用LED

函数并传入参数2break

;//

退出循环case

3:LED(3);break;case4:LED(4);break;case

5:LED(5);break;case

6:LED(6);break;case7:LED(7);break;case

8:LED(8);break;case

9:LED(9);break;case

10:LED(10);break;步骤3:最后在

“viod

loop(){”下方输入如图所示代码。(三)蓝牙模块控制使用二、实施步骤步骤4:单击“上传”按钮,通过USB转串口芯片将程序烧写到控制板的主控芯片中;如果操

作顺利,将出现“上传成功”的提示。◎

sketchjun29a|Arduino

1.8.13

文件

编辑

项目

工具

帮助sketch

jun29as

点击上传

void

setup

()(Serial.begin(9600);for(inti=2;i<=10;i++){pinMode(i,

OUTPUT);void

LED(int

num){digitalwrite(num,HIGH);delay(500);digitalWrite(num,

LOW);delay(500);void

loop()(if(

Serial.available

()>0){switch(cmd){(三)蓝牙模块控制使用二、实施步骤int

cmd=

Serial.parseInt

();步骤5:上传成功后,将串口蓝牙模块扩展板和流水灯多功能扩展板通过PCB

叠层板连接在一起

并安装在开发板上。(三)蓝牙模块控制使用二、实施步骤步骤6:连接蓝牙,在蓝牙调试器APP

中连接HC-02,点击对话模式输入2、3、4、5、6、7、8

、9、10,流水灯多功能扩展板上的LED12、11、10、9、8、7、6、5、4、3会被对应的点亮。二、实施步骤(三)蓝牙模块控制使用2~10二

、实施步骤(三)蓝牙模块控制使用步骤7:控制程序解析(1)在初始化函数中设置串口通信波特率,利用for循环将2—10号管脚定义为

输出模式。(2)自定义带传递参数的子函数LED

来控制LED

灯闪烁,其传递参数的值代表对应LED灯连接ArduinoUNO板的管脚号。(

3

)

在loop

函数中,首先用if函数判断串口是否有数据输入,若有则将该值存在

变量cmd中,接着switch语句根据cmd

的值调用子函数使对应的LED

灯闪烁。//初始化函数void

setup(){Serial.begin

(9600);//

设置串口波特率为9600for

(int

i=2;i<=10;i++){//使用for

循环加2-10号引脚设置为输出模式pinMode

(i,OUTPUT);//自定义函数,用来显示点亮LED,可传入参数,该参数作为需要点亮的引脚号voidLED(int

num){digitalwrite

(num,

HIGH);delay(500);digitalwrite

(num,LOW);delay(500);//1loop

循环函数void

loop(){//if函数判断串口是否有接收到数据if(

Serial.available

()){int

cmd=Serial.parseInt

();//将接收的整数数值保存在整数型变量cmd中switch

(cmd){//

使用switch

语句判断cmd的数值case

2:

//

当cmd

等于2时LED(2);//

调用LED

函数并传入参数2break

;//

退出循环case

3:LED(3);break;(三)蓝牙模块控制使用case

4:LED(4);

break;

case

5:LED(5);|

break;

case6:

LED(6);

break;case

7:

LED(7);

break;

case

8:LED(8);

break;case

9:

LED(9);

break;case

10:LED(10);break;二、实施步骤步骤1:新建一个文档,//后的代码可删除;在【代码编写区域】中输入如图所示代码。8/*定义变量*/9int

outputPwm;

//

定义左右电机脉冲值对应变量10

int

targetPwm

=100;

//定义额定转速对应的pwm值11

int

angle,pulsewidth;//定义两个整数型变量用来保存舵机角度值和脉宽值12

boolea

n

carState

=true;//定义一个布尔变量,用做前进后退的标志(前进为true)13

boolean

carstop=true;//定义一个布尔变量,用做停车的标志(停车为true)14

char

cmd;//

定义一个字符变量来储存操作字符

15(四)蓝牙远程控制//左电机转速控制//左电机正反转控制(0正转、1反转)

//右电机转速控制//右电机正反转控制(0正转、1反转)//舵机引脚1/*定义电机引脚*/2#define

motor_left9

3#define

motor_left16

4

#define

motor_right

105

#define

motor_right111

6/*定义舵机引脚*/7const

int

servopin

=5;二、实施步骤BluetoothControl_motorDrive步骤2:然后在【代码编写区域】"voidsetup({”

下方输入如图所示代码。BluetoothControl_motorDrivevoid

setup(){1

7

Serial

.

begin(9600);18

pinMode(

motor_left,

OUTPUT);19

pinMode(motor_left1,OUTPUT);20

pinMode(motor_right,

OUTPUT);2

1

pinMode(motor_right1,OUTPUT);22

pinMode(servopin,

OUTPUT);

23}24(四)蓝牙远程控制二、实施步骤25void

loop(){26if(Serial.available())[//

如果硬件串口有数据cmd=Serial.read

();//读取该数据并赋给cmdif

(cmd==

'W'

){//

如果cmd

等于W则执行以下命令Serial.print1n("Forward");//在串口监视器打印"Forward"servoRun(90);//舵机转动到90°的位置31

forward();

//

调用前进函数

3233

else

if

(cmd==

'S'){34

Serial

.

print1n("Backwards");35

servoRun(90);//angle

=90;36

backward();

3738

else

if(cmd

==

'A'){39

Serial

.println

("Turn

left");40

servoRun(70);//angle=60;

4142

else

if(cmd=='D'

){43

Serial

.println

("Turn

right");44servoRun(100);//angle=110;

4546

else

if(cmd=='T'

){47

Serial.println

("Stop"

);48

Stop();49步骤3:接着在【代码编写区域】中的

"viod

loop(){"

下方

输入如图所示代码。else

if(cmd

=='I'){Serial

.println

("speed

up");if

(carStop==false

){

rg(

ate

=

电)机{PWM加10forward();else{backward();elseif(cmd==

'M'){Serial

.println

("Speed

cut");

if

(carStop==false

){targetPwm

-=10;

//

电机PWM减10else{backward();ue;//r0t1carStetPwmifta(四)蓝牙远程控制二、实施步骤515253545556575859606163656768697072737475}if(carState

==

true

){

forward();BluetoothControl_motorDrive§步骤4:再在【代码编写区域】中输入如图所示的舵机驱动子函数servoRun

和前进子函数forward代码。77

void

servoRun(int

myangle){//舵机驱动函数for

(inti=0;i<=30;i++){pulsewidth=(myangle*11)+500;//将角度转化为500-2480的脉宽值80

digitalWrite(servopin,HIGH);//将舵机接口电平至高81

delayMicroseconds

(pulsewidth);//

延时脉宽值的微秒数82

digitalWrite

(servopin

,LOW

);//将舵机接口电平至低83

delay

(20-pulsewidth/1000);

8485

}

8687

void

forward(){//前进子函数88

carstate=true;/7

标志车辆处于前进状态89

carStop

=false

;outputPwm=

min

(255,max

(20,targetPwm));9

1/*电机执行*/92

analogWrite

(motor_left,outputPwm);93

digitalWrite

(motor_left1,0);94

analogWrite

(motor_right,outputPwm);95

digitalWrite

(motor_right1,0);

96}97(四)蓝牙远程控制二、实施步骤BluetoothControl_motorDrives二、实施步骤(四)蓝牙远程控制步骤5:继续在【代码编写区域】中输入如图所示的后退子函数和停车子函数代码。BluetoothControl_motorDrive§98

voidbackward(){//

后退子函数1

op

e

==f

;

;//

标志车辆处于后退状态1

01

outputPwm=

min(255,max(20,targetPwm));102/*电机执行*/1

03

analogWrite(motor_left,outputPwm);104

digitalWrite

(motor_left1,1);105

analogWrite(motor_right,outputPwm);106

digitalWrite

(motor_right1,1);

107}108109

void

Stop(){

//

停车子函数110

analogWrite(motor_left,0);111

analogWrite(motor_left1,0);112

analogWrite(motor_right,0);113

analogWrite(motor_right1,0);114carStop

=true

;115}selseafcarstcarstat0909步骤6:单击“上传”按钮,通过USB

转串口芯片将程序烧写到控制板的主控芯片中;如果操作顺利,将出现“上传成功”的提示。二、实施步骤(四)蓝牙远程控制步骤7:上传成功后,将串口蓝牙模块扩展板和电机驱动扩展板安装在ArduinoUNO

控制板上。二、实施步骤(四)蓝牙远程控制步骤8:连接蓝牙,在蓝牙调试器APP

中连接HC-02,点击通讯(对话)模式,输入指令:前进W后退S左A右D加速I

减速M

停车T,如图所示(左为通讯模式、右为按键控制模式,效果完全一样)。输入指令后电机和舵机会做出相应的动作改变运动状态,也可以在ArduinoIDE调用串口监视器显示小车状态对应英文,如图所示。+BkuetoothControl_motorDrive1/*定义电机引脚*/2

#definemotor_left9//左电

◎COM3

3#define

motor_left16

//左电4

#define

motor_right

10

//右电rorward5#define

motor_right111

//右电Backwards6/*定义舵机引脚*7

Turn

leftTurn

right7

const

int

servopin

=5;8/*定义变量*/

Speed

cut9

int

outputP

wm;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论