|
Easy Robotics for all enthusiastic people!!! ---HOBBY ROBOT PARTS SHOP ASAKUSAGIKEN--- Since 2003... |
|Top(お知らせ) |製品紹介と使い方 |通信販売 |カートを見る |リンク |ロボット掲示板 |会社案内 |日記 | |
スタンプを使ってみる
ここではスタンプマイコンを使って、実際にどうやってマイコンを開発するかを紹介していきます。 |
※このページの記事は2002年に書かれておりますので情報が古い場合があります。ご了承下さい。 必要なものをそろえる スタンプマイコンの開発はスタンプだけでは出来ません。周辺のハードウェアと、プログラムを編集しスタンプへロード(注入すること)するソフトウェアが必要です。下記が必要になってきます。 ・スタンプU ・スタンプU用電源 ・Windowsが動くPC ・スタンプとPCをつなぐケーブル ・スタンプソフトウェア(STAMP.EXE) ・テスト用の5VLED ・テスト用の270Ω抵抗 これら+アルファがセットになったものが「BASICスタンプ開発キット」として浅草ギ研より販売もされています。 図6-1 上記のようにスタンプを接続し、PC上でプログラミングソフトウェア(STAMP.EXE)を起動します。 注)キャリアボードをお使いの方は添付のケーブルまたは市販の「D−Sub9ピンオス−メスストレートケーブル」をご使用下さい。DB9(D−Sub9ピン)の6,7ピンはキャリアボード上で接続されています。 BASICプログラムを組だら、プログラミングソフトウェアの三角印ボタンまたは”RUN”を選択するとPCよりスタンプへプログラムがロードされます。9V電池以外でも6−15Vの範囲の電源があればPWRに+、GNDに−(0V)をつなぎます。安定化5V電源を持っている方は+5V端子に+5V、GND端子に0V(またはグランド)をつなぎます。+5V端子にそれ以上の電圧を加えると、スタンプはダメージを受けますので注意して下さい。スタンプのピンは下記の通りです。
+5VはPWRから電源が供給されている場合は5Vの出力となります。リセットは図を見ると負論理(”0”の時に作動する。ピンの名前の上にバーをつけて表す)になっていますので、0Vになったときにリセットが掛かります。4番ピンのGNDはシリアル通信のGND線で、23番ピンのGNDはスタンプを動かすグランドです。 各ポートのピンはソース20mA(電流を20mA出力できる)、シンク25mA(電流を25mA入力できる)が最大値となっています。また、P0−P7とP8−P15はそれぞれグループを構成しており、ソース40mA/グループ、シンク50mA/グループとなっています。 プログラムを組んでみる 上記のような構成が出来あがったらPCにつなぎ、PC上でスタンプエディターを起動します。エディターウインドウにプログラムを書いていきます(エディターの使い方については各スタンプエディターの説明書を読んでください。)。ためしに下記プログラムを打ち込んでみましょう。 DEBUG "Hellow" END 打ちこみが終わったら、画面の三角印のボタンまたはRun−Runを選択します。すると画面上にポップアップが現われ、その中に”Hellow”の文字が入っているかと思います。これは打ちこんだプログラムをスタンプへロードし、実行した結果をPCへ送り返したことになります。プログラムの意味は”デバック端末(この場合はPC)に””でかこんだ文字列を送る”という意味です。 スタンプのBASICはP−BASICという特殊なものです。このBASICの仕様はスタンプBASICのコマンド一覧またはスタンプBASICのコマンド解説1−5を参照願います。これであなたもマイコンのプログラム開発ができるようになりました。 簡単な回路をつなげてみる せっかくプログラムが組めたのになにも動かないのでは面白くありません。ということでスタンプにLEDを付けて光らしたり消したりして見ましょう。まず5Vで光るLEDと270Ωの抵抗を図のように接続します。電子部品の接続は基本的にははんだづけですが、ブレッドボード(はんだがいらない試作用のボードで、部品を差し込むだけで接続できる。開発キットにも付いています。)があると便利です。 図6-2 つぎにプログラムを組んでみます。 loop: TOGGLE 8 PAUSE 1000 GOTO loop そしてRUNさせるとどうなるでしょうか?一行目のloop:はラベルといってとくになにかをする命令ではありません。”:”が付いている行がラベルです。二行目のTOGGLEは次に書かれた数字のポートの出力を反転させるという命令です。この場合P8の出力を、いままでが”1”だったら”0”へ、”0”っだったら”1”へ反転させます。PAUSEは次に書かれた数字×1m秒間だけなにもしないという命令です。この場合は1000m秒=1秒間なにも行いません。最後のGOTOはその次に書かれたラベルへジャンプせよという命令です。そしてまた最初から・・・となります。LEDは5Vの電圧を加えると光るものなので、5Vつまりポートの出力が”1”の時に光ります。ということでこのプログラムは一秒ごとにLEDを点滅させるプログラムでした。 さて、ハードウェアはどうしてこういう回路になるのでしょうか?とくに抵抗がなんのためにあるのかわかりませんね。初級編のオームの法則を思い出してください。発光ダイオードは通常1.2Vで15mAぐらいの電流が流れる光ります。これは各ダイオードで異なりますが通常売られているものはこのぐらいです。わからなかったら店の人に聞くか、規格表(おおきな本屋で売ってます)を見ましょう。下の図を見てください。 図6-3 電圧は電気の圧力なのでLEDが1.2V使ってしまうとLEDからでた電気は最初より1.2V下がっています。また、P8から出た時の電圧は5Vですね。そしてなんΩか分からない抵抗を抜けると0Vになっています。もし、この抵抗がないと、P8から出た電気は1.2Vしか下がらないので電気はまだ勢いがあり、もっと電気を流そうとして大きな電流(電圧ではない)を流してしまいスタンプの出力電流の上限(20mA/ピン)を超えてしまい、こわれてしまいます。ということで抵抗をいれますが、この抵抗はLEDから出たときの電圧5V−1.2V=3.8Vを0Vにしなくてはいけないので電圧は3.8V消費するようにしなくてはいけません。そして、電流は電気の流れる量なので、LEDから出た電流はそのまま同じ量だけGNDまで流れます。つまり抵抗にも同じ15mAが流れる事になります。つまりこの抵抗は電圧が3.8Vで電流が15mAということになります。オームの法則では抵抗=電圧/電流ですね。つまり3.8÷0.015=253.333・・・・となります。抵抗は全ての抵抗値のものが売っているわけではありませんのでその数値に近くて売っているものを探します。近いのは270Ωか330Ωですね。ということで今回は270Ωか330Ωの抵抗を入れればよいことになります。 このようにマイコンで動くものを作ろうとした場合はハードウェア、ソフトウェアの両方を作っていく必要があります。 ※この記事は2002年に書かれておりますので情報が古い場合があります。ご了承下さい。 ※スタンプエディタの画面はVer1.0のものです。現在は画面が違いますので注意してください。 スタンプII開発キットを買うと、必要なものがついてきます。 *スタンプに半円のしるしが付いているほうが上
2)PC上でS−BASICエディターを起動 3)スタンプへプログラムをロード となります。スタンプにプログラムをロードするとスタンプは勝手にプログラムを開始します。また、キャリアボードを使っている場合はリセットボタンを押すとプログラムが最初から行われます。 一番簡単に制御出来るものはLEDです。回路図は下記のようになります。 今回は流す電流をもうすこし少な目(電池の節約)にするため、抵抗値を図よりも大きいな470オームにします。そしてブレッドボードを使い上記の回路を組んでみました。また、同じ抵抗が3つも無かったために回路はポート8(P8)につないだ一つだけとなっています。 次はプログラムです。下記は1秒ごとにポート番号8の端子をHigh/Low切り替えるというものです。 はじめの行の”high 8”はポート8を”High”にするという命令です。上記の回路図ではポートが”0”つまり”Low”の時にLEDが点灯するので,ポート8をHighにするということは消灯するということです。 ”toggle 8”はポート8の出力を反転させるという内容です。これによりはじめに消灯させたLEDは点灯することになります。”psuse 1000”は1000mS(1秒)間なにもしないという命令です。 <実行結果> となります。PCとの接続ケーブルをはずしてもLEDは1秒ごとに点滅をくりかえし、独立したシステムが完成したといえるでしょう。 一番簡単なセンサーはスイッチです。ということで上記で作ったLED回路をスイッチで動かしてみましょう。 図Ex1-15 上記回路ではポート7がスイッチの入力、ポート8がLED出力になっています。P7は10Kオームのプルアップ抵抗によりつねに5V,つまり”1”が入力されています。スイッチを入れるとポート7はグランドに直結されるので0V,”0”が入力されたことになります。このとき流れる電流は5V÷10Kオーム=0.0005A=0.5mAになり,あまり大きな電流は流れません。実際の接続は このようになりました。さてプログラムですが、スイッチを押すとLEDが光るプログラムを作ってみましょう。
high 8 'LEDを消す(ポート8をHighへ) loop: 'メインルーチン if INL=0 then turnon 'INLはポート0〜7の状態。スイッチを入れる=ポート7が”0” high 8 'スイッチが入ってなかったらLEDを消す goto loop turnon: 'スイッチを入れるサブルーチン low 8 'LEDを点ける(ポート8をLowへ) goto loop 'メインルーチンへ戻る DIRSはI/O(入出力)ポートの設定を行うレジスタ(記憶装置)で、右からポート0→15を表します。ポートに対応したビットを0にすると入力、1にすると出力に設定します。ポートになにも接続しない状態で入力に設定すると入力値が安定しないので今回は外部にスイッチが付いているポート7だけを入力に設定します。 ※この記事は2002年に書かれておりますので情報が古い場合があります。ご了承下さい。 ロボットの定義は”独立し、自分で考え自分で動く機械”です。ということでセンサーからの入力で自分で動き回るロボットを作成してみましょう。 今回は初めて作成するということでシンプルな入出力を考えます。入力で一番簡単なのはスイッチですね。これは前回やりました。出力で簡単なのは模型店などで売られているホビー用DCモーターが入手しやすいのでこれを使いましょう。スイッチとDCモータを使って、障害物を避けて通るロボットを作ることにします。 マイコンのI/Oポートの出力をそのままモーターに接続すると,マイコンの回路に大きな電流が流れてしまいマイコンが壊れてしまいます。模型店などで売っているモーターは数百mAで動きますが、マイコンのI/Oポートから出力される電流の最大値は決められており、スタンプマイコンの場合は1つのI/Oから出力出来るのは20mAまでとなっています。ということで数百mAの電流が流れるモータを動かすには信号を増幅する必要があります。一番簡単な方法はトランジスタを使うものです。 上記はトランジスタのベース(B)へスタンプから数mAの電流を流すと、2つのトランジスタで約750mAに増幅する回路です。抵抗の1kオームはスタンプから流れる電流を制限するものです。手元にトランジスタの規格表が無く、手元にあったトランジスタとダイオードを使ったので増幅度がわからない為、実際にどのぐらいの電流が流れるかを測定しながら回路を作りました。上記回路ではまず一段目のトランジスタにスタンプから4mA程度の電流が入力されます(測定値)。するとコレクタからエミッタへ175mA流れました。ここにモータをつないでみましたが動きませんでした。ということでトランジスタをもう一段つないでさらに電流を増幅したところ、2段目は750mAとなり,今度はモーターが動きました。モーターは模型店等で売っているタミヤの130を使用しています。 このようにトランジスタの出力にトランジスタをつないでさらに増幅するつなぎかたを”ダーリントン接続”といいます。ダーリントン接続されたトランジスタ2個が一つのパッケージに入って,それひとつで大きな増幅が出来るトランジスタもありますので各自探してみて下さい。今回使用したトランジスタ2SC1815はおそらく日本で一番手に入りやすいものだと思います。 2SC1815はNPNというタイプのトランジスタです。上記回路ではグランドとモータ間にトランジスタが入っており,グランド側をON/OFFしてモータを動かしたり停止させたりします。プラス電源側をON/OFFしたい場合はPNPトランジスタを使います。2SC1815と同等のトランジスタに2SA1015というものがあります。 いままでの回路ではモーターを一方方向にしか回転させられません。モーターを正転/逆転させるにはどうしたらよいでしょうか? Hブリッジ回路 これはHブリッジ回路と呼ばれる回路上側の2つのスイッチが入れば一方方向に、下側の二つのスイッチが入っていればその逆方向に回転する回路です。このスイッチ部分にNPNまたはPNPトランジスタで作った回路を入れれば正転/逆転の制御が出来そうです。ここで注意しなければ行けないのは+5Vの2つのスイッチを同時に入れるとショート状態になるので,そのようにならないように回路を考えます。 これは典型的なトランジスタを使ったHブリッジ回路です。2つの入力に5V(”1”)または0V(”0”)を入力することで正転/逆転の制御を行います。
上記の回路が一つのパッケージに入ったICもあります。今回、上記のような回路を組むのは面倒なので市販のモータードライバICを使います。 東芝製TA7291P このICはモーターの正転/逆転/停止/ブレーキの出力が出来、モーターへの出力電圧の調整も行え、0〜20VまでのDCモータの制御が出来ます。 <入力と出力>
<ピン配列>
今回はモータの電圧調整までは行わないのでVrefは使いません。Vrefを使わない場合はVsにつないでおきます。 駆動部は簡単にすませる為にタミヤの”楽しい工作シリーズ”を使いました。時間のある方はオリジナルのフレームや、タイヤ駆動を別のものに変える(キャタピラや6本足など)のも楽しいでしょう。 上の写真はNo98.ユニバーサルプレートセット+No97.ツインモーターギアボックス+No96.オフロードタイヤセットを組んだところです。ギアボックスは低速仕様に設定しました。(ツインモータギアボックスは高速/低速のギア設定が出来る) それではモータドライバTA7291Pで駆動部を動かしてみましょう。駆動部にはモータが2つあるのでTA7291Pも2つ必要になります。システム構成は下記のようになります。 今回、試作用に小さいブレッドボードを使いました。両方のモーターが回っている状態でモーターに流れる電流を測定したところ片方約300mAでした。これはダーリントン接続のトランジスタで一つのモーターを回したときの約半分となります。これでスタンプのポート8〜11を使い前進/後進/右折/左折/停止/ブレーキのコントロールが出来るようになりました。
プログラムを作ってみましょう。下記は”ちょっと左に曲がり、1秒止まった後に3秒間直進する”というプログラムです。 loop: 'メインルーチン gosub TurnL gosub Break gosub GoFW gosub Break goto loop TurnL: '左折のサブルーチン high 8 '左折の状態を作る low 9 low 10 high 11 pause 200 '0.2秒間保持 return Break: 'ブレーキのサブルーチン high 8 'ブレーキの状態を作る high 9 high 10 high 11 pause 1000 '1秒間保持 return GoFW: '前進のサブルーチン low 8 '前進の状態を作る high 9 low 10 high 11 pause 3000 '3秒間保持 return 左折の状態保持時間を調整すると曲がる角度が変わります。 センサーとしてスイッチを2個取り付け、障害物を避けて通るロボットを作ってみましょう。ポート0と1を入力とすると下記の通りとなります。 スタンプのポートへの入力は5Vにつながれた抵抗により常に”1”が入力されている状態になっています。スイッチを押すと”0”になるので、”0”ならば障害物あり、”1”ならば障害物無しと判断出来ます。これをロボットの全面の左右に取り付ければ障害物を感知するセンサーになります。 次はプログラムです。障害物を避けて前進するので”障害物を検知したらいったん後ろに下がり障害物と反対の方向を向く”というプログラムを作ってみましょう。ちなみに真っ正面に障害物がある時、つまり左右同時にスイッチが押された場合は少しバックしてから左を向くようにします。 DIRS=%1111111111111100 'ポート0,1を入力に設定 Sence var byte '状態を表す変数Sence loop: 'メインルーチン pause 100 if INL=Sence then loop 'INLはポート0〜7の状態 if INL=%00000000 then Back 'ポート0,1両方が押された場合 if INL=%00000001 then Right 'ポート1が押された場合 if INL=%00000010 then Left 'ポート0が押された場合 if INL=%00000011 then Go 'ポート0,1両方が押された場合 goto loop Back: 'ポート0,1両方が押されている場合 Sence=INL gosub BK gosub LW goto loop Right: 'ポート1が押されている場合 Sence=INL gosub BK gosub RW goto loop Left: 'ポート0が押されている場合 Sence=INL gosub BK gosub LW goto loop Go: 'ポート0,1両方が押されていない場合 Sence=INL gosub FW goto loop FW: '前進 low 8 high 9 low 10 high 11 return RW: '右へすこし回る high low low high pause 200 return LW: '左へ少し回る low high high low pause 200 return BK: '後進,下がってから停止 high low high low pause 800 low 8 low 9 low 10 low 11 pause 1000 return プログラムをダウンロードすると2つのモーターが回り、前進状態になります。ここでそれぞれのスイッチをちょんと押すといったん後ろに下がる動作をし、右または左回転した後にまた前進をします。さあこれでほぼ完成しました。あとはシャーシにスタンプマイコンを含む基板関係を実装したら終わりです。 さて、今まではスタンプキャリアボードを使いソフトウェアのデバックを行ってきました。もうプログラムは完成しましたのでキャリアボードは不要になります。 今回の制作は初めてのロボットを作成することもあり、出来上がってもそんなにすごいものではないので部品をはんだ付けしてしまうともったいない気がします。また、せっかく試作状態ではうまくいっていたのにはんだ付け時に部品を壊してしまうことも考えられます。ということでここでもブレッドボードを使い、なるべくはんだは使わないようにしてみましょう。 まずはモーター用の電池ボックスとブレッドボードを取り付けます。これは簡単に両面テープで取り付けます。 ブレッドボードに試作の時と同じように部品を配置し、配線すれば完成です。配線はブレッドボード専用のピンが付いた線が売っていますが、今回はケチって普通の線の皮をむき、半田でコーティングして配線しました。直径が細い線のほうがブレッドボードの穴に入りやすいです。また、そうして作った配線はあまりきれいには出来ないので接触不良を起こすことが多いようです。配線後にはちゃんと接続されているかテスターなどで確認しましょう。スイッチも両面テープで固定しました。 <全体の回路図> 図Ex2-20 右が右側のスイッチが障害物にぶつかった所です。次にバック、そして左に回転、最後にまた前進しました。 これで(一応)ロボットを作ることが出来ました。こんな単純な機能のものでも、動くと楽しいものです。今後はさらに多機能なロボットを作っていきます。またこのホームページの特徴でもあるラテックスゴムやFRP樹脂などを用いてロボットの外殻を作っていく予定もあります。(こういうのをアニマトロニクスといいます。) |
(C)Copylight 2003. 有限会社浅草ギ研 | 通信販売の法規(訪問販売法第8条)に基づく通信販売業者の表示 |