概要
Arduinoについての覚え書き。Arduino単体でできることについて。常時更新です。
統合開発環境のセットアップ
- arduino.ccを表示
- 「Download」から「Mac OS X 10.7 Lion or newer」をクリック
- JUST DOWNLOADをクリック
- ダウンロードしたzipファイルを展開し、Arduinoをアプリケーションフォルダに移動
- Arduinoをダブルクリック
スケッチを書く
- 「TX」と「RX」のLEDが細かく点滅した後、「L」のLEDがゆっくり点滅する
- 以下のスケッチ(プログラムをArduinoではスケッチと言う)を書く
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
}
Arduinoに転送する (Arduino Uno)
- 「ツール」-> 「ボード」-> 「Arduino Uno」を選択
- 「ツール」->「ポート」-> 「/dev/cu.usbmodem1421 (Arduino Uno)」を選択
- 左から2番目の「→」のアイコンをクリックし、「マイコンボードへの書き込みが完了しました。」と表示されることを確認する
- LEDが光ったことを確認する
[Arduino Uno](Arduino / Genuino 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
- ARM (Cortex-M3)ベースのCPUであるAtmel SAM3X8Eを採用
- メモリ
- SRAM : 96KB, Flash memory(for code) : 512KB
- I/O
- 3.3Vしかない
- 一般的なArduinoの場合I/Oは5V
- ほとんどのシールドは5Vで動作する
- まれに(Pro, Pro miniなど)3V
- ほとんどのシールドは5Vで動作する
- 現状そのままDueに使えるシールドがほとんど無い
- 一般的なArduinoの場合I/Oは5V
- 3.3Vしかない
- USB
- 2ポート
- Miro USBです
- UnoはA-Bタイプ
- Miro USBです
- 2ポート
- ホストになれる機能がある
- 今は難しい
- ケーブルが入手しにくい
- ライブラリが不十分
- 接続できるデバイスは限られている
- 今は難しい
統合開発環境の設定
- ツール -> ボード -> Boards Manager
- Arduino SAM Boards (32-bits ARM Cortex-M3) by Arduinoの「Install」をクリック
- 100MBほどデータがダウンロードされます
- 「閉じる」を押し、ツール -> ボード -> Arduino Due (Programming Port)を選択
- Programming Portに接続している前提
- 後は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が消灯する
- digitalWrite(LED_PIN, HIGH);
- 繰り返される処理を書く
キーボードからの入力で「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が点滅する
screenで接続してターミナルから操作する
「キーボードからの入力で「L」のLEDをつけたり消したりする」でArduinoのマイコンボードにスケッチを転送している状態で実施する
### デバイスの確認
$ ls /dev/tty*usb*
===========================
/dev/tty.usbmodem1421
===========================
### screenで接続
$ screen /dev/tty.usbmodem1421 9600
### screenから出る
ctl-A ctl-\
キーボードのキーを押すと以下のように表示され、キーに合わせてLEDが点灯する
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回路を組んで遊ぶで。