LoginSignup
4

More than 5 years have passed since last update.

Arduino覚え書き

Last updated at Posted at 2015-08-22

概要

Arduinoについての覚え書き。Arduino単体でできることについて。常時更新です。

統合開発環境のセットアップ

  • arduino.ccを表示
  • 「Download」から「Mac OS X 10.7 Lion or newer」をクリック
  • JUST DOWNLOADをクリック
  • ダウンロードしたzipファイルを展開し、Arduinoをアプリケーションフォルダに移動
  • Arduinoをダブルクリック

以下のように統合開発環境が起動する。
スクリーンショット 2015-08-22 16.49.50.png

スケッチを書く

  • 「TX」と「RX」のLEDが細かく点滅した後、「L」のLEDがゆっくり点滅する
  • 以下のスケッチ(プログラムをArduinoではスケッチと言う)を書く
void setup() {
  pinMode(13, OUTPUT);

}

void loop() {
  digitalWrite(13, HIGH);
  delay(500);
  digitalWrite(13, LOW);
  delay(500);
}
  • 左上のチェックマークアイコンを押すと以下のように表示される スクリーンショット 2015-08-22 16.59.04.png

Arduinoに転送する (Arduino Uno)

  • 「ツール」-> 「ボード」-> 「Arduino Uno」を選択

スクリーンショット 2015-08-22 17.03.50.png

  • 「ツール」->「ポート」-> 「/dev/cu.usbmodem1421 (Arduino Uno)」を選択

スクリーンショット 2015-08-22 17.05.40.png

  • 左から2番目の「→」のアイコンをクリックし、「マイコンボードへの書き込みが完了しました。」と表示されることを確認する

スクリーンショット 2015-08-22 17.07.53.png

  • LEDが光ったことを確認する

写真 2015-08-22 17 09 52.jpg

Arduino Uno

最もスタンダードなArduino。

特徴

  • 作成中

Arduino Due

mrubyを動かすために32bit版のArduinoであるDueを購入。
まだまだ開発途上な感じです。

特徴

  • CPU
    • ARM (Cortex-M3)ベースのCPUであるAtmel SAM3X8Eを採用
      • それまで(Arduino Unoなど)はAtmelのAVRシリーズ
    • ARMは組み込み用途に使われるパワフルなCPUのひとつで32bit、84Mhz
      • Unoは8bit
  • メモリ
    • SRAM : 96KB, Flash memory(for code) : 512KB
  • I/O
    • 3.3Vしかない
      • 一般的なArduinoの場合I/Oは5V
        • ほとんどのシールドは5Vで動作する
          • まれに(Pro, Pro miniなど)3V
      • 現状そのままDueに使えるシールドがほとんど無い
  • USB
    • 2ポート
      • Miro USBです
        • UnoはA-Bタイプ
  • ホストになれる機能がある
    • 今は難しい
      • ケーブルが入手しにくい
      • ライブラリが不十分
        • 接続できるデバイスは限られている

統合開発環境の設定

  • ツール -> ボード -> Boards Manager

スクリーンショット 2015-08-25 22.29.57.png

  • Arduino SAM Boards (32-bits ARM Cortex-M3) by Arduinoの「Install」をクリック
    • 100MBほどデータがダウンロードされます

スクリーンショット 2015-08-25 22.31.47.png

  • 「閉じる」を押し、ツール -> ボード -> Arduino Due (Programming Port)を選択

スクリーンショット 2015-08-25 22.38.35.png

  • 後はArduino Unoと同様

スケッチの例

「L(13番ピン)」のLEDを点滅させる

2.5秒点灯し、0.5秒消えるを繰り返す

#define LED_PIN 13
void setup() {
  pinMode(LED_PIN, OUTPUT);

}

void loop() {
  digitalWrite(LED_PIN, HIGH);
  delay(2500);
  digitalWrite(LED_PIN, LOW);
  delay(500);
}
  • void setup()
    • 初期化の処理を書く
      • 使いたい機能の部分を明示的に書くだけで良い
        • ポート類がデジタルだったりアナログだったりという初期化は自動的に行われている
    • pinMode(LED_PIN, OUTPUT);
      • ここではpinModeという初期化だけ行っている
      • LED_PIN : 最初の#defineで定義されており、「13」が入る
      • OUTPUT : 出力として使用する
        • 13番ピンを出力として使用している
  • void loop()
    • 繰り返される処理を書く
      • digitalWrite(LED_PIN, HIGH);
        • 13番ピンをHIGH(1)にする。つまりLEDが点灯する
      • delay(2500);
        • 単位はミリ秒
        • 次の処理に進むまで2.5秒待機する
      • digitalWrite(LED_PIN, LOW);
        • 13番ピンをLOW(0)にする。つまりLEDが消灯する

キーボードからの入力で「L」のLEDをつけたり消したりする

  • 「o」を押すとLEDがつく
  • 「p」を押すとLEDが消える
  • 「b」を押すとLEDが点滅する
#define LED_PIN 13

void blink10(){
  int i;
  for(i=0;i<10;i++){
    digitalWrite(LED_PIN, HIGH);
    delay(200);
    digitalWrite(LED_PIN, LOW);
    delay(200);    
  }
}

void setup() {
  pinMode(LED_PIN, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int inputchar;
  inputchar = Serial.read();
  if(inputchar != -1){
    switch(inputchar){
      case 'o':
        Serial.print("LED ON\n");
        digitalWrite(LED_PIN, HIGH);
        break;
      case 'p':
        Serial.print("LED OFF\n");
        digitalWrite(LED_PIN, LOW);
        break;
      case 'b':
        Serial.print("LED Blinking\n");
        blink10();
    }
    Serial.print("READY\n");
  }
}
  • void blink10()
    • LEDを10回点滅させる関数
  • Serial.begin(9600);
    • Arduinoのシリアルポートを9600bpsで初期化する
    • Arduinoはだいたいこの値の例が多い
  • inputchar = Serial.read();

    • シリアルポートから1文字読み込む
    • 読み込むものが無ければ-1を返す
      • 読み込むものがない場合は後ろのif文で処理される
  • 実行

    • ツール -> シリアルモニタ
    • oを入力して「送信」を押すとLEDがつく
    • pを入力して「送信」を押すとLEDが消える
    • bを入力して「送信」を押すとLEDが点滅する

スクリーンショット 2015-09-06 8.41.05.png

スクリーンショット 2015-09-06 8.42.26.png

screenで接続してターミナルから操作する

「キーボードからの入力で「L」のLEDをつけたり消したりする」でArduinoのマイコンボードにスケッチを転送している状態で実施する

### デバイスの確認
$ ls /dev/tty*usb*
===========================
/dev/tty.usbmodem1421
===========================

### screenで接続
$ screen /dev/tty.usbmodem1421 9600

### screenから出る
ctl-A ctl-\

キーボードのキーを押すと以下のように表示され、キーに合わせてLEDが点灯する

スクリーンショット 2015-09-06 21.46.53.png

screenをバックグラウンドでアタッチし、セッションにコマンドを流し込む

「シェル芸 Arduino」でググって出てくるSlideShareの記事参照。じゃっかんR指定な記事です(笑)

### screenをバックグラウンドでアタッチ
nohup screen -S arduino /dev/tty.usbmodem1421 9600 &

### LEDを消す(pを送信する)
$ screen -S arduino -X stuff p

### LEDをつける (oを送信する)
$ screen -S arduino -X stuff o

### LEDを点滅させる (bを送信する)
$ screen -S arduino -X stuff b
  • screen
    • -S : セッションに名前をつける
    • -X : セッションに特定のコマンドを送る
  • stuff : 引数を標準入力に入力する

シェルスクリプトでコマンド化

screeをバックグラウンドでアタッチした状態で以下作成して実行する

### シェルスクリプトを作成
$ vi led_control.sh
===========================
echo "LED on:o, LED off:p, LED blink:b"
echo "input? (o/p/b)"
read input_key

screen -S arduino -X stuff $input_key
===========================

### 実行
$ sh led_control.sh
===========================
LED on:o, LED off:p, LED blink:b
input? (o/p/b)
b   # <- bを入力してLEDを点滅させている
===========================

回路を組むものについてはArduino回路を組んで遊ぶで。

開発言語

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4