LD8113 VFD(蛍光表示管)で増幅できるかやってみた

2016-08-15 20.42.31

KORG の 6P1 (Nutube) がぼちぼち流通しはじめて、一部の方は現物を入手されたりしている模様。なのですが、積極的にお出かけしないと入手できない状況なので私はまだ持っていません。この真空管は蛍光表示管と同じような構造をしています。

あれが増幅するんやったら家にある蛍光表示管でも増幅するんじゃね?的考えで LD8113 と IV-27 をひっぱりだしてきました。今回の実験は LD8113 さんに犠牲になってもらうことにしました。

2016-08-28 09.41.03

ブレッドボードに適当に組んだ回路に 100mV 入れて出力電圧を測定。アノード側で使用した電極(セグメント)は 8 の字として、真ん中の縦棒とドットは使用しないこととしました。

LD8113_50

トライ & トライで、300mV 程度取れました。

LD8113_51

裸特性もついでに撮っておきました。一応増幅していることは確認できました。バッファ付けてヘッドホン鳴らしてみたいですね。

Raspberry Pi 2 Model B + RaspyPlay4 で組んだ volumio サーバーに OLED キャラクタ液晶を接続してみた

2016-08-22 13.13.23

Raspberry Pi 2 Model B に PCM5122 の DAC を搭載したサウンドカード RaspyPlay4 を載せてミュージックサーバーなるものを作ってみました。今は Raspberry Pi 用に様々な DAC 搭載したボードが販売されていて、載せた例も多数 Web 公開されています。私もそういうのを見て、ちょっと組んでみようと思った次第。

今回購入したのは、たまたま RS の通販見ててみつけた RaspyPlay4 という MikroElektronika 製のボード。runeaudio 対応らしいです。

20160716-091455-0

ボードは完成品なので、Raspberry Pi のコネクタに差してしまえば使えます。今回は volumio を Raspberry Pi にインストールしました。volumio には RaspyPlay4 の設定はありませんが、おなじ PCM5122 搭載のボードを選択したら動いたので問題ないかと思います。

このままで使用しても問題ないのですが、基板中央部に LCD と書いたスルーホールがありましたのでやっぱりキャラク液晶付けてみようと設定開始。最終的には、CPU の平均負荷と、空きメモリを表示するようにしてみました。ボリウムの値は MPD, AirPlay, mixer などのボリュームが複数あって、整理出来てなかったためひとまず CPU 負荷とかを出すことに決定しました。

Raspberry Pi でキャラクタ液晶の制御というと、Python の RPi-GPIO モジュールを使うのが簡単らしいので、Python を使うことにしました。よそ様の Web とかに apt-get install python-rpi.gpio すればインストール出来るようなことが書いてあったので、やってみたところパッケージが見つかりません。あれこれ探しましたが見つけられなかったので、本家のソースからビルドすることにしました。

volumio を入れた Raspberry Pi に ssh ログインして作業開始。raspberry-gpio-python
のサイトから RPi.GPIO-0.6.2.tar.gz をダウンロードして、tar zxvf で展開。ビルドするパッケージもインストールして Rpi.GPIO をインストールします。

# wget https://pypi.python.org/packages/c1/a8/de92cf6d04376f541ce250de420f4fe7cbb2b32a7128929a600bc89aede5/RPi.GPI O-0.6.2.tar.gz
wget の URL は、ブラウザなどで確認したアドレスを wget に渡すか、
いったんブラウザで RPi.GPI O-0.6.2.tar.gz をダウンロードしてから Raspberry Pi にアップロードしてください。
# tar ztvf RPi.GPIO-0.6.2.tar.gz 
# cd RPi.GPIO-0.6.2
# python setup.py install
コンパイル環境が無いのでエラーになる
# apt-get install gcc
# apt-get install arm-linux-gnueabihf-gcc
# apt-get install python-dev
# python setup.py install
ワーニングメッセージが出力されるけど、ビルドは通ってライブラリのインストール成功

今回使用した液晶モジュールは共立で買ってきた OLEDディスプレイ キャラクタ表示タイプ 16文字x2行 黄文字 WEH001602A というものです。

で、付録の紙の初期化をやっても動かず、散々苦労した結果動いた Python ソースコードは以下のとおりであります。Adafrit のサンプルが無かったらマジ捨ててたと思う。

#!/usr/bin/env python
#
# WINSTAR OLED 16x2 CHARACTER DISPLAY
# +----+-----+--------------------|
# | No | Pin | Desc               |
# +----+-----+--------------------|
# |  1 | VSS | GND                |
# |  2 | VDD | 3.3V or 5V         |
# |  3 | NC  | Not Used           |
# |  4 | RS  | 0: Command 1: Data |
# |  5 | RW  | 0: Write   1: Read |
# |  6 | E   | Enable             |
# |  7 | D0  | Data bit 0         |
# |  8 | D1  | Data bit 1         |
# |  9 | D2  | Data bit 2         |
# | 10 | D3  | Data bit 3         |
# | 11 | D4  | Data bit 4         |
# | 12 | D5  | Data bit 5         |
# | 13 | D6  | Data bit 6         |
# | 14 | D7  | Data bit 7         |
# | 15 | NC  | Not Used           |
# | 16 | NC  | Not Used           |
# +----+-----+--------------------|

import RPi.GPIO as GPIO
import time
import subprocess

RS = 7
E  = 8
D4 = 25
D5 = 24
D6 = 23
D7 = 22

DATA = True
COMMAND = False

def main():

    i = 0

    setup()

    while True:

        vmstatout = subprocess.check_output(["vmstat"])
        cpuidle = int(vmstatout[233:236])
        cpubusy = 100 - cpuidle

        lcdSetPos(0,0)
        lcdPutStr("CPU{:>3d}%".format(cpubusy))

        lcdSetPos(1,0)
        memfree = int(vmstatout[174:181])
        lcdPutStr("FREE{:7d}KB".format(memfree))

        lcdSetPos(1,15)
        if i == 0:
            lcdPutStr("-")
        if i == 1:
            lcdPutStr("*")
        if i == 2:
            lcdPutStr("|")
        if i == 3:
            lcdPutStr("*")
        i = i + 1
        if i > 3:
            i = 0

        time.sleep(1)

def setup():

    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(E, GPIO.OUT)
    GPIO.setup(RS, GPIO.OUT)
    GPIO.setup(D4, GPIO.OUT)
    GPIO.setup(D5, GPIO.OUT)
    GPIO.setup(D6, GPIO.OUT)
    GPIO.setup(D7, GPIO.OUT)

    time.sleep(0.05)
    lcdPut4bit(0x03)
    time.sleep(0.005)
    lcdPut4bit(0x08)
    time.sleep(0.005)
    lcdPut4bit(0x02)
    time.sleep(0.005)
    lcdPut4bit(0x02)
    time.sleep(0.005)
    lcdPut4bit(0x08)
    time.sleep(0.005)
    lcdPutByte(0x08,COMMAND)
    time.sleep(0.005)
    lcdPutByte(0x01,COMMAND)
    time.sleep(0.005)
    lcdPutByte(0x06,COMMAND)
    time.sleep(0.005)
    lcdPutByte(0x02,COMMAND)
    time.sleep(0.005)
    lcdPutByte(0x0c,COMMAND)
    time.sleep(0.005)

def lcdPutByte(byte, mode):

    GPIO.output(RS, mode)
    time.sleep(0.0001)
    GPIO.output(D4, GPIO.LOW)
    GPIO.output(D5, GPIO.LOW)
    GPIO.output(D6, GPIO.LOW)
    GPIO.output(D7, GPIO.LOW)

    if byte & 0x10 == 0x10:
        GPIO.output(D4, GPIO.HIGH)
    if byte & 0x20 == 0x20:
        GPIO.output(D5, GPIO.HIGH)
    if byte & 0x40 == 0x40:
        GPIO.output(D6, GPIO.HIGH)
    if byte & 0x80 == 0x80:
        GPIO.output(D7, GPIO.HIGH)

    lcdE()

    GPIO.output(D4, GPIO.LOW)
    GPIO.output(D5, GPIO.LOW)
    GPIO.output(D6, GPIO.LOW)
    GPIO.output(D7, GPIO.LOW)

    if byte & 0x01 == 0x01:
        GPIO.output(D4, GPIO.HIGH)
    if byte & 0x02 == 0x02:
        GPIO.output(D5, GPIO.HIGH)
    if byte & 0x04 == 0x04:
        GPIO.output(D6, GPIO.HIGH)
    if byte & 0x08 == 0x08:
        GPIO.output(D7, GPIO.HIGH)

    lcdE()

def lcdPut4bit(byte):

    GPIO.output(RS, GPIO.LOW)
    time.sleep(0.0001)
    GPIO.output(D4, GPIO.LOW)
    GPIO.output(D5, GPIO.LOW)
    GPIO.output(D6, GPIO.LOW)
    GPIO.output(D7, GPIO.LOW)

    if byte & 0x01 == 0x01:
        GPIO.output(D4, GPIO.HIGH)
    if byte & 0x02 == 0x02:
        GPIO.output(D5, GPIO.HIGH)
    if byte & 0x04 == 0x04:
        GPIO.output(D6, GPIO.HIGH)
    if byte & 0x08 == 0x08:
        GPIO.output(D7, GPIO.HIGH)

    lcdE()

def lcdE():

    time.sleep(0.0001)
    GPIO.output(E, GPIO.HIGH)
    time.sleep(0.0001)
    GPIO.output(E, GPIO.LOW)
    time.sleep(0.0001)

def lcdSetPos(line, col):

    rowOffset = (0x80, 0xc0)
    lcdPutByte(rowOffset[line] | col, COMMAND)

def lcdPutStr(str):

    length = len(str)
    for i in range(length):
        lcdPutByte(ord(str[i]),DATA)

def lcdClear():

    lcdPutByte(0x01, COMMAND)

if __name__ == '__main__':

    try:
        main()
    except KeyboardInterrupt:
        pass
    finally:
        lcdClear()
        lcdSetPos(0,0)
        lcdPutStr("Goodbye!")
        GPIO.cleanup()

vmstat コマンドの結果を液晶に表示しているだけです。この部分を変更することで、表示する内容を変更できます。
Raspberry Pi 3 での動作確認は面倒なのでやっていません。もし動かない場合は def lcdE(): の sleep 時間を増やせば動く確率は上がるかと思います。

root@volumio0726:~# cat /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/home/volumio/pythonスクリプト.py &

exit 0

Raspberry Pi を立ち上げたときに、自動起動するように rc.local に /home/volumio/pythonスクリプト.py & (pythonスクリプトは作成されたファイル名に置き換えてください)を記述します。

LED の発電をちょっとみてみた

2016-07-23 12.50.33

LED って電気起きるの? というのは知識としては知ってたというやつですが、やったことがなかったので測ってみました。ブレッドボードに赤色LEDを向かい合わせで配置して測定です。

スクリーンショット (5)

最初は単純に、1kHz のサイン波出して受光側 LED の出力を見てみました。発光側はサイン波の+(プラス)側でしか光りません。(もうちょっと細かいことを言うと VF 2V 程度あるのでそれ以上の電圧)
受光側は矩形波っぽい波形が出てきました。電圧は無負荷で 1.5V です。

スクリーンショット 2016-07-23 13.07.07

条件を変えたら受光側でもサイン波っぽいの出てくるんじゃね? 的な考えで、オシレータの電圧を 1.75V かさ上げ。振幅は 100mV とかなり小さくしてみましたところ、受光側 LED の信号もサイン波みたいな感じになってきました。LED 間の距離とかの調整で光の強さは加減出来るので音声をそのまま伝える程度なら遊べるかもですね。
もうちょっと、正確な信号を伝えたかったら搬送波を作って FM 変調で送るのがいいかもということで、今日の簡単な実験はしゅーりょー

関西ハムフェスティバル 2016 行ってきました

2016-07-17 09.23.11

関ハム 2016 に行ってきました。場所は池田市の市民会館です。廃局してコールサイン無しなのですが、この手のイベントは結構ひさしぶりな気がします。今日は、PUP さんと会えるかな?ということでお出かけです。

2016-07-17 10.01.54

会場をひとまわりして Si4735 ラジオ発見。関ハムでこんなん展示してるの1箇所しか無いですから間違いありません。隣の抵抗類は、北神電子サービスさん のスペースの売り物です。
簡単にご挨拶だけしてあとは世間話をしつつ時間が流れます。プログラムの修正などはわかる範囲でのポイントなどをお話したりしてました。また時を同じくしてこちらのブースに来られたレーザーカットをはじめに、プリントサービスなどをやっておられる、「利助屋」 さんとも少しお話させていただきました。

Si4735 ラジオの原型は私のところで作成して公開しましたが、JG3PUP さんは基板作成+短波受信改造されて公開。いくつかの派生バージョンの基板をもとに現在は DIP 版ラジオを設計されていま
す。

2016-07-17 10.00.08

テスト版入手された 旅の途中 さんが中波のイメージ対策でアンテナまわりの回路改良などを web ページ内の pupさんのFRISK_Si4735Radio_Full_DIP Ver にて改良点などを公開されたりしています。

Si4735 ラジオモジュールを使った記事は 2013 年のものですが、今もネタとして生きているのをこの目で見ることが出来て嬉しかったです。

頒布物のページを移動します

頒布物のページですが、現在の www.mkusunoki.net から www.em9system.com に移動いたします。今は個人の Blog に頒布サイトも同居させているのですが、Wordpress のテーマ変更など行ないますと、ショッピングカートのページが見づらい状況になったりしているのが現状です。

同じサーバーを使用しますが、マルチドメインで頒布物ページを独立させまして見易いよう変更します。今後頒布アイテムを移行していきます。ご不便・ご迷惑おかけいたしますが今後共よろしくお願いします。

GM70 シングル 周波数特性確認

2016-07-10 10.32.55

音出ししてから大分経ちましたが、やっとこさ周波数特性を確認します。ダミーの抵抗と Analog Discovery2 で簡易測定します。

右チャネルの 10Hz – 500kHz を 100 サンプルという少ないサンプル数で測ったグラフです。
NFB なし
-3db
-6db
-10db
を貼り付けておきます。

R-NFB0
R-NFB-3
R-NFB-6
R-NFB-10

無帰還では、山形の特性が出ました。帰還量を増やせ周波数特性はよくなり、-10db でほぼフラットな感じになりました。位相のほうは 200kHz 付近で180度まわってます。アナライザでは200kHz 付近の発振は無かったので帰還抵抗に抱かせているコンデンサは今のところいじらない予定。

右チャネルの 10kHz の矩形波を入れてたときの波形
NFB なし
-10db
を貼り付けておきます。

R-10khz-0db
R-10khz-10db

めちゃくちゃな波形になっていないのでよしとします。

アンプに内蔵している Arduino UNO ファンコントローラーの機能追加とゴム足を付けたらひとまず完成にしたいと思っています。

日光日帰り散歩に行ってきました

2016-07-06 06.12.58

日帰りの散歩にお出掛けしました。候補をいくつか出していました。思いついた順の行きさきは下記のとおり。

  • 龍泉洞(岩手県)
  • 富岡製糸場(群馬県)
  • 自衛隊 市ヶ谷地区見学(東京都)
  • 筑波宇宙センター(茨城県)
  • 日光東照宮(栃木県)

本当は龍泉洞に行きたかったのですが、検討していた頃は梅雨前線がちょうど東北地方に居てたことや、岩手行くんやったら宿泊入れるよなぁ。ということで選外に。他の候補も時間縛りなどを理由に今回はパスしておくことにした結果、日光に行くこととなりました。ということでキップの手配です。東武浅草駅 8:00 発の特急を確保です。

2016-07-06 07.44.27

ホームにあがりますと、金色塗装のスペーシアでした。

2016-07-06 07.42.42

東武浅草駅は線路のカーブがきついので電車とホームの間が空いています。転落防止の対策がなされていました。

2016-07-06 09.54.18

特急で下今市駅まで行ったら、普通電車に乗り換えて2駅で東武日光駅に到着です。
電車を降りたら駅案内所に行っててバスの乗り放題チケットを購入しました。エリアは中禅寺湖までのやつで 2000 円しました。各バス停の時刻表・路線図も一緒にもらえるので安心です。
10時のバスに乗って、参道近くのバス停で下車。輪王寺 → 東照宮 → 二荒山神社の順にまわりました。

2016-07-06 10.14.58

輪王寺は大規模修理中でした。さくっと参ってどんどん移動していきます。

2016-07-06 10.21.12

東照宮の鳥居をくぐって、中に入ります。

2016-07-06 10.28.28

こちらも、平成の大修理の真っ最中でした。痛んだ建物や三猿や眠り猫などの彫刻など絶賛修理中。三猿や眠り猫はレプリカになっていました。

2016-07-06 10.30.55

平日は遠足ですかね。混んでました。

2016-07-06 10.48.14

奥社にある徳川家康廟も見に行きました。ガスっててちょっとボヤけた感じの写りになってしまいました。

2016-07-06 11.07.03

唐門もふくめあちこち修理中でしたが、とにかく金ぴかでございます。このあと二荒山神社も参りまして昼食タイムになりました。お昼は写真取っていないのですが、中禅寺湖方面バス停近所で湯葉丼というのをいただきました。さっぱりした味付けで食べやすかったです。

2016-07-06 12.50.04

中禅寺湖方面生きのバスに乗りまして、第二いろは坂を登っていきます。バスが高度を上げるにつれてガスの上に出て天気がよくなりました。東照宮でガスっていたので華厳の滝へ直行する予定でしたが雲を抜けたので明智平の展望台に寄ることにしてバス途中下車。ロープウェイで展望台に上ってみます。

2016-07-06 13.04.52

展望台から中禅寺湖方面の眺望。華厳の滝が見えます。滝の下にビュースポットがあるのも見えます。

2016-07-06 13.06.27

展望台の反対側、東照宮やつくば方面は雲海に隠れてしまってて、名も知らない山のてっぺんが見えるだけという状態。

2016-07-06 14.44.42

展望台を後にして再びバスに乗車し中禅寺湖バス停まで移動。そこから歩いてすぐのところに滝の下側に行けるエレベータ乗り場があります。

2016-07-06 14.17.16

エレベータで100m下って通路を抜けたら、滝が下から見られる展望台に出ます。

2016-07-06 14.21.01
2016-07-06 14.26.12

展望台も小学生の生徒さんたちと一緒になったので結構混んでたりしましたが、しばし滝を眺めて楽しみました。

2016-07-06 15.05.26

主目的は達成したのですがちょっと時間あまりました。時間調整で中禅寺湖のほうも見に行ったのですが、平日なので実に静かでありました。

2016-07-06 16.04.26

中禅寺湖から東武日光まで移動。

2016-07-06 16.19.29

帰りの電車も下今市まで普通電車、特急乗り換えで浅草駅までとなります。日帰りでしたが気分転換出来てよかったです。

GM70 シングル 866A 水銀整流管をよく光るやつと交換して楽しむ

2016-06-18 19.58.26

手持ちの 866A 水銀整流管でよく光りそうなのをひっぱりだしてきて夜になってから再度記念撮影。本題は GM70 直熱三極管アンプなので整流回路に使う真空管は脇役なのですが、これはこれで楽しい光モノなので Blog ネタから外すわけにはいきません。


入手した数本の球かから、電極からカーボン出ている USED なものから使いますが、ここぞという時ようによく光るのは確認しておきたかった次第。

2016-06-18 20.00.42

ついでにローアングルの写真も一枚パチリ。いい感じです。

2016-06-19 13.53.47

866A 水銀整流管が全滅したとき用に Tung-Sol 3B28 キセノンガス整流管も仕入れました。が、テストしたらヒーターを囲む筒の中で光ってはいるようですが、目立たないことがわかりました。これはこれで問題なく使用出来ましたので、互換品として使用可能なことは確認出来ました。

GM70 シングル 音出しまで進んだ

2016-06-18 11.26.20

休日の定例作業と化している真空管アンプの配線作業再開です。赤ペンで配線済んだところをチェックしながら作業を進めます。

2016-06-18 13.28.28

一通り配線が済んだので初段・2段目が動くか確認。バラックテストの時と同じ結果となりましたので OK でした。

2016-06-18 15.28.07
2016-06-18 15.28.11

ここからが、怖いけど確認しないといけない終段の B 電圧が出ているかの確認。無事1000V 程度の電圧が出ていましたので一安心です。もうここまできたら音出しするしかありません。

2016-06-18 15.45.39 HDR-2

壊れても問題ない数十年前のミニコンポスピーカーを接続しまして電源投入。帰還なしでの音出しは問題なく出ました。1時間ほど様子見で動かしました。このスピーカーこんなに音出たっけ?という感じでよく鳴っていました。(耳の調子がよかったからかも知れません)

2016-06-18 15.35.56

ワットチェッカーの表示は 386W と表示されました。今ヒューズボックスに入れてるヒューズが 4A なのですがもう 1~2A 余裕のあるものに交換したいと思います。

これ以降は、スピーカー端子の極性が間違っていないか確認して問題なければ、軽く負帰還をかけた状態で動作するかやってみる予定です。