PICと曲げセンサー http://www.robotsfx.com/robot/robohow/RoboHow48/RoboHow48.html
はじめに 浅草ギ研の製品の中に、曲げると抵抗値が変わる曲げセンサーというものがあります。抵抗に電流を流すと電圧が生じますが、マイコンのADコンバータ機能(以後ADC)を使えば電圧を測定することができますが、これにより曲げセンサーの抵抗値=曲がり具合を測定することができます。ここではPIC12F675で曲げセンサーの抵抗値を測定する方法を紹介します。 電圧出力型センサの場合 このページでは曲げセンサについて解説しますが、電圧出力型センサーのプログラムもほぼ同じです。接続する場合は電圧出力型センサの信号出力線をAN0に接続します。(抵抗による分圧はしない) 曲げセンサー ![]() 曲げると抵抗が10KΩから20~30KΩぐらいに増える。それだけです。 曲げの方向は、写真の面の反対側に曲げたときしか変化しませんので注意してください。(双方向の曲げは2つ使えば検知できる。) 抵抗値を読むには? 抵抗に電流を流すと抵抗の両端には電圧差が生じます。 ![]() この抵抗を2つ直列にすると ![]() このように電圧は2等分されます(電流も減りますがここでは電圧だけに注目)。このように直列抵抗の両端電圧は電源の電圧差を維持しますが、抵抗の間は分圧されます。この分圧の度合いは抵抗値に(ほぼ)比例しますので、例えば下の抵抗を大きくすると中間点の電圧は上がります。 ![]() つまり、この下の抵抗を曲げセンサに置き換えると、曲がり具合によって(この回路の場合は)2.5V~3.75Vぐらいの電圧が出力されることになり、この点をPICのADCで電圧測定すれば抵抗値、つまり曲がり具合が測定できます。 回路図 上の回路そのままです。測定ポイントはGP0につないで読み取ることにします。 ![]() この結果も、PCに送って表示します。 電源回路などについては「PICを使ってみる」を参照願います。 結果の出力(デバックモニタ)については「PICとPCとの接続」を参照願います。 実際の接続はブレッドボードで行いました。 ![]() プログラム 今回初となる機能はADCです。これも「C言語によるPICプログラミング入門 後閑哲也著」に詳しく書いてありますのでそちらも参照してください。 ![]() テキストデータはこちら PIC-BebdS.trxt (右クリックで保存) 多くのPIC本で紹介されているPIC16F84などは標準でADC機能がオンになっていないのですが、ここで使用している12F675は標準がADC入力を使用するようになっているので注意してください。普通はプログラムの始めのほうで #device ADC=10 と入れないといけないのが多いのですが12F675は不要です。 このADCは10ビットの解像度で電圧を読み取ります。この設定が ADC=10 というところらしいです。よって、10ビット幅の変数に結果を格納する必要があるので long value; のようにlong型の変数を用意してます。結果出力printf( )関数のフォーマット指定子も %u(符号無し8ビット数値) ではなく、 %Lu(符号無し16ビット数値)になります。 さて、main関数の中のADCの設定と読み取りですが、CCS-Cでは setup_adc( ) などの関数が用意されており、後閑氏の本で詳しく説明されていますが、12F675の場合は引数が変わります。というか、それぞれのPICでかなりバリエーションがあるのでこれらの引数はPICごとに違うと思います。よって、本の通りに設定しても(本と違うバージョンのPICだと)コンパイルエラーとなります。 この設定値はどうやって知るかというと 12F675.h ヘッダファイルの中に記述されてます。ヘッダファイルはテキストファイルなのでメモ帳などでも開けますが、適当なプログラムを作って #include <12F675.h> が入っているファイルをコンパイルするとMPLAB側でプロジェクトに勝手に組み込んでくれますのでこれをクリックしても中が見れます。 ※MPLABやコンパイルについては「PICを使ってみる」に書いてあります。 コンパイルが成功するとどこからか12F675を見つけてきてプロジェクトに組み込んでくれる。これをダブルクリック。 ![]() 12F675.hの中身。あまり詳しく書いてませんが、大体見ればわかりますね。 ![]() 例えば本などでは16F84を例に取り、ADCポートの設定は setup_adc_ports(RA0); のように書いてありますが、上を見ると 12F675の setup_adc_ports( ) の場合は AN0_ANALOG のようにすることがわかります(というか推測できます。)。 結果 結果はPCに文字を送り、ハイパーターミナルで表示しました。 結果の出力(デバックモニタ)については「PICとPCとの接続」を参照願います。 ![]() 曲げてないとき。PIC基板にささっているのはUSBシリアルアダプタです。COMポートが空いてなかったのでUSBに接続してCOM4からデータを取ってます。 ![]() ![]() すこし曲げた。 ![]() ![]() かなり曲げた。 ![]() ![]() 抵抗の値を変えると数値がかわりますのでいろいろ試してみてください。 これでPICで曲がり具合も測定できるようになりました。 このセンサー結構売れてますが、みなさんどのような用途で使ってるのでしょうか(と売ってる本人が言うなという感じもあるが。) ちなみに最近、ROBO-ONEのJクラスなどで活躍(というか優勝というか)されているシャイニングGのマスタースレイブのヒジ部分にはこのセンサーが使われているとのことです。 2005年8月18日 |
반응형