-using-Python的github去修改的,總共有下面兩種程式語言,修改後的程式
在我的github內。
https://github.com/zsnes631/Python-Arduino
1.寫Arduino程式,將ADC0的輸入電壓, 透過Uart Port輸出到PC。
2.寫Python GUI程式,接收到的數值,還有產生Sine波,依照時間軸動態顯示。
Python GUI程式
1,代入相關的模塊。
"serial"是用在UART相關的命令
"numpy"是用在數值運算,Sine波就是由它所計算出的。
"matplotlib"是用來顯示(plot)圖面。
"drawnow" 甩來即時更新圖面。
"serial.tools.list_port"用來確認Serial port裝置的資訊。
2,設定變數,values為序列,plt.ion()是顯示出matlotlib plt的圖。
Fs、f則是Sine波的參數。
3,尋找Arduino在那個UART Port,由於我用的Arduino是用USB to UART converter IC
CH340,所以確認PC上的那個Uart Port的描述有CH340,就表示該Port是接到Arduino。
4.定義一個函式,用來設定GUI視窗plot plt的參數,包括它的title、XY的Label,
XY軸的數值範圍(axis)。
5.values是用來存放Arduino ADC接收到的數值,values1是sine波的數值。我設定
這些數值的Buffer到100個。所以我們可以看到現在的數值,跟之前的的99個數
值。append是先用0填入Buffer 0~100,當作初始值。
6.用"serial"模塊的函數,當PC的Uart port有接收到資料,就存到變數valueRead。
這個資料,就是Arduino傳過來的ADC數值。
7.利用try-except來做例外處理,確認從arduino接收到的數值,是在0~1024。
每接收到一次數值,就存到values序列裡,並將序列裡,最舊的那筆資料
移出(pop)。valueX是sine的計算式。f=4, Fs=100,可以得出每25(100/4)
為一次sine波周期。300是峰值,Sine波的峰對峰pk-pk為600。最後面的
400是level,等於是將sine wave上移了400個單位。
8.執行程式後,可以看到Arduino傳送來的數值values,跟values1 Sine波
的波形。
Arduino程式
Arduino程式,每300ms讀取ADC pin A0的數值,再從Uart Port以Baudrate 19200bps
傳送出去。Arduino的ADC是10bits,輸入電壓範圍從0~5V,5V讀進來的值為1023。
,
Reference
https://github.com/DeligenceTechnologies/Plotting-real-time-sound-sensor-data-from-Arduino-using-Python
沒有留言:
張貼留言