【2024 DigiKey 创意大赛】智能空调感应器
[复制链接]
智能空调感应器
作者:奇迹12
一、作品简介
本项目主要实现了一个智能空调感应器,当摄像头检测到房间内有人时会自动打开空调,同时该设备还支持远程网页控制。
二、系统框图
本项目主要实现当摄像头检测到房间内有人时会自动打开空调,还支持远程网页控制,两大主要功能,设计思路如下:
人体识别:该部分使用openMV完成,运行神经网络模型,识别环境中是否有人,当发现环境中有人时,产生一个信号发送给esp32进行处理。
网页控制:该部分由esp32完成,esp32实现上网功能,作为一个服务器对外开发,实现一个内置网页,当发现有手机连入该服务器,并访问服务器的网页时,将该网页返回给手机端,用户可以通过手机上的网页对设备进行控制。
控制核心:由esp32完成,负责接收openMV和网页传来的控制信号,当满足空调打开条件时打开空调,本文中使用LED点亮作为演示。
使用的板卡是以下两个:
OpenMV摄像头是一款小巧,低功耗,低成本的电路板,它帮助你很轻松的完成机器视觉(machine vision)应用。你可以通过高级语言Python脚本(准确的说是 MicroPython ),而不是C/C++。Python的高级数据结构使你很容易在机器视觉算法中处理复杂的输出。但是,你仍然可以完全控制OpenMV。你可以很容易的使用外部终端触发拍摄或者或者执行算法,也可以把算法的结果用来控制IO引脚。
- STM32H743VI ARM Cortex M7 处理器,480 MHz ,1MB RAM,2 MB flash. 所有的 I/O 引脚输出 3.3V 并且 5V 耐受。这个处理器有以下的IO接口。
- 全速 USB (12Mbs) 接口,连接到电脑。当插入OpenMV摄像头后,你的电脑会出现一个虚拟COM端口和一个“U盘”。
- μSD卡槽拥有100Mbs读写,这允许你的OpenMV摄像头录制视频,和把机器视觉的素材从SD卡提取出来。
- 一个SPI总线高达54Mbs速度,允许你简单的把图像流数据传给LCD扩展板,WiFi扩展板,或者其他控制器。
- 一个 I2C总线,CAN总线, 和两个异步串口总线 (TX/RX) ,用来链接其他控制器或者传感器。
- 一个12-bit ADC 和一个12-bit DAC。
- 3个 I/O 引脚用于舵机控制.
- 所有的IO口都可以用于,中断和PWM(板子上有10个I/O引脚)。
- 一个RGB LED(三色), 两个高亮的 850nm IR LED(红外).
- 可拆卸的摄像头模块系统,允许OpenMV Cam H7与不同的感光元件模组连接:
- OpenMV4 H7默认配置的MT9M114 感光元件处理640×480 8-bit 灰度图或者640×480 16-bit RGB565彩色图像可以达到40 FPS;当分辨率低于320×240可以达到80FPS。大多数简单的算法可以运行40~80FPS以上。你的 OpenMV 摄像头有一个2.8mm焦距镜头在一个标准M12镜头底座上。如果你想使用更多的特殊的镜头,你可以很容易的安装。
- 对于专业的机器视觉应用,你可以购买我们的全局快门摄像头模组mt9V034。
- 对于红外热成像机器视觉应用,您可以购买我们的FLIR Lepton 红外热成像模组。
- 3.7V 锂离子电池接口,用于业余爱好者机器人应用。
ESP32-C6-DevKitC-1 是一款入门级开发板,使用带有 8 MB SPI flash 的通用型模组 ESP32-C6-WROOM-1(U)。该款开发板具备完整的 Wi-Fi、低功耗蓝牙、Zigbee 及 Thread 功能。
板上模组大部分管脚均已引出至两侧排针,开发人员可根据实际需求,轻松通过跳线连接多种外围设备,同时也可将开发板插在面包板上使用。
代码部分:
人体识别
while True:
clock.tick()
img = sensor.snapshot()
flag = 0
for i, detection_list in enumerate(
net.detect(img, thresholds=[(math.ceil(min_confidence * 255), 255)])
):
if i == 0:
continue # background class
if len(detection_list) == 0:
continue # no detections for this class?
print("********** %s **********" % labels[i])
flag = 1
for d in detection_list:
[x, y, w, h] = d.rect()
center_x = math.floor(x + (w / 2))
center_y = math.floor(y + (h / 2))
print(f"x {center_x}\ty {center_y}")
img.draw_circle((center_x, center_y, 12), color=colors[i], thickness=2)
if flag == 1:
p_out.high()#设置p_out引脚为高
else:
p_out.low()#设置p_out引脚为低
print(clock.fps(), "fps", end="\n")
esp32处理部分:
void loop() {
dnsServer.processNextRequest(); // 处理 DNS 请求
server.handleClient(); // 处理来自客户端的 HTTP 请求
if(LOW == digitalRead(0) && count > 100){
identify_flag = 0;
}
else if(HIGH == digitalRead(0)){
identify_flag = 1;
count = 0;
}
count++;
if(control_flag == 1 || identify_flag == 1)
rgbLedWrite(RGB_BUILTIN, 0, 0, RGB_BRIGHTNESS);
else
rgbLedWrite(RGB_BUILTIN, 0, 0, 0);
}
三、各部分功能说明
openmv识别人体
控制网页
人体识别控制
手机网页控制
四、作品源码
download.eeworld.com.cn/detail/奇迹12/634849
五、作品功能演示视频
【2024 DigiKey 创意大赛】智能空调感应器
六、项目总结
很高兴能参加这个活动,我收获了很多新的知识,也完整完成了一个小项目,很开心。
|