跳转到主要内容
editor 提交于

相信看电影的你会有这样的经历,由于某种原因晚到了电影院,而此时电影已经开始,等你急吼吼的检完票进到对应的影厅的时候,面对的是黑乎乎的环境,这个情况下找自己的位置很是抓狂。有些朋友会打开手机照明来找位置,折腾一番,还不免找错,亮亮的灯光还会打扰到其他的观影者,所以我就想利用edison开发一套小装置,在不改变影院大硬件环境的基础上,为影厅增加一个实用的辅助提醒找位功能,有点大材小用,但是希望能在开发过程中更好的了解edison的性能!

<strong>硬件组成:</strong>
intel edison 开发板
dfrobot 传感器扩展板
dfrobot IR Transmitter Module红外发射模块
dfrobot IR Receiver Module红外接收模块
罗技 R702摄像头
7口有源usbhub
芯烨XP-58热敏小票打印机
8*8led阵列

<strong>软件组成</strong>
二维码模拟生成器 c#
手机端测试app html5
edison二维码扫描及识别 python/c

<strong>目前的构思是这样:</strong>

通过电影票座位信息生成二维码,这个二维码可以实体打印出来或发送到用户手机上,然后影厅进口处,用Edison结合摄像头做一个二维码识别,解析出的 位置信息通过影厅顶的全向红外发射器发出,然后对应的座位靠背顶上的提示灯就会以一定频率闪烁提醒,用户通过影院原有地灯,按照椅背提醒找到位置,用户坐下后通过体重触发微动开关,关闭提醒。

最初的想法是想利用edison来模拟多种角色,驱动热敏小票打印机打印二维码和利用摄像头识别二维码,但是在实际做的过程中发现问题,可能是edisonusb口供电的问题,热敏小票打印机能识别,但是在python里一调用就会自动断开。

于是利用空余时间,c#编写了一个简单的<strong>二维码生成器</strong>,下面是开发截图和实际的二维码生成端

<center><img src="http://intel.eetrend.com/files/2016-03/wen_zhang_/100001310-1516-qq-201…; alt=""></center>

这里是手动输入二维码,模拟用户在取票机上或售票前台打印电影票的过程,座位信息会生成二维码,打印在电影票的背面或者下部

<center><img src="http://intel.eetrend.com/files/2016-03/wen_zhang_/100001310-1517-qq-201…; alt=""></center>

开始<strong>打印</strong>

<center><img src="http://intel.eetrend.com/files/2016-03/wen_zhang_/100001310-1517-qq-201…; alt=""></center>

这个是用小票打印机打出来的<strong>模拟影票</strong>,上部是电影信息,下部是包含座位信息的<strong>二维码</strong>

<center><img src="http://intel.eetrend.com/files/2016-03/wen_zhang_/100001310-1519-anycon…; alt=""></center>

然后用html5写了个简单的手机二维码扫描app,来做简单的<strong>测试</strong>,看看生成的二维码正确与否

<center><img src="http://intel.eetrend.com/files/2016-03/wen_zhang_/100001310-1520-img203…; alt=""></center>

对于edison上的二维码扫描,采用的python结合zbar来做的实现

<strong>核心代码:</strong>

import mraa
..

// 调用zbar来获取<strong>摄像头图片</strong>
zbarcam=subprocess.Popen("zbarcam --raw --nodisplay /dev/video0", stdout=subprocess.PIPE, shell=True, preexec_fn=os.setsid)
print u"edison QRcode 扫描启动..."

// 循环5次来做识别
i=0
while i<5:
qrcodetext=zbarcam.stdout.readline() // 获取zbar的屏幕输出返回值
if qrcodetext!="":
print qrcodetext
i=i+1
print u"edison QRcode 扫描成功"
break

os.killpg(zbarcam.pid, signal.SIGTERM) // 关闭进程
print u"edison QRcode 扫描停止"

// 对解析出的位置信息进行分割,得到影厅---排---位信息
seat_info = qrcodetext.split('|')

IR_trans = mraa.Gpio(3)

...

最后,利用Pylric2库控制连接在edison上的红外发射头发射出带编码的载波信号,每个影院座椅上有一个红外接收头,解码正确的座椅上的led便会延时闪烁。

同时,也想到另外一种更集中的控制方法,我用64个led做了个8*8的led阵列,来模拟影院的座位排列,这样就可以采用led matrix的控制方法来统一控制某个对应的led来进行亮灭提醒了。

<center>之前的设想图和场景布置手绘</center>

<center><img src="http://intel.eetrend.com/files/2016-03/wen_zhang_/100001310-1521-1.jpg&…; alt=""></center>

<center>手焊的8*8 led阵列</center>

<center><img src="http://intel.eetrend.com/files/2016-03/wen_zhang_/100001310-1522-qq-201…; alt=""></center>

<center>瞎拼凑的全家福</center>

<center><img src="http://intel.eetrend.com/files/2016-03/wen_zhang_/100001310-1523-qq-201…; alt=""></center>

文章来源:<a href="http://www.mesnet.com.cn/fileup/HTML/20150717.shtml">英特尔开发人员专区