作为一名教师,传统上的出勤(点名)是一项耗时的任务,如果自动化,教师可以专注于其他教学活动。在本项目中,RFID阅读器模块和RFID卡将用于实现自动考勤系统。
课程在密闭空间内进行,如果环境太热或太冷,很难听课。为了实现有效的学习,应保持教室内正确的物理环境。该项目将使用相对湿度和温度传感器(DHT11)来监控温度和湿度,并在值超出范围时发出通知。
库和定义
在开始代码之前,需要将库包含在程序中。定义了物理连接到Arduino板的引脚号。创建将用于数据采集的RFID接收器(mfrc522)和DHT传感器(dht)的实例。创建了一个名为student的变量,它是一个二维字符串数组,用于存储学生姓名和相关的RFID标签ID。
设置
setup()函数仅在板子上电或按下复位按钮时执行一次。串行连接以9600的波特率初始化。DHT传感器采集调用函数begin()开始采集。
调用一些ArduinoIoTCloud函数来初始化属性、开始连接、设置调试消息级别并打印任何调试信息。
主要功能-循环
Arduino中的loop()函数包括SPI通信的开始和mfrc522的初始化。起初,这两个初始化是在设置阶段完成的,但由于ArduinoCloud更新时的错误而被移到循环中。它将引脚10更改为输入,中断SPI通信。解决方案是在每个循环上初始化SPI通信,以将引脚10重置为输出模式。
void loop() {
SPI.begin();
mfrc522.PCD_Init();
if ( mfrc522.PICC_IsNewCardPresent()) {
if (mfrc522.PICC_ReadCardSerial()) {
String content = "";
byte letter;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}
//Serial.println(content.substring(1));
content.toUpperCase();
for (int i = 0; i < 6; i++) {
if (content.substring(1) == student[i][0])
{
msg_Attendance = "Attendance Recorded for Student: " + student[i][1] ;
}
}
Serial.println(msg_Attendance);
}
}
dht_sensor_getdata();
delay(500);
ArduinoCloud.update();
}
mfrc522初始化后,调用PICC_IsNewCardPresent()函数。如果检测到新卡,PICC_ReadCardSerial()函数会从 RFID 卡中读取 ID 信息。ID 是一个字符串类型的变量,称为内容。它被转换为大写,以便与存储在程序定义部分中的学生ID 数组进行比较。当从卡中读取的 ID 与记录中的学生匹配时,会记录出勤情况并将其存储在变量msg_Attendance 中。
dht_sensor_getdata ()函数被调用,更多详细信息在下一节中。在调用ArduinoCloud.update()函数之前引入了 500 毫秒的短暂延迟。此函数将所有四个变量发送到云端:温度、湿度、msg_Attendance和msgTempHum 。
DHT传感器功能
创建函数dht_sensor_getdata()是为了从 DHT11 传感器读取湿度和温度数据。dht.h 库导入函数 readHumidity() 和 readTemperature()。
if-else 条件检查低温 (20ºC) 和高温 (27ºC) 的阈值,然后向仪表板发送消息。这可以通过执行器(打开或关闭空调)或真实教室中的警报来实现。
void dht_sensor_getdata()
{
float hm = dht.readHumidity();
Serial.print(F("Humidity "));
Serial.println(hm);
float temp = dht.readTemperature();
Serial.print(F("Temperature "));
Serial.println(temp);
humidity = hm;
temperature = temp;
if (temp > 27) {
msgTempHum = "Temperature = " + String (temperature) + " Humidity = " + String(humidity) + " -> High ";
}
else if (temp < 20) {
msgTempHum = "Temperature = " + String (temperature) + " Humidity = " + String(humidity) + " -> Low ";
}
else {
msgTempHum = "Temperature = " + String (temperature) + " Humidity = " + String(humidity) + " -> All ok ";
}
}
准备工作-设置云
要连接到ArduinoIoTCloud,首先我们需要创建一个帐户或登录。
要使用已经安装了所有核心和库的基于Web的编辑器,我们需要安装CreateAgentPlugin。该代理将识别通过USB连接到计算机的板。
进入网页编辑器页面后,我们可以看到板已连接/断开,编辑我们的代码并在完成后上传。
但是,还有其他两个选项可用:
经典离线ArduinoIDE1.8.13(集成开发环境)作为–用于本地传感器故障排除。
新的ArduinoIDE2.0-具有调试、代码突出显示和自动完成等新功能,目前处于beta阶段(准备此项目时)。
要选择IoTCloud菜单或Web编辑器,我们可以单击个人资料图片附近的右上角按钮。
一旦我们选择了物联网云菜单,就会有一些选项可用,但在这个项目中,我们将专注于创建事物、关联设备和准备仪表板。
单击上图所示的“创建事物”后。我们遵循了这个项目中的步骤:
第1步-设备-将设备与我们的事物相关联
第2步-添加变量
第3步-更改网络设置
第4步-编辑草图,连接到串行监视器
第5步-准备仪表板
第6步-从发送到云端的板上获取数据并导出
第1步-设备
第一步是单击并选择设备。
可以关联以前在IoT云中使用的任何设备,也可以设置新设备。
对于这个项目,我们将设备ArduinoMKRGSM1400与Thing相关联,但可以使用任何其他板,例如ArduinoMKRWiFI1010或NodeMCU。
第2步-变量
第二步是添加变量:
单击添加变量后,您需要选择变量名称、类型、权限、更新策略和阈值。在这个项目中,创建了5个变量:
湿度——在仪表板上存储和显示相对湿度值
温度-在仪表板上存储和显示室温
msg_Attendance–显示学生出勤、姓名和时间
msgTempHum–显示温度和湿度以及任何警告
led-此LED用于快速故障排除以检查板/云连接
变量权限可以是:
读写——变量既可以作为输入也可以作为输出,数据可以从设备发送到云端,反之亦然
只读——变量只能作为输出,数据只能从设备发送到云端
变量更新策略可以是:
OnChange:只要值的变化大于或等于设置的阈值,变量就会更新到云端
定期:每次经过设置的秒数时,变量将更新到云端
该项目中使用的基本变量类型是:
布尔值-真或假(LED)
浮点数-带小数的数字(温度和湿度)
字符串-单词和句子(msg_Attendance和msgTempHum)
第3步-网络
设置好所有变量后,第三步是在configureNetwork中添加网络凭据
在这个项目中,我们使用了具有如下凭据的ArduinoSIM卡:
如果您使用的是Wi-Fi设备,网络配置会有所不同。本地Wi-Fi名称不得包含空格。
第4步-草图
一小部分代码由ArduinoIoTCloud根据前三个步骤中添加的信息自动更新。您可以编辑草图,完整代码显示在本页底部。
检查串行监视器选项卡以排除连接故障。如果未连接到云端,我建议使用计算机中的本地ArduinoIDE并查看串行监视器上的消息。
第5步-仪表板
仪表板是物联网云设置的最后一部分,我们可以单击在仪表板选项卡中构建仪表板:
要填充我们的仪表板,我们需要添加小部件。
然后我们将一个变量链接到设置中的小部件。在这个项目中,我们添加了七个小部件,LED按钮、湿度和温度计、湿度和温度图表、温度和湿度消息以及考勤消息。
执行上述步骤的另一种方法是添加一个东西(这个项目的东西叫做SIM):
然后从Thing中选择变量:
有两种类型的仪表板视图:移动视图
和桌面视图:
第6步-下载历史数据
可以使用仪表板(i)上的“下载历史数据”选项从云中导出数据。
下载历史数据可以选择我们要下载的变量和时间段。
您可以查看通过电子邮件接收并下载为CSV文件的考勤数据示例。
readme.txt文件包含变量名称、请求的时间段和希望我们“玩得开心!”的消息:
这里还没有内容,您有什么问题吗?
电子电路资源推荐
- 电力半导体器件原理与应用
来源:下载中心
- 互感器原理与设计基础 肖耀荣 314页 7.2M
来源:下载中心
- PCB板基础知识讲解
来源:电路图
- 焊接基础知识
来源:大学堂
- 电工学
来源:大学堂
- 戴维宁定理:概念介绍及其求解过程
来源:电路图
推荐帖子 最新更新时间:2024-11-13 09:13
- 【PSoC4心得】对PSoC的一些感受
- 收到板子后就开始装软件,软件装了两次,第一次不知道为什么没装成功,第二次直接安装到C盘 ,安装类型选的全部,装好后可以用了。 我是听大学的老师说起PSoC的,感觉挺不错的就申请了一套板子,打算用到公司的方案上。 打开软件PSoC Creator 3.0 之后打开了一个
- mcusxq单片机
- ADI的滤波器设计网页
- 滤波器是信号处理电路中常的部分,ADI也搞了个象TI的WEBENCH一样的设计网页,把自己的需求填入,即可得出结果。用起来还很方便。 网址是: http://www.analog.com/designtools/zh/filterwizard/#/type 一、选择滤波器件类
- dontiumADI参考电路
- Linux驱动学习笔记之触摸屏驱动
- 触摸屏归纳为输入子系统,这里主要是针对电阻屏,其使用过程如下 当用触摸笔按下时,产生中断。 在中断处理函数处理函数中启动 ADC 转换 x,y 坐标。 ADC 结束,产生 ADC 中断 在 ADC 中断处理函数里上报 (input_event) 启动定时器 再次启动定
- edu1182016Linux与安卓
- S7-200 PLC通信问题
- S7-200 PLC通信时,提示:profibus 网络上存在主站。当前设备不支持主站。 而且在通讯中双击刷新,找不到CPU,请问各位大虾如何解决,不胜感激。。。 S7-200 PLC通信问题 你这个是刚开发试验的系统还是已经运行过得系统? 通讯口设置错误,重新设置就可以了。
- eeleader工控电子
- 用于停车辅助的汽车超声波传感模块参考设计
- 设计利用三个高度集成的片上系统 (SoC) 超声波传感器驱动器为停车辅助系统 (PAS) 提供硬件架构。这些超声波传感器驱动器带有集成信号调节器,配备高级数字信号处理器 (DSP) 内核。使用这些集成功能,可实现对 25cm 至 2.5m 范围内物体的检测。距离数据将通过一个单
- 灞波儿奔DSP 与 ARM 处理器
- 三极管型号中某些字母表达的意思
- CC13x2, CC26x2 芯片C修正版E修正版和SDK版本匹配的问题: CC2652 芯片C修正版和SD...
- 呃,内置振荡器的单片机有什么好推荐 万谢
- 开机密码时startui.cpp加了ipShowIM(SIPF_ON)软键盘为什么还不出来?
- 非常实用的USB转串口调试小软件
- 继我家空调成精之后,我家念经机也成精了
- 急寻芯片
- AD画原理图如何检查出断线的错误
- 关于AD5328输出电压不一致的情况
- 立即报名预约2010吉时利新能源与新材料测试技术研讨会
- WIFI如何发送数据包
- 进不了中断
- 推荐一款液晶,各位大虾帮下忙!
- fpga设计思想有限状态机
- Altium Designer 18导出DXP
- uTenux操作系统内核API之邮箱
- DIY湿度计设计思路:STC12C2052+RS232分立件+SHT2X
- 关于移植uC/OS-III的问题?
- 求教稳压二极管的问题,
- CMake构建实战读书笔记07-手写数字识别项目实践与分析
- 适用于空调应用的,使用VIPer35LD的16 W三路输出准谐振反激转换器
- 微雪2.9英寸墨水屏背板
- 使用 LT3045IMSE PGFB 禁用且无反向输入保护的典型应用
- LT1171CT、-5.2/2.5A 负降压转换器的典型应用
- 使用 Aimtec 的 AM3G-4815DH30Z 的参考设计
- LT3460ES5 5V 至 12V 升压转换器的典型应用电路
- SCV431A 用于恒流吸收的可编程精密基准的典型应用
- 使用 Microchip Technology 的 SY89533L 的参考设计
- 具有 SCSI-2 有源端接的 LT1086CM-3.6 低压差稳压器的典型应用
- 【训练营】物联网控制开关_491332A+李志博