2017年4月2日日曜日

[真空管アンプ]6N6Pミニワッターの製作 (4) AC100Vインレットとヒューズボックスの取り付け

ノイズの影響を受けないようにするために、ツイストペアにするのがポイントですね。
はんだ付けする順番を良く考えないと、ヒューズボックスを取り付けてから、はんだ付けすることになって、やりにくくなるので注意。
電源スイッチまで取り付けようと思ったが、今日はここまで。

今回のアンプ作成では、導線の皮剥き多くて大変そうだったので、ワイヤストリッパを購入した。

このワイヤストリッパは握るところが少しペタペタする。以前に使っていたHOZANのほうが、使い心地が良かったように思う。(でも、こちらのほうが安かった。)

2017年4月1日土曜日

[真空管アンプ]6N6Pミニワッターの製作 (3) 穴開け

部品の取り付けとヘッドホン端子用のシャーシ穴開け

今のところ、こうなった。

シャーシの穴開け

シャーシにヘッドホン端子用の穴を開けた(おおよそ11.5mm)。初めて穴開けたが、以下の手順で綺麗に穴が開いた。
  1. 穴を開ける中心に、油性ペンで点を打つ。
  2. 点に合わせて、ポンチで窪みを作る。
  3. ドリルで穴開け。2.5mm→3.5mm→4.5mmの順で徐々に穴を大きくする。
  4. テーパーリーマーを使い、少しずつ穴を広げる。
  5. 毛羽立った部分をやすりで削る。
当初は手動ドリルを使うつもりであったが、どれを買おうか検索しているうちに電動ドリルが欲しくなって、結局、電動ドリルを購入した。電動ドリルもピンからキリまで、いろいろあって、どれにしようか悩んだが、機能・値段も手頃だったRYOBI CDD-1020を選んだ。


ドリル刃はダイソーで購入。装着部分が6.35mm幅の六角形のもので、いろいろなサイズのものがあったので、2.0~4.5mmのものを適当にピックアップ。このサイズは何かの規格なんだろうか。何の問題もなく、電動ドリルに装着できた。

テーパーリーマーはこれを使っている。部品の買い出しにいったついでに、秋月で買ってきた。


このように、綺麗に穴を開けることができた。


穴開けは楽しいので、もっとあちこちに穴を開けたくなる衝動が...
次回アンプを作るときはシャーシの加工も自分でやってみよう。

穴開けがうまくいって満足したので、今日はここまで。

[真空管アンプ]6N6Pミニワッターの製作 (2) 仕様

製作するミニワッターの仕様

ほぼ書籍の6N6Pを用いた製作事例の通り。
複数入力、スピーカー4Ω出力は不要なので付けない。
ヘッドホンとスピーカーの出力切り替え回路は、一般的な切り替え方式とする。

真空管6N6P
電源トランス春日無線 KmB90F
出力トランス春日無線 KA-5730
ヘッドホン出力あり
スピーカ出力8Ωのみ

KA-5730は、水平に対するコアの中心線は0度という点が、ノイズが大きくなるのではないかと心配なところである。ネット上の製作事例を検索すると、特にハムノイズは乗らなかったという情報があり、いったん気にしないで製作することにする。

電源トランスと出力トランスの購入

どちらも春日無線からネット通販で購入した。
送料、代引手数料込みで、\14,652 であった。

ヘッドホンコネクタ

絶縁タイプのスイッチ付きヘッドホンコネクタを使用。
型番不明でネットで見つけられず、秋葉原で購入(なかなか見つからず、結構探した)。
その後、分かったが、この商品のようだ。

[真空管アンプ]6N6Pミニワッターの製作 (1) はじめに

はじめに

きっかけは、つい、

これを買ってしまったからなんですよ。
このアンプの効果ですが、音質は良くなったような、何も変わらないような、どこらへんが真空管の音なのか、あまりよく分かりません。
でも、この真空管がとても気に入ってしまったのですよね。
目の前で、ほのかに光る真空管。とても心がなごみます。
本格的な真空管アンプが欲しくなったので、製品や自作キットをネットで見ているうちに、一から自作したくなりました。何か良い設計本が無いかなと、Amazonで検索してみると、ありました。

「真空管の素」。この本は、出力1W未満のミニワッターの製作ガイドになっています。回路の解説はもちろんのこと、製作に必要な器具や部品の説明が網羅されています。
どうせ自作するなら、単に組み立てるだけでなく、動作を理解してからのほうが楽しいです。何度か読んでだいたい理解しました。何度か読まないと理解が難しい箇所もありましたが、とても分かりやすく良い本です。

この本を日々読みつつ、真空管6N6Pを購入し、シャーシと部品のほとんどは頒布を利用して入手し、製作に必要な器具・部品を一通り揃えたので製作を開始しました。

2016年6月8日水曜日

[OCaml]cursesで文字化け

OCamlでcursesを使ってピコピコゲームでも作ろうかと思い、以前にcursesを使ったコードを動かしてみたら、 日本語が文字化けするようになっていた。
Cライブラリのsetlocale(LC_ALL,"")を実行した後に、cursesを使えば文字化けしないことが分かった。
setlocale関数の呼び出しは ctypesを使うと簡単に呼び出すことができる。
opamでパケージが用意されているので、以下のコマンドでインストールできる。
$ opam install ctypes ctypes-foreign

コードはこちら。
open Core.Std
open Ctypes
open PosixTypes
open Foreign

let time = foreign "time" (ptr time_t @-> returning time_t)

(* char *setlocale(int category, const char *locale); *)
let setlocale = foreign "setlocale" (int @-> string @-> returning string)

let () =
  let locale_str = setlocale 6(*LC_ALL*) "" in
  let module C = Curses in
  let main_window = C.initscr () in
  let err = C.mvwaddstr main_window 10 2 "hello, world!" in
  let err = C.mvwaddstr main_window 11 2 "こんにちは、世界!" in
  let err = C.refresh () in
  Unix.sleep 5;
  C.endwin ();
  printf "locale_str=%s\n" locale_str

ビルドはお手軽なcorebuildを使った。
$ corebuild -pkg curses -pkg ctypes.foreign sample.native
Debian Jessie 64bit では、LC_ALL = 6 だったので、直接コード中に書いたが、このようなヘッダで定義されている定数はどのように定義するのが正しいのだろうか。

参考

2016年4月18日月曜日

[SICP][Lisp]遅延評価の解釈系の実装

引き続きSICPを読みながら、Common LispでLispインタープリタを作成している。
「4.2.2 遅延評価の解釈系」を参考に、遅延評価できるように修正してみた。

https://github.com/takeisa/LispInCommonLisp/tree/lazy_evaluation

ifの反対のunlessを作って試してみる。

CL-USER> (repl)
LISP>
(define (unless condition usual exceptional)
    (if condition exceptional usual))
OK
LISP> (unless (= 1 0) 'hoge (/ 1 0))
HOGE

引数の(/ 1 0)は評価しないで、'hoge を返している。


cons,car,cdrを使えるようにして、前章のストリームで作成した無限リストを作ってみようとしたが、今の実装では、Common Lispの関数をそのまま使おうとすると、全ての引数をforceするようになっているので、簡単にできない。

5章のレジスタ計算機まで、早めに進みたいので後回しにしよう。

2016年4月9日土曜日

[SICP][Lisp]Common LispでLispインタープリタを書いてみた

SICP 第4章 超言語的抽象を参考にして、Common LispでLispインタープリタを書いてみた。

ソースはこちら。
https://github.com/takeisa/LispInCommonLisp

350行程度になった。
letはまだ実装していない。
言語処理系を実装するのは楽しいなー。

動作例


※evalで評価する式をデバッグ出力している。

フィボナッチ数を求める関数を定義する。
CL-USER> (repl)

LISP> (define (fibonacci n)
    (if (<= n 1)
 n
 (+ (fibonacci (- n 2)) (fibonacci (- n 1)))))
make-lamba parameters: (N)
make-lamba body: ((IF (<= N 1)
                      N
                      (+ (FIBONACCI (- N 2)) (FIBONACCI (- N 1)))))
lambda: (LAMBDA
            ((N) (IF (<= N 1) N (+ (FIBONACCI (- N 2)) (FIBONACCI (- N 1))))))
lambda parameters: (N)
lambda body: ((IF (<= N 1)
                  N
                  (+ (FIBONACCI (- N 2)) (FIBONACCI (- N 1)))))
OK

20番目のフィボナッチ数を求める。
LISP> (fibonacci 10)
t-eval: (FIBONACCI 10)
t-eval: FIBONACCI
t-eval: 10
t-eval: (IF (<= N 1)
            N
            (+ (FIBONACCI (- N 2)) (FIBONACCI (- N 1))))
t-eval: (<= N 1)
t-eval: <=
t-eval: N
t-eval: 1
..snip..
6765