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 a
にsr04.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 という規格、ライブラリやプログラムの抽象化が進んで
取り付けさえ間違わなければ対して気にせずセンサー自体の値は取得できるし便利なんだけど
仕組みや原理まで知ろうとすると結構大変だし、深い知識が求められる
今の自分だととりあえずさわり程度までしかわかんないけど
そのせいでセンサー繋いだ!値取れた!しか出来てないのがもったいない
とりあえず今回はここまで
多分次回に続く