電波時計もどき?XBee を使って I2C コントロール

今回は、ちょっとした時計ガジェットを紹介したいと思います。

ただの時計なのですが、サーバーPC から XBee 経由で時刻情報(文字列)を1分ごとに受信して時刻を表示しています。

全ての回路はブレッドボード上に作成しています。左半分は XBee と ATmega328P のCPU ボードで Arduino と XBee シールドを組み合わせた様な回路です。右半分は、I2C でコントロールする 7セグメントLED ドライバを書き込んだ ATmega168 と 4連の7セグメントLED です。全体を3.3V で動作させていますので、青色LED のドライブにはちょっと無理がありますが…

一分毎に下記のスクリプトを DeviceServer で実行しています。XBee で送信するデータパケットに i2c の書き込みコマンドを格納してLED の表示データを更新しています。

file_id = "I2C_7SEG_TEST4"

--[[
*******************************************************************

I2C バスに接続した 7SEG8 デバイスに現在時刻を表示

*******************************************************************
]]

local xbee_device = "Device1";
local slave_addr = "32";

local now = os.date "*t";
local tmp = string.format("%2d%2.2d",now["hour"],now["min"]);

if not xbee_tdcp_safe_retry(xbee_device,"i2c_write," .. slave_addr .. ",11" .. list_to_hex(unpack(str_to_tbl(tmp)))) then error() end

この時計は時刻合わせが不要で、サーバーPCとの時間差が1 分以上にはなりませんので意外に実用的です。

XBee と XBee Explorer USB、ATmega CPU等 が手元にありましたら簡単に作成できます。7セグメントLED ドライバ(SB-7SEG8)と XBee コントロールのファームウエア(TDCP for ATmega328) はオールブルーシステムのホームページで公開していますので自由に書き込んで使用して下さい。DeviceServer を使用しななくても、直接 XBee の API パケットに i2c コントロール用のコマンド文字列を入れても動作しますので試してみて下さい。

以下に、動作中の動画を載せましたので参照してください。(音量注意) 撮影用に強制的に時刻を更新しましたので、ちょっと時刻間隔がずれています。秒毎の7セグメントLED のコロン点滅と、LED の電飾(ピカピカ光っている) はATmega328 側で動作している TDCP for ATmega328 ファームウエアの “pulse” コマンドを使用しています。

それではまた。