Help us understand the problem. What is going on with this article?

Arduino + Grove (2)

前回記事の最後では
「押している時」「押していない時」をLEDの「点灯」「消灯」と対応付けるコードを書きました
「デジタル入力によって、デジタル出力をコントロール」してみたのですが
今回は、ゼロとイチでは割り切れない別のセンサを使ってみましょう

ボリュームセンサでLEDの明るさコントロール

A0にボリュームセンサを接続します(D2のボタンは抜く)
IMG_1783.JPG

ArduinoIDEで「ファイル」→「新規ファイル」を開き
下記のコードをコピー、ペーストしてSeeduinoに書き込みます

const int volumePin = A0; //ボリュームセンサが刺さっているピンを指定
const int ledPin = 3; //LEDが刺さっているピンを指定

void setup() {
  Serial.begin(9600); //コンピュータとのシリアル通信の開始
  pinMode(volumePin, INPUT); //ボリュームセンサが接続されているピンを入力モードに
  pinMode(ledPin, OUTPUT); //LEDが接続されているピンを出力モードに

}

void loop() {
  int volumeVal = analogRead(volumePin); //volumeValという変数を指定し、ボリュームセンサの値を読む

  Serial.println(volumeVal); //0 - 1023の間でアナログ値を出力(10bit)
  int ledBrightness = map(volumeVal, 0, 1023, 0, 255); //0 - 1023の値を、LEDの明るさ0 - 255に変換する
  analogWrite(ledPin, ledBrightness); //指定された明るさでLEDを点灯

}

ボリュームを回転させるとLEDの明るさが変わります

プログラム解説

プログラム中にmap()という関数が出てきます。
analogRead()関数で取得するボリュームの値は10bit(0-1023)なのに対して、
LEDの明るさを制御しているanalogWrirte()が対応しているのが
8bit(0-255)なのでmap()を使って値を変換しています

シリアルプロッタで値を見てみる

ArduinoIDEの「ツール」→「シリアルプロッタ」を選択
スクリーンショット 2019-09-21 12.43.09.png

ボリュームを回転させると値に応じてグラフが変化
Graph.png

PWM出力について

LEDの明るさを段階的にコントロールできるのは、Arduinoが持つPWMという出力方式のおかげです
PWMは(Pulse Width Modulation)の頭文字をとった略語で、単位時間あたりで電流を流す(ピンをHIGHにする)時間を変えているのです
実際にはピンのON/OFFが高速に切り替わっており、LEDは高速で明滅しているのですが、人間の目には「明るさが変わっているようにみえる」のです

スクリーンショット 2019-09-21 14.29.43

図の引用元

様々なセンサ・アクチュエータ

入力装置としての役割を持つセンサ(ボリューセンサ、ボタン)
出力装置としての役割を持つアクチュエータ(LED、傾きスイッチなど)には沢山の種類があります
上のプログラムに対応したセンサは下記になります。A0に接続して試してみましょう
その際、ArduinoIDEのシリアルプロッタを表示しておいて、どのような振る舞いによって値が変化するのかを確認してみましょう

  1. スライドセンサーSliding1
  2. CDS(明るさをセンシング)img
  3. FSR(圧力をセンシング)

main

また、上のプログラムは「振動モータ」にも対応していますので、D3に接続してセンサでコントロールしてみましょう

Grove - Vibration Motor

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away