imini リペアセラム

 

■Yahoo!ジオシティーズサービス終了

Yahoo! ジオシティーズサービスがこの 3月末で終了するというメールが届いた。

そういえば、昔々、Yahoo! ジオシティーズでホームページ作っていたっけ。

まぁ古いものだし消えてもいいか… 

あれ、わが家に最初に Bフレッツを導入した時の話が載ってるけど… 

これ、ある意味貴重な記録だよなぁ…

 

とゆーことで、アーカイブとして保存することにしました (^_^;)

 

使用したソフトは HTTrack です。これでサイトのミラーを作成します。そんだけ。

 

ちなみにわが家に初めて Bフレッツを導入したのは 2002年11月、今から16年も前のことでした。懐かしいなぁ。ISDN の 64Kbps が FTTH の 100Mbps になった感動を思い出すよ。でも、ルーターは ISDN 用を改造して使っていたので実質のスピードは 1.5Mbps ぐらいだったとゆーオチ (^_^;)

 

ってことで、meyon's STUDY の歴史もさらに重ねられていくことでしょう。どうぞよろしくお願いいたします。


■電源表示用 LED 基板を作る

先日ブレッドボードで、動作を確認しながらロジック回路を組み立てていましたら、突然入力が中途半端な電圧になって動作が不安定になるって現象が起きました。

いろいろ原因を調べているうちにアースラインが 0.1V になってることに気づきました。いくつものブレッドボードを繋げていたので、どこかで接触不良がおきているのではと考えて調べると、大元の電源回路からアースラインにつないでいるジャンパーピンでの接触不良でした。

この部分、サンハヤトのブレッドボードにサンハヤトのジャンパーピンを使っていましたが、まぁブレッドボードの信頼性ってこの程度のものなのだなぁと認識したわけで。ちなみに最近はもっと安いブレッドボードを使っています。

 

 

閑話休題

 

ジャンク基板から取り外した表面実装 LED があったので、専用の基板 (*1) に載せて電源表示用の LED 基板を作ってみました。よく電源をいれたまま作業してしまうので、注意喚起用ですね。

 

(*1) 秋月電子通商 チップLED変換パッド(12枚入)


電源表示LED基板

 

手ハンダなので LED が斜めになっているのはご愛嬌です (^_^;)  左下にチップ抵抗 (これもジャンク品) 330Ω をつけてありますので、5V ラインに繋ぐだけで点灯します。

さすがにこのサイズになると、老眼とか手の震えとか、高齢者には辛い工作です。といいつつ、2 個作っちゃいましたけど (^_^;)

 


■プライオリティエンコーダ 8to3ラインを組む

プライオリティエンコーダ 4to2 ラインを組む」で 4to2 ラインがうまくできましたので、今度は 8to3 ラインを組み立ててみます。

Z0 から Z7 の 8 個の押ボタンを押してそれに応じた 3 ビットのデータ A0 A1 A2 で LED を点灯させます。2 つ以上の押ボタンを同時に押した場合は数値の大きい方を優先させます。どの押ボタンも押されていないときは E を出力します。

 

真理値表は次の通り

入力 出力
Z7 Z6 Z5 Z4 Z3 Z2 Z1 Z0 A2 A1 A0 E
0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 1 - 0 0 1 0
0 0 0 0 0 1 - - 0 1 0 0
0 0 0 0 1 - - - 0 1 1 0
0 0 0 1 - - - - 1 0 0 0
0 0 1 - - - - - 1 0 1 0
0 1 - - - - - - 1 1 0 0
1 - - - - - - - 1 1 1 0

 

 

真理値表から論理式を書くと次のようになります。

A2 = Z7Z6Z5・Z4 + Z7Z6・Z5 + Z7・Z6 + Z7

A1 = Z7Z6Z5Z4Z3・Z2 + Z7Z6Z5Z4・Z3 + Z7・Z6 + Z7

A0 = Z7Z6Z5Z4Z3Z2・Z1 + Z7Z6Z5Z4・Z3 + Z7Z6・Z5 + Z7

E = Z7Z6Z5Z4Z3Z2Z1Z0

 

これを簡略化しますが、計算をここに書くのは大変なので m(_ _)m 結果だけ。

A2 =Z7 + Z6 + Z5 + Z4

A1 = Z7 + Z6 + Z5Z4・Z3 + Z5Z4・Z2

A0 = Z7 + Z6・Z5 + Z6Z4・Z3 + Z6Z4Z2・Z1

E = Z7Z6Z5Z4Z3Z2Z1Z0

 

そして描いた回路図が次です。

Fritzing ロジックゲートパーツを作成する」で、自分で作ったゲートのシンボルを使いました。

 


8to3LinePriorityEncoder_回路図

 

入力はプルダウンしバッファを通しています。インバータは NAND ゲートを使用していますが、手持ちのロジック IC を利用したというだけです。OR ゲートや AND ゲートも手持ちが 2 入力だけでしたのでそれらを利用しています。NAND ゲートだけで組み立てるってことも、もちろん可能です。

LED 駆動回路は毎度の KSC1815Y (2SC1815Y 互換品) のスイッチング回路です。E を表示する LED だけ高輝度なので抵抗定数が異なっています。まぁ手持ちのパーツで気楽に適当にやりましょうってことで (^_^;)

 

ブレッドボードです。


8to3LinePriorityEncoder_ブレッドボード

 

左のタクトスイッチを押すと、それに応じた値を右の緑の LED で 3 ビット表示します。何も押されていないときは赤の LED が点灯します。タクトスイッチを 2 つ以上同時に押すと、値の大きい方が優先されます。

 


■Fritzing ロジックゲートパーツを作成する

回路図を描くのに Fritzing 使っているのだけれど、ロジックゲートのシンボルがなくて論理回路を描けなくて困ってた。困ったなぁと言ってても仕方ないので自分で作ることにした。でもなぁ、いくつかサイトをみてみたんだけどさっぱりわからんし、ちょっとやってみても全然うまくいかない。

そんなこんなの試行錯誤の備忘録です。他の人に教えようとかゆー考えがあまりないので、以下もやっぱりわけわからん内容かもしれませんが、あしからず m(_ _)m

また、俺は回路図しか利用しないし作るのはゲートなので、ブレッドボードやプリントパターンのパーツは作りません。基本は同じですけどね。

パーツの作り方は本家の Creating custom Parts を参照のこと。

 

Fritzing を使えることは大前提。その上で、

 

  1. Inkscape でパーツをデザインする
  2. Fritzing でコネクタの設定をする

 

という 2つの作業を行ないます。

そのためにまず Inkscape をインストール。俺のパソコンは ubuntu なので、「ubuntu ソフトウェア」で検索すると出てきますから「インストール」をポチッ。もちろん、Inkscape 以外でも svg 形式で画像を保存できるソフトなら可です。

 

 

1. Inkscape でパーツをデザインする

 

グラフィックに関することは本家の Fritzing's graphic standards を参考にします。

色はパーツを  RGB(0,0,0) 、コネクタやラベルは RGB(85,85,85) にします。フォントは Driod Sans が指定されているけど、「オブジェクトをパスへ」操作をすれば何でも良い。ちなみに ubuntu には Droid Sans Fallback ってのがあるけど、使えるかどうかは確認していません。

文字サイズはパーツ名 4.25pt 、ピンラベル 3.5pt 、ピン番号 2.5pt 。コネクタの間隔は 0.1inch 、太さ 0.7pt 、長さ 7.2pt 。といったところが指定されています。

色や文字サイズは好きにしてもいいけど、コネクタについてはサイズを守る必要があります。そのために、Inkscape の「ドキュメントのプロパティ」でページサイズを in (インチ) に替えておく。グリッドの単位も in にしておく。インチでデザインしないと Fritzing に載っけたときにコネクタ位置が合いません。

 

下は Inkscape で AND ゲートを作っているところ。使い方は試行錯誤しているうちになんとなくわかってきます (^_^;) もちろんグラフィックソフトの一般的な知識 (例えばレイヤとか) は必要でしょうね。デザインの細かいコツなんかはグーグル先生に教えてもらってください。ちなみに俺が参考にしたことのひとつは、コネクタの端形状は丸にしておくってこと。ラインとの繋がりがきれいになるらしい。

 

Inkscapeパーツデザイン

 

 

デザインができたら次を実行します。

 

  1. フォントが指定と異なる場合はメニューの「パス」から「オブジェクトをパスへ」をクリックしておく。
  2. オブジェクト全体を選択し、グループ化する。
  3. 「ドキュメントのプロパティ」の「ページ」タブから「ページサイズをコンテンツに合わせて変更」を選び、「ページサイズを描画全体または選択オブジェクトに合わせる」をクリック。これでページがパーツのサイズになります。
  4. svg 形式で保存。ファイル名にも標準があるようですけど、末尾に _schematic とか付けとけばいいかなと (^_^;)

 

以上でパーツデザインができ上がりました。

 

 

2. Fritzing でコネクタの設定をする

 

Fritzing でパーツを作るには parts editor を使用します。

まず、新たに作るパーツに類似した既製のパーツを選びます。今回はゲートなので Core Parts の 74HC595 にしました。例えば抵抗でもかまわないのですけど、Metadata があまりに異なると修正が面倒です (^_^;) まぁ自分で回路図に利用するだけなら修正する必要もないんですけど。

選んだパーツを右クリックして「Edit Parts」をクリックするとParts Editor が起動します。

 

  1. 「コネクタ」タブでコネクタ数を 3 に変更
  2. 必要ならコネクタ名と詳細を変更
  3. 「回路図」タブを選択し、メニューの「ファイル」から「Load Image for view」をクリック
  4. 作成したパーツファイルを選択する。フォントに関する情報ダイアログが出たら OK をクリック。これで作成したパーツデザインが表示されます。
  5. コネクタリストの「Select Graphic」をクリックして対応するコネクタ図形をクリック。これでワイヤが接続できるようになります。これをすべてのコネクタで実行
  6. コネクタの接続点をワイヤを接続する端部に移動する。これもすべてのコネクタで実施 (*注)
  7. 「アイコン」タブを選択し、メニューの「ファイル」から「Reuse schematic image」をクリック。パーツのアイコンが作成したデザインに替わる
  8. 必要なら「Metadata」を修正する
  9. メニューの「ファイル」から「Save as new part」をクリックする。ファイルネームプリフィックスはそのままで OK をクリックと、MINE に新しいパーツが登録される

 

(*注) 接続点の移動について

下図のように表示されているコネクタの白い点線の枠の中央の縦線部分が接続点で、ここにワイヤが繋がります。これをワイヤを接続したい左端へドラッグして移動します。なお、画像がコネクタリストで選択されていると、画像自体が動いてしまってうまく移動ができません。ドラッグする前に画像の外側を一度クリックして選択を解除しておくとうまくいきます。

 

Inkscapeパーツデザイン

 

 

これで MINE に新しいパーツが登録されました。実際に回路図を描いてみて、自分なりにでき上がりを評価してみましょうね。

 

 


■プライオリティエンコーダ 4to2 ラインを組む

プライオリティエンコーダ 4 to 2 ライン」で作った論理回路を実際に組み立ててみることにしましょう。

 

が 、手元にあるゲート IC で使えそうなのは NAND の HD74LS00 と Schmitt Inverter の 74VHCT14A ぐらいです。諦めないで (^_^;) これらを使って実験してみます。

 

エンコーダの論理式は以下でした。

A1 = Z2 + Z3

A0 = Z2・Z1 + Z3

E = Z3Z2Z1Z0

 

AND と OR の組み合わせですので、NAND ゲートに置き換えることができますね。

まずは A1 です。fOR(A,B) = fNAND (fNOT(A) , fNOT(B)) ですから、

A1 = Z2 + Z3

     = fOR ( Z2 , Z3 )

     = fNAND ( fNOT ( Z2 ) , fNOT ( Z3 ) )

     = fNAND ( Z2 , Z3 )

となります。

 

次に A0 ですが、ちょっと難しいですよ (^_^;)

A0 = Z2・Z1 + Z3

     = fOR ( fAND ( Z2 , Z1 ) , Z3 )

     = fNAND ( fNOT ( fAND ( Z2 , Z1 ) ) , fNOT ( Z3 ) )

     = fNAND ( fNAND ( Z2 , Z1 ) , Z3 )

 

最後に E を NAND に置き換えます。

E = Z3Z2Z1Z0

   = fAND ( fAND ( Z3Z2 ) , fAND ( Z1 , Z0 ) )

   = fAND ( fNOT ( fNAND ( Z3Z2 ) ) , fNOT ( fNAND ( Z1 , Z0 ) ) )

   = fNOT ( fNAND ( fNOT ( fNAND ( Z3Z2 ) ) , fNOT ( fNAND ( Z1 , Z0 ) ) ) )

NOT はインバータを利用しますからそのままです。

 

以上の式を使って組み立てた回路がこれです。


4to2プライオリティエンコーダ回路図

 

左の押しボタンスイッチが入力 Z3〜Z0 です。プルダウンではゲート入力が不安定になる部分があったので、プルアップにしてバッファとしてインバータを入れました。インバータはヒステリシスがあるタイプですが問題はありません。

押しボタンが押されていないときは右の赤の LED が点灯します。赤 LED は高輝度タイプだったので抵抗の定数が異なっています。

入力に応じて A1 A0 の緑 LED が点灯します。

押しボタンを二つ以上同時に押したとき、大きい値が優先されることが確認できました。

 

ブレッドボードです。


ブレッドボード

 

左側の DIP が NAND ゲート、SSOP 変換基板に載っているのがインバータです。右上部分が LED 駆動回路、中央付近に見える 4本の抵抗が入力のプルアップ抵抗です。

 


■DIY トイレのドアレバーを交換

トイレを改装してもう10数年経ちます。最近ドアレバーが少しぐらつくようになったなぁと思っていたら、ラッチが戻らず閉まらなくなったり、トイレから「開かなくなったぁ!!」と叫び声が聞こえたり、どうも調子が悪くなってしまったようです。

で、ドアレバーを交換することにしました。

 

ドアレバーをいろいろ調べてみたところ、現在のドアレバーは長沢製作所の製品で「バックセット 51mm スペーシング 45mm」というサイズ、同サイズのものであれば交換可能だとわかりましたので、楽天市場のイーヅカから下の商品を購入しました。

レバーの形状の違う TXS-G94R という商品もあって迷ったのですが、こっちのほうが少し安いし、レバーを握る感じがよさそうだったのでこれを選んでいます。

バックセット 51mm の製品は納期がかかると書いてあるショップもあったのですが、イーヅカでは注文から 4日で届いています。

 

 

 

取り換えは難しくはありませんが、取付説明書はちょっとややこしいです。まぁきちんと読んで理解すればなんてことはありません。

受座を取り換えるには切欠き穴を大きくする必要があったので現状のまま利用していますが、まったく問題はありません。

 

これでトイレに閉じ込められることもなく安心でしょう (^_^;)

ちなみに、ラッチが戻らなくなったら錠の取り替え時期なんだそうで、油差して動いたぜ、なんてことしているとそのうち閉じ込められてしまうようです。ご用心。

 


■プライオリティエンコーダ 4 to 2 ライン

前に「エンコーダー 10進数を2進数に変換」で 8 入力 3 出力 ( 8 to 3 ライン) のエンコーダを作ってみましたが、これは入力が必ず一つという条件がありました。テンキーのような同時に二つ以上の入力があるかもしれない場合には正常な出力になりません。

そこで、同時に二つ以上の入力があった場合にどれかを優先させるようにした「プライオリティエンコーダ」を考えてみることにします。

 

まず今回は 4 to 2 ラインのプライオリティエンコーダを作ってみます。2 つ以上の入力があった場合には大きい方の数値を優先することにします。

 

真理値表

入力 出力
Z3 Z2 Z1 Z0 A1 A0 E
0 0 0 0 0 0 1
0 0 0 1 0 0 0
0 0 1 - 0 1 0
0 1 - - 1 0 0
1 - - - 1 1 0

 

例えば Z3 が 1 のときこれを優先にしますので、Z2 以下は 1 でも 0 でもどちらでも構いません。すべての入力が 0 のときは E を 1 にします。

 

真理値表から論理式を書くと次のようになります。

A1 = Z3・Z2 + Z3

A0 = Z3Z2・Z1 + Z3

E = Z3Z2Z1Z0

 

論理式ができましたのでロジック回路を作りましょう…… とはいきません。この論理式は冗長なので簡略化できます。が、これがちょっと大変です (^_^;)

論理式の簡略化というとカルノー図法とかクワイン・マクラスキー法とかあるそうですが、ここではコツコツ計算していくことにしましょう。

まずは A1 の式です。

A1  = Z3・Z2 + Z3

        = Z3・Z2 + Z3(1+Z2)

        = Z3・Z2 + Z3 + Z3・Z2

        = Z2(Z3+Z3) + Z3

        = Z2 + Z3

 

簡単になりましたね。つまりは、Z2 か Z3 のどちらかが 1 ならば、A1 は 1 で良いわけです。

次は A0 です。

A0  = Z3Z2・Z1 + Z3

        = Z3Z2・Z1 + Z3(1+Z2・Z1)

        = Z3Z2・Z1 + Z3 + Z3・Z2・Z1

        = Z2・Z1(Z3+Z3) + Z3

        = Z2・Z1 + Z3

 

E の式はこれ以上簡略化できません。ということで論理式は以下のようになりました。

 

論理式

A1 = Z2 + Z3

A0 = Z2・Z1 + Z3

E = Z3Z2Z1Z0

 

簡略化した論理式より論理回路図を書くと以下のようになります。E は 4入力 AND を 2入力 AND 3つで構成させています。


プライオリティエンコーダ

 


■デコーダ 3bit 2進数を10進数に変換

前回は 10 進数を 3bit 2 進数に変換するエンコーダを試してみましたので、今度は 3bit 2 進数を 10 進数に変換するデコーダを考えてみました。

 

真理値表

入力 出力
A2 A1 A0 Z7 Z6 Z5 Z4 Z3 Z2 Z1 Z0
0 0 0 0 0 0 0 0 0 0 1
0 0 1 0 0 0 0 0 0 1 0
0 1 0 0 0 0 0 0 1 0 0
0 1 1 0 0 0 0 1 0 0 0
1 0 0 0 0 0 1 0 0 0 0
1 0 1 0 0 1 0 0 0 0 0
1 1 0 0 1 0 0 0 0 0 0
1 1 1 1 0 0 0 0 0 0 0

 

論理式

Z0 = A2A1A0

Z1 = A2A1・A0

Z2 = A2・A1・A0

Z3 = A2・A1・A0

Z4 = A2・A1A0

Z5 = A2・A1・A0

Z6 = A2・A1・A0

Z7 = A2・A1・A0

 

論理回路図
デコーダー論理回路図

 


■エンコーダー 10進数を2進数に変換

「エンコーダー」を試してみます。

Z0 〜 Z7 のいずれか一つ、つまり 0 から 7 までの 10 進数を入力とします。出力は A0 〜 A2 の 3桁の 2 進数です。

 

真理値表

入力 出力
Z7 Z6 Z5 Z4 Z3 Z2 Z1 Z0 A2 A1 A0
0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0 0 1
0 0 0 0 0 1 0 0 0 1 0
0 0 0 0 1 0 0 0 0 1 1
0 0 0 1 0 0 0 0 1 0 0
0 0 1 0 0 0 0 0 1 0 1
0 1 0 0 0 0 0 0 1 1 0
1 0 0 0 0 0 0 0 1 1 1

 

論理式で表すと

A0 = Z1 + Z3 + Z5 + Z7

A1 = Z2 + Z3 + Z6 + Z7

A2 = Z4 + Z5 + Z6 + Z7

 

論理回路図で表すと


エンコーダー論理回路図

 

4 入力 OR ゲートでいいんだけど、シンボルが 2 入力しかなかった (^_^;) ので 2 入力 OR ゲートを 3 個組み合わせました。

fOR( A , B , C , D ) = fOR( fOR( A , B ) , fOR( C , D ) )

 

参考:「Hatada's Home Page」

 

 

これを実際に組んでみましょう。

入力はボリュームで変化させる 0 〜 5V の電圧です。それを Arduino で 0〜 7 の 10 進数に A/D 変換し、数値に応じた出力 pin (Z0 〜 Z7) を HIGH に制御します。マトリクスから OR ゲートを介して 2 進数 (A0 〜 A2) に変換、対応した LED を点灯させることにしました。

 

回路図です。


エンコーダー回路図

 

OR ゲートと言ってもダイオードだけです (^_^;) トランジスタで LED を駆動しています。

 

スケッチです。

void setup() {
  for(int i=2; i<10; i++) {
    pinMode(i,OUTPUT);
  }
  Serial.begin(115200);
}

 

void loop() {
  int sensorValue = analogRead(A0);
  delay(50);

 

  int voltage = sensorValue * (8.0/1024.0);
  Serial.println(voltage);

 

  for(int i=0; i<8; i++) {
    if(i==voltage) {
      digitalWrite(i+2, HIGH);
    } else {
      digitalWrite(i+2, LOW);
    }
  }

 

}

 

シリアルポートに出力しているのは 10 進数 0 〜 7 の出力チェック用です。なくてもいいです。

 

ブレッドボードです。


ブレッドボード

 

上の半固定ボリュームを 0 から上げていくと、3 つの LED が「000」から「111」の 2 進数に応じて点灯します。

 


■リレーを動かしてみる

ジャンク部品のリレー「信号リレー C2CA005G」を動かしてみます。コイル電圧 5V 、ノンラッチタイプの DPDT (Double Pole, Double Throw) です。

 

コンパレーターでマルチバイブレーターを作り、リレーを駆動して LED を点滅させる回路です。

R1 はデューティー比の調整用です。R4 とともにコンパレーターになっています。R5 と C1 の積分回路で方形波を発生させています。Q1 でリレーを駆動します。


コンパレーターとリレー

 

簡単な、っつーかテキトーな計算を (^_^;)

コンパレーターの出力が 4V ぐらいなので、+IN の基準電圧が 2V 程度になるように R2、R3 を決めてますが、ヒステリシスのための抵抗 R4 に近い値になるようにしました。

積分回路の時定数は 330KΩ × 1μF で、周期はまぁだいたい 1.5倍ぐらいなので 0.5 秒ですね。難しい計算は嫌いです (^_^;)

リレーのコイルの抵抗値が 83Ω ですので 5V 電源で 60mA 流れます。KSC1815Y のコレクタ電流は 150mA ですので使えますね。増幅率を 40 としてベース電流は 1.5mA 。オペアンプ BA10324AF の出力電流は 20mA ですので十分駆動できます。ベース抵抗 R6 は (4.0V - 0.7V) / 1.5mA = 2.2KΩ です。手元に 2.2KΩ がなかったので、4.7KΩ を 2 本並列にしてます (^_^;)

リレーのサージ吸収用のダイオード 1S1588 は手元にあったスイッチング用なので良くないです。逆耐電圧が 35V しかありませんので壊れるかも。ここは最低でも逆耐電圧 50V 以上のダイオードにすべきですよ。

 

ブレッドボードです。


ブレッドボード

 

左側の白い四角い部品がリレーです。このリレーのコイルは極性があり、プラス・マイナスを逆につなぐと動きません。最初それに気づかず、動かなくて悩んでしまいました (^_^;)

 


| 1/56PAGES | >>

■calendar

S M T W T F S
     12
3456789
10111213141516
17181920212223
24252627282930
31      
<< March 2019 >>

■search this site.

■recommend

毎日貯まるポイントサイト ECナビ

■recommend

■Twitter

■recommend

■recommend

■selected entries

■categories

■archives

■recent comment

■recent trackback

■links

■profile

■others

■mobile

qrcode

■powered

無料ブログ作成サービス JUGEM