アナログオシロスコープを使って複素平面を表現する今岡通博の俺流!組み込み用語解説(20)(2/2 ページ)

» 2025年11月27日 06時00分 公開
[今岡通博MONOist]
前のページへ 1|2       

オシロスコープの画面調整用プログラム

 画面調整用プログラムはarduinoに実装します。その動作は、先に挙げた図2の(127,127)、(−128,127)、(127,−128)、(−128,128)そして(127,127)へと戻り、複素平面の頂点を時計回りにオシロスコープの輝点が1秒ごとに巡回するというものです。

 ここでは「analogWrite(pin,value)」という関数をつかいます。これは、PWM(パルス幅変調)という仕組みを使って、0〜5Vの電圧を256単位で出力することができます。ですからvalueの値は0から255ということになります。また第1引数はArduinoのどのピンを使うか指定するものですが、Arduinoの機種によって異なる場合がありますので、そこはお使いのArduinoボードで調べてみてください。筆者は「Arduino nano」を使っているので5番ピンと6番ピンを使っています。

 analogWriteは、PWMでアナログ出力を行っているのですが、PWMはパルスの山と谷の比率を変えることにより疑似的にアナログ電圧を出力する仕組みなので、オシロスコープのように反応速度が速い装置で波形を見る場合はフィルターが必要です。

PWMの出力を整形するためのフィルター回路

 PWMの出力をきれいなアナログ信号に整形するためには図3のようなフィルターが必要です。

図3 図3 PWMの出力を整形するためのフィルター回路

 今回は、抵抗Rが24kΩ、そしてコンデンサーCは3.3μFの値を用いました。Arduinoのアナログ出力ピンである5番あるいは6番ピンを、オシロスコープの入力チャンネル1とチャンネル2の間にそれぞれ挟んで使います。

 以下のリスト1はオシロスコープの画面調整用プログラムです。

void setup(){
}
void loop(){
  analogWrite(5,0);
  analogWrite(6,0);
  delay(1000);
  analogWrite(5,255);
  analogWrite(6,0);
  delay(1000);
  analogWrite(5,255);
  analogWrite(6,255);
  delay(1000);
  analogWrite(5,0);
  analogWrite(6,255);
  delay(1000);
  }
リスト1 オシロスコープの画面調整用プログラム

 リスト1は、各頂点を1秒間隔で巡回して繰り返すプログラムになっています。ここで注意していただきたいのはanalogWriteの第2引数で、0が複素平面の−128になっているところです。また第2引数の255は複素平面では127となります。

 analogWriteで出力される電圧は0〜5Vとなります。5番ピンに虚部、そして6番ピンに実部が電圧に変換されて出力されます。5番ピンはオシロスコープのチャンネル1にそして6番ピンはチャンネル2に接続します。

オシロスコープの操作パネル

 図4はオシロスコープの操作パネルです。表示した図形を上下させるにはCH1のPOSITIONのノブを、図形を縦方向に伸縮させるにはCH1のVOLTS/DIVの内側のノブを、図形を左右に移動させるにはHORIZONTALのPOSITIONのノブを、図形を横方向に伸縮させるにはCH2のVOLT/DIVの内側のノブを調整します。

図4 図4 オシロスコープの操作パネル

複素平面に複素数を投影

 リスト2は指定した虚部と実部を複素平面に映し出すプログラムです。

signed char i = 64;
signed char r = -32;
void setup(){
  analogWrite(5,i+128);
  analogWrite(6,r+128);
}
void loop(){}
リスト2 虚部と実部を複素平面に映し出すプログラム

 1行目で虚部の値を変数iに代入しています。変数はsigned charで、値がとり得る範囲は−128〜127です。虚部のiに代入される値は64です。次は実部の値を変数rに代入しています。値は-32です。

 5行目ではanalogWriteを用いて虚数部の値のアナログ値を5番ピンに出力しています。第2引数でi+128としているのは、analogWriteが扱える値である0〜255に変換するためです。6行目では同様にanalogWriteを用いて実部の値をアナログ変換して6番ピンに出力しています。

 図5は、リスト2のプログラムとオシロスコープによって、複素平面上に指定した複素数を表示させた状態です。

図5 図5 オシロスコープを使って複素平面上に指定した複素数を表示させた状態

 原点から縦方向の上側に2マス、256を8分割しているので1マスは32になるので、虚数部の64を表していることが分かります。横方向では左に1マスなので、実部の−32が画面に反映されていることが分かります。

おわりに

 いかがだったでしょうか。オシロスコープを用いると数式を使わなくても複素数と複素平面を説明できたとは思いませんか。もし虚数や複素数に対する皆さんの苦手感を払拭できたとしたら幸いです。

⇒MONOist編集部へのご意見はこちらまで

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

特別協賛PR
スポンサーからのお知らせPR
Pickup ContentsPR
Special SitePR
あなたにおすすめの記事PR