DS1307(リアルタイムクロックモジュール)のクラスを自作して、温度表示機能付きのデジタル時計を作った。 調べた感じすでにライブラリが存在するらしい。
GitHub - makerhero/DS1307: Biblioteca DS1307 - Arduino
このライブラリは使わずにライブラリを自作する。
自分でクラスを作れば、必要最低限の機能が実装できる。
それから最近C++を勉強したので自分でクラスを作ってみたいという理由。
とりあえず単体で(自作ライブラリなしで)動くスケッチを作った。
Arduino IDEでライブラリを自作するには?
参考:
Arduino IDEの使い方(ライブラリの自作編) - NOBのArduino日記!
Arduinoの自作ライブラリを作成するには? – StupidDog's blog
今回作るライブラリ名はDS1307Libとする。
このライブラリはGithubにアップロードした。
クラスをヘッダファイルに記述
場所は
~/Documents/Arduino/libraries/DS1307Lib
ファイル名は
DS1307Lib.h
メンバ関数の定義をソースファイルに記述
場所は
~/Documents/Arduino/libraries/DS1307Lib
新たに定義した型や関数をハイライトするためのファイルを用意
場所は
~/Documents/Arduino/libraries/DS1307Lib
ファイル名は
keywords.txt
ライブラリを利用する
自作したライブラリは、通常のライブラリと同じように、
#include <DS1307Lib>
で使えるようになる。なお、使用したOLEDはSSD1306
時刻と温度をOLEDに表示
DS1307のライブラリDS1307Lib.h
とADT7410のライブラリADT7410Lib.h
を自作して、SSD1306というOLEDディスプレイに表示するプログラムを作成した。あと、今更気づいたけどLCDは液晶のことでOLEDとは全然別物でした。修正が面倒なので放置...
左からDS1307,ADT7410,SSD1306
(I2Cアドレス0x68,0x48,0x3c)
詳細はそれぞれ別の記事にメモした。
画面構成はshowDataLCD()内を変更すれば変えられる。 デジタル時計っぽく表示してみた
すべてI2Cなので回路構成はシンプル…かと思いきやDS1307が5Vじゃないと駆動しないので3.3Vを電源に使うには昇圧回路 or I2Cバスレベル変換が必要らしい。
昇圧回路の場合は3.3Vだけで駆動する。I2Cバスレベル変換の場合、3.3Vと5Vの両方必要。
モジュール | 価格 |
---|---|
3.3Vマイコン | 1000 |
DS1307 | 560 |
ADT7140 | 600 |
5V昇圧コンバーター | 300 |
SSD1306 | 500 |
計 | 2960 |
3000円の時計は高いだろ…マイコンが高い
PICを使えば回路も小型化できて安くもなるだろうけど
Arduinoのライブラリが使えないと現状厳しそう(能力的に)
PICのお勉強をするべきなんでしょうか…