Arduino に関するページです

様々な Arduino 達

Arduino Uno

Arduino Leonardo

Da Vinci 32U

Arduino/Da Vinci のページへ。

GR-SAKURA

Ubuntu 12.04 を用いた開発

Oracle Java のインストール

ArduinoをUbuntuで動かす方法: 綺麗なコードが良い!ぶろぐによれば、Ubuntu で標準にインストールされる OpenJDK では不具合が出るそうなので、Oracle JDK7 をインストールする。

参考にしたのは、Ubuntu 12.04 LTSにOracle JDK7をインストールする - Starlight -Little Programmer’s Diary-

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java7-installer

開発統合環境(IDE)のインストール

JPEGCamera ライブラリを用いて SD に画像を書き込むサンプルが、標準の deb パッケージ版 arduino では撮影した画像ファイルの容量が大きくなり(正常値が12KB程度に対して19KB程度)、0バイトの画像ファイルしか生成しなかったので、本家サイトから tar ボールをダウンロードして用いることにした。(How to use system avr-gcc instead of Arduino one - Arduino Forumによれば、Ubuntu の avr-gcc にはバグがあるらしい)1.0.1 から多言語サポートになって日本語表記が使えるのも嬉しい。 (2012-10-25)

$ wget http://arduino.googlecode.com/files/arduino-1.0.1-linux64.tgz
$ tar zxvf arduino-1.0.1-linux64.tgz
$ sudo mv arduino-1.0.1 /opt/
$ sudo update-alternatives --install "/usr/bin/arduino" "arduino" "/opt/arduino-1.0.1/arduino" 1
$ cd /opt
$ sudo ln -s arduino-1.0.1 arduino
$ sudo ln -s /opt/arduino/arduino /usr/bin/arduino

1.0.2 が公開されたのでインストールしてみた。

$ wget http://arduino.googlecode.com/files/arduino-1.0.2-linux64.tgz
$ tar zxvf arduino-1.0.2-linux64.tgz -C /opt
$ sudo update-alternatives --install "/usr/bin/arduino" "arduino" "/opt/arduino-1.0.2/arduino" 2
$ sudo update-alternatives --config arduino
alternative arduino (/usr/bin/arduino を提供) には 2 個の選択肢があります。

  選択肢    パス                      優先度  状態
------------------------------------------------------------
* 0            /opt/arduino-1.0.2/arduino   2         自動モード [#c5dccbe2]
  1            /opt/arduino-1.0.1/arduino   1         手動モード
  2            /opt/arduino-1.0.2/arduino   2         手動モード

現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください: 

Ubuntu では Arduino の IDE は少しバージョンが古いものの、パッケージ化されているので、それを用いる。

$ sudo apt-get install arduino

以下のパッケージが新たにインストールされます:
  arduino arduino-core avr-libc avrdude binutils-avr extra-xdg-menus gcc-avr
  libftdi1 libjna-java librxtx-java

USB-Serial ポートの確認

Arduino を USB ケーブルで PC に接続して、dmesg 等でどのデバイスとして認識されるか確認する。

$ dmesg
[ 1335.968137] usb 4-1: new full-speed USB device number 2 using uhci_hcd
[ 1336.190115] cdc_acm 4-1:1.0: ttyACM0: USB ACM device
[ 1336.193384] usbcore: registered new interface driver cdc_acm
[ 1336.193391] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters

上記の例では、/dev/ttyACM0 として認識されている。

$ ls -al /dev/ttyACM*
crw-rw---- 1 root dialout 166, 0 11月 15 18:10 /dev/ttyACM0

/dev/ttyACM? は ユーザ root あるいは dialout グループに所属していなければアクセスできない設定になっているので、作業するユーザをdialout グループに登録する。

$ sudo usermod -G dialout ユーザ名

Arduino IDE の起動と設定

シリアルポートの設定(下記例では、/dev/ttyACM0)

Arduino-on-Ubuntu01.jpg

Arduino のボードタイプの設定(下記例では、Arduino Uno) 1.0.1 では、Arduino Leonardo もサポートしていることが分かる。

Arduino-on-Ubuntu02.jpg

ソースコードのビルドとアップロード

Arduino IDE では、ソースコードをビルドするには、「スケッチ」→「検証・コンパイル」を選択するか、チェック印の小アイコンをクリックすればよい。(この段階では、まだ実行ファイルは Arduino 本体には転送されない。)

Arduino-on-Ubuntu03.jpg
java.io.FileNotFoundException: /opt/arduino-1.0.5/build/Blink.cpp (そのようなファイルやディレクトリはありません)
	at java.io.FileOutputStream.open(Native Method)
	at java.io.FileOutputStream.<init>(FileOutputStream.java:221)
	at java.io.FileOutputStream.<init>(FileOutputStream.java:171)
	at processing.app.preproc.PdePreprocessor.writePrefix(PdePreprocessor.java:139)
	at processing.app.Sketch.preprocess(Sketch.java:1390)
	at processing.app.Sketch.preprocess(Sketch.java:1339)
	at processing.app.Sketch.build(Sketch.java:1585)
	at processing.app.Sketch.build(Sketch.java:1567)
	at processing.app.Editor$DefaultRunHandler.run(Editor.java:1897)
	at java.lang.Thread.run(Thread.java:744)
processing.app.debug.RunnerException: ビルド用のフォルダが消えてしまったか、書き込みができません。
	at processing.app.Sketch.preprocess(Sketch.java:1397)
	at processing.app.Sketch.preprocess(Sketch.java:1339)
	at processing.app.Sketch.build(Sketch.java:1585)
	at processing.app.Sketch.build(Sketch.java:1567)
	at processing.app.Editor$DefaultRunHandler.run(Editor.java:1897)
	at java.lang.Thread.run(Thread.java:744)

ソースコードをビルドするディレクトリを作成していない場合は、上記エラーが出るので、ディレクトリを作成する必要がある。

$ mkdir /opt/arduino-1.0.5/build

ビルドしたバイナリを Arduino 本体に転送して実行するには、「ファイル」→「マイコンボードに書き込む」を選択するか、右矢印の小アイコンをクリックすればよい。

Arduino-on-Ubuntu04.jpg

ライブラリを追加する

tar ボールを解凍して /opt/arduino に展開した場合、ライブラリは /opt/arduino/libraries に置かれるUbuntu 版 IDE ではライブラリは /usr/share/arduino/libraries に置かれるので、ここに追加するライブラリをコピーすれば良い。

$ ls -al /opt/arduino-1.0.1/libraries
合計 52
drwxr-xr-x 13 root root 4096 10月 25 16:42 .
drwxr-xr-x  8 root root 4096  3月 12  2012 ..
drwxr-xr-x  3 root root 4096  3月 12  2012 EEPROM
drwxr-xr-x  4 root root 4096  3月 12  2012 Ethernet
drwxr-xr-x  3 root root 4096  3月 12  2012 Firmata
drwxr-xr-x  3 root root 4096  3月 12  2012 LiquidCrystal
drwxr-xr-x  4 root root 4096  3月 12  2012 SD
drwxr-xr-x  3 root root 4096  3月 12  2012 SPI
drwxr-xr-x  3 root root 4096  3月 12  2012 Servo
drwxr-xr-x  3 root root 4096  3月 12  2012 SoftwareSerial
drwxr-xr-x  3 root root 4096  3月 12  2012 Stepper
drwxr-xr-x  4 root root 4096  3月 12  2012 Wire

$ sudo cp -r JPEGCamera /opt/arduino/libraries/

IDE のフォントを変更する

最近視力が落ちてきたので、デフォルトのフォントサイズではソースコードが見にくい。傘のお肉はどこにあるの?: Arduino IDEのフォントを変えるを参考にして、フォントを変更する。

/.arduino/preferences.txt を編集して、以下のように変更した。

editor.font=Monospaced,plain,16
editor.antialias=true

カメラを使う

Arduino/Camera

割り込み

Arduino/割り込み

省電力

Arduino/省電力

TIPS

TIPS/Arduino

XMODEM

シリアルポート経由でファイル転送するのに便利なプロトコル。昔、モデムを使ったパソコン通信時代にはよく使われていた。

minicom を用いたテスト

送受信テスト用に minicom を使う。

詳しくは、シリアル端末ソフト/minicomを参照のこと。

xmodem ライブラリを使う

  • S.F.T. XMODEM Libraryからソースファイルをダウンロードし、Arduino IDE のライブラリのディレクトリに xmodem という名前でディレクトリを作成し、xmodem.h と xmodem.c を xmodem.cpp と拡張子を変えてコピーする。
    $ wget http://mrp3.com/xmodem-1.0.tgz
    $ tar zxvf xmodem-1.0.tgz
    $ sudo mkdir /opt/arduino/libraries/xmodem
    $ sudo cp  xmodem-1.0/xmodem.c /opt/arduino/libraries/xmodem/xmode.cpp
    $ sudo cp  xmodem-1.0/xmodem.h /opt/arduino/libraries/xmodem/

サンプルコード

SD/listfiles.ino を参考にして、SDのルートディレクトリにあるファイルをシリアル経由で XMODEM で転送する。

XBee 経由でもファイル転送ができることを確認した。

  • testSD.ino
    #include <SD.h>
    #include <xmodem.h>
    
    #define CABLESELECTPIN	(4)
    
    File root;
    
    void setup()
    {
      // Open serial communications and wait for port to open:
      Serial.begin(9600);
       while (!Serial) {
        ; // wait for serial port to connect. Needed for Leonardo only
      }
    
    
      Serial.print("Initializing SD card...");
      // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
      // Note that even if it's not used as the CS pin, the hardware SS pin 
      // (10 on most Arduino boards, 53 on the Mega) must be left as an output 
      // or the SD library functions will not work. 
      pinMode(10, OUTPUT);
    
      if (!SD.begin(CABLESELECTPIN)) {
        Serial.println("initialization failed!");
        return;
      }
      Serial.println("initialization done.");
    
      root = SD.open("/");
      
      printDirectory(root);
      
      Serial.println("done!");
    }
    
    void loop()
    {
      // nothing happens after setup finishes.
    }
    
    void printDirectory(File dir) {
       while(true) {
         
         File entry =  dir.openNextFile();
         if (! entry) {
           // no more files
           //Serial.println("**nomorefiles**");
    //       break;
            return;
         }
         Serial.print("Start for transferring ");
         Serial.println(entry.name());
         Serial.println("Enter \'R\' if ready");     
         
         while(1) {
           char c;
    
           if (Serial.available()) {
             c = Serial.read();
             if (c == 'r' || c == 'R' ) {
               Serial.println("Accepted !!");
               short res = XSend(&SD, &Serial, entry.name());
    
               Serial.print("result status = ");
               Serial.println(res, DEC);
               if (res == 0) {
                 Serial.println("Fineshed transferring ");
    //             if (SD.remove(entry.name())) {
    //               Serial.print(entry.name());
    //               Serial.println(" was removed.");
    //             }
                 break;
               } else {
                 Serial.println("Failed in file transfer. Press \'R\" for retry");
               }
             }
           }
         }     
       }
    }

参考

センサとの接続

LM35DZ

LM60BIZ

負電源なしで -25~+125℃(1℃当たり 6.25mV、誤差 ±2℃(@25℃))で計測可能な温度センサ。

DS18B20+

S9648-100

浜松フォトニクス製フォトICダイオード。明るさに応じて

LCD

Arduino/LCD

JTAG を使ったデバッグ

参考


添付ファイル: filetestSD.ino 461件 [詳細] fileArduino-on-Ubuntu04.jpg 568件 [詳細] fileArduino-on-Ubuntu03.jpg 617件 [詳細] fileArduino-on-Ubuntu02.jpg 596件 [詳細] fileArduino-on-Ubuntu01.jpg 656件 [詳細] fileArduino-on-Ubuntu03.png 323件 [詳細] fileArduino-on-Ubuntu04.png 312件 [詳細] fileArduino-on-Ubuntu02.png 352件 [詳細] fileArduino-on-Ubuntu01.png 334件 [詳細]

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-08-21 (木) 14:23:38 (1912d)