【设计思路】
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() 复制代码