超声波测距+python数据处理+可视化实时图像绘制_超声波测距可视化

以管理员身份运行cmd
转到Python安装目录的Scripts目录下:

cd C:\Program Files\Python36\Scripts
pip install wheel
pip install 路径\文件名.whl: 
pip install C:\Users\0AQZ0\Downloads\matplotlib-2.1.2-cp27-cp27m-win_amd64.whl

以上经验来源于:EmbededDriver的博客https://blog.csdn.net/u012308586/article/details/89449004

matplotlib库的安装

一、一般方法
1.Win+R输入cmd进入到CMD窗口下,执行python -m pip install -U pip setuptools进行升级。
在这里插入图片描述

2.输入python -m pip install matplotlib进行自动的安装,系统会自动下载安装包在这里插入图片描述
3.进入到python idle中,运行import matplotlib,如下图所示,如果没有报错,就证明安装成果。在这里插入图片描述
输入以下代码运行成果证明安装没问题

import matplotlib.pyplot as plt
labels='frogs','hogs','dogs','logs'
sizes=15,20,45,10
colors='yellowgreen','gold','lightskyblue','lightcoral'
explode=0,0.1,0,0
plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct='%1.1f%%',shadow=True,startangle=50)
plt.axis('equal')
plt.show()

在这里插入图片描述

以上方法来源于:猪猪侠喜欢躲猫猫的博客:最简单的matplotlib安装教程
二、特殊方法
我建议大家用exe文件安装matplotlib,我使用setuptools安装,没安装成功,提示一堆错误。所以我推荐还是exe安装,我把matplotlib的exe安装文件列表写在下面的参考资料里。你找到对应版本的下载就可以,这里是安装过程:
1、首先,我们下载了适合自己的版本
在这里插入图片描述
2、打开它,就会看到安装界面,点击下一步
在这里插入图片描述

3、这里,输入python的安装目录,点击下一步在这里插入图片描述
4、安装过程的截图在这里插入图片描述
5、现在就安装好了,引入一下,看看是否出现了错误,没有错误就说明安装成功。
在这里插入图片描述
错误参考:

如果提示错误:ImportError: matplotlib requires dateutil,你可以看这篇文章:http://jingyan.baidu.com/article/aa6a2c14d5aa7f0d4c19c4e2.html

如果提示错误:ImportError: matplotlib requires
pyparsing,你可以看这篇文章:http://jingyan.baidu.com/article/e4d08ffdd3b9690fd2f60de2.html

以上经验来源于百度经验:Python教程:[55]matplotlib安装下载方法https://jingyan.baidu.com/article/154b46315523b428ca8f41e2.html

python读取串口数据代码

import serial
 
ser=serial.Serial("COM3",115200,timeout=0.5)	#打开串口
 
while (1):
	ch=ser.read()
	str1=ch.decode("iso-8859-15")	#bytes转str
 
	if(str1):	#判断数据是否为空,很重要
		l=ord(str1)		#str转int,方便数据计算和处理
		print("%x" % l)	
 
	pass

python进行图像绘制的程序代码

import matplotlib.pyplot as plt

ax = []                    # 定义一个 x 轴的空列表用来接收动态的数据
ay = []                    # 定义一个 y 轴的空列表用来接收动态的数据
plt.ion()                  # 开启一个画图的窗口
i=1
while i<1000:
	#print(b)
	if b == "":
		b = 0
		#print(b)
	else:
		b = float(b)
		#print(b)

		ax.append(i)           # 添加 i 到 x 轴的数据中
		i=i+1
		ay.append(b)        # 添加 i 的平方到 y 轴的数据中
		plt.clf()             		 # 清除之前画的图
		plt.plot(ax,ay)        # 画出当前 ax 列表和 ay 列表中的值的图形
		plt.pause(0.1)         # 暂停一秒
		plt.ioff()             # 关闭画图的窗口




绘制的图像如下图在这里插入图片描述

整体代码

arduino代码:

int TrgPin = A0;
int EcoPin = A1;
float dist;
void setup()
{   
  Serial.begin(9600);
  //设置TrgPin为输出状态
  pinMode(TrgPin, OUTPUT);
  // 设置EcoPin为输入状态
  pinMode(EcoPin, INPUT);
}
void loop()
{
  digitalWrite(TrgPin, LOW);
  delayMicroseconds(8);
  digitalWrite(TrgPin, HIGH);
  // 维持10毫秒高电平用来产生一个脉冲
  delayMicroseconds(10);
  digitalWrite(TrgPin, LOW);
  // 读取脉冲的宽度并换算成距离
  dist = pulseIn(EcoPin, HIGH) / 58.00;
  Serial.print("Distance:");
  Serial.print(dist);
  Serial.println("cm");
  delay(300);
}

python代码:

import matplotlib.pyplot as plt
import serial

serialPort = "COM4"  # 串口
baudRate = 9600  # 波特率
ser = serial.Serial(serialPort, baudRate, timeout=0.1)
#print("参数设置:串口=%s ,波特率=%d" % (serialPort, baudRate))


ax = []                    # 定义一个 x 轴的空列表用来接收动态的数据
ay = []                    # 定义一个 y 轴的空列表用来接收动态的数据
plt.ion()                  # 开启一个画图的窗口
i=1

while i<1000:
	str1 = ser.readline()
	str1 = str(str1)
	b = str1.lstrip("b'")
	b = b.lstrip("Distance:")
	b = b.rstrip("'")
	b = b.replace('\\n', '').replace('\\r', '')
	b = b.lstrip()
	b = b.replace('cm', '')
	b = b.lstrip()
	#print(b)
	if b == "":
		b = 0
		#print(b)
	else:
		b = float(b)
		#print(b)

		ax.append(i)           # 添加 i 到 x 轴的数据中
		i=i+1
		ay.append(b)        # 添加 i 的平方到 y 轴的数据中
		plt.clf()             		 # 清除之前画的图
		plt.plot(ax,ay)        # 画出当前 ax 列表和 ay 列表中的值的图形
		plt.pause(0.1)         # 暂停一秒
		plt.ioff()             # 关闭画图的窗口

while 1:
	print("处理完毕!")


最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

2008)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F10C8是一款具有强大功能的ARM Cortex-M3内核的微控制器,集成了丰富的外设和多个通信接口。而nRF24L01是一款低功耗、低成本的2.4GHz无线收发模块,可以支持SPI接口进行通信。超声波测距是一种常见的测量物体距离的方法,通过发射超声波并接收回波来计算物体与传感器的距离。而OLED显示则是一种高对比度、大视角和快响应速度的显示技术。 结合上述组件,我们可以通过以下步骤实现STM32F10C8和nRF24L01的通信来进行超声波测距,最后将测量结果显示在OLED屏幕上: 1. 首先,将STM32F10C8和nRF24L01通过SPI接口进行连接,并将nRF24L01配置为接收模式。 2. 在STM32F10C8上编写代码,使用超声波传感器测量物体与传感器之间的距离。这可以通过发送超声波信号并接收回波的时间来实现。 3. 使用STM32F10C8的SPI接口,将测量结果通过nRF24L01发送到接收机。 4. 在另一个STM32F10C8上将接收机连接到nRF24L01,并将其配置为发送模式。 5. 在接收机一侧编写代码,接收来自发送机的测量结果,并将数据解析为距离值。 6. 使用STM32F10C8的SPI接口将距离值发送到OLED屏幕。 7. 在OLED屏幕上显示最终的测量结果。 通过以上步骤,我们可以实现将超声波测距的结果通过nRF24L01模块传输到另一个STM32F10C8,并将其显示在OLED屏幕上。这样的系统可以广泛应用于距离测量、智能家居等领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值