■ホビーロボット部品の製造・販売 
  モータコントローラ、センサ、音声、画像、無線モジュールなど、
■ホビーロボット制作記事のページ (各種マイコン、PCとの接続事例)
■特殊メイク、特殊材料の販売 ※特殊メイクのコーナーはこちらに移りました。
 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端子にそれ以上の電圧を加えると、スタンプはダメージを受けますので注意して下さい。スタンプのピンは下記の通りです。

番号 略称 機能   番号 略称 機能
1 Tx シリアル出力 24 PWR 電源入力(6〜15v)
2 Rx シリアル入力 23 GND チップグランド
3 ATN アクティブハイリセット 22 RES リセット
4 GND シリアルグランド 21 +5V 5V入力(または出力)
5 P0 入出力ポート 20 P15 入出力ポート
6 P1 入出力ポート 19 P14 入出力ポート
7 P2 入出力ポート 18 P13 入出力ポート
8 P3 入出力ポート 17 P12 入出力ポート
9 P4 入出力ポート 16 P11 入出力ポート
10 P5 入出力ポート 15 P10 入出力ポート
11 P6 入出力ポート 14 P9 入出力ポート
12 P7 入出力ポート 13 P8 入出力ポート

 +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開発キットを買うと、必要なものがついてきます。

*スタンプに半円のしるしが付いているほうが上
ということでさっそくスタンプを上記のように取り付け,電池をつないで動かしてみましょう 。

DCアダプタはセンターポジティブ(中心が+)
上の写真の右の写真の用にスナップに9V電池をくっつけるか、ACアダプタをつなぐとキャリアボードのLEDが光ます。
スタンプは本体に電源回路を内蔵しています。本来は5V動作ですが、外部からの6−30Vの直流電源から5Vを内部で作ることが出来ます。但し安定に動かすには7.5〜12Vが望ましいです。また、この際に内部で作った5Vを外部に供給することも出来ます。この5V出力端子に9V電池等の5V以上の電源をつなげると壊れますので注意して下さい。この端子はマニュアルでは+5V,キャリアボードではVddと印刷されている端子でピン番号は21番です。
次はプログラムを動かしてみましょう。基本的なプログラミングの流れは

    1)PCとスタンプをケーブルでつなぐ
    2)PC上でS−BASICエディターを起動
    3)スタンプへプログラムをロード

となります。スタンプにプログラムをロードするとスタンプは勝手にプログラムを開始します。また、キャリアボードを使っている場合はリセットボタンを押すとプログラムが最初から行われます。
S−BASICエディターのウインドウズ版を起動します。エディター起動時にどのポートを使うかを聞いてきます(通信用のシルアルポートが1つしかなかったときは聞いてきません)のでそれを指定します。起動したら簡単なプログラムを打ち込んで動かしてみましょう。

これは1秒おきにデバック端末にhellowと表示するプログラムです。打ち込んだらデバック端末の設定をします。デバック端末というのはこの場合PCのことを差します。un→Debug→Newを選択するか、新規デバックアイコンを押すとデバック端末ウィンドウ

が現れますので設定を行います。各自、自分のPCのCOMポートと同じ設定をして下さい。また、FlowControl(フロー制御)は”なし”なのでPCのCOMポートの設定をフロー制御”なし”に設定して下さい。私のPCの場合はCOM1をモデムで使っているのでCOM2の設定になっています。設定が終わったらエディターのun→unを選択するか実行アイコンを押すとエディターのプログラムがスタンプへロードされ、その結果がデバック端末ウィンドウに表示されます。
<実行結果>

これでスタンプへのプログラムが出来るようになりました。

*COMポートの設定によっては上記で動かない場合もあります。その時はエディターの設定を変えてみましょう。設定の変更はEdit→Preferencesまたは設定アイコンを押すと下記ウィンドウが現れます。

ここでポートの設定を確認してみて下さい。



出力装置をつけてみる


一番簡単に制御出来るものは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が光るプログラムを作ってみましょう。

    DIRS=%1111111101111111  'I/Oの設定
    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だけを入力に設定します。
INLはポート0〜ポート7の入力状態を表すレジスタです。スイッチを入れていない状態ではプルアップ抵抗によりつねに”1”が入力されていますので値は常に%10000000(”%”は2進数で表示しているという意味)になります。スイッチを入れるとポート7=INLのビット7が”0”になりますので値は%00000000になります。
こんなのマイコン(スタンプ)を使わなくても出来ますが、まあ練習ということで勘弁して下さい。各自、押すと消える場合・や押すと1秒おきに点滅する場合のプログラムを作ってみて下さい。
<実行結果>


※この記事は2002年に書かれておりますので情報が古い場合があります。ご了承下さい。

超シンプルロボットの作成


ロボットの定義は”独立し、自分で考え自分で動く機械”です。ということでセンサーからの入力で自分で動き回るロボットを作成してみましょう。
今回は初めて作成するということでシンプルな入出力を考えます。入力で一番簡単なのはスイッチですね。これは前回やりました。出力で簡単なのは模型店などで売られているホビー用DCモーターが入手しやすいのでこれを使いましょう。スイッチと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”)を入力することで正転/逆転の制御を行います。
入力A
入力B
モータ状態


停止


正転


逆転


停止



市販のモータードライバICを使う

上記の回路が一つのパッケージに入ったICもあります。今回、上記のような回路を組むのは面倒なので市販のモータードライバICを使います。
東芝製TA7291P
このICはモーターの正転/逆転/停止/ブレーキの出力が出来、モーターへの出力電圧の調整も行え、0〜20VまでのDCモータの制御が出来ます。
<入力と出力>
入力1
入力2
出力1
出力2
モータの状態


ハイインピーダンス
ハイインピーダンス
ストップ




正転




逆転




ブレーキ

<ピン配列>
端子
端子番号
説明
Vcc

ICへの電源(4.5〜20V)
Vs

モーターへの電源(0〜20V)
Vref

モータ電圧制御電源
GND

グランド
IN1

入力1
IN2

入力2
OUT1

出力1
OUT2
10
出力2

今回はモータの電圧調整までは行わないのでVrefは使いません。Vrefを使わない場合はVsにつないでおきます。


駆動部の作成

駆動部は簡単にすませる為にタミヤの”楽しい工作シリーズ”を使いました。時間のある方はオリジナルのフレームや、タイヤ駆動を別のものに変える(キャタピラや6本足など)のも楽しいでしょう。

上の写真はNo98.ユニバーサルプレートセット+No97.ツインモーターギアボックス+No96.オフロードタイヤセットを組んだところです。ギアボックスは低速仕様に設定しました。(ツインモータギアボックスは高速/低速のギア設定が出来る)


モータドライバICでモータを制御してみる

それではモータドライバTA7291Pで駆動部を動かしてみましょう。駆動部にはモータが2つあるのでTA7291Pも2つ必要になります。システム構成は下記のようになります。


今回、試作用に小さいブレッドボードを使いました。両方のモーターが回っている状態でモーターに流れる電流を測定したところ片方約300mAでした。これはダーリントン接続のトランジスタで一つのモーターを回したときの約半分となります。これでスタンプのポート8〜11を使い前進/後進/右折/左折/停止/ブレーキのコントロールが出来るようになりました。
P8
P9
P10
P11
状態




停止




前進




右折




左折




後進




ブレーキ

プログラムを作ってみましょう。下記は”ちょっと左に曲がり、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条)に基づく通信販売業者の表示