« 2023年2月 | トップページ | 2023年4月 »

2023年3月

2023年3月30日 (木)

ラズピコで2chシリアル入出力のテスト

ラズベリーパイ・ピコのシリアル入力は二つ。(USBを除いて)
これを使って2ch入力のシリアルデータロガーを実現できたら
エエなぁっと、ごそごそしてます。

Arduino UNOベースでは1ch入力のは作ってあり、
現用中です。
  ・Arduino-UNO + SDカードでシリアルデータロガー 完成形 今度こそ
ニッケル水素電池の放電データなどはこれで
記録しています。

なぜ2ch入力のが欲しいかというと、あれこれ測定した
計測データの集計です。
例えば、温度や照度や電圧、電流。
センサー側はシリアルデータとして出力できるように作って
あるのですが、それらを集計するとき、別の装置が出すデータ
との結合に困っちゃうのです。

例えば、4ch入力アナログデータロガー
これも、アナログ値の記録とともに、外部からのシリアル
データを取り込めるようにしています。
 これが便利。
 シリアルデータの結合がロガー内で実現できちゃうのです。

あれこれ計っていると、2ch以上のシリアル入力を持っていて、
それをうまいことログできる装置が「いるぞ!」っというのが
お試しの理由です。

ラズピコは2つのシリアル通信機能を持てっています。
それを生かして、2chのログをできないかと試したのが
今回のゴソゴソです。

まずはこんな回路。
Ll1_20230330165801
  ↓ 左のピコ、裏返しはマズイぞと描き直しました
Ll51

手っ取り早くでっち上げた実物回路がこれ。
Ll00
ラズピコ基板が2枚。
GNDを共通にして、シリアルが2ch。

回路図左側のラズピコは、試しとなるシリアルデータを
出力するだけ。
1chは1秒おきに。 2chは乱数で送出周期を可変。

回路図右のラズピコはそれを受けて、USBに(PCに向けて)
出力するというテスト回路です。

ch1とch2の二つのデータを受けて集約して、USBに出力
するのです。
その集約方法、例えば・・・
Ll2_20230330165801
こんなモードを考えました。
こんな具合に、受信データをまとめます。
Ll3
mode0はそれぞれの受信データを別行にしてログ。

mode1は固定長のデータを1行にまとめて処理でき
るように。

mode2はデータの受信順序を確認できるように、
ch1を優先してch2は補助で。

Ll2_20230330165801

PCを使ってこれをするのは、USB通信アダプタをつないで
できるように、こんなソフトを作ってあります。
  ※これは仕事で!
Ll4

4chの入力まで対応しています。
通信があった日時情報とともにログします。
あちこちからやってくる通信データの内容確認、
整合性をチェックするのが目的です。

今回のは単純ログ。
受けた内容を取りこぼさずにログできればOKと。
その前段階のテストプログラムです。

 ・送信側
   ダウンロード - tx_data_2ch1.txt
 ・受信側
   ダウンロード - rx_data_2ch1.txt

これからもうちょい「身を付けて」(太らせて)
SDカードにログできるように手直しします。

もう一つ、こんなモードもいるかな。
ch1をマスター、ch2をスレーブに接続。
ch1がch2にコマンドを送って、ch2からの返答を
待つような通信だと、ch1の受信後、ch2を待って
から1行の電文にして出力。

mode0のように電文が別の行だと、後処理で
まとめなくてはなりません。
mode1のように1行が固定文字数だと、例えば
グラフ化のためGNUPLOTに食わすのも楽になります。

ATmega4809 だとシリアルが4本(40pin DIPだと3本)。
もっとチャンネルを増やせます。

それにしても、ラズピコの内部処理がつかみ切れません。
シリアル通信の割り込み、バッファを増やしたいんだけど、
・・・わからんまま。
  Arduino IDEで使ってる環境のせい?
  Earle F. Philhower, III 版だとどうだ?を
  調べるほうがエエかも。

| | コメント (0)

2023年3月29日 (水)

Arduino IDEでのラズピコ開発環境

Arduino IDEのボードマネージャーを
見たら、いつのまにやら「Earle F. Philhower, III」版
のが出てこなくなっています。

Pp11_20230329100701
ラズピコを触り始めた時は・・・出てきたような。
Arduino Mbed OS RP2040 Boads」というのだけに。
  ※下のは非推奨と

トラ技2022年5月号で、これをっと推奨されていた
「Earle F. Philhower, III」さんのはどこへ?

ラズピコ、USB以外のシリアル通信ポートが二つ
載っています。
Serial1とSerial2で行けるはずだったんですが、
今の環境だと、Serial2を使うのに
こんなおまじないが必要でした。
 UART Serial2(4, 5, NC, NC);  // そのままではSerial2が
            // 使えないのでピン番号指定を実行

シリアルの送受バッファの問題もあり、
ラズピコ、なかなかむつかしいです。

※追記
「Earle F. Philhower, III」版の設定が出なくなっていたの、
  「追加のボードマネージャーのURL」
が変わっていたのが原因でした。
設定し直したらちゃんと出現しました。


| | コメント (0)

2023年3月24日 (金)

電池ホルダーから電源供給するためのアダプタ(ダミー電池)#2

電池ホルダーから電源供給するためのアダプタ(ダミー電池)
この続き。

昼休み、ご近所のダイソーへ行ってワンサイズ小さい
12mmのスナップを買ってきました。
9コ入りで100円(税別)。
C11_20230324165701

上の二つが14mmので裁縫箱からの頂きもの。
下の二つが買ってきた12mmのスナップ。

昔に作ったのを思い出しながら、これでダミー電池を
作ってみます。
  
まずプラス側。 右下の12mmポッチリ付のを使います。
ポッチリの中に釘をハンダ付け。
C12_20230324165701
文鎮:ハンダ付け補助ツールの出番です。
C13_20230324165701
今回は電線出しで。
AWG22のリード線をハンダ付け。
C14_20230324165701
木の丸棒をちょいと加工。
C15_20230324165701
釘を差し込んでの固定だけでなく2液ボンドも使います。
C16_20230324165701

14mmのこれ↓をマイナス側に。
まずスプリングを外します。
C17_20230324165701
中心穴を広くして皿型木ネジ(2.6×8mm)が通せるように。
木棒も、ポッチリ部が入るように5mmのドリルで穴あけ。
C18_20230324165701
黒リードをハンダしてからネジ止め。
C19_20230324165701

プラスとマイナス、こんな感じ。
プラス側の熱収縮チューブのかぶりを多くして
接触しないように。

C20_20230324165901
電池ホルダーにセット。
隣との接触は大丈夫なようです。
C21_20230324165901

マイナス側、真ん中に突っ込んだ皿木ネジが
ちゃんと接触するようにスナップとハンダして
おくほうが良いかも。
しかし・・・ハンダの加熱で黒リードのハンダが外れると、
泣いちゃうかも。

| | コメント (7)

2023年3月23日 (木)

電池ホルダーから電源供給するためのアダプタ(ダミー電池)

電池で動く装置の修理案件で引っ張り出してきました。
単3電池4本で動作するハンディ計測機器です。
フタを開けて作業してるときは基板のコネクタから
電源を供給できるんですが、修理が終わってケースを
閉めた後は、電源コネクタや電池ホルダーの端子は
アクセスできなくなってしまいます。

もちろん電池で動かしても良いのですが、消費電流を
見たり電池電圧を変えた時の挙動を見るには、
可変電圧電源から電源を供給したくなります。

この電池ホルダーの電極、板形のものが使われていて
ミノムシやICクリップでははさみにくいのです。
そこで、こんなのを持ち出してきました。

B100

電池ホルダーのプラスとマイナス端子に接触する
ダミー電池です。
真ん中の2本は飛ばして端っこのプラスとマイナスに
接触させます。

直径12mmの木の丸棒を切った先端に、電極となる金具、
「14mmのスナップ」を取り付けてあります。

B101

ポッチリ部がうまいことプラスになります。

B102

マイナス側は皿の木ネジで丸棒に固定。
プラス側はポッチリの内側に釘をハンダして
丸棒に打ち込んだだけ。 (接着剤をはさんで)

真鍮材ですのでハンダ付けも容易。
曲げた真鍮棒をくっつけてミノムシではさめるよう
にしてあります。
電線を直接ハンダして引き出してもエエでしょう。
12mm径だとちょっと細いので、熱収縮チューブを
かぶせて太らせてあります。
  (何かから絶縁するという意図ではなく)

※12mmの丸棒は「ピピちゃん」 の止まり木用に
買った物。 (その残り)
スナップも女房からの提供物。

※続き:2023年3月24日:電池ホルダーから電源供給するためのアダプタ(ダミー電池)#2


| | コメント (3)

Arduino サーミスタを使った温度測定で 【ゼロ除算問題】

2023年3月21日:A/Dコンバータでサーミスタの抵抗値を読む サーミスタをつなぐ場所は?
この続き。 ゼロ除算問題が見えてきました。

あれこれ検索。

★電源側にサーミスタ

VasteeLab:Arduinoで火災報知機をつくってみた
 int val = analogRead(PinTemp);     // get analog value
 resistance=(float)(1023-val)*10000/val; // get resistance
   val値が0ならゼロ除算。

★サーミスタをGND側に持ってきた例

今日から始める電子工作 【初めてのArduino】6.サーミスタ|ハンズオンで学ぶ初心者向け入門コース
 サーミスタはGND側。
 しかし、Vref値を1023としているため、抵抗値算出の時、
 A/D値がフルスケールの1023ならゼロ除算エラー発生。
 正しくは「/ (1024 - readValue)」。
  //アナログ値を読む
   float readValue = analogRead(analogPin);
  //Rtを計算する
   float Rt = Rd * readValue / (1023 - readValue);

  ※1023が出るのはサーミスタが外れた時。
   0が短絡なんで、回路の異常報知案件。

みのや電子工作所:なんちゃって自作体温計の製作
  電圧計算に1023を使っているので、A/Dの
  フルスケール値を読み出したときはV0が5.0Vと
  なり、抵抗値算出の/(5.0-V0)でゼロ除算エラー。
  val*5.0/1024.0にしておくのが正しい計算で、
  これで、ゼロ除算エラーを回避できる。
   val = analogRead(AN0); //アナログ値読込み
   V0 = val*5.0/1023.0; //アナログ値から電圧換算
   THR = 10000.0*V0/(5.0-V0); //電圧値からサーミスタ抵抗値換算

adafruit.com:Using a Thermistor
  な、なんなんだ、この式は!
  A/D値が0でも1023でもアウト。
   float reading;
   reading = analogRead(THERMISTORPIN);
   reading = (1023 / reading) - 1; // (1023/ADC - 1)
   reading = SERIESRESISTOR / reading; // 10K / (1023/ADC - 1)


◆正しく計算 (コメントしたところも)

アイデアノート:Arduinoとサーミスタで温度測定

jh4vaj:Arduinoでサーミスタを使って温度計を作るのに、電圧を求める必要はない

プチモンテ:サーミスタ(NTC)の使い方 [Arduino]

arduino.stackexchange.com:How to include Vref in thermistor temperature calculation?
  あれこれ議論。


◆基準電圧で誤差が出るかも

ラジオペンチ:Arduiono を使ってサーミスタで温度を測る
   (電圧算出に1/1023を使っているのも気になる←修正済)

◆イイこと書いてある

Qiita @c_in_g:analogReadの値の変換を誤解していた話(1023、1024問題)
 引用させて頂きます。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  長々と書いたが、ぶっちゃけ、255/1023と256/1024の
  違いなんて微々たる差(1%にも満たない)で考慮する必要ない
  だろと思う。  こういうことは言ってはいけない
   :
  初心者はこんなクソ細かいことを気にするより色々作ってみた
  ほうがいい。  こういうことも言ってはいけない
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

★エラいことにつながるかも
『1023 vs 1024 問題』が【ゼロ除算問題】にまで膨らんじゃ
いました。
1023 vs 1024は「ちょっとした誤差やん」で見逃せた
んですが、ゼロ除算は笑って済ませられないかもしれ
ません。

『ミサイル巡洋艦・ヨークタウン ゼロ除算』を検索すると、
ゼロ除算エラーでシステムがダウン。航行不能に」なんて
記事が見つかります。

コンピュータのトラブルで漂流したアメリカのイージス巡洋艦 の考察

◆ゼロ除算エラーの話
PLCが突然停止、原因は割り算の演算エラー
【中級編】GX Works3 除算演算エラー回避方法 0で割らない

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
※追記

サーミスタでの温度計算とゼロ除算問題、式との相性が良い(!)
のかあれこれ見つかります。
「1023 vs 1024」と絡むのも面白いかと。

理系男子の電子工作:【PIC】ADCの使い方 サーミスタで温度測定
 サーミスタはGND側。
 エクセルでA/D値→温度テーブルを作っておくという
 手法です。
 このように↓言い切られています。
  『A = 0, 1023 の時にゼロ除算のエラーが
   発生しますが、測定値がそのような値を
   とることは考えられないので気にする
   必要はありません。』
 A/D値(A)からサーミスタ抵抗(R)の計算で
  「R = (r × A) ÷ (1023 - A)
 としているのを、1023→1024にするだけで
 フルスケールでのゼロ除算が回避できます。
 1024だと半値もちゃんと出るし。
   (log(0)エラーの問題は置いておいて)
 前もってデータテーブルを作るときのエラーですんで、
 実行時のエラーとは違う話になります。
 しかし、「いつも気にしておく」のが設計という
 ものです。

Digi-Key:正確なサーミスタベースの温度検出回路を迅速に作成
 デジキーの技術解説。
 サーミスタは電源側。
    Vadco A/D入力電圧
    Dout  A/Dデータ
    2^N  A/D分解能
    Rth  サーミスタ抵抗
    R25  GND側抵抗
  Vadco = Vref × (R25 ÷ (R25 + Rth))
  Dout = 2^N × (Vadco / Vref)
  Rth  = R25 × ((2^N ÷ Dout) - 1)
 
   (2^N ÷ Dout)でゼロ除算エラー発生(の可能性)。

 

| | コメント (2)

2023年3月21日 (火)

A/Dコンバータでサーミスタの抵抗値を読む サーミスタをつなぐ場所は?

私の場合、サーミスタ読み取りのための接続は、
基準抵抗をVref側に持ってきます。
こんな具合。

A01_20230321164901
こうすると、サーミスタの片方をGNDにできるので
シールド線が使えます。
この場合、温度が上昇するとサーミスタの抵抗値が
下がり、それに連れてA/D値も下がってしまいます。

温度が上がるとA/D値が下がってしまうので、直感的に
これを嫌う方が居られるのでしょうか、こんな具合に
基準抵抗をGND側につないでいる回路例を見かけます。

A02_20230321164901
こうすると、
 温度が上がる
   ↓
 サーミスタの抵抗値が下がる
   ↓
 A/D値が上がる
と、温度上昇でA/D値が上昇と、まぁ見た目の感覚に
合うような気がします。
しかしちょいと問題が・・・

RaあるいはRbの値を固定して、その時のA/D値から
反対側の抵抗値を計算する方法を見てみましょう。

VrefとVin、そしてRaとRbの関係式です。
A2_20230321165001
VrefとVinは何ボルトという実値でなくてもかまいません。

Vinは「ゼロ~フルスケール」。
8bitのADCなら「0~255」、10bitなら「0~1023」と
いう範囲の値になります。
そして、Vrefは「フルスケール値 + 1」

まず、サーミスタをGND側につないだ時
Raが基準抵抗。 Rbがサーミスタ。
VinからRb値を計算します。
A4_20230321165201

分母の「Vref - Vin」に注目。
サーミスタがGNDに短絡して0ΩになってVin=0になると
分子がゼロでRb=0が出てきます。
そして、分母はVrefそのもので計算可能。

サーミスタ入力がオープンになってVinがフルスケールに
なっても、分母の「Vref - Vin」は「1」になって計算可能
です。
  ※Vref=フルスケール値 + 1 が重要!

問題がサーミスタを電源側につないだ時の計算。
基準抵抗がGND側。
Raがサーミスタ。 Rbが基準抵抗。 
A3_20230321165401
サーミスタ入力がオープンになるとVinは
RbでGNDに落ちて、Vinはゼロ
この時、「Vref ÷ Vin」の分母がゼロになってしまって
ゼロ除算エラーが発生して、正しく計算できません。

このようなつなぎ方の時、A/D値「Vin = 0」をチェック
して、ゼロ除算エラーを回避する処置が必要です。
例えば、「0なら1に」するような。

Arduino UNOだとint値をゼロで割っても答えを「0xFFFF」
(intだと-1)にしているようですし、floatだと「inf」
無限大を出して、「ゼロで割ったから停止!」とはして
いません。

ネットに上がっているいろんなサンプル、ゼロ除算エラー
を無視しているのが多いようです。
マイコンを使っての計算でこれは「ちょっとなぁ」です。

~~~~~~~~~~~~~~~~~~~~~~~~~~~
※追記
サーミスタによる温度計測で、ゼロ除算エラーが
発生する可能性のある回路やスケッチの例。
  ※ネットを検索

Arduino 入門 Lesson 18 【サーミスタ編】:おもろ家
 サーミスタは電源側。
 「Rth = ((Vin/Vout) - 1) × R1」として
 サーミスタ抵抗値Rthを計算。
 VoutがA/D入力値で、「0」だとアウト。

https://asukiaaa.blogspot.com/2021試行錯誤な日々:Arduino(ESP32)でサーミスタを使い温度を取得
 サーミスタは電源側。
 「(double)(analogMax - analog) / analog * resistorPullDown;」
 でサーミスタ抵抗値を算出。
 analogがA/D値。 「0」だとアウト。
 12bit ADCだが、「#define ANALOG_MAX 4095」として
 「フルスケール+1」を使っていない。
 考え方として、これもダメ。

NOBのArduino日記!サーミスタの使い方! その2( 実測編!)(103JT-050)
 サーミスタは電源側。
 「R1 = ((Vcc × R2) / Vout) - R2 」で
 サーミスタ抵抗値R1を算出。
 VoutがA/D入力値で、やはり「0」だとアウト。

初めてのロボット組立:Arduinoにサーミスタを接続して温度を測定する
 サーミスタは電源側。
 「10000.0 * ((1024.0 / tempReading - 1))」でサーミスタの
 抵抗値を算出。
 tempReadingがA/D入力値で「0」だとアウト。

   ※LCDのコントラスト調整の半固定抵抗記号に
      んっ? ボリュームの記号が!
    で紹介した表記が使われている。
      電子回路エンジニアの皆さん、
      ほんとにこれ、どうにかして!

まったりYO$HI日記 気の向くまま(・∀・)【Arduino】サーミスタで温度測定
 サーミスタは電源側。
 「R = R1 × ((V / Vt) - 1)」でサーミスタの
 抵抗値Rを計算。 R1はGND側の抵抗100kΩ。
 VtがA-D入力値。 これが0ならアウト。

基礎からの IoT 入門Arduino IoT とは? 温度を測る ~ サーミスタの利用
 サーミスタは電源側。
 「R = ((Vin / Vout) - 1) × R1」で計算。
 VoutがA/D値。 0ならアウト。

~~~~~~~~~~~~~~~~~~~~~~~~~~~
Arduino UNOのような単純な8bitマイコンだと
機械語として割り算命令は持っていませんので
ゼロ除算によるトラップ(例外処理)は考慮しなくて
かまいません。(勝手には止まらない)
しかし、高機能なマイコンだとトラップに引っかかり
制御がそこで止まってしまうかもしれません。
  (そんな仕掛けをしていたら)

int値のゼロ除算なら結果はおそらく「-1」。
  (符号無しなら最大値に)
ゼロ除算を無視するのなら、この「-1」がその後の
計算にどんな影響を与えるのかを考えておかなくて
はなりません。

単純な表示でも、想定する桁数を越えちゃうと、表示
が「グチャ」っとなるかもしれません。
何かの制御に使っていたら・・・ちょっと怖い。

浮動小数点なら「NaN:Not a Number」や
inf:infinity」てなところでしょうか。

今回はサーミスタの抵抗値計算での話ですんで、
「マイナスの抵抗値」が出現てなことに
なっちゃうかも、です。

やはり、どこかで数値のエラーチェックが必要でしょう。
0での割り算をしちゃう大もとの、A/D値のゼロを
排除というのが簡単かと。

  これ、あれこれ書いてきましたが、
  サーミスタをGND側につないだ時は
  大丈夫なんですよ。
  10bitのADCなら0~1023の範囲で
  ちゃんと答えが得られます。

うだうだ言ってますが、結局はサーミスタの接続が
外れなければ大丈夫。
しかし・・・
  ・接触不良がおきたら?
  ・コネクタやプラグを使って抜き差しできる
   構造なら、抜いた時は?
  ・サーミスタへの配線が切れたら?
と、Vinが0Vになる可能性があるのなら、
ゼロ除算エラーが生じる可能性もあるわけです。
このつなぎ方をするのなら、ソフト的な対策は必要か
と思うのです。


★続き
 ↓
Arduino サーミスタを使った温度測定で 【ゼロ除算問題】

  サーミスタを使って温度計測の手順から、
  【1023 vs 1024 問題】だけじゃなく【ゼロ除算問題】が
  見えてきました。

| | コメント (0)

2023年3月19日 (日)

トラ技の目次検索 『サーミスタ』

サーミスタでの温度測定に役立ちそうなトラ技の目次検索結果です。
「※」の行が私のコメント。
~~~~~~~~~~~~~~~~~~~~~~~
●1982,7,サーミスタ温度センサの応用,,特集,244,10,土屋憲司
 ※実温度との校正手法。
  区間B定数を計算してその値を表に。

●1986,6,サーミスタと温度計,センサ回路設計ノート,連載,423,10,土屋憲司
 ※サーミスタに関する3つの基本公式の解説。
  温度,抵抗,B定数。

●1988,3,センサ回路の設計,白金測温抵抗体/サーミスタを効果的に使うために,特集,408,13,上窪 兼/土屋憲司
 ※サーミスタの抵抗変化を周波数に変換する回路。

●1993,7,温度センサの基本的な使い方,基本的な温度センサ ~サーミスタ,白金測温抵抗体,熱電対~,特集,228,16,松井邦彦
 ※熱放散定数,熱時定数の解説。

●1993,7,サーミスタの使い方と温度コントローラの設計法,サーミスタの使い方から安全な回路の構成法まで,特集,278,10,土屋憲司
 ※温度コントローラへの応用。
  1988年3月号の周波数に変換回路が再登場。

●2003,1,抵抗1本でリニアライズし電圧から温度を直読できる! サーミスタ室温計の製作,作りながら学ぶ初めてのセンサ回路<第1回>,連載,115,6,島田 義人
 ※103ATを使ったアナログ出力温度計回路。
  リニアライズの方法,

●2003,12,温度センサとセンサICの実用知識,熱電対,測温抵抗体,測温用サーミスタ,ワンチップ温度センサICなど,特集,143,16,小川 実吉/幾島 康夫
 ※温度測定ICの一覧。

●2004,7,無調整多点温度計の製作,本誌4月号付録マイコン基板とサーミスタを使った,一般,253,7,北野 優
 ※H8/3694マイコンのADCで4ch入力,
  103AT,103JTサーミスタを使用。
  エクセルでデータテーブルを作る。
    液晶モジュールをR/W制御有の
    4bitモードで使いながら
    DB0~3をGNDにしてる。

●2004,11,センサ・インターフェースの設計,C言語/OS/ICEを使って最先端の開発にチャレンジ 新世紀 マイコン教室〈第6回〉,連載,273,7,北野 優/中林 歩
 ※リニアライズの方法。
  エクセルで折れ線近似。
  回帰分析による手法。

●2009,2,乾電池動作のサーミスタ方式風速計,ノイズ対策のフィルタにDSP機能を活用する,一般,246,8,高野 慶一
 ※2つのサーミスタ(測温用と加熱用)の温度差から風速を推定

●2009,12,サーミスタ活用のコモンセンス,マイコンと組み合わせ使いやすさ向上,一般,176,4,野尻 俊幸
 ※サーミスタの一般的な話。
  電子体温計への応用(ブロック図的解説)。

●2012,7,高精度NTCサーミスタ NCP15XH103F03RC,私の部品箱〈8〉 温度モニタや温度特性の補正に便利! 20年以上愛用,連載,222,1,細田 隆之
 ※A-D入力回路例。

●2012,1,アナログ2 : 計測&センサ,誤差やICの取り扱いでエライ目に遭ったベテランのひと言,特集,82,12,荒木 邦彌/石井 聡/鈴木 正俊/中 幸政/星 聡
 ※3-6 抵抗分圧比をA-D変換するときの基準電圧ICは無駄使い。
  Vref電圧に関係なくサーミスタの抵抗を測定。
  A-Dコンバータの出力コードが1LSB変化するときの
  温度変化量のグラフ。
     (2^N - 1)と間違った式が記されている。

●2015,5,高感度温度センサ「サーミスタ」,研究室で役に立つ!センサ応用回路集〈2〉,連載,163,6,松井 邦彦
 ※誤差を生む自己加熱,熱時定数,公称値のばらつきを解説。

●2020,7,,入門19 サーミスタを利用した温度計測,特集,62,2,小川 敦
 ※簡易リニアライズの方法とその結果。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
※1982年7月号
この記事に載っていた「区間B定数を算出」する
という考え方が面白かった。
「温度・抵抗値表が神様」という温度算出方法に
つながる。
温度・抵抗値表を、計ったサーミスタの抵抗値で
スキャンし、そこから区間B定数を算出。
温度範囲の狭いB定数を使うことで温度計算の
精度が向上。
一般記事で解説されている25℃~85℃という
広い温度範囲(60℃)ではなく、B定数算出の
温度範囲を狭くすることで、ずいぶん誤差が
減らせる。

2021年8月4日:103JTサーミスタ対応温度計 ArduinoとLTC2460を使って

| | コメント (0)

2023年3月14日 (火)

アンテナの話は続く「電子立国 日本を育てた男-八木秀次と独創者たち」

館内閲覧用だった? 「アンテナのある風景」「電子管の歴史」
この次は、これ。(図書館へのリクエスト)
八木アンテナの八木秀次さんの本。

「電子立国 日本を育てた男-八木秀次と独創者たち」

Yy1

著者の松尾博志さんがすごい。
よくまぁ八木さんの歴史を調べられたものです。
「八木・宇田アンテナ」のいきさつもみな書かれています。


| | コメント (7)

2023年3月 9日 (木)

FDKの長寿命電池「HR-AAULT」(1000mAh) 800cyc目

FDKの長寿命電池「HR-AAULT」(1000mAh) 、
  FDK製「高耐久ニッケル水素電池」登場か が2022年6月8日
  充放電実験開始が2022年9月24日
  400サイクル目が2022年12月16日

今朝見たら800サイクル目が終わっていました。
Cap0800

むちゃくちゃ優秀です。

ここ↓でも頑張っているようです。
  http://aacycler.com/battery/aa/
Ongoing Tests」に出ています。
1908サイクル目。
単3電池のグループでトップスコア。





| | コメント (0)

トラ技の目次で「Arduino」を検索すると

Arduino初体験 が2012年12月。
  「1023 vs 1024」問題 を知るのはずっとあと。

トラ技の目次検索でArduinoが最初に出て
くるのは2012年2月号。
  Ethernetシールド付きArduinoにアップロードの
  ためのライブラリを搭載
  ネットワーク温度&照度計

次が2012年3月号
  頒布カメラのレジスタを設定するUSB書き
  込み器の製作
  ビギナ向けマイコン・ボードArduinoを改造!

そして、2013年3月号の特集
  1万円で作るMy実験室,誰でもマイコン基板
  Arduinoでズルしてサクッと!

これ↑には記事を載せてもらっています。

目次での検索ですんで、これら以前にも記事内で
Arduinoを使っている製作記事、解説記事がある
かもしれません。


| | コメント (0)

2023年3月 8日 (水)

こんなところに「256-1」が

トランジスタ技術2012年1月号
特集が「エレクトロニクス格言集」
その中の第3章 アナログ2:計測&センサ

・3-6 抵抗分圧比をA-D変換するときの
    基準電圧ICは無駄使い

Ad12

サーミスタの抵抗値を直列に入れたRpの値から
求めようという手法の解説です。
抵抗の算出式から基準電圧値は不要で、
ADCの分解能が分かれば良いと。

この「?」と記したところに「2^N - 1」が出現!
8ビットA-Dなら255に、10ビットなら1023にという
ことなんですが・・・これは間違い。
フルスケール値 + 1、つまり分解能で計算しなくては
なりません。

これだとA-D値が1/2(半値)になるとき、「Rx = Rp」
となりません。

で、仮にADCが8ビットとすると
  Nx = 255 * Rx/(Rx+Rp) これを変形していくと
  Rx = Rp * (Nx / (255 - Nx))

Rx 未接続のとき、つまり∞の時。
この時のA-D値はフルスケールになってNx=255
すると、分母の (255 - Nx) がゼロになってしまい、
DIV0エラーに!

255じゃなく、256だと 256 - 255 = 1で
 Rx = Rp * 255。
Rp値の255倍以上の時(無限もOK)に
A-D値255が出てきます。

ということで 「2^N - 1」は大間違い。

半値や1/4値、3/4値で確かめれば「なんかおかしい」
っと思うはずなんですが・・・。

| | コメント (0)

2023年3月 7日 (火)

館内閲覧用だった? 「アンテナのある風景」「電子管の歴史」

たまたま検索していて見つけたこの2冊。
両方とも重い!

Ss0

Ss1_20230307085701

こういった本、通常は館内閲覧用で貸し出し
できないのが多いはずなんですが、普通に
リクエストできて貸し出しできました。


電子管の歴史」には貸し出しカードが付いているんですが、
貸し出しの記入がありません。
昭和62年11月発行ということは1987年。
分類「549.2」で「書庫」っと背表紙にシールが貼ってあります。
中央図書館へ行っても、窓口でリクエストしないと見せてもら
えない本なのでしょう。

アンテナのある風景」は「書庫 大判」とシール。
これも眠っていたようです。

2008年06月11日:「アンテナのある風景」が図書館にありました
  これ↑と同じものなの?・・・でも表紙が違う

| | コメント (7)

こども向けの本がおもしろい 『宇宙食になったサバ缶』

またまた東成図書館の「こどもの本」コーナー。
  ・宇宙食になったサバ缶
 
     小坂康之、別司芳子 著

Saba01
これはすごいルポです。
感激しました。

※こども向けの本ですが、図書分類コードが
「660」で「水産業」。

 

| | コメント (0)

2023年3月 3日 (金)

トラ技編集部行きのフロッピーディスク

お片付けしていたら、こんなのを発掘。
Dd11

トラ技編集部へ記事を入稿するための3.5インチフロッピーディスク。
2002年の日付があるファイルに埋もれていました。
メールでの入稿っていつぐらいからだったんだろ。
投稿記事のまとめ  を見ると、写真はもうデジカメで写している
ようですし。
  最初のデジカメが富士のDS-30。 1998年くらい
  それからリコーのRDC-i500。これが2001年。


| | コメント (0)

こども向けの本がおもしろい 『押す図鑑 ボタン』

東成図書館、児童書のコーナーをうろうろしていますと
「こどもの本」とは思えない面白い本に出会えます。
今回は
  ・小学館の押す図鑑 ボタン

Bb1_20230302180401

表紙から、あきません。
     これ↓
Bb2_20230302180401

絶対に! 押すな」ボタンが光ってます。

このボタンを作っているのが
  ・株式会社 島田電機製作所

工場見学できるそうです。

どんなのかの紹介↓
  ・プライムオンライン編集部:2021年10月27日

  “1000のボタン”が押し放題! 子ども大喜びの工場見学が壮観
    人気は「絶対に押すな」ボタン

楽しそうです。

| | コメント (0)

2023年3月 1日 (水)

8ビットマイコンの割り込み処理・・・1バイトに収まるなら1バイトに

2022年9月1日:8ビットマイコンの割り込み処理・・・言い足りないぞ
ここ↑では、トランジスタ技術2018年5月号での記述を
「ちょっと違うけどなぁ」っと話題にしました。

この内容↓です。
 「割り込み処理関数とメイン関数の両方から
  アクセスされる変数はchar型にしておく」

Pp1_20220901103201

確かに、1バイトにしておくと安全側にはなるのですが、
間違いなく割り込みを動かそうとすると、アトミック処理
(いったんn割り込み禁止にしてごそごそ)が必須です。

で、またまた何気なく古いトラ技を見ていたらの話
になります。
今度は2019年4月号
Tr1904  

この連載:宇宙ロケットMOMO 開発深堀り体験<2>

ブロック図を記したp.129の図1を見ると、ジャイロや
サーボの制御に8bitマイコンATmega328が乗った
Arduino Pro Miniが使われています。

Tr1904a

p.135に制御ソフトが載っていたんで、ちょっと
追いかけてみました。
T11a_20230301162201

まず、目に入ったのが割り込みで処理されるであろう
変数です。
Volatileが前置されたint値(2バイト値)です。

T11b  

これを使うのが0.1ms周期のタイマー割り込みの中

T11c

pwm_cntがアップカウンタで、200になったら
出力ピンをHにしてゼロクリア。
そして、pwm_cntがpwm_h_periodeになったら
出力ピンをLにという制御。
200がPWM周期でpwm_h_periodでPWMの
パルス幅を決めています。
pwm_cntはこの割り込みの中だけで使われて
いるようなので、割り込みとの競合は問題なし。

比較するデータpwm_h_periodはどうかと追いかけ
ますと、gimbal_agl_to_pwmという関数で値を
出していました。
これはメイン側の処理です。

T11d

gimbal_agl_to_pwmがint値を算出して、それを
pwm_h_periodeに書く時に割り込みが入ると
どうなるか・・・

2バイト値ですので、2回に分けて値が書き込まれます。
もしその中間で割り込みが入り、なおかつ、
0x00FF → 0x01000xFFFF(-1) → 0x0001(+1)の
ような2バイトにまたがる数値の変化が発生したら、
割り込み処理での数値判定をミスするかもしれません。

しかし・・・このプログラムでは
  ・pwm_cntは200が最大値なんで、int値(2バイト)の
   下位側しか変化しない。
  ・関数gimbal_abl_to_pwmが返す値は
   +8~+20の範囲で1バイトの範囲内。
   負にもならない。

ということで、2バイトデータと割り込み処理との競合は
大丈夫でした。
でも、もし上位バイト変化するようなint値なら
割り込み禁止にしてデータを更新して割り込み処理に
知らせるというアトミック処理が必須です。

このプログラムでは、変数が1バイトに収まるならデータの
宣言は1バイトでということにしておくと、処理も速くなるし
でエエんじゃないでしょか。

ただ、昔人間からすると、
  char符号有り符号無しかどっちやねん?
     コンパイラはどう処理するんや?
  Arduino環境なら符号無しは  byte やろ。
  今ふうにちゃんと書くなら uint8_tint8_t で宣言か。
こんなところが気になります。

| | コメント (0)

きゃ~ ピピちゃんの着陸場所

昨夕、女房から送られてきた写真。
Pipi21
ピピちゃんが着陸した鍋蓋にはまだ火が付いていませんが、
後の鍋はガスで温め中。
それもチキンカレー

  ピピちゃん、ちゃんと分かって着陸場所を
  決めているようです。

| | コメント (0)

« 2023年2月 | トップページ | 2023年4月 »