2017-01-27 5 views
0

二つの質問は:マイクロコントローラベースの日の出/設定アルゴリズム実装

は、私は、マイクロコントローラ上の入力として緯度、経度、日付で、日の出と日没の時間を決定するためのアルゴリズムを実装しようとしています。私はこれを行うためのアルゴリズムがあることを知っていますが、私はこれをマイクロコントローラ上に置く方法の詳細を見つけることができませんでした。これは可能ですか?

2番目に、これを実装する場合、およそのメモリと使用するコントローラの種類はどれくらいありますか?

お知らせください。

+0

はい、可能です。しかし、2番目の質問に対する答えに絞り込む前に、より多くの入力を検討する必要があります。たとえば、計算がどれくらい正確になる必要がありますか?どのくらいの頻度で計算を実行する必要がありますか?どのように地理位置がマイクロコントローラに提供されるのですか?日の出/日没時間はどのようにユーザーに提供されますか?これは安全上重要なシステムの一部ですか、それともホビープロジェクトですか? – kkrambo

+0

+/- 15分の許容誤差で問題ありません。計算は毎日1回実行する必要があります。その考えは、日の出と日没時に出力をトリガーすることです。ジオロケーションは、(タッチスクリーンまたはスマートフォンのいずれかを介して)ユーザによって入力として提供される。趣味ではなく、安全上重要なシステムでもありません。アイデアを考えるだけです。 – genesis

+0

私は、インターフェイス要件が日の出/日の入りの要件よりも重要であると考えています。私が意味するところは、マイクロコントローラがスマートフォンと通信するためにタッチスクリーンまたはブルートゥースラジオを管理できれば、おそらくアルゴリズムを処理できるということです。考慮すべきもう一つのことはあなたの電力予算です。デバイスのバッテリは動作していますか? – kkrambo

答えて

0

よくMCUにありますが、FPUが常に存在するとは限りませんので、あなた自身で多くのことを行う必要があります。これを計算する方法はいくつかあります。

  1. 日の出カレンダー

    これは最も単純であるが、カレンダデータを格納するために必要とする(プログラムメモリとすることができるので、RAMの必要がありません)。このアプローチは単一の地理的位置に限られているので、場所が経時的に変化する場合は使用できません。詳細情報については以下を参照してください

  2. ケプラーの方程式

    右のコード化されたとき、これは、(例えば、1000年)多くの時間のために動作します。しかし、このアプローチはFPU計算を必要とする。存在しない場合は、自分でコード化する必要があります(double,sin,cos,+,-,*,/

    ケプラーの方程式は、偏心座標系の実際の地球と太陽の相対的な位置を示します。地球の毎日の回転と地方のNEH(北東の高さ/高さ)変換を追加すると、任意の地理的位置と時間に対して緯度座標で太陽の位置を取得します。それは単に日の出/日の出の幾何学的限界に対する仰角の確認の問題です。詳細情報については以下を参照してください

    は、このアプローチは、実際の座標を格納するRAM必要があります(3X位置+ 1つの一時あたりダブル)、3回変換2倍の4x4変換行列(地球、NEH、温度)と少数の反復変数。私は512バイトで十分だろうと推測しています。

  3. 直接式は

    あなたは、このためのgoogleする必要があります。任意の地理位置について太陽の方位角の連鎖を直接与える近似式があります。 #2より少しシンプルですが、より多くの高度なゴニオメトリック関数、例えば、arctan,acosなどが必要です。あなたがFPUをサポートしていない場合、このアプローチは、望ましい精度で実装するのが難しいかもしれません。

[注]

あなたが視覚的に幾何学的な太陽の位置を変換する必要があり、精度を向上させるために。どのくらいの仰角をシフトするテーブルがあります...

+0

(1);カレンダーデータでは、特定の場所の日の出と日没時間を意味しますか? 1年間、このデータセットはコンピュータ上で約4KBになります。 – genesis

+0

@genesisあなたはRAMの代わりにプログラムメモリにテーブルを格納することができます最近のMCUは通常 '256,512,1024 KB' FLASHを持っていますので、格納するのに問題はありません...多項式またはBEZIERの立方体で近似することもできます2次元の点はほんのわずかです... FPUを持っていない場合のために整数演算にも行うことができます。[多点の線形補間はどうすればできますか?](http://stackoverflow.com/a/30438865/2521214) – Spektre

関連する問題