激安デジタルノギスを改造。数値データをArduinoで読み取れるようにしてみた:#てくのじ何でも実験室

テクノロジー Science
宮里圭介

宮里圭介

ディスク収集家

  • X

需要のわからない記事を作る自由物書き。分解とかアホな工作とかもやるよー。USBを「ゆしば」と呼ぼう協会実質代表。

特集

ノギスは、長さを0.1mmや0.05mm単位で精密に測れる便利な工具。独特な形状のジョウやクチバシなどを駆使することで、厚みや深さ、高さ、外径、内径などが測れます。

▲本体とスライダーにある2つの目盛りを使い、長さを測ります

ひとつあると趣味の工作でとても役立ってくれるのですが、目盛りの読み取りは目視。とくに視力が下がってくると、どうしても読み間違いは起こってしまいがちで、何度確認しても不安が残ります。

こんな時に活躍してくれるのが、デジタルノギス。小型のディスプレーに数値そのものを表示してくれるため、読み間違いの心配がなくなるのがいいところです。また、0.01mm単位で測れる製品もあるため、より高精度な計測ができるというのもメリットでしょう。

▲そのものズバリの数値が出ます

まともなメーカーのちゃんとした製品だと数万円しますが、この手の汎用的な工具は製造会社が多く、多少精度が狂っているかもしれないことを覚悟すれば、かなり安く手に入ります。実際Amazonなどで探してみると、0.01mm単位の製品であれば2000円前後から、0.1mm単位の製品なら2本で999円なんていうものまで簡単に見つかります。もちろん、送料込み。

▲1000円くらいの激安品は、大抵0.1mm単位です

デジタルで表示できるなら、そのデータを取得できると楽しいのでは……と考えるのは、自然な流れ。だいぶ昔に調べたときに、デジタルノギスにデータ出力端子らしきものがあること、とあるメーカーからデータ取得キットみたいなものが売られていること、までは確認していました。

▲初めて買ったデジタルノギスにあったデータ出力端子(たぶん)

できるだろうことがわかると、「そのうちやろう」と興味が薄れて後回しになってしまい、5年、10年と時間が流れたりするわけです。

ところで先日、久々にデジタルノギスを使おうと取り出したところ、なんと、表示されません。電池が切れたかなと交換するも、どうやら故障してしまったらしく無反応のまま。手元には0.1mm単位のデジタルノギスはありますが、精度的に不安があるので、0.01mm単位のノギスが使いたかったのですが……。

使う機会は少ないものの、ないとなると不便。ということで、新しく購入することにしました。そこで、Amazonでどんな製品があるのか探してみたところ、結構種類が増えていて驚きました。

安目なのは、プラスチックのスライダーにステンレスボディという、昔からある組み合わせ。数百円高くなるとスライダーもステンレス、さらに高くなると防水やガラスグリッドといった付加価値が増えていきます。

また、以前は電池が1.5VのLR44というのがほとんどでしたが、3VのCR2032を採用するものもチラホラ出ていました。電池の入手性、持ちがよくなっているのでしょうかね。

どうせ買うなら、以前から気になってたデータの取得もしてみたいと思い、データ出力端子がある製品を探したのですが……。残念ながら、正式にデータ出力への対応を表明している激安デジタルノギスなんてありません。

ということで、いくつかめぼしいものをピックアップして、確認してみることにしました。

データが出力されていることを祈りながら買う!

真っ当な用途でノギスとして使うだけなら、データ出力端子なんて必要ありません。気に入ったものを購入すればいいと思います。仕様にないものを求めるため、写真での判断が頼りとなります。

で・す・が。

そもそも、その写真が怪しい。複数カットあるものを見ても、カットごとに製品が違うなんていうのはよくある話。また、レンダリングイメージであって実製品の写真じゃないというのも多数見つかります。

唯一の手掛かりは、以前持っていた製品にはデータ出力端子があったということ。というわけで、古いスタイルで安価な「プラスチックスライダー+ステンレスボディ」の製品と、よく見かける新しめの「ステンレススライダー+ステンレスボディ」という2つの製品を買ってみました。

▲古いスタイルのノギスで、1900円くらいで購入

▲最近よく見る製品で、2200円くらいで購入

結論からいうと、古いスタイルの方は昔の製品と同じく、カバーの内側にデータ出力端子がありました。しかし、スタンレススライダーの方はカバーが見当たりません。分解して基板もチェックしたのですが、出力端子っぽいものは見当たりませんでした。

▲ステンレスの基板には出力端子のパターンがありませんでした

データ取得が目的なら、0.01mmなんていう精度はいりません。もっと安い0.1mmの製品でも十分遊べますから、こっちでデータ出力のあるものがないか調べてみましょう。

といっても状況は同じで、写真での判断はまず無理。そんなわけで、こちらも2製品ほど買ってみました。

▲2本で999円という激安ノギス

▲1200円くらいで購入した、画面が大きいモデル

高儀 TAKAGI 大画面 カーボンファイバー デジタルノギス 150mm
¥1,164
(価格・在庫状況は記事公開時点のものです)

こちらはスライダーもボディもプラスチック(カーボンファイバー)という製品です。ステンレスのように精度は出ませんが、軽くて使いやすいので、普段使いに意外と便利だったりします。

しかし残念ながら、どちらもデータ出力はナシ。2本999円の方はデータ出力端子のパターンがあるので期待したのですが、実際に信号を見ようとしても何も出力されていません。画面が大きい方は基板上にデータ出力端子のパターンがなく、こちらもデータの取得が難しいようです。

ちなみに、2本999円のにそっくりなものをもう1つ試してますが(いつ、どこで買ったか不明)、やはりパターンはあるもののデータ出力は確認できませんでした。

製造元やロットによっては、データが出力される可能性もあるので、運試しでイロイロ買ってみるのもアリかもしれません。ですが、それをやるなら0.01mm単位のちょっと高い方、しかも古いスタイルの製品を買ったほうが、可能性は高そうですね。

ちなみに、出力があるかどうかの確認は、4つの端子のうち中央の2つをオシロスコープで見れば一発です。

もっと手軽に確認したいのであれば、オシロスコープではなくテスターでもチェック可能。中央の2端子で、0.5~3Vくらいの電圧が計測できれば、何かが出力されている証拠です。

逆に、0Vのままピクリともしない場合は、残念ながら出力がない製品だと判断して諦めましょう。

どんな信号が出ているのか見てみる

今回試したのは、唯一データ出力が確認できた「adoric」というブランドの製品。

基板上のパターンから4つある端子を追っていくと、両端の2つは電池の+と-に繋がっていました。また中央の2つは、ICが固定・封入されているであろう黒いモールド樹脂へと向かっているので、これが目的のデータ出力だろうと予想がつきます。

どんな信号が出ているのか、まずは検索して先達に学ぶのが近道。ということで検索した結果、片方がクロック、もう片方がデータだということがわかりました。

実際に、オシロスコープを使ってクロックとデータを表示してみたのがこれ。

▲下がクロックで、上がデータです

クロックは300μs下がってから100μs上がるというのを4回繰り返し、その後、さらに400μs上がったままになります。これを6セット繰り返すというのがクロックの出力(約12ms)で、これを約160msごとに繰り返します。このクロックの変化に合わせてデータを読み、0か1かを読み出すことになります。

▲クロックのパターンが6回繰り返されている様子
▲この出力が、約160msごとに繰り返されます

4つのクロックを6回繰り返しているので、データとしては24ビットです。

データの形式はどうなっているか、これも先達の知識に頼ったところ、シンプルに数値を2進数で伝えているだけで、最後の方に符号ビットがあることがわかりました。具体的には、24ビットのデータのうち、前の20ビットが数値データで、21ビット目が符号。残りはインチ表示の時に変化するようです。

さて、データ取得の目途が立ったところで、実際どうやって読み取り、表示するかを考えてみます。それぞれ手順ごとに分割してみると、

  1. デジタルノギスから出力されたデータを読み取る

  2. データを数値に変換する

  3. 数値を表示する

という3つのステップで実現できそうです。

こういったデータ処理に向いているのが、ArduinoやRaspberry Piといった小さなコンピューター。汎用的に使えるIOが最初から用意されているため、センサーなどからのデータ読み取りは得意中の得意。また、小さくてもコンピューターですから、読み取ったデータの処理も問題ありません。

今回は手元にあったArduino UNOを使い、データの読み取りから数値への変換までを任せることにしました。ちなみにArduino IDEにはシリアルモニター機能があるので、変換した数値をシリアル出力すれば、PCで数値を表示できることになります。最初から最後まで、ほぼ、Arduino任せですね。

参考にしたのは、こちら「martin's useless and useful creations」にある、「Arduino reads digital caliper」というページ。

Arduinoのスケッチも公開されていているので、これをそのまま使わせてもらうことにします。ただし、Updateの項目にあるよう、HIGHとLOWの書き間違い部分の訂正は必要です。

ひとつ問題となるのが、入力部。Arduino UNOは5V入力となりますが、デジタルノギスのデータ出力は最大約1.5V。入力に必要な電圧レベルに届いていません。

そこで、Arduinoのアナログ入力端子を使い、適当な値以上を1、それ以下を0として入力を代替してやろうと思ったのですが……うまく動きません。

そういえば、アナログ入力のサンプリングレートってどのくらいなのかなと確認したところ、およそ100μs。ギリギリクロックは拾えなくはないですが、取りこぼす可能性が高いです。また、もしクロックがうまく拾えていたとしても、データを読もうとしたときにはすでに出力が終わっており、当然ながら正しい値になりません。

ということで、素直に1.5Vを5Vにレベル変換します。

参考にしていたページでは、トランジスタを使った簡単なレベル変換が行われていましたが、もうちょっと楽をしようと、「双方向ロジックレベル変換モジュール」を買いました。

▲双方向変換ですが、今回は単方向として使います

5Vと3.3Vの変換なので、今回のように1.5Vは動作対象外となってしまうのですが、動かなければその時ってことで試してみることにします。

もうひとつ問題となるのが、コネクター。当然ながら専用のコネクターなんて売っていませんし、手持ちにちょうどいい感じのものもありません。

デジタルノギスを分解し、直に線をハンダ付けしてしまえばいいだけの話ですが、せっかくカバーがあって端子が隠せるようになっているのですから、これを何とか使いたいところ。ということで、コネクターを自作しました。

▲染みがあるのは、工作用紙に瞬間接着剤を染み込ませているためです

素材は見ての通り工作用紙。ピンはUSBのコネクターを分解して手に入れました。

工作用紙で形を作り、瞬間接着剤で固めてあります。繊維を樹脂で固めていくという意味では、FRPと原理は似ていますね。これでもソコソコの強度の素材となること、カッターなどで削るのも楽という点で、こういった小物を作るのに結構使える技です。

とはいえ誰も興味ないと思うので、詳しい作り方は割愛します。

ということで、準備が整ったので組み立て。あくまで実験なので、レベル変換は小さいブレッドボード上で行います。

▲専用ボードは細かいパーツなしに使えるのが便利

レベル変換時のデジタルノギス側の電源は、データ出力端子に出ている電池の電圧をそのまま利用。Arduino側の電源は、Arduinoにある5V出力ピンと接続しています。ちなみにデジタルノギスの出力は、液晶寄りの方からGND、データ、クロック、+1.5Vです。

これで動くはずなんですが、どうしてもまともな値が出てくれません。正確に言えば、一旦は動いてくれたのですが、一回バラして後日同じように試したら動かなくなっていました。

原因を探るためオシロスコープで信号を見たところ、レベル変換時にGNDレベルが上がってしまっていて、クロックやデータが2V後半までしか下がっていませんでした。動作範囲外でレベル変換モジュールを使ったせいかとも思いましたが、それならそもそも動かないでしょう。

元のデジタルノギス側の信号を見ても電圧のゲタがあるので、双方向変換というのが不安定となる原因と考えられます。とはいえ、いまさらトランジスタで組み直すのも悔しいので、「下がりきらないなら電圧を下げちゃえばいいだろ」という場当たり的な対応を開始。具体的には、Arduinoから引っ張ってくる5Vを3.3Vに変更してみたところ、なんだか動いてしまいました。

今度は電圧が足りなくなりそうなものですが、ギリギリ入力として耐えられるレベルだったようです。何はともあれ、動いたのでヨシ。実験ですしね。

▲シリアルモニターに数値が並んでますが、これがデジタルノギスから取得したデータです

さて、肝心の動作ですが、シリアルモニターの数値とノギスの画面に出ている数値が一致していればオッケー……なんですが、実は0.01mmずれていました。ということで、補正用の値を入れて実験成功です。なお、上のシリアルモニターの画像は補正後のものです。

LCDシールドが出てきたので、こっちに表示してみる

Arduino IDEのシリアルモニターで数値を確認できたとはいえ、これは表示しているというより、表示を見に行っているような印象がぬぐえません。

そこで、より大きな液晶画面に表示してみることにしました。Arduinoを道具箱から発掘したとき、たまたま「LCD Keypad Shield」も一緒に発掘できたので、使ってみたくなっただけとも言います。

▲液晶とスイッチを搭載したシールド

スケッチの変更は、シリアル出力部分を液晶への出力に変更したくらい。2段表示できる液晶でしたので、意味もなく「digital caliper」などと表示するようにしています。あと、クロックとデータで使用するピン番号を変更しています。

ということで、修正を加えたスケッチがこちら。

#include <LiquidCrystal.h>
LiquidCrystal lcd( 8, 9, 4, 5, 6, 7);

int i;
int sign;
long value;
float result;
int clockpin = 12;
int datapin = 13;

unsigned long tempmicros;

char resultc[15];

void setup() {

lcd.begin(16, 2);
lcd.print("digital caliper");

}

void loop () {

while (digitalRead(clockpin)==LOW) {}
tempmicros=micros();
while (digitalRead(clockpin)==HIGH) {}

if ((micros()-tempmicros)>500) {
decode();
}

}



void decode() {

sign=1;
value=0;

for (i=0;i
while (digitalRead(clockpin)==HIGH) {}
while (digitalRead(clockpin)==LOW) {}

if (digitalRead(datapin)==LOW) {

if (i value|= 1<<i;
}

if (i==20) {
sign=-1;
}

}

}

result=((value+1)*sign)/100.00;
dtostrf(result,7,2,resultc);
lcd.setCursor(0, 1);
lcd.print(resultc);
delay(200);

}
▲デジタルノギスと数値は一緒!

そもそもデジタルノギスに液晶がありますし、別の液晶に表示するということに意味は全くないですが、ようやくデータを取得できたという達成感がありました。

ダイソーでデジタルノギスが売られている!

確認できた範囲での感想ですが、データ出力のあるノギスは消えつつあり、古いスタイルのものであれば残っていることもある、という印象。それだけに、新しい製品ではまず期待できないだろうと思っていました。

そんな時に、ダイソーでデジタルノギスが売られているということを知りました。0.1mm単位の製品で、価格は770円。すでに、1000円前後の激安品でデータ出力がなくなっていたことから、これもないんだろうなと思いつつも、まあ、念のため確認だけするかと購入。

▲大型店舗だと扱ってる可能性が高いです

使ってみようと試したら動作せずにビックリしましたが、単純に電池が別売というだけでした。使用するのはCR2032なので、割と新しめ。これは期待できないなと思いつつ、電池ボックスのネジを外したところ……あれ?奥に端子がある?

▲ちょっと見づらいですが、電池ボックスの奥に何かあります

いやいや、端子はあるのにデータ出力されていなかったというのが今までのパターン。期待するのはまだ早いです。ということで分解して基板を取り出し、端子をオシロスコープで見たところ……ちゃんとクロックとデータが出てました。

先に試していたデジタルノギスとの違いは、電圧レベルが3Vになっていることくらい。すでにレベル変換から先は完成していますので、デジタルノギス部分だけを置き換えるだけでいけるはずです。といっても、0.01mm単位と0.1mm単位という違いがあるので、データ構造は変わってそうですけど。

イロイロ考えるより試してみたほうが早いなと、単純な置き換えで実験してみたところ、何の苦労もなく数値が表示されました。スケッチもいじっていません。

▲Arduinoの液晶に燦然と輝く数値!

しかも、数値は0.01mm単位でとれてます。これはちょっと予想外にうれしい事でした。

問題があるとすれば、クロックやデータ線からノギス本体に電圧が乗っかってくるためか、液晶の表示がやたらと濃くなること。正面からは数字が読めなくなりますが、角度によってはギリギリ読めます。これも、双方向変換の影響でしょうか。

ちなみに、ダイソーのデジタルノギスの場合は3.3Vでも5Vでも、どちらの電圧レベルに変換しても動いてくれました。

ここでふと思いついたのが、3.3Vへの変換で動くなら、元の3Vのままでもイケるんじゃないか?ってこと。

とりあえず試したところ動かなかったのですが、「電圧が足りなそうなら、ちょっと動きやすくなるよう盛ってあげればよくない?」という、場当たり的な対応を再度試すことに。安直に、入力ピンをプルアップしました。

pinMode(clockpin, INPUT);
pinMode(datapin, INPUT);

これを、

pinMode(clockpin, INPUT_PULLUP);
pinMode(datapin, INPUT_PULLUP);

こっちに変更です。

これで動いちゃうんですから、やってみるものですね。とはいえ、やはりノギスの液晶は正面から読めません。

ここではクロックとデータ、GNDだけ繋いで実験していましたが、せっかくArduinoには3.3V出力があるのですから、これをデジタルノギスに突っ込んでやりましょう。これで電池不要で動作し、数値も表示できるようになります。なお、3.3V動作時ならプルアップいらないんじゃないかと思って試しましたが、入れておかないとダメでした。

ところで、ここまでやっておいてなんですが、レベル変換なしで使いたいなら、素直に3.3VのArduinoを使った方がいいと思います。

遊ぶだけならダイソーのデジタルノギス

ダイソーのデジタルノギスはABSとアクリルで作られているため、気温で長さが変わる可能性があります。また、ちょっと力を加えると簡単に曲がるため、精度の面ではおもちゃレベルだと思っておいた方がいいです。

ただし、定規をあてて目で読み取るよりかは正確ですから、精密である必要がない場合のサイズ把握には十分活躍してくれます。

なによりデータ出力があるため、読み取って遊ぶには最適。趣味の工作で、細かい移動距離をそれなりの精度で測りたい、なんて時に使うセンサー素材として(人によっては)重宝するでしょう。これ以外にも、キーボード機能を追加して表計算ソフトへの寸法入力に活用したり、ESP32を使ったワイヤレス化など、イロイロと遊べそうです。

もちろん、ステンレスのデジタルノギスの方が精度が高いですし、誤差も小さくなります。しかし、入手性や価格面を考えると、ダイソーのデジタルノギスの手軽さは強い。とりあえず、データ読み取りを試してみたいというのであれば、今すぐ買いに走りましょう!

なお、製造時期やロットなどの違いで、データ出力がなくなっている可能性もあります。仕様が変更されていても他人に当たらない強い心を持つ人だけが、チャレンジしてください。あと、スケッチは一応動作確認してますが、動かない場合はイイ感じに修正してください。すべて自己責任でどうぞ。

参考:


《宮里圭介》

宮里圭介

宮里圭介

ディスク収集家

  • X

需要のわからない記事を作る自由物書き。分解とかアホな工作とかもやるよー。USBを「ゆしば」と呼ぼう協会実質代表。

特集

BECOME A MEMBER

『テクノエッジ アルファ』会員募集中

最新テック・ガジェット情報コミュニティ『テクノエッジ アルファ』を開設しました。会員専用Discrodサーバ参加権やイベント招待、会員限定コンテンツなど特典多数です。