【智控万物】NFC打开“3D门”

2021-01-261.1万
AI 快速预览详细 收起
本项目通过Arduino和NFC模块,结合Mind+的Python模式,使用Pinpong库、VPython库和pyttsx3库,实现NFC控制打开“3D”门并进行语音播报。适用于STEM教育场景,帮助孩子理解近场通信技术和三维图形编程。项目包括硬件连接、代码编写和实际演示,难度适中,适合初学者尝试。
【智控万物】NFC打开“3D门”图1

【设计思路】
Arduino加NFC模块,利用Mind+的Python模式,使用Pinpong库,VPython库,pyttsx3库,实现NFC控制打开“3D”门,并进行语音播报。
【NFC模块】
近场通信(Near Field Communication,NFC),又称近距离无线通信,是一种短距离的高频无线通信技术,允许电子设备之间进行非接触式点对点数据传输(在十厘米内)交换数据。这个技术由免接触式射频识别(RFID)演变而来,并向下兼容RFID,最早由Sony和Philips各自开发成功,主要用于手机等手持设备中提供M2M(Machine to Machine)的通信。由于近场通讯具有天然的安全性,NFC技术被广泛用于POS机移动支付、公交卡、银行卡、门禁卡、饭卡、水卡等多种场合。
【智控万物】NFC打开“3D门”图6

【VPython】

VPython是一套简单易用的三维图形库,使用它可以快速创建三维场景和动画。和TVTK相比,它更适合于创建交互式的三维场景,而TVTK则更适合于对数据进行三维可视化。
【智控万物】NFC打开“3D门”图3

【智控万物】NFC打开“3D门”图2


【pinpong】
pinpong 库是用于连接硬件设备进行在线编程的 Python 库。可创作丰富有趣的软硬件互动项目。
【智控万物】NFC打开“3D门”图4

pyttsx3
pyttsx3是Python中的文本到语音转换库,他可以脱机工作。
【智控万物】NFC打开“3D门”图5

演示代码
  1. import pyttsx3
  2. engine = pyttsx3.init()
  3. engine.say("开门")
  4. engine.runAndWait()
复制代码
【演示视频】

【完整代码】
  1. from vpython import *
  2. import time
  3. from pinpong.board import Board
  4. from pinpong.libs.dfrobot_pn532 import PN532
  5. import pyttsx3
  6. engine = pyttsx3.init()
  7. Board("uno").begin()  #初始化,选择板型和端口号,不输入端口号则进行自动识别
  8. wallR = box(pos=vector(10,0,0), axis = vector(0,0,1),size=vector(0.2,20,20), color=color.green)
  9. wallL = box(pos=vector(-10,0,0),axis = vector(0,0,1), size=vector(0.2,20,20), color=color.red)
  10. label( pos=vector(0,15,0), text='YunTian' )
  11. t = 1
  12. nfc = PN532()
  13. while not nfc.begin():
  14.   print("initial failure")
  15.   time.sleep(1)
  16. print("Please place the info card/tag on module..... ")
  17. def open_door():
  18. engine.say("开门")
  19. engine.runAndWait()
  20. for i in range(160):
  21.   rate(100)
  22.   wallR.rotate(angle=radians(t),axis = vector(0,1,0),origin=vector(20,0,0))
  23.   wallL.rotate(angle=radians(-t),axis = vector(0,1,0),origin=vector(-20,0,0))
  24. def close_door():
  25. engine.say("关门")
  26. engine.runAndWait()
  27. for i in range(160):
  28.   rate(100)
  29.   wallR.rotate(angle=radians(-t),axis = vector(0,1,0),origin=vector(20,0,0))
  30.   wallL.rotate(angle=radians(t),axis = vector(0,1,0),origin=vector(-20,0,0))
  31. while True:
  32.   if nfc.scan():
  33.       open_door()
  34.       time.sleep(2)
  35.       close_door()
复制代码

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(2)
szjuliet
szjuliet
知识点很多,好有趣~
rzegkly
rzegkly
智控万物,赞
- 没有更多了 -