2014年6月8日日曜日

Arduino時計+温度計(RTC+7セグメントLED編)

■久しぶりのユニバーサルボード■

未だに中耳炎+喉頭炎+副鼻腔炎が治りません。発症して8日目、抗生物質を変えて2日目なのですが。

それはともかくとして、少し前にブレッドボード上で作った4桁赤色7セグメントデジタル時計を作りましたが、あれをプロトタイプとしてユニバーサルボード上に黄色で作りました。そのままでは芸がない(←それじゃプロトタイプの意味がないだろ)ので、LEDを黄色にして、安価かつDIPなRTCを使ってみました。DIP好きっす。

■部品集め■

ユニバーサルボードは秋月のArduino用ユニバーサル・プロトシールド基板200円を使います。最初からヘッダピンやリセットスイッチなどの乗ったプロトシールドも市販されていて、それはそれで便利なのですが、今回のように多めの部品を載せる用途には向いていません。うちにも1枚あるのですが、DIPパターンの部分がうまくLEDディスプレイと合わなくて良い位置に表示器を置けないので諦めました。また、最初からヘッダピンが着いているのはラクに見えるのですが、両端を塞いでいるのでハンダ付けの際にとても邪魔になります。何より高いしね。秋月で揃えたのは以下の部品(ほとんど部品沼にあった…新しく買ったのは黄色LEDだけ)


  • Arduino用ユニバーサル プロトシールド基板(P-07555)
  • ピンヘッダ 1×40 (40P)(C-00167)
  • ダイナミック接続4桁高輝度黄色7セグメントLED表示器(I-04422)
    アノードコモン アノード共通接続
  • I2C接続RTC(リアルタイムクロック)DS1307+(I-06949)
  • クリスタル(水晶発振子) 32.768kHz(P-04005)
  • ボタン電池基板取付用ホルダー CR2032用(小型タイプ)(P-00706)
  • 高精度IC温度センサ LM35DZ(I-00116)
  • 丸ピンICソケット (シングル40P)(P-01591)
  • タクトスイッチ(黄色)(P-03650)

()は同社通販コードです。同じ名前で似たようなものがたくさんありますので、お店で「これください」と言う時には通販コードで伝えるのが一番手っ取り早いです。この他に10kΩの半固定抵抗(時刻合わせに使う)、1/8w 220Ω抵抗7本、1μFの積層セラミックコンデンサ、配線用AWG30のテフロン線が必要です。

■まずレイアウト■



他の部品と当たらないか、表示は見やすいか、スイッチは押しやすいか、配線の取り回しはラクか…などを考えながらレイアウトを決めます。上記の写真は完成品と違いますが、それはハンダ付けする際に間違えたからですorz

昔は決めたレイアウトを記録するのが大変でしたが、今はスマフォで写真取っておけばいいだけなので簡単。折角簡単になったので裏も取っておきます。



■背の低い部品からハンダ付け■

これが基本なのですが、今回絶対に守らなければいけないのは、電池ホルダよりも先にヘッダピンをハンダ付けする、ということです。ホルダの陰に隠れてしまうので、忘れると大変なことになります。幸い、電池ホルダはRTCとGNDだけにつながるので、最後の方でも構いません。前述の通りヘッダピンは邪魔なので、最後から2番めにヘッダピン、最後に電池ホルダでいいでしょう。あと、RTCとLEDはソケットに取り付けます。今どきの半導体は直接ハンダ付けしても簡単には壊れないのですが、まぁ一応。

ICソケットやヘッダピンを取り付けるときには、まず端を1点だけハンダ付けして、ちゃんと水平・垂直になっているかを確かめてから残りをハンダ付けします。もちろん曲がっていてもあまり性能には影響ないのですが、カッコ悪いので。今回配線にはテフロン線を使いました。硬くて被覆を剝くのも取り回しするのも少し面倒なのですが、コテ先が接触しても被覆が溶けたり焦げたりしないので仕上がりがきれいです。

…なお、製作途中の写真撮っていませんでした。楽しくて、つい夢中になってしまって。ということで、配線面の写真と横から見た図。

青はセグメントで緑はカラム、黄色はLM35

左上のハンダ付けがちょっと荒れているのはLM35Dの信号がノイズまみれで温度表示がピコピコ変わるのでいろいろ試行錯誤した結果です。ソフトで移動平均とってもダメで最終的に1μFのコンデンサを打ち込むという乱暴技で解決しました。

たれ背負う
横から見るとLEDのピンが長いですね…貧乏性なので部品のピンを最後まで切れない。たかだか250円、牛丼よりも安い部品なのに。手前右側でそそり立っているのは水晶です。32.768hzの水晶なんて昔は何百円もしたのに30円だもんなぁ(以下昔話20行削除

■ソフトの修正■

赤色LED+ブレッドボードではRTCにRTC-8564NBというモジュールを使っていました(これも秋月)。今回は別のチップなので、I2Cまわりの処理を変更します。I2Cの基本的な処理とはあまり変わりありません。

もう一つ、赤色LEDはカソードコモンでしたが今度はアノードコモンを使いました(買ってくるときに間違えた)。ので、LOWとHIGHを入れ替えてやります。

で、点灯したら…とてつもなく眩しい時計になってしまいました。

これは温度表示。暑いな。
黄色LEDは赤色LEDよりも発光効率が高いのです(それゆえ、高効率かつ安価な照明用白色LEDは黄色+青色だけで出来ていたりして色がヘンなのですが)。同じ抵抗・同じ電流だととても眩しくなります。今から7本の抵抗を変更するのも面倒だなので、単純に各カラムをon/offしている時間の比率を変えて調整しました。抵抗220Ωで各セグメントをドライブし、昼間はon:0ff=1:10、夜はon:off=1:100にして、いい感じの明るさになりました。電流はセグメントあたり (Vcc-Vf) / 220 = 13mA、ダイナミック駆動なので夜の場合実際に発光している時間は1/700ってことになりますが、それでも結構明るいから恐ろしいです。

実用品を作るのは楽しい。

■追記■

当初1日1分以上誤差があって「やっぱ1本30円の水晶は無調整だとあかんかw」って諦めていたのですが、その後日差1秒ぐらいまで安定してきました。このところ気温が低いせいもあるかもしれませんが、やっぱ水晶発信器ってエージングが必要なんですね。

0 件のコメント:

コメントを投稿