IOT再びーーーESP32編(6)ーーー部品調達(防水 超音波センサー)-A0221AT

〇zonより,

超音波距離センサー、UART 制御距離検出器 3 ~ 450cm 低電力設計距離センサー、
IP67 防水設計 DC 3.3V ~ 5V ロボット用超音波距離検出器

を購入しました。たまたま,データシートをみつけ,GitHubにもサンプルのスケッチがのっていたので大丈夫
だろうと思っての購入でした。
取り合えず,arduino UNO で動かしてから,esp32に移植しようかと思いましたが,初期段階で,はまり
ました。何回やっても,シリアルポートが二つ開けないのです。結局勘違いでした。

    Srial.available()

の関数ですが,ポートが有効かどうかの判断の関数かと思いましたが,書き込みがあったかどうかの判定の
関数でした。どうりで,ポートが有効にならないはずです。

おまけに,届いた品物は,A0221AT というものですが,この型番のものは,測定を開始するのに,RX ピ
ンを一時ハイにしてやらないとだめなようで,GitHub のスケッチには,この部分が抜けていて,うごきませ
んでしたが,試しに,

  ss.write(“s”);(”S”を書き込みましたが,なんでもいみたいです)

を書き込んでやると無事うごきはじめました。

ちなみに,この防水センサーには,入出力の違いで,いくつか種類があるようで,UART 出力のものもに二種
類あるようでした。多分〇zonのものは,オートではないものなのかな,と思いました。
アリエクスプレスでは,きちんと,選択できるようになってます。

下記が,arduino UNO のスケッチで,loop(){ の次に,ss.write(“s”);を加筆してます。

/**
 * 
 * Author: Ritesh Talreja, Made in China, Warehouse: Shenzhen, Guangdong.
 * 
 * Components: Arduino UNO, DYPA02YYUM  v1.0
 * 
 * Arduino UNO +5V    --> DYPA02YYUM Pin 1 Red
 * Arduino UNO GND    --> DYPA02YYUM Pin 2 Black
 * Arduino UNO Pin 11 --> DYPA02YYUM Pin 3 or Floating
 * Arduino UNO Pin 10 --> DYPA02YYUM Pin 4
 * 
 * Since Arduino UNO does not have 2 hardware serial ports.
 * We are using 1 software serial port connected to the sensor.
 * All data from software serial port is copied onto hardware serial port to view in "Arduino IDE Serial Monitor".
 */

#include <SoftwareSerial.h>

SoftwareSerial ss (10, 11);   // RX, TX

byte hdr, data_h, data_l, chksum;
unsigned int distance;

void setup()
{
  Serial.begin(9600);
  while (!Serial);

  ss.begin(9600);
}

void loop()
{
  ss.write("s");
  if (ss.available())
  {
    hdr = (byte)ss.read();
    if (hdr == 255)
    {
      data_h = (byte)ss.read();
      data_l = (byte)ss.read();
      chksum = (byte)ss.read();

      if (chksum == ((hdr + data_h + data_l)&0x00FF))
      {
        Serial.print(hdr);
        Serial.print(",");
        Serial.print(data_h);
        Serial.print(",");
        Serial.print(data_l);
        Serial.print(",");
        Serial.print(chksum);
        
        Serial.print("=");
      
        Serial.print(hdr, HEX);
        Serial.print(",");
        Serial.print(data_h, HEX);
        Serial.print(",");
        Serial.print(data_l, HEX);
        Serial.print(",");
        Serial.print(chksum, HEX);
        Serial.print(" => ");
  
        distance = data_h * 256 + data_l;
        Serial.print(distance, HEX);
        Serial.print("=");
        Serial.print(distance, DEC);
        Serial.println(" mm");
      }
    }
  }
  delay(100);
}

写真が動かしたときの距離の様子です。結構正確に測定できてるようです。

久しぶりに UNO 引っ張りだしてきましたが,無事うごきました。

次は,esp32への移植ですが,レベルシフターをかまさないとでめでしょうかね。