2024年电子设计大赛智能垃圾分类系统STM32H7开源代码

版权申诉
0 下载量 161 浏览量 更新于2024-09-28 收藏 34KB ZIP 举报
资源摘要信息:"全国大学生电子设计竞赛是面向在校大学生的一项重要科技创新活动,它要求参赛者在限定时间内完成一个具有实际应用价值的电子设计项目。在2024年的这项竞赛中,有一个特定的项目主题是关于只能垃圾分类系统的开发。'只能'在这里可能是'智能'的误写,因为此类系统通常是指应用智能技术来实现垃圾分类,提升分类的准确性和效率。 智能垃圾分类系统的核心目标是通过智能化手段,提高垃圾分类的准确度和居民参与的便利性,从而有效促进资源回收和环境保护。这样的系统一般会涉及传感器技术、嵌入式系统设计、模式识别、物联网通信、用户界面设计等多个技术领域。 本资源包含了基于STM32H7微控制器的智能垃圾分类系统的开源代码。STM32H7系列是STMicroelectronics(意法半导体)出品的一系列高性能的ARM Cortex-M7核心的微控制器,具有高速处理能力和丰富的外设接口,非常适合于复杂的嵌入式应用,如智能垃圾分类系统。 代码文件的名称列表只有一个条目:'stm32H7_rubbish_code-main',这表明提供的资源可能是一个工程文件夹,其中包含了该智能垃圾分类系统的主代码文件夹。在这样的工程中,通常会包含多个文件和子文件夹,例如源代码文件(.c和.h),固件库文件,系统配置文件,以及可能的设计文档或使用说明。 在智能垃圾分类系统的代码中,可能会涉及到以下几个关键的技术模块: 1. 传感器数据采集模块:用于检测垃圾种类的传感器可能是红外传感器、重量传感器、图像识别模块(摄像头)等。这些传感器负责收集垃圾的特征数据,例如形状、大小、颜色、重量等。 2. 数据处理模块:通过算法对传感器数据进行处理,识别出垃圾的类别。这可能涉及到模式识别技术、机器学习算法等。 3. 分类执行模块:根据数据处理模块的识别结果,控制机械装置(如旋转的分类盘、可动挡板等)来实现垃圾的物理分类。 4. 用户界面模块:提供一个友好的界面给用户,允许用户查看分类结果、获取分类指南或进行系统设置。 5. 通信模块:智能垃圾分类系统可能需要与外部系统或云平台进行通信,以实现数据共享、远程监控或系统更新等功能。 在开源代码的使用上,参赛者和开发者可以参考这些代码来学习如何设计和实现一个智能垃圾分类系统,并根据自己的需求进行修改和扩展。对于学习嵌入式系统开发、物联网应用开发以及智能硬件设计的学生和开发者来说,这是一个非常好的实践和学习资源。" 以上内容涵盖了从智能垃圾分类系统的开发背景、目标、技术要求,到STM32H7微控制器的介绍,再到开源代码结构的分析,为理解和应用相关技术提供了全面的视角。

import timefrom serial import Serialimport serial.tools.list_portsimport cv2import numpy as npcap1 = cv2.VideoCapture("/Users/yankaipan/Desktop/stand.mp4")cap2 = cv2.VideoCapture("/Users/yankaipan/Desktop/apple.mp4")cap3 = cv2.VideoCapture("/Users/yankaipan/Desktop/bamboo.mp4")cap4 = cv2.VideoCapture("/Users/yankaipan/Desktop/rubbish.mp4")port_list = list(serial.tools.list_ports.comports())port_list_1 = list(port_list[2])port_serial = port_list_1[0]arduinoData = serial.Serial(port_serial, 9600)time.sleep(1)while True: while (arduinoData.inWaiting() == 0): pass dataPacket = arduinoData.readline() dataPacket = dataPacket.decode().strip() print(dataPacket) time.sleep(3) if dataPacket == "a": while cap1.isOpened(): ret, frame = cap1.read() if ret == True: cv2.imshow('Frame', frame) if cv2.waitKey(25) & 0xFF == ord('q'): break else: cap1.set(cv2.CAP_PROP_POS_FRAMES, 0) elif dataPacket == "b": while cap2.isOpened(): ret, frame = cap2.read() if ret == True: cv2.imshow('Frame', frame) if cv2.waitKey(25) & 0xFF == ord('q'): break else: cap2.set(cv2.CAP_PROP_POS_FRAMES, 0) elif dataPacket == "c": while cap3.isOpened(): ret, frame = cap3.read() if ret == True: cv2.imshow('Frame', frame) if cv2.waitKey(25) & 0xFF == ord('q'): break else: cap3.set(cv2.CAP_PROP_POS_FRAMES, 0) elif dataPacket == "d": while cap4.isOpened(): ret, frame = cap4.read() if ret == True: cv2.imshow('Frame', frame) if cv2.waitKey(25) & 0xFF == ord('q'): break else: cap4.set(cv2.CAP_PROP_POS_FRAMES, 0)cv2.destroyAllWindows()怎样修改代码能够在其中一个a视频播放时,接收到arduino发送的消息时能够触发另一视频b或c或d并播放?

2023-05-21 上传

import time from serial import Serial import serial.tools.list_ports import cv2 import numpy as np cap1=cv2.VideoCapture("/Users/yankaipan/Desktop/stand.mp4") cap2=cv2.VideoCapture("/Users/yankaipan/Desktop/apple.mp4") cap3=cv2.VideoCapture("/Users/yankaipan/Desktop/bamboo.mp4") cap4=cv2.VideoCapture("/Users/yankaipan/Desktop/rubbish.mp4") port_list = list(serial.tools.list_ports.comports()) port_list_1 =list(port_list[2]) port_serial = port_list_1[0] arduinoData=serial.Serial(port_serial,9600) time.sleep(1) current_video=None #记录当前正在播放的视频 while True: while (arduinoData.inWaiting()==0): pass dataPacket=arduinoData.readline() dataPacket=dataPacket.decode().strip() print(dataPacket) time.sleep(3) # if dataPacket=="b": # print("1") # else: # print('2') if dataPacket=="a": if current_video!=cap1: #判断是否需要切换视频 if current_video is not None: current_video.release() current_video=cap1 while(cap1.isOpened()): ret, frame = cap1.read() if ret == True: cv2.imshow('Frame', frame) if cv2.waitKey(25) & 0xFF == ord('q'): break else: cap1.set(cv2.CAP_PROP_POS_FRAMES,0) current_video.set(cv2.CAP_PROP_FRAMES,0) elif dataPacket=="b": if current_video!=cap2: #判断是否需要切换视频 if current_video is not None: current_video.release() current_video=cap2 while(cap2.isOpened()): ret, frame = cap2.read() if ret == True: cv2.imshow('Frame', frame) if cv2.waitKey(25) & 0xFF == ord('q'): break else: #cap2.set(cv2.CAP_PROP_POS_FRAMES,0) current_video.set(cv2.CAP_PROP_FRAMES,0) elif dataPacket=="c": if current_video!=cap3: #判断是否需要切换视频 if current_video is not None: current_video.release() current_video=cap3 while(cap3.isOpened()): ret, frame = cap3.read() if ret == True: cv2.imshow('Frame', frame) if cv2.waitKey(25) & 0xFF == ord('q'): break else: #cap3.set(cv2.CAP_PROP_POS_FRAMES,0) current_video.set(cv2.CAP_PROP_FRAMES,0) elif dataPacket=="d": if current_video!=cap4: #判断是否需要切换视频 if current_video is not None: current_video.release() current_video=cap4 while(cap4.isOpened()): ret, frame = cap4.read() if ret == True: cv2.imshow('Frame', frame) if cv2.waitKey(25) & 0xFF == ord('q'): break else: #cap4.set(cv2.CAP_PROP_POS_FRAMES,0) current_video.set(cv2.CAP_PROP_FRAMES,0) cv2.destroyAllWindows()代码运行播放a视频时接收到其他b或c或d;并不能播放相应的视频,该怎样修改代码才能让代码运行时实现这一功能?

2023-05-21 上传