- 2024-11-07
-
回复了主题帖:
【DigiKey创意大赛】便携生命探测仪07+作品提交
这个手枪式外壳,用3D打印就酷帅了。
- 2024-11-04
-
回复了主题帖:
【DigiKey创意大赛】家庭共享智能药盒06+作品提交
秦天qintian0303 发表于 2024-11-2 23:25
这个项目完成度很高啊
基本功能都完成了,还有一些细节来不及做了
- 2024-11-02
-
发表了主题帖:
【DigiKey创意大赛】家庭共享智能药盒06+作品提交
家庭共享智能药盒
作者:oet
一、作品简介
以往的智能药盒主要是针对单个用户设计,实际应用中,随着老龄化越发严峻,家中有两位甚至更多老人长期吃药,维持血压,血糖水平的需求越来越多,单用户药盒就不太适用了。为了解决这个痛点,我设计这个家庭共享智能药盒,支持多个用户使用。本方案采用STM32H7B3I-DK作为主控,使用OpenMV进行人脸识别,配合屏幕显示和语音提示,做成自动识别用户,主动显示药品格子号,并点亮药品格子指示灯,让用户尽量少做选择。该作品还安装了BME280传感器,用来采集室内温湿度信息并显示。下图是最终的作品照片,我用带方格的白纸代替药盒,方便演示,看起来更直观。
本次作品从得捷电子采购的器件:
序号
型号
名称
用途
1
OPENMV4 CAM H7
OPENMV开发板
用于识别人脸
2
BME280
BME280传感器
采集湿度,温度参数
3
T1341MND
白色发光管
用于常规指示灯
本次作品自备的器件:
序号
型号
名称
用途
1
STM32H7B3I-DK
STM32开发板
实现主控的操作界面
2
DFR0745
语音录放模块+小喇叭
用于播放各种提示语音
3
PicoW
树莓派单片机开发板
用于控制语音模块和灯带
4
WS2812B
RGB灯带
用作药盒指示灯
二、系统框图
整个系统框图如下图。
如上图所示,我选用了一块STM32H7B3I-DK开发板作为主控。该开发板自带480*272分辨率电容触摸屏,采用STM32H7系列CPU,运算能力强大,外设接口丰富。OpenMV模块通过串口与主控连接,将人脸识别结果传递给主控。BME280传感器通过I2C接口与主控连接,负责采集温度和湿度参数。这里为了方便调试程序,模块化处理,我选用了一块PicoW开发板控制灯带和语音录放模块,实现药盒的指示灯提示和语音提示。PicoW开发板通过串口与主控连接。
三、各部分功能说明
STM32H7B3I-DK开发板主控
使用该开发板可以基于TouchGFX很容易做出漂亮的人机交互程序。本作品人机交互共三个界面,分别是主页,取药页面,管理页面,下面分别介绍。
(1)主页
该页面是开机就显示的界面,设计图片如下。
左半边是信息界面,主要显示年月日时间和温湿度。右半面放了两个按钮,分别指向两个主要功能页面。
其中时间数据来自单片机自带的RTC。温湿度数据来自湿度温度传感器BME280。此时还未建立连接,显示随机数。
(2)取药页面
该页面是自动或手动取药界面,支持最多6个人存药,每个人最多支持十六种药品。设计图片如下。
取药方式分为两种情况:自动人脸识别方式和手动方式。当在主页点击“取药”按钮后,会启动摄像头自动识别人脸,如果识别成功,自动显示取药人和对应药盒编号。如果识别失败,则只能手动方式点击对应的人物按钮,在右边会显示药盒编号。取药人按照编号拿取药品即可。
(3)管理页面
该页面用于设置人物和药品,并录入人脸信息。支持的人数和药品数和取药界面是一致的。设计图片如下。
设置时,先点击左边人物角色,然后点击右边药盒号码,点亮哪个药盒号按钮就代表选中对应的药盒。然后点保存按钮存储设置信息。最后点击录入按钮启动人脸拍摄,人脸存储编号和选中的人物角色对应。
OpenMV人脸识别模块
最开始我使用官网例程进行设计,例程需要手工在TF卡上建立文件夹,然后分别录入图片,整个操作流程繁琐,结构松散,想整合到我这次作品中,有点无从下手。思虑后我打算参考例程自己从新写个程序,实现本次作品特定的功能。我使用Kimi做辅助,经过几次不断调试,终于把程序调好。主要实现以下功能。
(1)、如果通过串口3接收字符指令'1','2','3','4','5','6',分别对应录入6个人脸图片,放在sd卡中以'1','2','3','4','5','6'命名的6个文件夹中。
(2)、每个人脸要录入10张图片,规格为128*128分辨率的灰度pgm格式,录入间隔1秒,用绿色指示灯闪烁一下表示存储每张图片完成;
(3)、如果通过串口3接收字符指令'r',则启动人脸识别程序,使用find_lbp函数进行特征提取;
(4)、用match_descriptors函数对上一步提取的特征和所有存储的人脸图片的特征做对比计算差异度,找出差异度最小的值。
(5)、如果这个最小值小于预先设置的一个阈值,代表识别成功。通过串口3发送最小差异值图片所在的文件夹名称;
(6)、如果这个最小值不小于预先设置的一个阈值,代表识别失败。通过串口3发送'0'。
这些功能对应的串口通讯协议如下:
(1)、MCU发送字符‘1’-‘6’分别对应6个人物角色,录入人脸,录入完成后OpenMV返回字符‘k’。
(2)、MCU发送字符‘r’进行人脸识别,识别成功后OpenMV返回字符‘1’-‘6’分别对应6个人物角色,识别失败返回字符‘0’。
代码编辑好后就是做实验了。这个时候再找真人不停地拍照太麻烦了,我就想直接从网上找现成的照片进行测试也一样啊。经过资料查找,最终确定使用《CK表情分类数据集》。这个数据集中,包含多个人的各种表情图片,每种表情记录了几张到十几张图片不等,每个人图片总数都在几十张以上,我选取了7个人,使用每个人部分图片作为训练对比参考,剩余的作为测试图片,这样一下子解决了需要不同人拍照问题。
我只需在另外一个显示器上显示参考或测试图片,把摄像头调整好距离,就能完美测试了。下图是实际调试拍照,测试效果很好。
在OpenMV IDE输出调试信息显示程序运行正确无误。
在串口终端也完全实现了预期的发送指令和接收结果的功能。
3、BME280传感器
本次作品由于金额限制,只够选购一个BME280芯片,该芯片封装很小,需要自己做一个PCB。我就在立创EDA上设计了简单的电路,主要实现3个功能:a、屏幕转接;b、湿度温度传感器BME280转接;c、预留了一个MLX90640红外热成像传感器的封装。
具体电路见下图:
原理图画好后,PCB设计先把一些电源走线连好,剩下信号线直接自动布线,基本不用费脑汁,一下就搞定了。如下图。
BME280传感器具有SPI和I2C两种接口,我采用I2C接口和主控板连接,从GitHub上找到驱动程序,配置到主程序中就好用,使用非常简单。读取温湿度参数成功后,显示到屏幕上的效果如下图。
4、PicoW驱动的语音模块和灯带显示
在最初的计划中,是想用STM32主控直接驱动语音模块和灯带显示,但是在调试过程中,发现STM32H7连接WS2812B灯带的时序比较难搞,手头还没有逻辑分析仪用于找原因,就在中间加了一块PicoW开发板做转接。以前用这个PicoW开发板调试过WS2812B灯带,程序比较好设计。同样语音模块在PicoW开发板上也有调试经验,就整合到一起了。
首先介绍一下灯带指示灯设计。按照计划,药盒有16个格子,每次取药,需要按照预先的设置亮起对应格子的灯。在软件中,我使用一个16位的变量存储设置值,每一个位代表一个灯。我买的灯带是1米长度共30个灯,为了不破坏整条灯带,我采用蛇形布局,如下图。
在每个拐弯处空闲3个灯,在灯带末端还有5个闲置灯,这样就造成我要用的16个灯不是连续的,需要在设计程序的时候,重新映射一下,将16位数和这些灯对应起来。具体实现是做了一个表格,通过查表把顺序排好,具体程序见下图。
PicoW开发板的程序采用CircuitPython编写,点灯程序实现了每点亮4个灯珠间隔3个闲置灯珠的功能,代码如下。
通过两部分配合就实现了预期功能。
语音部分比较简单,就是通过串口发AT命令就行,具体参见附件代码,这里介绍一下语音生成的方法。我找到一个免费的网站,如下:
https://d1tools.com/tools/ai-tts/
可以将文字合成多种语音,非常方便。
将合成的MP3格式的语音文件按照语音芯片规定的顺序号存到芯片内,在程序中就可以指定播放相应的音频了。
四、作品源码
STM32H7B3I-DK程序基于TouchGFX开发。
OpenMV程序采用OpenMV IDE开发。
PicoW程序采用CircuitPython开发。
家庭共享智能药盒源代码
https://download.eeworld.com.cn/detail/oet/634874
五、作品功能演示视频
[localvideo]ed5c1a05da40b4f848b4550a32176699[/localvideo]
六、项目总结
感谢EEWorld和得捷电子提供的这次机会,让我体验了OpenMV的各种奇妙应用。本次作品中用到的其他板卡,也是历次参加咱们论坛活动得到了,感觉参加这些活动不但能尝试新技术新方案,还能不断提高自己的技术水平,希望论坛活动不断,板卡也不断更新。
下面链接是本次作品开发过程中的经验分享贴,本文中没有详细介绍的内容,在下面帖子中都能找到。
https://bbs.eeworld.com.cn/thread-1290209-1-1.html
https://bbs.eeworld.com.cn/thread-1292085-1-1.html
https://bbs.eeworld.com.cn/thread-1294161-1-1.html
https://bbs.eeworld.com.cn/thread-1296531-1-1.html
https://bbs.eeworld.com.cn/thread-1296930-1-1.html
七、其他
无。
- 2024-11-01
-
上传了资料:
家庭共享智能药盒源代码
- 2024-10-30
-
回复了主题帖:
【DigiKey创意大赛】家庭共享智能药盒05+基于TouchGFX的UI程序设计
秦天qintian0303 发表于 2024-10-25 13:28
这是用的ST的那块板子啊?
STM32H7B3I-DK
这个开发板
https://www.st.com/en/evaluation-tools/stm32h7b3i-dk.html
- 2024-10-24
-
发表了主题帖:
【DigiKey创意大赛】家庭共享智能药盒05+基于TouchGFX的UI程序设计
[localvideo]7c64ccb4e5f1eeb82d8633b58b1322fc[/localvideo]
上一贴介绍人脸分辨程序的设计过程,实现了通过OPENMV分辨不同的人脸,并通过串口输出结果。本帖介绍基于TouchGFX的人机交互程序设计。
本作品人机交互共三个界面,分别是主页,取药页面,管理页面,下面分别介绍。
主页
该页面是开机就显示的界面,设计图片如下。
左半边是信息界面,主要显示年月日时间和温湿度。右半面放了两个按钮,分别指向两个主要功能页面。
其中时间数据来自单片机自带的RTC。温湿度数据来自湿度温度传感器BME280。此时还未建立连接,显示随机数。
取药页面
该页面是自动或手动取药界面,支持最多6个人存药,每个人最多支持十六种药品。设计图片如下。
取药方式分为两种情况:自动人脸识别方式和手动方式。当在主页点击“取药”按钮后,会启动摄像头自动识别人脸,如果识别成功,自动显示取药人和对应药盒编号。如果识别失败,则只能手动方式点击对应的人物按钮,在右边会显示药盒编号。取药人按照编号拿取药品即可。
管理页面
该页面用于设置人物和药品,并录入人脸信息。支持的人数和药品数和取药界面是一致的。设计图片如下。
设置时,先点击左边人物角色,然后点击右边药盒号码,点亮哪个药盒号按钮就代表选中对应的药盒。然后点保存按钮存储设置信息。最后点击录入按钮启动人脸拍摄,人脸存储编号和选中的人物角色对应。
4、程序接口
目前界面程序已经完成,留出和其他外设的API接口,如下图。
等把外设接口调试完成后,加入对应的函数接口即可实现对应的功能。
完整界面操作演示见开头视频。
-
回复了主题帖:
【DigiKey创意大赛】家庭共享智能药盒04+人脸分辨程序设计
chejm 发表于 2024-10-23 20:53
请教楼主,你的产品如果售卖是否需要进行3C认证啊
这个做着玩的,没打算销售
如果是用于销售的,最好是去过一下认证,市场适用范围更广。
- 2024-10-20
-
回复了主题帖:
【DigiKey创意大赛】家庭共享智能药盒03+设计PCB和调试BME280
JOEYCH 发表于 2024-10-20 13:29
被q到了,双光融合是我的题目
回头参考一下你的作品
-
回复了主题帖:
【DigiKey创意大赛】家庭共享智能药盒04+人脸分辨程序设计
JOEYCH 发表于 2024-10-20 13:42
实时性好吗?
一秒以内识别完成,速度还可以
- 2024-10-18
-
加入了学习《得捷电子专区》,观看 【2024 DigiKey 创意大赛】红外温度检测及火灾报警器
-
发表了主题帖:
【DigiKey创意大赛】家庭共享智能药盒04+人脸分辨程序设计
本帖最后由 oet 于 2024-10-18 20:57 编辑
上一贴介绍了设计PCB和调试BME280,给OPENMV增加了显示模块和传感器。本帖介绍人脸分辨程序的设计过程。
基于OPENMV的人脸分辨程序设计在星瞳官网有一个专门的教程,链接如下:
https://book.openmv.cc/image/face.html
里面还有对应的视频,将原理讲解的比较明白。主要是使用OPENMV系统自带的LBP算法实现人脸分辨。
最开始我使用官网例程进行学习,请家人做模特照相,调试程序。如下图是试验的文件。
效果基本和官网视频介绍的相当,但是需要手工在TF卡上建立文件,然后分别录入图片,整个操作流程繁琐,结构松散,想整合到我这次作品中,有点无从下手。
思虑后我打算参考例程自己从新写个程序,实现我这次特定的功能。我先把程序需求想好了,然后备忘就在记事本上记下来了。恰好当时正在给孩子处理作业的事情,使用Kimi找算术题,造句等,借助AI给孩子辅导作业很方便。这个弄完我突然想到,何不让AI帮我写程序呢,试试又不花钱,说干就干。
我把之前写好的需求直接输入Kimi,经过它的一通查询,果然给我弄出一篇代码,我仔细读后发现有些问题,开始手动修改代码。然后出来第一版能凑合运行的框架程序,但是距离能用还差很远。
本来打算放弃了,但是又有点不甘心,就又尝试告诉Kimi,指明它生成的代码有哪些不足,让它自己修改,然后我就发现它果然能改好,这让我大喜,我就按照和同事沟通一样,不停的多次沟通,它就不停的迭代生成的代码。如下图是某次沟通截图。
使用Kimi关键是文字需求描述要清晰准确,下图是我三次更改描述语句,让Kimi进行程序生成。
经过七次大版本迭代,终于搞出一版在程序结构,功能实现上基本都能满足要求的代码。下图是我保存的历次大版本代码。
直接生成的代码,在编译运行时还是有些问题的,下面是直接生成的代码,大家可以看看有什么问题。
代码1:
#带显示功能
import sensor, image, time, pyb, os
from fpioa_manager import fm, board_info
from Maix import GPIO
from display import SPIDisplay
# 初始化摄像头
sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)
sensor.set_auto_gain(False) # 关闭自动增益
sensor.set_auto_whitebal(False) # 关闭自动白平衡
# 初始化SD卡
uos.mount(sdcard, '/sd')
# 初始化LED灯
led = pyb.LED(1)
# 初始化串口
uart3 = pyb.UART(3, 115200)
# 初始化显示屏
lcd = SPIDisplay(width=132, height=132, bgr=True)
lcd.init()
# 阈值设置
THRESHOLD = 50
# 录入人脸图片并计算LBP特征
def capture_face(index):
if not os.path.exists('/sd/{}'.format(index)):
os.mkdir('/sd/{}'.format(index))
for i in range(10):
img = sensor.snapshot()
img = img.resize(128, 128) # 调整图像大小
lcd.display(img) # 显示调整大小后的图像
lbp = img.find_lbp((0, 0, img.width(), img.height()))
lbp.save('/sd/{}/face_{}.lbp'.format(index, i))
led.on()
time.sleep(100)
led.off()
time.sleep(900)
# 接收指令并录入人脸
def receive_and_capture():
while True:
data = uart3.read()
if data:
cmd = data.decode()[0]
if cmd.isdigit() and int(cmd) in range(1, 7):
capture_face(cmd)
elif cmd == 'r':
face_recognition()
# 启动人脸识别
def face_recognition():
img = sensor.snapshot()
img = img.resize(128, 128) # 调整图像大小
lcd.display(img) # 显示调整大小后的图像
lbp = img.find_lbp((0, 0, img.width(), img.height()))
min_diff = 999999
recognized = None
for folder in range(1, 7):
for i in range(10):
template_file = '/sd/{}/face_{}.lbp'.format(folder, i)
if os.path.exists(template_file):
template = image.load(template_file)
diff = image.match_descriptors(lbp, template)
if diff < min_diff:
min_diff = diff
recognized = folder
if min_diff < THRESHOLD:
uart3.write('{}\n'.format(recognized))
else:
uart3.write('0\n')
# 显示识别结果
img.draw_string(10, 10, "Recognizing...", color=(255), scale=2)
if recognized:
img.draw_string(10, 40, "Match Found!", color=(255), scale=2)
else:
img.draw_string(10, 40, "No Match Found", color=(255), scale=2)
lcd.display(img) # 显示带有识别结果的图像
# 主循环
def main():
while True:
data = uart3.read()
if data:
cmd = data.decode()[0]
if cmd == 'r':
face_recognition()
elif cmd.isdigit() and int(cmd) in range(1, 7):
capture_face(cmd)
if __name__ == '__main__':
main()
经过我的修改,最终能运行的代码:
代码2:
#带显示功能
#import sensor, image, time, pyb, os
#from fpioa_manager import fm, board_info
#from Maix import GPIO
#from display import SPIDisplay
import time, os, pyb
import display
import sensor, image, machine
# 初始化摄像头
sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)
#sensor.set_framesize(sensor.QVGA)
#sensor.set_pixformat(sensor.RGB565) # or sensor.GRAYSCALE
sensor.set_framesize(sensor.B128X128) # 128x160大小的特定液晶屏。
sensor.skip_frames(time=200)
sensor.set_auto_gain(False) # 关闭自动增益
sensor.set_auto_whitebal(False) # 关闭自动白平衡
# 初始化SD卡
#os.mount(sdcard, '/sd')
# 初始化LED灯
led = pyb.LED(1)
# 初始化串口
uart3 = pyb.UART(3, 115200)
# 初始化显示屏
lcd = display.SPIDisplay( width=132, height=132,bgr=True)
#lcd = SPIDisplay(width=132, height=132, bgr=True)
#lcd.init()
print("start ok")
# 阈值设置
THRESHOLD = 2600
# 录入人脸图片并计算LBP特征
def capture_face(index):
if not '{}'.format(index) in os.listdir():
os.mkdir('{}'.format(index)) # 新建一个新的文件夹
print("mkdir ok")
for i in range(10):
led.on()
time.sleep_ms(100)
img = sensor.snapshot()
lcd.write(img) # 拍照并显示图像。
img.save('/{}/face_{}.pgm'.format(index, i))
print('/{}/face_{}.pgm'.format(index, i))
led.off()
time.sleep_ms(900)
# 接收指令并录入人脸
def receive_and_capture():
while True:
data = uart3.read()
if data:
cmd = data.decode()[0]
if cmd.isdigit() and int(cmd) in range(1, 7):
capture_face(cmd)
elif cmd == 'r':
face_recognition()
# 启动人脸识别
def face_recognition():
img = sensor.snapshot()
lcd.write(img) # 拍照并显示图像。
lbp = img.find_lbp((0, 0, img.width(), img.height()))
min_diff = 999999
recognized = None
img_temp = img
for folder in range(1, 7):
for i in range(10):
if '{}'.format(folder) in os.listdir():
template_file = '/{}/face_{}.pgm'.format(folder, i)
img = image.Image(template_file)
template = img.find_lbp((0, 0, img.width(), img.height()))
diff = image.match_descriptor(lbp, template)
if diff < min_diff:
min_diff = diff
recognized = folder
print(min_diff,recognized)
img_temp = img
else:
print("no dir:"+template_file)
if min_diff < THRESHOLD:
uart3.write('{}\n'.format(recognized))
print('{}\n'.format(recognized))
img_temp.draw_string(5, 120, "Match Found!", color=(255), scale=1)
else:
uart3.write('0\n')
print('0\n')
img_temp.draw_string(5, 120, "No Match Found", color=(255), scale=1)
# 显示识别结果
lcd.write(img_temp) # 显示带有识别结果的图像
# 主循环
def main():
img = sensor.snapshot()
lcd.write(img) # 拍照并显示图像。
while True:
data = uart3.read()
if data:
cmd = data.decode()[0]
if cmd == 'r':
face_recognition()
elif cmd.isdigit() and int(cmd) in range(1, 7):
capture_face(cmd)
if __name__ == '__main__':
main()
代码编辑好后就是做实验了。这个时候再找家人不停地拍照太麻烦了,我就想直接从网上找现成的照片进行测试也一样啊。经过资料查找,最终确定使用《CK表情分类数据集》。这个数据集中,包含多个人的各种表情图片,每种表情记录了几张到十几张图片不等,其中每个人图片总数都在几十张以上,我选取了7个人,使用每个人部分图片作为训练对比参考,剩余的作为测试图片,这样一下子解决了需要不同人拍照问题。
我只需在另外一个显示器上显示参考或测试图片,把摄像头调整好距离,就能完美测试了。下图是实际调试拍照,测试效果很好。
在OpenMV IDE输出调试信息显示程序运行正确无误。
在串口终端也完全实现了预期的发送指令和接收结果的功能。
通过以上测试,确认这个AI生成的程序完全实现了预期的功能。
从此之后,我又多了一个好帮手,编写简单程序,只需要把需求写清楚,让Kimi帮忙实现,不但效率高,还省脑细胞!
- 2024-09-26
-
回复了主题帖:
【DigiKey创意大赛】家庭共享智能药盒03+设计PCB和调试BME280
wangerxian 发表于 2024-9-23 09:07
明白了,这个电路板可以复用呗,焊不同的件,不同的功能。
对的,做一次板,实现多个功能
- 2024-09-21
-
回复了主题帖:
【DigiKey创意大赛】家庭共享智能药盒03+设计PCB和调试BME280
wangerxian 发表于 2024-9-19 10:44
嘉立创的PCB开源确实是一大壮举,话说热成像传感器的位置是不是被摄像头挡住了?
这个PCB是根据不同场景焊接不同器件的,焊接热成像传感器的时候不焊接屏幕,焊屏幕的板反插在背面,整个就像一个双目摄像机,等大赛的事情弄完,再搞一下双光融合的测试。
- 2024-09-19
-
回复了主题帖:
【2024 DigiKey创意大赛】【智能家居控制中心】【EP02】ESP32-S3-LCD-EV + BME680整合
可以试试PlatformIO+Arduino 框架,这个现成的轮子比较多,移植起来省事
-
回复了主题帖:
【DigiKey创意大赛】家庭共享智能药盒03+设计PCB和调试BME280
lansebuluo 发表于 2024-9-19 08:26
大多板子都预留有安装固定孔,可以使用铜柱将其固定在一起,非常牢固
设计PCB的时候的确想用铜柱或塑料六角间隔柱支撑,但是这个位置和预留的焊盘干涉,只好改用便宜实惠的泡棉了
-
回复了主题帖:
【DigiKey创意大赛】家庭共享智能药盒03+设计PCB和调试BME280
Jacktang 发表于 2024-9-19 07:20
海绵垫高是个好注意,焊接没问题下面就方便测试了,不用怀疑板子装配的问题了
是啊,做个板比用杜邦线方便很多
- 2024-09-18
-
发表了主题帖:
【DigiKey创意大赛】家庭共享智能药盒03+设计PCB和调试BME280
本帖最后由 oet 于 2024-9-18 23:43 编辑
上一贴进行了OPENMV开发环境搭建和加装屏幕,让OPENMV有了显示能力。本来原计划进行人脸识别程序设计,但是在调试过程中,遇到了问题,就是那个屏幕用杜邦线连接,在反复测试中,总是接触不良,导致显示时好时坏,索性我决定直接设计一块转接板,像官方配件那样把屏幕叠拼起来。
说起设计PCB,不得不提一个伟大的公司:嘉立创。对于我这样的DIY爱好者来说,嘉立创提供的免费打板,开源广场等服务,真的是友好到姥姥家了,可以说该公司以一己之力,让中国的电子行业基础实验水平上升了一大台阶,尤其是对于电子专业在校大学生,简直是资源宝库。本次我就在立创EDA上设计了简单的电路,主要实现3个功能:a、屏幕转接;b、湿度温度传感器BME280转接;c、预留了一个MLX90640红外热成像传感器的封装。
具体电路见下图:
原理图画好后,PCB设计先把一些电源走线连好,剩下信号线直接自动布线,基本不用费脑汁,一下就搞定了。如下图。
然后就是领券打板,每个月每个账号有两次免费打样机会,而且是顺丰包邮,不用花一分钱,再次感谢嘉立创。
做板速度也是嘎嘎快,大概5天不到,我就收到了样板,我全部用的默认参数,看起来板子相当不错。如下图。
这个板里面,最大的焊接难度就是传感器BME280,这个器件太小了,封装是从立创开源广场引用的现成的,没什么问题。然后找锡膏涂焊盘,用热风枪慢慢吹焊在PCB上,经过一番努力,终于焊完了,如下图。
先用万用表测试各个引脚,确保没有短路,就可以上电。继续测试,各个引脚电压都正常,这就成功了一大半。接下来随便找了一个ESP32的Arduino板,从Arduino库管理界面下载Adafruit BME280的驱动库,选择最基础的测试例程,照着程序提示设置好I2C接口引脚和地址,下载运行。我这次非常幸运,直接就好用了,说明我这个焊接没问题。如下图。
最困难的焊接搞定了,就把其余接屏的插针插母都焊上,如下图。
组装起来屏幕悬空不稳定,又裁了一块泡棉垫高支撑一下,如下图。
最终拼叠出来的效果如下图。
最后上电测试屏幕显示正常,如下图。
至此,这个新做的板子调试完成,后面就可以放心大胆的调试程序,不用担心接触不良了。
- 2024-08-31
-
回复了主题帖:
【DigiKey创意大赛】家庭共享智能药盒02+OPENMV开发环境搭建和加装屏幕
wangerxian 发表于 2024-8-31 15:28
可以的,人脸识别有例程吗?
有的,感兴趣可以看以下链接
https://singtown.com/learn/50033/
- 2024-08-30
-
发表了主题帖:
【DigiKey创意大赛】家庭共享智能药盒02+OPENMV开发环境搭建和加装屏幕
【DigiKey创意大赛】家庭共享智能药盒02+OPENMV开发环境搭建和加装屏幕
开工第一件事,就是安装OPENMV开发环境。先从浏览器搜索“OPENMV”,第一个就是我想要的链接入口。如下图。
点进去,找到星瞳科技官网地址:
https://singtown.com/openmv/
再点进去。在右侧有下载按钮。
继续点进去,这里要注意,这个页面给的下载链接还是老版本,翻译的界面很弱智,不要下载,选择最下面GitHub的下载地址。
https://github.com/openmv/openmv-ide/releases/
进去后找到最新稳定版下载,喜欢尝鲜的,也可以试试开发版。稳定版地址如下:
https://github.com/openmv/openmv-ide/releases/download/v4.2.1/openmv-factory-ide-windows-4.2.1.zip
我推荐选择这个zip版本,可以选择自己喜欢的位置解压缩,比那个安装版装在莫名其妙的文件夹舒服多了。
安装好后,打开软件,连上OPENMV4 CAM H7电路板,会提示更新固件,一路下一步即可,过程自动化,不用管,然后运行默认演示程序,就能看到图像了,在终端还能显示帧率。STM32这个CPU还是挺快的,QVGA分辨率能刷到fps48帧多,如下图。
如果是新手刚接触这个开发环境,我强烈建议你不要点如下图这个“重置OpenMV CAM”,否你会后悔的想把手剁掉。
考虑到方便测试,我计划给开发板配一个屏幕。正好从别的开发板上拆下一块液晶屏,驱动芯片和官方标配一样,只是分辨率比官方128*160小了一点点,是128*128,理论上也能用。如下图。
按照引脚定义接好线,开始测试,如下图。
按照丝印改了分辨率,长宽都设置为128,如下图。
显示的图像是错位的,
经常做屏显示驱动的朋友一看就知道,这明显是长宽设置不对造成的。随后我查阅ST7735的规格书,发现这个IC的RAM点阵是132 x 162 x 18 bits,我就试着把分辨率改为132*132,一试,显示图像对了,但是颜色还是奇怪的,然后又调整了一下bgr色彩顺序,代码如下图。
这把终于全部正常了,如下图。
至此,软硬件开发环境都搭建好了,可以开始正式进行人脸识别的设计了。
-
回复了主题帖:
【DigiKey创意大赛】家庭共享智能药盒01+开箱
wangerxian 发表于 2024-8-13 09:13
我感觉问题不大,加油!
借您吉言