// ライブラリの実装 //
#import "@preview/codelst:2.0.1": sourcecode

//フォント設定//
#let gothic  = "YuMincho"

//本文フォント//
#set text(11pt, font: gothic, lang: "ja") 

//タイトル・見出しフォント//
#set heading(numbering: "1.1")
#let heading_font(body) = {
  show regex("[\p{scx: Han}\p{scx: Hira}\p{scx: Kana}]"): set text(font: gothic)
  body
}
#show heading: heading_font

// ページ設定 //
#set page(
    paper: "a4",
    margin: (x: 25mm, y: 25mm),
    columns: 1,
    //fill: 背景色,
    numbering: "1",
    number-align: center,
    header: [
        #set text(8pt)
    ]
)

// 数式の表示の仕方を表示 //
#set math.equation(numbering: "(1)")

//本文ここから//
= 演習の目的
実験を通して、Cdsセルの使い方と仕組みの習得を目的とする。

= 演習の使用部品
== この電子部品 (Cds セル 5 φ，@CdsCell ) を次のような点から調べなさい。

#figure(
  image("./img/Cds.png",width: 50%),
  caption: "Cds セル"
)<CdsCell>

=== どのような部品か
CdS(硫化カドミウム)を使用した光センサーで、光の強さに応じて電気抵抗が低下する抵抗器である。 人の目の特性に近い特性(緑色の光に対して高感度)を持っているため、各種明るさセンサーに最適である@cds_akituki 。

=== どのような仕組みか
CdSセルは、カドミウムと硫黄の化合物である。
カドミウム（Cd）は毒性のある重金属で最外殻の電子は原子核との結合が弱く、自由電子となり導電性である。
これに硫黄（S)を結合させるとカドミウムの自由電子を硫黄原子が捕捉して絶縁体に変化する。
この自由電子の捕捉力は非常に弱く、光があたると自由電子を放出して導体に変化する。
したがって、光の量によって放出する自由電子の量が変化し、抵抗値が変化する。
これを「内部光電効果」と呼ぶ @cds_ir 。

=== どのような入力を取り扱うのか
GL5528では、受講部に入る光の量、照度(Lux) を入力として取り扱う。

=== 入力に応じて出力がどう変化するのか (データシートや仕様書を参考に)
GL5528では、暗い時は約1MΩ、明るい時は約10~20kΩの抵抗値を持つ。
グラフは比例関係になっており、照度が高いほど抵抗値が低くなる。
@CdsGraph では、Cdsセルの照度による抵抗値の変化を示している@cds_datasheet 。

#figure(
  image("./img/CdsGraph.png",width: 50%),
  caption: "Cds グラフ"
)<CdsGraph>

=== どのようなピンアサイン (各ピンの役割) か

特に抵抗のように動作をするためピンアサインなどはないが、@CdsStructure 構造図を示すと、2つの端子がある@cds_datasheet 。

#figure(
  image("./img/CdsStructure.png",width: 50%),
  caption: "Cds 構造"
)<CdsStructure>

=== 正しい動作の条件，範囲は何か

秋月電子によると、GL5528の仕様は以下の通りである@cds_akituki 。

+ ピーク波長: 540nm
+ 最大電圧: 150VDC
+ 最大電力: 100mW
+ 明抵抗: 10k~20kS2（10Lux時）
+ 暗抵抗: 1MΩ
+ 反応時間: 上昇時間 20ms、下降時間 30ms

#pagebreak() // ページを分ける

= 課題内容

== 明るさをはかる 

=== 実験その1(動作の理解) 

光センサを以下のようにした場合、アナログ入力はどのような値をとるか調べ、照度計から得られた値との関係値をグラフに示しなさい。
- 蛍光灯の明かりを手で遮る
- 机の下に隠す
- 光センサを両手で覆う

*回路図* 

@実験1回路図 は、実験1の回路図を示す。
抵抗とCdsセルの抵抗分圧を行い、マイコンにかかる電圧を測定する。

#figure(
  image("./img/実験1回路図.png",width: 70%),
  caption: "実験1回路図"
)<実験1回路図>


#pagebreak() // ページを分ける

*プログラム*

@値の取得をするソースコード は、実験1で使用したアナログ入力値を取得するソースコードを示している。

#figure(
  sourcecode[```c
//プログラムに必要な変数の宣言及び定義
import processing.serial.*;
import cc.arduino.*;

Arduino arduino;
PFont myFont;

int usePin0 = 0; //Arduino A0ピン

//Arduino 及びプログラムの初期設定
void setup(){
    size(600, 250);
    arduino = new Arduino(
        this,
        "/dev/cu.usbserial-14P54810"
    );
    myFont = loadFont("CourierNewPSMT-48.vlw");
    textFont(myFont, 30);
    frameRate(30);
}

// 入力値の格納用変数
int input0;

//プログラム本体 (以下を繰り返し実行)
void draw(){
    background(120);
    input0 = arduino.analogRead(usePin0);
    
    //入力値を表示
    text("A0: " + input0, 50, 100);
}
  ```],
  caption: "値の取得をするソースコード"
)<値の取得をするソースコード>

- プログラムの概要
センサから ArduinoA0 ピンへの入力値をアナログ入力として読み込む。読み込んだ値を数値として表示する。
- プログラムの説明
  - 1–7 行目: プログラムに必要な変数の宣言および定義またはライブラリのインポート
  - 8 行目で ArduinoA0 ピンの使用を usePin0 = 0 として定義している。
  - 11–20 行目: Arduino およびプログラムの初期設定
    - 10 行目で画面表示に用いるウィンドウサイズを横 600px,縦 250px と定義している。
    - 11 行目で"/dev/cu.usbserial-14P54810"のポートと 57600 の速度で通信する arduino インスタンスを生成する。
    - 14 行目でフレームレートを 30 としている。
  - 23–32 行目：プログラムの動作
    - 23 行目で入力用の変数 input0 を宣言している。
    - 27 行目で背景色を灰色に設定する。
    - 28 行目で ArduinoA0 ピンのアナログ入力を input0 に入れる。
    - 31 行目で input0 を数値として表示する。

*実験結果*

@マイコンの値と照度計の値の特性グラフ では、実験1におけるマイコンへのアナログ入力値と照度計の値の特性グラフを示している。
グラフより、Cdsセルは、明るい状況下では抵抗値が低くなり、暗くなると抵抗値が上昇する。また感度は非常に高く、強い光を当てても抵抗値が完全に0にはならない。逆に、非常に暗い状況でも抵抗値が無限大にならない。また、センサーの反応速度は非常に速い。

#figure(
  image("./img/マイコンの値と照度計の値の特性グラフ.png",width: 75%),
  caption: "マイコンの値と照度計の値の特性グラフ"
)<マイコンの値と照度計の値の特性グラフ>

*考察*

センサーの特性は、比例関係ではなく、対数関係を持ったグラフに近い。また、暗いほど感度が高く、明るくなると感度が落ちる。
また、センサーの特性は、対数関係を持っているため、マイコンのアナログ入力値をLuxに変換できる。

#pagebreak() // ページを分ける

=== 実験その2（回路の理解と抵抗分圧）

抵抗器と光センサの配置を逆にすると、アナログ入力も変化する。 どのように変化するか調べ変化 した値を参考にグラフに示しなさい。 また，なぜそのような結果になるのか、プレ・レポートで調 べた「抵抗分圧」という用語と計算式を使って説明しなさい。

*回路図・プログラム*

@実験2回路図 は、実験2の回路図を示す。
実験1とは抵抗とCdsセルの順番を逆にして、抵抗とCdsセルの抵抗分圧を行い、マイコンにかかる電圧を測定する。
プログラムは実験その1 と同じものを使用する。

#figure(
  image("./img/実験2回路図.png",width: 70%),
  caption: "実験2回路図"
)<実験2回路図>


#pagebreak() // ページを分ける

*結果*

@照度計とマイコンの値の特性グラフ_抵抗とCDSを逆にしたバージョン では、抵抗とCDSを逆にした場合の特性グラフを示している。
グラフより、実験1とは動作が異なり、明るい状況下ではマイコンにかかる電圧が上昇し、暗い状況下ではマイコンにかかる電圧が減少する。それ以外の動作については実験1と同様である。


#figure(
  image("./img/照度計とマイコンへのアナログ入力値の特性グラフ.png",width: 75%),
  caption: "照度計とマイコンの値の特性グラフ (抵抗とCDSを逆にしたバージョン)"
)<照度計とマイコンの値の特性グラフ_抵抗とCDSを逆にしたバージョン>


*なぜそのような結果となったのか，プレレポートで調べた「抵抗分圧」という用語を使って説明しなさい*

抵抗分圧とは、電圧を分圧するために抵抗を使用する回路である。 
抵抗分圧回路は、2つの抵抗を直列に接続し、その間に電圧をかけると、電圧が分圧される。 
抵抗分圧回路の出力電圧は、@分圧 で計算できる。 

$ V_o = V_i * (R_2 / (R_1 + R_2)) $<分圧>

R2を変化させると、抵抗値が変化するため、出力電圧も変化する。 
R2を大きくすると、出力電圧は小さくなり、R2を小さくすると、出力電圧は大きくなる。 

今回は、R2の値はCDSの抵抗値に依存するため、明るさが明るくなると電圧値が下がり、暗くなると電圧値が上がる回路ができた。 

#pagebreak() // ページを分ける

// bibファイルの指定 //
#bibliography("./bibliography.bib")