工作してみた(みる)
安定化電源の作成
いままで実験用の安定化電源をもっていなかった。一応400円ぐらいで買った5Vのスイッチング電源基板(どこで買ったのか忘れた。多分若松)に秋月で売ってるトライステートの電源分配基板(+3.3Vレギュレータ)をつけて、これもまた秋月て売っているポリケースに入れたものを使ってはいた(右写真)のだが、これであれこれやるにはチープで無理があるなあと、最近思い始めてきたので、安定化電源を作ってみることにした。
5V,3.3V固定の出力を複数。オペアンプ用に、-5V出力を確保。可変で20Vぐらい出るものを一つ欲しい。電流は大していらない。使用時に300mAもあれば十分。むしろ狭い工作机の上におけるコンパクトなやつ。
まずトランスが必要。街にあるハードオフ(田舎でもあるのだ!すごいだろ)に行って、動かないトランジスタアンプ500円、30年以上前のサンヨー製品ってのがあったので、一発勝負で買う。ビンゴ!。64V,18V,4Vがとれて4Vはセンタータップになってる。もちろんトランスの電流容量はワカラン。ヒューズは1.5Aのものがついていたので、さすがに300mA程度をとれるだろう程度に考えておる(根拠なし)。
4V*2からブリッジ型全波整流で+-8V以上をとれれば、+-5Vと+3.3Vは確保できるので、試してみると大丈夫っぽい。(8V*1.4-1V(ダイオード降圧分)-3v(レギュレータ分) > 5V )
18Vからは全波で20V程度は取れるとみなす(18V*1.4-2V(ダイオード降圧分)-3V(レギュレータ分))。
次にレギュレータの選定。まず+5は7805CTdatasheet 。-5VはLM337Tdatasheet を使う。LM337Tは可変なので、半固定抵抗で電圧を調整する。3.3Vは500mA最大定格のTA48M033Fdatasheet でよろしい。
可変用のレギュレーターはKA305datasheet 。一応1.2V-33Vまで可変ということで、5KOhmのボリュームで調整する。
放熱板は写真のようにKA305と7805CTにはつけたが、-5V用と3.3V用はそのままいけーっていう感じである。
可変電圧表示は、秋月で売っているSD1602HUOBという「超小型LCD」(緑)をはり込んだ。900円もするのであるが小型薄型なのが気に入る。atmega168のA/Dポートに抵抗分圧で電圧を入れ、表示。
写真左に小さなトランスがあるが、これはmegaと液晶用の別電源。
なんともめんどくさがりやなので、mega168に16Mhz水晶をくっつけ、arduinoのプログラムを流し込むという安易なやりかた。25Vあたりで抵抗分圧で5V入力になるようにする。実測で0-1024の最高値が980ぐらいになるよう抵抗を調整した。ちなみに最高電圧は22Vでした。
一応工作ホビーサイトのお約束なので、表示部の基板裏を示しておきます。使った蛇の目基板は最近秋月に登場した<準通常在庫商品 片面ガラス・ユニバーサル基板 140x40mm 752穴 めっき仕上げ>(な、長い)というやつで、これがかなりいいのです。10枚買ったのだけど、もう少し確保しておこうか、と思わせる基板でした。この電源制作だけで4枚も使っちゃったし。
arduinoのスケッチはページ最後に掲載している。なんとも手抜き。LiquidCrystalライブラリが標準添付されているので、すごく楽であります。
スケッチでもわかるように、可変電圧表示以外は、パネルのDCアダプタの並びの電圧を2行表示してる。写真のように、パネル側に鬼門の「文字入れ」をしなくて済むので、我ながらいいアイデアだと思っているのだ。
パネルは2mmの白アクリル。CNCで穴をあけた。ケースはトライステート Web Radioを「加工」してみるで使ったタカチのSY-190A。右の写真にあるように、中を組み立ててからパネル穴の位置を実測する。そうしないと穴がずれるのであります。素人の悲しさである。以前よりは少しは定規の使い方とか、CADでのお絵かきとかCNCの操作に慣れてきたとはいえ、このパネル作りに一番時間がかかりました。なんでか
。なお今回は丸穴にも挑戦してみたが、うまくあきました。ちょっとうれしい。
---
#include <LiquidCrystal.h>
LiquidCrystal lcd(7,6,5,3,2,1,0);
void setup()
{
delay(100);
lcd.begin(2,16);
lcd.clear();
lcd.print("start meter.....");
delay(500);
lcd.clear();
}
float f;
float j;
int prev = 0;
void loop()
{
f= analogRead(1);
if (prev !=f) {
j=f/42.0;
lcd.clear();
lcd.print("+");
if(j<10) {
lcd.print(" ");
}
lcd.print(j);
lcd.print(" +3.3 +3.3");
lcd.setCursor(1,1);
lcd.print("-5.0 +5.0 +5.0");
prev = f;
delay(80);
}
delay(200);
}