この記事では、arduinoを使用して超音波測定距離を駆動し、シリアルポート経由でデータをpythonに送信して、データ処理を実行する方法を紹介します。処理結果を図に示します。
準備
超音波モジュール+ Arduino開発ボード+ DuPontのライン番号+ Python開発環境
アイデア
最初にarduinoの車間距離を使用し、データをシリアルポート経由でPythonコードに送信してデータを処理し、画像に描画してリアルタイムで表示します。
超音波モジュールの紹介
上の図に示すように、VCCは5V電源を提供し、GNDは接地線、TRIGトリガー制御信号入力、ECHOエコー信号出力、およびその他の4つのインターフェースです。
2.回路接続
配線は比較的簡単で、次の順序で接続するだけです。
3.プログラミング
コードはモジュールの原理に従って記述されており、超音波測距中の操作シーケンスは次のとおりです。
上記のタイミング図は、10uS以上のパルストリガー信号を提供するだけでよいことを示しています。モジュールは8つの40kHzサイクルレベルを送信し、エコーを検出します。検出されたら
エコー信号は、エコー信号を出力する。エコー信号のパルス幅は測定距離に比例します。したがって、送信信号から受信エコー信号までの時間間隔を計算できます。
距離に。式:uS / 58 = cmまたはuS / 148 =インチ、または:距離=高レベル時間*音速(340M / S)/ 2;測定周期は60ms以上にすることをお勧めします
エコー信号への送信信号の影響を防ぎます。
注:
1.このモジュールはライブ接続には適していません。ライブ接続が必要な場合は、最初にモジュールのGND端子を接続してください。そうしないと、モジュールの通常の動作に影響します。
2.距離測定中、測定対象の面積は0.5平方メートル以上であり、平面は可能な限り平坦でなければなりません。そうでないと、測定結果に影響を及ぼします。
次のようにコードを記述します。
/**
* 文件: 超声测距.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);
}
シリアルライブラリのインストール
pip install serialをインストールします。しばらくダウンロードしてインストールしてから実行した後も、同じエラーが表示されます。インターネットを確認し、pip install pyserialをインストールする必要があります。
上記の方法でインストールできない場合は、ダウンロードしてインストールする必要があります。
ではhttps://pypi.org/project/pyserial/#files、そこに
Windowsでこのホイール形式のファイルをダウンロードします。wheelファイルについて
pipをインストールしている場合は、最新バージョンにアップグレードする必要があります。
管理者として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()
上記の方法の由来:Piggymanはpeek-a-boo ブログが好きです:最も簡単なmatplotlibインストールチュートリアル
II。特別な方法
私はexeファイルを使用してmatplotlibをインストールすることをお勧めします。ですから、exeインストールをお勧めします。以下の参考資料に、matplotlibのexeインストールファイルのリストを記載します。対応するバージョンのダウンロードを見つけることができます。インストールプロセスは
次のとおりです。1。最初に、適切なバージョンをダウンロードしました
2.それを開いて、インストールインターフェイスが表示されたら、[次へ]をクリックします
3.ここで、pythonインストールディレクトリを入力して、[次へ]をクリックします
。4.インストールプロセスのスクリーンショット
5.インストールが完了しました。エラーがないかどうかを確認してください。エラーがない場合、インストールは成功しています。
エラー参照:
エラーが発生した場合:ImportError:matplotlibにはdateutilが必要です。この記事を読むことができます:http://jingyan.baidu.com/article/aa6a2c14d5aa7f0d4c19c4e2.html
エラーが発生した場合:ImportError:matplotlibは
pyparsingを必要とします。この記事を読むことができます:http ://jingyan.baidu.com/article/e4d08ffdd3b9690fd2f60de2.html
上記のエクスペリエンスは、Baiduエクスペリエンスから得られます: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("处理完毕!")
上記はこの記事の内容全体です。詳細については、私に従ってください