最近どうにも暑く、帰宅時の部屋の熱気がたまりません。外出先からエアコンをつけたい…ということで、Linux ボードの NanoPi NEO 2 を使ってさくっとリモコンサーバを作ってみました。
右側の基板で IR 送信、受信を行っています。下側の基板が NanoPi NEO 2 です。ケースはそのうち。
とりあえず詳細は Web サイトのほうにアップロードしましたので、よろしくおねがいします。
最近どうにも暑く、帰宅時の部屋の熱気がたまりません。外出先からエアコンをつけたい…ということで、Linux ボードの NanoPi NEO 2 を使ってさくっとリモコンサーバを作ってみました。
右側の基板で IR 送信、受信を行っています。下側の基板が NanoPi NEO 2 です。ケースはそのうち。
とりあえず詳細は Web サイトのほうにアップロードしましたので、よろしくおねがいします。
GW を利用してシンセリコーダーの改良をしていました。
上がプロトタイプ1号機、下がプロトタイプ2号機です。
1号機では指検出にメカニカルスイッチを使用していましたが、2号機ではタッチセンサに変更しています。
あわせて、基板配置の変更、センサキャリブレーションの自動化と、マウスピースの設計変更を行いました。
マウスピース部分は 3D プリンタで出力しています。
このプロジェクトではおもちゃではなく楽器を作りたいので、息の検出は当然肝となる部分で、いろいろ試した結果気圧センサを使用しています。
マウスピースと気圧センサは試行錯誤の結果、上記写真のように取り付けています。
気圧センサの出力は、横にある LM324 で増幅してマイコン (ATmega8) に入力されます。
基板は以前製作した便利な細長ユニバーサル基板を使用しています。
指使いを検出するタッチセンサには上記写真に見えるように、ピンヘッダを使っています。
タッチセンサ(メカニカルな接点を使用しないスイッチ)は大きく分けて非接触型と接触型に区別されます。
静電容量を利用する非接触型はそれなりに広くパターンを設ける必要があり、リコーダーのサミング(穴を半分だけ空けること)検出が難しそうなので採用しませんでした。
接触型にもいろいろあり、商用周波数からのノイズを拾うものや、接触抵抗を検出するものがありますが、今回はセンサ端子の浮遊容量に電荷を貯め、端子の電荷が指を通して放電されることを検出する方式を採用しています。
上から。
基板に誤って触れるとセンサが誤検出するので、サイドカバーをつくってつけました。
どうも直径に対して長さが足りない気がしますが、「リコーダー 寸法」とかで検索しても値が出てこないのであまり気にしないことにします。
下側の穴(左手親指)はサミング検出のため、上記写真のように 2 組のセンサ接点を配置しています。
ちょっと演奏しづらかったので、片方の接点のみ位置を微妙に調整しました。
これで大分、リアルリコーダーの感覚に近づきました。
太陽電池で駆動する導通チェッカを作りました。
電池不要でメンテナンスフリーかつ常時電源 ON なので、テスタで導通チェックするときのように、いちいちスイッチやレンジを切り替える必要がありません。
作業机の上に 1 つ置いておけば、使いたいときすぐ使えて便利です。
Source Code (AVR Assembly for ATtiny11L / ATtiny13A)
上図に回路図を示します。測定電流 1mA (パルス測定) で、約 100 Ω以下のときブザーが鳴るようになっています。消費電流の関係で BOD やリセット IC を使用していないので、うまく起動しないときはテスタリードで RESET ピンをタッチしてください。
MCU は ATtiny13Aを使用しています。当初は ATtiny11L を使用予定だったのですが、このチップは WDT 用クロックを内蔵 RC 発振器として共用しており、電源電圧により発振周波数が 10 倍以上変化するという致命的な問題があるため、途中で tiny13A に変更しました。プログラムはアセンブラですが、GCC でアセンブルできるようになっています。
この製作のキーパーツはアモルファス太陽電池で、松下のアモルトンの 3V 出力品 (開放時 4V) を使用しています。アモルファス太陽電池は通常の単結晶シリコン太陽電池と感度特性が異なり、可視光域の感度が高いため、室内の蛍光灯下の動作に適しています。いわゆるソーラー電卓に使われている太陽電池ですが、電卓用の 1.5V 品ではなく、3V 品を採用しています。
蛍光灯下の動作に適していますといっても、太陽電池の出力はたかだか数 10 uA しかありません。圧電ブザーの駆動には数 mA の電流が必要なので、電気二重層コンデンサに一度充電してまかなうことにしています。
プログラムのだいたいのダイアグラムを上図に示します。テスタリード開放のとき Power Down Sleep モードに入り、INT0 割り込みを待ちます。このときの消費電流は 1uA 以下です。抵抗値のチェックはコンパレータを使用して、0.1V 基準電圧と比較します。
ケースの中身はこんな感じで、見てのとおり適当な基板の切れ端に実装しています。
テスタリードとケースは 3D プリンタで作成しました。テスタリードの先っぽは MAC8 CD-2 です。
現在平行して作成中のものがいくつかあります。
シンセリコーダーもそのひとつ。
最終的にはウィンドシンセ (Wind Synthesizer) のように、PC に MIDI IN としてつなげるリコーダーをイメージしています。
おうちでリコーダーを吹こうと思っても、都内の住宅事情では騒音になるためなかなか難しいですね。
シンセリコーダーさえあれば、時間を選ばずリコーダーが吹けるわけです。深夜にリコーダーを吹く是非は置いておきましょう。
残念ながら?「電子リコーダー」は製品として存在していたようですが、自作電子楽器の題材としてはおもしろいかな、と思います。
しばらく試行錯誤していたのですが、ある程度演奏できるプロトタイプ1号機ができてきました。
見た目のリコーダー度はまだまだ 20% くらいです。
上半分が USB 基板、下半分がリコーダー基板。
このプロトタイプで確認したかったことはウィンドシンセの心臓部であるブレスセンサと通信線の電源重畳の動作です。
スイッチ(リコーダーでいう穴)はディテクタスイッチを使っていますが、いずれタッチセンサに置き換え予定です。リコーダーの場合、半開判定が必要な穴が3つもあるので、静電式タッチセンサの採用は難しいです。必然的に接触式になるのですが、これはこれで調整が面倒なことはわかっているのであとまわし。
マウスピース?部分は 3D プリンタで作っています。
リコーダー基板には音程確認用の圧電ブザーを載せています。
ここにヘッドホンをつければスタンドアローンで動くので、某笛マンガに出てくる珍笛のようなものができあがります。
なおコントローラは ATmega8 です。
ブレスセンサはふつうの気圧センサを試してみましたが、応答性は問題なさそうです。
耐湿性が一番の問題ではありそうですが、実際の製品ではどうしているのでしょうか。
USB 基板(右側)と LED 基板(左側)。LED 基板はスイッチ状態とブレス値などを表示します。
USB コントローラには PIC18F14K50 を使用しています。
最近良く使うので汎用の PIC18F14K50 ユニバーサル基板を起こしてしまいました。
茶色の配線はリコーダー基板への配線で、+7V 電源供給と半二重通信を 2 本の線で行っています。
ある程度予想はしていましたがやはりディテクタスイッチでは演奏しづらいので、プロトタイプ2号機ではタッチセンサを試す予定です。
もうひとつ、私のリコーダー演奏が下手なことが最大の問題です。
最近になって AVR HVS ライタを製作したので、ここで紹介します。
最近 ATtiny11 という古めのチップを(大量に)入手したのですが、
この書き込みは ISP 非対応ということに、入手後になって気づきました。
2018 年現在、AVR マイコンのプログラミングインタフェースをリストにすると、おおむね以下の通りです。
以前からの品種でサポート
SPI ISP: ほとんどの品種でサポート
HVS (High Voltage Serial): 8ピン tiny13A 等, 12V 必須
HVP (High Voltage Parallel): 16ピン以上, 12V 必須
新しい品種でサポート
TPI (Tiny Programming Interface): tiny10 等
PDI (Program and Debug Interface): XMEGA系
AT90S / tiny / mega を中心に使用する限り、AVRISP のような SPI ISP 書き込みに対応した
ライタさえ持っていれば、「少数の例外を除いては」ほとんどの品種に対応できます。
ところが tiny11 は「少数の例外」にあたり、プログラミングインタフェースは HVS のみに対応しています。
HVS 対応のライタは持っていなかったので新しく作る必要に迫られました。
製作にあたって下記の条件を定めました。
(1) USB で動作すること (IF, 電源共)
(2) MCU は ATmega8 を使用すること (手持ちの関係)
(3) 既存のソフトウェアを使用できること
(4) 安価であること
(1)(2) を満たすライタがネット上に公開されていればそのまま使いたかったのですが
条件に合うものが見つからなかったので、回路と FW は新たに作ることにしました。
ホスト側ソフトウェアは私が作ると中途半端な実装になりそうなので、
既存の HVS 用ソフトウェアに対応することが望ましいです。
ちょうど、neko JAVA さんが USB 対応のパラレルライタを公開されていたので、
ホスト側ソフトウェアはこれをそのまま使用できるようにします。
FW の実装は v-usb ベースですが、HVS / HVP 実装部分でソースコードを参考にさせてもらいました。
回路図:
FW ソースコード: 180219_YLE_HVS_Writer_Source
ホスト側ソフトウェア: 本文参照
HVS + tiny11 で FLASH 書き込み、読み込みできることを確認済み。
HID なのでドライバは不要です。
HVP (High Voltage Parallel; 高電圧パラレル) も一応実装していますが、動作は未確認です。
動作速度は正直言って遅い(tiny11 Program + Verify で 1 分以上)です。
FW は v-usb ベースにしており USB1.1 LS なので、interrupt 通信の
ポーリング間隔の制約からオリジナルの 10 倍程度遅いと思います。
tiny11 のようなページを持たないマイコンの FLASH を書く場合、
このライタのプログラムが 1バイトあたり 3-4 個の interrupt 通信するので
ほとんどの時間を通信待ちに費やすことになります。
このへんはプログラムの変更で 3 倍ほど改善可能ですが、
「(2) 既存のソフトウェアを使用できること」なのでそのままにしています。
PIC18F2450 など USB2.0 FS 対応マイコンに移植すればもっと高速になるでしょう…。
PIC の開発では MPLAB X IDE を使用していますが、MPLAB は起動するだけで大量のメモリを消費することが難点です。
たとえば私の環境では 32bit PC で起動時 430MB、スクリーンショットがありませんが 64bit PC で 800M-1GB、これでは他のソフトを立ち上げているとすぐにメモリ使用量がいっぱいになってしまいます。
これは起動時に JRE がヒープ領域を確保するためであり、MPLAB の読み込む設定ファイル mplab_ide.conf を書き換えるとヒープサイズを調整できます。
ファイルのコメントによると「-J-mx」以下でヒープサイズの上限を指定するようです。
デフォルト値はインストール時の環境に依存し、32bit OS だと 「-J-Xms256m -J-Xmx512m」
サイズを小さくしすぎると動作が極端に遅くなります。
PIC18F を使用するだけなら 「-J-Xms96m -J-Xmx128m」で十分動きます。
ファイル書き換え後再起動すると、起動時のメモリ使用量は 210MB と半分近くになりました。
去年の話になりますが、3D プリンタを購入しました。
3D プリンタはこれが1台目です。
入手容易な 3D プリンタには大きく分けて XYZ 3軸型のものと Z 軸のみのデルタ型の2 種類があるようで、
デルタ型のほうがかっこいいのでこちらを選びました。
amazon にあるものから、Anycubic というメーカの Kossel Plus リニアガイドタイプを買いました。
aliexpress などにもありますが、送料を考えると amazon 購入の方が安い気がします。
こんな感じの結構大きい箱で届きます。
組み立てキットなのでマニュアルどおり組み立てます。
どうでもいい話ですが、これと本 1 冊を同じ日に注文したら、
なぜか amazon 側でまとめられて超巨大な段ボール+大量の緩衝紙で届きました。
別配送にした方が効率よい気がするのですが。
付属のフィラメント色はランダムと説明文にありましたが、黒色のものがついていました。
変な色でなくてよかった。
組み立てていくうちに問題発生。
写真のように、ヒートヘッドの軸が折れていることに気づきました。
途中まで組んでから気づいたので、最初から折れているのか私の不注意で折ってしまったのか判断がつきません。
最初に全ての部品をチェックするべきでした。
まあ、この程度なら、瞬間接着剤でうまくつければ使えそうなので、補修してこのまま組み立て続行です。
で、ブログを編集していて気づくのですが
最初の写真を拡大すると、折れてるのがしっかり写っていますね!
輸送中に折れたものと思いますが、この箱
デリケートなヒートヘッドの梱包としては、ちょっと不十分な気がします。
組み上げると、カラーボックスの上に置けるくらいのサイズになります。
この部屋にはここしか平地がないので。
マニュアルは決して不親切ではないけど、下手な人が組み立てるとちゃんと動かないような気がします。
簡単なキャリブレーション後、Thingiverse の 3DBenchy をプリント (積層厚 0.2mm)すると、こんな感じになりました。
電子工作するうえで 3D プリンタの使い道はけっこうあって、
簡単に mm 単位の精度が出せるので、
たとえば基板固定用の支持具などを作れば、プラ板加工に比べてはるかに楽できます。
TTL IC をたくさん組み合わせて回路を作ろうとしたとき、既存のユニバーサル基板はどれもあまり使い勝手が良くありません。
最近は安くプリント基板が作れるようになっているので、オリジナルのユニバーサル基板を作ってしまいました。
設計した基板はモジュール式、つまり複数の基板を組み合わせて使うことを前提としています。
モジュール式とした理由は以下のとおり
これが1つのモジュールで、複数のモジュールを組み合わせて大規模回路を作っていく形になります。
2.54mm 間隔で 4×42 のスルーホール穴が開いており、表面にはピンの間に V+/GND のパッドが交互に配置されています。
V+/GND は両端の 1×4 部分と接続されています。
モジュールを5.08mm 間隔で配置して、モジュールの間にDIP14,16,20 の IC を実装することを想定して設計しています。
DIP16 ならちょうど 5 個、DIP20 ならちょうど 4 個の IC を実装できます。
通常のユニバーサル基板と異なり、1列目-2列目、3列目-4列目に配線がされています。
これにより、40 ピンのラッピングポストと組み合わせて裏面ラッピング配線ができます。
ラッピングポストは高いので、安い 2×40 のピンヘッダで代用しています。
本来はラッピング用 IC ソケットが使いたいのですが、高価なので・・・。
電源の配線ははんだブリッジでできるので簡単です。
秋月で売っているパワーグリッド基板と同じ仕組みですが、こちらは DIP IC 用に最適化されています。
1005 あるいは 1608 のチップ抵抗を使えばプルアップも実装できます。
実装途中を裏面から見るとこのようになります。トータルで見ると楽なのでラッピング配線をしています。
デカップリングコンデンサはピン間に直接取り付ける形になります。ここだけはモジュール式にしたデメリットです。アキシャルリードのセラミックコンデンサがあるとすっきりします。
裏面から見たとき実装されている IC が見えるのがポイントです。これにより裏面配線をしたときの配線ミスが大幅に減少します。
さらに、隙間があるということはその分コストダウンされているということを意味します。まさに一石二鳥。
モジュールを並べて回路を作るとこのようになります。右側に繋がっているのは一緒に作った接続ボードで、MIL 規格コネクタと LED、電源コネクタ等が実装できます。裏面配線なので表面は非常にすっきりします。
IC 実装レーンが 10 列あり、DIP 16 なら 10×5 = 50 個の IC を高密度実装できます。2つ並べたら 100 個です。左側に見えるグレーの板はタミヤのユニバーサルプレートを切ったものです。
KiCAD で設計して pcbcart に発注しています。
勢い 400 枚作りましたが、2-3 年で使い切りたいです。
ディジタル回路のクロックは重要ですが、ちょうどいい水晶発振子がなかったりするときなど、クロック N 逓倍器があると便利な場合があります。
最近は 21.48MHz (3.58MHz x6) の水晶がなく、某所で中国製の水晶発振子を購入したらぜんぜん違う周波数で(基本波から違う)困ったことがあります。
PLL を組めば N 逓倍できますが、いまさら VCO + MC4044 という組み合わせの回路は設計が面倒です。
最近 Cypress の CY2308 (+IDT23S08) という石をたくさん手に入れました。
これはもともとクロック分配の用途に作られた IC ですが、PLL を内蔵しており、フィードバック端子が外部に出ているので、ディバイダを外付けすれば手軽なクロック逓倍回路に使えそうです。
ただし出力周波数は10-133MHz と規定がありますが、入力周波数の規定がありません。
私が使用する周波数帯はだいたい 1-30MHz なので、この用途で使えるかどうかは基準周波数と発振周波数の下限(PLL 特性で決まる)にかかってきます。
というわけでテスト回路を組んでみました。
使用したのは CY2308SC-2 なので CLK と CLK/2 が出力されます。
CY2308 の CLK/2 または CLK 出力を 74ALS161 の 1/N 分周器で分周して FBK 端子に戻しています。
FBK のデューティは 50% でなくてもいいようです。
基準周波数は TC40H000 で発振させた 3.58MHz で、その 1/2 と 1/4 も選択できるようにしています。
したがって、出力周波数は fout = (3.58 / M) x N (x 2) MHz となります。
この回路の最大周波数は分周器に依存しますが、CO – /LD 間に使った TC40H000 の伝達遅れが大きく、これをたとえば 74AS04 などにすれば CLKOUT = 80MHz 以上出せるはずです。
fREF = 3.58 MHz、N=3 の CLK 出力は上図で、CH1 が CLKOUT 信号の波形を示しています(以下同じ)。この程度の REF 入力なら問題ないようです。
fREF = 1.79 MHz, N=6 の CLK 出力が上図で、fREF = 1.79 MHz はまだ大丈夫そうです。
fREF = 0.9MHz にすると CLK 出力が不安定になりました。(画像保存失敗)
よく使う 4MHz とか 6MHz のクロックなら、REF 入力にしても問題なさそうに見えます。
fREF = 1.79 MHz でどこまで出力周波数を下げられるかやってみます。
N=3 つまり fout = 5.37MHz はまだ安定しています。
N=2 つまり fout=3.58MHz では出力周波数が不安定になりました。
5.37 MHz で OK とはいえ、温度変化を考えるとやはり出力周波数はできるだけ 10MHz 以上に設定するべきでしょう。
とりあえず最初にほしかった 21.48MHz が簡単に作れるようになったので満足です。
ある程度実用的になったので DSP-444 ラジオの I2C テストの回路図とソースコードを公開します。
I2C で操作しているのは
・受信周波数の取得
・FM/AM/SW、受信バンドの選択
・音声出力の位相(デフォルトがLR反転なので、イヤホンで聞くためには設定が必要)
の3点です。
現時点でI2C での選局の方法はわかりません(対応するレジスタを設定しても変化なし)ので、ダイヤルによる設定としています。
適合するバリコンつまみを持っていないので、可変抵抗で選局するよう改造しています。
ここまで改造するならもう別のモジュールを使った方がいいような気もします。
表示器には hp の HPDL-1414 を使っています。この表示器はアルファベットも表示できるので、放送局のコールサインでも表示できるようにしようと思っています。
写真のように FM 補完放送も受信できます。