本帖最后由 云天 于 2021-1-28 12:15 编辑
【项目介绍】1、手势传感器控制3D贴图Box
2、超声波控制3D球
3、人脸识别控制彩灯
【贴图Box】
演示视频
程序代码(Mind+的Python模式)
- #I2C PAJ7620U2手势传感器
- #接线:使用windows或linux电脑连接一块Arduino主控板,手势传感器接到I2C口SCL SDA
- from vpython import *
- import time
- from pinpong.board import Board
- from pinpong.libs.dfrobot_paj7620u2 import PAJ7620U2,Gesture
-
-
- Board("uno").begin() #初始化,选择板型和端口号,不输入端口号则进行自动识别
- scene2 = canvas(width=900, height=400, center=vector(0,0,0), background=color.cyan)
- #如果使用的是VPython 7,则可以在自己的计算机上使用纹理。纹理文件必须与程序文件位于同一目录(在这种情况下,您将指定texture ='T.jpg'),或者在该目录的子目录中(例如,texture ='images / T.jpg') 。
- Box = box(texture ='1.jpg',pos=vector(0,0,0), axis = vector(10,20,10),size=vector(20,20,20), color=color.white)
- label( pos=vector(0,15,0), text='YunTian' )
-
- t = 1
-
- paj = PAJ7620U2()
- paj.set_gesture_high_rate() #设置高速模式
- #paj.set_gesture_low_rate() #设置低速模式
-
- Gesture.print_all()
- def LEFT():
-
- for i in range(360):
- rate(100)
- Box.rotate(angle=radians(-t),axis = vector(0,1,0),origin=vector(0,0,0))
-
- def RIGHT():
-
- for i in range(360):
- rate(100)
- Box.rotate(angle=radians(t),axis = vector(0,1,0),origin=vector(0,0,0))
- def UP():
-
- for i in range(360):
- rate(100)
- Box.rotate(angle=radians(-t),axis = vector(1,0,0),origin=vector(0,0,0))
- def DOWN():
-
- for i in range(360):
- rate(100)
- Box.rotate(angle=radians(t),axis = vector(1,0,0),origin=vector(0,0,0))
- dtheta=0.05
- theta=0
- while True:
- description,gesture = paj.get_gesture()
- if description == "Left":
- LEFT()
- if description == "Right":
- RIGHT()
- if description == "Up":
- UP()
- if description == "Down":
- DOWN()
复制代码
【Box透明度】
通过为属性“ opacity”指定一个介于0-1(含0)之间的值,可以使大多数对象透明。例如,box(color = color.red,opacity = 0.8)稍微透明。不透明度值为0表示完全透明,而1表示完全不透明。当前,曲线和螺旋对象不允许透明。
【超声波控制】
URM10
- #超声波
- #接线:使用windows或linux电脑连接一块arduino主控板,使用SR04或URM10超声波,Trig接D7,Echo接D8
- from vpython import *
- import time
- from pinpong.board import Board,Pin,SR04_URM10 #中导入SR04_URM10
-
- Board("uno").begin() #初始化,选择板型和端口号,不输入端口号则进行自动识别
- TRIGER_PIN = Pin(Pin.D7)
- ECHO_PIN = Pin(Pin.D8)
- sonar = SR04_URM10(TRIGER_PIN,ECHO_PIN)
-
- scene2 = canvas(width=900, height=400, center=vector(0,0,0), background=color.black)
- ball = sphere(pos=vector(0,0,0),radius=2,texture =textures.wood,)
- t = 1
-
- dtheta=0.5
- theta=0
- i=0
- while(1): # get a frame and show
- rate(50)
- dis = sonar.distance_cm() #获取距离,单位厘米(cm)
- if dis!=0:
- ball.pos.x=dis
- print(dis)
复制代码
【Opencv-Python】
安装Mind+的Python模式下的Opencv-Python库
获取人脸识别训练数据
https://github.com/opencv/opencv/tree/master/data/haarcascades
Mind+中python模式安装好opencv-pyhton库后,可在:“mindplus-py\environment\Python3.6.5-64\Lib\site-packages\cv2\data”中找到。
控制neopixel:WS2812灯带
-
- #实验效果:控制WS2812单线RGB LED灯
- #接线:使用windows或linux电脑连接一块arduino主控板,ws2812灯接到D9口
-
- import time
- from pinpong.board import Board,Pin,NeoPixel #导入neopixel类
-
- Board("uno").begin() #初始化,选择板型(uno、leonardo、xugu)和端口号,不输入端口号则进行自动识别
- #Board("uno","COM36").begin() #windows下指定端口初始化
- #Board("uno","/dev/ttyACM0").begin() #linux下指定端口初始化
- #Board("uno","/dev/cu.usbmodem14101").begin() #mac下指定端口初始化
-
- NEOPIXEL_PIN = Pin(Pin.D9)
- PIXELS_NUM = 4 #灯数
-
- np = NeoPixel(NEOPIXEL_PIN,PIXELS_NUM)
-
- while True:
- np[0] = (0, 255 ,0) #设置第一个灯RGB亮度
- np[1] = (255, 0, 0) #设置第二个灯RGB亮度
- np[2] = (0, 0, 255) #设置第三个灯RGB亮度
- np[3] = (255, 0, 255) #设置第四个灯RGB亮度
- print("color 1")
- time.sleep(1)
- np[1] = (0, 255, 0)
- np[2] = (255, 0, 0)
- np[3] = (255, 255, 0)
- np[0] = (0, 0, 255)
- print("color 2")
- time.sleep(1)
-
复制代码
人脸识别控制彩灯
代码如下:
- #接线:使用windows或linux电脑连接一块arduino主控板,ws2812灯接到D9口
-
- from vpython import *
- import time
- from pinpong.board import Board,Pin,NeoPixel #导入neopixel类
- import cv2
- Board("uno").begin() #初始化,选择板型和端口号,不输入端口号则进行自动识别
- NEOPIXEL_PIN = Pin(Pin.D9)
- PIXELS_NUM = 7 #灯数
- np = NeoPixel(NEOPIXEL_PIN,PIXELS_NUM)
-
- face_cascade = cv2.CascadeClassifier(r'C:/Users/zlzx/Documents/mindplus-py/environment/Python3.6.5-64/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml')
- cap = cv2.VideoCapture(0)
-
- while(1): # get a frame and show
- ret, frame = cap.read()
- if(ret):
- gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
-
- faces = face_cascade.detectMultiScale(gray,scaleFactor = 1.15,minNeighbors = 5,minSize = (5,5))
- for(x,y,w,h) in faces:
- cv2.rectangle(frame,(x,y),(x+w,y+w),(0,255,0),2)
- if len(faces)>0:
- for i in range(7):
- np=(255,0,0)
- else:
- for i in range(7):
- np=(0,0,0)
- cv2.imshow('Capture', frame) # change to hsv model
- if cv2.waitKey(1) & 0xFF == ord('q'):
- break
复制代码
|