差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
gimmickkouza:electronic_basic:5:3_analogread [2024/06/14 01:05] – [CdSセルについて] matsuhachi | gimmickkouza:electronic_basic:5:3_analogread [2024/06/16 19:50] (現在) – [配線図] :部品リスト追加 lutamesta | ||
---|---|---|---|
行 2: | 行 2: | ||
デジタル入出力では、0(LOW)か1(HIGH)の2つの値を用い、0であれば0Vの入出力、1であれば5Vの入出力として操作しました。 | デジタル入出力では、0(LOW)か1(HIGH)の2つの値を用い、0であれば0Vの入出力、1であれば5Vの入出力として操作しました。 | ||
今回扱うアナログ入力では、0V~5Vまでの電圧変化を" | 今回扱うアナログ入力では、0V~5Vまでの電圧変化を" | ||
+ | |||
===== CdSセルについて ===== | ===== CdSセルについて ===== | ||
{{: | {{: | ||
行 11: | 行 11: | ||
光の量が多い(周囲が明るい)場合、抵抗値は下がり電気が流れやすくなります。 | 光の量が多い(周囲が明るい)場合、抵抗値は下がり電気が流れやすくなります。 | ||
逆に光の量が少なく(周囲が暗く)なると、抵抗値が上がり電気が流れにくくなります。 | 逆に光の量が少なく(周囲が暗く)なると、抵抗値が上がり電気が流れにくくなります。 | ||
+ | **超ざっくり言うと光の明るさに反応するセンサです。** | ||
ちなみにカドミウムはEUの法規制であるRoHS指令の規制対象となっています。 | ちなみにカドミウムはEUの法規制であるRoHS指令の規制対象となっています。 | ||
(日本国内では2024年6月現在はまだ使用OKです) | (日本国内では2024年6月現在はまだ使用OKです) | ||
- | CdSセルを使った制作物をEUの方が購入したり、購入者がEU外の方であったとしても転居や遠征でEUに持ち込まれるのはNGなので、**販売用の作品には絶対に使わないようにしましょう。** | + | CdSセルを使った制作物をEUの方が購入したり、購入者がEU外の方であったとしても転居や遠征でEUに持ち込まれるのはNGなので、<text background=" |
CdSセルの代わりに使える電子パーツには、フォトトランジスタやフォトダイオードなどがあります。 | CdSセルの代わりに使える電子パーツには、フォトトランジスタやフォトダイオードなどがあります。 | ||
- | <alert type=" | + | /*<alert type=" |
行 48: | 行 49: | ||
電圧の最大値(Arduinoなら「5」V | 電圧の最大値(Arduinoなら「5」V | ||
- | 電圧 = ―――――――――――――――――― * 入力された数値 | + | 電圧 = ―――――――――――――――――― × 入力された数値 |
ADCの分割数(Arduinoなら「1023」 | ADCの分割数(Arduinoなら「1023」 | ||
例えばArduinoが「299」という数値を読み取ったとしましょう。 | 例えばArduinoが「299」という数値を読み取ったとしましょう。 | ||
電圧の計算式は (5 / 1023) * 299 = 1.4613880742913 となり、大体1.46Vくらいの電圧が入力されたことがわかります。 | 電圧の計算式は (5 / 1023) * 299 = 1.4613880742913 となり、大体1.46Vくらいの電圧が入力されたことがわかります。 | ||
+ | / | ||
==== 配線図 ==== | ==== 配線図 ==== | ||
行 61: | 行 63: | ||
CdSセルに極性はありませんので、どちらの脚が5V/ | CdSセルに極性はありませんので、どちらの脚が5V/ | ||
抵抗は10kΩのものを挿してください。 | 抵抗は10kΩのものを挿してください。 | ||
+ | |||
+ | ===使う部品リスト=== | ||
+ | ^ 部品 | ||
+ | | CdSセル | 1個 | | ||
+ | | 抵抗器(10kΩ) | 1個 | | ||
+ | / | ||
==== サンプルコード解説 ==== | ==== サンプルコード解説 ==== | ||
サンプルコード5-3_analogRead.inoを開いてください。 | サンプルコード5-3_analogRead.inoを開いてください。 | ||
+ | /*<alert type=" | ||
< | < | ||
- | int CDS = A0; // | + | int CDSpin |
void setup() { | void setup() { | ||
行 74: | 行 83: | ||
void loop() { | void loop() { | ||
int analog_val = 0; // | int analog_val = 0; // | ||
- | analog_val = analogRead(CDS); | + | analog_val = analogRead(CDSpin); |
// | // | ||
// | // | ||
行 89: | 行 98: | ||
== 1行目 == | == 1行目 == | ||
< | < | ||
- | int CDS = A0; // | + | int CDSpin |
</ | </ | ||
電圧読み取り用のソケットを変数で指定します。アナログ0番なので「A0」です。 | 電圧読み取り用のソケットを変数で指定します。アナログ0番なので「A0」です。 | ||
行 95: | 行 104: | ||
もちろん大丈夫な理由はちゃんとあります。が、本筋から脱線してしまうのでTipsで後述します。 | もちろん大丈夫な理由はちゃんとあります。が、本筋から脱線してしまうのでTipsで後述します。 | ||
とりあえず、アナログ入力の場合はint型でもA0~A5という指定が可能です。 | とりあえず、アナログ入力の場合はint型でもA0~A5という指定が可能です。 | ||
- | もちろんint | + | もちろんint |
(個人的にはアナログ入力にはA0~A5表記を使用する方が、後から読んだ時の分かりやすさと他のArduinoとの互換性の観点から便利かなと思います) | (個人的にはアナログ入力にはA0~A5表記を使用する方が、後から読んだ時の分かりやすさと他のArduinoとの互換性の観点から便利かなと思います) | ||
行 113: | 行 122: | ||
== 9行目 == | == 9行目 == | ||
< | < | ||
- | analog_val = analogRead(CDS); | + | analog_val = analogRead(CDSpin); |
</ | </ | ||
- | 本命のアナログ入力です。analogRead(CDS)でA0ソケット挿さったCdSの値を読み取り、これを先程用意した変数analog_valに入れます。 | + | 本命のアナログ入力です。analogRead(CDSpin)でA0ソケット挿さったCdSの値を読み取り、これを先程用意した変数analog_valに入れます。 |
A0への入力電圧をADCで数値に変換する処理は自動で行われます。なので命令文は不要です。 | A0への入力電圧をADCで数値に変換する処理は自動で行われます。なので命令文は不要です。 | ||
analog_valには、変換後の0~1023の数値が格納されます。 | analog_valには、変換後の0~1023の数値が格納されます。 | ||
行 146: | 行 155: | ||
intに「A0」を入力できる種明かしです。 | intに「A0」を入力できる種明かしです。 | ||
- | int CDS = A0; は、変数「CDS」に定数「A0」(の中身の14を)代入するという形を取っています。 | + | int CDSpin |
定数A0のデータ型はuint8_t型で、これは0~255の整数の値のみを扱える型です。 | 定数A0のデータ型はuint8_t型で、これは0~255の整数の値のみを扱える型です。 | ||
- | 変数CDSのint型とは異なる型ですが、int型の範囲(R3では-32, | + | 変数CDSpinのint型とは異なる型ですが、int型の範囲(R3では-32, |
{{: | {{: | ||
そしてanalogRead関数の設定ファイルでは「まず最初に、引数で指定されたソケットの数値が14以上であれば、その数値から14を引く」という処理をすることが定められています。 | そしてanalogRead関数の設定ファイルでは「まず最初に、引数で指定されたソケットの数値が14以上であれば、その数値から14を引く」という処理をすることが定められています。 | ||
- | それによりCDSの中身は「0」となり、無事アナログ0番ピンを指定する仕組みになっています。 | + | それによりCDSpinの中身は「0」となり、無事アナログ0番ピンを指定する仕組みになっています。 |
Arduinoの裏側には動作を規定する設定ファイルがあることを頭の隅に置いておくと、いつか役に立つ時が来る…かもしれません。 | Arduinoの裏側には動作を規定する設定ファイルがあることを頭の隅に置いておくと、いつか役に立つ時が来る…かもしれません。 |