ヨットシミュレータ~その4~

ラダーとメインシートでコントロールできる様になった。
これでとりあえず最低限の動作ができる。

YatchSim1

操作中

ラダーとメインシートの動作状態をボリュームで電圧に変換し、OpenStickでPCに伝える。

YatchSiM2

ラダー部分のボリューム

YatchSIM3

メインシート引き出し量検出プーリー。
ギヤで減速してボリュームに伝えてある。ゴムひもで逆向きのテンションをかけた。

OpenStick基板は毎度の通り基板切削CNCで作成。

あとはセンターボードが必要だが・・・メーカーフェアに間に合うか?

 

 

ヨットシミュレータ~その2~

ヨットシミュレータのその後。。。

ジョイスティックの操作でラダーやセールを操作し、風を受けて進める様になった。
まだタック練習器とは繋がっていないが、とりあえず画面の前に置いてみた。

OptiMaster

こんな感じで操作する。

OptiMaster2

ハイクアウト!

ラダー、シート(セールの操作)をOpenStickで接続予定。

Raspberry Pi + MCP3002で照度センシング

先日書いたMCP3002でのアナログ入力方式で照度センシング基板を作った。
今回、片面基板の銅箔面に部品を載せる方法にした。両面基板は以前にも書いた様に、CNCで切削するには位置合わせが面倒なのだ。

Sense with MCP3002

MCP3002を用いた照度センサ

以前、OpenStickで作った基板はこれ。

OpenStickを用いた照度センサ

OpenStickを用いた照度センサ

多チャンネルが不要なら、MCP3002で作る方がかなりシンプルになる。

 

Raspberry Piで正統派のアナログ入力

Raspberry Piでのアナログ入力方法として、OpenStickを用いる例を先日書いたが、今回はA/D変換ICを用いる正統派の方法を試してみた。

使用したのは秋月電子で¥200のMCP3002。アナログ入力が2CHあり、SPIでRaspberry Piと接続する。

回路図

RaspiAN_SPI

回路図

Raspberry Pi側の準備
こちらを参考に設定した。

  1. sudo apt get install python-dev  でpython-devをインストール
  2. /etc/modprobe.d/raspi-blacklist.confファイルをエディタで開き、
    blacklist spi-bcm2708 行の先頭に#を追加してコメントアウト。
  3. リブート後、lsmodコマンドを実行して「spi_bcm2708    ・・・」の表示がある事を確認。
  4. 下記を実行してPython-spiをインストール
    mkdir python-spi
    cd python-spi
    wget https://raw.github.com/doceme/py-spidev/master/setup.py
    wget https://raw.github.com/doceme/py-spidev/master/spidev_module.c
    sudo python setup.py install

お試し
次のスクリプトを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方式と比べると・・・

  1. ICが安い
    OpenStickで使うPIC18F2550は350円。更に発振子やUSBコネクタが必要だが、MCP3002だと200円で殆ど外付け部品が不要。
  2. チャンネルが2つだけ
    OpenStickだとアナログ10CHで更にデジタル入力も使えるがMCP3002は2CHのみ。
  3. プログラムが簡単
    慣れや使用言語にもよると思うが・・・ジョイスティックの値を取るよりSPIの方が簡単な気がする。
  4. PIC18F2550のアナログソースは最大2.5KΩのインピーダンスにせよと取説に記載がある。 一方MCP3002の取説によるとアナログ入力リークが0.001μA(TYP)なので、こちらの方が扱いやすそうである。
  5. OpenStickはUSB電源駆動なので0~5Vの範囲でA/D変換する。 MCP3002はRaspberry Piと直結する場合、SPI信号が3.3VなのでA/D変換も0~3.3Vの範囲となる。

Raspberry Pi + OpenStickで照度センシング

ワケあって部屋の明るさをネットワーク経由で検出するシステムを作成しようと思った。
センシング部分は無線LANで接続したいので、簡単に行うにはやはりRaspberry Piが良い。
しかしRaspberry Piにはアナログ入力が無いので、以前にもここで書いた様にOpenStickを用いてみる事にした。

フォトトランジスタの電流変化をオペアンプでバッファリングしてPIC18F2550のアナログ端子に入力した。 ジョイスティックのデータとしてRaspberry Piに伝えるので接続はUSBでよい。

OpenStickを用いた照度センサ

OpenStickを用いた照度センサ

とりあえずRaspberry Piから読み込めている事を確認できた。
しかしシリアルインターフェースのA/DコンバータICを使うのと、どちらが簡単だったろうか?

Maker Faire Tokyo 2013 まであと4日

Maker Faire Tokyo 2013に出展するため、昨日荷物を発送した。今頃どのあたりだろう? 壊れていないか不安である。

会場の資料を見ると、さすがYmaguchi Mini Maker Faireよりもかなり規模が大きい模様。
ワタシらのブースのすぐ向かいにはスイッチサイエンスヤマハのブースがある。こんな感じで素人とビッグネームが入り乱れるあたりがMaker Faireなのだろうが、気後れして不安になってくる。

なお先日紹介したタミヤレスキュークローラも展示予定。  本体の制御に加え、コントローラもRaspberry Pi化し(Raspberry Piを2枚も買ってしまった)、OpenStickで作成したジョイスティックで制御する様にした。 ディスプレイもポータブルDVDプレーヤーを流用したので、PCを使用せずに操作できるのだ。
コンポジット信号でビデオ接続するあたりがRaspberry pi らしいでしょ?

RescueRobo&Controller

レスキューロボットとコントローラ

モーターの速度はアナログジョイスティックの押し加減で制御できる。Raspberry piにはアナログ入力は無いけど、OpenStickと組み合わせる事でアナログ量を取り込めるのだ。 これは色々と使えそう。(今のところOpenStickは8bit分解能に固定しているが、OpenStickで使用しているPIC18F2550は10bitADC搭載なのでH/W的には拡張可能・・・やろうかな?)

ではでは、Maker Faire Tokyo2013に来られる方、日本科学未来館1FのJ-08ブースに居ますので実物を観に来てください。

Raspberry Pi でタミヤのレスキュークローラーを制御

先日作成したRaspberry Pi用モータードライブ基板で、子供が持っているタミヤのレスキュークローラーを制御してみた。

RescueRobo1

タミヤのレスキュークローラセットを改造。

 

案外、パーツを搭載する場所が無い。本来後ろ上下動するフックが付いているのだが、これはあまり使わないとの子供の意見もあり、取り外した。

RescueRobo2

背中にRaspberry Pi を背負っている。 とぐろを巻いているのはWebカメラのケーブル(長すぎるのだが切り詰める勇気がない)。

 

Raspberry Piの電源にはモバイルバッテリー、動力用には単三型Ni-Hを4本使用。
モバイルバッテリーとRaspberry Piとモータドライブ基板の3層構造になっている。
できればバッテリーはRipoに替えて一つにまとめたいところであるが・・・。

RescueRobo3

モバイルバッテリー、Raspberry Pi、モータードライバの三層構造。 やっぱりカメラのケーブルが邪魔

 

キュリオシティっぽく、RCサーボを使ってカメラを上下左右に制御できる様にしてみた。

RescueRobo4

WebカメラとRCサーボ

 

画像を表示しているところ。

RescueRobo5

画像を見ながらコントロール

 

これはWindows側の制御画面。VisualC#2010Expressで作成した。
今のところマウスでボタンを押して制御しているが、これをOpenStickでコントロールしたい。

RescueRobo6

制御画面。3x3に並んでいるボタンはクローラー(キャタピラ)の回転制御。UP,Downボタンは前部クローラの上下、その右のスライダーはモーターのパワー調節。下の二つのスライダーはカメラの向き(RCサーボ)を制御する。

無線LANで接続し、画像を見ながら家中を探検でるので、なかなか楽しい。

OpenStickへのアナログ入力

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を作り出しています。

実際の構造はこんな感じです↓

フライトヨークのX軸。 矢印の先にあるのが可変抵抗

フライトヨークY軸。直線運動を糸とプーリーで回転運動に変換している。

なお、PIC18F2550のマニュアルによるとアナログ端子に与える電圧は5KΩ以下のインピーダンスでなければ精度が悪くなると書かれているので、可変抵抗は5~10KΩ程度のものを使用しています(抵抗値をうんと下げると理屈の上では精度は向上するが、無駄に電流が流れるので程々にすべきでしょう)。
可変抵抗にはAカーブ、Bカーブ、Cカーブ等の種類があります。これは回転角に対する抵抗値の変化をプロットした場合のカーブを示すもので、この内ほぼ直線的に変化するBカーブを用います。

また、0V~5Vの電圧を入力できるなら可変抵抗以外でも同様に動作します。例えばAcceleStickでは加速度センサーの出力を下図の様にオペアンプで適度な電圧に変換してOpenStickに与えています。

AccelaStick Sensor回路

AcceleStick センサー部分の回路図。右端のP3,P4端子をPIC18F2550に接続している。

なお、上にも書きましたがPIC18F2550のA/D変換器の分解能は10bitです。しかしOpenStickでは下位2bitは捨て、8ビット分のデータとしてPC側に渡しています。
(ちなみに市販のジョイスティックも8bitでした。ヨークやペダルではあまり分解能は要らないと思ってこうしていますが、もし分解能をあげる用途があれば教えてください)

 

Yamaguchi Mini Maker faire 出展中

昨日からYamaguchi Mini Maker faire 出展中。

初日のウチのブース、フライトシミュレータやラジコンシミュレータが出来るので、お子様率が高い。これはこれで良いのだがOpenStickが薄れている気がする。
二日目はこのままいこうかOpenStickをもっと全面に出そうか思案中。