[[FrontPage]] * 11/24 概要, Arduino [#sa606bef] ** 自己紹介 [#b5637146] - http://yama-linux.cc.kagoshima-u.ac.jp/~yamanoue - ちょっと宣伝 -- 鹿児島組込みシステム推進協議会 http://yama-linux.cc.kagoshima-u.ac.jp/kumikomi --- 参加をご検討ください。 -- かごしまITフェスタ 11/30-12/2 --- 鹿児島組込みシステム推進協議会でETロボコンITフェスタ杯(12/1-12/2 の午後)を実施します。ぜひ見に来てください。 -- 情報処理学会インターネットと運用技術研究会シンポジウム --- http://iot.ipsj.or.jp/iots/2012 --- 12/13-12/14 に鹿児島で開催されます。参加をご検討ください。 ** この部分(3週間分)の概要 [#xe924b2b] ** センサネットワークと Internet of Things (IoT) [#jaa4cd09] - たとえば -- 農場の管理は大変。 --- わざわざ農場に出向かなくても、農場の様々な部分の温度、湿度、照度、土壌水分、 不法侵入の有無、有害動物の侵入などのデータが、管理棟に集まり、必要時に 自動的に警告が出たり、自動的に視覚的なデータが表示されたりしたら、管理が楽になる(かも) --- http://monoist.atmarkit.co.jp/mn/articles/1207/06/news012.html --- http://it.impressbm.co.jp/e/2011/10/31/4056 -- 独居老人の健康状態の把握 --- 独居老人が沢山いる地域で、独居老人の健康状態を役場や保健所などで監視することができたら、病気や事故を速やかに発見し、重大な状態に至る前に対策を打つことがやりやすくなる(かも) --- http://www.necst.co.jp/company/rd/mimamori.html --- http://www.atpress.ne.jp/view/29840 --- テムザックのロボットも、動機はこれ。 - 点のデータから面のデータへ -- いままでも、センサを使った監視はあちこちで行われていた。 -- クラウド、スマートホン、ZigBee などの技術が利用できることにより、 従来より広い範囲のデータを大量に入手し、より簡単に、我々の生活に役立てることができるようになっている。 - Big data -- スマートホン、カーナビ、そのほかのあらゆるデータが、GPS などの位置情報と共に、クラウドに集積されている。 -- こんなことが可能になっている。 --- http://speedi.mapping.jp/ --- http://slidesha.re/Q5o9mU --- Hurricane Sandy: Network Outages (October 29-30, 2012) http://youtu.be/-MxzQcT7fLQ - こんなサービスも使える -- Cosm http://cosm.com/ -- Cosm で放射線量の情報の共有 --- http://diytec.web.fc2.com/mark2r2/ --- https://cosm.com/users/takashiyamanoue --- そのほか、いろいろ。 - センサネットワークとは、面に配置されたセンサデータを、無線や有線のネットワークを使って、収集できるようにしたもの。センサを備えた「ノード」があちこちに配置され、ノード間で 情報交換が行われる。 -- ノード間を自動的に接続する手法の1つに、Adhoc On-demand Distance Vector (AODV) アルゴリズムがある。ZigBee はAODV を使ったメッシュネットワークを構成することができる。 - IoT とは、「物」どうしで構成されたインターネット。従来のパソコンを使ったインターネットだけでなく、人が操作しない、自律に動作する物(ノード)がインターネットを使って情報交換を行う。広範囲なセンサネットワークとして実際に使われている。 ** Arduino と Android とクラウドの融合 [#v629c7fb] - Arduino -- オープンソースのハードウェア。とても簡単にセンサとアクチュエータを制御できる。 -- Arduino を使って、みんなで電子工作をして、web で自慢しあい、教えあう文化、情報をみんなで共有する文化が広まっている。Social 電子工作。 -- 例 Maker fair --- http://www.miraikan.jst.go.jp/event/120912107270.html - Android -- 皆様ご存知。今、ここで講習中。 -- 無線LAN や有線LAN がないところでも、インターネットが使える。 -- クラウドとの相性がよい。 - クラウド -- インターネットの、どこにあるか意識しなくても使える、大量のサーバ群 -- google, twitter, facebook, ... など、クラウドを使ったサービスを、我々は、すでに普通に使っている。 - 今後の3回で、Arduino, Android, twitter を使って、簡単な IoT システムを作成する。 ** デモ(このようなものを作ってもらいます) [#oa3e2691] - AdkTwitter ** Arduino の紹介 [#c51ec400] - http://www.arduino.cc/ (本家) - http://garretlab.web.fc2.com/arduino/index.html - http://arduino.sugakoubou.com/ ** Arduino のプログラミング環境のインストール [#j3dfed51] - http://arduino.cc/en/Main/Software - http://arduino.cc/en/Guide/Windows ** Arduino でLED ちかちか [#m7ed57b9] - 1. ArduinoボードとUSBケーブルとパソコン(PC)を準備する。 - 2. Arduino 開発環境をダウンロードする。 -- http://arduino.cc/en/Main/Software - 3. ボードとパソコンをUSB ケーブルで接続する。 -- 接続すると、ボードの緑のLEDが点灯する。 - 4. ドライバをインストールする。 -- 必要な場合は、その場で方法を説明します。 - 5. Arduino アプリケーションを起動します。 -- ダウンロードして解凍してできたディレクトリの中の arduino.exe をダブルクリックします。 - 6. LED ちかちかプログラム例(blink example) を開きます。 -- File > Examples > 1.Basics > Blink のようにメニューを辿ったら、LEDちかちか例題プログラムが書かれたページ(エディタと各種設定とコンパイルとupload )が開きます。 --- &ref(Arduino1Blink.png); - 7. ボードを選びます。 -- Tools > Board で、ボードのメニューが表示されます。今回は、Arduino Mega ADK を選びます。 --- &ref(arduino-select-board.jpg); - 8. シリアルポート(パソコンとボード間で通信を行うときに使う、パソコン側の口)を選びます。 -- Tools > Serial Port のメニューを辿って、ポート一覧を表示させ、Arduino ボードが接続されたポートを選びます。どのポートがArduino に接続されているか、調べるには、一度、USBケーブルをはずして、ポート一覧を表示し、USBケーブルを接続して、またポート一覧を表示します。このとき、あらたに加わったポートが、ボードに接続されているポートです。 - 9. プログラムの upload (プログラムのボードへの書き込み) -- 開発環境の Upload ボタンをクリックします。&br; &ref(arduino-upload.jpg); &br; しばらくすると、ボードのRXとTXボタンが点滅します。Upload が成功したら、"Done uploading."メッセージが表示されます。 Upload が終わって少ししたら、ボード上の、pin 13 (L)に接続されたLED が黄色で点滅します。 -- Arduino ではプログラムのことを「スケッチ」と呼びます。 - 参考 -- http://arduino.cc/en/Guide/Windows -- http://arduino.cc/en/Guide/HomePage ** Arduino に外部のLED を接続して、LEDをちかちか [#mb85d9f2] - 1. Arduino ボードとパソコン間のUSBケーブルを、一度、抜きます。 - 2. ブレッドボードを使って、Arduino の 8番端子とGND端子の間にLED と抵抗(620Ωくらい)を直列接続します。8番端子側をLEDのアノード(+側)とします。 -- &ref(11/24/arduino-circuit-led-1.jpg,75%); -- ブレッドボードは、穴の配列の縦方向または横方向だけ、電気が流れるようになっています。接続したいジャンパ線の金属端子や部品を、電気が流れる同じ列の穴に挿すだけで、配線できます。 --- &ref(11/24/arduino-circuit-led-2.jpg,75%); - 3. パソコン(PC)とArduino ボードをUSB ケーブルで接続します。 - LED ちかちかプログラム例を書き換えます。 -- 元のプログラムの pinMode(13...) や digitalWrite(13...) の13 を8 に書き換えて、 以下のように書き換えます。 void setup() { // initialize the digital pin as an output. // Pin 13 has an LED connected on most Arduino boards: pinMode(8, OUTPUT); } void loop() { digitalWrite(8, HIGH); // set the LED on delay(1000); // wait for a second digitalWrite(8, LOW); // set the LED off delay(1000); // wait for a second } - upload します。 - 演習: LED に SOS を繰り返し発信(点滅)させるプログラムを作ってみましょう。 -- SOS は、ト・ト・ト ツー・ツー・ツー ト・ト・ト -- loop(){ ... } の中の文の列は、繰り返し実行されます。 -- delay(長さ)は、長さ(msec)だけ待つことを表します。 ** アナログ出力(PWM) を使って、LED をふんわり点滅 [#m46cf7ce] - digitalWrite(端子番号,HIGH 又は LOW) の代わりに analogWrite(端子番号, 値) を使って、値の大小で出力の強弱を与えることができます。ここで値は 0から 255 までの整数です。なお、これは0V と 5V の間の電圧が出力されるわけではなく、0Vと5Vの出力間隔を時間的に変える、PWM(Pulse Width Modulation)によって、実現しています。 - 以下のプログラムを作成し、upload し、実行してみてください。 void setup() { // initialize the digital pin as an output. // Pin 13 has an LED connected on most Arduino boards: pinMode(8, OUTPUT); } void loop() { analogWrite(8, 20); // set the LED on delay(1000); // wait for a second digitalWrite(8, LOW); // set the LED off delay(1000); // wait for a second analogWrite(8, 255); // set the LED on delay(1000); // wait for a second digitalWrite(8, LOW); // set the LED off delay(1000); // wait for a second } - Arduino では、c や java と同様の for文を使うことができます。 for文を使って、 LEDをふんわり明るくなったり暗くなったりさせるプログラムを作ってみてください。 -- 解答例 int led=8; int d=8; void setup() { // initialize the digital pin as an output. // Pin 13 has an LED connected on most Arduino boards: pinMode(led, OUTPUT); } void loop() { for(int i=0;i<256;i++){ analogWrite(led, i); // set the LED on delay(d); // wait for a second } for(int i=0;i<256;i++){ analogWrite(led, 255-i); // set the LED off delay(d); } } ** Arduino に外部センサを接続 [#v6048c5c] - Arduino の端子にスイッチやセンサを接続することにより、アナログ値やディジタル値を入力することができます。ここでは、照度センサをArduino に接続してみます。ArduinoボードのUSBケーブルをパソコンから切り離した後、以下のような回路を作成してください。 --- 照度センサの出力はアナログ値なので、Arduino のアナログ値入力用端子のA0に、センサの出力を接続しています。 -- &ref(11/24/arduino-circuit-light-sens-1.jpg,75%); -- &ref(11/24/arduino-circuit-light-sens-2.jpg,75%); - 回路作成後、Arduino ボードをUSBケーブルでパソコンに再度接続します。 - 今回は、Arduino 開発環境の File>New を選び、新しいスケッチを作成します。 - アナログ値を入力するとき、関数 val = analogRead(analogPin番号); を使います。 ここで得られる値 val は 0から 1023 間での値になります。 - 以下のプログラムを書き込みます。これは、照度センサの値をパソコン側の、Arduino 開発環境のシリアルモニタ に出力するものです。 int analogPin = 0; // potentiometer wiper (middle terminal) connected to analog pin 3 // outside leads to ground and +5V int val = 0; // variable to store the value read void setup() { Serial.begin(9600); // setup serial } void loop() { val = analogRead(analogPin); // read the input pin Serial.println(val); // debug value } -- Serial.println(val); は、val をパソコン側のシリアルモニタに送ります。 - Tools > Serial Monitor を選び、シリアルモニタを開きます。 &ref(arduino-serial-1.jpg); -- 通信速度が、スケッチで書いた、Serial.begin(9600) と同じ、9600 bps にしてください。 - スケッチを ボードにupload します。upload 終了後、シリアルモニタに照度センサのデータが数字で出力されます。照度センサを手で覆って暗くしたり、照明に直接あてたりして、値が変わることを確かめてください。 - スケッチの保存 -- 書いたスケッチを、File>Save As を辿り、ディスクトップに sensorex という名前をつけて保存してください。 ** Arduino でLED 点灯自動制御 [#dcc6fa97] - 演習: 暗くなったら LED が点灯し、明るくなったら LED が消灯する Arduino のスケッチを作成してみてください。 -- 解答例 int led=8; int analogPin = 0; // potentiometer wiper (middle terminal) connected to analog pin 3 // outside leads to ground and +5V int val = 0; // variable to store the value read int xval = 20; void setup() { pinMode(led, OUTPUT); } void loop() { val = analogRead(analogPin); // read the input pin if(val>xval){ digitalWrite(led,LOW); } else{ digitalWrite(led,HIGH); } delay(100); } ---- * 質問と解答 [#c8056e73] ** ボードの仕組みや部品の必要性に関する文献など? [#d56ed917] - Arduino ボードの仕組み: - ブレッドボードの仕組み: - 発光ダイオード: - 照度センサ: - PIR: ** Android のセンサがあるのに、外部のセンサを使う理由? [#pb059df7] - Android のセンサだけでは足らない場合があります。物理的に大きく、沢山のセンサを利用したい場合もあります。 ** Arduino の入手方法? [#j4fdbfec] - 通信販売が簡単です。 -- Switch Science http://www.switch-science.com -- 千石電商 https://www.sengoku.co.jp -- 若松通商 http://www.wakamatsu-net.com/biz/ -- マルツパーツ http://www.marutsu.co.jp/index.php - 福岡のマルツパーツ館でも販売しています。 -- http://www.marutsu.co.jp/hakata-chiyo/ ** Arduino の耐性? [#h4913222] -- Arduino をそのまま販売される商品の部品として使うと、湿度、温度などが厳しい環境では信頼性が保てないかもしれません。同じ種類のCPU を使ってボードを作り直して販売される例はあるようです。 ** Arduino につながるセンサ? [#p37a7446] - 簡単にセンサを接続するために、シールドと呼ばれる拡張ボードが販売されています。 - 例 -- http://www.switch-science.com ** Arduino は Android 以外の、Windows などとも連携できる? [#h4d19817] - できます。 - 例: -- http://www.technicana.com/physical-computing/73-connect-to-the-arduino-with-c-.html -- http://cccmuuccc.blog.fc2.com/blog-category-7.html -- http://connect.mind-craft.net/archives/82 ** twitter の個人アカウントは必要? [#pa11e8e6] - 使いますが、当日の講習の中でもアカウント入手の時間を取る予定です。 ** Arduinoボードの仕様? [#bfde2576] - http://arduino.cc をご覧ください。 ** Arduino 以外の組み込み? [#j4759d83] - Android とADK で接続の実績があるマイコンシステムにArduino 意外に以下のようなものがあります。 -- DIY Drones -- mbed -- Microchip, PIC -- RT Corp -- SparkFun's IOIO board -- Troido ---- -- DIY Drones http://diydrones.com -- mbed http://mbed.org -- Microchip, PIC http://www.microchip.co.jp -- RT Corp http://rt-net.jp -- SparkFun's IOIO board https://www.sparkfun.com/products/10585 -- Troido http://troido.de #counter