文化祭は自作電子銃でサバゲ― 第2回

前回までのおはなし

この記事は、とある普通の都立高校のパソコン系の部活が、文化祭で電子銃を使ったサバゲ―をやった記録になります。前回まではリモコンの赤外線を受信する受信機についてのおはなしでした。今回は、受信機で使用したArduino UNO R3のプログラムに関する話題になります。

この記事は、Arduino UNO R3で開発を始めるための最短ルートです。
Windows / macOS 共通で、ダウンロード → ドライバ → IDE初期設定 → ライブラリ導入 → 動作確認 → 書き込みまでを一気にまとめました。
最後に赤外線受信(IRremote v4系)+LED+ブザーの最小サンプルも置いてあります。

目次

Step 1. Arduino IDEを入手

  1. Arduino公式サイトから最新版をダウンロード (Windows/Mac/Linux対応)
  2. インストールウィザードに従ってセットアップ

Step2. IDEの初期設定(最初の一回だけ)

  1. USBケーブルで UNO R3 をPCに接続
  2. Arduino IDE を起動
  3. メニューから設定
    • ツール → ボード → Arduino AVR Boards → Arduino Uno
    • ツール → ポート → 「Arduino Uno」と表示のあるポートを選択
      • Windows:COM3 など
      • macOS:/dev/cu.usbmodem*** など

ポートが出ない:ケーブルが充電専用でないか、ドライバ不足でないか確認。

IRremoteとは

  • Arduinoで赤外線リモコン信号を送受信するための代表的なライブラリ
  • 38kHz変調をソフトウェアで生成し、さまざまな形式(NEC, Sony, RC5等)のIRコードを送信/受信できる。

Step 1. ライブラリをインストール

  1. Arduino IDE上のメニュー「スケッチ → ライブラリを管理 (Manage Libraries)」を開く
  2. 検索窓に IRremote と入力
  3. IRremote by Arduino」(作者名がArmin Joachimsmeyerなど)をインストール
    • バージョンが複数あれば最新推奨
    • [ここに古い関数名と新しい関数名の対応表]

注意: 2021年以降、IRremoteの構造が変わり、sendNEC(), **sendSony()**など関数名がアップデートされました。最新のサンプルを参考に。

Arduino UNO R3 にプログラムを書き込む手順(定型)

  1. USB接続(ボードLEDが点くことを確認)
  2. ツール → ボード:Arduino Uno を選択
  3. ツール → ポート:Arduino Uno を選択
  4. エディタにスケッチ(プログラム)を貼り付け・保存
  5. 上部の**✓ 検証**(エラーがないか確認)
  6. → 書き込み
  7. 下部のステータスバーに 「ボードへ書き込みが完了しました」 と出れば成功

最小サンプル:IR受信でLED点灯+ブザー鳴動(IRremote v4系)

前提:

  • IR受信モジュール OUT → D11VCC → 5VGND → GND
  • LED 短足(−) → GND / 長足(+) → D9(必要なら330Ω直列)
  • ブザー − → GND / + → D8(有極圧電ブザー推奨)
// ====== Arduino UNO R3 + IRremote v4.x 最小サンプル ======
// リモコンの赤外線を受信したらLED点灯&ブザー短鳴動

// ライブラリ: IRremote by Armin Joachimsmeyer (v4系)
#include 

// --- ピン設定 ---
const uint8_t IR_PIN  = 11; // IR受信モジュールのOUT
const uint8_t LED_PIN = 9;  // LED(抵抗を直列に)
const uint8_t BUZ_PIN = 8;  // ブザー(有極圧電がおすすめ)

// --- 鳴動/点灯時間(ミリ秒)---
const uint16_t REACT_MS = 120;

void setup() {
  pinMode(LED_PIN, OUTPUT);
  pinMode(BUZ_PIN, OUTPUT);

  // v4系API: 第2引数に LEDフィードバック有効可
  IrReceiver.begin(IR_PIN, ENABLE_LED_FEEDBACK);

  // シリアルは任意(デバッグ表示用)
  Serial.begin(9600);
  Serial.println(F("IR demo ready (IRremote v4.x)."));
}

void loop() {
  if (IrReceiver.decode()) {
    // 受信できた
    // デバッグ(必要ならコメント解除)
    // IrReceiver.printIRResultShort(&Serial);
    // Serial.println();

    // リアクション
    digitalWrite(LED_PIN, HIGH);
    tone(BUZ_PIN, 1000);          // 1kHzで短く鳴らす
    delay(REACT_MS);
    noTone(BUZ_PIN);
    digitalWrite(LED_PIN, LOW);

    IrReceiver.resume();          // 次の受信に備える
  }

  // 必要に応じて軽いクールダウン
  delay(5);
}

参考リンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次