1.实验要求
利用PYNQ-Z2上的Arduino接口,获取超声波测距模块的信息。基本配置如下:
在实现的过程中,你需要参考PYNQ社区的技术博客【1】的内容,完成以下任务:
任务一:在PYNQ-Z2开发板上对处理器核进行编程,打印出“Helloworld”;
任务二:完成传感器与开发板的连接,向超声波传感器发送脉冲信号,并计算测量距离;
任务三:将测量距离以LED灯亮度的形式进行显示,距离越长,亮灯越多。
评分说明:三个任务中完成前两个最高可获得成绩“良”;完成前三个任务最高可获得成绩“优”。
2. 系统设计思路
2.1 线路连接
图3-1 连接图
2.2 交互代码
在该实验当中,我们需要对开发板进行编程交互,其中交互平台为jupyter,由于网站只能用python,所以编程语言为python ,这里这是将代码列出来,具体的分析在“3.3具体模块实现方法”处
第一个任务:打印出“Helloworld”
代码如下:
print("Hello World")
第二个任务:向超声波传感器发送脉冲信号,并计算测量距离
代码如下:
首先要定义头文件访问库,以及连接方式:
from pynq.overlays.base import BaseOverlay
from time import sleep
from pynq_peripherals import ArduinoSEEEDGroveAdapter, PmodGroveAdapter
base = BaseOverlay('base.bit')
adapter = ArduinoSEEEDGroveAdapter(base.ARDUINO, D6='grove_usranger')
usranger = adapter.D6
接下来是测距代码:
data_count = 0
while data_count < 10:
print('distance: {:.2f} cm'.format(usranger.get_distance()))
sleep(1)
data_count += 1
接下来是任务三:将测量距离以LED灯亮度的形式进行显示,距离越长,亮灯越多。
代码如下:
from pynq.overlays.base import BaseOverlay
from time import sleep
from pynq_peripherals import ArduinoSEEEDGroveAdapter, PmodGroveAdapter
base = BaseOverlay('base.bit')
adapter = ArduinoSEEEDGroveAdapter(base.ARDUINO, D6='grove_usranger')
usranger = adapter.D6
leds = [base.leds[i] for i in range(4)]
data_count = 0
while data_count < 10:
try:
print('distance: {:.2f} cm'.format(usranger.get_distance()))
distance = usranger.get_distance()
if distance <= 10:
brightness = 0
elif distance <= 20 and distance > 0: