emhang 发表于 2020-7-15 11:22:14

【行业AI开发者大赛】智能冰箱食材管理系统·硬件篇

       近期我们参与了DFRobot与Intel举办的AI开发者大赛,我们制作的项目是“智能冰箱食材管理系统”,用来管理冰箱内的食材。本篇就来介绍整个项目的硬件组成,包括用到的器件、结构、以及每个部分所涉及到的功能。


https://www.bilibili.com/video/BV1rk4y1B76H

       我们在过程中遇到了一个很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监听开关状态,从而识别冷藏室和冷冻室门的开闭。

【检测开关部分代码】
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()
       至此,本次的《智能冰箱食材管理系统·硬件篇》就与大家分享完毕了~!后续我们还会进行对项目的拍摄工作,包括项目的一些技术细节、制作过程以及整体的功能展示,敬请期待~!


#嘉诚欧巴# 发表于 2020-7-15 11:27:07

本帖最后由 #嘉诚欧巴# 于 2020-7-15 11:33 编辑

{:5_121:}一人血书LattePanda多加几个USB口,2.0的也行~

帅猫 发表于 2020-8-12 16:16:34

是不是UBUNTU的问题,要不飞几根线到USB上
页: [1]
查看完整版本: 【行业AI开发者大赛】智能冰箱食材管理系统·硬件篇