2015年1月6日火曜日

6 ライントレースカーを作ろう

黒い線にそって前進する車を作ります。

センサが2つある場合、右のセンサが黒い線から外れたら左に曲がり、左のセンサが黒い線から外れたら右に曲がる、というプログラムを考えればできそうです。

今回はセンサが1つしかないので、少し工夫が必要です。

まっすぐラインに乗せて動かした場合、右に外れたのか左に外れたのかがわかりません。
ですから、最初はわざと左に外れるように斜めに車を置きます。

すると、初めてセンサが黒い線から外れたら右に曲がればOKということになります。

黒い線上にもどって次にセンサが黒い線から外れたら、左に曲がればよい・・・と、前回と逆の方向に曲がれば、ジグザグに黒い線上を進むと考えられます。



1   システム! "arduino"使う。
2   a=arduino!作る。
3   a!(システム! シリアルポート選択)ひらけごま。
4   赤外線センサ=a! 0 アナログ入力。

6   SW11=a!2 デジタル出力。
7   SW12=a!4 デジタル出力。
8   PWM10=a!3 アナログ出力。
9   SW21=a!7 デジタル出力。
10   SW22=a!8 デジタル出力。
11   PWM20=a!5 アナログ出力。
12   前回方向=0。
13   「
14      「(赤外線センサ!読む)>100」! なら
15         
16             「前回方向==0」!なら
17               
18                 PWM10!150 書く。
19                SW11!1 書く。
20                 a!3 待つ。
21                 SW11!0 書く。
22                 前回方向=1。
23              
24          そうでなければ
25              
26                PWM20!150 書く。
27                SW21!1 書く。
28                a!3 待つ。
29                SW21!0 書く。
30                前回方向=0。
31              」実行。
32      」実行。
33
34      PWM10!150 書く。
35      PWM20!150 書く。
36      SW11!1 書く。
37      SW21!1 書く。
38      a!1 待つ。
39      SW11!0 書く。
40      SW21!0 書く。
41
42   」!1000 繰り返す。
43
44   a! とじろごま。



20行目、28行目、38行目の「待つ」の秒数、PWMのスピードなど実際の走行に合わせた調整が必要ですが、とりあえずこのまま売って動作を確かめてみましょう。

(未完成なので続く)

5 条件分岐でDCモーターを動かしてみる

赤外線センサとDCモーターを組み合わせて動かしてみます。

赤外線センサへの反射が多くなればモーターが動き、少なくなれば止まるようにプログラムを考えてみます。


1   システム! "arduino"使う。
2   a=arduino! 作る。
3   a!(システム! シリアルポート選択)ひらけごま。
4   赤外線センサ=a! 0 アナログ入力。
5   SW11=a!2 デジタル出力。
6   SW12=a!4 デジタル出力。
7   PWM10=a!3 アナログ出力。

9   「
10       「(赤外線センサ!読む)>100」! なら
11          「
12             PWM10!255 書く。
13             SW11!1 書く。
14             a!0.5 待つ。
15             SW11!0 書く。
16            」実行。
17   」!100 繰り返す。
18
19   a! とじろごま。


10行目から16行目で条件分岐の
           「…」! なら「…」実行。
の文を使っています。

実行される12行目から15行目が条件を満たしたときに実行される命令です。
ただし、それだけだと一度だけ条件が確認されるだけで一瞬で終わってしまうため
9行目から17行目で繰り返し命令で100回繰り返しています。

2014年12月27日土曜日

4 DCモータの制御

【DCモータの回転方向】
 DCモーターは、流れる電流の向きによって回転方向が決まる。反対向きの電流を流すと逆に回転させることができる。

 実際にスタディーノと接続する場合は、Hブリッジと呼ばれる方法を使います。



①SW1とSW4をONにした場合、モーターには左から右方向への電流が流れる。
②SW2とSW3をONにした場合、モーターには右から左方向への電流が流れる。

※ただし、SW1とSW3、SW2とSW4を同時にONにした場合、回路がショートしてしまうので、
  十分な注意が必要です!

 実際には①、②をセットにしてON/OFFの操作をします。

【DCモータの回転数】

DCモーターは電圧の大きさを変えると、回転数が変わります。
ですから、モーターに可変抵抗を接続して変えてやれば、回転数は変わります。

しかし、次のような問題点があります。
   ・コンピュータで可変抵抗の値を制御しにくい。
   ・抵抗で電圧を下げても、抵抗部分で熱になるだけなので効率が悪い
    (電池の持ちが悪い)

そのため、今回はPWM(Pulse Width Modulation)という方法で回転数を制御しています。

○PWMの原理

 モーターにつないだスイッチをオンにする→モーターが回る。
 モーターにつないだスイッチをオフにする→モーターは減速し、最後に止まる。


 スイッチをオフにしてもすぐにモーターが止まるわけではありません。そこで、スイッチをオフにしてすぐにオンにしてやると、モーターは回り続けます。


 高速でスイッチのオン・オフを繰り返すと、モーターは回り続けます。ただ、スイッチをオフにしている間は、モーターには電力が供給されていないので回転数はずっとONにしている場合より少なくなります。

 オンにしている時間と、オフにしている時間の割合を変えると回転数を制御することができます。

 スイッチをオフにしている時間は電流が流れていないので、その分電池は長持ちします。


○スタディーノの場合
 スタディーノはDCモータを2つつなげることができます。

 モーター1はD2、D4がそれぞれ(SW1、SW3のセット)、(SW2とSW4のセット)にあたり、デジタル入力、D3がPWMで0~255までのアナログ入力です。
 モーター2はD7,D8がデジタル入力、D5がPWMで0~255のアナログ入力です。




【DCモータを動かしてみる】
①M1のコネクタにモータを接続する。
②Powerに電池ボックスを接続する。
③ドリトルに次のプログラムを入力する。


1   システム! “arduino”使う。
2   a=arduino! 作る。
3   a!(システム! シリアルポート選択)ひらけごま。

5   SW11=a!2 デジタル出力。
6   SW12=a!4 デジタル出力。
7   PWM10=a!3 アナログ出力。

9   PWM10!255 書く。
10   SW11!1 書く。
11   a!5 待つ。
12   SW11!0 書く。
13
14   a! とじろごま。




1~3行目、14行目の説明は省略。
5~7行目でそれぞれのピンの設定をしています。

9行目でPWMの数値の書き込み(0~255の値)この数値でモーターの回転数を制御します。
10行目でSW11をONにしています。(モーターが動き出します)
11行目で5秒間待ちます。
12行目でSW11をOFFにしています。(モーターを止めます)

○試してみよう
・9行目の数値(255)を0~255の間の数値に書き換えてみましょう。
・モーターの回転数を反転させるためにはプログラムのどこを変えたら良いか考えましょう。
・モーターをM2につなぎ替えた場合、プログラムのどこを書き換えれば良いか考えましょう。

2014年12月25日木曜日

3 条件分岐と制御

センサから得られた数値を使ってカメ太を制御する。

【プログラム例3-1】(センサの数値で「歩く」歩数を設定してカメ太を歩かせる。
1   システム! “arduino”使う
2   a=arduino! 作る。
3   a!(システム! シリアルポート選択)ひらけごま。

5   赤外線センサ=a! 0 アナログ入力。
6   カメ太=タートル!作る。
7   「カメ太!((赤外線センサ!読む)×0.01) 歩く」!1000 繰り返す。

9   a! とじろごま。

説明
0番ポートにつないだセンサ(赤外線センサ)から数値を読み込んで使う。
5行目で 0番ポートをアナログ入力 用に設定。
7行目では、(赤外線センサ!読む)でセンサから0~255の数値を得て、その数値をそのまま使ってしまうと、カメ太があっという間に画面から飛び出してしまうので、0.01を掛けて動きを100分の1にしています。


【プログラム例3-2】
1   システム! “arduino”使う。
2   a=arduino! 作る。
3   a!(システム! シリアルポート選択)ひらけごま。

5   赤外線センサ=a! 0 アナログ入力。
6   表示=ラベル!(赤外線センサ!読む)作る。
7   カメ太=タートル!作る。
8   「
9      「(赤外線センサ!読む)>120」! なら
10         「カメ太!((赤外線センサ!読む)×0.01 歩く」実行。
11   」!1000 繰り返す。
12
13   a! とじろごま。

説明
3-1とほとんど同じなのですが、条件分岐で、赤外線センサから読み込んだ数値が小さい(120未満)ならば動かず、120以上であればカメ太が歩くというプログラムです。





【プログラム例3-3】
1   システム! “arduino”使う。
2   a=arduino! 作る。
3   a!(システム! シリアルポート選択)ひらけごま。

5   赤外線センサ=a! 0 アナログ入力。
6   表示=ラベル!(赤外線センサ!読む)作る。
7   カメ太=タートル!作る。
8   「
9      「(赤外線センサ!読む)>120」! なら
10         「カメ太!((赤外線センサ!読む)×0.01 歩く」
11      そうでなければ
12         「カメ太!((赤外線センサ!読む)×0.01 戻る」実行
13    」!1000 繰り返す。
14
15   a! とじろごま。


説明
3-2 のプログラムでは、読み込んだ数値が小さければ動かないのですが、このプログラムでは数値が120未満の場合、逆方向に「戻る」を実行します。


【プログラム例3-4】
1   システム! “arduino”使う。
2   a=arduino! 作る。
3   a!(システム! シリアルポート選択)ひらけごま。

5   赤外線センサ=a! 0 アナログ入力。
6   表示=ラベル!(赤外線センサ!読む)作る。
7   カメ太=タートル!作る。
8   「
9      「(赤外線センサ!読む)>120」! なら
10         「カメ太!((赤外線センサ!読む)×0.01 歩く。カメ太!10 左回り」
11      そうでなければ
12         「カメ太!((赤外線センサ!読む)×0.01 戻る。カメ太!10 右回り」実行
13   」!1000 繰り返す。
14
15   a! とじろごま。

説明
 3-3のプログラムの後ろに10度左回り、10度右回りの命令をつけたして、カメ太が画面上のあちこちにうろつきまわるようにしています。
 句読点(。)で区切って複数の命令を実行できることを示しています。

2 センサを使う(アナログ入力)

赤外線の反射型フォトセンサーを使います。
①A0のポートに反射型フォトセンサーを接続します。
②arduinoをPCに接続します。
③次のプログラムを打ち込みます。

システム! “arduino”使う。
a=arduino! 作る。
a!(システム! シリアルポート選択)ひらけごま。
赤外線センサ=a! 0 アナログ入力。
表示=ラベル!(赤外線センサ!読む)作る。
「表示!(赤外線センサ!読む)書く」!10000 繰り返す。
a! とじろごま。


黒い紙を用意しておき、それをなぞって白い紙と黒い紙の境界で数値の変化を確認します。

5行目は arduinoに「0番の出入り口を「アナログ信号用の入力」と設定しています。
それに「赤外線センサ」という名前をつけています。
6行目は 赤外線センサから読み込んだ数値を画面に表示する場所を作ります。
それに「表示」という名前をつけています。
7行目は 6行目で表示場所を設定しただけでは、一回読み込んで終わってしまうので
何度も読み込んで数値を次々に切り替えていきます

1 デジタル出力(動作確認を兼ねて)

デジタル出力(動作確認)

1   システム! “arduino”使う。
2   a=arduino! 作る。
3   a!(システム! シリアルポート選択)ひらけごま。

5   led=a! 13 デジタル出力。
6   「led! 0 書く。a! 1 待つ。led! 1 書く。a! 1 待つ」! 10 繰り返す。

8   a! とじろごま。


ボード上のLEDが10回点滅すれば成功です。
1行目~3行目、8行目はドリトルでarduino にプログラムを書くときの約束事と思っていてかまいません。arduinoをaという変数に設定して、aに対して命令する形をとります。
5行目  arduinoに「13番の出入り口を「デジタル信号用の出口」と設定しています
その出口に led と名付けています。
 スタディーノでは13番ポートにあらかじめLEDが接続されて基板上にありますので、そのLEDを利用しています。
6行目  led! 0 書く  ・・・・13番出入り口の電圧を0Vにする。
led! 1 書く  ・・・・13番出入り口の電圧を決められた電圧にする。

ドリトルでarduinoのプログラムを書く際には、

1   システム! “arduino”使う。
2   a=arduino! 作る。
3   a!(システム! シリアルポート選択)ひらけごま。



○   a! とじろごま。

この部分は決まり事として、4行目から「a! とじろごま。」の前までを考えるということになります。

スタディーノとは(事前準備)

スタディーノというワンボードマイコンを使って学習します。スタディーノは
アーテック社から販売されている arduino というマイコンの一種です。
arduinoとの違いはいくつかあるのですが、中学校技術で使うときに便利なのは
  • DCモーターがシールドなしに接続できる。
  • センサなどがコネクタで簡単に接続できる。
この2点がたいへん扱いやすい利点だと思います。
●arduinoとは
Arduino(アルドゥイーノ)プロジェクトから産み出された、ワンボードマイコンの一種。このプロジェクトは2005年にイタリアで始まり、設計グループは多くの競合製品よりも遥かに安価で簡単に使用できるプラットフォームの開発に成功した。誰でも製造・販売できるため、多くの種類のarduino互換マイコンが発売されている。スタディーノもそのうちの1つ。


●事前準備(おうちで試すときのために)
http://www.artec-kk.co.jp/studuino/     http://dolittle.eplang.jp/index.php?arduino
①USBデバイスドライバのインストール
②Arduino IDE のインストール
③Arduino IDE のマイコンボード選択ファイルに登録
④マイコンボードにarduino_dolittle.inoというプログラムを転送
⑤ドリトルでプログラム作成。