传感器大作业--基于arduino的蓝牙控制舵机和温湿度传感器的数据回传

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); 
   
      
  }
 
  }
}

4、效果

在这里插入图片描述

  • 34
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您将学习如何将超声波传感器HC-SR04与Arduino连接。它可以是超声波范围传感器或任何用途。 超声波传感器HC-SR04是可以测量距离的传感器。它会发出40 000 Hz(40kHz)的超声波,该超声波在空中传播,如果路径上有物体或障碍物,它将反弹回模块。考虑到传播时间和声音的速度,您可以计算出距离。 HC-SR04的配置引脚为VCC(1),TRIG(2),ECHO(3)和GND(4)。VCC的电源电压为+ 5V ,您可以将TRIG和ECHO引脚连接到Arduino板中的任何数字I / O。 进行此项目所需的材料: 1. Arduino UNO R3 CH340(您可以使用任何Arduino开发板) 2.超声波传感器HC-SR04 3.公对公跳线 4.面包板 为了产生超声波,我们需要将触发引脚设置为高状态10 s 。这将发出一个8周期的声音脉冲,将以速度声音行进,并且将在回音针中接收。回音针将输出声波传播的时间(以微秒为单位)。 例如,如果物体距传感器20厘米,并且声音的速度为340 m / s或0.034 cm / µs,则声波将需要传播约588微秒。但是由于声波需要向前传播和向后反弹,所以从回声针所得到的将会是这个数字的两倍。因此,为了获得以厘米为单位的距离,我们需要将从回波引脚接收的行进时间值乘以0.034,然后将其除以2。 对于编程代码,首先我们需要定义连接到Arduino板的触发引脚和回波引脚。在此项目中,EchoPin附加到D2 ,TrigPin附加到D3。然后定义距离(整数)和持续时间(长整数)的变量。 在循环中,首先必须确保trigPin是透明的,所以我们必须将该引脚设置为LOW状态仅2 µs 。现在,用于生成超声波,我们必须设置trigPin的高态为10微秒。使用pulseIn()函数,您必须读取行程时间并将该值放入变量“ duration”中。此功能有2个参数,第一个是回波引脚的名称,第二个可以写入HIGH或LOW。在这种情况下,HIGH表示pulseIn()该功能将等待由反弹的声波引起的引脚变为高电平并开始计时,然后在声波结束时等待引脚变为低电平而停止计时。最后,该函数将返回脉冲长度(以微秒为单位)。为了获得距离,我们将持续时间乘以0.034,然后将其除以2,如我们之前解释此方程式。最后,我们将在串行监视器上打印距离的值。 脚步 : 1.首先进行如图所示的接线 2.打开Arduino IDE软件并写下您的代码,或下载下面的代码并打开它 3.通过选择工具>板> Arduino / Geniuno Uno选择您自己的Arduino板(在本例中为Arduino Uno) 4.选择“ COM端口”(通常只显示一个现有端口),在“工具” >“端口” >“ COM。”中。(如果有多个端口,请一一尝试) 5.通过按Ctrl + U或Sketch > Upload上载代码 6.要显示测量数据,可以使用串行监视器,方法是按Ctrl + Shift + M (确保波特率是9600) 上载代码后,使用串行监视器显示数据。现在,尝试将一个物体放在传感器前面,然后查看测量结果。 考虑到这一点,您可以使用手动卷尺测量距离并将其与串行监视器上的距离进行比较。如果要在LCD上显示,可以按照第二个接线图并上传以下代码。
要基于Arduino使用蓝牙控制另一台ESP32-S3,您可以使用BLE协议进行通信。BLE是一种低功耗的蓝牙协议,可以在ESP32之间直接通信,而无需连接到Wi-Fi网络。以下是基于Arduino使用BLE协议的步骤: 1. 在两个ESP32-S3上安装相同的ESP32开发板支持库,并打开Arduino IDE。 2. 在其中一个ESP32-S3上打开“File” -> “Examples” -> “ESP32 BLE Arduino” -> “BLE_uart”示例程序。 3. 在另一个ESP32-S3上打开“File” -> “Examples” -> “ESP32 BLE Arduino” -> “BLE_uart”示例程序。 4. 在其中一个示例程序中,将设备名称和服务UUID修改为一个固定的值。例如: ``` BLEDevice::init("ESP32-S3-1"); BLEServer *pServer = BLEDevice::createServer(); BLEService *pService = pServer->createService("0000fff0-0000-1000-8000-00805f9b34fb"); ``` 在另一个示例程序中也进行相同的修改,以确保它们能够互相发现和连接。 5. 编译并上传两个示例程序到两个ESP32-S3。 6. 打开两个串口监视器,并分别连接到两个ESP32-S3的串口。 7. 在一个ESP32-S3的串口监视器中,输入“AT+BLESCAN=1”启动BLE扫描。此时,它将开始搜索可用的BLE设备。 8. 在另一个ESP32-S3的串口监视器中,输入“AT+BLEADVERTISE=1”启动BLE广播。此时,它将开始向其他设备广播自己的服务。 9. 在第一个ESP32-S3的串口监视器中,您将看到搜索到的设备列表。找到第二个ESP32-S3并连接到它。 10. 在两个ESP32-S3之间建立连接后,您可以使用串口监视器中的输入框发送命令并控制另一个ESP32-S3。例如,在第一个ESP32-S3的串口监视器中输入“Hello”,在第二个ESP32-S3的串口监视器中将看到“Hello”消息。 请注意,使用BLE协议需要进行额外的配置,例如设置服务UUID、特征UUID和属性等。您可以参考ESP32-S3的官方文档进行详细配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值