2016年06月13日 | aitendoでS12232ZAの販売が終了した事に伴い、部品表の備考欄での部品入手先の表記をスイッチサイエンスに変更。 |
2017年01月23日 | Arduino IDE 1.6.0以降でも使えるスケッチに差し替え。 |
ブレッドボードにレベルメータの回路を仮組みして動作が確認できたので、次にユニバーサル基板に回路を組んで、実際にレベルメータとして使用できるようにしました。
ブレッドボードに仮組みした際には、Arduino Unoを部品として使いましたが、そのままでは1枚の基板に収まらないので、Arduino Uno互換のマイコンをユニバーサル基板上に組みました。ただし、スケッチを書き込むためのUSB-シリアル変換回路は、レベルメータとして使用するときには不要なので、外付けとしました。また、5Vを生成する3端子レギュレータも省略し、外部から5Vの電源を与える仕様にしました。
一方で、動作モードを切り替えるためのタクトスイッチを1個と、LEDを1個、それにオーディオ入力端子に過電圧がかかった際にマイコンを保護する保護回路を追加しました。
回路図を次に示します。
SW1が、今回追加したタクトスイッチです。またLED1とR1が、今回追加したLEDと、その電流制限抵抗です。
オーディオ入力の過電圧保護回路は、R2、R3、R12、R13、D1、D2、D4、D5で構成されます。マイコンのA/D入力端子は、電源電圧の範囲内(今回の場合0~5V)の電圧を入力しないと、故障の原因になります。レベルメータのオーディオ入力に、普通の携帯オーディオのヘッドホン出力を接続した場合、どんなにボリュームを上げても故障の原因となるような大きな電圧は出てこないはずですが、万一誤ってヘッドホン出力以外に接続するなどして過電圧がかかっても、マイコンが故障しないように、保護回路を入れてあります。保護回路が要らない場合は、R2、R3、R12、R13のある部分はショートし、D1、D2、D4、D5のある部分はオープンにする(単に回路から取り除く)事で、保護回路を取り除けます。ただ、部品を減らしたい特別な理由がない場合は、保護回路を入れておく方がいいでしょう。
CN4のピンソケットには、LCDモジュール(S12232ZA)を接続します。ピンソケットとピンヘッダを使ってLCDモジュールを接続することで、後でLCDモジュールを取り外せるようになり、誤配線があった場合などのメインテナンスを容易にしています。
次に、部品表を示します。
部品番号 | 数量 | 品名 | 型番/仕様 | メーカー | 備考 | 参考単価 |
---|---|---|---|---|---|---|
U1 | 1 | マイコン | ATmega328P-PU | Atmel | Arduino Unoのブートローダーを書き込んだ物を使うこと。ブートローダーの書き込まれていないATmaga328P-PUにブートローダライタシールドやブートローダ/スケッチライタでブートローダーを書き込んでも良いし、既にブートローダーを書き込んだATmega328P-PUも市販されている。 | 350円 |
X1 | 1 | 水晶振動子 | 16MHz | 負荷容量が十数~20pF程度の物 | 100円程度 | |
R1~3, R6, R12, R13 | 6 | カーボン抵抗 | 1kΩ±5%、1/4W | 1/8Wでも可 | 10円程度 | |
R4, R5, R9, R10 | 4 | 金属皮膜抵抗 | 22kΩ±1%、1/4W | 1/8Wでも可 | 20円程度 | |
R7, R16, R17 | 3 | カーボン抵抗 | 10kΩ±5%、1/4W | 1/8Wでも可 | 10円程度 | |
R8, R14, R15 | 3 | カーボン抵抗 | 240Ω±5%、1/4W | 1/8Wでも可 | 10円程度 | |
R11 | 1 | カーボン抵抗 | 1MΩ±5%、1/4W | 1/8Wでも可 | 10円程度 | |
C1~3, C9, C10 | 5 | アルミ電解コンデンサ | 10μF、50V | 10円程度 | ||
C4, C6, C8 | 3 | 積層セラミックコンデンサ | 0.1μF、50V | 20円程度 | ||
C5, C7 | 2 | セラミックコンデンサ | 22pF、50V | 10円程度 | ||
D1~7 | 7 | ダイオード | 1SS133 | ローム | 1S2076でも可 | 30円程度 |
CN1 | 1 | ステレオミニジャック | AJ-1780 | 秋月電子で販売 | 50円 | |
CN2 | 1 | ピンヘッダ | L型、6ピン、2.54mmピッチ | 10円程度 | ||
CN3 | 1 | DCジャック | 2DC0005D100 | 内径2.1mm、外形5.5mm | 30円程度 | |
CN4 | 1 | ピンソケット | 16ピン、2.54mmピッチ | 42ピンのピンソケットを切断して使用 | 80円程度 | |
SW1 | 1 | タクトスイッチ | これやこれなど、使いやすい物 | 20円程度 | ||
VR1 | 1 | 半固定抵抗 | 20kΩ | 20円程度 | ||
LED1 | 1 | LED | 直径3mmの物なら、たいていOK | 20円程度 | ||
1 | LCDモジュール | S12232ZA | スイッチサイエンスで販売 | 432円 | ||
1 | ピンヘッダ | 16ピン、2.54mmピッチ | 40ピンのピンヘッダを切断して使用 | 40円程度 |
商品名 | S12232ZA | |
税抜き小売価格 | 400円 | |
販売店 | スイッチサイエンス | |
サポートページ | S12232ZAサポートページ |
商品名 | Arduino Uno用ブートローダスケッチライタシールドキット | |
税抜き小売価格 | 1440円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino Uno用ブートローダライタシールドキットサポートページ |
商品名 | Arduino用ブートローダ/スケッチライタキット | |
税抜き小売価格 | 3000円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino用ブートローダ/スケッチライタキットサポートページ |
LCDモジュールと16ピンのピンヘッダ以外の部品は、ユニバーサル基板にすずメッキ線やポリウレタン線を使って半田付けしていきます。DCジャックやステレオミニジャックはユニバーサル基板の穴に挿入できませんが、ピンバイスを使って穴を広げ、挿入しました。この場合、半田で部品を固定できませんが、合成ゴム系接着剤で、部品と基板を貼り付けました。
私は95mm×72mmの片面紙フェノールユニバーサル基板を使いましたが、回路を小さく組む自信がない場合は、もう少し大きいユニバーサル基板を使う方が無難でしょう。穴あけ加工などをする場合は、硬くて加工のしにくいガラスエポキシ基板は避けるほうが賢明です。
半田付けの完成した基板の写真を次に示します。
マイコン(ATmega328P-PU)は、直接基板に半田付けしてもいいのですが、プログラム(スケッチ)の書き込みに失敗した時の事を考えて、ICソケットを使って基板に固定する方が無難です。(通常は、スケッチは何回でも書き直せるが、条件によっては書き直しが利かなくなる事が稀にある)
LCDモジュール(S12232ZA)は、16ピンのピンヘッダを半田付けし、CN4に差し込みます。ピンヘッダを半田付けする際、S12232ZAの1~16番ピンに半田付けし、17~18番ピンは空きピンにしてください。
M2の11mm両メスネジスペーサを2個使ってLCDモジュールを基板に固定しましたが、これはなかなか手に入りにくい部品です。少し不安定になりますが、なくても使えない事はありません。
下の写真左側の金色の部品が、M2の11mm両メスネジスペーサです。このスペーサは、中国の業者から個人輸入したものです。このスペーサを手に入れるまでは、LCDモジュールの固定には写真右側の白いM3用11mm貫通スペーサに、M2のネジを通して使っていました。
基板にLCDモジュールを固定して組みあがった状態の写真を、次に示します。
回路が組みあがったら、まずLEDの制御ができるか確認してみます。LEDを点滅させるスケッチを書き込んでみて、正常に点滅したら、少なくともマイコンは正常に動いています。(俗に言うLチカ)
LEDはArduino Uno互換機の13番ポートについているので、Arduino IDEについてくるBlinkというサンプルスケッチで点滅できます。下の画面のように、Blinkを呼び出します。
次に、FTDI Basic Breakoutなどの、USB-シリアル変換基板を介して、レベルメータ基板をパソコンのUSB端子に接続します。FTDI Basic Breakoutには、I/O電圧が5Vの物と3.3Vの物がありますが、5Vの物が必要です。また、USB-シリアル変換基板を使っている時は、レベルメータ基板のDCジャックには、ACアダプタを付けないでください。
Arduino IDEで、マイコンボードをArduino Uno、シリアルポートをUSB-シリアル変換基板に対応したポート番号に設定した上でBlinkスケッチを書き込むと、レベルメータ基板のLEDが点滅を始めるはずです。
もしうまくLEDが点滅しない場合は、マイコンを動作させる回路の配線(電源線、クロック信号の配線など)が正しく行われていない可能性があります。
前のページで紹介したブレッドボード版レベルメータのスケッチが、ユニバーサル基板版でもそのまま動作するのですが、今回作った基板にはタクトスイッチを付けたので、これを使って、4種類のレベルメータを切り替えられるようにしました。下記リンクから、スケッチがダウンロードできます。
2017年1月23日追記:以前公開していたスケッチは、Arduino IDE 1.0.Xでしかコンパイルできませんでした。Arduino IDE 1.6.0以降をお使いの方は、お手数ですが、スケッチをダウンロードしなおしてください。また、このスケッチを利用するには、MGLCDライブラリVer. 0.40以降が必要です。
ダウンロードしたZIPファイルを解凍すると、S12232ZA_LEVEL_METER5というフォルダができます。その中のS12232ZA_LEVEL_METER5.inoというスケッチを、先ほどのBlinkと同じ要領でレベルメータ基板に書き込んでください。
USB-シリアル基板を抜いてからDCジャックにACアダプタを接続してください。内径2.1mmのプラグの付いた、5V、センタープラスのACアダプタが適合します。スイッチング型ACアダプタか、安定化ACアダプタをお使いください。電圧を安定化していないACアダプタを使うと、回路に過電圧がかかり、故障の原因になります。またArduinoに使うACアダプタは、7V以上のACアダプタなので、使えません。
5VのACアダプタがない方は、USB-シリアル変換基板から5Vを供給しても、とりあえず使えます。
レベルメータが起動して、ステレオミニジャックに音楽プレーヤからの信号を入力すると、下記の動画のようにレベルメータが表示されます。タクトスイッチを押すと、レベルメータの種類が切り替わります。なお、最後に使ったレベルメータの種類はEEPROMに保存されるため、次回起動時には、最後に使った種類のレベルメータが表示されます。
なお、波形表示のあるレベルメータと、ミクのレベルメータでは、感度の調整が行えます。
波形表示のあるレベルメータの処理は、関数LevelMeter1で行っています。この関数の中に
const int divisor = 8;
と、int型の定数divisorを宣言している行があります。レベルメータの感度が低すぎて振れが悪い時は、divisorの数を小さくしてください。逆に感度が高すぎて振り切れる時は、divisorの数を大きくしてください。
ミクのレベルメータの処理は、関数LevelMeter4で行っています。この関数の中に
const int divisor = 4;
と、int型の定数divisorを宣言している行があります。レベルメータの感度が低すぎて振れが悪い時は、divisorの数を小さくしてください。逆に感度が高すぎて振り切れる時は、divisorの数を大きくしてください。
次のページでは、グラフィックLCDシールドを使ったレベルメータを作ります。
商品名 | LCDレベルメータ | |
税抜き小売価格 | 3500円 | |
販売店 | スイッチサイエンス | |
サポートページ | LCDレベルメータサポートページ |
商品名 | S12232ZA | |
税抜き小売価格 | 400円 | |
販売店 | スイッチサイエンス | |
サポートページ | S12232ZAサポートページ |
商品名 | 122X32モノクログラフィックLCDシールド | |
税抜き小売価格 | 3333円 | |
販売店 | スイッチサイエンス | |
サポートページ | 122X32モノクログラフィックLCDシールドサポートページ |
商品名 | Arduino Uno用ブートローダスケッチライタシールドキット | |
税抜き小売価格 | 1440円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino Uno用ブートローダライタシールドキットサポートページ |
商品名 | Arduino用ブートローダ/スケッチライタキット | |
税抜き小売価格 | 3000円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino用ブートローダ/スケッチライタキットサポートページ |