ノギスの出力データのマイナスデータ確認
0.60mm と−0.60mmでの出力波形です
上の水色がデータ、下の黄色がクロックです。
整数部分は 60なので 111100 
-60では符号の21bit目が反転して1になってます
2^20=1048576 で以上マイナスってことですね
2の補数形式でマイナスですが、上手くいかなかったので今回は単純に 
  1048576-outData 
で処理しました。C言語のこの辺り良く理解出来ていないので
intのサイズがArduinoとESP32では違うのかなあ。
もう少し調べてみよう



 

デジタルノギスのUSBコネクタみたいな出力が使えそうなので実験

昔amazonで買った1500円程の安いデジタルノギス

電池の横に蓋が有って開けるとUSBっぽい4端子でのコネクタが有るんだけど。これの接続ケーブルって売ってないので諦めてたのですが、ネットで見ると読めそう。最近の電子工作のマイブームでトライ。

 

まずは信号の確認用に信号取り出し。専用のコネクタなんて無いので、ケーブル無理矢理ハンダ付け

(測定後この配線全て逆になってることに気付きました)

USBのメスコネクタ分解して両サイド削れば差し込み出来るかもとは思ったのですが、まずは半田で無理やりくっつけちゃいました。

 

このデジタルノギスの場合正しくは右から

 GND  写真では赤ケーブルつないでしまいました 普通は黒です

 Data

 Clock

 Vcc(1.6v) 写真では黒ケーブル着けてますが、後で取り外しました

でした

 

お城に繋いで測定

デジタル信号が出ている様ですが電圧が1.5~1.6vですね。電池がLR44なのでそのままでしょうか

クロックは100μsで6ブロック 120msの周期で出力されていました。

プラス端子は接続すると電池無くても一応動くように見えたのですが。電圧が3vだと壊れはしませんでしたがzeroが設定できませんでした。

300k程の抵抗入れて電圧1.5v程度に落としたつもりですがzeroが合いません。結局電池入れたらzero設定できたのですが、結局電池入れるならプラス線は使わないことにしました。

 

ESP32入力用には信号電圧を3Vまで上げます。

ESP32は1.6vだとデジタル入力信号ではheight/Lowの中間不安定領域なので。

2SC1815をスイッチに使って信号電圧を3Vまで上げるような回路にしました。

 

 参考 ESP32のGPIO入力について

 

出力波形を確認

波形もそのまま無事3vになりました 当然ながらプラスとマイナスは逆転しますがOK

さてさて後はデジタル値の読取です。

 

水色がデータで黄色がクロックです

0.07mmだとこんな感じのクロックとデータの波形です。

最初の4bitで111=7 なのでそのまま二進数で24bit表示でした

 

後はこのデータの取込みプログラム C初心者の私にはここが難題で。

ググルとラジオペンチさんのブログにドンピシャいいのがありました。

Arduinoで作成されていましたのでほぼ使えそう。参照させて(パクらせて)頂きました

コンパイルして書込み無事動作しました。

USBポートには垂れ流しで値出力しているので、Excelなどでボタンクリックでデータ取り込みも出来そうです。

 

 

スケッチはこちら

/*******************************************
  ESP32 Display SSD1306
  デジタルノギスターデータ取得   GPIO34 GPIO35
  Ver01 20220130  URK
****************************************/
#define VerNo "T02"
#include <stdio.h>
#include <Wire.h>
#include "SSD1306.h"    //ディスプレイ用ライブラリを読み込み
SSD1306  display(0x3c, 21, 22); //SSD1306インスタンスの作成(I2Cアドレス,SDA,SCL)

int clockPin = 34;                         // クロック入力ピン番号(Trで反転)
int dataPin = 35;                          // データ入力ピン番号(Trで反転)
float data;                                  //デジタルノギス値

void setup() {
  Serial.begin(115200);
  pinMode(clockPin, INPUT);
  pinMode(dataPin, INPUT);

  Serial.print("\n---------------\n");
  display.init();    //ディスプレイを初期化

  Serial.println("Ver:" + String(VerNo));
  Serial.println("Use G34,G35");
}

void loop() {
  display.clear();
  data = ReadCaliper();                     // ノギスからデータを読む
  data = data / 100.00;
  //画面表示
  display.setFont(ArialMT_Plain_10);                //フォントを設定 10,16,24
  display.drawString(110, 0, VerNo);                //Rev.No
  display.setFont(ArialMT_Plain_24);                //フォントを設定 10,16,24
  display.drawString(0, 36, String(data,2));        //LCD表示
  display.display();

  Serial.println(String(data, 2));          //シリアルポート出力
}

/*********************************************
   ノギスからデータ読んで値をintで返す関数
   参照:ラジオペンチさん参照 http://radiopench.blog96.fc2.com/blog-entry-324.html
*********************************************/
int ReadCaliper() {
  boolean dataStarted = false;
  unsigned long t0, bitOpr, oprResult;
  int n, outData;

  bitOpr = 0x00000001;                        // ビット操作オペレータ
  oprResult = 0x00000000;

  //   データ転送開始まで待つ
  while (dataStarted == false) {
    t0 = micros();                            // タイミングを記録
    while (digitalRead(clockPin) == LOW) {    // クロックピンがLOWの期間を検出
    }
    if (micros() >= t0 + 1000) {               // LOWが1mS以上続いていたらデータ開始とみなす
      dataStarted = true;                      // 但し、micros は70分でゼロに戻るのでその時は取りこぼす、ゴメン!
    }
  }                                            // クロックがHIGHになりデータ転送が始まる

  //   データのビット列を読み込み
  for (n = 1; n <= 24; n++) {                 // 24ビット読み出しループ
    while (digitalRead(clockPin) == HIGH) {   // クロックピンがLOWになるまで待つ
    }
    if (digitalRead(dataPin) == LOW) {
      oprResult = oprResult | bitOpr;         // 1(負論理なのでLOW)だったらビットを立てる
    }
    if ( n != 24 ) {                          // 最後のビットでなければ
      bitOpr = bitOpr << 1;                   // ビット操作オペレータを左にシフト
      while (digitalRead(clockPin) == LOW) {  // クロックがHIGHになるまで待つ
      }
    }
  }

  //  データを取り出しint型に整形
  outData = oprResult;                     // データを16ビットint変数に代入
  if ( (oprResult & 0x00100000)  != 0 ) {  // 負の値のフラグ(21ビット目)が立っていたら
      outData =  1048576-outData;         
  }
  return outData;                          // 値を返して関数終了
}

 

神栖市での現状のRakuten回線の状況
エリア地図で見る限り以前はパートナー回線だったけど現在は普通に4GLTEエリアにやっとなったと思ったけど、でも機内モードON/offで回線再接続やってみても、パートナー回線状態。
速度も1Mbps切る状態。まあ家でやってる分には光回線でWifiなので200Mbps程有るので良いのだけれど、外に出ると全くダメ

iPhoneでの設定確認
 設定⇨モバイル通信⇨ネットワーク選択
初期設定で自動にしていたのでまずはここをoffに
 そうすると接続できる電波が表示されると言う事で確認。44011がRakutenのPLMN番号と言うことで、確認してみると

Rakutenは2つ表示されてるけど44011は有りません

 

まあRakutenが選択されているのでまあいいかで、speedtest

いつもにこんな状態

でもねRakuteってもう一つ有ったので試しに変えてみようで変更

この状態でSpeedtestするとおおっダウンロード30Mbps出てる

残念ながらアップロードは相変わらず1Mbps以下ですが


 結論、今にところ神栖市でRakutenを利用する場合遅い場合は今のところ(2022/1現在)ですが手動で回線切り替えればダウンロードが速くなる様です。YoutubeやNetflex、AmazonVideo見るにはまあ良いけど、ZoomやTEAMSにはきついかな。

三木谷さん、楽天さんもう少し頑張りましょうウインク

インスタントコーヒーいつも適当に入れてるけど、今日はちゃんと計量してから入れてみた。
「1〜2gで140ccが適量です」って書いてあるし。一回やってみないといつもの適当が如何だったかもわからないし。

image


まずはコップ乗せて空重量0でセットしてインスタントコーヒー2g スプーン2杯程度。

普段は入れ物から直接パパっと振り入れる感じなので1.99g

案外少ない感じ。
image
お湯沸かして140cc =140gで
これ難しいよまあ10cc程度オーバーしたけどいいか。

image


でよくかき混ぜて。
おお、量をまじめに測ると ちゃんとおいしい。

いつもは多過ぎた感じ。

ちなみにこのカップで普通に入れると250ccだから、インスタントコーヒー次回は3~3.6gと言うことで

 

駐車場に置いていたセンサーライト3年ほど前に購入した1つ点灯しなくなったので分解して遊んでみました。太陽電池まだ何かに使えるかなって思いながら。

image
裏蓋開けるとこんな感じで 太陽電池、LED、バッテリー、ボード
image
まずは結線外してテスターで確認。

太陽電池部分:普通簡単に壊れないよね。
 短絡電流50mA、10Ωで5mA 6V なので30mW 今日は快晴だしもっと有っても良さそうだけど。電流計での消費有るから。でも壊れてはいない。

LED部:3V以上に上げるとしっかり光ります。太陽電池に直結すればちゃんと光ります。

バッテリー::あれっこれリチウムイオン電池18650。安いNiH電池入ってると思ってた。
電圧も4v以上あるし、LED直接続しても光るし使える。
 100Ωの抵抗入れてLEDに接続してどのくらい持つかなあってやってみたら10時間ほど朝になってもまだ明るく光ってました。朝には3.5Vまで電圧下がってたけど3V切ると多分LEDのところで電流流れなくなるから過放電もないのかなあ。
一旦取り外してXTARで確認。フル充電放電再充電でたぶん1日以上かかりそう。とりあえずは充電もできてるので。

と言う事で壊れているのはボード部分の様で。
こりゃ〜、ガーデンライトみたいに単純じゃあないし、焦電センサーもついてるし、プッシュスイッチでのモード切替もあるし、Li電池だから充電回路も入ってるので、私には修理無理ですね。
 太陽電池とLEDは使えているからバッテリーNiHにしてCL0116入れてガーデンライトにするか。
Li電池だと充放電回路入れないと危ないし。

でも今これって4〜6個セットだと1つ¥500〜600程度で新品購入できるんだよね。