超ゆるゆる技術ブログ🌷

プログラミング勉強中です。

【Arduino】傾斜センサとシリアルモニタ

角度を測ってLEDを点灯消灯

f:id:dd15038:20180707023052j:plain
新たに傾斜センサという、角度を測るセンサを使ってLEDを制御します。
今回使ったのは、センサの中にあるボールが転って角度を測るタイプのものです。

また、シリアルモニタというのも今回初めて使いました!
f:id:dd15038:20180707023558p:plain
スケッチウィンドウの右上にあるコレのことです。

プログラム

//アナログピン5番を利用
int apin = 5;
//ledにはデジタル8番ピン利用
int ledpin = 8;
//閾値を決める
int threshold = 500;

void setup()
{
  //デジタル8番ピンを出力設定
  pinMode(ledpin,OUTPUT);
 //シリアル通信設定
  Serial.begin(9600);
}

void loop()
{
  //変数tilt_readを定義
  int tilt_read;
  while(1)
  {
    //アナログピンから電圧を読み取って変数に格納
    tilt_read = analogRead(apin);
    Serial.println(tilt_read);
    //傾斜センサで読み取った値が閾値より小さいとき
    if(tilt_read < threshold)
    {
      digitalWrite(ledpin,HIGH);//led点灯
    }
    //それ以外のとき
    else
    {
      digitalWrite(ledpin,LOW);//led消灯
    }
    //60ミリ秒待つ
    delay(60);
  }
}

最初のほうに記してある閾値とは、どれくらいセンサが傾けばLEDが反応するかを決める基準値になります。
loop()関数の中では、この閾値よりセンサの値が小さければLEDが点き、それ以外の時は消えるようにと書きました。
閾値は自分で決めるもので、このプログラムでは水平状態だと1023という値が最大値だったので、それの半分くらいで設定してあります。

ここでふたつのことを浅〜く解説

1.シリアルモニタについて
setup()関数の中で、Serial.bigin()関数を使ってパソコンとシリアル通信のポートを開けます。
それから、これの()内には通信速度となる転送レートを書きます。今回は9600bpsに設定してあります。

あと、loop()関数の中にはSerial.println()関数を書いておきます。
この関数の()内のモノの数値が、シリアルモニタへ表示されるようになっているからです。
今回のプログラムでは、tilt_readという変数を定義して、そこに傾斜センサから読み取った値を格納して、シリアルモニタへ表示させています。

☆ちなみに☆
f:id:dd15038:20180707025442p:plain
Serial.print()関数をつかうと、()内に記した文字列がシリアルモニタへ表示されるようになっています。
f:id:dd15038:20180707025553p:plain
こんなふうに。
ここで忘れてはいけないのが、””(ダブルコーテーション)です。("文字列")って書かないといけません。

2.Arduinoのアナログ値について
Arduinoの電源ピン側には、3.3V、5V、GND、Vinピンがあります。
f:id:dd15038:20180725132019j:plain
この赤い四角で囲まれた場所です。
それぞれには3.3V、5V、0Vの電圧が設定されています。
Vinピンは通常は5Vの電圧ですが、外部からの給電があった場合にはそちらの電圧値が出力されます。

で、Arduinoのアナログ値というのは、この0V〜5Vの電圧が0〜1023の値に変換されたものです。
今回の回路では電源は最大値の5Vでつなげてあるので、アナログ値も最大値である1023が出力されるようになっています。
このアナログ値が、シリアルモニタ上に表示されるものになります。

回路図

f:id:dd15038:20180707025932p:plain
傾斜センサは、アナログ5番ピンと5Vピンにつなぐ。
LEDは一応抵抗を挟んで、デジタル8番ピンとGNDピンにつなぐ。
って感じです😃

実際のようす

まず、傾けていない状態。
f:id:dd15038:20180707030353j:plain
LEDは点いていませんね。
このときのシリアルモニタのようすはこちら。
f:id:dd15038:20180707032055p:plain
ずっと1023のままです。
あとそういえば、転送レート9600bpsに設定したなら、シリアルモニタのほうも9600に合わせないと文字化けします。
ウィンドウの右下に合わせるとこあります。

次に、傾けた状態。
f:id:dd15038:20180707032240j:plain
LEDは点いています!500という閾値を下回ったようです!
けどめちゃくちゃ点滅してますが…。
その証拠のシリアルモニタのようすはこちら。
f:id:dd15038:20180707032406p:plain
数値がさまざまに目まぐるしく変わっています。
なんで数値小さくなったり大きくなったりするんだろう…。そこだけちょっとわかりません(-_-;)

感想

最初、変な回路の組み方しててUSB読み込まなかったから気を付けようと思いました。
シリアルモニタに関しては、仕組みが大体理解できて、これから別のセンサでもばんばん使ってけるなって感じがして楽しみです。
傾斜センサには、調べたところXYZ軸を使ってスケッチ描く方法もあるみたいなのでそれもできたら試したいな…。