ELEGOO Arduino用UNO R3スターターキット で始める マイコン+電子工作6

ELEGOO Arduino用UNO R3スターターキット レベルアップ チュートリアル付

前回の続き
引き続きチュートリアルに沿って電子工作入門していく

超音波センサー

使用する機器

  • (1) x Elegoo Uno R3
  • (1) x Ultrasonic sensor module
  • (4) x F-M wires (Female to Male DuPont wires)

超音波センサー

センサヘッドから超音波を発信し、対象物から反射してくる超音波を再度センサヘッドで受信します。超音波式センサは、発信から受信までの「時間」を計測することで対象物までの距離を測定しています。

距離を測るセンサなのね

試験距離=(高レベル時間×音速(340m / s)/ 2

構成

センサーのVCCピンを 5V 電源に
GNDピンをGNDに
Echoピンを 11番PWMに
Trigピンを 12番に センサー基盤側にピンの名称がちゃんと刻印されてるのでわかりやすい

この時点でなんとなく、Echoピント Trgiピンを操作してなんかするんだなとわかる

いつもどおりサンプルプログラムをデプロイし
シリアルモニタを開くと何かしら文字列が流れていく

何かしら検知しているようだ

コードを見てみると

#include "SR04.h"
#define TRIG_PIN 12
#define ECHO_PIN 11
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
long a;

void setup() {
   Serial.begin(9600);
   delay(1000);
}

void loop() {
   a=sr04.Distance();
   Serial.print(a);
   Serial.println("cm");
   delay(1000);
}

ライブラリで完全に簡略化されているが、log asr04.Distance()つまり超音波センサーの値を入れてそれをシリアルログ出力している
delay(1000);間隔で

センサー自体は Trig に HIGH が送られたとき音波を発生させ
Echo ピンに音波の応答時間を返しているだけだが、その両方の値をライブラリ内で制御、計算しているためコードはこのように簡略化されている
便利だが、仕組みや動きの理解という点においては不便だ

センサーを色んな対象物に対して向けることでセンサーからどれくらいの距離にあるかがわかる
正確な距離を知りたいとなった場合、超音波の理解も必要(検知対象に対して並行に配置、凸凹したものは距離精度が下がる等)だし
利用する上では色々メリット、デメリットを把握しておく必要がありそう

温度湿度センサー

使用する機器

  • (1) x Elegoo Uno R3
  • (1) x DHT11 Temperature and Humidity module
  • (3) x F-M wires (Female to Male DuPont wires)

温度湿度センサー

DHT11 デジタル温湿度センサーは、温度と湿度の較正されたデジタル信号出力を含む複合センサー です。専用のデジタルモジュール収集技術と温湿度感知技術を適用し、高い信頼性と優れた長期安定 性を保証します。

  • データシート

温度湿度センサーは超音波センサー同様になんやかんやして温度と湿度を取得してるらしい
正直わからん!

構成

データシートにもある通り、DHT11 は 左から GND、NC、DATA、VDD とピンが設定されていて
それが基盤に取り付けらモジュール化され左から GND、VDD、DATAとなっている
※NCは「non connection」 の意味で接続しないピンとなる

配線し、いつもどおりプログラムとライブラリをデプロイして
シリアルコンソールを開くとセンサーデータを取得できる

T が温度、 H が湿度かな

コードを見てみると

#include <dht_nonblocking.h>
#define DHT_SENSOR_TYPE DHT_TYPE_11

static const int DHT_SENSOR_PIN = 2;
DHT_nonblocking dht_sensor( DHT_SENSOR_PIN, DHT_SENSOR_TYPE );

/*
 * Initialize the serial port.
 */
void setup( )
{
  Serial.begin( 9600);
}

/*
 * Poll for a measurement, keeping the state machine alive.  Returns
 * true if a measurement is available.
 */
static bool measure_environment( float *temperature, float *humidity )
{
  static unsigned long measurement_timestamp = millis( );

  /* Measure once every four seconds. */
  if( millis( ) - measurement_timestamp > 3000ul )
  {
    if( dht_sensor.measure( temperature, humidity ) == true )
    {
      measurement_timestamp = millis( );
      return( true );
    }
  }

  return( false );
}

/*
 * Main program loop.
 */
void loop( )
{
  float temperature;
  float humidity;

  /* Measure temperature and humidity.  If the functions returns
     true, then a measurement is available. */
  if( measure_environment( &temperature, &humidity ) == true )
  {
    Serial.print( "T = " );
    Serial.print( temperature, 1 );
    Serial.print( " deg. C, H = " );
    Serial.print( humidity, 1 );
    Serial.println( "%" );
  }
}`

ライブラリ側で計算しているためこれまたセンサー制御系のコードは無く
データの定義とデータ取得、表示についてのコードのみ
measure_environment 関数を定義して値を取り続けるようにし、あとは Loopで値の取得確認と表示を繰り返している

実際にセンサーが取得し Arudino 側に送っているデータは 8bit x 5種類となっており
先頭から湿度(High)、湿度(Low)、温度(High)、温度(Low)となっている

チュートリアルの資料だとシリアル出力にビットデータも出してるんだけどコード上はそうなってない
なのでちょっとコード弄ってみたいなと思ってもコードがあんまり理解できてないから触りにくいなー


マイコンボードでよく取り上げられる超音波センサーと温湿度センサーを触ってみた回
Arduino という規格、ライブラリやプログラムの抽象化が進んで
取り付けさえ間違わなければ対して気にせずセンサー自体の値は取得できるし便利なんだけど

仕組みや原理まで知ろうとすると結構大変だし、深い知識が求められる
今の自分だととりあえずさわり程度までしかわかんないけど
そのせいでセンサー繋いだ!値取れた!しか出来てないのがもったいない

とりあえず今回はここまで
多分次回に続く

Share Comments
comments powered by Disqus