【2026年版】Arduinoのコードの書き方(コピペ可20選)|基礎から応用まで全てがわかる初心者の手引き

コード知識






【コピペ可】Arduinoコード集20選|センサー・LED・AI活用を初心者向けに解説











AI × Embedded Prototyping

AIとArduino。
コピペで動く20種類のコード集。

AIにArduinoのコードを書かせる方法を、超音波センサーの実例から丁寧に解説。さらに、LDR・PIR・DHT11・土壌水分・雨滴・MQ-2・炎・タッチ・ホール・NeoPixelなど、Arduino Uno/Nanoで試しやすい基本スケッチ20本を追加しました。

対象読者: Arduino初級〜中級者 対象ボード: Arduino Uno / Nano互換機 コード: 20本+解説例1本
全コードCOPY対応配線付きしきい値調整付きスマホ最適化
Arduinoと生成AIを使って電子工作のコードを作成するイメージ
Arduinoコードは、AIに生成させるだけでなく、配線・仕様・実測値と照合して育てていくことが重要です。
01

なぜAIでArduinoコードを書くのか

Arduinoの文法自体はシンプルですが、pinModeの設定漏れ、割り込みでのvolatile忘れ、センサー固有の換算式など、「知らないと詰まる」細部が多いのも事実です。AIはこうした定型知識の補完に強く、アイデアを電気信号に変換するまでの時間を短縮してくれます。基本関数の仕様は、最終的にArduino公式言語リファレンス ↗で確認してください。

ただし、AIの出力を無条件で書き込むのではなく、生成コードを読み、自分のボード・回路・センサー仕様とすり合わせることが前提です。

  • 定型処理を高速化:初期化、読み取り、PWM出力の下書き
  • 設計のたたき台:ピン配置、しきい値、状態遷移
  • デバッグの壁打ち:エラーや異常値から原因候補を整理
02

良いプロンプトの設計図

Arduino向けの指示には、最低限「ボード」「部品とピン」「動作条件」「実装方針」を含めます。

要素 内容
ボードと制約 機種、電源、メモリ Arduino Uno / 5V
ハードウェア センサー・出力・ピン HC-SR04(Trig=9, Echo=10)
動作条件 しきい値、タイミング 20cm未満で警告
非機能要件 delay禁止、コメントなど millis()で制御
PROMPTArduino Unoで、超音波センサーHC-SR04(Trig=9、Echo=10)を使い、物体との距離を測定してください。距離が20cm未満ならD8のブザーを鳴らし、D7のLEDを点滅。それ以外は停止。LED点滅とシリアル表示はmillis()で管理し、各処理に日本語コメントを付けてください。
POINT

「何を作るか」だけでなく、エラー時の扱い・タイムアウト・delay()の可否まで指定すると、実機向けのコードに近づきます。

03

生成されたスケッチ全文

既存記事の中心となるHC-SR04の接近警告コードです。後半の20選とは別に、AI生成コードを読む教材として残しています。

distance_alert.ino
// 超音波距離センサーによる接近警告システム
const int TRIG_PIN = 9;
const int ECHO_PIN = 10;
const int BUZZER_PIN = 8;
const int LED_PIN = 7;
const int THRESHOLD_CM = 20;
const unsigned long BLINK_INTERVAL = 200;
const unsigned long PRINT_INTERVAL = 500;

unsigned long lastBlinkTime = 0;
unsigned long lastPrintTime = 0;
bool ledState = false;

void setup() {
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(BUZZER_PIN, OUTPUT);
  pinMode(LED_PIN, OUTPUT);
  Serial.begin(9600);
}

float measureDistanceCm() {
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  long duration = pulseIn(ECHO_PIN, HIGH, 30000);
  if (duration == 0) return -1;
  return duration * 0.0343 / 2.0;
}

void loop() {
  unsigned long now = millis();
  float distance = measureDistanceCm();
  bool isAlert = (distance > 0 && distance < THRESHOLD_CM);

  if (isAlert) {
    digitalWrite(BUZZER_PIN, HIGH);
    if (now - lastBlinkTime >= BLINK_INTERVAL) {
      lastBlinkTime = now;
      ledState = !ledState;
      digitalWrite(LED_PIN, ledState);
    }
  } else {
    digitalWrite(BUZZER_PIN, LOW);
    digitalWrite(LED_PIN, LOW);
    ledState = false;
  }

  if (now - lastPrintTime >= PRINT_INTERVAL) {
    lastPrintTime = now;
    Serial.print("Distance: ");
    Serial.print(distance);
    Serial.println(" cm");
  }
}
04

コード解説:ブロック単位で読む

const int TRIG_PIN = 9;
ピン番号やしきい値を先頭の定数へ集約すると、配線変更や調整が一箇所で済みます。
pulseIn(ECHO_PIN, HIGH, 30000);
第3引数はタイムアウトです。未検出時に処理が長時間止まり続けることを避けます。
now – lastBlinkTime >= BLINK_INTERVAL
delay()で全体を止めず、経過時間でLEDだけを切り替える定石です。
distance > 0 && distance < THRESHOLD_CM
測定失敗時の-1を警告対象から外し、異常値を通常データと混同しません。
05

AI生成コードにありがちな落とし穴

CHECK 1

存在しないピン・関数・ライブラリ名が混ざることがあります。ボードと部品の公式資料を確認します。

CHECK 2

delay()がなくても、長いpulseIn()、大量のシリアル出力、重いループで反応が遅くなる場合があります。

CHECK 3

デジタルセンサーの検知時がHIGHかLOWか、アナログ値が増えるか減るかはモジュールにより異なります。

06

実機で検証し、対話で直す

書き込んだ後はシリアルモニタで生の値を確認します。動かない時は「鳴らない」だけでなく、配線、表示値、エラー全文、使用ボード、センサー型番をAIへ伝えます。

FOLLOW-UP PROMPTArduino Uno、HC-SR04、提示コードを使用しています。物体がない時もブザーが鳴ります。シリアルモニタではDistanceが-1.00です。測定失敗値を警告条件から除外し、変更箇所を説明してください。
07

20本を書き込む前の共通チェック

  • 各コードは1本ずつ別のスケッチとしてArduino IDEへ貼り付ける
  • 「ツール → ボード」「ツール → ポート」を実機に合わせる
  • Arduinoと外部電源・モジュールのGNDを共通化する
  • LEDには原則として電流制限抵抗を入れる
  • センサーのAO(アナログ)とDO(デジタル)を取り違えない
  • 最初はシリアルモニタで実測し、しきい値を自分の環境へ合わせる
LIBRARY

DHT11は「DHT sensor library by Adafruit」+「Adafruit Unified Sensor」、NeoPixelは「Adafruit NeoPixel」をライブラリマネージャーから追加します。それ以外の18本は標準機能のみです。

08

コピペですぐ試せるArduinoコード集20選

すべてArduino Uno/一般的なNano互換機を想定した独立スケッチです。検索欄に「温度」「LED」「雨」「磁石」などを入力すると対象コードだけに絞れます。

20 / 20件を表示
該当するコードがありません。別のキーワードで検索してください。
CODE 01

照度センサー(LDR)で暗くなるとLEDを自動点灯

周囲が暗いほどLEDを明るくする、自動ナイトライトの基本です。

入門ライブラリ:不要

必要部品

LDR(フォトレジスタ)、10kΩ抵抗、LED、220Ω抵抗

配線

LDRを5V側、10kΩ抵抗をGND側にした分圧の中点→A0/LEDアノード→D9(220Ω経由)/LEDカソード→GND

コードを表示・コピー
c01.ino
// LDRで暗くなるほどLEDを明るくする
const int LDR_PIN = A0;
const int LED_PIN = 9;  // PWM対応ピン

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

void loop() {
  int lightValue = analogRead(LDR_PIN);       // 0〜1023
  int brightness = map(lightValue, 0, 1023, 255, 0);
  brightness = constrain(brightness, 0, 255);

  analogWrite(LED_PIN, brightness);

  Serial.print("Light: ");
  Serial.print(lightValue);
  Serial.print(" / LED: ");
  Serial.println(brightness);
  delay(100);
}

調整ポイント:LDRと固定抵抗の上下を逆にすると明暗の値も逆になります。その場合はmap()の向きを反転してください。

20選の一覧へ戻る ↑

CODE 02

可変抵抗(ポテンショメータ)でLEDの明るさを調整

つまみの位置を0〜255へ変換し、PWMでLEDを滑らかに調光します。

入門ライブラリ:不要

必要部品

10kΩ可変抵抗、LED、220Ω抵抗

配線

可変抵抗の両端→5V/GND、中央端子→A0/LEDアノード→D9(220Ω経由)/カソード→GND

コードを表示・コピー
c02.ino
// 可変抵抗でLEDを調光する
const int POT_PIN = A0;
const int LED_PIN = 9;

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

void loop() {
  int potValue = analogRead(POT_PIN);           // 0〜1023
  int brightness = map(potValue, 0, 1023, 0, 255);
  analogWrite(LED_PIN, brightness);
  delay(10);
}

調整ポイント:Arduino Uno/NanoでanalogWrite()を使うLEDピンはPWM対応ピンを選びます。

20選の一覧へ戻る ↑

CODE 03

RGB LEDを赤・緑・青・白へ順番に点灯

3色のPWM出力を組み合わせ、RGB LEDの混色を学べます。

入門ライブラリ:不要

必要部品

4本足RGB LED(共通カソード)、220Ω抵抗×3

配線

R→D9、G→D10、B→D11(各220Ω経由)/共通カソード→GND

コードを表示・コピー
c03.ino
// 共通カソードRGB LEDの基本点灯
const int RED_PIN = 9;
const int GREEN_PIN = 10;
const int BLUE_PIN = 11;

void setColor(int red, int green, int blue) {
  analogWrite(RED_PIN, red);
  analogWrite(GREEN_PIN, green);
  analogWrite(BLUE_PIN, blue);
}

void setup() {
  pinMode(RED_PIN, OUTPUT);
  pinMode(GREEN_PIN, OUTPUT);
  pinMode(BLUE_PIN, OUTPUT);
}

void loop() {
  setColor(255, 0, 0);       // 赤
  delay(800);
  setColor(0, 255, 0);       // 緑
  delay(800);
  setColor(0, 0, 255);       // 青
  delay(800);
  setColor(255, 255, 255);   // 白
  delay(800);
  setColor(0, 0, 0);         // 消灯
  delay(400);
}

調整ポイント:共通アノード型を使う場合は0と255の意味が逆になるため、出力値を255-valueへ反転してください。

20選の一覧へ戻る ↑

CODE 04

NeoPixel(WS2812B)を虹色に流す

1本の信号線で複数のフルカラーLEDを制御します。

入門+ライブラリ:Adafruit NeoPixel

必要部品

NeoPixelリングまたはテープ(8灯想定)、330Ω抵抗、必要に応じて外部5V電源

配線

DIN→D6(330Ω経由)/5V→5V/GND→GND。外部電源使用時もArduinoとGNDを共通化

コードを表示・コピー
c04.ino
#include <Adafruit_NeoPixel.h>

const int PIXEL_PIN = 6;
const int PIXEL_COUNT = 8;

Adafruit_NeoPixel pixels(
  PIXEL_COUNT,
  PIXEL_PIN,
  NEO_GRB + NEO_KHZ800
);

uint16_t hue = 0;

void setup() {
  pixels.begin();
  pixels.setBrightness(40);  // 0〜255
  pixels.show();
}

void loop() {
  for (int i = 0; i < PIXEL_COUNT; i++) {
    uint16_t pixelHue = hue + (65536L / PIXEL_COUNT) * i;
    pixels.setPixelColor(i, pixels.gamma32(pixels.ColorHSV(pixelHue)));
  }

  pixels.show();
  hue += 256;
  delay(30);
}

調整ポイント:Arduino IDEのライブラリマネージャーで「Adafruit NeoPixel」をインストールしてください。多数点灯時はArduinoの5V端子だけで給電しないでください。

20選の一覧へ戻る ↑

CODE 05

PIR人感センサーで人を検知してLEDを点灯

人の動きを検知するとLEDを点灯する、防犯灯の基本構成です。

入門ライブラリ:不要

必要部品

HC-SR501などのPIR人感センサー、LED、220Ω抵抗

配線

PIR OUT→D2、VCC→5V、GND→GND/LED→D8(220Ω経由)

コードを表示・コピー
c05.ino
// PIR人感センサーでLEDを点灯
const int PIR_PIN = 2;
const int LED_PIN = 8;

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

void loop() {
  bool detected = digitalRead(PIR_PIN) == HIGH;
  digitalWrite(LED_PIN, detected ? HIGH : LOW);

  Serial.println(detected ? "Motion detected" : "No motion");
  delay(200);
}

調整ポイント:PIRセンサーは電源投入直後に安定するまで時間がかかります。最初の30〜60秒程度は誤検知しても故障とは限りません。

20選の一覧へ戻る ↑

CODE 06

DHT11で温度と湿度をシリアル表示

室温と湿度を2秒ごとに測定し、シリアルモニタへ表示します。

入門+ライブラリ:DHT sensor library

必要部品

DHT11モジュール

配線

DATA→D4、VCC→5V、GND→GND。裸の4ピンDHT11ではDATAと5V間に10kΩプルアップ抵抗を追加

コードを表示・コピー
c06.ino
#include <DHT.h>

const int DHT_PIN = 4;
#define DHT_TYPE DHT11

DHT dht(DHT_PIN, DHT_TYPE);

void setup() {
  Serial.begin(9600);
  dht.begin();
}

void loop() {
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();

  if (isnan(humidity) || isnan(temperature)) {
    Serial.println("DHT11 read error");
    delay(2000);
    return;
  }

  Serial.print("Temperature: ");
  Serial.print(temperature, 1);
  Serial.print(" C / Humidity: ");
  Serial.print(humidity, 1);
  Serial.println(" %");

  delay(2000);
}

調整ポイント:ライブラリマネージャーで「DHT sensor library by Adafruit」と依存ライブラリ「Adafruit Unified Sensor」を導入してください。

20選の一覧へ戻る ↑

CODE 07

TMP36アナログ温度センサーで室温を測る

アナログ電圧を摂氏温度へ換算する、センサー計算の基本です。

入門ライブラリ:不要

必要部品

TMP36

配線

平らな面を手前にして左→5V、中央→A0、右→GND

コードを表示・コピー
c07.ino
// TMP36の出力電圧から摂氏温度を計算
const int TMP36_PIN = A0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  int raw = analogRead(TMP36_PIN);
  float voltage = raw * (5.0 / 1023.0);
  float temperatureC = (voltage - 0.5) * 100.0;

  Serial.print("Temperature: ");
  Serial.print(temperatureC, 1);
  Serial.println(" C");

  delay(1000);
}

調整ポイント:TMP36とLM35は換算式が異なります。部品名を確認してから使ってください。

20選の一覧へ戻る ↑

CODE 08

土壌水分センサーで乾燥を検知

土が乾いたらLEDとブザーで知らせる、鉢植えモニターの基本です。

入門ライブラリ:不要

必要部品

土壌水分センサーモジュール、LED、ブザー

配線

AO→A0、VCC→5V、GND→GND/LED→D7/アクティブブザー→D8

コードを表示・コピー
c08.ino
// 土が乾燥したらLEDとブザーで通知
const int SOIL_PIN = A0;
const int LED_PIN = 7;
const int BUZZER_PIN = 8;
const int DRY_THRESHOLD = 700;

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

void loop() {
  int soilValue = analogRead(SOIL_PIN);
  bool isDry = soilValue >= DRY_THRESHOLD;

  digitalWrite(LED_PIN, isDry ? HIGH : LOW);
  digitalWrite(BUZZER_PIN, isDry ? HIGH : LOW);

  Serial.print("Soil: ");
  Serial.println(soilValue);
  delay(500);
}

調整ポイント:モジュールにより乾燥時の値が高い場合と低い場合があります。最初に乾燥・湿潤の実測値をシリアルモニタで確認してください。

20選の一覧へ戻る ↑

CODE 09

雨滴センサーで濡れを検知してブザーを鳴らす

センサープレートの濡れ具合をアナログ値で読み、雨を検知します。

入門ライブラリ:不要

必要部品

雨滴センサーモジュール、アクティブブザー

配線

AO→A0、VCC→5V、GND→GND/ブザー→D8

コードを表示・コピー
c09.ino
// 雨滴を検知するとブザーを鳴らす
const int RAIN_PIN = A0;
const int BUZZER_PIN = 8;
const int WET_THRESHOLD = 500;

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

void loop() {
  int rainValue = analogRead(RAIN_PIN);
  bool isWet = rainValue < WET_THRESHOLD;

  digitalWrite(BUZZER_PIN, isWet ? HIGH : LOW);

  Serial.print("Rain sensor: ");
  Serial.println(rainValue);
  delay(300);
}

調整ポイント:多くのモジュールは濡れるほど値が小さくなります。逆の場合は比較演算子を反転してください。

20選の一覧へ戻る ↑

CODE 10

水位センサーで低・中・高の3段階表示

水位に応じて3個のLEDを段階点灯します。

入門ライブラリ:不要

必要部品

水位センサー、LED×3、220Ω抵抗×3

配線

S→A0、+→5V、-→GND/緑LED→D5、黄LED→D6、赤LED→D7

コードを表示・コピー
c10.ino
// 水位を3段階のLEDで表示
const int WATER_PIN = A0;
const int LOW_LED = 5;
const int MID_LED = 6;
const int HIGH_LED = 7;

void setup() {
  pinMode(LOW_LED, OUTPUT);
  pinMode(MID_LED, OUTPUT);
  pinMode(HIGH_LED, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int level = analogRead(WATER_PIN);

  digitalWrite(LOW_LED, level >= 200);
  digitalWrite(MID_LED, level >= 450);
  digitalWrite(HIGH_LED, level >= 700);

  Serial.print("Water level: ");
  Serial.println(level);
  delay(300);
}

調整ポイント:水位センサーは長時間通電すると電極が腐食しやすいため、試作では必要な時だけ給電する設計も検討してください。

20選の一覧へ戻る ↑

CODE 11

音センサーで手拍子を検知しLEDをON/OFF

音の立ち上がりを1回だけ拾い、手拍子のたびにLEDを反転します。

入門+ライブラリ:不要

必要部品

デジタル出力付き音センサーモジュール、LED、220Ω抵抗

配線

DO→D2、VCC→5V、GND→GND/LED→D9

コードを表示・コピー
c11.ino
// 手拍子でLEDをトグルする
const int SOUND_PIN = 2;
const int LED_PIN = 9;
const int SOUND_ACTIVE = LOW;
const unsigned long COOLDOWN_MS = 250;

bool ledState = false;
int lastSoundState = HIGH;
unsigned long lastTriggerTime = 0;

void setup() {
  pinMode(SOUND_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  int currentState = digitalRead(SOUND_PIN);
  unsigned long now = millis();

  bool newSound = (currentState == SOUND_ACTIVE &&
                   lastSoundState != SOUND_ACTIVE);

  if (newSound && now - lastTriggerTime >= COOLDOWN_MS) {
    lastTriggerTime = now;
    ledState = !ledState;
    digitalWrite(LED_PIN, ledState);
  }

  lastSoundState = currentState;
}

調整ポイント:モジュールによって検知時HIGH/LOWが異なります。動かない場合はSOUND_ACTIVEをHIGHへ変更してください。

20選の一覧へ戻る ↑

CODE 12

MQ-2ガスセンサーで濃度上昇を警告

センサー値が設定値を超えた時に警告します。

入門+ライブラリ:不要

必要部品

MQ-2ガスセンサーモジュール、LED、アクティブブザー

配線

AO→A0、VCC→5V、GND→GND/LED→D7/ブザー→D8

コードを表示・コピー
c12.ino
// MQ-2の値がしきい値を超えたら警告
const int MQ2_PIN = A0;
const int LED_PIN = 7;
const int BUZZER_PIN = 8;
const int GAS_THRESHOLD = 400;
const unsigned long WARMUP_MS = 20000;

void setup() {
  pinMode(LED_PIN, OUTPUT);
  pinMode(BUZZER_PIN, OUTPUT);
  Serial.begin(9600);
  Serial.println("MQ-2 warming up...");
}

void loop() {
  int gasValue = analogRead(MQ2_PIN);
  bool ready = millis() >= WARMUP_MS;
  bool alert = ready && gasValue >= GAS_THRESHOLD;

  digitalWrite(LED_PIN, alert ? HIGH : LOW);
  digitalWrite(BUZZER_PIN, alert ? HIGH : LOW);

  Serial.print("MQ-2: ");
  Serial.println(gasValue);
  delay(300);
}

調整ポイント:MQ-2は十分な予熱と校正が必要です。このコードは電子工作の学習用で、火災報知器・ガス警報器など人命に関わる用途には使えません。

20選の一覧へ戻る ↑

CODE 13

炎センサーで火炎を検知して警報

デジタル出力の炎センサーを使った最小構成の警報です。

入門ライブラリ:不要

必要部品

炎センサーモジュール、LED、アクティブブザー

配線

DO→D2、VCC→5V、GND→GND/LED→D7/ブザー→D8

コードを表示・コピー
c13.ino
// 炎を検知するとLEDとブザーを作動
const int FLAME_PIN = 2;
const int LED_PIN = 7;
const int BUZZER_PIN = 8;
const int FLAME_ACTIVE = LOW;

void setup() {
  pinMode(FLAME_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);
  pinMode(BUZZER_PIN, OUTPUT);
}

void loop() {
  bool flameDetected = digitalRead(FLAME_PIN) == FLAME_ACTIVE;

  digitalWrite(LED_PIN, flameDetected ? HIGH : LOW);
  digitalWrite(BUZZER_PIN, flameDetected ? HIGH : LOW);
  delay(50);
}

調整ポイント:一般的なモジュールは検知時LOWですが、製品により逆の場合があります。また、学習用であり安全装置の代替にはなりません。

20選の一覧へ戻る ↑

CODE 14

赤外線障害物センサーで接近物を検知

物体が近づいた時だけLEDを点灯します。ロボットの衝突回避の入口になります。

入門ライブラリ:不要

必要部品

赤外線障害物回避センサーモジュール、LED、220Ω抵抗

配線

OUT→D3、VCC→5V、GND→GND/LED→D8

コードを表示・コピー
c14.ino
// 赤外線障害物センサーでLEDを点灯
const int IR_PIN = 3;
const int LED_PIN = 8;
const int DETECTED_STATE = LOW;

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

void loop() {
  bool obstacle = digitalRead(IR_PIN) == DETECTED_STATE;
  digitalWrite(LED_PIN, obstacle ? HIGH : LOW);
  Serial.println(obstacle ? "Obstacle" : "Clear");
  delay(100);
}

調整ポイント:黒色・透明・光沢面、強い外光では検出距離が変わります。基板上の可変抵抗で感度を調整してください。

20選の一覧へ戻る ↑

CODE 15

リードスイッチでドアの開閉を検知

磁石が離れてドアが開くとLEDを点灯します。

入門ライブラリ:不要

必要部品

リードスイッチ、磁石、LED、220Ω抵抗

配線

リードスイッチの片側→D2、反対側→GND/LED→D8。INPUT_PULLUPを使用

コードを表示・コピー
c15.ino
// ドアが開いたらLEDを点灯
const int REED_PIN = 2;
const int LED_PIN = 8;

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

void loop() {
  bool doorOpen = digitalRead(REED_PIN) == HIGH;
  digitalWrite(LED_PIN, doorOpen ? HIGH : LOW);
  Serial.println(doorOpen ? "Door open" : "Door closed");
  delay(100);
}

調整ポイント:使用するリードスイッチが常開型か常閉型かで判定が変わります。コードは磁石接近時に導通する常開型を想定しています。

20選の一覧へ戻る ↑

CODE 16

傾斜センサーで転倒・傾きを検知

傾きを検知すると短い警告音を繰り返します。

入門ライブラリ:不要

必要部品

ボール式傾斜スイッチ、パッシブブザー

配線

傾斜スイッチの片側→D2、反対側→GND/パッシブブザー+→D9、−→GND

コードを表示・コピー
c16.ino
// 傾斜を検知すると断続音を鳴らす
const int TILT_PIN = 2;
const int BUZZER_PIN = 9;
const unsigned long BEEP_INTERVAL = 500;

unsigned long lastBeepTime = 0;
bool beepOn = false;

void setup() {
  pinMode(TILT_PIN, INPUT_PULLUP);
  pinMode(BUZZER_PIN, OUTPUT);
}

void loop() {
  bool tilted = digitalRead(TILT_PIN) == LOW;
  unsigned long now = millis();

  if (tilted && now - lastBeepTime >= BEEP_INTERVAL) {
    lastBeepTime = now;
    beepOn = !beepOn;
    if (beepOn) tone(BUZZER_PIN, 1200);
    else noTone(BUZZER_PIN);
  }

  if (!tilted) {
    noTone(BUZZER_PIN);
    beepOn = false;
  }
}

調整ポイント:傾斜スイッチは振動で細かくON/OFFするため、実製品ではより長いデバウンスや姿勢センサーが必要です。

20選の一覧へ戻る ↑

CODE 17

TTP223タッチセンサーでLEDを切り替える

タッチするたびにLEDのON/OFFを切り替えます。

入門ライブラリ:不要

必要部品

TTP223静電容量タッチセンサーモジュール、LED、220Ω抵抗

配線

SIG→D2、VCC→5V、GND→GND/LED→D9

コードを表示・コピー
c17.ino
// タッチするたびにLEDを反転
const int TOUCH_PIN = 2;
const int LED_PIN = 9;
const unsigned long DEBOUNCE_MS = 80;

bool ledState = false;
int lastTouchState = LOW;
unsigned long lastChangeTime = 0;

void setup() {
  pinMode(TOUCH_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  int currentState = digitalRead(TOUCH_PIN);
  unsigned long now = millis();

  if (currentState == HIGH && lastTouchState == LOW &&
      now - lastChangeTime >= DEBOUNCE_MS) {
    lastChangeTime = now;
    ledState = !ledState;
    digitalWrite(LED_PIN, ledState);
  }

  lastTouchState = currentState;
}

調整ポイント:押し続けた間に何度も反転しないよう、立ち上がりだけを検出しています。

20選の一覧へ戻る ↑

CODE 18

ホールセンサーA3144で回転数(RPM)を測定

磁石が1回通過するたびに割り込みで数え、1秒ごとにRPMへ換算します。

基礎+ライブラリ:不要

必要部品

A3144ホールセンサー、磁石、10kΩ抵抗(モジュール型では不要な場合あり)

配線

OUT→D2、VCC→5V、GND→GND。裸のA3144ではOUTを10kΩで5Vへプルアップ

コードを表示・コピー
c18.ino
// A3144で1秒ごとに回転数を計算
const int HALL_PIN = 2;  // Unoの外部割り込み対応ピン
const int MAGNETS_PER_REV = 1;
const unsigned long SAMPLE_MS = 1000;

volatile unsigned long pulseCount = 0;
unsigned long lastSampleTime = 0;

void countPulse() {
  pulseCount++;
}

void setup() {
  pinMode(HALL_PIN, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(HALL_PIN), countPulse, FALLING);
  Serial.begin(9600);
}

void loop() {
  unsigned long now = millis();

  if (now - lastSampleTime >= SAMPLE_MS) {
    noInterrupts();
    unsigned long pulses = pulseCount;
    pulseCount = 0;
    interrupts();

    float minutes = SAMPLE_MS / 60000.0;
    float rpm = pulses / (float)MAGNETS_PER_REV / minutes;

    Serial.print("RPM: ");
    Serial.println(rpm, 1);
    lastSampleTime = now;
  }
}

調整ポイント:コードは磁石1個を想定しています。磁石を2個付ける場合はMAGNETS_PER_REVを2へ変更してください。

20選の一覧へ戻る ↑

CODE 19

アナログジョイスティックで2個のLEDを調光

X軸とY軸をそれぞれLEDの明るさへ割り当てます。押し込みで両方消灯します。

入門ライブラリ:不要

必要部品

XYジョイスティックモジュール、LED×2、220Ω抵抗×2

配線

VRx→A0、VRy→A1、SW→D2、VCC→5V、GND→GND/LED1→D5、LED2→D6

コードを表示・コピー
c19.ino
// ジョイスティックのX/YでLEDを調光
const int X_PIN = A0;
const int Y_PIN = A1;
const int SW_PIN = 2;
const int X_LED = 5;
const int Y_LED = 6;

void setup() {
  pinMode(SW_PIN, INPUT_PULLUP);
  pinMode(X_LED, OUTPUT);
  pinMode(Y_LED, OUTPUT);
}

void loop() {
  int xValue = analogRead(X_PIN);
  int yValue = analogRead(Y_PIN);
  bool pressed = digitalRead(SW_PIN) == LOW;

  int xBrightness = map(xValue, 0, 1023, 0, 255);
  int yBrightness = map(yValue, 0, 1023, 0, 255);

  if (pressed) {
    xBrightness = 0;
    yBrightness = 0;
  }

  analogWrite(X_LED, xBrightness);
  analogWrite(Y_LED, yBrightness);
  delay(10);
}

調整ポイント:ジョイスティック中央値は個体差があり、必ずしも512ちょうどにはなりません。

20選の一覧へ戻る ↑

CODE 20

ロータリーエンコーダでLEDの明るさを段階調整

つまみを左右に回すと明るさが増減し、押し込みで消灯します。

基礎+ライブラリ:不要

必要部品

KY-040などのロータリーエンコーダ、LED、220Ω抵抗

配線

CLK→D2、DT→D3、SW→D4、+→5V、GND→GND/LED→D9

コードを表示・コピー
c20.ino
// ロータリーエンコーダでLED調光
const int CLK_PIN = 2;
const int DT_PIN = 3;
const int SW_PIN = 4;
const int LED_PIN = 9;

int brightness = 128;
int lastClkState;

void setup() {
  pinMode(CLK_PIN, INPUT_PULLUP);
  pinMode(DT_PIN, INPUT_PULLUP);
  pinMode(SW_PIN, INPUT_PULLUP);
  pinMode(LED_PIN, OUTPUT);

  lastClkState = digitalRead(CLK_PIN);
  analogWrite(LED_PIN, brightness);
}

void loop() {
  int clkState = digitalRead(CLK_PIN);

  if (clkState != lastClkState && clkState == LOW) {
    if (digitalRead(DT_PIN) != clkState) brightness += 16;
    else brightness -= 16;

    brightness = constrain(brightness, 0, 255);
    analogWrite(LED_PIN, brightness);
  }

  if (digitalRead(SW_PIN) == LOW) {
    brightness = 0;
    analogWrite(LED_PIN, brightness);
    delay(180);  // ボタンの簡易デバウンス
  }

  lastClkState = clkState;
}

調整ポイント:機械式エンコーダはチャタリングが出ます。本コードは最小構成なので、必要に応じて時間ベースのデバウンスを追加してください。

20選の一覧へ戻る ↑

09

よくある質問とまとめ

このコードはArduino Nanoでも使えますか?

ATmega328P搭載の一般的なNano互換機なら、多くの例を同じピン番号で使用できます。ただし、互換機によってUSBドライバや電源仕様が異なるため、書き込み前にボード設定を確認してください。

コードをコピペしても動かない時は?

ボードとポート、GND、電源電圧、LEDの向き、ピン番号、AO/DO、しきい値、ライブラリの順に確認します。まずセンサー値だけをシリアル表示すると原因を切り分けやすくなります。

外部ライブラリが必要な例は?

DHT11とNeoPixelの2本です。ライブラリ導入後にIDEを再起動し、ヘッダーが見つからないエラーが消えるか確認してください。

MQ-2・炎センサーを防災用途へ使えますか?

本記事は学習・試作用です。人命や財産に関わる検知には、認証された製品と専門的な安全設計を使用してください。

まずは部品が少ない「LDR」「可変抵抗」「PIR」のどれか1本を動かし、シリアルモニタで値を見るところから始めると失敗しにくくなります。動いたコードに対して、AIへ「delayをmillisへ変更」「LEDをブザーへ変更」「しきい値を可変抵抗で調整」と追加依頼すれば、同じ回路から次の作品へ発展できます。

AI × ARDUINO GUIDE — 実機で確かめながら、回路とコードを育てていきましょう。



関連記事

特集記事

コメント

この記事へのコメントはありません。

TOP
CLOSE