第1回 アルゴリズムの構築とマイコンによる実行
コンピュータとは?
生き物とロボットの共通点を見出すことによって、大きな構造が見えてきます。
まずは生き物の説明から始めよう。
生き物は視覚、聴覚などによって環境を知覚します。得られた情報を脳で判断し、知覚した情報に適した行動をとります。環境からのインプットにもとづいて判断し、アウトプットとして行動するという一連の流れがあります。
例えば人の場合、光による情報を目から知覚します。車が近づいてきた場合のことを考えると、近づいてくる車を目で見て、その情報が脳に伝わりこのままでは衝突すると予測します。そして手足の筋肉に信号を送り、体を動かして近づく車から回避します。このように得られた情報を処理し、判断することをアルゴリズムとよびます。
生き物を大きな構造は、インプット→アルゴリズムによる判断→アウトプット
といえます。アルゴリズムはここでは簡単に、判断をする際の規則の体系といったものです。
ロボットの場合は、まず各センサからの情報がマイコン(マイクロコンピュータの略で頭脳にあたる部分)に信号として入ります。光センサ、音センサ、衝撃センサなどがあり、目的にしたがって、センサを選択します。センサからの信号はマイコン内のアルゴリズムによって判断され、マイコンから各種の周辺機器に信号を出力します。この大きな流れは生き物と共通な部分といえるでしょう。
生き物とロボットの大きな違いは、生き物はアルゴリズムを経験によって学習していきますが、ロボットのアルゴリズムは人が考えてつくります。ロボットのアルゴリズムはプログラムミングという作業でつくっていきます。
プログラムの書き方には一定の規則があり、その規則の体系をプログラム言語と呼びます。プログラム言語には、いくつかの種類がありC言語、パスカル、FORTRANなどがあります。
プログラムの実行の流れ
人はなんのためにアルゴリズムをわざわざ構築しようとするのでしょうか。
ここで重要なのが「目的の設定」です。目的を達成するために人は、アルゴリズムを構築するのです。まず「目的の設定」を行い、次にアルゴリズムを構築していくわけですが、ここでフローチャートを書くことが重要になってきます。フローチャートは流れ作業図のことで、各行程が図で表されています。
ロボットを使って、どういった目的を達成したいのかを考え、フローチャートをつくりながら、アルゴリズムを構築していきましょう。「障害物をよけて進むロボットをつくりたい」
「カルガモの親子のように一列に連なって動くようにしたい」など、
まずロボットにさせたい行動を考えます。次に「こうなったら、こうする」という文章を組み合わせて、目的を達成するためのアルゴリズムを考えます。この段階では紙にフローチャートを書いて、ひとつひとつの役割に整理していきましょう。
アルゴリズムはプログラミングという作業で実現します。プログラミング環境として、コンピュータ上で働く開発ソフトウェアを用意します。プログラム言語は汎用性の高いC言語を使います。C言語でプログラムを書き専用のソフトでコンパイルします。コンパイルとはC言語をマイコンが理解できる機械語に翻訳することです。次にマイコンに機械語で書かれたプログラムをダウンロードします。マイコンをロボットに移しかえ電源を入れると、プログラムが実行されロボットが作動します。以上のことを少し専門用語を使ってまとめると以下のようになります。
1.[目的] ロボットにさせたい仕事を考える
2.[アルゴリズム設計] 仕事をさせるためのアルゴリズムを考える
3.[プログラミング]C言語で書かれたソースァイル作成する
4.[オブジェクトファイル作成]ソースファイルをコンパイルし、オブジェク トファイルを作成する
5.[オブジェクトファイルのダウンロード] マイコンにオブジェクトファイルを書き込む
6.[実行]ロボットの電源をいれ、動作確認する
マイコンボードを使ったプログラムの実践
今回は3色LEDを光らせるプログラミングを行います。3色LEDはR(赤)G(緑)B(青)の3色のLEDの発光によって、いろいろな色で発光できるLEDです。様々は画面で使われている原理です。
それでは、さっそくプログラムを実践しましょう。KNOPPIX上でC言語のプログラムを作成します。
1.KNOPPIX Edu6のデスクトップのKメニューからKメニュー>プログラム演習>C言語を選択します。シェルコンソールとKWriteというエディタが起動します。
2.KWritecで以下のプログラムを入力し、test1.cというファイル名で保存します。
マイコンボードでジャンパーピンの位置をJP3にしてください。
C言語プログラムの実践
3色LEDを使って色の表示をするプログラムです。PORTB=0x02;について説明します。PORTBはavrマイコンの端子のことで、8本あり、8ビットの情報を扱うことができます。0xの後は16進数で書かれていて、02は16進数で2を意味しています。これを2進数に直すと00000010になります。2進数の「0」は「0V」に対応し、2進数の「1」は「5V」に対応し、PORTBの8本のピンから電圧が出力されます。
PORTB=0x02;の場合は、PORTBの中のPB1のピンに5Vが出力させ、3色LEDのR(赤)をつけるピンに電圧がかかり、LEDは赤色に光ります。
プログラムのコンパイルとダウンロード
コマンドを打ち込むことによって、プログラムのコンパイルとダウンロードを行います。
1.シェル画面上でマウスをクリックしてアクティブにします
2.knoppix@knoppix:~$(プロンプトと呼ぶ)の表示の後にsuと入力し、Enterキーを押すと「スパーユーザ・モード」に切り替わります
3.root@knoppix:/ramdisk/home/knoppix#とプロンプトが表示されます。rootは根という意味で、スーパーユーザを表す。
4.lsと入力すると、さきほど作成したtest1.cが見つかります。このC言語のファイルを以下のようにコンパイルしていきます。
コマンド1>avr-gcc -mmcu=atmega168 -o test1.elf test1.c -Os
途中に小文字のoと大文字のOがありますが、いずれも「オー」です。
コマンド2>avr-objcopy -O ihex test1.elf test1.hex
大文字のオーがあることに注意してください。
コマンド3>avrdude /dev/usbdev1.1_ep00 -c usbasp -p m168 -U flash:w:test1.hex:a
ep00は「ゼロゼロ」です。
これでプログラムがマイコンにダウンロードされて、実行させるはずです。
課題
1.3色LEDを使って、いろいろなタイミングで赤→緑→青で発色させる
データをUSBに保存する
1.USBを差し込むと、デスクトップにHard Disk[sdf1]とでる
2.Hard Disk[sdf1]の上で右クリック
3.Change read/Write modeをクリック
4.Do you really want to...と出るので、Yesをクリックする