LM358 全波整流(絶対値)回路の事前確認

20130108175400

先日、Arduino のボードから IN-9 のバーグラフネオン管を点灯させました。マイコンには A/D 変換機能が付いているのでそれに信号入れられるよう、オペアンプの整流回路を LTspice で事前確認。入力に 1Vpp の AC 入力を入れて整流とバッファ兼増幅です。LM358 のモデルを使用し、単電源で回路を動かしてみました。なお LM358 の理由はたまたま手元にあったからです。

結果的には、ちゃんと整流出来ていますね。出力にコンデンサ入れて少し平滑してマイコンの A/D 端子に入れたら以外と使えそうです。

マイコンを使ったアプリケーションは

  • USB 接続して、PC の負荷などを表示する(PC側ホストアプリも必要)
  • A/D 変換して VU メーター表示(A/Dは100usで変換出来るのでいけそう)
  • 表示はリニアなので、例えば時分秒の各桁を伸び縮みで表現する変な時計
  • インテリア的に、ランダムな光を出す

なんかが簡単に思いつくとこでわな。マイコン入ると楽になるかな。

IN-9 バーグラフネオン管点灯テストを Arduino UNO PWM出力でちょっと確認してみた

とりあえず、動作確認を手っ取り早くするために、Arduino UNO R3 を使いまして点灯試験。

  • PWM 出力を 0~255 まで上げていき、IN-9 の表示を伸ばす
  • 逆に255~0 へ下げて縮める
  • PWM 出力を 0~255 のランダム値に設定して急な変化を表示させる

というのを実施しましたが、ランダムパターンで表示が根本から出ないですね。リニアに変化させる分には速度上げても問題ないでしょうと思いますがね。放電用の抵抗付けて経過見てみる感じかなぁ。また、PWM 出力の積分回路も手持ちの 10μ 使ってて大きいので 1μ くらいの適当なのを買ったらもう一回やってみる感じかな。

こういう時に Arduino は便利やね。USB 差して 5分もあれば動作確認出来る。ありがたい

多機能タイマ製作7


今日は、ヴァイオリンのレッスンが無いのとその他外出を入れていないので、タイマーのほうをやってしまうことにしました。なので、JWCAD を起動しまして、現物合せの位置決めの結果を図面に入れます。ついでに印刷用に不要部分をばっさり削除して上面・裏面・背面の部分だけ印刷出来るように準備です。まずは普通に紙へ印字し大きさの確認。

次は、図面を透明シートに印刷してアルミケースに貼り付け。

あとは、電動ドリルとハンドニブラとヤスリで加工を続行。

で、無事完成です。

あとは、デジカメ接続してシャッターがきれるか動作確認。結果組み込み時に断線などは発生しなかたので問題なく動作。よかった。ボタンやケースのレタリングは透明シートがあまっているのでプリンタで印刷して貼ればいいのですが、手持ちの透明シートは粘着弱いタイプなのであらためて実施かな。でも本人わかってるからねぇ。

多機能タイマ製作6

穴開けの位置決めガイドの準備作業で JWCAD へ図形登録実施。このとき、大きさ測るついでに高さが大丈夫かも現物合せでチャッチャと確認。微妙な場所はありますが入りますな。

ということで JWCAD にポチポチと図形登録実施。上は図形呼び出しが出来るのを確認したところ。あとはタカチのケースに上の図形はめこんで、ラベルシートに印刷して穴開けのガイドにする予定です。ボール盤無いので地道に穴開けしないといけないのが面倒です。四角いところはハンドニブラーとやすりでなんとかなるかなぁ。というかなって欲しいというのが正直なところ。ハンドニブラーの刃大丈夫だっけ。

多機能タイマ製作5

前回の多機能タイマ4で、Youtube にも動作例をアップロードしました。時間パラメタなどを設定する画面で画面を一旦クリアして一画面丸ごと再描画していましたが、シリアル I/F で VFD モジュールを動かしているためにあきらかに動作が遅いのです。

  012345678901234567890
 +---------------------+
0|                     |
1|  YY __  hh __       |
2|  MM __  mm __       |
3|  DD __  ss __       |
4|  DAY ___            |
5|  ENT=Write RTC      |
6|                     |
7|YY/MM/DD hh:mm:ss XXX|
 +---------------------+

上の画面例で言うと、1 行目の YY の設定をしているときは 1 行目だけ再描画すれば良いので、画面表示するコードに何行目を再描画すれば良いかの判定を追加。これで、目障りな画面のチカチカは減りました。ソフトのほうは、コンパイル後のスケッチのサイズ:13,832バイト(最大容量32,256バイト)なのでまだまだ余裕ありますが、一旦フリーズして。今後は苦手なケース加工へ移行していきたいと思っています。基本的に夜間、屋外で使用するので透明プラケースは避けようかとは思いますが、どうなることやら。

多機能タイマ製作4

タイマの基本部分は以下の画面でなんとかする。ということで仕様はほぼ決定。コード書いていきます。

●ランニング画面(screenID=0)

  012345678901234567890
 +---------------------+
0|Interval Timer       |
1|Del 99'99 Num 9999   |
2|Int 99'99 Exp 99'99" |
3|                     |
4|Ramen Timer          |
5|A 99'99"  B 99'99"   |
6|                     |
7|YY/MM/DD hh:mm:ss XXX|
 +---------------------+

0~6行は、実行中のステータス表示に使用する。

  ESC: メニュー画面
  ENT:時分をしゃべる

  チャイム音のあとに、hh時mm分です
  <NUMK VAL=hh COUNTER=ji>/<NUMK VAL=mm COUNTER=funn>de_su.

ラーメンタイマーは、満了時刻30秒前に

タイマーA あと30秒です
ta'ima-/e'i a'to/<NUMK VAL=30 COUNTER=byo->de'_su. 

タイマーB あと30秒です
ta'ima-/bi'- a'to/<NUMK VAL=30 COUNTER=byo->de'_su.

と事前通知を行ない、時間満了でチャイム2回鳴らす。



●メニュー画面-選択画面(screenID=1)

  012345678901234567890
 +---------------------+
0|Set DATE & TIME      |
1|Interval Timer       |
2|Ramen Timer          |
3|                     |
4|                     |
5|                     |
6|                     |
7|YY/MM/DD hh:mm:ss XXX|
 +---------------------+

  ESC: ランニング画面に戻る
  ENT: 選択されたメニューを表示
  カーソル上下: メニュー選択

●メニュー画面-Realtime Clock(screenID=2)

Set DATE & TIME選択時の画面

  012345678901234567890
 +---------------------+
0|                     |
1|  YY __  hh __       |
2|  MM __  mm __       |
3|  DD __  ss __       |
4|  DAY ___            |
5|  ENT=Write RTC      |
6|                     |
7|YY/MM/DD hh:mm:ss XXX|
 +---------------------+

  ESC: ランニング画面に戻る
  ENT: RTC に最新時刻書き込む。ランニング画面に戻る
  カーソル上下: 値上下
  カーソル左右: 項目移動


●インターバルタイマ設定画面(screenID=3)

  012345678901234567890
 +---------------------+
0|Interval Timer       |
1|  Delay    99'99     |
2|  Interval 99'99     |
3|  Exposure 99'99     |
4|  Num Shot  9999     |
5|  ENT=Start ESC=Back |
6|                     |
7|YY/MM/DD hh:mm:ss XXX|
 +---------------------+

  ESC: ランニング画面に戻る
  ENT: インターバルタイマ開始し、ランニング画面に戻る

●ラーメンタイマ設定画面(screenID=4)

  012345678901234567890
 +---------------------+
0|Ramen Timer          |
1|                     |
2|  Timer A  99'99     |
3|  Timer B  99'99     |
4|  Enable   A X B X   |
5|  ENT=Start ESC=Back |
6|                     |
7|YY/MM/DD hh:mm:ss XXX|
 +---------------------+

  ESC: ランニング画面に戻る
  ENT: ラーメンタイマ開始し、ランニング画面に戻る


動作の様子は以下の youtube に上げた動画のとおりです。

  • インターバルタイマ機能
  • ラーメンタイマ機能
  • 時間をしゃべらせる

などです。

現状は、画面に出すのを最優先でコーディングしましたので、vfd の描画を一々消してから再描画などやってまして、画面がチカチカします。今後は、再描画の範囲を減らして操作しやすいようにしていきましょう。

多機能タイマ製作 その3くらい

本日も少しコーディング。超基本部分になる時刻の表示と設定です。といってもこの多機能タイマの機能のうちインターバルタイマーやラーメンタイマーにはこの時計を使用する予定はありません。現在は単に現在時刻表示(画面並びに音声)するためだけの用途で実装しています。

検討中ですが、下記画面イメージで検討

□ランニング画面(screenID=0)

  012345678901234567890
 +---------------------+
0|                     |
1|                     |
2|                     |
3|                     |
4|                     |
5|                     |
6|                     |
7|YY/MM/DD hh:mm:ss XXX|  最下行は常に時計表示
 +---------------------+

  0~6行は、実行中機能のステータス表示に使用する。

タイマー全部動かしたら下のような感じかな。検討中
  012345678901234567890
 +---------------------+
0|Interval Timer       |
1|Del 99'99 Num 999  * |
2|Int 99'99 Exp 99'99" |
3|                     |
4|Ramen Timer          |
5|A 99'99"  B 99'99"   |
6|                     |
7|YY/MM/DD hh:mm:ss XXX|  最下行は常に時計表示
 +---------------------+



□メニュー画面(screenID=1)

  012345678901234567890
 +---------------------+
0|Set DATE & TIME      |
1|Interval Timer       |
2|Ramen Timer          |
3|                     |
4|                     |
5|                     |
6|                     |
7|YY/MM/DD hh:mm:ss XXX|
 +---------------------+

  ESC: ランニング画面に戻る
  ENT: 選択されたメニューを表示
  カーソル上下: メニュー選択

□メニュー画面-Realtime Clock時刻設定」(screenID=2)

Set DATE & TIME選択時の画面

  012345678901234567890
 +---------------------+
0|                     |
1|  YY __  hh __       |
2|  MM __  mm __       |
3|  DD __  ss __       |
4|  DAY ___            |
5|  ENT=Write RTC      |
6|                     |
7|YY/MM/DD hh:mm:ss XXX|
 +---------------------+

  ESC: メニュー画面に戻る
  ENT: RTC に最新時刻書き込む。ランニング画面に戻る
  カーソル上下: 値上下
  カーソル左右: 項目移動

そして、それに則ってコーディングして動作確認中。リアルタイムクロックそのものは特に問題無いでしょう。ということろ。


多機能タイマの基本部分ができたので、これからはコーディング中心に

時計表示の基本部分が出来たので今後はマイコンではやりたくないユーザーインタフェースの設計です。今は RTC の時間を一定時間毎に VFD に表示するというところが出来ています。RTC には BCD で時間や日付が格納されていて、最初は

return(bcd - (6 * (bcd >> 4)));

のような形で BCD を BIN に変換して変数に格納していましたが、表示のところでなぜかその変数から読み出しても空っぽ。コンパイラの最適化の影響だとは思われますが個人的には変数に volatile を書くと負けと思っているので、そのまま BCD 値のまま扱うことにしました。(どうせ RTC は時計だけなので軽いのです)。

ということで、目先は

  • ケース組み込みに向けて部品の採寸
  • ラーメンタイマの仕様検討(時間間際にしゃべってお知らせ)
  • デジタル一眼用インターバルタイマの仕様検討
  • RTC の時間再設定画面の検討
  • 上記3項目の画面遷移をどうするか検討

というところでしょうかね。真っ先にライブラリ化したいのは、ボタン押されて、時刻やタイマ値の増減とそれの表示を連動させるところなどです。

Arduino のソースも、メインと、AquesTalk pico のクラスと、DS1307 RTC のクラス、Noritake VFD モジュールのクラスと増えてきましたね。今のところコンパイルして 7kB 程度なのでまだいけます。

多機能タイマの構成を少しいじっています。

先日の動作確認で AquesTalk pico を 5V 動作させてもあまり気にならない声だったのでシールドの電源を 5V 統一します。これに伴ない以下の変更を実施

  • AquesTalk pico は 5V 動作に変更。
  • 3.3V の電源ライン廃止
  • I2C レベルシフタ撤去
  • CDS は夜間使用がほぼ固定されるので廃止
  • デジタル一眼用のリモートコード対応

という変更をかけまして基板上の部品も少し変わりました。TLP521 も載せてカメラのリモートコード用軍端も接続。半押しと全押し両方信号出さないとシャッター切れなかったため、都合3本です。

多機能タイマ製作

AquesTalkPico ATP3011F1, Noritake VFD モジュール、リアルタイムクロックで作りかけの多機能タイマもどきのビルディング中。これは写真撮影、天体観望などお外で使いたいと思っているものです。

基本的なモード

  • 現在時刻の表示
  • ボタン押したら時刻をしゃべる(まだボタンは未配線)

追加要素

  • ラーメンタイマ(時間間際にしゃべって知らせる)
  • デジタル一眼用インターバルタイマ(まだ未配線)

Arduino のスケッチで I2C 接続している RTC と AquesTalk Pico, シリアル接続の VFD モジュールの接続確認出来た状態でコンパイル後 5KB くらい。マイコンは32kB なので入って欲しいなぁと思いつつ。割り込み使う方法か、メインループでベタに時間見ながら処理するかが実は決まっていないというひどい状態。ここらへんはトライ アンド トライ でいきましょう。