ラダーとメインシートでコントロールできる様になった。
これでとりあえず最低限の動作ができる。
ラダーとメインシートの動作状態をボリュームで電圧に変換し、OpenStickでPCに伝える。
あとはセンターボードが必要だが・・・メーカーフェアに間に合うか?
ヨットシミュレータのその後。。。
ジョイスティックの操作でラダーやセールを操作し、風を受けて進める様になった。
まだタック練習器とは繋がっていないが、とりあえず画面の前に置いてみた。
ラダー、シート(セールの操作)をOpenStickで接続予定。
先日書いたMCP3002でのアナログ入力方式で照度センシング基板を作った。
今回、片面基板の銅箔面に部品を載せる方法にした。両面基板は以前にも書いた様に、CNCで切削するには位置合わせが面倒なのだ。
多チャンネルが不要なら、MCP3002で作る方がかなりシンプルになる。
Raspberry Piでのアナログ入力方法として、OpenStickを用いる例を先日書いたが、今回はA/D変換ICを用いる正統派の方法を試してみた。
使用したのは秋月電子で¥200のMCP3002。アナログ入力が2CHあり、SPIでRaspberry Piと接続する。
回路図
Raspberry Pi側の準備
こちらを参考に設定した。
お試し
次のスクリプトをspiread.pyという名前で作成。
#!/usr/bin/env python # _*_ coding: utf-8 _*_ import spidev import time CE=0 spi = spidev.SpiDev() spi.open(0,CE) while True: retspi = spi.xfer2([0x68,0x00]) value = (retspi[0]*256+retspi[1]) & 0x3ff print value time.sleep(1)
実行結果(可変抵抗でアナログ値を変化させながら実行した例)
$ ./spiread.py 0 0 128 292 489 1023 1023 1023
Raspberry PiのSPIはCE0とCE1端子を用いて2個のSPIデバイスを個別に使用できる。これをスクリプト中では変数CEで指定している。
spi.xfer2()に渡している0x68はMCP3002に対し、「シングルエンド動作」、「アナログ入力CH0を使用」、「MSPから出力」 を設定している。 変換結果は配列retspiに2バイトで入るので、連結して下位10ビットを取出した後、print文に渡している。
なおspi.xfe2()に渡す値0x68を0x78に変更するとCH1入力を使用する事になる。
OpenStick方式と比べると・・・
ワケあって部屋の明るさをネットワーク経由で検出するシステムを作成しようと思った。
センシング部分は無線LANで接続したいので、簡単に行うにはやはりRaspberry Piが良い。
しかしRaspberry Piにはアナログ入力が無いので、以前にもここで書いた様にOpenStickを用いてみる事にした。
フォトトランジスタの電流変化をオペアンプでバッファリングしてPIC18F2550のアナログ端子に入力した。 ジョイスティックのデータとしてRaspberry Piに伝えるので接続はUSBでよい。
とりあえずRaspberry Piから読み込めている事を確認できた。
しかしシリアルインターフェースのA/DコンバータICを使うのと、どちらが簡単だったろうか?
OpenStickConfigのピンアサイン表示のところ、なぜか25ピンを常にRESETと表示していたのを修正。2013年12月3日版としてアップした。
Maker Faire Tokyo 2013に出展するため、昨日荷物を発送した。今頃どのあたりだろう? 壊れていないか不安である。
会場の資料を見ると、さすがYmaguchi Mini Maker Faireよりもかなり規模が大きい模様。
ワタシらのブースのすぐ向かいにはスイッチサイエンスやヤマハのブースがある。こんな感じで素人とビッグネームが入り乱れるあたりがMaker Faireなのだろうが、気後れして不安になってくる。
なお先日紹介したタミヤレスキュークローラも展示予定。 本体の制御に加え、コントローラもRaspberry Pi化し(Raspberry Piを2枚も買ってしまった)、OpenStickで作成したジョイスティックで制御する様にした。 ディスプレイもポータブルDVDプレーヤーを流用したので、PCを使用せずに操作できるのだ。
コンポジット信号でビデオ接続するあたりがRaspberry pi らしいでしょ?
モーターの速度はアナログジョイスティックの押し加減で制御できる。Raspberry piにはアナログ入力は無いけど、OpenStickと組み合わせる事でアナログ量を取り込めるのだ。 これは色々と使えそう。(今のところOpenStickは8bit分解能に固定しているが、OpenStickで使用しているPIC18F2550は10bitADC搭載なのでH/W的には拡張可能・・・やろうかな?)
ではでは、Maker Faire Tokyo2013に来られる方、日本科学未来館1FのJ-08ブースに居ますので実物を観に来てください。
先日作成したRaspberry Pi用モータードライブ基板で、子供が持っているタミヤのレスキュークローラーを制御してみた。
案外、パーツを搭載する場所が無い。本来後ろ上下動するフックが付いているのだが、これはあまり使わないとの子供の意見もあり、取り外した。
Raspberry Piの電源にはモバイルバッテリー、動力用には単三型Ni-Hを4本使用。
モバイルバッテリーとRaspberry Piとモータドライブ基板の3層構造になっている。
できればバッテリーはRipoに替えて一つにまとめたいところであるが・・・。
キュリオシティっぽく、RCサーボを使ってカメラを上下左右に制御できる様にしてみた。
画像を表示しているところ。
これはWindows側の制御画面。VisualC#2010Expressで作成した。
今のところマウスでボタンを押して制御しているが、これをOpenStickでコントロールしたい。
無線LANで接続し、画像を見ながら家中を探検でるので、なかなか楽しい。
Yamaguchi Mini Maker Faireの出展中、フライトヨークやペダルでアナログ値をどうやって入力しているのかを何度か聞かれたので、簡単に説明します。
OpenStickのアナログ入力はPIC18F2550マイコンに搭載されているA/D変換器を用いており、10本までアナログ入力端子を使用する事ができます。 このA/D変換器はアナログ入力端子の電圧を10bitの分解能(=1024分割)で数値に変換するのですが、この時の基準となるのがVREF+とVREF-で、VREF+の電圧値を最大値、VREF-を最小値とし、この間を1024で均等割りした電圧とアナログ入力端子の電圧が一致する値に変換します(なんか言葉で表しにくい)。
OpenStickではVREF+を5V、VREF-を0Vに設定しているので、アナログ入力端子が0Vの場合、変換結果は(誤差を無視すると)0となり、5Vならば1023、中間値では電圧に比例した数値となります。
結局、アナログ入力端子に0~5Vの電圧を入れてやれば良いという事になるので、フライトヨークでは(安直に)下図の様な可変抵抗で角度に応じた0~5Vを作り出しています。
実際の構造はこんな感じです↓
なお、PIC18F2550のマニュアルによるとアナログ端子に与える電圧は5KΩ以下のインピーダンスでなければ精度が悪くなると書かれているので、可変抵抗は5~10KΩ程度のものを使用しています(抵抗値をうんと下げると理屈の上では精度は向上するが、無駄に電流が流れるので程々にすべきでしょう)。
可変抵抗にはAカーブ、Bカーブ、Cカーブ等の種類があります。これは回転角に対する抵抗値の変化をプロットした場合のカーブを示すもので、この内ほぼ直線的に変化するBカーブを用います。
また、0V~5Vの電圧を入力できるなら可変抵抗以外でも同様に動作します。例えばAcceleStickでは加速度センサーの出力を下図の様にオペアンプで適度な電圧に変換してOpenStickに与えています。
なお、上にも書きましたがPIC18F2550のA/D変換器の分解能は10bitです。しかしOpenStickでは下位2bitは捨て、8ビット分のデータとしてPC側に渡しています。
(ちなみに市販のジョイスティックも8bitでした。ヨークやペダルではあまり分解能は要らないと思ってこうしていますが、もし分解能をあげる用途があれば教えてください)