论文部分内容阅读
在数据通信方面,Arduino UNO通常情况下是通过数据线与计算机的USB接口相连,比如从Arduino IDE中上传编译好的程序代码;而位于数字引脚0(RX)和1(TX)的串口通信,一般是通过Serial.println()函数在串口监视器中进行提示信息或传感器所读取数据的实时显示。如何进行数据的无线通讯呢?以蓝牙传输为例,借助于HC-05蓝牙模块,我们可以实现手机操控Arduino的功能,比如控制LED灯的亮与灭、风扇模块的“无级变速”。
实验器材包括:Arduino UNO主板一个,面包板一个,HC-05蓝牙模块一个,蓝色LED灯一支,10kΩ和20kΩ的色环电阻各一个,杜邦线若干。
对照设计好的电路接线图(如图1),进行元器件的连接。首先,将Arduino的5V引脚和GND接地引脚通过红色和黑色杜邦线分别与面包板的红色、蓝色侧边线槽连接;接着,将蓝色LED灯插接到面包板上,负极(短腿)接入蓝色线槽,正极(长腿)通过杜邦线(蓝线)连接至Arduino的13号数字引脚;HC-05蓝牙模块共有六个引脚(仅使用其中的四个),先将VCC端和GND端分别接入面包板的红色和蓝色线槽,由于蓝牙模块的标准工作电源是3.3V,因此需要借助两个电阻进行“分压”——从蓝牙模块的RXD端通过杜邦线(黄色)插接至面包板,其中的一端经10kΩ的电阻与Arduino的TXD(1号)连接,另一端经20kΩ的电阻与面包板的蓝色线槽(GND)连接;蓝牙模块的TXD端,则通过杜邦线(绿色)与Arduino的RXD(0号)进行连接;最后,通过数据线将Arduino与计算机的USB接口进行连接。
在Arduino IDE中进行程序代码的编写:
首先进行变量的定义,语句“int BlueLED = 13;”的作用是声明蓝色LED灯的连接引脚是13号,并且通过语句“char serialBlueLED;”来定义一个字符型的变量,其作用是用来存储蓝牙串口数据;在setup()函数中,先通过语句 “Serial.begin(9600);”来设置串口监视器的波特率為9600bps,再通过语句“pinMode(BlueLED, OUTPUT);”将蓝色LED灯的引脚设置为输出工作模式;在loop()函数中,建立一个实时检测是否有串口数据传输的while()循环:“while (Serial.available() > 0)”,通过语句“serialBlueLED = Serial.read();”将读取到的蓝牙串口传输数据赋值给变量serialBlueLED;然后建立“if…else if…”双分支选择结构,对变量serialBlueLED的值进行是否为“1”或“0”(均为字符型)的判断,是“1”的话,执行两个“动作”:“Serial.println("收到指令:点亮13号蓝色LED灯!");”(在串口监视器显示提示信息)、“digitalWrite(BlueLED, HIGH);”(控制蓝色LED灯发光);是“0”的话,则执行另外两个“动作”:“Serial.println("收到指令:熄灭13号蓝色LED灯!");”、“digitalWrite(BlueLED, LOW);”(熄灭蓝色LED灯);最后添加一个2秒钟的延迟语句:“delay(2000);”,将程序保存为BlueToothLED(如图2)。
注意,程序编译后不要直接上传至Arduino,因为蓝牙模块占用了Arduino的RX(0号)和TX(1号),直接上传会出现“Problem uploading to board”错误。解决方法是暂时将两条杜邦线从Arduino上拔出后再进行上传,上传成功后再原样插回即可,此时蓝牙模块的红色LED灯就会一直闪烁,处于等待连接状态中;在手机中下载并安装Arduino bluetooth controller_v1.apk(apk文件可扫码关注“壹零社”在编程相关中下载),运行程序进行蓝牙连接(首次使用时会先进行“配对”),点击“HC-05”项后会弹出四个连接选项,选择其中的第二项“Switch mode”(开关模式),接着点击弹出按钮右上角的“齿轮”设置项,将绿色和红色两个开关的值分别设置为“1”和“0”(如图3)。
打开Arduino程序的串口监视器,然后在手机中就可以不断点击两个开关按钮进行LED灯的控制了,同时会在串口监视器中对应出现“收到指令:点亮13号蓝色LED灯!”或“收到指令:熄灭13号蓝色LED灯!”的提示(如图4)。
在蓝牙LED灯的电路接线图中稍作改动(如图5),将LED灯及对应的杜邦线拆除,保持蓝牙模块和分压电路不变,将风扇模块接入:VCC和GND端分别接入面包板的红色和蓝色线槽,信号控制端通过杜邦线连接至Arduino的3号数字引脚。
在Arduino IDE中进行程序代码的编写:
首先进行变量的定义,语句“int FANPin = 3;”的作用是声明风扇模块的连接引脚是3号,并且通过语句“int serialFAN;”定义serialFAN变量,作用是存储蓝牙串口控制风扇模块的数据;在setup()函数中,仍然是通过语句 “Serial.begin(9600);”设置串口监视器的波特率为9600bps;在loop()函数中,仍然建立一个实时检测是否有串口数据传输的while()循环:“while (Serial.available() > 0)”,通过语句“serialFAN = Serial.parseInt();”将读取到的蓝牙串口传输数据赋值给变量serialFAN;然后在串口监视器中进行提示信息和变量serialFAN数据的输出显示:“Serial.print("3号风扇模块的转速为:");”、“Serial.println(serialFAN);”;接着,通过语句“analogWrite(FANPin, serialFAN);”向風扇模块的信号引脚写入一个0-255之间的数据,作用是控制输出对应的PWM值,即不同的转速;最后,再添加一个2秒钟的延迟语句:“delay(2000);”,将程序保存为BlueToothFAN(如图6)。
同样,程序编译后不要直接上传至Arduino,仍然是将插接在RX和TX引脚的两条杜邦线从Arduino上拔出后再进行上传,上传成功后再恢复连接;然后在手机中再次运行Arduino bluetooth controller进行蓝牙连接,点击“Connect in”页面四个连接选项中的第四项“Terminal mode”(终端模式),此时就可以在下方的输入框中进行测试:数值越小,风扇模块的转速就越低(50以下不启动),比如输入“127”后,风扇模块就是中等速度,“255”则是最高速,“0”就是关闭风扇模块(如图7)。
此时,在串口监视器中会显示有“3号风扇模块的转速为:127”的提示信息,与手机端的Arduino bluetooth controller控制界面是同步显示的;同时,风扇也会根据这个数值的大小来调节自身的转速,实现“无级变速”的功能(如图8)。
1.Arduino蓝牙LED灯
实验器材包括:Arduino UNO主板一个,面包板一个,HC-05蓝牙模块一个,蓝色LED灯一支,10kΩ和20kΩ的色环电阻各一个,杜邦线若干。
对照设计好的电路接线图(如图1),进行元器件的连接。首先,将Arduino的5V引脚和GND接地引脚通过红色和黑色杜邦线分别与面包板的红色、蓝色侧边线槽连接;接着,将蓝色LED灯插接到面包板上,负极(短腿)接入蓝色线槽,正极(长腿)通过杜邦线(蓝线)连接至Arduino的13号数字引脚;HC-05蓝牙模块共有六个引脚(仅使用其中的四个),先将VCC端和GND端分别接入面包板的红色和蓝色线槽,由于蓝牙模块的标准工作电源是3.3V,因此需要借助两个电阻进行“分压”——从蓝牙模块的RXD端通过杜邦线(黄色)插接至面包板,其中的一端经10kΩ的电阻与Arduino的TXD(1号)连接,另一端经20kΩ的电阻与面包板的蓝色线槽(GND)连接;蓝牙模块的TXD端,则通过杜邦线(绿色)与Arduino的RXD(0号)进行连接;最后,通过数据线将Arduino与计算机的USB接口进行连接。
在Arduino IDE中进行程序代码的编写:
首先进行变量的定义,语句“int BlueLED = 13;”的作用是声明蓝色LED灯的连接引脚是13号,并且通过语句“char serialBlueLED;”来定义一个字符型的变量,其作用是用来存储蓝牙串口数据;在setup()函数中,先通过语句 “Serial.begin(9600);”来设置串口监视器的波特率為9600bps,再通过语句“pinMode(BlueLED, OUTPUT);”将蓝色LED灯的引脚设置为输出工作模式;在loop()函数中,建立一个实时检测是否有串口数据传输的while()循环:“while (Serial.available() > 0)”,通过语句“serialBlueLED = Serial.read();”将读取到的蓝牙串口传输数据赋值给变量serialBlueLED;然后建立“if…else if…”双分支选择结构,对变量serialBlueLED的值进行是否为“1”或“0”(均为字符型)的判断,是“1”的话,执行两个“动作”:“Serial.println("收到指令:点亮13号蓝色LED灯!");”(在串口监视器显示提示信息)、“digitalWrite(BlueLED, HIGH);”(控制蓝色LED灯发光);是“0”的话,则执行另外两个“动作”:“Serial.println("收到指令:熄灭13号蓝色LED灯!");”、“digitalWrite(BlueLED, LOW);”(熄灭蓝色LED灯);最后添加一个2秒钟的延迟语句:“delay(2000);”,将程序保存为BlueToothLED(如图2)。
注意,程序编译后不要直接上传至Arduino,因为蓝牙模块占用了Arduino的RX(0号)和TX(1号),直接上传会出现“Problem uploading to board”错误。解决方法是暂时将两条杜邦线从Arduino上拔出后再进行上传,上传成功后再原样插回即可,此时蓝牙模块的红色LED灯就会一直闪烁,处于等待连接状态中;在手机中下载并安装Arduino bluetooth controller_v1.apk(apk文件可扫码关注“壹零社”在编程相关中下载),运行程序进行蓝牙连接(首次使用时会先进行“配对”),点击“HC-05”项后会弹出四个连接选项,选择其中的第二项“Switch mode”(开关模式),接着点击弹出按钮右上角的“齿轮”设置项,将绿色和红色两个开关的值分别设置为“1”和“0”(如图3)。
打开Arduino程序的串口监视器,然后在手机中就可以不断点击两个开关按钮进行LED灯的控制了,同时会在串口监视器中对应出现“收到指令:点亮13号蓝色LED灯!”或“收到指令:熄灭13号蓝色LED灯!”的提示(如图4)。
2.Arduino蓝牙变速风扇
在蓝牙LED灯的电路接线图中稍作改动(如图5),将LED灯及对应的杜邦线拆除,保持蓝牙模块和分压电路不变,将风扇模块接入:VCC和GND端分别接入面包板的红色和蓝色线槽,信号控制端通过杜邦线连接至Arduino的3号数字引脚。
在Arduino IDE中进行程序代码的编写:
首先进行变量的定义,语句“int FANPin = 3;”的作用是声明风扇模块的连接引脚是3号,并且通过语句“int serialFAN;”定义serialFAN变量,作用是存储蓝牙串口控制风扇模块的数据;在setup()函数中,仍然是通过语句 “Serial.begin(9600);”设置串口监视器的波特率为9600bps;在loop()函数中,仍然建立一个实时检测是否有串口数据传输的while()循环:“while (Serial.available() > 0)”,通过语句“serialFAN = Serial.parseInt();”将读取到的蓝牙串口传输数据赋值给变量serialFAN;然后在串口监视器中进行提示信息和变量serialFAN数据的输出显示:“Serial.print("3号风扇模块的转速为:");”、“Serial.println(serialFAN);”;接着,通过语句“analogWrite(FANPin, serialFAN);”向風扇模块的信号引脚写入一个0-255之间的数据,作用是控制输出对应的PWM值,即不同的转速;最后,再添加一个2秒钟的延迟语句:“delay(2000);”,将程序保存为BlueToothFAN(如图6)。
同样,程序编译后不要直接上传至Arduino,仍然是将插接在RX和TX引脚的两条杜邦线从Arduino上拔出后再进行上传,上传成功后再恢复连接;然后在手机中再次运行Arduino bluetooth controller进行蓝牙连接,点击“Connect in”页面四个连接选项中的第四项“Terminal mode”(终端模式),此时就可以在下方的输入框中进行测试:数值越小,风扇模块的转速就越低(50以下不启动),比如输入“127”后,风扇模块就是中等速度,“255”则是最高速,“0”就是关闭风扇模块(如图7)。
此时,在串口监视器中会显示有“3号风扇模块的转速为:127”的提示信息,与手机端的Arduino bluetooth controller控制界面是同步显示的;同时,风扇也会根据这个数值的大小来调节自身的转速,实现“无级变速”的功能(如图8)。