〇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への移植ですが,レベルシフターをかまさないとでめでしょうかね。