Arduino
Arduino(アルドゥイーノ)とは、仕様が公開されているマイクロコンピュータである。
概要[編集]
オープンソースハードウェアとして有名なワンボードマイコン。用途に応じて多数の種類の本体基板と、サードパーティ製を含め多数の拡張基板がある。安価な互換基板も500円程度から見つけられる。
趣味用途、および試作用途での、ハードウェアの制御に向いている。自作ドローンや、IoT用途の制御に利用される事もある。Raspberry Piと比較される事もあるが、オペレーティングシステムの有無など、機能差が大きい。
マイコンとして[編集]
Arduinoは、AVRマイコンを中核に、プログラムの書き込みを行うUSBライター、簡易化された電気の出入力を装備した、ワンボードマイコンである。つまり、通常のマイコンであれば必須となる、はんだ付けを含めた工作を大幅に省略できる。これが趣味、および試作に向いている理由である。
多く利用されるArduino UnoはATmega328Pを採用している。純正品はこれが取り外し可能で、基礎ソフトを導入した状態のマイコンを追加購入することで、入れ替えることができる。つまり、同一のプログラムを書き込んだATmega328PとArduinoを置き換えることで、上手くいったシステムを、Arduinoを追加購入することなく追加生産可能である。
制御されるハード[編集]
Arduinoでサーボモータを制御するロボットハンドのキットなどがあるようだ[1]。
通常のラジコンを自動運転化(衝突回避)する事もできるらしい。
Arduino IDE[編集]
Arduino IDEは、Arduino用の代表的な統合開発環境。Sketch(スケッチ)と呼ばれるプログラムをC言語やC++に似た「Arduino言語」でプログラミングし、機械語にコンパイル後にファームウェアとしてマイコンボードに書き込む。
スケッチにはsetup()とloop()が必ず含まれる。
// 初期設定
void setup() {
}
// メインループ
void loop() {
}
割り込み処理も可能らしい。初心者はとりあえずLチカから組むのが良いらしい。
ArduinoでLチカ[編集]
LED_BUILTIN を使うと、オンボード上のLEDを使える。以下は10ミリ秒間隔でゆっくりと点灯と消灯を繰り返すだけのLチカ。
// 初期設定
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
// メインループ
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(10);
digitalWrite(LED_BUILTIN, LOW);
delay(10);
}
LEDを10個繋げて作ってみた。0~1023までは一応2進数で判別可能。
int n = 1;
int t = 5; //delay
//初期設定
void setup() {
for (int i=2; i <= 11; i++) {
pinMode(i, OUTPUT);
}
}
//メインループ
void loop() {
for (int i=1; i <= 5; i++) {
//左に
while(n < 512) {
put(n);
delay(t*3);
n = n << 1;
}
//右に
while(n > 1) {
put(n);
delay(t*3);
n = n >> 1;
}
}
//プラス
while(n < 1024) {
put(n);
delay(t);
n++;
}
//マイナス
while(n > 1) {
put(n);
delay(t);
n--;
}
}
//数値出力用関数
void put(int n) {
if (n & 1) { digitalWrite(2, HIGH);} else { digitalWrite(2, LOW);}
if (n & 2) { digitalWrite(3, HIGH);} else { digitalWrite(3, LOW);}
if (n & 4) { digitalWrite(4, HIGH);} else { digitalWrite(4, LOW);}
if (n & 8) { digitalWrite(5, HIGH);} else { digitalWrite(5, LOW);}
if (n & 16) { digitalWrite(6, HIGH);} else { digitalWrite(6, LOW);}
if (n & 32) { digitalWrite(7, HIGH);} else { digitalWrite(7, LOW);}
if (n & 64) { digitalWrite(8, HIGH);} else { digitalWrite(8, LOW);}
if (n & 128) { digitalWrite(9, HIGH);} else { digitalWrite(9, LOW);}
if (n & 256) { digitalWrite(10, HIGH);} else { digitalWrite(10, LOW);}
if (n & 512) { digitalWrite(11, HIGH);} else { digitalWrite(11, LOW);}
}
Arduinoでモーター制御[編集]
「モーター制御回路」も参照
モーター制御する回路組んでタミヤのクローラーに搭載するのも定番。PS3のコントローラーを使えるようにして無線操縦化している作例もある。ユニバーサルプレートが狭くて重心高くなってもまぁ気にしない。
ドローン作っている人もいた。
ラジコン用の機材を流用するとArduino使わないでも出来てしまうのは内緒。でも受信機からのPWMはすぐ読めるので便利だったり。
Arduinoで音を出す[編集]
圧電ブザーつないでtone()関数を使うと、指定した周波数の音が出せる。
13番ピンとGNDに圧電ブザーつないでドレミを鳴らすだけなら以下のようなスケッチで出来る。
int t = 500;
int pin = 13;
void setup() {
}
void loop() {
tone(pin,262); //ド
delay(t);
tone(pin,294); //レ
delay(t);
tone(pin,330,t); //ミ
delay(t*2);
}
矩形波ではなく正弦波で音を出したい場合は、「Mozzi」というライブラリを追加したりする模様。
何かメロディ流したい場合はtoneMelodyのサンプルプログラムを参考にした方が良さそう。まぁでもメロディIC使った方が早いような曲もあるので何とも。ちなみにカチューシャ (曲)を流したかったのだが、途中でめんどくさくなってしまった模様。
デバッグについて[編集]
動作確認で変数の値を追う時などは、Serial.println()等を使って値をシリアル出力して動作確認できる。「Arduino IDE」のツール > シリアルモニタ から様子を観察できるようにスケッチを工夫する。
他にも処理上でエラーになったりした時には、オンボード上のLEDを使ったり、圧電ブザー使って音で知らせるといった手がある。
その他[編集]
脚注[編集]
- ↑ “バイオニック ロボット ハンド(右)”. ロボショップ. 2019年12月1日確認。
関連項目[編集]
- ワンボードマイコン
外部リンク[編集]
- Arduino Products(英語) - 多数の種類が確認できる
- Arduino 日本語リファレンス - 翻訳されてる
- QiitaでのArduinoタグ - いろいろ作品例ある。
- #Arduino - Twitter