0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于Arduino構(gòu)建的4通道實(shí)時(shí)示波器

科技觀(guān)察員 ? 來(lái)源:circuitdigest ? 作者:伊曼紐爾·奧敦拉 ? 2022-11-08 17:25 ? 次閱讀

示波器是任何電子工程師或制造商的工作臺(tái)上最重要的工具之一。它主要用于查看波形并確定施加在其輸入端的信號(hào)的電壓電平、頻率、噪聲和其他參數(shù),這些參數(shù)可能會(huì)隨時(shí)間變化。嵌入式軟件開(kāi)發(fā)人員還使用它進(jìn)行代碼調(diào)試,技術(shù)人員使用它在維修期間對(duì)電子設(shè)備進(jìn)行故障排除。這些原因使示波器成為任何工程師的必備工具。唯一的問(wèn)題是它們可能非常昂貴,以最低精度執(zhí)行最基本功能的示波器可能高達(dá) 45 至 100 美元,而更先進(jìn)和更高效的示波器的成本超過(guò) 150 美元。今天,我將演示如何使用Arduino和一款軟件,該軟件將使用我最喜歡的編程語(yǔ)言Python開(kāi)發(fā),以構(gòu)建低成本的4通道Arduino示波器,該示波器能夠執(zhí)行部署一些廉價(jià)示波器的任務(wù),例如顯示波形和確定信號(hào)的電壓電平。

工作原理

這個(gè)項(xiàng)目有兩個(gè)部分;

數(shù)據(jù)轉(zhuǎn)換器

繪圖儀

示波器通常涉及施加到其輸入通道的模擬信號(hào)的視覺(jué)表示。為此,我們需要首先將信號(hào)從模擬轉(zhuǎn)換為數(shù)字,然后繪制數(shù)據(jù)。對(duì)于轉(zhuǎn)換,我們將利用Arduino使用的atmega328p微控制器上的ADC模數(shù)轉(zhuǎn)換器)將信號(hào)輸入的模擬數(shù)據(jù)轉(zhuǎn)換為數(shù)字信號(hào)。轉(zhuǎn)換后,每次的值通過(guò)UART從Arduino發(fā)送到PC,在那里,將使用python開(kāi)發(fā)的繪圖儀軟件將通過(guò)繪制每個(gè)數(shù)據(jù)與時(shí)間的關(guān)系將傳入的數(shù)據(jù)流轉(zhuǎn)換為波形。

必需組件

生成此項(xiàng)目需要以下組件;

Arduino Uno(可以使用任何其他板)

面包板

10k 電阻器 (1)

LDR (1)

跳線(xiàn)

所需軟件

Arduino IDE

Python 庫(kù):Pyserial、Matplotlib、Drawnow

圖表

Arduino示波器的原理圖很簡(jiǎn)單。我們需要做的就是將要檢查的信號(hào)連接到Arduino的指定模擬引腳。但是,我們將在簡(jiǎn)單的分壓器設(shè)置中使用LDR來(lái)生成要檢查的信號(hào),以便生成的波形將根據(jù)LDR周?chē)墓鈴?qiáng)度描述電壓電平。

按照下面的原理圖連接組件;

poYBAGNqIH-AMaOkAAC2FqL_6us425.png

連接后,設(shè)置應(yīng)如下圖所示。

poYBAGNqIIKAIGAVAAC7wTNAn7w775.jpg

完成所有連接后,我們可以繼續(xù)編寫(xiě)代碼。

ArduinoOsclloscopeCode

我們將為這兩個(gè)部分中的每一個(gè)編寫(xiě)代碼。對(duì)于前面提到的繪圖儀,我們將編寫(xiě)一個(gè)python腳本,通過(guò)UART和Plots接受來(lái)自Arduino的數(shù)據(jù),而對(duì)于轉(zhuǎn)換器,我們將編寫(xiě)一個(gè)Arduino草圖,該草圖從ADC接收數(shù)據(jù)并將其轉(zhuǎn)換為發(fā)送到繪圖儀的電壓電平。

Python(繪圖儀)腳本

由于 python 代碼更復(fù)雜,我們將從它開(kāi)始。

我們將使用幾個(gè)庫(kù),包括;drawnow,Matplotlib和Pyserial使用前面提到的python腳本。Pyserial 允許我們創(chuàng)建一個(gè)可以通過(guò)串行端口進(jìn)行通信的 python 腳本,Matplotlib 使我們能夠從通過(guò)串行端口接收的數(shù)據(jù)生成繪圖,drawnow 為我們提供了一種實(shí)時(shí)更新繪圖的方法。

有幾種方法可以在您的 PC 上安裝這些軟件包,最簡(jiǎn)單的是通過(guò)pip。Pip 可以通過(guò)命令行安裝在 Windows 或 Linux 機(jī)器上。PIP 與 python3 打包在一起,所以我建議您安裝 python3 并選中有關(guān)將 python 添加到路徑的框。如果您在安裝 pip 時(shí)遇到問(wèn)題,請(qǐng)查看 Python 官方網(wǎng)站以獲取提示。

安裝 pip 后,我們現(xiàn)在可以安裝所需的其他庫(kù)。

打開(kāi)Windows用戶(hù)的命令提示符,Linux用戶(hù)的終端,然后輸入以下內(nèi)容;

pip install pyserial

完成此操作后,請(qǐng)使用以下命令安裝 matplotlib;

pip install matplotlib

Drawnow 有時(shí)與 matplotlib 一起安裝,但可以肯定的是,運(yùn)行;

pip install drawnow

安裝完成后,我們現(xiàn)在可以編寫(xiě) python 腳本了。

我們首先導(dǎo)入代碼所需的所有庫(kù);

import time import matplotlib.pyplot as plt from drawnow import *

import pyserial

接下來(lái),我們創(chuàng)建并初始化將在代碼期間使用的變量。數(shù)組 val 將用于存儲(chǔ)從串行端口接收的數(shù)據(jù),cnt 將用于計(jì)數(shù)。每 50 個(gè)數(shù)據(jù)計(jì)數(shù)后,位置 0 處的數(shù)據(jù)將被刪除。這樣做是為了保持示波器上顯示的數(shù)據(jù)。

val = [ ] cnt = 0

接下來(lái),我們創(chuàng)建串行端口對(duì)象,Arduino 將通過(guò)該對(duì)象與我們的 python 腳本進(jìn)行通信。確保下面指定的 COM 端口與 Arduino 板與 IDE 通信的 COM 端口相同。上面使用的115200波特率用于確保與Arduino的高速通信。為防止錯(cuò)誤,還必須啟用 Arduino 串行端口才能與此波特率通信。

port = serial.Serial('COM4', 115200, timeout=0.5)

接下來(lái),我們使用;

plt.ion()

我們需要?jiǎng)?chuàng)建一個(gè)函數(shù)來(lái)從收到的數(shù)據(jù)生成繪圖,創(chuàng)建我們期望的上限和最小限制,在這種情況下,基于 Arduino's ADC 的分辨率為 1023。我們還設(shè)置了標(biāo)題,標(biāo)記了每個(gè)軸并添加了圖例,以便于識(shí)別情節(jié)。

#create the figure function def makeFig(): plt.ylim(-1023,1023) plt.title('Osciloscope') plt.grid(True) plt.ylabel('ADC outputs') plt.plot(val, 'ro-', label='Channel 0') plt.legend(loc='lower right')

完成此操作后,我們現(xiàn)在準(zhǔn)備編寫(xiě)主循環(huán),該循環(huán)在可用時(shí)從串行端口獲取數(shù)據(jù)并繪制它。為了與Arduino同步,python腳本將握手?jǐn)?shù)據(jù)發(fā)送到Arduino,以指示其準(zhǔn)備讀取數(shù)據(jù)。當(dāng)Arduino收到握手?jǐn)?shù)據(jù)時(shí),它會(huì)回復(fù)來(lái)自ADC的數(shù)據(jù)。沒(méi)有這種握手,我們將無(wú)法實(shí)時(shí)繪制數(shù)據(jù)。

while (True):

port.write(b's') #handshake with Arduino

if (port.inWaiting()):# if the arduino replies

value = port.readline()# read the reply

print(value)#print so we can monitor it

number = int(value) #convert received data to integer

print('Channel 0: {0}'.format(number))

# Sleep for half a second.

time.sleep(0.01)

val.append(int(number))

drawnow(makeFig)#update plot to reflect new data input

plt.pause(.000001)

cnt = cnt+1

if(cnt>50):

val.pop(0)#keep the plot fresh by deleting the data at position 0

Arduino 代碼

第二個(gè)代碼是Arduino草圖,用于從ADC獲取表示信號(hào)的數(shù)據(jù),然后等待從繪圖儀軟件接收握手信號(hào)。一旦收到握手信號(hào),它就會(huì)通過(guò)UART將采集的數(shù)據(jù)發(fā)送到繪圖儀軟件。

我們首先聲明將應(yīng)用信號(hào)的Arduino模擬引腳的引腳。

int sensorpin = A0;

接下來(lái),我們初始化并開(kāi)始波特率為 115200 的串行通信

void setup() {

// initialize serial communication at 115200 bits per second to match that of the python script:

Serial.begin(115200);

}

最后,voidloop() 函數(shù)處理數(shù)據(jù)的讀取,并通過(guò)串行將數(shù)據(jù)發(fā)送到繪圖儀。

void loop() {

// read the input on analog pin 0:

float sensorValue = analogRead(sensorpin);

byte data = Serial.read();

if (data == 's')

{

Serial.println(sensorValue);

delay(10); // delay in between reads for stability

}

}

完整的 Arduino 示波器代碼在下面以及本文末尾給出,如下所示。

int sensorpin = A0;

void setup() {

// initialize serial communication at 115200 bits per second to match that of the python script:

Serial.begin(115200);

}

void loop() {

// read the input on analog pin 0:########################################################

float sensorValue = analogRead(sensorpin);

byte data = Serial.read();

if (data == 's')

{

Serial.println(sensorValue);

delay(10); // delay in between reads for stability

}

}

Arduino 示波器的實(shí)際應(yīng)用

將代碼上傳到Arduino設(shè)置并運(yùn)行python腳本。您應(yīng)該看到數(shù)據(jù)開(kāi)始通過(guò)python命令行流入,并且繪圖隨光強(qiáng)度而變化,如下圖所示。

pYYBAGNqIIOAHPoeAAB5Hz-4b70766.png

Python Code:





import time

import matplotlib.pyplot as plt

from drawnow import *

import serial

val = [ ]

cnt = 0

#create the serial port object

port = serial.Serial('COM4', 115200, timeout=0.5)

plt.ion()


#create the figure function

def makeFig():

plt.ylim(-1023,1023)

plt.title('Osciloscope')

plt.grid(True)

plt.ylabel('data')

plt.plot(val, 'ro-', label='Channel 0')

plt.legend(loc='lower right')


while (True):

port.write(b's') #handshake with Arduino

if (port.inWaiting()):# if the arduino replies

value = port.readline()# read the reply

print(value)#print so we can monitor it

number = int(value) #convert received data to integer

print('Channel 0: {0}'.format(number))

# Sleep for half a second.

time.sleep(0.01)

val.append(int(number))

drawnow(makeFig)#update plot to reflect new data input

plt.pause(.000001)

cnt = cnt+1

if(cnt>50):

val.pop(0)#keep the plot fresh by deleting the data at position 0





Arduino Code:


int sensorpin = A0;

void setup() {

// initialize serial communication at 115200 bits per second to match that of the python script:

Serial.begin(115200);

}

void loop() {

// read the input on analog pin 0:########################################################

float sensorValue = analogRead(sensorpin);

byte data = Serial.read();

if (data == 's')

{

Serial.println(sensorValue);

delay(10); // delay in between reads for stability

}

}


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 示波器
    +關(guān)注

    關(guān)注

    113

    文章

    6115

    瀏覽量

    183480
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84107
  • Arduino
    +關(guān)注

    關(guān)注

    187

    文章

    6454

    瀏覽量

    185990
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    通道示波器

    通道示波器,要的拿走
    發(fā)表于 08-26 08:46

    USB八通道示波器

    ,一般使用示波器的外觸發(fā)輸入功能和參考同步信號(hào)測(cè)量多路信號(hào)。市面上現(xiàn)能提供8通道獨(dú)立示波器的只有日本橫河(型號(hào)為DLM4038和DLM4038),但價(jià)格昂貴;而USB八通道
    發(fā)表于 08-02 10:54

    求購(gòu)TO2044 數(shù)字示波器.4 GHz的4通道

    求購(gòu)TO2044 數(shù)字示波器.4 GHz的4通道二手RTO2044供應(yīng)熱線(xiàn):***/13728431276(同微)曾S供應(yīng)QQ:3140751627(同微)koukou:三一四零七五一
    發(fā)表于 03-08 16:51

    高性?xún)r(jià)比4通道300MHz帶寬數(shù)字示波器

    高性?xún)r(jià)比4通道300MHz帶寬數(shù)字示波器  電子市場(chǎng)的發(fā)展前景是毋庸置疑的,與之相輔相生的電子測(cè)量?jī)x器、儀表設(shè)備也應(yīng)用廣泛。就數(shù)字示波器而言,最近幾年不斷有
    發(fā)表于 12-29 09:08 ?1490次閱讀
    高性?xún)r(jià)比<b class='flag-5'>4</b><b class='flag-5'>通道</b>300MHz帶寬數(shù)字<b class='flag-5'>示波器</b>

    鼎陽(yáng)科技推出SDS1000CF 4通道 帶寬數(shù)字示波器

    鼎陽(yáng)科技推出SDS1000CF 4通道 帶寬數(shù)字示波器  電子市場(chǎng)的發(fā)展前景是毋庸置疑的,與之相輔相生的電子測(cè)量?jī)x器、儀表設(shè)備也應(yīng)用廣泛。就數(shù)字示波器而言,最近幾年
    發(fā)表于 01-09 09:52 ?1008次閱讀
    鼎陽(yáng)科技推出SDS1000CF <b class='flag-5'>4</b><b class='flag-5'>通道</b> 帶寬數(shù)字<b class='flag-5'>示波器</b>

    力科推出 4通道均為30GHz的實(shí)時(shí)示波器解決方案

    力科推出 4通道均為30GHz的實(shí)時(shí)示波器解決方案 力科通過(guò)簡(jiǎn)單和快速的連接2臺(tái)示波器的方法在4
    發(fā)表于 02-08 16:15 ?918次閱讀

    力科推出4通道均為30GHz的實(shí)時(shí)示波器解決方案

    力科推出4通道均為30GHz的實(shí)時(shí)示波器解決方案 不久前,力科通過(guò)簡(jiǎn)單和快速的連接2臺(tái)示波器的方法在4
    發(fā)表于 02-11 08:36 ?1546次閱讀

    LabVIEW串口四通道示波器

    21ic下載_LabVIEW串口四通道示波器
    發(fā)表于 12-16 14:43 ?110次下載

    是德科技發(fā)布4通道實(shí)時(shí)功率分析儀,為三相交流設(shè)備測(cè)試提供利器

    是德科技公司(NYSE:KEYS)日前發(fā)布了新款I(lǐng)ntegraVision功率分析儀,實(shí)現(xiàn)4通道的高精度、實(shí)時(shí)的功率分析和測(cè)量。Keysight IntegraVision PA2203A 4
    發(fā)表于 12-21 16:46 ?1527次閱讀

    multisim虛擬儀器之四通道示波器

    通道示波器4ChannelOscilloscope),可以同時(shí)對(duì)4路信號(hào)進(jìn)了觀(guān)察和測(cè)量。因而在對(duì)路以上信號(hào)進(jìn)行對(duì)比觀(guān)察和測(cè)量時(shí),更為方便。
    發(fā)表于 01-04 11:08 ?4.9w次閱讀
    multisim虛擬儀器之四<b class='flag-5'>通道</b><b class='flag-5'>示波器</b>

    CN0394: 帶Arduino兼容模擬接口的靈活、低功耗、4通道熱電偶系統(tǒng)

    CN0394: 帶Arduino兼容模擬接口的靈活、低功耗、4通道熱電偶系統(tǒng)
    發(fā)表于 03-19 10:48 ?6次下載
    CN0394: 帶<b class='flag-5'>Arduino</b>兼容模擬接口的靈活、低功耗、<b class='flag-5'>4</b><b class='flag-5'>通道</b>熱電偶系統(tǒng)

    示波器通道和四通道有什么區(qū)別

    示波器通道和四通道的區(qū)別是,通道越多,可比性越好,可以同時(shí)觀(guān)察更多的信號(hào)。
    發(fā)表于 10-26 14:19 ?1.6w次閱讀

    Arduino LCD觸摸屏雙通道示波器

    電子發(fā)燒友網(wǎng)站提供《Arduino LCD觸摸屏雙通道示波器.zip》資料免費(fèi)下載
    發(fā)表于 02-03 11:15 ?4次下載
    <b class='flag-5'>Arduino</b> LCD觸摸屏雙<b class='flag-5'>通道</b><b class='flag-5'>示波器</b>

    基于Arduino的雙通道示波器

    電子發(fā)燒友網(wǎng)站提供《基于Arduino的雙通道示波器.zip》資料免費(fèi)下載
    發(fā)表于 02-03 11:09 ?10次下載
    基于<b class='flag-5'>Arduino</b>的雙<b class='flag-5'>通道</b><b class='flag-5'>示波器</b>

    Arduino藍(lán)牙4通道中繼應(yīng)用程序

    電子發(fā)燒友網(wǎng)站提供《Arduino藍(lán)牙4通道中繼應(yīng)用程序.zip》資料免費(fèi)下載
    發(fā)表于 02-08 09:25 ?0次下載
    <b class='flag-5'>Arduino</b>藍(lán)牙<b class='flag-5'>4</b><b class='flag-5'>通道</b>中繼應(yīng)用程序