4016| 2
|
[平台测评] 【行业AI开发者大赛】智能冰箱食材管理系统·硬件篇 |
近期我们参与了DFRobot与Intel举办的AI开发者大赛,我们制作的项目是“智能冰箱食材管理系统”,用来管理冰箱内的食材。本篇就来介绍整个项目的硬件组成,包括用到的器件、结构、以及每个部分所涉及到的功能。 我们在过程中遇到了一个很bug的问题:原本计划是通过LattePanda板子上自带的协处理器Arduino Leonardo来实时检测外接的两个干簧管磁控开关。但在LattePanda上安装的Ubuntu18.04系统下,无论使用apt源或从Arduino官网安装的Arduino都无法将程序正常上传至Arduino Leonardo。 无奈之下,我们考虑了再外接一个Arduino Nano的方法来实现检测磁控开关的状态。 【硬件清单】 主控板:由DFRobot提供的LattePanda Delta套装与Intel®神经计算棒组成。 屏幕:7英寸便携式超薄触摸屏(eDP) 摄像头:Microsoft Cinema 用于采集图像实现人脸识别功能,以及利用其自带的麦克风进行录音,实现语音识别功能。 喇叭:5WUSB供电喇叭 用于播放声音,进行语音提醒。 USB拓展坞:USB一分三接口 3个自带USB接口难以满足需要,故选择了一款体积较小的USB拓展坞 ArduinoNano主控板(含USB转Mini-USB转接头) 传感器开关:用来检测冰箱门开关的干簧管磁控开关:常开型GPS-23 两根线,当磁铁接近检测端时(小于1.5cm),两个导线导通。为了让Arduino准确识别到开关信号,我们还在这里利用贴片电阻给磁控开关增加了下拉电阻。原理图参考DFRobot按键模块电路方案。 【安装过程】 首先,我们通过SolidWorks绘制了安装所有零部件的外壳。 使用3D打印机将模型打印出来。由于体积过长(254mm),故只能使用竖放的方式来进行3D打印。 打印好以后,我们开始准备所需要的零件。 固定摄像头的地方使用一个回形针与螺丝配合,将摄像头下方可弯曲部分固定在后背板上。 接下来,首先需要把主板的WiFi天线撕下贴纸,粘贴在3D打印件的背板上。 然后将所有零件组装到整体的空间内(尚未安装Arduino Nano)。在后续安装Arduino时,我们发现当Intel®神经计算棒插在主板USB端口上时,计算棒的体积比较宽,会影响到边上的USB接口,我们为了解决这个问题,甚至还用小刀将其他USB接口削窄了一些,才可以正常安装上。USB的冲突是安装以及设计外壳时需要考虑的部分,这里有两个改进建议:第一,增加USB端口,可以增加双排叠式的USB端口;第二,也可以考虑USB端口的封装更改为竖向立式(当前为卧式)这样就可以解决端口冲突的问题。此外,LattePanda Delta的3个USB口有些情况下不太够用,数量建议适当增加。 最后,需要安装前面板及在面板上安装屏幕。首先将屏幕穿过前面板,利用屏幕上自带的双面胶,粘贴固定在前面板上。摄像头的位置由于考虑可能需要调整摄像头的角度,没有完全固定,暂时留出了一个比摄像头稍大的孔位。 盖上顶板,硬件安装过程完成。 在结束组装以后,我们还进行了Arduino的安装与测试,利用Python通过外接的Arduino Nano监听开关状态,从而识别冷藏室和冷冻室门的开闭。 【检测开关部分代码】 [mw_shl_code=python,false]from pyfirmata import Arduino, util import time board = Arduino('/dev/ttyUSB0') pin_ref = board.get_pin('d:2:i') # 冷藏箱开关接口,关门为高电平,打开为低电平 pin_fre = board.get_pin('d:3:i') # 冷冻箱开关接口,关门为高电平,打开为低电平 pin_fre_vcc = board.get_pin('d:12:o') # 冷冻箱开关正极 pin_fre_vcc.write(1) # 将正极设为高电平 # 开启对输入电平的监听 it = util.Iterator(board) it.start() pin_ref.enable_reporting() pin_fre.enable_reporting() # 确定初始状态 ref_status = pin_ref.read() fre_status = pin_fre.read() while True: time.sleep(0.1) # 每0.1秒读取一次信号 # 当电平状态由高电平转为低电平时,为开门;反之为关门 if not pin_ref.read() and ref_status: print('冷藏箱开门') elif not pin_fre.read() and fre_status: print('冷冻箱开门') elif pin_ref.read() and not ref_status: print('冷藏箱关门') elif pin_fre.read() and not fre_status: print('冷冻箱关门') # 更新状态 ref_status = pin_ref.read() fre_status = pin_fre.read()[/mw_shl_code] 至此,本次的《智能冰箱食材管理系统·硬件篇》就与大家分享完毕了~!后续我们还会进行对项目的拍摄工作,包括项目的一些技术细节、制作过程以及整体的功能展示,敬请期待~! |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed