M5StackにGrove SHT31温度湿度計をつないでみた

Grove SHT31温度湿度計をM5Stackにつないでみました。接続はGroveケーブルを使ってM5StackのGroveソケットに挿しました。

Groveソケット接続

プログラムはSeeed StudioのGrove WikiのSHT31のページにあるライブラリとサンプルコードを使いました。

変更点は、

  • 1行目に #include <M5Stack.h> を追加
  • 10行目にM5.begin( ); を追加
  • 12行目のボーレートを115200に変更
  • 29行目にLCDへの表示を追加

だけです。LCD表示はスクロールのコードを書いていないので、画面最後の行まで到達したらそれ以降画面更新はありません。

Groveソケットを使わないで、GPIO端子に接続するのも試してみました。接続ケーブルはGrove-4ピン-ジャンパメスケーブルを使い、接続先は、

黄 → SCL(GPIO22)
白 → SDA(GPIO21)
赤 → 3.3V
黒 → GND

としました。

GPIO端子に接続

こちらも問題なく動作しました。

 

[Nefry BTとGrove接続実験] RGBバックライト液晶

RGBバックライト液晶モジュール

私が購入したGROVEスターターキットV3に入っていたRGBバックライト液晶モジュールは、LCD RGB Backlight v4.0というモジュールです。スイッチサイエンスさんの単体販売ページに掲載されているものと同じ製品だと思われますが、スイッチサイエンスの製品写真だとv2.0になっているので、バージョンが異なる可能性があります。

Grove RGBバックライト液晶モジュール
Grove RGBバックライト液晶モジュール(裏)

RGBバックライト液晶モジュールの動作

この液晶は、文字の色は黒しかありませんが背景の色を変えられます。表示文字数は16文字x2行です。このモジュールとIoTボード間の通信はI2Cを使います。

このモジュールは5Vを必要とします。Nefry BTのGroveソケットに接続した場合、3.3Vしか供給されないので正常に動作しません。

Nefry BTにはGPIOのピンソケットが搭載されていて、5V電源のピンも出ているので、ピンソケットに接続すればこのモジュールを使えます。

接続には一方がバラになっているGroveケーブルを使います。例えばスイッチサイエンスさんではこんなGroveケーブルが販売されています。

先バラのGroveケーブル

このケーブルはメス端子が取り付けられているので、Nefry BTのGPIOソケットに接続する場合は、オス-オスのジャンパーケーブルを継ぎ足して使うとこなります。

Seeed Studioのサイトには、オス端子が付いた先バラケーブルが売られていますが、国内では販売店を見つけられませんでした。

ピンが付いている先バラGroveケーブル

私は短いケーブルが欲しかったので、通常のGroveケーブルを2分割してピン端子を取り付けました。とても雑な工作なので写真を載せるのが恥ずかしいです。

自作ケーブル

Nefry BT R2の場合、先バラケーブルは下図のように接続します。

Nefry BT R2でのGroveケーブル接続先

Nefry BT無印の場合は、5Vのソケット位置が異なるので注意してください。

Nefry BT無印
ケーブルの色GPIOソケット名
D0
D1
5V
GND

プログラム

Seeed StudioのGrove Wikiページに掲載されているライブラリとサンプルプログラムを動かしてみます。

Grove Wikiページの中程のSoftwareという部分にある「Grove-LCD RGB Backlight Library」というリンクをクリックしてプログラム一式のzipファイルをダウンロードします。

Arduino IDEのメニューで

[スケッチ] -> [ライブラリをインクルード] -> [.ZIP形式のライブラリをインストール…]

を選んでインストールします。

ライブラリのインストール

Arduino IDEの

[ファイル] -> [スケッチ例] -> [Grove – LCD RGB Backlight] -> [HelloWorld]

を選択してサンプルプログラム「HelloWrold.ino」を開きます。

サンプルプログラム HelloWorldを開く

HelloWorld.inoの中身はこうなっています。

このままのプログラムで動作するはずですが、なぜか動作しませんでした。

setup( ) の1行目に Serial.println(“”) を追加したら、なぜか動きました。理由はまだ解明できていません。

プログラム変更点
動作状況
名称LCD RGB Backlight
RGBバックライトLCD
バージョンv4.0
Seeed社 Wikihttp://wiki.seeedstudio.com/Grove-LCD_RGB_Backlight/
スイッチサイエンス商品ページhttps://www.switch-science.com/catalog/1629/
Nefry BT無印 動作ソケットD0 (動作未確認)
Nefry BT R2 動作ソケットD0

 


「Nefry BTとGroveモジュール接続実験」 トップページ

 

[Nefry BTとGrove接続実験] サーボモータ

サーボモータモジュール

私が購入したGROVEスターターキットV3に入っていたサーボモータモジュールには、型番や定格が記載されていませんでした。しかし、形状や付属品はスイッチサイエンスさんの単体販売ページに掲載されているものと同じに見えます。

Groveサーボモータモジュール

サーボモータの動作

サーボモーターはPWMで指定された値に応じて軸の角度が変わる特殊なモーターです。通常180度程度の可動域があります。PWMについては別記事に解説を記載しているので参照してください。

サーボモータの可動域の例

サーボモータのPWMパラメータは、一般的には、周期は10〜20msでパルス幅は0.5ms〜2.5msぐらいのようですが、機種による差が大きく、また個体による差もあるようです。

筆者が持っているサーボモーターでは、次のようなパラメーターで動作するようです。

筆者が持っているサーボモータのPWMパラメータ

プログラム

Nefry BTに装備されているスイッチを押す度に、0°、90°、180°の位置へ移動を繰り返すプログラムです。

配列宣言 pulse[3]で、0°、90°、180°のパルス幅を覚える配列を定義しています。
setup( )ルーチン内で ledcSetup(…) を実行して、チャンネル、周波数、目盛数を設定し、ledcAttachPin( )でGPIOピンとチャンネルを結びつけます。ledcWrite( )で0°のパルス幅をサーボモーターに設定しています。

次に、loop( )}ルーチン内では、スイッチが押される度に90°、180°、0°のパルス幅を順に設定しています。

諸元

名称Servo
サーボモータ
バージョン不明
Seeed社 Wikihttp://wiki.seeedstudio.com/Grove-Servo/
スイッチサイエンス商品ページhttps://www.switch-science.com/catalog/1858/
Nefry BT無印 動作ソケットD2, A0, A2
Nefry BT R2 動作ソケットD0, D2, D5, A0(プログラム上はA1)

「Nefry BTとGroveモジュール接続実験」 トップページ

 

[Nefry BTとGrove接続実験] LEDソケット+LED(赤、青、緑)

LEDモジュール

私が購入したGROVEスターターキットV3に入っていたLEDモジュールは、LED Socket Kit v1.4というモジュールです。スイッチサイエンスさんの単体販売ページに掲載されているものとは、基板部分は同じですが、付属するLEDの個数に違いがあります。スイッチサイエンスさんで販売されているものはLEDが1個しかついていませんが、GROVEスターターキットV3には赤、青、緑の3種類のLEDが付いています。

Grove LEDモジュールとLED3種
GroveLEDモジュール

基板の右下にあるのがLEDを挿すソケットです。右上にあるの黄色いプラスチックが付いた箱はLEDの明るさを調整する可変抵抗です。黄色い部分をドライバで回して明るさを調整します。

Grove LEDモジュール(裏)

LEDモジュールの動作

1(HIGH)を送るとLEDが点灯し、0(LOW)を送るとLEDが消灯します。LEDの明るさは基板についている可変抵抗で調整できるようになっています。LEDが暗い時や点灯しない時は可変抵抗を回してみてください。

LEDをソケットに挿す際に、LEDの極性を合わせる必要があります。通常は足の長い方がプラスですが、足の長さが同じでどちらかわからない場合は LED の形状で判断します。

LEDの極性

円の一部分が欠けて直線になっている方がマイナスです。モジュールのLEDソケット部にも円が欠けている絵が描いてあるので、それに合わせてLEDを差し込みます。

プログラム

1秒ごとに点灯、消灯を繰り返すプログラムです。digitalWrite(ピン, 設定値) を使ってHIGHとLOWを交互に設定しています。

LEDの明るさを変化させるプログラム

PWM(Pulse Width Modulation)を使って明るさを変化させます。Nefry BTでPWMを使う場合は、LEDCライブラリを使います。PWMとLEDCライブラリについては別記事に解説を書いていますので参照ください。

LEDをだんだん明るくし、輝度が最大になったら、今度はだんだん暗くする動作を繰り返すプログラムです。setup( )関数内のledcSetup( )関数でパラメータを設定し、ledcAttachPin( )関数で使用するピンを指定しています。loop( )関数内では、ledcWrite( )関数でLEDの明るさを変更しています。

諸元

名称LED Socket Kit
リレー
バージョンv1.4
Seeed社 Wikihttp://wiki.seeedstudio.com/Grove-LED_Socket_Kit/
スイッチサイエンス商品ページhttps://www.switch-science.com/catalog/1251/
Nefry BT無印 動作ソケットD2, A0, A2
Nefry BT R2 動作ソケットD0, D2, D5, A0(プログラム上はA1)

「Nefry BTとGroveモジュール接続実験」 トップページ

 

[Nefry BTとGrove接続実験] 温度センサ

温度センサモジュール

私が購入したGROVEスターターキットV3に入っていた温度センサモジュールは、Temperature Sensor V1.2というモジュールです。スイッチサイエンスさんの単体販売ページに掲載されているものと同じです。

Grove温度センサ
Grove温度センサ(裏)

温度センサモジュールの動作

温度センサモジュールはアナログモジュールです。温度の高い低いに応じて出力される電圧が変化します。analogRead(PIN)関数を使うと電圧の高さが0〜4095の数値として得られます。この数値だと何度かわからないので、数値を温度に変換するプログラムが必要になります。変換方法は、Groveモジュールの販売サイトや、Groveモジュールで使用している温度センサ部品のサイトに掲載されていますが、かなり難解です。Groveモジュールを使うだけなら、販売店サイトで公開されているプログラムを利用するのが手軽です。

プログラム

ここではSeeed Studio社の商品紹介ページにあるArduino用のプログラムを使ってみます。

このプログラムをNefry BT用に変更します。

  1. pinTempSensorA5をNefry BT 無印の場合はA2に変更します。Nefry BT R2の場合はA1に変更してください。
  2. Serial.begin(9600); は不要なので削除します。
  3. pinMode( )関数がなくても動作しますが、念のためpinMode(pinTermpSensor, INPUT);を追加します。
  4. aanalogRead(pinTempSensor)で取得した値です。ArduinoのanalogRead( )関数は0〜1023の値を返しますが、Nefry BTのanalogRead( )関数は0〜4095の値を返すので、1023.0となっている部分を4095.0に変更します。

この変更を加えたプログラムは次のようになります。

 

このプログラムを動作させると、シリアルモニタに次のような結果が出力されます。

温度計測定値のシリアルモニタ出力例

なんとなくそれらしい温度が表示されていますが、Arduinoにこの温度センサーを接続した時より1〜2度低いようです。Arduinoのプログラムは5Vでの動作を前提としているので、3.3Vだと少し定数の変更が必要なのかもしれません。

諸元

名称Temperature Sensor
温度センサ
バージョンV1.2
Seeed社 Wikihttp://wiki.seeedstudio.com/Grove-Temperature_Sensor_V1.2/
スイッチサイエンス商品ページhttps://www.switch-science.com/catalog/806/
Nefry BT無印 動作ソケットA2
Nefry BT R2 動作ソケットA0(プログラム上はA1)

「Nefry BTとGroveモジュール接続実験」 トップページ

[Nefry BTとGrove接続実験] ボリューム

ボリュームモジュール(可変抵抗モジュール)

私が購入したGROVEスターターキットV3に入っていたボリュームは、Rotary Angle Sensor V1.2 というモジュールです。スイッチサイエンスさんの単体販売ページの中央に写っているものと同じです。同じページの右上の画像のモジュールはボリュームパーツが若干異なるようです。

Groveボリュームモジュール(表)
Groveボリュームモジュール(裏)

ボリュームモジュールの動作

ボリュームモジュールはアナログモジュールです。3.3Vの電源に接続している場合、ノブを回すと0Vから3.3Vまで電圧が連続的に変化します。ノブを時計回りにいっぱい回すと0Vで反時計回りにいっぱい回すと3.3Vが出力されます。なんとなく逆のイメージがありますが、このような動作になっています。

プログラム

ボリュームモジュールから読み込んだ値をシリアルコンソールに表示するプログラムです。値の読み込みはanalogRead(PIN)関数で行なっています。

プログラムを動作させノブを左右に回すとこのように0〜4095の数字が表示されます。右にいっぱい回すと0、左にいっぱい回すと4095が表示されます。

コンソール出力例

 

Groveソケットごとの動作状況

4箇所のGroveソケットにボリュームモジュールを順に接続して、動作をテストしてみました。

Nefry BT 無印の場合はこうなります。

GROVEソケット名動作状況コメント
D0NOボリュームを接続した状態だとNefry BTが起動しない。起動してから接続すると、常に4095が表示される。
D2NO常に0が表示される。
A0NO常に4095が表示される。
A2OK

Nefry BT R2の場合はこうなります。

GROVEソケット名動作状況コメント
D0NO常に0が表示される。
D2NO常に0が表示される。
D5NO常に4095が表示される。
A0OKプログラムでは、A0ではなくA1を使う。

Nery BT無印ではA2だけ、Nefry BT R2ではA0だけ使えるという結果になりましたが、これには理由があります。

0〜3.3Vの電圧を0〜4095の数値に変換する作業はADC(Analog Digital Converter)が行います。Nefry BTのCPUであるESP-WROOM-32には2系統のADCがありADC1、ADC2と呼ばれています。ADCが使えるGPIOピンは決まっています。

GPIO番号無印 Groveソケット名無印 PIN名R2 Groveソケット名R2 PIN名ADC1ADC2
GPIO0ADC2_CH1
GPIO2ADC2_CH0
GPIO4ADC2_CH2
GPIO12ADC2__CH5
GPIO13A6D7ADC2_CH4
GPIO14A5D8ADC2_CH6
GPIO15ADC2_CH3
GPIO25A0A0D5D5ADC2_CH8
GPIO26A1D6ADC2_CH9
GPIO27A4T4(基板裏)ADC2_CH7
GPIO32A2A2A0A1ADC1_CH4
GPIO33A3A0ADC1_CH5
GPIO34ADC1_CH6
GPIO35A7ADC1_CH7
GPIO36A3ADC1_CH0
GPIO39A2ADC1_CH3

Nefry BT無印のGroveソケットでは、A2でADC1が、A0でADC2が使えることになりますが、A2は動作しますが、A0は動作しません。同様にNefry BT R2のGroveソケットでは、A0でADC1が、D5でADC2が使えることになりますが、A0は動作しますがD5は動作しません。これは、

Wifiが動作しているときはADC2は使えない

という制限がESP-WROOM-32にあるためです。詳しくはESP-IDF Programming GuideのADCの項を参照してください。

Wifiを止めればNefry BT無印のA0とNefry BT R2のD5も使えると思いますが、まだ実験していません。

ADC1は、Nefry BT無印のピンソケットA2、 A3、A7や、Nefry BT R2のピンソケットA0、A1、A2、A3にも接続されているので使えると思いますが、こちらもまだ実験していません。

諸元

名称Rotary Angle Sensor
ボリューム
バージョンv1.2
Seeed社 Wikihttp://wiki.seeedstudio.com/Grove-Rotary_Angle_Sensor/
スイッチサイエンス商品ページhttps://www.switch-science.com/catalog/805/
Nefry BT無印 動作ソケットA2
Nefry BT R2 動作ソケットA0(プログラム上はA1)

参考文献

ESP-IDF Programming Guide – ADC

スイッチサイエンスの記事 「ESP-WROOM-32に関するTIPS」のADCの項

 


「Nefry BTとGroveモジュール接続実験」 トップページ

[Nefry BTとGrove接続実験] ボタンとタッチセンサ

ボタンモジュール

私が購入したGROVEスターターキットV3に入っていたボタンは、Button V1.1というモジュールです。現在スイッチサイエンスさんで単体で販売されているボタンモジュールとは、使われているボタン部品が違ったり、ネジ止め用の穴に対する端子の位置が90度異なるなど違いがありますが、動作は同じだと考えられます。

Groveボタン
Groveボタン(裏)

タッチセンサモジュール

タッチセンサはTouch v1.1です。こちらもスイッチサイエンスさんで販売されているタッチセンサとは、ネジ止め用の穴に対する端子の位置が90度異なります。

Groveタッチセンサ
Groveタッチセンサ(裏)

ボタンとタッチセンサの働き

ボタンとタッチセンサはデジタルモジュールです。ボタンが押されていない(タッチセンサに触れていない)状態では0(LOW)を返し、押されている(触れている)状態では1(HIGH)を返します。

プログラム

シリアルモニタに、通常は0が表示され、ボタンを押している間(タッチセンサの場合は指で触れている間)だけ1が表示されるプログラムです。モジュールを接続するGroveソケットに合わせて、PINの#define文で指定してください。

Nefry BT 無印のGroveソケットの名前は下記のようになっています。

Nefry BT無印のGroveソケット名

Nefry BT R2のGroveソケットの名前は下記のようになっています。

Nefry BT R2のGroveソケット名

A0ソケットを使う場合は、プログラム上ではA1を指定してください。これは、Nefry BT R2の配線がA0とA1が入れ違っているためです。

状態の取得は、digitalRead(PIN )関数で行います。ボタン(あるいはタッチセンサ)の状態が0あるいは1で返ってきます。

プログラムを動作させるとシリアルモニタにこのように表示されます。ボタンを押している間は1が表示されます。

シリアルモニタの出力例

Groveソケットごとの動作状況

4箇所のGroveソケットにボタンを順に接続して、動作をテストしてみました。タッチセンサの場合も同じ結果になります。

Nefry BT無印でのテスト結果はこうなりました。

GROVEソケット名動作状況コメント
I2C(D0)NO液晶ディスプレイとピンを共有しているため動作しません。またソケットにボタンモジュールをつないでいるとNefry BTが起動しません。
D2OK
A0OK
A2OK

 

Nefry BT R2でのテスト結果はこうなりました。

GROVEソケット名動作状況コメント
D0OK
D2OK
D5OK
A2OKプログラムではA0の代わりにA1を指定する

Nefry BT R2のGroveソケットA0は、実際にはA1が配線されているため、プログラムでピンを指定するときA1を指定します。

ピンソケットの利用

Nefry BTにはGroveソケット以外にピンソケットも用意されています。変換ケーブルを使うとGroveモジュールをピンソケットに接続できます。スイッチサイエンスさんにはこんな変換ケーブルがあります。

Grove先ばらケーブル

先端がメスになっているのでオス – オスのジャンパーケーブルを接続して使います。

ケーブルは4本の線があり、ボタンとタッチセンサでは次のように機能が割り振られています。

黒:GRD
赤;VCC
白:未接続
黄:信号

ピンソケットを使う場合は、赤を3.3V、黒をGND、黄色をGPIOソケットに接続します。

Nefry BT 無印のピンソケットの配置は下図のようになっています。

Nefry BT無印のピンソケット配置図

 

 

Nefry BT R2のピンソケットの配置は下図のようになっています。

Nefry BT R2のピンソケット配置図

ピンソケットの動作状況

ボタンを順に接続して、動作をテストしてみました。タッチセンサの場合も同じ結果になります。D0, D1以外のピンソケットで動作しました。

Nefry BT無印でのテスト結果はこうなりました。

ピンソケット動作状況コメント
D0NO液晶ディスプレイと共用のため
D1NO液晶ディスプレイと共用のため
D2OK
D3OK
D4OK
A0OK
A1OK
A2OK
A3OK
A4OK
A5OK
A6OK
A7OK

Nefry BT R2でのテスト結果はこうなりました。全てのピンソケットで動作しました。

ピンソケット動作状況コメント
D0OK
D1OK
D2OK
D3OK
D4OK
D5OK
D6OK
D7OK
D8OK
A0OK
A1OK
A2OK
A3OK

動作テストに使用したプログラムはこちらです。

諸元

ボタンの諸元

名称Button
ボタン
バージョンv1.1
Seeed社 Wikihttp://wiki.seeedstudio.com/Grove-Button/
スイッチサイエンス商品ページhttps://www.switch-science.com/catalog/801/
Nefry BT無印 動作ソケットD2, A0, A2
Nefry BT R2 動作ソケットD0, D2, D5, A0(プログラム上はA1)

タッチセンサの諸元

名称Button
ボタン
バージョンv1.1
Seeed社 Wikihttp://wiki.seeedstudio.com/Grove-Touch_Sensor/
スイッチサイエンス商品ページhttps://www.switch-science.com/catalog/811/
Nefry BT無印 動作ソケットD2, A0, A2
Nefry BT R2 動作ソケットD0, D2, D5, A0(プログラム上はA1)

「Nefry BTとGroveモジュール接続実験」 トップページ

[Nefry BTとGrove接続実験] ブザー

ブザーモジュール

私が購入したGROVEスターターキットV3に入っていたブザーモジュールは、Buzzer V1.2というモジュールです。スイッチサイエンスさんの単体販売ページに掲載されているものと同じです。

Groveブザーモジュール(表)
Groveブザーモジュール(裏)

ブザーモジュールの動作

ブザーモジュールはデジタル出力モジュールです。1(HIGH)を送るとブザーが鳴り、0(LOW)を送るとブザーが止まります。音量の調整はできません。かなり大きな音が出るので、静かな部屋だとびっくりします。

プログラム

1秒間音を鳴らした後1秒間音を止めるという動作を繰り返すプログラムです。

setup( )関数内のpinMode(PIN, OUTPUT)で、GPIOピンを出力に設定しています。loop( )関数内では、まずdigitalWrite(PIN, HIGH)でHIGHを出力して音を鳴らし、delay(1000)で1秒間待ちます。次にdigitalWrite(PIN, LOW)でLOWを出力して音を止め、delay(1000)で1秒間待ちます。

メロディーを演奏するプログラム

Seed Studio社のGrove Wikiページにはブザーでメロディーを演奏するプログラムが掲載されています。

下記のリストでは、Nefry BTで動作するように、19行目のBUZZER_PINの設定をコメントアウトし、24行目でBUZZER_PINの値を変更してあります。

60-70行目のplayNote(char note, int duration )が、指定された高さの音を鳴らす関数です。引数noteはnames[ ]配列に入っている’c’, ‘d’,・・・で音の高さを指定します。’c’は’ド’, ‘d’は’レ’, ・・・です。引数durationはその音を鳴らす時間をmsで指定します。tones[ ]配列は、音の矩形波がHight/LOWになっている時間をmicro second単位で覚えています。

51-58行目のplayTone(int tone, int duration)が実際に音を鳴らしている関数です。digitalWrite(BUZZER_PIN, HIGH)でブザーを鳴らしdelayMicroseconds(tone)でtoneで指定されたmicro secondだけ待ちます。次にdigitalWrite(BUZZER_PIN, LOW)でブザーを止めdelayMicroseconds(tone)でtoneで指定されたmicro secondだけ待ちます。toneで指定されるmicro secondが非常に短い時間なので、このOn/Offの繰り返しで音の高さを調整しています。音を鳴らしている時間の調整は52行目で行なっています。

実行してみると、綺麗な音ではありませんが、一応メロディーに聞こえます。

諸元

名称Buzzer
ブザー
バージョンv1.2
Seeed社 Wikihttp://wiki.seeedstudio.com/Grove-Buzzer/
スイッチサイエンス商品ページhttps://www.switch-science.com/catalog/804/
Nefry BT無印 動作ソケットD2, A0, A2
Nefry BT R2 動作ソケットD0, D2, D5, A0(プログラム上はA1)

「Nefry BTとGroveモジュール接続実験」 トップページ

 

[Nefry BTとGrove接続実験] リレー

注意:Groveリレーモジュールの電子回路は5V用に設計されているようなので、Nefry BTが供給する3.3Vでは回路が壊れる可能性があります。筆者の環境では下記の内容で動作しましたが、壊れないことを保証するものではありません。

リレーモジュール

私が購入したGROVEスターターキットV3に入っていたリレーモジュールは、Relay V1.2というモジュールです。スイッチサイエンスさんの単体販売ページに掲載されているものと同じです。

Groveリレー

右側の黒い箱がリレーです。左にある緑色部分にOn/Offしたい機器のケーブルを接続します。ケーブルの固定は上部のマイナスネジを回して行います。

リレーモジュールの動作

1(HIGH)を送ると回路が接続し、0(LOW)を送ると回路を切断します。接続する回路は、リレー上面に記載されている仕様を満たしていなければなりません。

リレーモジュールには回路の接続/切断状態を表すLEDが取り付けられています。回路が接続状態のときLEDが点灯し、切断状態のときLEDが消灯します。

回路が接続状態のときLEDが点灯

プログラム

1秒ごとに回路の接続・切断を繰り返すプログラムです。digitalWrite(ピン, 設定値) を使ってHIGHとLOWを交互に設定しています。

諸元

名称Relay
リレー
バージョンv1.2
Seeed社 Wikihttp://wiki.seeedstudio.com/Grove-Relay/
スイッチサイエンス商品ページhttps://www.switch-science.com/catalog/807/
Nefry BT無印 動作ソケットD2, A0, A2
Nefry BT R2 動作ソケットD0, D2, D5, A0(プログラム上はA1)

「Nefry BTとGroveモジュール接続実験」 トップページ

 

[Nefry BTとGrove接続実験] 音センサ

音センサーモジュール

私が購入したGROVEスターターキットV3に入っていた音センサモジュールは、Sound Sensor V1.6というモジュールです。スイッチサイエンスさんの単体販売ページに掲載されているものと同じです。

黒い丸い部分がマイクで、その下にあるICはアンプです。

Grove音センサ(表)
Grove音センサ(裏)

音センサモジュールの動作

音センサモジュールはアナログモジュールです。音の大きさに応じて出力される電圧が変化します。

プログラム

analogRead( )関数を使って音センサーから読み込んだ値をシリアルモニタに表示するプログラムです。

このプログラムを動作させると、このように数字列が表示されます。

シリアルモニタ出力例

数値が激しく変化していますね。音の情報なので変化速度や変化量が大きいためだと思われます。100ms周期でデータを取るのは遅すぎるようです。

Seeed社のWikiページに掲載されているプログラムは次のようになっています。

32回測定してその平均を計測結果にしています。また、計測は10ms周期で行なっています。

これだけ短い周期で結果をシリアルモニタに出力すると、値がどんどん流れて行ってしまい、全体の傾向がどうなっているのかがわかりません。

シリアルプロッタを使うと、結果をわかりやすく表示できます。シリアルプロッタを開く手順は次の通りです。

  1. シリアルモニタが開いている場合は閉じます
  2. ツールメニューのシリアルプロッタを選択します。
ツルーメニューでシリアルプロッタを選択

シリアルプロッタには次のようなグラフが表示されます。

シリアルプロッタ表示例

諸元

名称Sound Sensor
音センサ
バージョンV1.6
Seeed社 Wikihttp://wiki.seeedstudio.com/Grove-Sound_Sensor/
スイッチサイエンス商品ページhttps://www.switch-science.com/catalog/816/
Nefry BT無印 動作ソケットA2
Nefry BT R2 動作ソケットA0(プログラム上はA1)

「Nefry BTとGroveモジュール接続実験」 トップページ