google-site-verification: google3bd66dd162ef54c7.html

ソーラータイマースイッチの製作 ソフトほぼ完成

 この間からArduinoで動かすソーラータイマースイッチを作っているのですが、そのソフトがほぼ完成しました。

 とは言ってもまずは回路図から、

▼回路図
ソーラータイムスイッチ回路図

 前回の記事とほとんど同じですが、スイッチが一つ増えています。このプログラムは沢山のパラメーターの設定が必要になるので、操作を効率的に行うために、Dec.(-)、Inc.(+)、Enterの3ボタン方式にしました。なお、以下の資料ではボタンを(Dec)、(Inc)、(Enter)と括弧付きで表現します。

  タイマーの出力の Timer Out にはインターフェイス回路の追加が必要ですが、それは相手が決まってから考えればいいので、今は状態表示用のLEDだけ接続しておきます。

▼実験用ボード
デバッグ中のソーラータイマースイッチ
 まだArduinu UNOとブレッドボードで動かしています。

◆機能
 ところで、ソーラータイムスイッチは計装機器として多くのメーカーから販売されています。調べてみると夜はON、朝になるとOFFになるのが基本動作になっていました。でも流石にこれだけでは単純すぎるのでしょう、どのメーカーも固定時間タイマーを組み合わせることが出来るようになっていました。以下は動作モードの説明図で、大崎電機の資料から抜粋したものですが、他メーカもほとんど同じす。

▼市販のソーラータイムスイッチの動作モード(大崎電機の資料から抜粋)
ソーラータイマースイッチの動作モード

 少し説明すると、日没/日の出時刻は設置場所や季節によって変わります。ソーラータイマーはそういう変化を反映した時刻で動作します。ただ設置環境によっては「朝明るくなるのが遅い」などの個別の違いがあります。そういう違いを補正するために、「早め」、「遅め」の調整が1分単位で出来るようになっています。

 固定タイマーは時計に連動したタイマーで、設定時刻にON/OFFの操作を行うものです。これは例えば、日没で自動的にONとした照明を夜明けまで点灯させ続けるのは無駄なので、24時になったら消す、という動作にしたい時に使います。他にもいろいろな理由が考えられると思いますが、ともかく固定ONとOFFのタイマーを各々、有効/無効に設定することで、上の表のような各種の動作パターンを選択出来るようになっています。

◆プログラム
 Arduinoで動かしますが、せっかくなので市販のソーラータイマーと同等の機能を実現することにとにしました。

 プログラムは700行以上あって長いので、下記リンクに置いておきます。なお、同じような機能の関数が複数あったりして汚いソースになっていますがご容赦を。
 ソーラータイムスイッチのプログラム_20170721SolarTimeSwich (Shift_JISでエンコードしています。拡張子をinoに要変更)
 プログラムはピン割り込みを使って省エネで動くようになっていますが、そのあたりの話は割愛し、この記事では操作方法につき説明することにします。

 操作は大きく以下の二つのグループに分かれています。
1.起動時のボタン操作による動作条件の設定
  (指定ボタンを押した状態でリセットボタンを押す。その状態で先にリセットボタンを離す)
2.動作中のボタン操作による状態表示

 以下、この順に機能を解説します。

1.起動時のボタン操作による設定

1-1  時計の時間合わせ (Dec)と(Inc)を押しながらリセット
▼開始メッセージ
時計合わせ開始
 時計合わせモードに入ったことを表示。ボタンを離すと次の画面へ進みます。

▼時計の時刻合わせ
時計合わせ中
 カーソルの位置の値をInc/Decボタンで設定し、Enterで確定します。確定するとカーソルは次の位置に移動。分の値を決定(Enterを押)したタイミングで、00秒として時刻合わせが行われます。なお、カーソルは逆方向へは動きません。間違いに気付いた時はリセットで最初から入力。

1-2 ソーラータイマーのオフセット設定 (Dec)を押しながらリセット
▼開始メッセージ
ソーラータイマー

▼オフセット値の設定(日没補正)
ソーラータイマー
 日没でONにする時刻の補正量を設定します。遅くしたい場合は+、早くしたい場合は-の合値を入れます。設定は分単位で行い、±99分まで設定可能です。

▼オフセット値の設定(日の出補正)
ソーラータイマー
 日の出でOFFにする時刻の補正。設定方法は上記と同じ。

1-3 固定タイマーの設定 (Inc)を押しながらリセット
▼開始メッセージ
Fixタイマー設定

▼固定OFFタイマーの設定画面
Fixタイマー 時刻設定
 USE/NO USEの選択と、動作時刻を設定します。この画面は、23時10分にOFFを設定しています。

 市販のソーラータイマースイッチは、固定時間タイマーは夜間(日没から日の出まで)しか設定出来ないようになっているようですが、このタイマーではそのような制限は無く、昼間の時刻も設定出来ます。

▼固定ONタイマーの設定画面
Fixタイマー
 この画面では、固定ONタイマーは不使用(NO USE)に設定しています。

1-4 経緯度の表示 (Enter)を押しながらリセット
▼経緯度の表示
経緯度表示
 設定されている経度、緯度を表示します。この座標を使って日の出、日の入り時刻を計算しています。この画面から抜けるにはリセットします。なお、座標の値の設定機能は無いので値を変更したい場合は再コンパイルが必要です。デフォルトの値は東京(日本地図原点)です。

2.動作中のボタン操作で表示
2-1 何も操作しない場合 ボタン操作無し
▼情報表示(ノーマル)
通常表示
 何もスイッチを操作しないとこの画面が表示されます。

 上段に現在の 月/日、時:分:秒を表示。下段にその日の日の出/日の入り時刻を表示します。右上の黒丸はタイマーがONの時に表示されます。

2-2 ソーラータイマーのオフセット表示 (Dec)を押す
▼ソーラータイマーの設定状態確認
ソーラータイマー
 右端にソーラータイマーが動作するオフセット値を±の値で表示します。なお、値は分単位。表示している時刻は当日の日の入り/日の出時刻です。操作を統一するため、ソーラータイマーの設定と状態確認は(Dec)を使うようにしています。

 ボタンを離すと通常表示に戻ります。なお、ボタン押しの検出は1秒間隔で行っているので、短時間押した場合は表示が変わらない場合があります。ボタンは少し長めに押す必要があります。以下同様です。

2-3 固定時間タイマーの表示 (Inc)を押す
▼固定時刻タイマーの設定状態確認
Fixタイマー
 Incボタンを押すと、固定時刻タイマーの設定状態を表示します。なお、操作を統一するため、固定タイマーの設定と状態確認は(Inc)を使うようにしています。

 この例では、23:00にタイマーをOFFし、ON時刻の指定が無いのでONはしません。日の出にソーラータイマーからOFF指示が出ますが、元々OFFだったので状態変化は無しという動作になります。

2-4 西暦の表示 (Enter)を押す
▼年表示の情報表示
通常表示
 左上の 月/日を表示していた位置に西暦を表示します。(2017/)

◆まとめ
 予想外に長いプログラムになってしまいましたが、たぶん市販されているソーラータイマースイッチと同等の機能を作り込むことが出来たと思います。そのまま使っていただいてもいいし、流用できる部分があれば、そこだけつまみ食いしていただいてもかまいません。

 市販のソーラータイマースイッチでは設置場所を、日本を10のブロックに分けて設定するようになっています。この方法は判り易いですが、同じブロック内でも日の出時刻は数分くらい違うので精度はあまり良くありません。
 このソーラータムスイッチは設置場所の経緯度をピンポイントで指定出来るので、市販の物より精度良く日の出日の入り時刻を予想出来ると思います。また、日本本土から遠く離れた島でも安心して使えるはずです。

 この先の予定としては、このソーラータイムスイッチを使って、夜になったらテレビボードのLEDダウンライトを点灯させる仕掛けを作ってみたいと思います。実は7年前に、暗くなるとLEDを点灯する回路(太陽電池の電圧検出方式)というのを作りましたが、この発展型ということになります。昔はトランジスタのシュミットトリガ回路がちゃんと動いただけで喜んでいたのですが、7年経つとマイコンが使えるようになりました。自分で言うのもなんですが、我ながら進歩したと思います。
関連記事

コメントの投稿

管理者にだけ表示を許可する

勉強になります

こんばんは。スケッチのアップありがとうございます。
本当にこんな高度なプログラムタイマーが出来てしまうんですね。
いろいろと参考になります。
特に時間を分単位に変えるところなど、私はそのままのhour・minでやってしまったので、後々にmin補正値部分がhour単位に繰り上がり繰り下がりで計算が面倒になってしまいました。
それと、日の出日の入り計算も1日1回で済んでいるところも流石ですね。見習わさせていただきます。
ラジオペンチさんのスケッチは初心者にも理解しやすくコメントしてくださっているので本当に助かります。
関数も簡単にコピペで流用できますし、ラジオペンチさんのHPが無かったら、私はarduino・電子工作は出来なかったと思います。改めて感謝いたします。

re:勉強になります

hiroさんおはようございます。

そうやってプログラムの中まで見て頂けると嬉しいです。

他人の作ったプログラムを読むのは、勉強になりますよね。
カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード