1、蓝牙模块调试
1.1 进入 At 模式进行蓝牙基本参数设置
进入 AT 模式设置蓝牙的接线如下:
Arduino 5V – VCC
Arduino GND – GND
Arduino Pin10 – TXD
Arduino Pin11 – RXD
接下来,我们需要为使用 Arduino 设置蓝牙模块 AT 模式编写程序,这个程序是让我们可以通过 Arduino IDE 提供的串口监视器来设置蓝牙模块。
#include <SoftwareSerial.h>
// Pin10为RX,接HC05的TXD
// Pin11为TX,接HC05的RXD
SoftwareSerial BT(10, 11);
char val;
void setup() {
Serial.begin(38400);
Serial.println("BT is ready!");
// HC-05默认,38400
BT.begin(38400);
}
void loop() {
if (Serial.available()) {
val = Serial.read();
BT.print(val);
}
if (BT.available()) {
val = BT.read();
Serial.print(val);
}
}
首先,将 Arduino 断电,然后按住蓝牙模块上的黑色按钮同时 Arduino 通电,如果蓝牙模块指示灯按2秒的频率闪烁,表明蓝牙模块已经正确进入 AT 模式。打开 Arduino IDE 的串口监视器,选择正确的端口,将输出格式设置为 Both: NL & CR ,波特率设置为 38400 ,可以看到串口监视器中显示 BT is ready! 的信息。然后,输入 AT ,如果一切正常,串口显示器会显示 OK。
接下来,我们即可对蓝牙模块进行设置,常用 AT 命令如下:
AT+ORGL # 恢复出厂模式
AT+NAME= # 设置蓝牙名称
AT+ROLE=0 # 设置蓝牙为从模式
AT+CMODE=1 # 设置蓝牙为任意设备连接模式
AT+PSWD= # 设置蓝牙匹配密码
正常情况下,命令发送后,会返回 OK ,如果没有返回任何信息,请检查接线是否正确
这里需要注意需要设置蓝牙为从模式要不然可能手机搜索不到蓝牙!!!
设置完毕后,断开电源,再次通电,这是,蓝牙模块指示灯会快速闪烁,这表明蓝牙已经进入正常工作模式。可以通过蓝牙串口调试工具进行链接,手机连接成功后闪烁频率会下降
舵机模块
采用MG92s舵机
舵机是一种位置(角度)伺服的驱动器。舵机只是一种通俗的叫法,其实质是一个伺服马达。在需要角度不断变化并可以保持的控制系统中应用广泛。如遥控机械人、飞机模型等。 舵机的转动角度为0~180°,其内部结构包括电机,控制电路和机械结构三部分;
具体接线为:
棕、红、橙(棕色连接GND、红色连接VCC、橙色连接信号);
测试代码
#include <Servo.h>
Servo myservo;
void setup()
{
myservo.attach(2);//定义PWM输出的引脚
}
void loop()
{
myservo.write(90); //写出输出角度
delay(1000);
myservo.write(0);
delay(1000);
}
蓝牙控制舵机
这里的电路设计比较简单,主要是两部分:
Arduino 与 HC05 模块连接
这里有两点需要注意,
1、在将代码烧入时hc05的RXD和TXD可以悬空但是不能接到arduino上的对应的TX和RX上,要不然会报错,烧不进去。
2、烧进去后,在使用时Arduino 上的 TXD 应与 HC05 模块上的 RXD 端连接,Arduino 上的 RXD 应与 HC05 模块上的 TXD 连接。
Arduino 与 舵机 连接
Arduino 5V – 红色
Arduino GND – 棕色
Arduino Pin6– 橙色
Arduino 程序代码如下:
#include <Servo.h>//引头文件
Servo myservo;
void setup() {
myservo.attach(6); //定义舵机接口为6号引脚
myservo.write(90);
Serial.begin(38400); //初始化蓝牙,波特率为9600
}
void loop() {
if(Serial.available()>0)//判断串口是否有数据
{
int val = Serial.read();//读取串口数据赋给val
if(val=='0')//关
{
Serial.println(": The light opened successfully.");
myservo.write(0);//初始仰角
delay(1000);
myservo.write(90);
}
else if(val=='1')//开
{
Serial.println(": The light closed successfully.");
myservo.write(180);//初始仰角
// myservo.write(180);
delay(1000);//
myservo.write(90);
}
}
}
遇到的bug:最开始初始化设置的波特率是9600,蓝牙无法实现通信。后来改成了38400才可以正常通信。总结:HC05默认波特率是38400
在 Android 端上进行调试,需要下载蓝牙串口调试 APP,然后打开 蓝牙串口调试APP ,让 APP 连接上蓝牙模块,然后我们可以在 APP 中输入 1,接下来可以看到舵机旋转到180°位置然后复原,并且能在 APP 中看到 The light closed successfully. 的返回。我们再在 APP 中输入 0,可以看到舵机旋转到0°位置然后复原, APP 中返回The light opened successfully。
温湿度模块
温湿度模块的调试:
我之前的记录过一篇,可以参考。
接线
Arduino 与 温湿度传感器dht11 连接
Arduino 5V – VCC
Arduino GND – GND
Arduino Pin2– DATA
系统展示
1、系统实物展示
2、连接:
蓝牙模块:
Arduino 5V – VCC
Arduino GND – GND
Arduino RX – TXD
Arduino TX – RXD
(PS:再次强调在烧入程序时候Arduino的RX和TX引脚不能被占用)
舵机模块:
Arduino 与 舵机 连接
Arduino 5V – 红色
Arduino GND – 棕色
Arduino Pin6– 橙色
温湿度传感器模块:
Arduino 5V – VCC
Arduino GND – GND
Arduino Pin2– DATA
3、源码:
#include <Servo.h>//引头文件
#include <dht11.h>
dht11 DHT11;
#define DHT11PIN 2
Servo myservo;
void setup() {
myservo.attach(6); //定义舵机接口为6号引脚
myservo.write(90);
Serial.begin(38400); //初始化蓝牙,波特率为9600
}
void loop() {
if(Serial.available()>0)//判断串口是否有数据
{
int val = Serial.read();//读取串口数据赋给val
if(val=='0')//关
{
Serial.println(": The light opened successfully.");
myservo.write(0);//初始仰角
delay(1000);
myservo.write(90);
}
else if(val=='1')//开
{
Serial.println("The light closed successfully.");
myservo.write(180);//初始仰角
// myservo.write(180);
delay(1000);//
myservo.write(90);
}
else if(val=='2')//开
{
int chk = DHT11.read(DHT11PIN);
Serial.print("Humidity (%): ");
Serial.println((float)DHT11.humidity, 2);
Serial.print("Temperature (oC): ");
Serial.println((float)DHT11.temperature, 2);
}
}
}