ラズパイマガジン2019年8月号に寄稿しています
7/11発売のラズパイマガジン2019年8月号の特集「工作ワザ完全マニュアル70テク」にいくつか記事を寄稿させていただきました。
今回は、私が書いた記事のうち、ラズパイと格安測定器を使ってハードウェアを理解する部分の記事に関して特別にブログで無料公開をいたします。なお、実際の雑誌では紙面スペースに限りがあるため、紙面の方は重要な部分のみ編集した形になっております。もちろんラズパイマガジン編集部様には許可をいただいております。ブログ公開の英断に多謝です!
私自身が、以前にハードウェアエンジニアとして働いたときの経験を詰め込んだ記事となっていますので、是非参考にしていただけましたら幸いです。
ラズパイと格安測定器でハードウェア入門
配線の接続確認に欠かせない「テスター」
電子工作をするのであれば、一番最初にそろえるべき測定器がテスターです。エンジニアにとってテスターは、お医者さんにとっての聴診器といっても過言ではないくらい重要かつスタンダードな測定器です。
テスターと一口にいっても、安いものから高いもの、サイズも大小様々ですが、最初はAmazonなどで買える手頃なものがよいでしょう。私は三和電気計器(SANWA)の「PM3」というテスターを 愛用しています
テスターの機能は機種によって様々ですが、最も代表的なものが「電圧」「電流」「抵抗」を測る機能です。その中でもよく使うのが「電圧」と「抵抗」の測定です。
電圧の測定では、テスターの黒い 端子と赤い端子の電圧差を見ることができます。例えば、ラズパイが 起動しないとき、GPIO ピンの 2 番を赤、39 番を黒につなぐことで、5V が正しく入力されているかを確認できます。
テスターを使用する図
また電子工作で問題が発生した ときに、最初に確認するのは配線がつながっているかどうかです。電子回路上の 2 カ所の地点が電気的につながっていることを導通といいますが、これを確認するのがテスターの重要な役割です。
導通を確認するには、テスターで抵抗を測定し0Ωに近い値が出ているかで確認します。通常、テスターには0Ω近い抵抗値を測定するとブザー音を鳴らすモードが搭載されています。そういったモードを活用すると、素早く導通を確認できます。
ピッピッと音を出しながら導通を素早く次々に確認できるようになれば、立派な電子工作愛好者ですね。
PWMの波形までわかるオシロスコープ
通常のテスターは、電圧の値を確認することができますが、その細かい動きまでを確認することはできません。そこでオシロスコープの出番となります。テスターが、静的な解析をする測定器とするなら、オシロスコープは動的な解析をする測定器と言えます。
多くの電子機器は、機器内外で数多くの通信をしています。ラズパイでもHDMI、USB、NTSC、I2S、I2C、SPI、GPIO、などの規格に従った数多くの信号が基板内を駆け巡っています。これらの信号は、数kHzから数GHzという幅広いスピードで変動するため、テスターではその動きを確認することが困難です。
そんなときに役に立つのが、動的な信号の電圧の動き(波形と言います)を確認することができるオシロスコープです。オシロスコープは、自分で作ったハードウェアの測定や、動かないときの不具合解析に必須の測定器です。
オシロスコープは、測定できるスピードの範囲によって大きく値段が変わり、中には数百万円するようなものもあります。みなさんが普通に使っているUSB、HDMIといった信号も、実は数百MHzや数GHzといった非常に高速な信号なので、高価なオシロスコープを使わないと確認することができません。
一方、低い周波数であれば、昔は数十万円したようなオシロスコープが、数千〜数万円程度という信じられないくらい安い価格で購入できます。これらのオシロスコープでも、SPI、I2C、GPIOをはじめとした多くの信号を確認することができます。私は、個人でQuimat 2.4"TFT デジタル オシロスコープという3500円程度のオシロスコープを購入しました。
これは、200KHzという低速の周波数までしか対応していませんが、オシロスコープの基本的な使い方を理解できる、初心者用にはうってつけの機器だと思います。
また、付属のワニ口クリップは使いづらいので、合わせてプローブと呼ばれる、高級オシロスコープで使われるアタッチメントも購入しました。少し高いですが、初心者ほどこういったところにはケチらずお金を出して、問題の本質でない失敗をするリスクを減らした方がよいと思います。
今回は、具体例としてGPIOでPWM信号を生成しサーボモーターの制御を行います。サーボモーターは、よく電子工作に使われる安価な「SG-90」を使用します。このモータは、PWM(Pulse Width Modulation)と呼ばれる波形のデューティー比(オンと、オフの割合)により角度を制御することができます。
と一言でいっても、なかなかピンと来ないと思いますが、オシロスコープで波形を見ながら動きを見ると、この動作が非常によく理解できます。
GPIO制御には、ここではPWMを非常に手軽に扱えるpigpioというライブラリを使用します。最新のRaspbianであれば既にインストールされていると思いますが、念のため、以下コマンド実行してインストール作業をしておいて下さい。
$ sudo apt-get update $ sudo apt-get install pigpio
PWM信号を生成するスクリプトは以下となります。内容としては、18番のGPIOピンに出力設定をして、set_servo_pulsewidth
関数でパルスのデューティー比を変更しているだけです。
#!/usr/bin/python # -*- coding: utf-8 -*- import pigpio import time pin_numb = 18 pi = pigpio.pi() pi.set_mode(pin_numb, pigpio.OUTPUT) pi.set_servo_pulsewidth(pin_numb, 1000)
上記のスクリプトをservo_test.py
というファイル名で保存しましょう。ソフトはGitHubにもアップロードしてあるので、以下コマンドでダウンロードしてもOKです。
$ wget https://raw.githubusercontent.com/karaage0703/raspberry-pi-example/master/servo_test.py
次に、一旦ラズパイの電源を切って、ラズパイとサーボモータを接続します。赤の信号をラズパイの5V、黄色の配線を、ラズパイの18番のGPIOピン、茶色の配線をジャンパワイヤでGND(電圧の基準となる部分)に接続して下さい。オシロスコープは、プローブの先端を黄色の配線とジャンパワイヤの接続部分に接続します。また、プローブの横から出ている黒いワニ口クリップは、GNDに接続します。GPIOピンには接続しにくいと思うのでUSBコネクタのケースを挟んでしまうと良いです。
電子機器のコネクタのケースは、シールドグランドと呼ばれてGNDと接続されています。オシロスコープで測定するとき、基板のこういったGNDを使うのはよく使うテクニックなので覚えておくと便利です。もし、本当にGNDなのか心配な場合は、テスターでラズパイのGPIOのGNDピンとコネクタのケースで導通をチェックしてみて下さい。ブザー音がなるのが確認できると思います。
準備が完了したら、ラズパイとオシロスコープの電源を入れ、以下のコマンドを実行してGPIOピンからPWM信号を出力しましょう。
$ sudo pigpiod $ python servo_test.py
正しくできていれば、オシロスコープにPWM信号が表示され、サーボモータがギュンっと音を立てて回転するはずです。
モータを動かしながら、実際にオシロスコープで波形をみていきましょう。set_servo_pulsewidth
の値を変えると、波形のデューティー比が変わり、それに伴いモーターの角度が変わるのが体感できると思います。このようにオシロスコープは、波形を確認するだけでなく、電子機器の動作の理解を深めるためにも重要な役割を果たす測定器です。
オシロスコープは、大変奥の深い測定器です。詳しい使い方に関してまでは、ここでは解説しませんが、ぜひ使いこなして電子工作スキルをアップさせてください。
UARTやI2Cの中身まで見られる「ロジックアナライザー(ロジアナ)」
ロジックアナライザー(通称ロジアナ)は、先ほど紹介したオシロスコープと非常によく似た機能を持つ測定器です。オシロスコープとの違いは、波形の細かい変動まではみれない代わりに、数多くのチャンネルを持っており多くの信号を同時に測定することができます。また、通信のデコード機能もついており、通信波形の中身を波形から、人間の分かりやすい形式に変換して表示することができます。
オシロスコープが、波形を測定するハードウェア開発者用の測定器とするなら、ロジアナは通信のタイミングや通信の中身を測定するためのソフトウェア開発者用の測定器ということができそうですね。もちろん、ハードウェアとソフトウェアは綺麗に分離できるものではないので、ハードウェア開発者がロジアナを使ったり、ソフトウェア開発者がオシロを使うこともあります。
ロジアナも、性能に応じて安価なものから、高価なものまで幅広いですが、オシロ同様最近は安価なものが数多く出てきています。私が購入したのはHiLetgo 24MHz 8チャンネル USBロジックアナライザという1000円程度のロジアナです。このロジアナ1000円とあなどることなかれ、8チャンネルもあり、通信波形をデコードできる優れものです。
それでは、ロジアナでの測定を体感するため、今回はラズパイとパソコンのシリアル通信の中身を確認してみましょう。
必要なのは、ロジアナとラズパイ、シリアル通信するためのケーブルです。シリアルケーブルは秋月電子で購入できるTTL-232R-3V3がオススメです。
PCとラズパイのシリアル通信の方法の詳細に関しては、本記事では割愛いたします。ネットの情報や、私が以前ブログで書いた記事を参照下さい。
ロジアナとシリアル通信ラインの接続は、少しテクニックが必要です。私は下図のようにICクリップとジャンパワイヤを組み合わせて接続しています。測定する箇所は、電源、GND、TX、RXです。TXは送信信号、RXは受信信号を表します。今回はラズパイを基準として、RXがラズパイが受ける信号、TXがラズパイが送る信号としています。
ロジアナでの測定には「PulseView」というフリーのソフトを使いました。注意する点として、サンプリングの設定値を1MHz程度に変更して下さい。サンプリングの設定値は測定する対象の通信速度によって決める必要があります。ラズパイとのシリアル通信の速度は、115.2kHzで行われます。理論上は、サンプリング定理から、最低でも測定する周波数の2倍以上のサンプリング速度が必要です。今回は、余裕をもって10倍程度の値を設定します。
以下は、実際に通信中にロジアナで確認した波形です。冒頭に説明したとおり、PulseViewの設定で通信のデコード値を表示することが可能です(通信の種類はシリアル通信のフォーマットであるUARTに設定して下さい)。
例えばPCのコンソール画面から「a」という文字を入力してロジアナでキャプチャすると、対応する文字コードの「61」が表示されています。
RXで受けた後、TXにも同じ内容が表示されていますが、これは、ラズパイが「a」という入力を受けた後、「a」という情報を送信していることを意味しています。実際、シリアル通信をしているPCのコンソール画面で「a」を入力すると「a」という文字が画面に表示されますが、それはラズパイが送信した情報が表示されているものです。その他「ls」など、コマンドを入力して結果をロジアナでキャプチャしてみると、より通信の中身への理解が深まると思います。
ロジアナは、例えばシリアル通信で機器が正しく制御できないというときに、問題がハードウェアなのかソフトウェアなのかを切り分けるために重要なツールとなります。テスター、オシロスコープと合わせて、測定器の3種の神器として持っておくことをお勧めします。
まとめ
ラズパイマガジン2019年8月号の一部記事を「ラズパイと格安測定器でハードウェア入門」として無料公開させていただきました。ソフトウェアと違い、なかなか電子工作のこういったハードウェアの入門的な記事はネットには少ないと思うので、公開して参考になったという方が多くいらっしゃったら嬉しく思います。
また、今回のラズパイマガジンの特集ですが、私自身この記事以外にも3Dプリンタの活用方法から、ラズパイでAI(機械学習)を使う方法に関してまで幅広く寄稿させていただいております。また、他の方の書いた記事に関しても、これから電子工作を始めるという方にも、ある程度知識のある中級者の方にも役に立つとても良い特集になっていると思います。
今回の記事を良いなと思った方は、是非ラズパイマガジン8月号の方もお手にとっていただけましたら幸いです。
参考リンク
Saleae Logic互換 8ch 24MHz ロジックアナライザを使う webzoit.net