付録 1 実習テキスト Arduinoスケッチプログラミング Arduinoスケッチプログラミング Arduinoスケッチプログラミング 1. 的 作成 : 米田文彦 Arduino アルドゥイーノ の基本構成 機能を理解し 簡単なスケッチ * を行える能力を身につける また パソコンの標準的なキーボードやマウスといった入出力デバイスではなく センサやモータのような物理的な情報を扱える入出力デバイスを用いた制御をすることで より対話的な " フィジカルコンピューティング " を体験することを目的とする * Arduino ではプログラムのことをスケッチという 2. 使 機器 パソコン Arduino Arduino 実習 Shield Arduino IDE( 開発環境 ) 3. オープンソースプラットフォームArduino Arduino( 図 1) は 単純な入出力を備えた基板と開発環境 (Arduino IDE 図 2) から構成されるオープンソースプラットフォームである Arduino には ATMEL 社のワンチップマイコン ATmega168 が載っている この ATmega168 でできることは Arduino でもほとんど実現可能である 図 1 Arduino ( 図 1:Arduinoでマイコンしよう!!, http://k-tai.impress.co.jp/cda/article/stapa/40638.html より転載 ) 図 2 Arduino IDE -1-
付録 1 実習テキスト Arduinoスケッチプログラミング Arduinoスケッチプログラミング 1 ワンチップマイコンとは 下図はコンピュータが必ず持っている 5 つの構成要素である 制御装置 入力装置 演算装置 出力装置 記憶装置 ワンチップマイコンは コンピュータが持つ構成要素をひとつの IC チップ上に搭載した処理装置のことである パソコンほどの処理を行うことはできないが 小さな IC 回路のみで特定機能の処理を一手に行うことができる そのためコンピュータ制御を必要とする装置 ( 炊飯器などの家電製品や自動車 ) の多くに組み込まれている 要素 パソコン Arduino 制御装置演算装置 CPU CPU 記憶装置 RAM HDD SSD RAM 入力装置 キーボード マウス スイッチ センサ ( 光 音 熱など ) 出力装置 モニタ LED LCD など 図 3 マイクロチップ社 PIC16F84 図 4 ATMEL 社 ATMEGA168 ( 図 3~4: 秋月電子通商,http://akizukidenshi.com/ より転載 ) 図 3 や図 4 のように 処理速度や容量 ピン数など様々なものが各メーカーから販売されている 通常はこれらに CPU を動作させるためのクロックを与える発振素子と 電源を接続しなければ使うことはできない Arduino は発振素子や電源などワンチップマイコンを利用するために必要な環境が揃った状態で販売されている -2-
2 Arduino の特徴 Arduino は 16k バイトの RAM 1k バイトのデータメモリを持つ 14 本のデジタル I/O ピン (pin0 ~ 13) 入力または出力として利用することができる 内 6 本はアナログ OUT ピンに設定可能 (pin3,5,6,9,10,11) 6 本のアナログ IN ピン (pin0~5) 0 から 1023 までの値で アナログ値を得ることができる ピン配列は図 5 に示す 図 5 Arduino ピン配列 4. スケッチしてみよう LED の点滅プログラムを作ってみましょう 1 回路設計 Arduino のデジタル I/O ピンの 13 番と GND を LED でつなぎます -3-
2スケッチ Arduino IDE をコピーしたフォルダを開き Arduino アイコンをダブルクリックし 立ち上げる 開発環境 (Arduino IDE) はhttp://www.arduino.cc/ から無料で手に入れることができる Stop Open Upload Verify New Save Serial Monitor ここにスケッチを します 図 7 Arduino IDE Arduino IDE の画面説明は図 7 の通りである それでは次のスケッチを打ち込んでみましょう example01 001 void setup() 002 { C 言語と同じく 関数の終わりに ;( セミコロ 003 pinmode(13,output); ン ) を打つ 004 } 005 大文字と小文字に気をつけること 006 void loop() 007 { -4-
008 digitalwrite(13,high); 009 delay(1000); 010 digitalwrite(13,low); 011 delay(1000); 012 } 打ち込み終わったら Verify ボタンをクリックする Done compiling( コンパイル完了 ) というメッセージがでればスケッチに誤りはなく Arduino が実行可能なものに翻訳をし終えたということである 3 Arduino への書き込みパソコンと接続し Arduino にプログラムを書き込む パソコンとの接続は USB ケーブルで行う Arduino の電源は USB から供給されるが外部電源を接続することにより 単体で動作させることもできる USB ケーブルをつないだら Arduino IDE の Upload ボタンをクリックする Done uploading( アップロード完了 ) というメッセージがでれば Arduino への書き込みが完了 LED を点滅させることができましたか? こんなにも簡単に LED を制御することができるのです スケッチの解説を下記に記載する example01 の解説 001 void setup() 002 { 003 pinmode(13,output); //13 番ピンを出力として利用することを宣言 004 } 005 006 void loop() 007 { 008 digitalwrite(13,high); //13 番ピンに 5V を流す LED を点ける 009 delay(1000); //1 秒待つ 010 digitalwrite(13,low); //13 番ピンを 0V に LED を消す 011 delay(1000); //1 秒待つ 012 } Arduino のスケッチは必ず void setup() void loop() の 2 つがなければならない void setup () には何番ピンを出力もしくは入力に利用するかなどを記述する void loop() には実際の動作 (LED を点滅させる等 ) を記述する void loop() は名前の通り 電源を入れている限り無限に繰り返される -5-
pinmode(pin,mode) ピンの動作を入力か出力かに設定する pin: 設定したいピンの番号 mode: INPUT( 入力 ) か OUTPUT( 出力 ) digitalwrite(pin,value) HIGH または LOW を指定したピンに出力する pin: 出力するピンの番号 value: HIGH か LOW delay(ms) プログラムを指定した時間だけ停止する ms: 一時停止する時間 単位はミリ秒 1 秒は 1000 ミリ秒 5.Arduino 実習 Shield Arduino には Shield と呼ばれる 機能を拡張し より高度な動作を容易に実現させるためのボードが販売されている 各種モータを制御するための Motor Shield や LCD ディスプレイを搭載するための Color LCD & Joystick shield 等がある 本実習では Arduino 実習 Shield( 図 6) を使って学んでいく Arduino 実習 Shield には LED(4 個 ) スイッチ(4 個 ) 光センサ(1 個 ) 可変抵抗(1 個 ) モーター制御用の IC(2 個 ) が接続されている Arduino とのピン接続は以下の通りである デジタル I/O 0 アナログ IN 0 可変抵抗 1 1 光センサ CdS セル 2 (IN) スイッチ 0 2 3 (IN) スイッチ 1 3 4 (IN) スイッチ 2 4 5 (IN) スイッチ 3 5 6 (OUT) LED0 7 (OUT) LED1 8 (OUT) LED2 9 (OUT) LED3 10 (OUT) モータ右逆転 11 (OUT) モータ右正転 12 (OUT) モータ左逆転 13 (OUT) モータ左正転 -6-
付録 1 実習テキスト Arduinoスケッチプログラミング Arduinoスケッチプログラミング 図 6 Arduino 実習 Shield 6. 実習 課題 01 ファイル名 :problem01 LED0 から LED3 すべてを点灯させなさい 課題 02 ファイル名 :problem02 LED0 を 0.5 秒ごとに点滅させなさい 1 スイッチ 次に スイッチの入力を利用してみましょう example02 001 void setup() 002 { 003 pinmode(2,input) //2 番ピンを入力として利用することを宣言 004 pinmode(6,output); //6 番ピンを出力として利用することを宣言 005 } 006 007 void loop() 008 { 009 if(digitalread(2)==high) //if 文 2 番ピンの値を読み取り 条件分岐 010 { 011 digitalwrite(10,high); //2 番ピンが HIGH なら 10 番ピンの LED を点ける 012 } 013 else -7-
014 { 015 digitalwrite(10,low); //2 番ピンが LOW なら 10 番ピンの LED を消す 016 } 017 } digitalread(pin) 指定したピンの値を読み込む 結果の値は HIGH か LOW となる pin: 読みたいピン番号 課題 03 ファイル名 :problem03 スイッチ 0 がオンの時 LED0 が 0.5 秒間隔で点滅し スイッチ 0 がオフの時 LED0 が 1 秒間隔で点滅させなさい 2アナログ 次に 可変抵抗の入力を利用してみましょう スイッチは HIGH か LOW だが 可変抵抗の値は小刻みに変化する 小刻みな値を取得するためには digitalread の digital を analog に変えると良い また 3,5,6,9,10,11 番ピンは PWM( パルス幅変調 ) という方法で 256 段階で調節することができる これも digitalwrite の digital を analog に変えると良い analogread で取得できる値は 0 ~ 1023 の 1024 段階である analogwrite では 0 ~ 255 までの 256 段階なので analogread の値を利用するには 4 で割らなければならない analogwrite(pin,value) 指定したピンからアナログ値を出力する pin: 出力するピンの番号 value: 0 ~ 255 の値 analogread(pin) 指定したアナログピンの 0 ~ 1023 までの値を読み込む pin: 読みたいピン番号 課題 04 ファイル名 :problem04 可変抵抗の値 ( アナログ IN 0 番ピン ) を読み込み その値に応じて LED0 の明るさを変化させよ -8-
様々なセンサが売られているが 大抵はオンかオフのデジタル情報を伝えるものか 温度や明るさなどを小刻みな電圧の変化でアナログ情報を伝えるものである Arduino の digitalread や analogread を使いこなすと 様々なセンサから 様々な情報を簡単に得ることができる 次は アナログ IN 1 番ピンの光センサ CdS セルの情報を使ってみましょう CdS セルも 可変抵抗と同じく アナログ情報を出力するセンサです 課題 05 ファイル名 :problem05 CdS の値 ( アナログ IN 1 番ピン ) を読み込み その値に応じて LED0 の明るさを変化させよ CdS の値をそのまま LED0 の明るさの値に使うと大きすぎることに注意すること 課題 06 ファイル名 :problem06 CdS の値 ( アナログ IN 1 番ピン ) を読み込み その値に応じて LED0 の点滅スピードを変化させよ 点滅スピードは CdS の値をそのまま使ってよい 3モータ最後に モーターを制御してみましょう 10 番ピンを出力するとモータ右が逆転 11 番ピンを出力するとモータ右が正転 12 番ピンを出力するとモータ左が逆転 13 番ピンを出力するとモータ左が正転します Arduino 実習 Shield の 1 ~ 6 のソケットに モータカーから出ている 1 ~ 6 の線をつないでください これでモータを制御できているか確認できます 課題 07 ファイル名 :problem07 車を 5 秒間 前進させてください 課題 08 ファイル名 :problem08 CdS の値が 100 以上なら車を前進 99 以下なら停止させなさい -9-
7. おわりにライトレーサというのを知っていますか? ライントレーサは黒く引かれた線 ( ライン ) を赤外線などで照らし検出し左右のモータを制御することによってライン上を走らせる物です 本実習を通して モータの出力 そしてセンサから値を読み込むことが可能となりました 課題 08 はほとんどライントレーサのようなものです センサの数を増やし 精度を上げることで左右を認識し 線の上を走らせることができるはずです また ライントレーサに限らず 様々なセンサを Arduino に接続することで 温度計やリモコンなどに変身させることが可能です 私たちの身の回りにある家電製品もマイコンによって制御されています 鍋に温度センサを仕掛け クッキングヒーターを制御することができれば 炊飯器も作ることができるかもしれません -10-