2015年05月25日

GPIOポートを外部へ引き出し

自分のラズベリー・パイは、今までの実験で使った回路をほとんど壊すことなく拡張していったので、すんごい状態になっている^^;
image-94e3f.jpg
image-a4f3d.jpg
image-e1f0e.jpg

特に問題なのが、本体のGPIOポートから複数のブレッドボードにジャンパー線が伸びていて、しかも長さに余裕がないため、これを崩さずに持って置き場所を移動するのは困難な状態にあった(-.-;
(ここまでくると、一度バラして元に戻すのは大変)

とりあえず、本体とブレッドボードを切り離せるだけでも、だいぶ違うだろうと、以下のものを購入(^^)。

『ラズベリーパイB+/A+用ブレッドボード接続キット』(秋月電子)
http://akizukidenshi.com/catalog/g/gK-08892/

image.jpg
image-bcabf.jpg

これはキットなので、ピンヘッダのハンダ付けは自分でやらないといけない。経験者はわかると思うがピンヘッダの何が難しいって

基板に対して垂直にハンダ付けすること(^^;

40ピンもあると少しでも曲がっているとブレッドボードに挿し難くなりそうでヤだな・・・と、考えて思いついたのが

最初からブレッドボードにピンヘッダを刺しておいて、そのままハンダ付けしてしまえば間違いない\(^o^)/

ハンダの熱でブレッドボードのプラスチック部分が溶けないか?と若干気にはなったが、ピンが垂直に刺さっていれば、プラスチック部分に触れないはずだし、もし多少溶けたところで、このブレッドボードはこのキット専用になるのだから別にイイか、と挑戦(^^;。

やってみたら結果はバッチリ(笑)。当たり前だがハンダ付けは素早く(でも確実に)やることがポイント。全体が十分冷めてからブレッドボードから抜き取り、ひっくり返してフラットケーブルを挿すピンヘッダをハンダ付け。こちら側は20ピン2列のピンヘッダなので、差し込めばそのまま垂直になるため普通にハンダ付けすれば良い。

すべてのハンダ付けが終わったら、1ピンずつテスターで通電チェック。
再びブレッドボードにキットを挿し(この時はまだフラットケーブルは挿さない)、電気を通す針金(電子パーツの脚を切り取ったものなど)をチェックしたいピンの穴に挿してテスターの一方を接触させる。そして、そのピンに該当するコネクタ接続側のピンにテスターのもう一方を接触して通電を確認する。
隣のピンとショートしてないか調べるために、そのピンの隣のピンにもタッチして通電しないことを確認する。ただし、3.3VおよびGNDのようにもともと複数のピンがあるものはキットの(T型の)基板でつながっているようなので、チェックしている番号と違うピンで通電しても(該当するピンなら)問題ない。


さて、通電確認できたらフラットケーブルを挿すのだが、

フラットケーブルは、挿す側が決まっている

T型基板をよく見るとコネクタの出っ張りを合わせるマークがプリントされているので、それに合うように挿せば正解。逆側でも一応差し込めてしまうので注意。また、ラズベリー・パイ本体のGPIOポートに挿す側のコネクタも、GPIOポートを前後左右からよく見て40ピン全てに挿さるように差し込むこと。特にケースに入れている場合は、1列ずれても見えにくいので要注意。


配線し直したらこんな感じ。100円ショップで売っていた台所用グッズを使って「2階建て」にしてみた。
image-336a1.jpg
image-ef00f.jpg
image-85228.jpg

これで、フラットケーブルを抜けば、ラズベリー・パイ本体とブレッドボード群を切り離すことは出来るので、持ち運びもしやすくなる。しかし、引き出したGPIOポートのブレッドボードから他の回路のブレッドボードへつながるジャンパー線は、ブレッドボードの幅の分だけ距離が広がり、ジャンパー線の長さがより厳しくなった部分もある(-o-;。

そこでよく考えてみたら、オス−メスのジャンパー線は「延長ケーブル」として使えるのだった(笑)。
image-3d3a2.jpg

こうすれば、ジャンパー線の長さが稼げる上に、必要に応じて一つの回路をブレッドボードごと切り離すこともできる。ジャンパー線の色を合せておけばあとで戻すのも簡単だ。また、モーター制御の回路のように、Raspberry PiとArduinoのGPIO電圧の差(*1)が影響しない回路であれば、ブレッドボードへつなぐジャンパー線のオスメスを以下のようにすれば、切り離してそのままArduinoに流用できる。
(*1)Raspberry Piは3.3V、Arduinoは5V

【Arduinoに流用する場合のジャンパー線の接続方法】
[Raspberry Pi]==[GPIOポートのブレッドボード]--[(オス)ジャンパー線(メス)]--{ここで切離し可}--[(オス)ジャンパー線(オス)]--[回路のブレッドボード]

切り離した回路側のジャンパー線は「オス」なので、ArduinoのGPIOポート(メス)にそのまま挿せる。
[ArduinoのGPIO]--[(オス)ジャンパー線(オス)]--[回路のブレッドボード]


[amazonでお買い物]
posted by pattayan at 02:39| Comment(1) | 日記

2015年05月18日

Arduino君、こんにちは

ここは、ラズベリー・パイのブログだが、突然の Arduino(アルドゥイーノ)(^^;。

とりあえず最初は、“お約束”のLチカ(笑)。


ラズベリー・パイは、LinuxベースのOSとGUI環境を持った「超小型パソコン」と言えるが、Arduinoは、OSが無く、より「マイコン」である。

そのため、本体だけではプログラムを作ることもできないが(そもそもキーボードやディスプレイをつなぐ端子がない)、“母艦”となるPC(Win/Mac)でコンパイルしたプログラムを転送した後は、電源さえあればプログラムを動かすことができる。また、メモリーは不揮発性なので、電源を切ってもプログラムが消えることは無い。OSが無いので、電源を入れた途端にプログラムが動き出し、いつ電源を切ってもよいというところが、ラズベリー・パイとは大きく違うところ。


【用意したパーツ】
LED: SLP-9118C-51H (2.0V/20mA) x2
CdSセル: MI527 (10kΩ〜 1MΩ)
炭素皮膜抵抗(1/4W): 180Ω x1、10kΩ x1

回路はシンプル。今回は最初からCdSを使って明るさを感知させて、LEDの点滅の速さを変えている。
ARD_LED_CdS.PNG
(回路図はクリックで拡大)

ラズベリー・パイと違ってありがたいのは、
アナログ入力が標準装備
ということ。
MCP3208などA/D変換のICが必要なく、そのままArduinoのAnalog端子に繋げるだけで良いので、回路図も単純だ。
(ラズパイの場合のアナログ入力の記事『MCP3208でA/D変換』

Arduinoのプログラム言語はC++風の独自のもの。
基本形は、初期処理のsetup()とメインループのloop()だけの非常にシンプルな構造だ。
ard_led_blink.png

アナログ値は、analogRead()という関数だけで読み込むことができる。なんとも楽ちん(^^)。

CdSのアナログ入力値を調べるために、IDE環境のシリアルモニターにCdSの値を表示できるように Serial.begin()やSerial.println()が入れてあるが、本体の動作には必要ないので、実際には無くても良い。
アナログ値が700を下回ったら暗くなったと判断して、delayの値を短くしている(⇒つまり速く点滅する)。


今回は初めてなのでこんな程度だが、アナログ入力が簡単なことや小型タイプがあるなど、先日の“昆虫ロボット”に積むとしたら、こちらのほうが有利かも。ラズベリー・パイとの違いを認識して、うまく使い分けと連携が出来たらいいな。
タグ:Arduino
posted by pattayan at 13:15| Comment(0) | 電子工作

2015年05月15日

初めてのモーター制御

今回は、ずっと前からやろうとして後回しにしていたモーター制御にやっと挑戦(^^;。



入門書を読んで、モータードライバというICを使えば難しいことはないとはわかっていた。だが、剥き出しのモーターを買ってきて、それをただ回したところを見てもつまらないので、とりあえずUSB扇風機あたりを考えてパーツを準備していたのだが、それでもやっぱり、扇風機が回るのを見てもたいして面白くもないので(笑)、ほかの実験を優先していた(^^:。

もうひとつ、躊躇していた理由がある。それは、

モーター用の動力は、外部電源が必要

モーターは電力が大きいのでラズベリーパイのGPIOの5Vや3.3V端子では間違いなく電力不足になる。モーターによっては6Vや9Vが必要だったりするとそもそも電圧も足りていない。
電圧の高い外部電源を回路に組み込むとすると、もし配線を間違えたらラズベリーパイを壊してしまうかもしれない(- -;。それが怖くて「もうすこし電子回路に慣れてから」と慎重になっていた。

そんな時に、タミヤのロボクラフトシリーズという、子供向けの工作キットがあると人から聞いて、ネットで調べてみると、安価のわりに動きがそこそこ面白くて、しかも構造がシンプルで改造例も多いことを知り、急にやる気が出る(^o^)。



また、このキットはアルカリ単3乾電池2本で動くので、1.5V x2 = 3Vの外部電源なら、ラズベリーパイの内部電圧(3.3V)より低いくらいで安心できるというのも背中を押した理由のひとつ(^^;。


【キットの組み立て】
まずはキットをそのまま作って、“正常に動く”ことを確認しないと始まらない。
このキットは、ビス止めか、はめ込み式で、組み立てに必要なプラスドライバーやグリスも付いていて、その上、モーターとリモコンは配線済みなので、必要なのはニッパーを使ってパーツを切り離して組み立てるだけ。もちろん、カッターやヤスリで切り離した部分をキレイに仕上げるくらいはした方がいい。

簡単なプラモデル感覚なのだが、子供向けと思って甘く見ていたら、6本脚を動かす仕組みが意外に複雑で、説明書とよーく照らし合わせながら組み立てないと、シャフトの方向を間違えて脚の向きが反対になったりして、やり直す羽目になる。ただ、接着部分は無いので、間違えてもやり直し易い。

電池を入れて正常に動くことを確認。動かしてみると動きがちゃんと昆虫っぽくて結構おもしろい。しばらく遊んだ後(笑)、(せっかく作ったのになんとも勿体ないのだが)、リモコンをバラして、ハンダ付けされている電線(4色)をハンダごてで温めながら抜き取る。そして、その電線をブレッドボードに挿せるように、ピンヘッダをハンダ付けしておく。

IMG_1349.jpg


【用意したパーツ】
タミヤ ロボクラフトシリーズNo.7 INSECT(6足歩行タイプ)
DCモーター用フルブリッジドライバ: TA7291P x2
電池ボックス 単3×2本用(フタ付プラスチック・スイッチ付)
1列ピンヘッダ: 適宜
炭素皮膜抵抗(1/4W): 10kΩ x2

MTR_1.PNG
(回路図はクリックで拡大)

今回は「とりあえず動かす」ことが目的なので、回路はモータードライバ(TA7291P)2つに電池ボックスをつけた程度でシンプル。TA7291Pの動作電源(Vcc)が4.5V以上だったので、ラズベリーパイの5V端子を回路用に使った。

このロボクラフトのモーターギヤボックスはモーターの向きが左右で逆になっている。
IMG_1348.jpg

左右対称に動かすのだからそれで良いのか?と納得できるような気もしつつ、4色の電線(フラットケーブル)の順番どおりの配線では思った通りにならなかったため、TA7291PのOUT1とOUT2の繋ぎ方は左右で逆にしている。現物を見てもよくわからないので(笑)、とりあえず配線して実際に動かしてみて、思ったのと動きが逆なら、OUT1とOUT2を反対にすれば良い。
このキットのケーブルの色の配線が今後変更されたりしなければ、この回路図の色のとおりに繋げれば正しく動くはず。


Pythonプログラムもシンプル。
mtr_test1_1.png
mtr_test1_2.png
mtr_test1.py

内容は、左右の脚のスピードと方向性(後方はマイナス表記)の値を組み合わせたものを、配列movingPatternに順番に定義しておき、メインのfor〜inループで、その値を順にPWMのDuty比として2秒ずつ与えるというもの。

TA7291は、IN1=1, IN2=0 でモーターを正転(OUT1=HIGH, OUT2=LOW)、IN1=0, IN2=1 では逆転(OUT1=LOW, OUT2=HIGH)させるが、INにPWMで与えることで速度調整ができる。いろいろ試したところ、Duty比=25ではモーターが動かなかったので、低速=40、中速=70、全開=100が妥当と判断した。

なお、TA7291のデータシートには、正転⇔逆転の場合にはストップモード(IN1=0, IN2=0)を一瞬挟むように書かれているので、変数lastLdr, lastRdrで前回と今回で符号が逆転しているかチェックし、逆転していた場合は、IN1=0, IN2=0となる時間を sleep(0.01) で作っている。


【今後】
これは、バッテリー駆動にしたラズベリーパイをロボキットの背中に載せて、センサーもつけて、ロボットらしく単独で動かしてみたい。バッテリーをどう積むかとか、Raspberry PiはB+より小さいA+の方がいいかもとか、そもそもどんなセンサーつけるかとか、いろいろ課題は多いが、面白そうだ。


【参考文献】
『Raspberry Piで学ぶ電子工作〜超小型コンピュータで電子回路を制御する』(金丸隆志 著/ブルーバックス・講談社)
posted by pattayan at 18:28| Comment(1) | 電子工作