继续更新之前做过的一些Arduino基础项目之基于ESPduino的智能体育器材管理系统
实现效果
本系统可以将采集到的数据上传至阿里云物联网平台,并通过物联网平台发送至用户的手机app上,用户可以远程查看室内情况,并可以远程处理室内异常情况.
所需硬件及软件
1.Espduino和Arduino开发板(采用双机通信的方法,原来引脚没规划好,做到后面只能加个Arduino开发板了,Espduino作为主机,Arduino作为从机)
2.传感器模块(dht11温湿度模块,MQ2烟雾传感器,MFRC522无线射频识别模块,SG90舵机,语音识别模块)
3.软件: 阿里云服务器,APP Inventor
整体电路连接图
开发和调试部分
由于在开发中,不可能一口吃个胖子,所以就需要先把各个模块调试好,然后在整合到一块去
Dht11和ESPduino编程调试
DHT11模块湿度的测量精度在5%以内,温度的测量精度在2℃内,输出的是数字信号。采用单总线协议
编写代码
#include "DHT.h"
#define DHTPIN 4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println("DHT11 test");
dht.begin();
}
void loop() {
float h = dht.readHumidity();//读湿度
float t = dht.readTemperature();//读温度(摄氏度)
Serial.print("Humidity:");
Serial.print(h);
Serial.print("% Temperature:");
Serial.print(t);
Serial.println("℃");
delay(2000);
}
调试和注意事项
1.可能会有数读数异常,检查一下是否是杜邦线没插好松了
2.保证供电稳定,否则也会有读数异常情况产生
烟雾传感器和Espduino调试
1. MQ-2传感器对可燃气、烟雾等气体灵敏度高,基于MQ-2的烟雾传感器模块通过电路设计,提供了两种输出方式:
数字量输出:通过板载电位器设定浓度阈值,当检测到环境气体浓度超过阈值时,通过数字引脚DO输出低电平。
模拟量输出:浓度越高,AO引脚输出的电压值越高,通过ADC采集的模拟值越高。
本系统采用模拟量输出的方式
电路连接图
代码及调试部分
#include <Arduino.h>
#define Sensor_AO A0
unsigned int sensorValue = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
sensorValue = analogRead(Sensor_AO);
Serial.print("Sensor AD Value = ");
Serial.println(sensorValue);
delay(1000);
}
!这是mqt采集到的数据上传到阿里云的图片](https://img-blog.csdnimg.cn/6901632af3e54c69a7b0358b737db459.png#pic_center)
舵机和Espduino部分
Servo basketball_myservo; // 定义Servo对象来控制
Servo pingpang_myservo; // 定义Servo对象来控制
int basketball_servopin = 2; //控制租借篮球
int pingpang_servopin = 3; //控制租借足球
void setup() {
Serial.begin(9600);
basketball_myservo.attach(basketball_servopin);//控制篮球的舵机
pingpang_myservo.attach(pingpang_servopin);//控制乒乓球的舵机
basketball_myservo.write(0); //初始化篮球舵机
pingpang_myservo.write(0); //初始化乒乓球舵机
Serial.println("welcome to use our stm");
basketball_myservo.write(90); //初始化篮球舵机
pingpang_myservo.write(90); //初始化乒乓球舵机
}
RFID和Arduino代码调试部分
1. RFID模块连接引脚比较多,Espduino引脚不够用了,那时手里刚好有一块Arduino板子,所以就采用Arduinol了
2. 安装RFID库(点击「项目」—「加载库」—「管理库」,查找选择「MFC522」最新版本进行安装。)
3. RC522模块的3.3V、GND分别对应连接开发板的3.3V、GND,模块的MOSI、MISO、SCK分别连接开发板的SPI接口11、12、13,模块的SDA、RST分别连接开发板数字管脚10、9。
4. 编写代码,初始化对应引脚,刷RFID卡,将卡号以16进制的方式保存下来,例如byte cardID[4] = {0xC3, 0x9C, 0xD2, 0xA9};//存储有权限的卡ID,当再次刷卡时,RFID模块就将信息读取出来通过串口方法发送给主机
5. 关键示例代码:
byte cardID[4] = {0xC3, 0x9C, 0xD2, 0xA9};//身份信息
/*保存读取的卡号*/
//搜索新卡
if ( ! rfid.PICC_IsNewCardPresent())
return;
// 验证NUID是否可读
if ( ! rfid.PICC_ReadCardSerial())
return;
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
// 检查是否MIFARE卡类型
if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
Serial.println("不支持读取此卡类型");
return;
}
// 保存读取到的UID
for (byte i = 0; i < 4; i++) {
nuidPICC[i] = rfid.uid.uidByte[i];
}
Serial.print("十六进制UID:");
printHex(rfid.uid.uidByte, rfid.uid.size);
Serial.println();