Arduino
PR

光センサを使ったロボットを作ろう|部屋が暗いと自動でライトがつく

アイキャッチ:光センサ
CHA
記事内に商品プロモーションを含む場合があります

みなさんは部屋が暗いときどうしますか?
自分でスイッチを入れて電気をつける人がほとんどでしょう。

ロボットが勝手に電気をつけてくれたらちょっと面白いと思いませんか?
部屋の天井についている電気をつけることはできないのですが、ロボットに取り付けたLEDライトなら可能です!

部屋の明るさ・暗さを判断できる光センサとLEDライトを用いて、光に反応するロボットを作ってみましょう!

今回の記事で解説すること
  • 光センサの種類
    • CdSセル、フォトトランジスタ
  • ・光センサの使い方
  • ・光に反応するロボットの作り方

私のブログで登場するロボットはArduinoを搭載した車輪ロボット「NR-02」です。
下記記事のArduinoを始めるならこれを買えばOKの見出しで必要なパーツを紹介しています。

スポンサーリンク

解説動画

今回の記事はこちらの動画をまとめたものです。

光センサを使うことでできるようになること

部屋が暗くなると勝手にLEDライトがついた!という仕掛けを作ることができます。

左:明るい部屋でLED消灯、右:暗い部屋でLED点灯

ライトをつけるのにスイッチを押して、ON/OFFをするのが一般的です。
しかし今回の光センサは、部屋の明るさ・暗さを感知してライトをつけることができるのです!

CHA
CHA

我が家の時計にも使われていました!

1時間ごとに音が鳴り、夜になってみんなが寝たら(部屋が暗くなったら)鳴らない時計があります。
光センサで部屋の暗さを感知して、音を鳴らすか鳴らさないか判断していたのです!

光センサの種類

光センサの種類としてCdSセルとフォトトランジスタを紹介します。

CdSセル(光導電セル)

CdSとは硫化カドミウムのことです。
光が当たると抵抗値が小さくなります。
つまり光の量によって抵抗値が変化する光センサです。

硫化カドミウムは有毒性のため、国によっては禁止されています。

フォトトランジスタ

フォトダイオードとトランジスタを合わせたものです。

フォトダイオード:光が当たると流れる電流の量が増える
トランジスタ:変化量を増幅させる

フォトダイオードだけでは変化量が小さいのでトランジスタで増幅させたのが、フォトトランジスタです。
つまりフォトトランジスタは光の量によって電流値が変化する光センサです。

CdSセルの使い方

Arduinoを使ってanalogReadの値を読む場合のCdSセルの使い方です。

CdSセルの回路図

上図のように、5V、CdSセル、10kΩ抵抗、グランドを順に繋ぎます。
この10kΩにかかる電圧をArduinoに取り込むので、10kΩの上位側(グランドと反対側)をA0に繋ぎましょう!

回路図では難しい…と言う方のために、配線図も用意しました。

ブレッドボードを用いた配線図

難しい人は配線図通りに配線してみてくださいね!
この回路は一例であって、別の形でもCdSセルを使って光の量を判断することができます。
電気が得意な人は他の回路も自作してみてください!

CdSセルを使った場合のanalogReadの値

この配線図だとanalogReadの値、つまり10kΩにかかる電圧はどのように変化するでしょう。

CdSセルの仕組み

CdSセルは光が当たると抵抗値が小さくなります。
抵抗が小さいということは、電流値が大きいということです。
そのため10kΩに流れる電流も大きくなります。

明るい場合暗い場合
光の量多い少ない
CdSセルの抵抗値小さい大きい
CdSセルの電流値大きい小さい
直列に繋がれた
10kΩ抵抗の電流値
大きい小さい
10kΩの電圧値
(電圧=抵抗×電流)
大きい小さい

つまり、明るい場合はanalogReadの値が大きくなり、暗い場合はanalogReadの値が小さくなります。

「実際に入ってくる値はどんな値?」
そう思った方もいるでしょう。

シリアルプロッタで読み取ることで実際の値を確認することができます。
測距センサの記事にてシリアルプロッタの使い方を解説しています。

フォトトランジスタの使い方

Arduinoを使ってanalogReadの値を読む場合のフォトトランジスタの使い方です。

フォトトランジスタの回路図

CdSセルをフォトトランジスタに変えただけです。

CHA
CHA

ただし!
フォトトランジスタには向きがあります!

足が短い方、つまりパーツが丸い部分でなく直線部分の方(上の写真だと右側)をグランド側にしてください!

フォトトランジスタを使った場合のanalogReadの値

この回路図だとanalogReadの値はどのように変化するでしょう。

フォトトランジスタの仕組み

フォトトランジスタは光の量が多いと電流値も大きくなります。
よって10kΩに流れる電流値も大きくなり、10kΩの電圧値も大きくなります。

明るい場合暗い場合
光の量多い少ない
フォトトランジスタの電流値大きい小さい
直列に繋がれた
10kΩ抵抗の電流値
大きい小さい
10kΩの電圧値
(電圧=抵抗×電流)
大きい小さい

つまり、明るい場合はanalogReadの値が大きくなり、暗い場合はanalogReadの値が小さくなります。

analogReadの値はCdSセルとフォトトランジスタとで違うので、ぜひシリアルプロッタで確認してみてください!

光に反応するロボットを作る

暗くなるとライトが光るロボットを作ってみましょう。
今回は青色LEDを使用します。

ロボットに取り付けられたフォトトランジスタと青色LED

フォトトランジスタをブレッドボードに、青色LEDをロボットの先端に取り付けました。
青色LEDを含む全体の回路図は下記のとおりです。

フォトトランジスタとLEDの回路図

青色LEDからブレッドボードの間はシールドクリップで繋ぎました。

ブレッドボードには挿せないので、ブレッドボードに挿す部分は導線を準備してください。

ロボットが動きまわる場合は、シールドクリップで配線するのも良いです。
はんだ付けするよりは外れやすいので、ロボットが動きまわる場合ははんだ付けしたほうが良いでしょう。

CHA
CHA

はんだ付けは4点のコツを掴むと簡単ですよ♪

ソースコード

ソースコードは以下の通りです。

1const int PIN_LIGHT = 11;  //LEDライトのピン番号
2
3void setup() {
4  pinMode(PIN_LIGHT, OUTPUT);  //LEDのピンを出力に設定
5}
6
7void loop() {
8  int sensor_value;  //光センサの値
9
10  sensor_value = analogRead(A0);  //光センサの値を取得する
11  if (sensor_value < 25) {
12    //光センサの値が25より小さい場合
13    digitalWrite(PIN_LIGHT, HIGH);
14  } else {
15    digitalWrite(PIN_LIGHT, LOW);
16  }
17}

プログラムのポイント

プログラムのポイントを解説します。

今回のプログラムのポイント

フォトトランジスタで部屋の暗さを感知して、青色LEDを光らせるプログラム

  • analogRead→光センサの値を取り込む
  • if→取り込んだ値によってライトをつけるか消すかを判断
  • digitalWrite→ライトをON/OFFさせる

analogRead

光センサの値を入れる変数を作ります
今回はsensor_valueとしました。

sensor_value = analogRead(A0);

A0から取り込んだ値(今回は10kΩ抵抗にかかる電圧)を、sensor_valueの中に入れることができます。

if

もし部屋が暗い(光センサの値が小さい)ならばLEDを点灯させるというプログラムなのでif文を使います。

if文の説明

光センサの値が25より小さい場合としていますが、この25という数字は使うセンサや動作環境によって変化します。
シリアルプロッタで読み取ってベストな数字を入れてみてください。

digitalWrite

LEDライトのON/OFFをさせます。

digitalWrite(PIN_LIGHT HIGH);
digitalWrite(PIN_LIGHT LOW);

HIGHがON、LOWがOFFの意味です。
このON/OFFさせる出力プログラムをif文の中に組み込みましょう。

光センサを使ったロボットの動作確認

プログラムまで完成したら動作確認をしてみましょう。
(↓動作確認部分から再生されます。)

CHA
CHA

青色LEDかっこいい!

まとめ

今回の記事では、光センサについて解説しました。

今回の記事で解説したこと
  • 光センサの種類
    • CdSセル、フォトトランジスタ
  • 光センサの使い方
  • 光に反応するロボットの作り方

光センサを使ったロボットが完成したら、CHAに(@CHAfreeschool )見せてくださいね!

私は青色のLEDを使いましたが、これから作ってみようって方は他の色も試してみてください。
さらにレベルアップしたい方は、前回紹介したスピーカーと組み合わせて部屋が暗くなったら鳴くロボットなんてのも面白いと思います!

あわせて読みたい
【Arduino】スピーカーを使ってロボットの鳴き声を作る!
【Arduino】スピーカーを使ってロボットの鳴き声を作る!

LEDについてもう少しおさらいしたい方はこちらの記事がぴったりです。
間違えやすい向きについても分かりやすく解説しています。

あわせて読みたい
【Arduino入門】はじめて回路を作る!自作LED回路をチカチカする方法を解説!
【Arduino入門】はじめて回路を作る!自作LED回路をチカチカする方法を解説!
CHA
CHA

ものづくりって面白い!

最後まで読んでいただき、ありがとうございました!
以上、CHAでした!

スポンサーリンク
ABOUT ME
CHA
「勉強に自由を!」をスローガンに、学校に限らず、好きな時に、好きな場所で、好きなことをYouTubeで勉強できるようになればいいなと思って授業動画を作っています!
記事URLをコピーしました