色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于Arduino構建的4通道實時示波器

科技觀察員 ? 來源:circuitdigest ? 作者:伊曼紐爾·奧敦拉 ? 2022-11-08 17:25 ? 次閱讀

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

工作原理

這個項目有兩個部分;

數據轉換器

繪圖儀

示波器通常涉及施加到其輸入通道的模擬信號的視覺表示。為此,我們需要首先將信號從模擬轉換為數字,然后繪制數據。對于轉換,我們將利用Arduino使用的atmega328p微控制器上的ADC模數轉換器)將信號輸入的模擬數據轉換為數字信號。轉換后,每次的值通過UART從Arduino發送到PC,在那里,將使用python開發的繪圖儀軟件將通過繪制每個數據與時間的關系將傳入的數據流轉換為波形。

必需組件

生成此項目需要以下組件;

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

面包板

10k 電阻器 (1)

LDR (1)

跳線

所需軟件

Arduino IDE

Python 庫:Pyserial、Matplotlib、Drawnow

圖表

Arduino示波器的原理圖很簡單。我們需要做的就是將要檢查的信號連接到Arduino的指定模擬引腳。但是,我們將在簡單的分壓器設置中使用LDR來生成要檢查的信號,以便生成的波形將根據LDR周圍的光強度描述電壓電平。

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

poYBAGNqIH-AMaOkAAC2FqL_6us425.png

連接后,設置應如下圖所示。

poYBAGNqIIKAIGAVAAC7wTNAn7w775.jpg

完成所有連接后,我們可以繼續編寫代碼。

ArduinoOsclloscopeCode

我們將為這兩個部分中的每一個編寫代碼。對于前面提到的繪圖儀,我們將編寫一個python腳本,通過UART和Plots接受來自Arduino的數據,而對于轉換器,我們將編寫一個Arduino草圖,該草圖從ADC接收數據并將其轉換為發送到繪圖儀的電壓電平。

Python(繪圖儀)腳本

由于 python 代碼更復雜,我們將從它開始。

我們將使用幾個庫,包括;drawnow,Matplotlib和Pyserial使用前面提到的python腳本。Pyserial 允許我們創建一個可以通過串行端口進行通信的 python 腳本,Matplotlib 使我們能夠從通過串行端口接收的數據生成繪圖,drawnow 為我們提供了一種實時更新繪圖的方法。

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

安裝 pip 后,我們現在可以安裝所需的其他庫。

打開Windows用戶的命令提示符,Linux用戶的終端,然后輸入以下內容;

pip install pyserial

完成此操作后,請使用以下命令安裝 matplotlib;

pip install matplotlib

Drawnow 有時與 matplotlib 一起安裝,但可以肯定的是,運行;

pip install drawnow

安裝完成后,我們現在可以編寫 python 腳本了。

我們首先導入代碼所需的所有庫;

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

import pyserial

接下來,我們創建并初始化將在代碼期間使用的變量。數組 val 將用于存儲從串行端口接收的數據,cnt 將用于計數。每 50 個數據計數后,位置 0 處的數據將被刪除。這樣做是為了保持示波器上顯示的數據。

val = [ ] cnt = 0

接下來,我們創建串行端口對象,Arduino 將通過該對象與我們的 python 腳本進行通信。確保下面指定的 COM 端口與 Arduino 板與 IDE 通信的 COM 端口相同。上面使用的115200波特率用于確保與Arduino的高速通信。為防止錯誤,還必須啟用 Arduino 串行端口才能與此波特率通信。

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

接下來,我們使用;

plt.ion()

我們需要創建一個函數來從收到的數據生成繪圖,創建我們期望的上限和最小限制,在這種情況下,基于 Arduino's ADC 的分辨率為 1023。我們還設置了標題,標記了每個軸并添加了圖例,以便于識別情節。

#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')

完成此操作后,我們現在準備編寫主循環,該循環在可用時從串行端口獲取數據并繪制它。為了與Arduino同步,python腳本將握手數據發送到Arduino,以指示其準備讀取數據。當Arduino收到握手數據時,它會回復來自ADC的數據。沒有這種握手,我們將無法實時繪制數據。

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 代碼

第二個代碼是Arduino草圖,用于從ADC獲取表示信號的數據,然后等待從繪圖儀軟件接收握手信號。一旦收到握手信號,它就會通過UART將采集的數據發送到繪圖儀軟件。

我們首先聲明將應用信號的Arduino模擬引腳的引腳。

int sensorpin = A0;

接下來,我們初始化并開始波特率為 115200 的串行通信

void setup() {

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

Serial.begin(115200);

}

最后,voidloop() 函數處理數據的讀取,并通過串行將數據發送到繪圖儀。

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 示波器的實際應用

將代碼上傳到Arduino設置并運行python腳本。您應該看到數據開始通過python命令行流入,并且繪圖隨光強度而變化,如下圖所示。

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

}

}


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 示波器
    +關注

    關注

    113

    文章

    6281

    瀏覽量

    185680
  • python
    +關注

    關注

    56

    文章

    4807

    瀏覽量

    84963
  • Arduino
    +關注

    關注

    188

    文章

    6477

    瀏覽量

    187626
收藏 人收藏

    評論

    相關推薦

    通道示波器

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

    USB八通道示波器

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

    求購TO2044 數字示波器.4 GHz的4通道

    求購TO2044 數字示波器.4 GHz的4通道二手RTO2044供應熱線:***/13728431276(同微)曾S供應QQ:3140751627(同微)koukou:三一四零七五一
    發表于 03-08 16:51

    高性價比4通道300MHz帶寬數字示波器

    高性價比4通道300MHz帶寬數字示波器  電子市場的發展前景是毋庸置疑的,與之相輔相生的電子測量儀器、儀表設備也應用廣泛。就數字示波器而言,最近幾年不斷有
    發表于 12-29 09:08 ?1513次閱讀
    高性價比<b class='flag-5'>4</b><b class='flag-5'>通道</b>300MHz帶寬數字<b class='flag-5'>示波器</b>

    鼎陽科技推出SDS1000CF 4通道 帶寬數字示波器

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

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

    力科推出 4通道均為30GHz的實時示波器解決方案 力科通過簡單和快速的連接2臺示波器的方法在4
    發表于 02-08 16:15 ?960次閱讀

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

    力科推出4通道均為30GHz的實時示波器解決方案 不久前,力科通過簡單和快速的連接2臺示波器的方法在4
    發表于 02-11 08:36 ?1621次閱讀

    LabVIEW串口四通道示波器

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

    是德科技發布4通道實時功率分析儀,為三相交流設備測試提供利器

    是德科技公司(NYSE:KEYS)日前發布了新款IntegraVision功率分析儀,實現4通道的高精度、實時的功率分析和測量。Keysight IntegraVision PA2203A 4
    發表于 12-21 16:46 ?1596次閱讀

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

    通道示波器4ChannelOscilloscope),可以同時對4路信號進了觀察和測量。因而在對路以上信號進行對比觀察和測量時,更為方便。
    發表于 01-04 11:08 ?5.1w次閱讀
    multisim虛擬儀器之四<b class='flag-5'>通道</b><b class='flag-5'>示波器</b>

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

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

    示波器通道和四通道有什么區別

    示波器通道和四通道的區別是,通道越多,可比性越好,可以同時觀察更多的信號。
    發表于 10-26 14:19 ?1.7w次閱讀

    Arduino LCD觸摸屏雙通道示波器

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

    基于Arduino的雙通道示波器

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

    Arduino藍牙4通道中繼應用程序

    電子發燒友網站提供《Arduino藍牙4通道中繼應用程序.zip》資料免費下載
    發表于 02-08 09:25 ?0次下載
    <b class='flag-5'>Arduino</b>藍牙<b class='flag-5'>4</b><b class='flag-5'>通道</b>中繼應用程序
    主站蜘蛛池模板: 寻找最美乡村教师颁奖晚会 | 日韩欧美成人免费中文字幕 | 色裕插插插影视 | 不卡无线在一二三区 | 琪琪色原网站ying | 蜜桃TV成人网站免费打开 | 又黄又粗又爽免费观看 | 蜜芽视频在线观看视频免费播放 | 精品熟女少妇AV免费观看 | 最新国产麻豆精品 | 国产在线中文字幕 | 亚洲一区乱码电影在线 | 人人碰国产免费线观看 | 亚洲免费无码中文在线亚洲在 | QVOD在线播放| 99热国产这里只有精品免费 | 中文字幕本庄优花喂奶 | Y8848高清私人影院软件优势 | 伊人久久国产免费观看视频 | 无码专区aaaaaa免费视频 | 日韩视频中文字幕精品偷拍 | 国产精品嫩草免费视频 | 亚洲午夜精品A片久久软件 亚洲午夜精品A片久久不卡蜜桃 | 国产熟妇无码一区二 | 免费在线观看黄色网址 | 日韩欧美一区二区三区在线 | 古装性艳史电影在线看 | 日本中文字幕巨大的乳专区 | AV97最新无码喷水叫床 | 久久精品国产久精国产果冻传媒 | 色欲人妻无码AV精品一区二区 | 无人影院在线播放 | 国内精品视频久久久久免费 | 美女被C污黄网站免费观看 美女白虎穴 | 苍井空a 集在线观看网站 | a级成人免费毛片完整版 | 99久久国产综合精品国 | 一个人免费视频在线观看 | 亚洲.欧美.中文字幕在线观看 | 国产精品亚洲欧美一区麻豆 | 亚洲成年人在线观看 |