##1. はじめに
「ArduinoとオシロスコープをExcelで制御して測定する」をPythonで試しました。測定システムの概要を以下に示します。
##2. 環境構築
###2.1 Arduino治具
本稿で使用しているArduino治具は「Arduino Leonardoで多目的ツールの製作」をご参照ください。コマンド制御により以下のような矩形波パルスを生成します。
###2.2 Python実行環境
MinicondaでPythonの実行環境を用意します。minicondaから最新版のWindows 64-bit(exe installer)をダウンロード、インストールします。インストール時の質問は全部デフォルト値です。
###2.3 PyVISA、PyVISA-py
VISAをハンドリングするライブラリとしてPyVISAを使用します。PyVISAの公式サイトはこちらですがインストールはcondaコマンドで行います。また、バックエンドのVISAライブラリとしてPyVISA-pyをcondaコマンドでインストールします。
PyVISA-pyはPyVISAが提供する代替VISAライブラリで現時点ではVISAの一部のみをサポートしているとのことです。詳しくはこちらをご参照ください。
1.Anaconda promptを開く
2.conda install -c conda-forge pyvisa
コマンド実行ログ
>conda install -c conda-forge pyvisa
Solving environment: done
## Package Plan ##
environment location: C:\Users\hoge\Miniconda3
added / updated specs:
- pyvisa
The following packages will be downloaded:
package | build
---------------------------|-----------------
conda-4.5.11 | py37_1000 654 KB conda-forge
openssl-1.0.2p | hfa6e2cd_1001 5.4 MB conda-forge
certifi-2018.10.15 | py37_1000 137 KB conda-forge
pyvisa-1.9.1 | py37_1000 231 KB conda-forge
ca-certificates-2018.10.15 | ha4d7672_0 170 KB conda-forge
yaml-0.1.7 | vc14_0 103 KB conda-forge
------------------------------------------------------------
Total: 6.6 MB
The following NEW packages will be INSTALLED:
pyvisa: 1.9.1-py37_1000 conda-forge
The following packages will be UPDATED:
ca-certificates: 2018.03.07-0 --> 2018.10.15-ha4d7672_0 conda-forge
certifi: 2018.8.24-py37_1 --> 2018.10.15-py37_1000 conda-forge
conda: 4.5.11-py37_0 --> 4.5.11-py37_1000 conda-forge
openssl: 1.0.2p-hfa6e2cd_0 --> 1.0.2p-hfa6e2cd_1001 conda-forge
The following packages will be DOWNGRADED:
yaml: 0.1.7-hc54c509_2 --> 0.1.7-vc14_0 conda-forge [vc14]
Proceed ([y]/n)? y
Downloading and Extracting Packages
conda-4.5.11 | 654 KB | ###################################################################################### | 100%
openssl-1.0.2p | 5.4 MB | ###################################################################################### | 100%
certifi-2018.10.15 | 137 KB | ###################################################################################### | 100%
pyvisa-1.9.1 | 231 KB | ###################################################################################### | 100%
ca-certificates-2018 | 170 KB | ###################################################################################### | 100%
yaml-0.1.7 | 103 KB | ###################################################################################### | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
3.conda install -c conda-forge pyvisa-py
コマンド実行ログ
>conda install -c conda-forge pyvisa-py
Solving environment: done
## Package Plan ##
environment location: C:\Users\hoge\Miniconda3
added / updated specs:
- pyvisa-py
The following packages will be downloaded:
package | build
---------------------------|-----------------
pyvisa-py-0.2 | py_1000 29 KB conda-forge
pyserial-3.4 | py_2 61 KB conda-forge
------------------------------------------------------------
Total: 90 KB
The following NEW packages will be INSTALLED:
pyserial: 3.4-py_2 conda-forge
pyvisa-py: 0.2-py_1000 conda-forge
Proceed ([y]/n)? y
Downloading and Extracting Packages
pyvisa-py-0.2 | 29 KB | ###################################################################################### | 100%
pyserial-3.4 | 61 KB | ###################################################################################### | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: / C:\Users\hoge\Miniconda3\lib\site-packages\conda\core\link.py:772: UserWarning: Package conda-forge::pyvisa-py-0.2-py_1000 uses a pre-link script. Pre-link scripts are potentially dangerous.
This is because pre-link scripts have the ability to change the package contents in the
package cache, and therefore modify the underlying files for already-created conda
environments. Future versions of conda may deprecate and ignore pre-link scripts.
""") % prec.dist_str())
done
###2.4 PySerialのインストール
RS-232C通信をハンドリングするライブラリとしてPySerialを使用しますが、PySerialはPyVISA-pyのインストールの際に一緒にインストールされたためここで行うことは特にありません。
##3. pythonのプログラム
pythonを実行し以下の操作を行います。
- serialをimportし通信設定を行う
- Arduino Leonardo治具へ "x" を送信しコマンドモードへ遷移する(xは任意の文字)
- Arduino Leonardo治具へコマンド "toneon 1000" を送信し1000Hzのパルスを生成する
- VISAをimportしリソースを生成、オープンする
- オシロスコープへコマンド "*IDN?" を送信しオシロスコープを認識していることを確認する
- オシロスコープへコマンド ":MEAS:FREQ? CHAN1" を送信し周波数をreadする
- Arduino Leonardo治具へコマンド "toneoff" を送信しパルスの生成を停止する
実行結果を示します。Arduino Leonardo治具へコマンドを送信して1000Hzの矩形波パルスを生成し、オシロスコープへ:MEAS:FREQ? CHAN1コマンドを送信してその戻り値として9.980040e+02を得ました。
(base) C:\Users\hoge>python
Python 3.7.0 (default, Jun 28 2018, 08:04:48) [MSC v.1912 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>
>>> import serial
>>> ser = serial.Serial("COM6", 9600)
>>> data = "x"
>>> data = data +'\r\n'
>>> ser.write(bytes(data, 'UTF-8'))
3
>>> data = "toneon 1000"
>>> data = data +'\r\n'
>>> ser.write(bytes(data, 'UTF-8'))
13
>>>
>>>
>>> import visa
>>> rm = visa.ResourceManager()
>>> print(rm.list_resources())
('USB0::0x1AB1::0x04CE::DS1ZXXXXXXXXXX::0::INSTR',)
>>> dso = rm.open_resource('USB0::0x1AB1::0x04CE::DS1ZXXXXXXXXXX::0::INSTR')
>>> print(dso.query("*IDN?"))
RIGOL TECHNOLOGIES,DS1054Z,DS1ZXXXXXXXXXX,00.04.04.SP3
>>> print(dso.query(":MEAS:FREQ? CHAN1"))
9.980040e+02
>>>
>>>
>>> data = "toneoff"
>>> data = data +'\r\n'
>>> ser.write(bytes(data, 'UTF-8'))
9
>>>
##4. おわりに
- Excelの代わりにPythonでArduinoとオシロスコープを制御して周波数を測定できました。
- 本稿では割愛しましたが測定結果が期待結果を満足するか判定を行うとプログラム(ここではArduinoのスケッチ)のテストになります。
- 組込み機器をPythonで制御したりテストできるメリットとしてPythonの豊富なライブラリを使用できることが挙げられます。こちらは稿を改めてご紹介できればと思います。
##5. 参考