Grove 超音波距離センサ を動かす

image

今回のプログラムはどのように動くか

image

書き込むと障害物とセンサーの距離データが表示されます。

Grove への Grove ケーブルのつなぎかた

Grove と Grove ケーブルのツメを合わせるように差し込みます。

image

このように差し込みました。

M5Stack への Grove ケーブルのつなぎかた

image

裏面右側のピン番号を合わせて以下のようにつなぎます。

  • 赤ケーブル
    • 5V
  • 黒ケーブル
    • G
  • 白ケーブル
    • つながない
  • 黄ケーブル
    • 2

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

GitHub の Grove 超音波距離センサセンサーのライブラリページ にアクセスします。

image

Code ボタンをクリックして Download ZIP ボタンからダウンロードします。

image

スケッチ > ライブラリをインクルード > .ZIP形式のライブラリをインストール をクリックします。

image

先ほどダウンロードした ZIP ファイルを選択してインストールします。こちらは Windows のファイル選択ですが、Mac の人は適宜読み替えてください。

これでインストール完了です。

image

ツール > ライブラリを管理で、

image

タイプをインストール済みで絞り込んで、Grove Ultrasonic Ranger がインストールされていればインストール成功です。

ソースコードを反映&保存

Arduino IDE で新規ファイルを作成し、以下のコードをコピーアンドペーストします。こちらを dhw-pp2-study-03-08-UltraSonicRanger-sensor というファイル名で保存します。

#include <M5Stack.h>

// 今回のセンサーライブラリの呼び出し
#include "Ultrasonic.h"
// 黄色いケーブルを挿すピンは 2 番ピン
Ultrasonic ultrasonic(2);

void setup() {
  // init lcd, serial, but don't init sd card
  M5.begin(true, false, true);

  Wire.begin();

  M5.Power.begin();

  M5.Lcd.clear(BLACK);
  M5.Lcd.setTextSize(3);
  M5.Lcd.println("UltraSonic");
  M5.Lcd.print("Ranger");
  M5.Lcd.setTextColor(WHITE);

}

void loop() {
  M5.update();

  M5.Lcd.clear(BLACK);
  M5.Lcd.setCursor(0, 100);

  long RangeInCentimeters;
  RangeInCentimeters = ultrasonic.MeasureInCentimeters();
  Serial.print(RangeInCentimeters); // 0 ~ 400cm
  Serial.println(" cm");

  M5.Lcd.print("Range : ");
  M5.Lcd.print(RangeInCentimeters);
  M5.Lcd.println(" cm");

  delay(1000); // データ取得のため 250 ms 以上のインターバルを持つ
}

M5Stack に書き込んでみる

image

M5Stack に書き込んでみましょう。

動かしてみる

image

動かしてみると、このように障害物とセンサーの距離データが表示されます。

image

手で距離を縮めてみると変化します。

LINE BOT と連携するソースコードを試す

Arduino IDE で新規ファイルを作成し、以下のコードをコピーアンドペーストします。こちらを dhw-pp2-study-03-09-UltraSonicRanger-sensor-LINEBOT というファイル名で保存します。

#include <M5Stack.h>

// HTTP 通信を行うライブラリ
#include <HTTPClient.h>

// Wi-FiのSSID
char *ssid = "Wi-FiのSSID";
// Wi-Fiのパスワード
char *password = "Wi-Fiのパスワード";

// 今回のセンサーライブラリの呼び出し
#include "Ultrasonic.h"
// 黄色いケーブルを挿すピンは 2 番ピン
Ultrasonic ultrasonic(2);

// カウントダウン用変数 メッセージを送った時間
long messageSentAt = 0;

void setup() {
  // init lcd, serial, but don't init sd card
  // LCD ディスプレイとシリアルは動かして、SDカードは動かさない設定
  M5.begin(true, false, true);

  // スタート
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.setCursor(10, 10);
  M5.Lcd.setTextColor(WHITE);
  M5.Lcd.setTextSize(2);

  // Arduino のシリアルモニタ・M5Stack LCDディスプレイ両方にメッセージを出す
  Serial.print("START");  // Arduino のシリアルモニタにメッセージを出す
  M5.Lcd.print("START");  // M5Stack LCDディスプレイにメッセージを出す(英語のみ)

  // WiFi 接続開始
  WiFi.begin(ssid, password);
  // 勝手に Button A が押されることを回避
  WiFi.setSleep(false);

  while (WiFi.status() != WL_CONNECTED) {
      delay(500);

      // Arduino のシリアルモニタ・M5Stack LCDディスプレイ両方にメッセージを出す
      Serial.print(".");
      M5.Lcd.print(".");
  }

  // WiFi Connected
  // WiFi 接続完了
  M5.Lcd.setCursor(10, 40);
  M5.Lcd.setTextColor(WHITE);
  M5.Lcd.setTextSize(2);

  // Arduino のシリアルモニタ・M5Stack LCDディスプレイ両方にメッセージを出す
  // 前のメッセージが print で改行入っていないので println で一つ入れる
  Serial.println("");  // Arduino のシリアルモニタにメッセージを出し改行が最後に入る
  M5.Lcd.println("");  // M5Stack LCDディスプレイにメッセージを出す改行が最後に入る(英語のみ) 

  // Arduino のシリアルモニタ・M5Stack LCDディスプレイ両方にメッセージを出す
  Serial.println("WiFi Connected.");  // Arduino のシリアルモニタにメッセージを出す
  M5.Lcd.println("WiFi Connected.");  // M5Stack LCDディスプレイにメッセージを出す(英語のみ)

  // 起動時に送る
  delay(1000);
  send_message("{\"message\":\"Launched!\"}");

}

// HTTP でメッセージ送信部分
void send_message(String msg) {

  // 今回送るホスト名 GitPod のホスト名 (https://なし)を反映
  // https://3000-hoge-fuga-scnzIUgdS.gitpod.io/ の場合は 3000-hoge-fuga-scnzIUgdS.gitpod.io
  String hostName = "*********************.gitpod.io";

  // 今回送るURL
  String url = "https://" + hostName + "/from/m5stack";

  Serial.println("-> send_message");
  Serial.print("msg: ");
  Serial.println(msg);

  // 送るデータ
  String queryString = msg;
  // HTTPClient 準備
  HTTPClient httpClient;
  // URL 設定
  httpClient.begin(url);
  // Content-Type
  httpClient.addHeader("Content-Type", "application/json");

  // データ送信完了
  Serial.println("sended.");

  // ポストする
  int status_code = httpClient.POST(queryString);
  if( status_code == 200 ){
    String response = httpClient.getString();

    Serial.println("response:");
    Serial.println(response);
  }
  httpClient.end();

  delay(2000);
}

void loop() {
  M5.update();

  // 以前の時間から現在の時間 millis() でどれだけ経過したかを計算
  long spanTime = millis() - messageSentAt;

  // 5秒 = 5000ミリ秒に1回送る
  // センサー取得時間は3秒くらいは確保する
  if (spanTime > 5000) {
    // 送った時間を更新
    messageSentAt = millis();

    M5.Lcd.clear(BLACK);
    M5.Lcd.setCursor(0, 100);

    // センサーデータを取得
    long RangeInCentimeters;
    RangeInCentimeters = ultrasonic.MeasureInCentimeters();
    Serial.print(RangeInCentimeters); // 0 ~ 400cm
    Serial.println(" cm");

    M5.Lcd.print("Range : ");
    M5.Lcd.print(RangeInCentimeters);
    M5.Lcd.println(" cm");

    // 50 cm 以下は接近とする
    if(RangeInCentimeters < 50){
      // JSON 形式のメッセージを送る
      send_message("{\"message\":\"(o_o)< ALERT!!\"}");
    } else {
      // JSON 形式のメッセージを送る
      send_message("{\"message\":\"(-_-)\"}");
    }

  }

  if (M5.BtnA.wasReleased()) {
    // A ボタンを押したら JSON 形式のメッセージを飛ばす
    // \" はダブルクォーテーションで囲まれた中で JSON 内のダブルクォーテーションを表現するために \" でエスケープしてます。
    send_message("{\"message\":\"Pushed A\"}");
  } else if (M5.BtnB.wasReleased()) {
    // B ボタンを押したら JSON 形式のメッセージを飛ばす
    send_message("{\"message\":\"Pushed B\"}");
  } else if (M5.BtnC.wasReleased()) {
    // C ボタンを押したら JSON 形式のメッセージを飛ばす
    send_message("{\"message\":\"Pushed C\"}");
  }

  delay(1000);
}

Wi-Fi 情報を反映

// Wi-FiのSSID
char *ssid = "Wi-FiのSSID";
// Wi-Fiのパスワード
char *password = "Wi-Fiのパスワード";

自分のつなぎたい Wi-Fi の SSID とパスワードを反映します。

Gitpod のホスト名を反映

  // 今回送るホスト名 Gitpod のホスト名 (https://なし)を反映
  // https://3000-hoge-fuga-scnzIUgdS.gitpod.io/ の場合は 3000-hoge-fuga-scnzIUgdS.gitpod.io
  String hostName = "*********************.gitpod.io";

今回送るホスト名 Gitpod のホスト名を反映します。

LINE BOT 連携のプログラムを M5Stack に書き込んでみる

そして、もう一度保存します。(大事)

image

M5Stack に書き込んでみましょう。

LINE BOT 連携のプログラムを M5Stack に動かしてみる

起動してみると Launched! というメッセージが Gitpod 経由で LINE BOT のほうに送られます。

image

5秒に1回のタイミングで、センサーからデータが取得され距離データが表示されます。

image

同時に、50cm 以下に近づいたら (o_o)< ALERT!! というメッセージ、それ以上距離が離れていたら (-_-) というメッセージが Gitpod 経由で LINE BOT のほうに送られます。

image

LINE BOT はこのようにメッセージが送られています。

質疑応答

image

ここまでで質問があればどうぞ!

次にすすみましょう

左のナビゲーションから次の教材にすすみましょう。

results matching ""

    No results matching ""