Arduino入門

6,223 views

Published on

  • Be the first to comment

Arduino入門

  1. 1. Arduino入門 Arduinoを用いたメディアアートのアプローチ方法 Loop-Sessions.LLC. 南野 潤一
  2. 2. Arduino 概要
  3. 3. マイコンと入出力ポートを備えたオープンソースハードウェア Arduino言語によりスタンドアローンで動作が可能 Arduino 概要
  4. 4. 構成図(Arduino単体の場合) Arduino 概要 Arduino IDE で プログラム作成 プログラムを アップロード USB転送 センサーなど
  5. 5. Firmata ライブラリ ArduinoとPCをシリアル通信するためのライブラリ    PC側は複数のプログラミング環境に対応する StandardFirmata のインストール: Arduino IDE のメニューから以下のプログラムを実行  ファイル > スケッチの例 > Firmata > StandardFirmata 対応するPC側のプログラミング環境(代表例):  ・Processing(Ver.2.0より前)  ・openFrameworks  ・ Max / Pure Data
  6. 6. Firmata ライブラリ 構成図(Firmataライブラリ使用) ・Processing ・openFrameworks ・Max / Pure Data  ... StandardFirmata をインストール シリアル通信 センサーなど
  7. 7. Firmata ライブラリ Arduino IDE にて設定したシリアルポートを確認しておく    PC側の環境を構築するときに必要
  8. 8. 電子部品(センサーなど) Arduinoから入力するための電子部品 ・タクトスイッチ ・可変抵抗器(ボリューム) ・赤外線センサー(距離) ・3軸加速度センサー(傾き、動き) ・CdSセル(明るさ) ・ピエゾ素子(振動) ・タッチセンサ、タッチパネル  など多数
  9. 9. PC側のプログラミング環境
  10. 10. Processing ビジュアルデザインのためのプログラミング言語 Arduinoライブラリのインストール: ・Arduino Library for Processing (and Firmata)  http://playground.arduino.cc/interfacing/processing  processing-arduino.zip をダウンロードして、  「書類」フォルダ内の Processing > libraries にコピー  (Macの場合)
  11. 11. Processing import processing.serial.*; import cc.arduino.*; Arduino arduino; color off = color(4, 79, 111); color on = color(84, 145, 158); void setup() { ! ! size(470, 280); ! ! // シリアルポートの一覧を出力 ! println(Arduino.list()); ! ! // Arduino IDE でセットしたシリアルポートをセット ! arduino = new Arduino(this, Arduino.list()[6], 57600); ! ! // デジタル入力 D0 - D13 をセット ! for (int i = 0; i < 14; i++) { ! ! arduino.pinMode(i, Arduino.INPUT); ! } ! } Arduino利用の実装例
  12. 12. Processing void draw() { ! ! background(off); ! stroke(on); ! ! for (int i = 0; i < 14; i++) { ! ! // デジタル入力の状態を表示 ! ! if (arduino.digitalRead(i) == Arduino.HIGH) { ! ! ! fill(on); ! ! } else { ! ! ! fill(off); ! ! } ! ! rect(420 - i * 30, 30, 20, 20); ! } ! ! for (int i = 0; i <= 5; i++) { ! ! // アナログ入力の値を円の大きさで表示 ! ! ellipse(280 + i * 30, 240, ! ! ! ! arduino.analogRead(i) / 16, arduino.analogRead(i) / 16); ! } ! } Arduino利用の実装例
  13. 13. openFrameworks 概要 創作活動を支援するためのオープンソースのC++ツールキット http://openframeworks.jp/ ライセンス:   (基本的に)MITライセンス 対応OS:   Windows, OS X, Linux, iOS, Android 対応開発環境:   XCode, Code::Blocks, Visual Studio, Eclipse 最新版は 0.8.0(2013/08/12 現在) 今回は 0.7.4 を使用。
  14. 14. openFrameworks 概要 プロジェクトの主要なファイル:   main.cpp メインファイル   testApp.h アプリケーションのヘッダファイル   testApp.cpp アプリケーションのソースファイル 主要関数:   testApp::setup() 初期化   testApp::update() メインループ   testApp::draw() 描画 setup() update() draw()
  15. 15. openFrameworks 概要 基本的なクラス ・ofSoundStream オーディオ信号の入出力、波形の生成 ・ofSoundPlayer サウンドファイルの再生 ・ofImage 画像ファイルの制御 ・ofLine, ofRect, ofCircle, ofTriangle, ... 図形の描画(直線、四角形、円、三角形、...) ・ofBackground (r, g, b), ofSetColor(r, g, b) 背景色、描画色の設定 ・その他 映像の制御、3D、OpenGLラッパー、数学、etc
  16. 16. openFrameworks 概要 アドオン ・ofxBox2d Box2dのラッパー ・ofxOpenCv OpenCvのラッパー ・ofxFft, ofxOnsetDetection オーディオ処理(FFT、立ち上がり検出) ・ofxKinect, ofxOpenNI, ofxLeapMotion デバイス制御(KINECT, Leap Motion) ・その他、多数あり   http://ofxaddons.com/
  17. 17. openFrameworks(Arduinoとの接続) Arduinoとのシリアル通信 ・ofArduino   openFrameworksとArduinoのシリアル通信クラス ofArduino を含むサンプル:   examples > communication > firmataExample      このサンプルを実装の参考にする
  18. 18. openFrameworks(Arduinoとの接続) 接続例(アナログ入力 A0 に可変抵抗器を接続)
  19. 19. openFrameworks(Arduinoとの接続) #pragma once #include "ofMain.h" class testApp : public ofBaseApp{ public: void setup(); void update(); void draw(); void mouseDragged(int x, int y, int button); void mousePressed(int x, int y, int button); ! ! int iValue; ! // add (Arduino) ! ofArduino ard;! ! ! ! // Arduino のオブジェクト ! bool bSetupArduino;!! // Arduino の Setup の確認フラグ ! // add (Arduino) private: ! void setupArduino(const int & version); ! void digitalPinChanged(const int & pinNum); ! void analogPinChanged(const int & pinNum); ! void updateArduino(); ! }; testApp.h
  20. 20. openFrameworks(Arduinoとの接続) #include "testApp.h" void testApp::setup(){ ! ! ofSetVerticalSync(true); ! ofSetFrameRate(60); ! ! iValue = 0; ! // add (Arduino) ! ! // Arduino IDE でセットしたシリアルポートに置き換えること ! ard.connect("/dev/tty.usbmodem1411", 57600); ! ! bSetupArduino! = false; ! // Arduino との接続が確立したら、setupArduino() を呼び出す ! ofAddListener(ard.EInitialized, this, &testApp::setupArduino); } void testApp::update() { ! ! // add (Arduino) ! updateArduino(); } testApp.cpp
  21. 21. openFrameworks(Arduinoとの接続) void testApp::setupArduino(const int & version) { ! ! // 接続が確立したら、リスナーを削除 ! ofRemoveListener(ard.EInitialized, this, &testApp::setupArduino); ! bSetupArduino = true; ! // 指定したデジタル入力をセット。以下では D2, D5 ! int iDigitalPin[] = {2, 5}; ! int iDigitalPinNum = sizeof(iDigitalPin) / sizeof(iDigitalPin[0]); ! for (int i = 0; i < iDigitalPinNum; i++) { ! ! ard.sendDigitalPinMode(iDigitalPin[i], ARD_INPUT); ! } ! ! // アナログ入力 A0 - A5 をセット ! for (int i = 0; i < 6; i++) { ! ! ard.sendAnalogPinReporting(i, ARD_ANALOG); ! } ! ! // デジタル出力 D13 をセット ! ard.sendDigitalPinMode(13, ARD_OUTPUT); ! ! // 値が変更されたときに呼ばれるリスナー(デバッグ用途など) ! ofAddListener(ard.EDigitalPinChanged, this, &testApp::digitalPinChanged); ! ofAddListener(ard.EAnalogPinChanged, this, &testApp::analogPinChanged); } testApp.cpp
  22. 22. openFrameworks(Arduinoとの接続) void testApp::updateArduino() { ! ! // Auduino を update ! ard.update(); ! ! ! if (bSetupArduino) { ! ! // アナログ出力 A0 の値を更新 ! ! iValue = ard.getAnalog(0); ! ! if (iValue < 0 || iValue > 800) iValue = 0; ! } ! } void testApp::digitalPinChanged(const int & pinNum) { ! ! cout << "digital: " << pinNum << " value: " << ard.getDigital(pinNum) << endl; } void testApp::analogPinChanged(const int & pinNum) { ! ! cout << "analog: " << pinNum << " value: " << ard.getAnalog(pinNum) << endl; } testApp.cpp
  23. 23. openFrameworks(Arduinoとの接続) void testApp::draw() { ! ofSetColor(255, 255, 255); ! ! // add (Arduino) ! if (bSetupArduino){ ! ! // アナログ出力のピン番号と値を表示 ! ! string strValue[6]; ! ! for (int i = 0; i < 6; i++) { ! ! ! strValue[i] = "analog pin: " + ofToString(i) ! ! ! ! ! ! + " = " + ofToString(ard.getAnalog(i)); ! ! ! ofDrawBitmapString(strValue[i], 20.0, 40.0 + 20.0 * i + iValue); ! ! } ! } ! } testApp.cpp
  24. 24. openFrameworks(Arduinoとの接続) アプローチ例:  examples フォルダ以下のサンプルをArduino対応に改造 ・サウンド(sound/audioOutputExample)   スイッチ、可変抵抗器 など ・Light(gl/singleLightExample)   3軸加速度センサー、赤外線センサー など ・描画(3d/cameraRibbonExample)   3軸加速度センサー、 赤外線センサー など
  25. 25. 接続例(アナログ入力 A1 に赤外線センサーを接続) openFrameworks(Arduinoとの接続) 安定性を考慮して コンデンサを追加
  26. 26. 接続例(アナログ入力 A3 - A5 に加速度センサーを接続) openFrameworks(Arduinoとの接続) 8 5 1 4
  27. 27. Max 視覚的に音楽/映像作品を制作できるプログラミング環境 最新版は 6.1(有償) Arduinoとの連携: ・Maxuino  http://www.maxuino.org/downloads  フォルダ名を「maxuino」に変更して、以下の場所にコピー  /Applications/Max 6.1/Cycling '74/
  28. 28. Max MaxuinoでのArduinoの接続例: [maxuino]オブジェクトからの出力データ(例) analog 0 0.505859 analog 0 0.524414 analog 0 0.605469  ... [route]オブジェクトを用いて 3番目の値を取り出す
  29. 29. Pure Data オープンソースのグラフィカルなプログラミング環境 ・Pd-extended(拡張ライブラリを含む実行ファイル) http://puredata.info/downloads Arduinoとの連携: ・Pduino  http://at.or.at/hans/pd/objects.html  arduino.pd を構築するディレクトリにコピー
  30. 30. Pure Data PduinoでのArduinoの接続例: [arduino]オブジェクトからの出力データ(例) analog 0 0.0694037 analog 0 0.119257 analog 0 0.0713587  ... [route]オブジェクトを用いて 3番目の値を取り出す

×