少しPICマイコンとか昔いじって、なんとなくそのままやらなくなると言う私の癖だが、ちょっと前にラズパイを買って いじっていたら、Raduinoというものもあるのかということで、衝動買いをしてしまった。
ということでここにじぶんなりのメモを書いておく。
Arduinoはラズパイと違って、Linux等のOSはインストールできない。PICマイコンのように、パソコンでプログラムを書いて、それをUSB経由でArduinoに転送してArduinoを動かすと言う物だ。なのでマイコンと言うかマイクロコントローラと言った方がよいのかもしれない。
これは何種類もあるようだが、まず初心者ということで、私が買ったのは、Arduino UNO R3というやつである。
アマゾンで Arduinoをはじめようキット これを買った。
これはすでにいろいろなことができるように基板上にUSBポートとか、アダプタのプラグとか、ブレッドボードとの配線がしやすいようにジャンパーワイヤーをさすためのソケット(アナ)が取り付けられている。なので、ブレッドボードでいろいろと遊ぶには、ハンダヅケは必要ない。
ただし、ものによっては、使う前にすこしハンダヅケが必要なものもあるようなので注意した方がよい。
例のごとく、分かる範囲でピン配置を書いておく。
まずボードの左側に、アダプタのポートやUSBのポートが来るように正面に配置してほしい。
すると手前側と向こう側にワイヤを指すためのソケット(アナ)が空いている列が横方向に配置される。
手前の列から右から左に説明する。
右の橋からA5からA0と言うように6このアナが並んでいる。この6このアナにはアナログインと書かれている
少しハイだが相手、
VIN
GND
GND
5V
3.3V
リセット
IOREF
NOPIN
と合計14このあながある。 最後のNOPINはあながあいているだけでなにも接続しない。部品の都合であいているだけで、なんの電気的意味があるわけではないので使わない。
次ぎに向こう側の列、これも右からの説明。
右から0から13ピンのデジタルのアナが空いている。 ただし、0ピンはRX、1ピンはTXである。これはシリアルのデーター受信と、送信である。 この0から13番ピンまでは、デジタルPWMと書かれている。
つぎに
GND
AREF
SDA
SCL
と並んでいる。
また、右側の6こ並んでいるヘッダーピンにはICSPと書かれている。
左側のヘッダーピンにはなにも書かれていないようだ。
また、USBポートの上側にある、小さな押しボタン(タクトスイッチ)はリセットボタンである。
一般的にはWindowsにIDE(統合開発環境)を入れてプログラムを書いてUSBケーブルで繋いでプログラムをArduinoに転送する。
WindowsではNVDAでそれなりに音声で使えるらしい。ただWindow操作や、自分の慣れたエディタが使いにくい等があるので私はいやなので、やはりコマンドラインで総てできるほうがよいので探してみたらやはりちゃんとあった。
INOと言うものである。これをラズパイで利用してみた。つまりLinux上での開発環境を整えた。ちなみにWindows用のINOもあるようだ。
apt-get install arduino
これでArduinoのIDEをインストール
続いてArduinoの開発をこまんどらいんで操作するためのツールであるinoを入れる。inoはpythonで動くようなのでpythonが必要だけどRaspberryにはpythonがすでに入っているのでだいじょうぶ。
pip install ino
それから、シリアル通信をするときにシリアルモニタがあるとよいのでこれもインストールしておく。これの簡単な使い方は後で説明する。
apt-get install picocom
これでソフトなどのインストールは終了。
続いてプロジェクトの設定。 プロジェクトと言うのは、よくわからんがプログラムを作るためのものと言うか、まあ特に深く考えなくても良い。ただ専用のディレクトリを作って、そこの中にソースを置いてそのなかでコンパイルなどをする場所である。
と言うことで私は自分のホームディレクトリの直下にとりあえず
inoと言うディレクトリを作った。
mkdir ino
そのディレクトリに入って、
ino init -t blink
と実行すると、inoディレクトリにsrcとlibと言うディレクトリが作られる。
srcの中を見て貰えば分かるが、そのなかにsketch.inoと言うファイルがある。これがArduinoのソースファイルだ。エディタで開いて貰えば読める。
これは、先ほどino init -t blinkとやったときに作られたのだが、blinkと言うように、LEDをちゃかちゃかさせるためのテスト用のソースだ。
試しにコンパイルしてみる。
inoディレクトリに戻ってから
ino build
とやれば先ほどのsketch.inoがコンパイルされて、マシン語で書かれたファイルfirmware.hexが作られる。これをArduinoに転送すれば一緒上がりである。
ところで、このfirmware.hexがどこにあるのかと言うと、ino buildコマンドを実行するとinoの下に.buildと言う隠しディレクトリが作られるようだ。その中野unoと言うディレクトリのなかに作られている。
ではいよいよArduinoにこのfireware.hexを転送する。inoディレクトリに戻って
ino upload
これで転送される。のはずなのだが、エラーが出た。これはどうやら転送するときに使われるシリアルポートが一般ユーザからは使えないようになっているからだ。なのでとりあえずsuでルートになってから再び
ino upload
でいけると思う。一般ユーザで使いたい場合は、
chmod 666 /dev/ttyACM0
これでsuしなくても書き込みができるようになる。ACMは大文字なので中位。
これでLEDチャカチャカぞくにエルチカができているはず。LEDをデジタルピンの13と、GNDに繋げばちゃかちゃかしているはずである。
だが、LEDをちゃかちゃかさせても見えないよと言う私は、手元にあった圧電スピーカーを繋いでみた。すると「かちかち」とリズム良く聞こえた。 手元に圧電スピーカーがないからと言って、普通のスピーカーは使わない方がよいと思う。抵抗値が違うので、Arduinoを壊してしまう可能性がある。
そして、uploadが終わったら忘れずに
ino clean
を実行した方が良い。これを実行すると.buildごと消える。 これがあったままで次をbuildすると、エラーが出てコンパイルできない。これに気が付かず非常に無駄な時間を使ってしまった。
さて、手元に圧電スピーカやLEDなど部品がないよと言う人は、次のプログラムを上のようにコンパイルして転送してほしい。
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.println("Hello, World");
delay(1000);
}
これをsketch.inoと言うファイル名にして、先ほどのsrcディレクトリに入れる。エルチカのinoファイルは、違う名前に変更して置いた方がよい。と言うか、scrにはsketch.inoファイルだけあるほうがよいのかもしれない。
後は上と同じ手順でコンパイルして転送して、次のように実行する。
ino serial
そうすると、hello worldが繰り返し表示される。このままだとずっとhello worldが表示され続けちゃ宇野で、CTRL-aとCTRL-Xで終了できる。
実はino serialと実行すると、シリアルモニターが起動する。先ほどのプログラムはArduinoからhello worldを繰り返し表示させるためのものだ。いわゆるプログラミング言語で最初に書くと言われている定番だ。
ちゃんと、ArduinoからUSBケーブルを通じて、ラズパイニhello worldの文字列が送られている。立派なシリアル通信プログラムだ。
これならば手元に部品がないよと言う人もすぐに試せる
このシリアルモニターをやるためには、先ほどインストールしたpicocomが必要なのだ。
センサーを繋いで結果を表示させるには、一般の人は安いLCDを繋げば良いのだが、私たちには代わりにこのシリアルモニターを利用して、結果表示ができると思う。
さて、Arduinoを見て貰えば分かるが非常に簡単にいろんなことができる。一番最初に入ってきたエルチカのプログラムも見て欲しい。よく見ると13番ピンに対してonをしてから、offしている様子がわかると思う。
ところで、Arduinoのプログラムを書くときに使われる言語が、あたかもArduino専用のように言われているが、実は実体はC言語である。
でもmain巻数がないよと言われるだろう。
Arduinoでコンパイルするときは、実は裏で
int main(void){
setup();
loop();
}
と言うメイン巻数が呼ばれているのである。と言うことで、難しいと思われているC言語の顔を出さないように設計されている。
だから、先ほどのinoファイルを見て貰えば分かるが、ユーザーが書くのはsetup()とloop()と言うCの巻数なのである。そして、コンパイラはgccが使われているのだ。
とりあえず、Arduinoをかって2,3日使ってみたメモである。 手元にモーターとか少しセンサールイもあるのでおいおい試して行きたい。