Arduino の勉強会 平成 23 年 1 月 5 日於 : 鳥取大学
内容 1 Arduino とは... 2 2 インストールと動作チェック... 2 3 LED の点滅回路... 4 4 液晶 (LCD) の表示... 6 5 電圧計測... 7 6 アナログ出力... 8 7 サーボの動作... 9 8 例題 : ボリュームに応じて LED の明るさを変化させましょう... 10 9 例題 : モータの回転数を変化させましょう... 10 この実習で必要な物品 今回使用した型式 備考 Arduino 1 個 Arduino Duemilanove 今購入するのなら Arduino uno USB ケーブル 1 本 ブレッドボード 1 個 LCD 基板 1
1 Arduino とは Arduino はイタリアで開発されたシステムで Arduio 基板 ( 以後 :Arduino) と Arduino 開発環境 ( 以後 IDE) から 構成されたシステムである このシステムはオープンハードウエア オープンソフトウエアのであるので 多くの互換機が存在する ただし Arduino を名乗れるのはプロジェクトで承諾されてものだけである ( プロジェクト開発されたものに限定されています ) 購入は日本国内では スイッチサイエンスや千石電商など 様々なところで売られており 簡単にできる また 互換機は学研の 大人の科学 などにもある Arduino の心臓部は Atamel 社の組込み用コンピュータ AVR(ATmega8, ATmega168, ATmega328P, ATMega644P, ATmega1280) であり ブレッドボード上に互換機を作成することも安易である IDE は Processing の開発環境で 言語は Writing(C 言語 [avr-gcc] を基に関数を増やした感じのもの ) である したがって C 言語が判れば簡単に開発することができる 他にも様々な開発環境が存在します 豊富なサンプルプログラムが存在するので 勉強するには最適です Arduino はプログラム ( コード ) の事をスケッチと呼びます また 拡張ユニットの事をシールドと呼びます シールドには Ethernet や TV に出力するもの モータのドライバなど様々な種類が存在します 2 インストールと動作チェック Arduino のホームページ http://www.arduino.cc/ から Arduino Software をダウンロードして 解凍を行います 解凍できると右のような内容のフォルダが作成されます Arduino と PC を接続します Duemilanove の場合は自動的に Driver が入ります Uno の場合は Drivers 内のファイルでインストールする必要があります 2
フォルダ内の arduino をダブルクリックして IDE を立ち上げます メニューバー内の Tools の Board と Serial Port を合わせます Serial Port が判らない場合は デバイスマネージャで確認してください サンプルプログラムを読みます メニューバーの File Examples Basic Blink を読み込みます コンパイルして Arduino に転送し 実行します を押します これで一連の動作を行ってくれます アップロード後は自動的にプログラムが動作します 基板上の L のランプが点滅します 3
3 LED の点滅回路 Example の Blink は LED を点滅するプログラムでした プログラムを下に示します /* Blink Turns on an LED on for one second, then off for one second, repeatedly. This example code is in the public domain. */ void setup() { // initialize the digital pin as an output. // Pin 13 has an LED connected on most Arduino boards: pinmode(13, OUTPUT); void loop() { digitalwrite(13, HIGH); delay(1000); digitalwrite(13, LOW); delay(1000); // set the LED on // wait for a second // set the LED off // wait for a second C 言語と同じく /* */ や // は注釈行を示します setup 関数と loop 関数が定義されていることがわかります このように Arduino では setup 関数で初期化し loop 関数を実行します つまりこの 2 つの関数を定義することで Arduino は動作します この blink は Setup 関数で pinmode(13, OUTPUT); と宣言し Disital の 13 番を出力モードにし loop 関数で Digital の 13 番の信号を 1 秒間隔で On-off し LED を点滅させていることがわかります 13 番は 1kΩの抵抗が直列に入っているので 下記のようなに 直接 LED を刺す事が出来ますが 余所では抵抗が入っていないのでしてはいけません 4
Digital の 4 に変更してみましょう 配線図は次のようになります 抵抗は 1kΩ です プログラムは各自考えてみましょう 電子回路に使用する LED は通常 20mA 程度の電流まで流せます また マイコン (Arduino や PIC など ) も 1 ポートあたり 20-25mA 程度まで可能です それ以上の電流が必要な場合は別途回路が必要となります 5
4 液晶 (LCD) の表示サンプルを例に説明します メニューバーの File --> Example --> LiquidCrystal Display を呼び出します LCD に合わせてピンの配置を変更するためスケッチ中の LiquidCrystal(rs, rw, enable, d4, d5, d6, d7) を変更します #include <LiquidCrystal.h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(7,8,6,2,3,4,5); void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. lcd.print("hello, world!"); void loop() { // Turn off the display: lcd.nodisplay(); delay(500); // Turn on the display: lcd.display(); delay(500); リファレンスの見方を覚えましょう 接続は下記のようになります Arduino : LCD 5V : VD Gnd : GND Digital2 : 4 Digital3 : 5 Digital4 : 6 Digital5 : 7 Digital6 : E Digital7 : RS Digital8 : RW 2 行目に表示をしたい時には setcursor() 関数を使用します 6
5 電圧計測 4. の液晶 (LCD) の表示のプログラムを変更して作成します #include <LiquidCrystal.h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(7,8,6,2,3,4,5); void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); lcd.print("tottori Univ!"); void loop() { int analogdata; float Volt; analogdata=analogread(0); Volt= 5.0*(float)analogData/1023; lcd.setcursor(0,1); lcd.print("volt="); lcd.print(volt); lcd.print("v"); delay(10); analogread で 0-1023 までのデータを読むことができます 最後の Delay はあまり早すぎて LCD の表示が見えなくなるのを防ぐためです Arduino からは 5V の出力が 1 箇所なのでブレッドボードを使用して液晶とボリュームに分岐させます Arduino のサンプルには USB を使用した仮想シリアルポートへの出力もあります File Exsamples Analog AnalogInOutSerial でスケッチを読み込み 書き込みを行います 仮想シリアルのデータは を押すことでモニタすることが可能です 7
6 アナログ出力 Arduino にはアナログ出力がありませんが PWM を使用して信号の強弱をつけることができます ここでは サンプルを利用して説明します File examples Basic Fade でスケッチを読み込みます 1.LED の時を例に Digital9 に LED を接続します int brightness = 0; int fadeamount = 5; void setup() { // declare pin 9 to be an output: pinmode(9, OUTPUT); void loop() { // set the brightness of pin 9: analogwrite(9, brightness); // how bright the LED is // how many points to fade the LED by // change the brightness for next time through the loop: brightness = brightness + fadeamount; // reverse the direction of the fading at the ends of the fade: if (brightness == 0 brightness == 255) { fadeamount = -fadeamount ; // wait for 30 milliseconds to see the dimming effect delay(30); analogwrite 関数で出力しています このように簡単に LED の明るさを変えたりすることが可能です 使える出力は PWM と書かれているところだけです 8
7 サーボの動作サーボはラジコンとかで使用されるもので 角度を調整できます タイプには JR 型や F タイプなどあります 今回使用するのは JR タイプです 正確に使用するためには信号発生を接続し パルス幅と角度の関係を見ておく必要がありますが 今回は動くことだけを確認します #include <Servo.h> Servo myservo; int pos = 0; // create servo object to control a servo // a maximum of eight servo objects can be created // variable to store the servo position void setup() { myservo.attach(9); // attaches the servo on pin 9 to the servo object void loop() { for(pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees { // in steps of 1 degree myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees { myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position 正確に動作させるには setup() 関数内の attach メソッドを変更します 詳しくはリファレンスマニュアルを参照してください 接続はブレッドボードを介して制御線 ( 橙色 ) を Digital9 に 電源 ( 赤色 ) を 5V に Gnd( 茶色 ) を Gnd に接続します 9
8 例題 : ボリュームに応じて LED の明るさを変化させましょう ヒント analogread は 0-1023 まで値をとれますが AnalogWrite は 0-255 までです この変換は map 関数を使用すると簡単に出来ます 9 例題 : モータの回転数を変化させましょう モータの回転数を制御するのも PWM です FET スイッチを使用して行います 可聴周波数で制御をおこなうと 音が耳触りな場合があります その時は PWM 周波数を変化させる必要があります 必要以上に速くすると電子回路を良く考える必要が出てきます 10