センサを使った入力

続いて、センサを使ってLEDの光を制御してみましょう。次のプログラムを打ち込みます。

  void setup() {
    pinMode(13, OUTPUT);
  }
 
  void loop() {
    int val = analogRead(0);
    if (val < 255) {
      digitalWrite(13, HIGH);
    } else {
      digitalWrite(13, LOW);
    }
  }

このプログラムを走らせるには先ほどのLEDに加えて、光センサが必要です。光センサは前回購入したキットに付属しています。

光センサ(クリックで拡大)

これを次の図のように取り付け、プログラムを走らせます。1kΩの抵抗は茶・黒・赤・金の帯のものです。抵抗の読み方は「抵抗器(Wikipedia)」を参考にしてください。また、キットのセット内容にも記載されています。

光センサとArduinoを接続する(クリックで拡大)

センサに手をかざし、LEDが光れば、プログラムが期待通りに動いています。

このプログラムには、先ほどのプログラムよりも直感的でない点があるので、簡単に解説をします。このプログラムのポイントはセンサが出力する電圧値の読み取りです。光センサは光の強さを読み取り、電圧値を変化させます。Arduinoはこの電圧値を読み取り、数値に変換します。Arduinoでは電圧値を読み取るために、デジタル入力とアナログ入力が使えます。今回使用しているのはアナログ入力で、Arduinoが電圧を読み取り、0から1023の値に変換して、プログラムに伝えてくれます。それが6行目のanalogRead関数です。

 analogRead([ピン番号]);

今回組んだ光センサの回路は、明るい場合に電圧が高くなり、暗い場合に電圧が低くなります。つまり、この電圧をanalogRead()を読み取ると、最も明るい場合には1023に、最も暗い場合には0が返ります。あとは、この値を使って、Arduinoに好きなことをさせます。今回は暗い場合にLEDを光らせています。

  // しきい値を255に設定、LEDを光らせたい明るさによって調整する、大きくすれば少し暗くしただけで、LEDが光るようになる
  if (val < 255) {
    // LED点灯
    digitalWrite(13, HIGH);
  } else {
    // LED消灯
    digitalWrite(13, LOW);
  }

ここまでわかれば、先ほどのプログラムを理解できるはずです。色々と自分なりに改良してみてください。

[tips] ブレッドボード

プロトタイプを作る上で必須なボードです。何かアイデアが思い浮かんだら、まずはこの上で回路を組みます。想定通りの挙動になったら、実際に基盤にパーツをハンダ付けして回路を完成させます。ソフトウェア開発には必須なサンドボックス環境みたいなものです。

ブレッドボード(クリックで拡大)

全ての穴が独立しているように見えますが、実は中でつながっています。これを頭に入れておくと回路がスムーズに組めます。

(クリックで拡大)
[tips] センサのデバッグ

センサをデバッグするには、前回購入したテスタを使用する方法と、シリアル通信を使う方法の二種類があります。テスタを使ってデバッグするには、前回のデバッグ方法と同じく、テスタのつまみを20Vにセットし、赤いコードを5Vのピンに、黒いコードを電圧を読み取っているピンに接続します。そうすると、光の強さによって電圧が変化するのが確認できるはずです。もし、電圧が変化しない場合は、回路が間違っているか、テスタを接続する箇所が間違っています。

テスタを使ったセンサのデバッグ(クリックで拡大)

シリアル通信を使う場合は、次のようにプログラムを変更します。

  void setup() {
    Serial.begin(9800); // シリアル通信の設定
    pinMode(13, OUTPUT);
  }
 
  void loop() {
    int val = analogRead(0);
    Serial.println(val); // 読み取った値をシリアル通信でPCに転送する。
    if (val < 255) {
      digitalWrite(13, HIGH);
    } else {
      digitalWrite(13, LOW);
    }
    delay(500); // コンソールの出力を読みやすくするために、次の読み取りまで500ms待つ。
  }

そうすると、Arduinoのコンソールに読み取った値が出力されます。

シリアル通信で読み取った値がコンソールに表示される(クリックで拡大)

このように、テスタとシリアル入力を活用して、センサの入力をデバッグしていきます。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30