Mira&Luna's nursery lab

旅乙女と発明娘の子供部屋

光センサをArduinoで制御して、ミラの歌を遮ります。

f:id:miraluna:20180127173159j:plain:w100 Mira

Arduino光センサを使って、私の歌を止めるおもちゃを作りました。

どんなおもちゃなのか、上の題字だけじゃさっぱり分かりませんよね。

この記事の最後に動画を用意してあるので、それを観てもらえれば納得してもらえると思うわ。

今回はそのおもちゃの仕組みである光センサの使い方から紹介しますね。

光センサ
f:id:miraluna:20190131160649j:plain:w300
左のは光センサが入っていた袋で、右のLEDみたいなパーツが光センサです。

光を受けるとその明るさを値として取得できるの。
電子工作で光センサといえば明るさによって抵抗値が変わるカドミウムセルが有名だけど、今回は光を数値として取得できて高感度(なんと中にアンプが入っているんです)なリニア光センサを使いました。


光センサ配線図
配線の仕方はこう。
f:id:miraluna:20190131222416p:plain

明るさの値を取得するだけならArduinoと下のブレッドボードのパーツをつなぐだけでO.K.。インプットサイドの配線というわけ。
右のブレッドボードはその値によって点けたり消したりするLEDです。こちらはアウトプットサイドの配線ね。

パーツの配線の説明をすると、まず下の白くて大きなLEDのようなのが光センサ。LEDはアノードを+につないでカソードをーにつなぐんだけど、LEDは本体の中に入っている三角形の小さいほうがアノードで足が長くて、大きい三角形がカソードで足が短いことが多いの。全部じゃないけど。でもこの光センサは大きな三角形の足が長くて、小さな三角形の足が短かった。よくあるパターンと足の長さが逆だったの。説明書を読んでみると足の長いほうを+につないで短いほうをーにつなぐように書かれてた。どっちをアノードと呼んでどっちをカソードと呼ぶのか、あるいはアノードとかカソードとは呼ばないのか私にはよくわからなかったけど、とにかく足の長さを信じて配線すればいいということはわかったわ。上の配線図では左の足が長くて右の足が短かい、ということになりますね。

黄色い線はArduinoのA0につないで、ここから光の値を読み取ります。

その下のセラミックコンデンサは動作安定のためのパスコンで、0.1μFのものを使いました。入れなくても特に問題はないわ。

さらにその下の抵抗は10kΩです。

アウトプットサイドのLED保護用の抵抗は330Ω。

これで配線完了  だったのに……。
(この日はもう寝る時間になっちゃたので、一度全部ばらばらにして片づけをしたの。それで次の日にもう一度配線をしたら、どうしてか光センサが同じ値をとったまま反応しなくなっちゃた……。
だからジャンク品から取った別の光センサを使うことにしました。)
  「別の光センサ
       f:id:miraluna:20190131160650j:plain:w300
これです。ちっちゃい。……リニア光センサ、気に入ってたのにな。: (


◆ 配線の様子
f:id:miraluna:20190131233828j:plain
さて、配線が完了したら次はスケッチ(プログラム)です。

光センサインプットアウトプットプログラム

const int in = A0;
const int out = 7;


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


void loop() {
int n = analogRead(in); // 光センサから値を受け取る
Serial.println(n); //シリアルモニタに値を表示


// 暗いとD7がOFFになるプログラム
if(n>15){ //15以下の値を「暗い」とする
digitalWrite(7,HIGH);
}else{
digitalWrite(7,LOW);
}


delay(1000); //1秒毎に値を受け取る
}

これは光センサから1秒毎に値を受け取って、暗いときだけD7PinをOFFにするプログラム。
D7につないだLEDの反応速度を上げたいときは、値を受け取る待ち時間「delay」の数値を小さくします。1000が1秒なので、50なら0.05秒に一度明るさをチェックすることになるわね。

 交換した光センサが明るいときに30前後、光を遮ると10前後の値をとったので、「暗い」の基準を15以下としたスケッチです。
リニア光センサや他のセンサは値が違うので、センサのとる閾値に応じて暗さの基準を書き換えてくださいね。


それではこのスケッチをみつは(ATmega328:Arduino)に書き込んで……
動作させてみましょう!


リニア光センサのテスト

光センサを隠すとLEDが消えますね。成功です。
1秒毎に感知させると反応が遅いので、おもちゃ作りのときには0.05秒毎に光を感知するようにスケッチを書き換えました。


そしてできたおもちゃがこちら。
口をふさぐと歌えなくなるミラ

歌を止められるミラ

これが気持ちよく歌っている私の歌を止めるおもちゃです。

LEDをONOFFする代わりに、以前に作ったポータブルアンプの電源をONOFFしました。
  → 手作りポータブルアンプの記事

配線もプログラムも複雑ではないので、作りやすいと思います。
一緒に作ってみませんか?

作製・紹介はミラでした。
f:id:miraluna:20180105114819j:plain:w250