Rango ultrasónico + procesamiento de datos de python + representación visual de imágenes en tiempo real

Inserte la descripción de la imagen aquí

Este artículo presenta el uso de Arduino para conducir la distancia de medición ultrasónica y enviar datos a Python a través del puerto serie, para realizar el procesamiento de datos, los resultados del procesamiento se muestran en la figura.

Preparación

Módulo ultrasónico + placa de desarrollo arduino + número de línea DuPont + entorno de desarrollo python

Ideas

Primero use la distancia del vehículo arduino, envíe datos al código python a través del puerto serie para el procesamiento de datos y dibuje una imagen para la visualización en tiempo real.

Introducción del módulo ultrasónico

Inserte la descripción de la imagen aquí
Como se muestra en la figura anterior, VCC proporciona una fuente de alimentación de 5V, GND es el cable de tierra, la entrada de señal de control de disparo TRIG, la salida de señal de eco ECHO y otras cuatro interfaces.

2. Conexión del circuito

El cableado es relativamente simple, solo conéctese en el siguiente orden:Inserte la descripción de la imagen aquí

3. Programación

El código está escrito de acuerdo con el principio del módulo. La secuencia de operación durante el rango ultrasónico es la siguiente:Inserte la descripción de la imagen aquí

El diagrama de tiempo anterior muestra que solo necesita proporcionar una señal de disparo de pulso de más de 10 uS, el módulo enviará ocho niveles de ciclo de 40 kHz y detectará el eco. Una vez detectado

La señal de eco emite una señal de eco. El ancho de pulso de la señal de eco es proporcional a la distancia medida. Por lo tanto, se puede calcular el intervalo de tiempo desde la señal de transmisión hasta la señal de eco recibida

A distancia. Fórmula: uS / 58 = cm o uS / 148 = pulgada; o: distancia = tiempo de alto nivel * velocidad del sonido (340M / S) / 2; se recomienda que el período de medición sea superior a 60 ms

Prevenir la influencia de la señal transmitida en la señal de eco.

Nota:
1. Este módulo no es adecuado para la conexión en vivo. Si se requiere una conexión en vivo, conecte primero el terminal GND del módulo, de lo contrario afectará el funcionamiento normal del módulo.

2. Durante la medición de distancia, el área del objeto medido no es inferior a 0,5 metros cuadrados y el plano debe ser lo más plano posible, de lo contrario afectará el resultado de la medición.

Escriba el código de la siguiente manera:

/**
*    文件: 超声测距.ino      by 零知实验室([url=http://www.lingzhilab.com]www.lingzhilab.com[/url])
*    -^^- 零知开源,让电子制作变得更简单! -^^-
**/
 
 
#define SR04_TRIG        9
#define SR04_ECHO        10
 
// the setup routine runs once when you press reset:
void setup() {
    // put your setup code here, to run once:
         
        pinMode(SR04_TRIG, OUTPUT);
        pinMode(SR04_ECHO, INPUT);
         
        Serial.begin(9600);
}
 
// the loop routine runs over and over again forever:
void loop() {
    // put your main code here, to run repeatedly:
         
        int distance = getDistance();
         
        Serial.print("distance = ");
        Serial.println(distance);
         
        delay(300);
}

Instalación de la biblioteca en serie

Instalar pip install serial. Después de descargarlo e instalarlo durante un tiempo, y luego ejecutarlo, aún aparece el mismo error. Comprobado en Internet, debe instalar pip install pyserial.

Inserte la descripción de la imagen aquí

Si el método anterior no se instala, es posible que deba descargarlo e instalarlo.

En https://pypi.org/project/pyserial/#files , hayInserte la descripción de la imagen aquí

Descargue este archivo de formato de rueda en Windows. Acerca del archivo de rueda
Si ha instalado pip, entonces necesita actualizarlo a la última versión.
Ejecute cmd como administrador y
vaya al directorio Scripts del directorio de instalación de Python:

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

La experiencia anterior proviene del: blog de EmbededDriver https://blog.csdn.net/u012308586/article/details/89449004

instalación de la biblioteca matplotlib

Primero, el método general
1. Win + R ingrese cmd para ingresar a la ventana CMD, ejecute python -m pip install -U pip setuptools para actualizar.
Inserte la descripción de la imagen aquí

2. Ingrese python -m pip install matplotlib para la instalación automática, el sistema descargará automáticamente el paquete de instalación Inserte la descripción de la imagen aquí
3. Ingrese python inactivo, ejecute import matplotlib, como se muestra en la siguiente figura, si no hay ningún error, demuestra los resultados de la instalación. Inserte la descripción de la imagen aquí
Ingrese el siguiente código para ejecutar los resultados y demostrar que la instalación está bien

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()

Inserte la descripción de la imagen aquí

El método anterior proviene de: Piggyman le gusta el blog peek-a-boo : El tutorial de instalación de matplotlib más simple
II. Método especial
Le sugiero que instale matplotlib con archivos exe. Utilicé setuptools para instalarlo. No fue exitoso y provocó un montón de errores. Por lo tanto, recomiendo la instalación exe, escribo la lista de archivos de instalación exe de matplotlib en los siguientes materiales de referencia. Puede encontrar la descarga de la versión correspondiente. Aquí está el proceso de instalación:
1. Primero, descargamos la versión adecuada para usted
Inserte la descripción de la imagen aquí
2. Ábrala, verá la interfaz de instalación, haga clic en Siguiente
Inserte la descripción de la imagen aquí

3. Aquí, ingrese el directorio de instalación de Python y haga clic en Siguiente Inserte la descripción de la imagen aquí
4. Captura de pantalla del proceso de instalación Inserte la descripción de la imagen aquí
5. Ahora la instalación está completa. Presente para ver si hay un error. Si no hay error, la instalación fue exitosa.
Inserte la descripción de la imagen aquí
Referencia de error:

Si obtiene un error: ImportError: matplotlib requiere dateutil, puede leer este artículo: http://jingyan.baidu.com/article/aa6a2c14d5aa7f0d4c19c4e2.html

Si obtiene un error: ImportError: matplotlib requiere
pyparsing, puede leer este artículo: http://jingyan.baidu.com/article/e4d08ffdd3b9690fd2f60de2.html

La experiencia anterior proviene de la experiencia de Baidu: tutorial de Python: [55] instalación de matplotlib y método de descarga https://jingyan.baidu.com/article/154b46315523b428ca8f41e2.html

Python lee el código de datos en serie

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

Código de programa para dibujar imágenes de 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()             # 关闭画图的窗口



La imagen dibujada es la siguienteInserte la descripción de la imagen aquí

Código general

código 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);
}

Código de 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("处理完毕!")

Lo anterior es todo el contenido de este artículo, sígueme para obtener más información.Inserte la descripción de la imagen aquí

153 artículos originales publicados · Me gusta 248 · Visitas 330,000+

Supongo que te gusta

Origin blog.csdn.net/qq_45172832/article/details/105378322
Recomendado
Clasificación