- 2024-11-04
-
加入了学习《DigiKey KOL 系列:将TinyML融入IoT物联网应用中》,观看 将TinyML融入IoT物联网应用中
- 2024-11-03
-
加入了学习《汽车车身控制模块系统设计》,观看 汽车车身控制模块系统设计 - 4
- 2024-10-27
-
加入了学习《正点原子手把手教你学OneOS》,观看 如何理解裸机系统与RTOS
- 2024-10-26
-
加入了学习《 【2024 DigiKey 创意大赛】智能聊天机器人》,观看 智能聊天机器人
-
上传了资料:
STM32MP157智能垃圾桶
-
发表了主题帖:
【2024 DigiKey创意大赛】基于STM32MP157的智能垃圾桶
基于STM32MP157的智能垃圾桶
一、作品简介
作品照片;作品功能介绍;物料清单及简介,如使用的板卡、芯片、模块等;100-200 字
多功能智能垃圾桶,主要用了k210开发板来做识别和控制以及用stm32mp157来做传感器数据采集以及图像传输。主要功能如下
垃圾分类识别+舵机控制
语音控制垃圾桶开关
检测垃圾桶的满溢程度
摄像头读取图像信息并通过UDP传输至客户端使用视觉识别垃圾种类,通过 STM32F4通过RTOS控制舵机与电机实现垃圾倾倒,并将垃圾数据以及传感器数据发送给MP157,再由MP157使用socket编程上传数据到后端服务器并在网页可视化显
二、系统框图 设计思路、系统软硬件介绍及实现框图,以图文结合的方式展示
模型训练可以用mxyolov3平台,也可以用官方的训练平台(这个比较容易使用,但有数据集20M大小的限制),使用开发板前需要用KFLASH烧录.bin后缀的固件包,将训练完成的kmodel文件烧录至开发板,然后需要一段执行代码,后续的功能联调也是需要在识别代码基础上添加
识别完需要进行一些控制,不然结果也就只是结果。我在项目中通过pwm信号控制舵机转动,来识别垃圾桶的识别功能。
为了防止误判,我在识别代码里加了连续10帧检测同一物体才驱动舵机
使用CAN协议进行M2006大疆电机控制 配合PS2手柄可以做到远程控制垃圾桶前进、后退、加减速,自旋等
接下来就是把它上手玩起来。
三、各部分功能说明 各部分实现的功能说明及讲解,以图文结合的方式展示
ODYSSEY - STM32MP157C是一款基于STM32MP157C的单板计算机,STM32MP157C是一款双核Arm-Cortex-A7处理器,工作频率为650Mhz。该处理器还集成了Arm Cortex-M4协处理器,使其适合于实时任务。ODYSSEY - STM32MP157C以SoM(系统模块)和载波板的形式创建。SoM由MPU、PMIC、RAM和树莓派形式的载体板组成。承载板包括所有必要的外设,包括千兆以太网,WiFi/BLE,直流电源,USB主机,USB - c, MIPI-DSI, DVP用于相机,音频等。通过该板,客户可以快速评估SoM,并方便快捷地将SoM部署到自己的运营商板上。
双核Arm-Cortex-A7核心处理器与Cortex-M4集成som(系统模块)包括MPU, PMIC, RAM。树莓派40针兼容载波板。紧凑的尺寸和powerfulopen源硬件/ SDK / API / BSP / OSSpecification | |项值 | |----------| | 外围接口USB Host1 | 2 x x千兆以太网interface1x 3.5毫米音频interface1 MIPI DSI显示interface1 x DVP相机interface2格罗夫(GPIO & I2C) 1 x SD卡接口(在董事会)][WiFi /蓝牙| WiFi 802.11 b / g / n 2.4 ghzbluetooth 4.1)车载LED | 1 x重置LED3定义LED1功率LED]权力| 1 x直流接口(12 v / 2电源输入推荐)1 x USB类型- C键|1 x复位键1 x用户键1 x拨号码键|尺寸|56mm x 85mm| |工作温度|0~ 75℃|应用工业(can -以太网网关等)白色家电(冰箱、微波炉等)医疗(数据记录仪等)高端可穿戴设备(VR设备等)智能家居设备
垃圾分类识别+舵机控制
垃圾分类使用的开发板是K210
模型训练可以用mxyolov3平台,也可以用官方的训练平台(这个比较容易使用,但有数据集20M大小的限制),使用开发板前需要用KFLASH烧录.bin后缀的固件包,将训练完成的kmodel文件烧录至开发板,然后需要一段执行代码,后续的功能联调也是需要在识别代码基础上添加
识别完需要进行一些控制,不然结果也就只是结果。我在项目中通过pwm信号控制舵机转动,来识别垃圾桶的识别功能。
为了防止误判,我在识别代码里加了连续10帧检测同一物体才驱动舵机
识别控制
以下是舵机转动角度的函数,主要是改变PWM信号的占空比
def Servo(servo,angle):
servo.duty((angle+90)/180*10+2.5)
语音控制
语音控制
ld3320语音模块控制垃圾桶的开关(也就是ld3320跟K210通信,K210控制舵机转动)
ld3320跟K210通过UART串口通信
ld3320模块,识别到垃圾桶打开的指令,就通过串口向K210发送‘aa’的数据,在K210端进行UART串口信息的检测,若收到的信息为‘aa’ 就控制舵机转动
read_data = uart_wifi.read()
#下面是开盖 并进入检测 servo是转动角度的函数
if(read_data == b'bb'):
Servo(S3,-30)
flag = 1;
if(read_data == b'aa'):
Servo(S3,60)
flag = 0;
三、满溢度距离传感器数据获取(STM32MP157)
检测垃圾桶有没有满,距离检测主要用stm32mp157开发板上的ap3216c传感器。
对传感器数据的读取是读取设备文件数据,是通过文件 I/O 的方式来实现。在应用层编写代码读取设备下的数据即可。
以下为传感器数据读取的代码
QString Ap3216c::readPsData()
{
char const *filename = "/sys/class/misc/ap3216c/ps";
int err = 0;
int fd;
char buf[10];
fd = open(filename, O_RDONLY);
if(fd < 0) {
close(fd);
return "open file error!";
}
err = read(fd, buf, sizeof(buf));
if (err < 0) {
close(fd);
return "read data error!";
}
close(fd);
QString psValue = buf;
QStringList list = psValue.split("\n");
return list[0];
}
四、图像获取以及传输(STM32MP157)(UDP)
获取开发板摄像头的数据,并通过UDP传输至客户端
在QT中使用UDP传输流程:
服务器端创建socket,就可以直接使用writeDatagram函数发送信息,在函数的参数中需要写入数据,数据大小接收端的IP,端口号
(使用TCP的话一般服务器端是需要创建socket,bind,listen监听,并accept客户端的connect,我们这里传输视频信息,用UDP延时会比较小,当然只是理论,我并没有测试过)
客户端创建socket,绑定自己的IP和端口号,就可以用readDatagram函数接收数据
这里就用自己的电脑作为客户端,来获取垃圾桶的实时状况。(其实这个功能只是我为了学习网络编程强加的,功能比较鸡肋,主要是学习)
服务器端的代码
//摄像头通过调用opencv库获取到的数据类型为mat 需要先转成QImage类型
//QImage类型的图像放入QByteArray中,然后进行base64编码的压缩
//接收端在进行base64解码
/* udp套接字 */
QUdpSocket udpSocket;
/* QByteArray类型 */
QByteArray byte;
/* 建立一个用于IO读写的缓冲区 */
QBuffer buff(&byte);
/* image转为byte的类型,再存入buff */
qImage.save(&buff, "JPEG", -1);
/* 转换为base64Byte类型 */
QByteArray base64Byte = byte.toBase64();
/* 由udpSocket以单播的形式传输数据,端口号为8888 */
udpSocket.writeDatagram(base64Byte.data(), base64Byte.size(), QHostAddress("192.168.10.200"), 8888);
客户端代码
udpSocket = new QUdpSocket(this);
udpSocket->bind(QHostAddress("192.168.10.200"), 8888);
QByteArray datagram;
udpSocket->readDatagram(datagram.data(), datagram.size());
//String-Base64编码转QByteArray
QByteArray decryptedByte;
decryptedByte = QByteArray::fromBase64(datagram.data());
//比如读入一张BMP格式的文件到QByteArray对象中,再调用该函数,那么该函数就会根据QByteArray中数据进行解析,分析图像的格式等
QImage image;
image.loadFromData(decryptedByte);
videoLabel->setPixmap(QPixmap::fromImage(image));
CC := aarch64-linux-gnu-gcc
SRC := $(shell find src -name "*.c")
INC := ./inc \
./3rd/usr/local/include \
./3rd/usr/include \
./3rd/usr/include/python3.10 \
./3rd/usr/include/aarch64-linux-gnu/python3.10 \
./3rd/usr/include/aarch64-linux-gnu
OBJ := $(subst src/,obj/,$(SRC:.c=.o))
TARGET=obj/garbage
CFLAGS := $(foreach item,$(INC),-I$(item)) #-I./inc -I./3rd/usr/local/include
LIBS_PATH := ./3rd/usr/local/lib \
./3rd/lib/aarch64-linux-gnu \
./3rd/usr/lib/aarch64-linux-gnu \
./3rd/usr/lib/python3.10
LDFLAGS := $(foreach item,$(LIBS_PATH),-L$(item))#-L./3rd/usr/local/lib
LIBS := -lwiringPi -lpython3.10 -pthread -lexpat -lz -lcrypt
obj/%.o:src/%.c
mkdir -p obj
$(CC) -o $@ -c $< $(CFLAGS)
$(TARGET) : $(OBJ)
$(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS) $(LIBS)
scp obj/garbage src/garbage.py orangepi@192.168.0.113:/home/orangepi/garbage
compile: $(TARGET)
clean: rm $(TARGET) obj $(OBJ) -rf
debug:
echo $(CC)
echo $(SRC)
echo $(INC)
echo $(OBJ)
echo $(TARGET)
echo $(CFLAGS)
echo $(LDFLAGS)
echo $(LIBS)
由于本作品代码上传到了下载·中心,就不浪费篇幅在此粘贴具体代码,感兴趣的朋友可去下载中心查阅,有完整详细的代码,在此仅仅列举文件目录结构。
源码链接:https://bbs.eeworld.com.cn/my/home.php?cur=myhome&act=download
项目源码说明
五、作品功能演示视频
[localvideo]400c87126566c898a331d64ab3227628[/localvideo]
六、项目总结
使用视觉识别垃圾种类,通过 STM32F4通过RTOS控制舵机与电机实现垃圾倾倒,并将垃圾数据以及传感器数据发送给MP157,再由MP157使用socket编程上传数据到后端服务器并在网页可视化显示
- 2024-10-12
-
发表了主题帖:
【2024 DigiKey 创意大赛】智能垃圾桶开发一
一、前言
最近参与了【2024 DigiKey 创意大赛】刚刚拿到了其第一期板卡
这个基于单核或双核Cortex-A7与Cortex-M4组成的异构架构通用微处理器产品线,目标是支持轻松开发更广泛应用,加强了支持多应用和灵活应用的能力,可以随时实现最佳性能和功率指标。
其中Cortex-A7内核提供对开源操作系统(Linux/Android)的支持,而Cortex-M4内核可以利用STM32 MCU生态系统。
芯片全系列支持丰富的数字和模拟外设集,而高端的MP157系列更是支持GPU,从而支持高级HMI开发。
所以这个产品线一推出,马上得到业界的追捧——韦东山老师近期推出的MP157嵌入式Linux开发板就有较多人入手;昨天正点原子发布了他们的开发板演示视频;再早些时候Seeed则推出了对应的SOM和跟树莓派扩展兼容的载板。加上米尔科技的开发板,已经有4个著名厂家推出了基于MP157的产品,足以看出它是有多火热。各大厂商PK,对广大用户的好处就是,教程和相关资料迅速丰富起来。
ODYSSEY–STM32MP157C
,话不多说,先上图:
有关其详细介绍和资料链接见:https://www.eetree.cn/doc/detail/2004
其提供的上手视频链接为:https://class.eetree.cn/detail/v_5f61c137e4b0d59c87b63760/3?fromH5=true
二、下载镜像,安装系统
从SEEED官网下载镜像:https://wiki.seeedstudio.com/cn/ODYSSEY-STM32MP157C/#_7
点击下载镜像和烧录工具,由于是国外的网站,下载可能比较慢,请耐心等待;
然后需要准备一张SD卡和一个读卡器,之前在某多多买了一张microSD卡,正好试一下
软件会自动选择您插入的SD卡,如果识别错误可以修改,然后点击Flash开始烧录
然后等待其烧写完成
然后将SD卡插入ODYSSEY–STM32MP157C中,接着准备一根【Type-C数据线】用来供电,一个【USB装UART模块】用来做串口终端
接下将【Type-C数据线】和【USB装UART模块】都连接到电脑,打开串口终端软件,这里我使用我常用的MobaXterm,串口波特率设为115200,然后等待一会,可以看到蓝色的USER LED闪烁,表示启动成功:
我们也可以在串口终端看到其打印信息
三、切换到EMMC启动
我们用默认用户名:debian,密码:temppwd进行登录,可以看到,登录成功,
注意:这里密码是不会回显的
然后我们输入目命令,等待其重新启动
sudo sh -c "echo cmdline=init=/opt/scripts/tools/eMMC/init-eMMC-flasher-v3-stm32mp1.sh >> /boot/uEnv.txt" sudo reboot
然后等待蓝色的USER LED停止闪烁,持续点亮;接下来断电,将SD拔出,将拨码开关拨到EMMC启动处,重新上电
同样使用默认用户名:debian,密码:temppwd进行登录,可以看到,登录成功,这样就完成了切换到EMMC启动,不再需要SD卡了
四、启动WiFi,连接到网络
因为初始系统没有加入WiFi,所以我们要将WiFi加入,打开/boot/uEev.txt文件
sudo vi /boot/uEnv.txt
将dtb=stm32mp1-seeed-npi-base.dtb修改为dtb=stm32mp1-seeed-npi-full.dtb,如下所示
然后使用sudo reboot命令重启一下,再次使用默认用户名:debian,密码:temppwd进行登录。
接下来使用connmanctl网络管理工具连接WiFi,
直接输入connmanctl命令打开网络管理工具
然后输入命令enable wifi开启WiFi 功能
可以使用命令scan wifi扫描附近的WiFi,使用services命令显示
输入agent on命令
使用connect + 你要连接的WiFi后面的代码连接你要连接的WiFi(可以Tab键自动补全),然后输入密码
连接成功后使用quit命令退出
其中有一些系统打印信息,忽略就好,然后可能会出现如下错误,
Error /net/connman/technology/wifi: No carrier
提示无法扫描到WiFi,可以尝试重启开发板。
连接到WiFi后使用ifconfig查看IP地址,其中wlan0就是WiFi
接下来尝试一下是否连接到网络,可以看到,联网成功,成功ping通百度的网站
- 2024-10-08
-
发表了主题帖:
【2024 DigiKey 创意大赛】智能垃圾桶开箱贴
元器件开箱贴:智能垃圾桶项目
开箱情况
外观与尺寸:Seed SoM-STM32MP157C是一个小型的单板计算机,尺寸适中,外观精致,非常适合嵌入式项目。
功能特点:
处理能力:基于高性能的STM32MP157C芯片,具有强大的处理能力,适合处理复杂的数据和控制逻辑。
I/O接口:提供丰富的I/O接口,包括GPIO、SPI、I2C等,方便连接各种传感器和执行器。
操作系统支持:支持多种实时操作系统,如FreeRTOS,适合开发复杂的嵌入式应用。
网络功能:具备Wi-Fi和蓝牙功能,可以实现远程控制和数据传输。
参考资料:
STM32MP157C Datasheet
Seed SoM-STM32MP157C 官方网站
外观与尺寸:DFROBOT Color Sensor外形小巧,尺寸合适,外壳坚固,适合嵌入式应用。
功能特点:
颜色识别:能够检测不同颜色的物体,适用于垃圾分类等应用。
灵敏度:具有较高的灵敏度,能够准确识别不同颜色。
接口类型:提供I2C接口,方便与微控制器等设备连接。
参考资料:
[DFROBOT Color Sensor 官方网站](https://www.dfrobot.com/product/color-sensor
舵机:用于推动垃圾桶的开关。
传感器:如温度传感器、湿度传感器等,用于监测环境条件。
上位机:用于显示垃圾桶的状态信息。
电源管理模块:确保系统稳定运行。
初步印象
Seed SoM-STM32MP157C:外观精致,尺寸适中,接口齐全,看起来非常适合智能垃圾桶项目。
DFROBOT Color Sensor:外观小巧,外壳坚固,看上去非常适合进行颜色识别。
电机:尺寸合适,看起来足够强大以推动垃圾桶的开关。
传感器:尺寸适中,外壳坚固,看起来可靠可靠。
显示屏:屏幕清晰,尺寸适中,应该能很好地显示状态信息。
电源管理模块:外观专业,看起来能有效地管理电源。
第一印象
整体来看,这些元器件看起来都非常适合用于智能垃圾桶的制作。Seed SoM-STM32MP157C作为主控制单元,其强大的处理能力和丰富的I/O接口将为项目提供强大的支持。DFROBOT Color Sensor的颜色识别功能将使垃圾分类更加准确,而电机、传感器和显示屏等其他元器件也将为智能垃圾桶的功能实现提供必要的支持。
希望这个开箱贴能帮助你更好地了解这些元器件,并为你的智能垃圾桶项目提供参考。
- 2024-09-22
-
加入了学习《DigiKey 应用说:Raspberry Pi 5 在视频直播中的应用》,观看 Raspberry Pi 5 在视频直播中的应用
- 2024-09-15
-
加入了学习《汽车车身控制模块系统设计》,观看 汽车车身控制模块系统设计 - 3
-
加入了学习《汽车车身控制模块系统设计》,观看 汽车车身控制模块系统设计 - 2
-
加入了学习《汽车车身控制模块系统设计》,观看 汽车车身控制模块系统设计 - 1
- 2024-08-03
-
加入了学习《汽车前照灯应用的开关式 LED 驱动器》,观看 1.2智慧头灯
-
加入了学习《汽车前照灯应用的开关式 LED 驱动器》,观看 1.1汽车前照灯种类
-
加入了学习《汽车电器与电子技术》,观看 前照灯的结构
- 2024-07-16
-
加入了学习《汽车照明应用中的高边线性 LED 驱动产品》,观看 1.4 单通道LED控制器TPS9261x-Q1介绍
-
加入了学习《汽车照明应用中的高边线性 LED 驱动产品》,观看 1.3 三通道LED控制器TPS92830-Q1介绍
-
加入了学习《汽车照明应用中的高边线性 LED 驱动产品》,观看 1.2 多通道LED驱动器TPS9263x-Q1介绍