hiro yamamoto works

マイコンハード、ソフトを作ったりしています。
お家や現場のお困りごと解決に!
内容利用は自己責任でお願いします。

データロガーでVL53L0Xレーザ測距センサモジュール測ってみる

2020-07-31 14:15:00 | マイコンハードウェア
数年前購入したレーザ測距センサモジュールを
自作データロガーに接続して距離を測ってみました。
レーザ測距センサモジュールAE-VL53L0Xを自作データロガーに接続して距離を測ってみました。

センサはAE-VL53L0Xです。
STマイクロ社のレーザー距離センサVL53L0Xを使用した小型レーザ測距
モジュールです。
レーザ測距センサモジュールAE-VL53L0Xを自作データロガーに接続して距離を測ってみました。

まだ使い方をよく理解していないのですが、
繰返し測定で実際の距離+20mmぐらいの数字が出力されます。
ばらつきも最大で5mmぐらい出ます。ちょっと残念な感じですね
縦置き横置きの差は無いと感じました。
保護シールはもちろん剥がしてあります。
計測には不向きかもしれませんが、もう少し使い方を調べてみます。

センサモジュール仕様
電源電圧:3.3~5.0V
計測範囲(最小):約3cm
計測範囲(最大):約200cm (屋内)
光源: 940nm Class 1レーザー
I2Cインターフェース
レギュレータとI2Cレベルシフタ搭載
寸法:20mmx30mm(厚み最大約5mmコネクタ部)

データロガー応用です。
距離データをSDメモリへ記録しています。
ESP-WROOM-02マイコンを使っているので、
WiFi経由でデータへアクセスできます。

ハンダ吸い取り器のノズルが詰まったので交換しました。

2020-07-31 12:51:00 | ものづくり
太陽電機産業製ポータブル自動はんだ吸取器TP-100の
ノズルが詰まってしまったので交換しました。

吸いが悪くなったのでクリーニングピンを挿入したら
抜けなくなり、ひっぱったり、回したりがんばった結果
ノズルの中で折れてしまいました。

お手入れをさぼった結果です。
取扱説明書に「作業終了後クリーニングピンで3,4回
出し入れして、トリガーを一度引く、その後プラグを
抜いて・・・」吸いが悪いときしかやっていませんでした。
よく読まなかった私が悪い。
はんだ吸取器TP-100ノズルお手入れ(取説)

取り外したTP-100のノズル
取り外したノズル
初めて取り外しました。こんなに長かったとは

詰まっています。想定していなかったので、
交換部品を準備していませんでした。
クリーニングピンが詰まってしまったノズル

購入したノズル(Φ1.0mm)とクリーニングピン(Φ0.7mm)
ノズル(Φ1.0mm)とクリーニングピン(Φ0.7mm)
アマゾンで7/22発注7/31入庫(9日間)
goot(グット) 替ノズル φ1.0 TP-100/200N-10 ¥2,160
goot(グット) 替クリーニングピン0.7mm TP-100CP-07 ¥265
goot(グット) ピンバイス TP-100PV ¥491

交換の仕方
(強く締めすぎると破損するので注意とあります。)
ノズル交換の仕方レンチで緩めて引き抜く(取説)

挿し込んで
ノズルを本体に挿し込む

スパナで締め付けます
ノズルをスパナで締め付けます

追加で用意した詰まりを予防するアイテム
追加で用意した詰まりを予防するアイテム、ピンバイスTP-100PVと0.9mmドリル刃
ピンバイスと0.9mmドリル刃

クリーニングピンと併せて定期的にクリーニングします。
ピンバイスにドリル刃をセットして定期的にクリーニング

使用後の手入れをきちんとやって再発防止します。
今度はドリル刃を折ってノズルに詰まらせないように気を
つけます。

SDWebSarverスケッチでSD内特定ファイルを開かせない方法

2020-07-26 21:15:00 | マイコンハードウェア

問題解決できました。

スケッチ例SDWebSarverではSDメモリ内のファイルが
webブラウザで見えてしまいます。
SDメモリから設定ファイルを読み込んでWiFi接続
する方法では、SDメモリ内のファイルがwebブラウザ
で見えてしまうのはセキュリティー上の重大な問題となり
ます。
スケッチ例SDWebSarverSDメモリ内のファイルがwebブラウザで見えてしまう
たぶん例外なく見えてしまうので、設定ファイルに書かれた
SSID、Passwordが見えてしまうことになります。
これは解決しないとせっかくの便利な機能が使えません。

解決方法を検討しました。
・ファイルの関連付け(?)を"image/png"とか指定する方法
→開けなくなるが、ページのソースから見えてしまう。NG
・指定したファイルの時はファイルを開く処理をしない方法
→開けない&見えない。OK(採用)

Webページの表示はこのようになります。
スケッチ例SDWebSarverで特定ファイルを開かせない時のWebページの表示

関連投稿
ESP-WROOM-02マイコン SDメモリから設定ファイルを読み込ん
でWiFi接続。

変更内容
スケッチ例SDWebServer内の関数に4行書き加えています。
開かせないファイルは /setup/setup.txt です。
編集した関数を掲載しました。(追加部分は表示あり)

掲載都合で行数を減らすための編集をしてるので、
オリジナルと違うところがありますが動作は変わりません。

bool loadFromSdCard(String path) {
String dataType = "text/plain";
if (path.endsWith("/")) path += "index.htm";
if (path.endsWith(".src")) path = path.substring(0, path.lastIndexOf("."));
else if (path.endsWith(".htm")) dataType = "text/html";
else if (path.endsWith(".css")) dataType = "text/css";
else if (path.endsWith(".js")) dataType = "application/javascript";
else if (path.endsWith(".png")) dataType = "image/png";
else if (path.endsWith(".gif")) dataType = "image/gif";
else if (path.endsWith(".jpg")) dataType = "image/jpeg";
else if (path.endsWith(".ico")) dataType = "image/x-icon";
else if (path.endsWith(".xml")) dataType = "text/xml";
else if (path.endsWith(".pdf")) dataType = "application/pdf";
else if (path.endsWith(".zip")) dataType = "application/zip";//行数減のために省略編集したのでオリジナルと違っています。
if (path == "/setup/setup.txt") {//追加部分 setup.txtを開かせない
server.send(404, "text/plain", "");//追加部分
} else { //追加部分
File dataFile = SD.open(path.c_str());
if (dataFile.isDirectory()) {
path += "/index.htm";
dataType = "text/html";
dataFile = SD.open(path.c_str());
}
if (!dataFile) {
return false;
}
if (server.hasArg("download")) {
dataType = "application/octet-stream";
}
if (server.streamFile(dataFile, dataType) != dataFile.size()) {
DBG_OUTPUT_PORT.println("Sent less data than expected!");
}
dataFile.close();
return true;
}//追加部分
}


関数loadFromSdCard()部分の抜粋なので
これだけでは動作しません。

オリジナルのスケッチに追加部分をコピペするのが
良いと思います。

無保証自己責任でよろしくおねがいします。


データロガーを温湿度計として使います。

2020-07-08 13:31:00 | マイコンハードウェア
自作データロガーをデジタル温湿度計として使っています。

肝心の温湿度表示が小さいので、直さないといけません。
自作データロガーをデジタル温湿度計として使っています。

センサはAdafruit Si7021 Temperature & Humidity Sensor Breakout Boardです。
センサはAdafruit Si7021 Temperature & Humidity Sensor Breakout Boardです。

センサ仕様
電源電圧:3.3 V or 5.0 V
3.3VレギュレーターとI2Cレベルシフタ搭載
計測範囲
湿度センサ:0~80% RH
温度センサ:-10~85℃
計測精度
湿度センサ:±3% RH(0~80% RH)
温度センサ:±0.4℃(-10~85℃)
I2Cインターフェース
寸法 :17.8 mm ×15.3 mm ×3.0 mm
センサ上部にある白い平らなものは、センサをきれいに保つ
ためのPTFEフィルタと書いてありました。

データロガー応用の温湿度計です。
家庭で使う温湿度計としては必要ない機能ですが
温湿度データをSDメモリへ記録しています。
ESP-WROOM-02マイコンを使っているので、
WiFi経由でデータへアクセスできます。

温湿度記録計としてキッチンで稼働しています。


ESP-WROOM-02 SDカード内のsetup.txtを使ってWi-Fi接続する。

2020-07-08 09:53:00 | マイコンソフトウェア
ESP-WROOM-02マイコンに接続したSDメモリカード内に
WiFi、ネットワーク設定を書いたsetup.txtというファイルを
置いて、起動時に読み込んで接続することができました。

webブラウザでSD内ファイルがすべて見えてしまう問題が
ありましたが、特定のファイルだけ見えないようにすることが
出来ました。
特定ファイルを開かせない・・・を見て下さい。
追記 2020/07/26
ESP-WROOM-02モジュールを使った自作マイコンボード
ip address,gateway,sabnet,dnsは固定できるように
しました。必要なければスケッチのIPAdress行と
WiFi.config行の頭に//をつけてコメント行にしてください。

投稿当初
ボードマネージャバージョンの違いでWiFi接続に失敗する
現象を確認しましたが、現在は発生しません。参考に
ボードマネージャバージョン2.5.2では発生なし。
ボードマネージャバージョン2.6.2は調査中
ボードマネージャバージョン2.7.2で書き込み後最初の
動作でかなりの確率で接続失敗しました。
その後RESETすると接続できました。

作例をWeb公開している方々に感謝します。


setup.txt例とスケッチを紹介します。

SDメモリカードにsetupというフォルダを作り、下記内容を
setup.txtというファイルを作って保存します。
setup.txt例
##以降はコメントとして扱われます。
#SSのあとにSSID、paのあとにpasswordを入力してください
#SS your-SSID #SSID
#pa your-password #password
#
SS ********** #SSID
pa ********** #password
#
#gw 192,168, 1, 1 #gateway
#sn 255,255,255, 0 #subnet
#dn 192,168, 1, 1 #dnS1
#ip 192,168, 1, 10 #ip address
#
gw 192,168, 1, 1 #gateway
sn 255,255,255, 0 #subnet
dn 192,168, 1, 1 #dnS1
ip 192,168, 1, 10 #ip address


スケッチ
スケッチ例DumpFileを改変したものです。
#include行のライブラリ名を<>で囲んで下さい。

#include SPI.h
#include SD.h
#include ESP8266WiFi.h
const int chipSelect = 15;
String ssid;
String password;
int gw[4], sn[4], dn[4], ip[4];
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
//while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
//}
Serial.print("Initializing SD card...");
// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
// don't do anything more:
return;
}
Serial.println("card initialized.");
// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
File dataFile = SD.open("setup/setup.txt",FILE_READ);//setupフォルダ内setup.txtをopen
// if the file is available, write to it:
if (dataFile) {
while (dataFile.available()) {//dataFileを1行づつ評価していく
String line = dataFile.readStringUntil('\n');//終端文字'\n'が検出されるまで読んで文字列全体をlineへ入れる
line = line.substring(0, line.indexOf('#'));//インデックス0(行頭)から(#までのインデックス数)の文字列取得
if (line.substring(0, 2) == "SS") {
ssid = line.substring(line.indexOf(' '));//スペースから行末まで
ssid.trim();//スペース等を除去
} else if (line.substring(0, 2) == "pa") {
password = line.substring(line.indexOf(' '));//スペースから行末まで
password.trim();//スペース等を除去
} else if (line.substring(0, 2) == "gw") {
String gw0 = line.substring(3, 6);
String gw1 = line.substring(7, 10);
String gw2 = line.substring(11, 14);
String gw3 = line.substring(15, 18);
gw[0] = gw0.toInt(); gw[1] = gw1.toInt(); gw[2] = gw2.toInt(); gw[3] = gw3.toInt();
} else if (line.substring(0, 2) == "sn") {
String sn0 = line.substring(3, 6);
String sn1 = line.substring(7, 10);
String sn2 = line.substring(11, 14);
String sn3 = line.substring(15, 18);
sn[0] = sn0.toInt(); sn[1] = sn1.toInt(); sn[2] = sn2.toInt(); sn[3] = sn3.toInt();
} else if (line.substring(0, 2) == "dn") {
String dn0 = line.substring(3, 6);
String dn1 = line.substring(7, 10);
String dn2 = line.substring(11, 14);
String dn3 = line.substring(15, 18);
dn[0] = dn0.toInt(); dn[1] = dn1.toInt(); dn[2] = dn2.toInt(); dn[3] = dn3.toInt();
} else if (line.substring(0, 2) == "ip") {
String ip0 = line.substring(3, 6);
String ip1 = line.substring(7, 10);
String ip2 = line.substring(11, 14);
String ip3 = line.substring(15, 18);
ip[0] = ip0.toInt(); ip[1] = ip1.toInt(); ip[2] = ip2.toInt(); ip[3] = ip3.toInt();
}
}
dataFile.close();

}
// if the file isn't open, pop up an error:
else {
Serial.println("error opening setup.txt");
}
Serial.println(), Serial.println();
Serial.print("Connecting to "), Serial.println(ssid);
IPAddress local_IP(ip[0], ip[1], ip[2], ip[3]);
IPAddress gateway(gw[0], gw[1], gw[2], gw[3]); // NTPサーバ名アクセス時必要
IPAddress subnet(sn[0], sn[1], sn[2], sn[3]);
IPAddress dns1(dn[0], dn[1], dn[2], dn[3]); // NTPサーバ名アクセス時必要
WiFi.mode(WIFI_STA);//WiFi子機モード
WiFi.config(local_IP, gateway, subnet, dns1);//ESP引数順序変更不可 NTPサーバ名アクセス時dns1要
WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(""); Serial.println("WiFi connected!");
Serial.print("IP address: "); Serial.println(WiFi.localIP());
Serial.print("ESP Mac Address: "); Serial.println(WiFi.macAddress());
Serial.print("Subnet Mask: "); Serial.println(WiFi.subnetMask());
Serial.print("Gateway IP: "); Serial.println(WiFi.gatewayIP());
Serial.print("DNS: "); Serial.println(WiFi.dnsIP());
}
void loop() {
}


ArduinoIDEにコピペしたらメニューの「ツール」「自動整形」
で見やすくなります。
#includeのライブラリ名を忘れずに<>で囲って下さい。

無保証自己責任でよろしくお願いします。