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
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:
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:
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.
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á
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.
2. Digite python -m pip install matplotlib para instalação automática, o sistema fará o download automático do pacote de instalação
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.
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()
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ê
2. Abra-a, você verá a interface de instalação, clique em Avançar
3. Aqui, digite o diretório de instalação do python e clique em Avançar
4. Captura de tela do processo de instalação
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.
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 seguinte
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 mais