Arduino

出典: 謎の百科事典もどき『エンペディア(Enpedia)』
ナビゲーションに移動 検索に移動
Arduino Uno
「ATmega328P」を採用している。
幾つも種類があるArduino
Arduino IDE(統合開発環境

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()が必ず含まれる。

arduino
// 初期設定
void setup() {
}

// メインループ
void loop() {
}

割り込み処理も可能らしい。初心者はとりあえずLチカから組むのが良いらしい。

ArduinoでLチカ[編集]

LED_BUILTIN を使うと、オンボード上のLEDを使える。以下は10ミリ秒間隔でゆっくりと点灯と消灯を繰り返すだけのLチカ。

arduino
// 初期設定
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進数で判別可能。

arduino
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でモーター制御[編集]

「Arduino Pro Mini」を使用した作例

モーター制御回路」も参照

モーター制御する回路組んでタミヤのクローラーに搭載するのも定番。PS3のコントローラーを使えるようにして無線操縦化している作例もある。ユニバーサルプレートが狭くて重心高くなってもまぁ気にしない。

ドローン作っている人もいた。

ラジコン用の機材を流用するとArduino使わないでも出来てしまうのは内緒。でも受信機からのPWMはすぐ読めるので便利だったり。

Arduinoで音を出す[編集]

圧電ブザーつないでtone()関数を使うと、指定した周波数の音が出せる。

13番ピンとGNDに圧電ブザーつないでドレミを鳴らすだけなら以下のようなスケッチで出来る。

arduino
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を使ったり、圧電ブザー使って音で知らせるといった手がある。

その他[編集]

脚注[編集]

  1. バイオニック ロボット ハンド(右)”. ロボショップ. 2019年12月1日確認。

関連項目[編集]

外部リンク[編集]