【设计思路】
Arduino加NFC模块,利用Mind+的Python模式,使用Pinpong库,VPython库,pyttsx3库,实现NFC控制打开“3D”门,并进行语音播报。
【NFC模块】
近场通信(Near Field Communication,NFC),又称近距离无线通信,是一种短距离的高频无线通信技术,允许电子设备之间进行非接触式点对点数据传输(在十厘米内)交换数据。这个技术由免接触式射频识别(RFID)演变而来,并向下兼容RFID,最早由Sony和Philips各自开发成功,主要用于手机等手持设备中提供M2M(Machine to Machine)的通信。由于近场通讯具有天然的安全性,NFC技术被广泛用于POS机移动支付、公交卡、银行卡、门禁卡、饭卡、水卡等多种场合。
【VPython】
VPython是一套简单易用的三维图形库,使用它可以快速创建三维场景和动画。和TVTK相比,它更适合于创建交互式的三维场景,而TVTK则更适合于对数据进行三维可视化。
【pinpong】
pinpong 库是用于连接硬件设备进行在线编程的 Python 库。可创作丰富有趣的软硬件互动项目。
【pyttsx3】
pyttsx3是Python中的文本到语音转换库,他可以脱机工作。
演示代码
- import pyttsx3
- engine = pyttsx3.init()
- engine.say("开门")
- engine.runAndWait()
复制代码 【演示视频】
【完整代码】
- from vpython import *
- import time
- from pinpong.board import Board
- from pinpong.libs.dfrobot_pn532 import PN532
- import pyttsx3
- engine = pyttsx3.init()
- Board("uno").begin() #初始化,选择板型和端口号,不输入端口号则进行自动识别
- wallR = box(pos=vector(10,0,0), axis = vector(0,0,1),size=vector(0.2,20,20), color=color.green)
- wallL = box(pos=vector(-10,0,0),axis = vector(0,0,1), size=vector(0.2,20,20), color=color.red)
- label( pos=vector(0,15,0), text='YunTian' )
- t = 1
- nfc = PN532()
- while not nfc.begin():
- print("initial failure")
- time.sleep(1)
- print("Please place the info card/tag on module..... ")
- def open_door():
- engine.say("开门")
- engine.runAndWait()
- for i in range(160):
- rate(100)
- wallR.rotate(angle=radians(t),axis = vector(0,1,0),origin=vector(20,0,0))
- wallL.rotate(angle=radians(-t),axis = vector(0,1,0),origin=vector(-20,0,0))
- def close_door():
- engine.say("关门")
- engine.runAndWait()
- for i in range(160):
- rate(100)
- wallR.rotate(angle=radians(-t),axis = vector(0,1,0),origin=vector(20,0,0))
- wallL.rotate(angle=radians(t),axis = vector(0,1,0),origin=vector(-20,0,0))
- while True:
- if nfc.scan():
- open_door()
- time.sleep(2)
- close_door()
复制代码
|