いまさらならがArduinoをはじめてみる


2016/7/9 20:26 fritzingを使ってブレッドボードの図を挿入。

# 目的
IoTに興味を持っていろいろ調べた結果Arduinoに色々つけてセンサにするのがちょっと良いかなという気がした。(主に消費電力の観点で)
ただ、Arduinoは紆余曲折あって今まで一切触っていないので基礎からちゃんと勉強する必要がある。
とはいえ、学生の頃みたいな時間がないのは十分わかっているので、目的に向けて必要最低限なものをマスターするために時間を使う。

とりあえず今回はセットアップからCdSセルを使うところまでを書く。

# 準備
面倒だったので、スイッチサイエンスさんが出してる下記を購入。
https://www.switch-science.com/catalog/181/

ちょっと色々ついでがあったのと、会社下のコンビニで受け取りたかったのでAmazon経由で。

# インストール
IDEが必要なようなのでとりあえず下記からダウンロード＆インストール。
https://www.arduino.cc/en/Main/Software

Mac版はzipされているだけだったので、解凍して/Applicationsに放り込んで終了。

# 接続

まぁ見たままなんですが、こんな感じに挿せばOK。
![IMG_0148.jpg](https://qiita-image-store.s3.amazonaws.com/0/99704/20cd0dbc-6dbc-b0d3-654d-0da59fe960e1.jpeg "IMG_0148.jpg")

# Hello World
ぐぐって一番最初に見つけたのがthink ITさんだったので参考にサンプルの作成。
コードとしては大した事ないのでスクリーンショットだけ。

![スクリーンショット 2016-07-09 17.26.10.png](https://qiita-image-store.s3.amazonaws.com/0/99704/8bbdd77a-8ca9-12ea-0e85-11a4bc06a04c.png "スクリーンショット 2016-07-09 17.26.10.png")

この記事ではチェックマークのボタンを押したあと右上の虫眼鏡アイコンでコンソールが開く
用に書いてあったけど、それではダメでした。

実際にはこんな感じでした。

![スクリーンショット2.png](https://qiita-image-store.s3.amazonaws.com/0/99704/05e6d639-a1ce-9005-378b-b714231b4348.png "スクリーンショット2.png")

これで転送のボタンを押したうえで右上の虫眼鏡アイコンを押すと、下記のようにArduino側のコンソールが撮れます。

![スクリーンショット 2016-07-09 17.41.34.png](https://qiita-image-store.s3.amazonaws.com/0/99704/b8e69bd1-9bd5-88ce-5dd0-489d4b5b23a7.png "スクリーンショット 2016-07-09 17.41.34.png")

めでたしめでたし。

なんですが、最初僕が試した時に「ボードに書き込めない」ようなエラーが発生していました。
その時はArduino IDEのメニューにある、ツール > シリアルポートから適切なものを選択したら直りました。まぁ、確かにUSBでつながってるのに選択されていたのがbluetoothだったのでそれはそうだといった感じでしたが。

![スクリーンショット 2016-07-09 17.43.30.png](https://qiita-image-store.s3.amazonaws.com/0/99704/71a84263-c5f4-b014-a6dc-68aea784df3d.png "スクリーンショット 2016-07-09 17.43.30.png")

# Lチカする
まぁ、一気にCdSやっちゃってもよかったのですが、Hello World同様、通過儀礼はとりあえず踏んでおかないとかな、と思いまして。

先ほど同様、Think ITさん読むとLEDのアノードをDIGITAL側の13番、カソードをGNDに直接差し込めと書いてありますが、これショートしないのか・・・
不安になったので、ここは真似せずブレッドボードを用意して抵抗を間に挟む構成にしました。

完成図
![IMG_0149.jpg](https://qiita-image-store.s3.amazonaws.com/0/99704/11df2a80-a94a-4b88-d26a-57f45d5cf3d9.jpeg "IMG_0149.jpg")

![led.jpg](https://qiita-image-store.s3.amazonaws.com/0/99704/db81244e-0cc7-5a7b-94e3-01bd39b70931.jpeg "led.jpg")


DIGITAL側の13番PINをブレッドボードの20番に挿して、抵抗を20番から16番に挿してます。
で、LEDのアノード側を16番、カソード側を14番として、そこからGNDピンに戻るような構成です。
抵抗の大きさはあったやつを適当に刺したので・・・
ぶっちゃけると、抵抗の読み方忘れたので適当です。
まぁ、明るさが変わるくらいなんでそんなに問題無いだろうということでここは一つ。

コードはまたしても大したことないのでスクリーンショットを。

![スクリーンショット 2016-07-09 17.58.57.png](https://qiita-image-store.s3.amazonaws.com/0/99704/3376aeb1-208b-c9d6-e1a9-df6283a0cb2d.png "スクリーンショット 2016-07-09 17.58.57.png")
13番PINをHIGHにしたり、LOWにしたりを1秒間隔で繰り返してるだですね。
ただ、こんな簡単に出力いじれるんだと思うといいですね。
この辺りはかえってRaspberry PIよりやりやすいかも。

# CdSセルで光の強さ値を取得してみる
さて、それでは本日の本題のCdSセルで光の強さをとってみましょう。
これは参考にある3つ目のDevice Plusさんを参考にまずはやってみます。

## まずは使ってみる
CdSセルは光が強ければ強いほど抵抗値が0に近づくらしいので、LEDと並列にしてあげれば、暗くなるとLEDがついて、明るくなるとLEDが消えるような感じにできますね。
多分厳密にやりたいなら色々計算しないといけないんでしょうが、面倒なのでその辺りは気にしないでやりましょう！

完成図
![IMG_0151.jpg](https://qiita-image-store.s3.amazonaws.com/0/99704/02e28d48-c6b0-9652-4803-89ded9de9111.jpeg "IMG_0151.jpg")

![cds01.jpg](https://qiita-image-store.s3.amazonaws.com/0/99704/072a4fa7-4db2-4b23-18f1-198ee4bb3696.jpeg "cds01.jpg")


Device Plusさんのを見ると、一旦GNDからブレッドボードのマイナスに挿して、そこから2本引き出していますが、まぁ、結局一緒なので、さっき作った回路いじるのも面倒だったのでこれでよいかと。
単純に先ほどのLEDの横にCdSセルを載せてます。
時間的に薄暗い時間ですが、スマホのライトを当てるとLEDは消灯し、離したり逆にCdSセルを覆ったりすると明るく元気に点滅します。

コードですが、上のやつそのままなので、やったことはUSBを抜いて、回路を組み直して、また刺しただけです。

## Arduino側でデータを取得したい！
今回は最終的な目標もあるので、Arduino側に何とかして数値としてデータを取りたいです。
これもDevice Plusさんが書いてくださっているので、参考にやってみます。

完成図
![IMG_0152.jpg](https://qiita-image-store.s3.amazonaws.com/0/99704/9f0b9b7a-1e2d-97db-db2f-763f9f663314.jpeg "IMG_0152.jpg")

![cds02.jpg](https://qiita-image-store.s3.amazonaws.com/0/99704/4a2bd962-a394-fd88-1388-70354f947702.jpeg "cds02.jpg")

写真の向きが変わってるのでわかると思いますが、今度は先ほどと違う端子を使います。
逆側にあるAnalog InとPowerのところですね。

Powerの5Vをブレッドボードの20番のどこか、GNDを14番に挿して、抵抗を20番から16番、CdSセルを16番から14番に挿してます。

肝心のデータを取り出すところですが、これはA0ピンから16番に挿します。
これで、16番ピンとGND間の電圧を測定できるというわけです。

コードです。基本パクリです。
![スクリーンショット 2016-07-09 18.44.34.png](https://qiita-image-store.s3.amazonaws.com/0/99704/823b77cd-5a90-64a2-d29f-1e70a2069ca1.png "スクリーンショット 2016-07-09 18.44.34.png")

ちなみにanalogReadですが、挿した点とGND間の電圧(最大5V)を0〜1023の値に変換しているようです。
理論上、CdSの抵抗が小さくなる(つまり明るいとき)はCdSに電圧はあまりかからないので小さく、逆にCdSの抵抗が大きくなる(つまり暗いとき)と大きくなります。

とにかくこれでデータを取得することが出来ました！！！

## 今後
次はセンサーの種類を増やすことと、どうにかしてデータをPC側で保存することでしょうか。
通信手段はできればBLEあたり使いたいのでちょっと頑張ります。


# 参考
- https://thinkit.co.jp/story/2013/02/12/3960
- http://easylabo.com/2015/03/arduino/8081/
- http://deviceplus.jp/hobby/entry_005/