ぽんず製造所

当ブログの記事を参考にして行った事により、いかなる不都合が発生としても当方は一切の責任を負いません。全て各自の自己責任でお願いします。

MIDIインタラプタを作りたい

このまえテスラコイルで演奏ができたのはいいけど、MIDIインタラプタが金魚氏のものを使っていたので自分で作ってみたいなぁ......
っていうわけでそのへんも作ってみようと思う。前もちょっとやってみたけど今回は実用的(?)に使えるものを作ってみたい
MIDIインタラプタとは送られてきたMIDI信号をその音階の周波数に変換、矩形波パルスを出力するものです。


マイコンは前から使ってみたかったPIC24という16bitマイコンにしました。使ってみたかっただけ。
あと16bitだからちょっと複雑なことできるかな~とか思ってます

1431252824211

初めてのPIC24なのでうまく扱えるか不安...
今回は小さい方の14ピンパッケの「PIC24F08KL200」を使います。


まず開発環境を整えることから始まって
定番のLチカをさせてみます。適当にググって出てきたプログラムとかを参考にしました。

んで書き込んでみると

...

...

書き込めない...
なんでやねんと思いながらもいじっていくと、ライター(PICerFT)の設定が原因でした。拡張ICSPで書き込もうとしてたのですがKLシリーズは拡張ICSPに対応してないらしいです。
ただのICSPにして書き込んでみると...



動いてくれました
ん~でもMCLRピンを入力としてもなんか設定できないので色々調べてみるとPICerFTはどうやらそこのコンフィギュレーション書き込めないっぽいです。仕方ないのでMCLRピンのまま使います。


で、PIC24の練習として「音階表示器」をやってみようとしたのですが

「めうちゃんは音階表示器をやりたいんだね」
「やりたいめう」
「でもそのためにはLEDを12個つけるからピンは12本必要。ダイナミック点灯にしても7本。他に電源系や入力・出力などがあって14ピンマイコンじゃピンが足りないね」
「たりないめう...」
「そこで『チャーリープレクシング』という点灯方式を使う」
「使うめう」
「すると12個のLEDを点灯するのに4本で済む!」
「やっためう!すごいめう!!!」

こんな感じで使用ピン数を削減。
実際には12個以上のLEDを点灯させたいので5本になります。
チャーリープレクシングはn^2-n個(n=ピン数)のLEDが点灯できるので5本で最大20個まで点灯できますね。

ちなみにこんな回路です。LEDを逆向きにつないだり工夫されています。

無題

欠点は1つずつしか点灯できないので少し暗くなっちゃうことです。まぁ高輝度LEDを使って大きめの電流流してあげれば普通につきます。あと制御がチョットめんどくさいことかな?


適当にプログラム作って書き込んでみたら動きました。
昔作ったチャーリープレクシングモジュールを接続しています。

1432128492210



動かすことができたので本番のインタラプタを作ってみようと思います。
ついでにさっきの音階表示器の機能も合体させちゃおうと思います。
まぁPIC18Fで作った時のをコピペしてちょっと書き換えるだけなんですけどね。

コピペしただけだけどであっさり動く



それと出力を2chにしてテスラ2重奏もできるようにしました。


もしテスラコイルのノイズなどでマイコンが暴走した場合、出力がHになりっぱなしになってしまい最悪テスラが燃えます。
この事態を防ぐためと、パルス幅の制御=放電距離の制御用に、ロジックICでパルス制御回路を設けました。
パルス幅の制御はマイコンにやらせてもいいけど、処理が追いつかなさそうなのでついでにロジックにやらせることにしました。
タイマーIC555を使うのが主流のようですが、今回は74HC123を使います。555タイプより小型化できるし2回路入っているしちょうどいい。

回路

midi123

マイコンからは10usのパルスが出力(アクティブロー)されるだけですがボリュームを回すことで大体3.3~330us(もうちょっと多いかも)の間でパルス幅を制御できます。
上の回路では次のパルスと重なって1つのパルスとなってしまいますが、下の回路ならば重ならずに出力することができます。
というわけで破壊防止・パルス幅制御回路は完成。


インタラプタとして最低限はうごいたけどボタン(と言うか切り替えスイッチ)が足りない。

「めうちゃんはスイッチを追加したいんだね」
「したいめう」
「でも残り3ピンしかない。全部つかっても3つしかスイッチは付けられない」
「ちょっと足りないめう...」
「そこで『分圧ADC式』(勝手に命名)という点灯方式を使う」
「使うめう」
「するとADCピン一本で(理論上)いくらでもスイッチが付けられる!
「やっためう!すごいめう!!!」

こんな感じで使用ピン数を削減。
回路ではこんな感じ

Untitled

どれかのスイッチが閉じた時、上の抵抗としたの抵抗で分圧された電圧が出てきます。
この電圧をADCで読んでどのスイッチが閉じたのかを判断します。
すべての抵抗を違う値にすれば同時押しにも対応できます。
「いくらでも」と言いましたが実際はADCの分解能や誤差、ノイズ等でズレるので余裕を持ってスイッチは4つまでにしました。 

実際にこの方式で読んでみましたが意外と使えます。


ちょっと長めの記事になったけどこれでインタラプタはほぼ完成です。
ピンが足りないンヒィ!!とか騒いでたけど回路の工夫で最終的に2本も余らすことが出来ました。しかもチャーリープレクシングはまだ余力があるのでLEDを追加できます。
チャーリープレクシングと分圧ADCはオススメです。

このインタラプタの基板はプリント基板で作りたいと思います。いつになるかわからんけど。

テスラコイルで演奏した

そういえば2ヶ月位前にElecrowに発注してた基板が届きました。
10枚発注にもかかわらず11枚入ってました。Elecrowは多く入ってるという評判があるので実はコレちょっと期待してたり
弾速計キットV2.0の基板です。

1429610333892
CIMG0343

NT京都で販売するつもりでしたが、Elecrow側のトラブルが合ったらしくてNTまでに日本に届かなくて結局販売できませんでした。
10x10cmで発注したけど5x7cmしか使わずもったいなかったのでHaido氏の基板も一緒に乗っけて発注しました。
Vカットはできない(できるけど高い?)らしいのでHaido氏が基板をカット、その後に自分のところに送っていただきました。

↓日本到着直後はこんなかんじだったらしい
CBP31wUUQAEFsta

コネクタ類が足りなくてあと少しで完成って所ですが配線ミスもなくしっかり動いてるようです。よかった。

1429623143949

弾速計キットV2.0は後々販売する予定です。



さて、テスラコイルで演奏するときはPCとテスラを絶縁しないとPCがフリーズしたりしてまともに演奏できません。
そのため光ファイバーケーブルとかで絶縁する必要があるのですが、よくあるテスラ回路だと光コネクタ(受光側)を改造する必要があります。
結構前にテスラ演奏用に光コネクタを購入してたけど改造がめんどくさくてやってませんでした。
いい加減演奏したかったのでようやく光コネクタの受光部を改造しました。
一般的なインタラプタの信号ではDTが低すぎたりするとインタラプタの信号ではなく「1」が出力されてしまいます。
具体的な改造方法は中の素子を取り出して普通のフォトトランジスタに交換するだけです。あとはカレントミラー回路やバッファとか通して整形すれば正確なインタラプラ信号が取得できます。

CIMG0345

左が送光コネクタ、右が改造済み受光コネクタです。送光側は改造する必要はありません。
フォトトランジスタを光ファイバーの位置ピッタリに合わせる必要があるので結構大変でした。こんな改造しなくても済む回路も考案中...
まぁこれで光ファイバーで送れるようになりました。

そういえばフィードバックをアンテナ→CTに変更しました。


改造も終わったんで久々にテスラコイルを引っ張り出してきて演奏してみよう....と思ったけどアホなミスして素子を飛ばしました
500Vの素子も少なくなってきたので倍電圧整流(282V)から全波整流(141V)に変更して200Vの素子で動かせるようにしましたが...

これフルブリ282Vの時の放電なんですが141Vだとコレの半分だよ

DSC_0294

さすがにしょぼいので"141Vでもコイル巻取り長くらい放電できるコイル"を目標に新しくコイルを巻いてみました(放電するとは言ってない)
VU75パイプに0.08mmUEWを1200回くらい巻いてみました。太めのコイルなのは共振周波数を落とすのが目的。ちなみに前のコイルはVU40で同じくらい巻いたので変わったのは太さだけです。
 
CIMG0344
あっ後ろの漫画はえっちなやつじゃないです


試しに放電させたわけですが数cmしか放電しない...

太い2次コイルの特徴を活かして思い切って1次コイルを2次コイルの中に入れてみました。

CIMG0346
CIMG0347

すると
 
CD-zfM6UgAIwC8n

コイル巻き取り長と同じくらい放電しました。
いやインダクタンスや1次の高さも変わってるし中に入れたから大きく放電したのかはわからないけど。
てかカンパントロイドとか頭悪そう(コナミ)


うまく行ったので演奏させてみます。

RED ZONE



ちなみに昔の放電はこんなんだった。
比べると安定度も放電長も良くなったと思う 。




"ビリビリ"中学生にちなんでonly my railgun



いい感じだと思う。あとはケース?にまとめられたらいいかも。

PICマイコンで波形を取る何かを作った

電圧波形を見たいけど、オシロスコープを持ってないので波形を見ることはできない。
その見たい波形というのは周波数もそれほど高くないし連続的に見る必要はないので、マイコンでちょっとした記録装置を作れそうだったので作ってみました。

仕組みは、マイコンで一定の間隔でAD変換を行って記録、ある程度のデータが取れたらPCに送信してExcelなどの表計算ソフトでグラフ化してみるというものです。
波形測定にPIC12F1822、PCへの送信にPIC18F14K50を使ってます(自分が頭悪すぎてマイコン1つにできなかったんだよ)
波形測定中は12F1822に測定と記録だけに専念させて、あとからURATで14K50→USBでPCの順で送信します。
12F1822はRAMが128byteなので8bitのADCにしても100個ちょいくらいしかデータが取れませんが、とりあえずよしとします。ADCも8bitで十分だし。
14K50は12F1822からUARTで送られてきたデータをUSBに変換(?)してPCへ送るだけです。


ブレボで実験中
RC回路でコンデンサを充電した時の波形を取ろうとしています。

1429462218246

実際にとれた波形がこちら。条件は0.147uFと10kΩのRC回路
OpenOffice使ってみたけどまだ使い方がよくわかっていないのでその辺は勘弁

CC9135yUsAArg2o

ビット数とか色々妥協したところはありますが、なかなかといい感じに取れてます。


入力を浮かせてみたらこんなんなった。当たり前だけど

CC92j8hVEAEqXcp


ん?コレって......レールガンの波形取れるんじゃね?とか思いつきましたので
ブレボから基板に移植。
レールガンとPCをつなげるのは気持ち悪い...というか危ないので、12F1822単体で波形を取ったあとに14K50と繋げられるようにしました。

1429547113552

取得したデータをPCに持ち帰る際に12Fの電源が切れるのでデータを一旦EEPROMに書き込んでおくようにしました。PCに送信するときはEEPROMのデータを送信すればいいわけです。

シャント抵抗を利用する方式で電流波形を見てみたいと思います。
シャント抵抗は直径2mmの銅線を5cmくらいにカットして0.25mΩのものを作りました。尚mΩ級の抵抗値を測れるテスターとかは持ってないので抵抗値は計算で出だしてます。ちょっと不安
マイコンのADCが5Vまで測定できて0.25mΩなので最大20kAまで測れるはずです。


実際に撃ってとれた波形
レールガン2号機, 電解300V, 33.6mF, サイリスタ

1430063686194

コレ本当にちゃんと波形取れてるのか???って感じです......
EMPの影響もありそうだし......
電解コン300Vでピーク14kAも流れてるし電解コンでそんなに流れるのかよって
あと本当はシャント抵抗じゃなくてロゴスキーコイルとかのほうが正確な値が出たはず。
測定方法やノイズ対策、プログラムなど色々なところに問題があったので信用ならないデータだと思う。

もしコレが本当の波形だとしてもレールガン的にはすごく効率悪い波形だよなぁ。


うーん、作ってみたはいいけどいちいちPCに送信するのめんどくさいかなぁという感じです。
まぁ本来欲しかったデータはとれたからそれでよかったんだけども。
はぁお城欲しい 

直流電流計を作った

とあるジャンク袋にこんなものが入っていました。

a1fe24a4

0.022Ω 5Wのセメント抵抗 
これをシャント抵抗にすれば電流計が作れそうです。



まず仕組みを考えます。
今回はPICマイコンで検出・計算して7セグLEDで表示することにします。
マイコンは手元にあった18F13K22を使います。


シャント抵抗に電流を流します。
抵抗が5Wなので
√(5W / 0.022Ω) = 15.0755...
で約15Aまで流せる(つまり15Aまで測れる)事になります。いや15Aだと定格ギリギリなのでちょっと危ない気がするけど...

15A流した時でもシャント抵抗から発生する電圧は
0.022Ω * 15A = 0.33Vしか発生しません。
マイコンのADCの分解能が4mVなので4mVごとにしか測定できません。これでは180mAごとにしか測定できないことになってしまいます。
2mVごととか1mVごととか、それ以下でもできるっちゃできるけど、そこまでするとノイズの影響で値がふらつく思われるのでなるべく電圧を高くしたいんです。

そこでオペアンプを使ってシャントの電圧を増幅してからマイコンに入力することにします。
オペアンプは手元にあったLM358Nを使いました。オペアンプを自分で設計して使うことは初めてで何もわからないのでとりあえずこれを使います。

ADCで測れる最大電圧が4.096Vなので、約12倍すれば3.96Vで余裕を持って計測できることになります


LM358Nは電源-1.5Vまでしか増幅ができないらしいです。これはレールツーレールと言われるオペアンプを使えば解消できるらしいです。
電源は5Vなので3.5Vまでしか増幅できず、3.96Vまでは出力できません。

増幅値を約10倍にすればいいんですが、それだとADCをいっぱいまで使ってなくてなんだか気持ち悪いので、ADCで測れる最大電圧を2.048Vに変更することにします。

2.048V / 0.33V = 6.2なので6.2倍に増幅すればいいことになります。
増幅値は調節用に半固定抵抗で可変できるようにしておきます。


まとめると、シャント抵抗から発生した電圧(最大0.33V)を、オペアンプで6.2倍にしてからマイコンに入力します。
2mV(ADCの分解能) / 6.2(オペアンプ増幅値) / 0.022Ω = 15.1515...mA
これで15mAごとに測定できるようになりました。

まぁ色々計算してみたけど実際は適当でやってます。

マイコンのプログラムはADCで測定して計算させて表示するだけなので省略
オペアンプの入力オフセットの影響とかも考えて計算してやります。



そんなわけでとりあえず作ってみた

b3579d9e

デジタル直流電流計ですね。
制作費は400円位でした。 
7セグLEDはダイナミック点灯方式のものを使用。茶色の塩ビ板を貼っつけて見やすくしています。
どうせ自分が使うのは鉛蓄電池につなげて使うくらいだと思ったので、端子はファストン端子にしてみました。
矢印の向きに電流を流します。

2156f443

1.27mmピッチ基板を使ってみました。 
ICの足の間にも配線が通せるのでおすすめです。半田の難易度もそれほど高くないです。とか言って半田クッソ汚いけどね
シャント抵抗あたりは一応最大15A流れるので太めの銅線と銅板で配線してみました。放熱も兼ねています。
 
5ea50a35


動作風景

ブレボで実験中。5Vで負荷33Ω
計算値0.1515...A流れるはずなのでぴったり

77017df9


鉛蓄電池に10Ωをつないでみた時。
1.18Aとか電池切れかけだね。

aef834e9


ペルチェ素子つないだ時

95f6f95f
7f2b8c45

かなり適当に作ったのに意外と正確な値が出たので良かったです。
スペック的にも大きさ的にも非常に使いやすい感じ。
なんかこれのケース欲しいな。3Dプリンターとか使ったらいい感じに作れそう(3Dpりんたー持ってない)

でもやっぱりオペアンプあたりがどうもうまくいって無いようで...LM358NだとGND付近の微小信号の増幅には向いてないのかもしれません。
オペアンプ内臓のPICマイコンとかあったりするのでそれで作ってみても面白そう。

PIC18F14K50でコピペキーボードを作ってみた

はぁ
中学校も卒業してNT狂都も終了して一段落して春休みです。


とりあえずテスラコイルのノーマルインタラプタを光出力に改造しました。

1427623360692

コネクタ壊して開きっぱになっちゃったんだよな

1427623477751

あと前から欲しかった温調半田鏝を買ってもらいました。 

1427690421168

コテ自体の使い心地は最高ですが、小手先をD型に変えたいかも。
まぁまた今度買おう。 


さて本題
PICマイコンでUSBをいじってみたかったのでPIC18F14K50でコピペキーボードを作ってみました。

元ネタはコレ(パクツイを引用してるので厳密には元ネタではないかもしれませんがこんなのがTLに回ってきたので(パクツイ死ね))
 

コレが話題になったあとRafale氏が実際に作っていたので


自分も作ってみたっていう

まずは適当にいじって慣れさせることにします。
「PIC18F14K50 USB」とかでググると雛形プログラムと回路がいっぱい出てくるのでそれらを使わせていただきました。
USB-シリアルのプログラムでPCに何か文字を送ってみます。 

1428174801405

📞( ◠‿◠ )お前マジなんなん
📞( `o´)ぎんなん
( ^o^)Г☎チン
┗('o'≡'o')┛ウワアアアアアアアアアアアアア!!wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
☝(☋`)☝ヴッヴェェェィwwwww
 
割と簡単に通信させることができました。まぁパクりプログラムだから当たり前か。

色々いじってるうちになんとなくわかってきたのでキーボードを作ってみます。 

ハードウェアはテンキーを改造して使うことにします。
分解して基板とボタンになるところのシート?を取り出します。 

1428227552831

基板はシートとの接続部だけ欲しいのでUEWで配線を引き出していらない部分の基板はカットしました。

1428230298585

余ったスペースに14K50の基板を乗っけてハードウェア完成です。
完成とか言って完成した写真とってないですすいません

1428323268879

ソフトですがUSB通信のプログラムは雛形を使わせて頂いたのですが
キーを読み取る部分がめんどくさくて、このキーシート(?)はダイナミック点灯のボタンバージョンみたいな配線になってるようです。
なのでそれを読み込めるようなプログラムを書けばいいわけです。
何のキーが押されたかを読み込んだあとそのボタンに登録されてる文字をUSBで送ればいいわけですね。
コピペをする場合Ctrl+CとかCtrl+Vですが、今回は「コピペキーボード」ということなのでCtrlを省略して1つのキーを押すだけでCtrl+○をやってくれるようにします。わざわざ2つのキーを押す手間が省けます(ネタ的にはCtrlキーが合ったほうが通じやすいか)
あとキーもたくさんあるしC, VだけではもったいないのでX, A, S, Z, Y...とか色々なCtrl+○キーを装備してみました。



使ってみた感想は意外と使いやすいです。Ctrl+EnterキーなんかはTwitterに投稿する時結構便利です。
あとネタにもなったり
今思いついたけどShift+○なんかも実装すると!"#$%&'()を楽に入力できそうだな

意外と便利で面白いので皆さんも作ってみてはどうでしょうか? 
5000兆円欲しい!
Twitter
Twitterに大体います