Variação ultrassônica + processamento de dados em python + renderização visual de imagens em tempo real

Insira a descrição da imagem aqui

Este artigo apresenta o uso do arduino para conduzir a distância de medição ultrassônica e enviar dados para o python através da porta serial, para executar o processamento de dados, os resultados do processamento são mostrados na figura.

Preparação

Módulo ultrassônico + placa de desenvolvimento arduino + número da linha DuPont + ambiente de desenvolvimento python

Idéias

Primeiro, use a distância do veículo arduino, envie dados para o código python através da porta serial para processamento de dados e desenhe uma imagem para exibição em tempo real.

Introdução ao módulo ultrassônico

Insira a descrição da imagem aqui
Conforme mostrado na figura acima, o VCC fornece fonte de alimentação de 5V, GND é o fio terra, entrada do sinal de controle de disparo TRIG, saída de sinal de eco ECHO e outras quatro interfaces.

2. Conexão de circuito

A fiação é relativamente simples, basta conectar na seguinte ordem:Insira a descrição da imagem aqui

3. Programação

O código é escrito de acordo com o princípio do módulo.A sequência de operação durante a faixa ultrassônica é a seguinte:Insira a descrição da imagem aqui

O diagrama de temporização acima mostra que você só precisa fornecer um sinal de pulso de mais de 10 uS; o módulo enviará oito níveis de ciclo de 40kHz e detectará o eco. Uma vez detectado

O sinal de eco emite um sinal de eco. A largura de pulso do sinal de eco é proporcional à distância medida. Portanto, o intervalo de tempo entre o sinal de transmissão e o sinal de eco recebido pode ser calculado

Distanciar. Fórmula: us / 58 = cm ou us / 148 = polegada; ou: distância = tempo de nível alto * velocidade do som (340M / S) / 2; recomenda-se que o período de medição seja superior a 60ms para

Impeça a influência do sinal transmitido no sinal de eco.

Nota:
1. Este módulo não é adequado para conexão ao vivo.Se a conexão ao vivo for necessária, conecte o terminal GND do módulo primeiro, caso contrário, isso afetará a operação normal do módulo.

2. Durante a medição da distância, a área do objeto medido não é inferior a 0,5 metros quadrados e o plano deve ser plano o máximo possível, caso contrário, afetará o resultado da medição.

Escreva o código da seguinte maneira:

/**
*    文件: 超声测距.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);
}

Instalação da biblioteca serial

Instale o pip install serial. Depois de baixá-lo e instalá-lo por um tempo e depois executar, ele ainda solicita o mesmo erro. Verificado na Internet, você deve instalar o pip install pyserial.

Insira a descrição da imagem aqui

Se o método acima falhar na instalação, pode ser necessário fazer o download e instalá-lo.

Em https://pypi.org/project/pyserial/#files , háInsira a descrição da imagem aqui

Baixe este arquivo de formato de roda no Windows. Sobre o arquivo wheel
Se você instalou o pip, precisará atualizá-lo para a versão mais recente.
Execute o cmd como administrador e
acesse o diretório Scripts do diretório de instalação do 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

A experiência acima vem de: Blog do EmbededDriver https://blog.csdn.net/u012308586/article/details/89449004

instalação da biblioteca matplotlib

Primeiro, o método geral
1. Win + R insira cmd para entrar na janela CMD, execute python -m pip install -U pip setuptools para atualizar.
Insira a descrição da imagem aqui

2. Digite python -m pip install matplotlib para instalação automática, o sistema fará o download automático do pacote de instalação Insira a descrição da imagem aqui
3. Digite python ocioso, execute import matplotlib, conforme mostrado na figura a seguir, se não houver erro, isso prova os resultados da instalação. Insira a descrição da imagem aqui
Digite o código a seguir para executar os resultados e provar que a instalação está correta

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

Insira a descrição da imagem aqui

O método acima é proveniente de: Piggyman gosta do blog peek-a-boo : o tutorial mais simples de instalação do matplotlib 2.
Método especial
Eu sugiro que você instale o matplotlib com arquivos exe. Eu usei o setuptools para instalá-lo. Portanto, recomendo a instalação exe, escrevo a lista de arquivos de instalação exe do matplotlib nos seguintes materiais de referência. Você pode encontrar o download da versão correspondente.Aqui está o processo de instalação:
1. Primeiro, baixamos a versão adequada para você
Insira a descrição da imagem aqui
2. Abra-a, você verá a interface de instalação, clique em Avançar
Insira a descrição da imagem aqui

3. Aqui, digite o diretório de instalação do python e clique em Avançar Insira a descrição da imagem aqui
4. Captura de tela do processo de instalação Insira a descrição da imagem aqui
5. Agora, a instalação está concluída.Apresente para ver se há algum erro.Se não houver nenhum erro, a instalação foi bem-sucedida.
Insira a descrição da imagem aqui
Referência de erro:

Se você receber um erro: ImportError: matplotlib requer dateutil, você pode ler este artigo: http://jingyan.baidu.com/article/aa6a2c14d5aa7f0d4c19c4e2.html

Se você receber um erro: ImportError: matplotlib requer
pyparsing, você pode ler este artigo: http://jingyan.baidu.com/article/e4d08ffdd3b9690fd2f60de2.html

A experiência acima vem da experiência do Baidu: tutorial em Python: [55] instalação do matplotlib e método de download https://jingyan.baidu.com/article/154b46315523b428ca8f41e2.html

Código de dados seriais de leitura 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

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



A imagem desenhada é a seguinteInsira a descrição da imagem aqui

Código geral

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

O texto acima é todo o conteúdo deste artigo, siga-me para saber maisInsira a descrição da imagem aqui

Publicado 153 artigos originais · Gosto 248 · Visitas: 330.000+

Acho que você gosta

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