Arduinoセンサーデータが不安定

私は足をEEで濡らしているだけなので、安心してください。私はArduino Unoを購入し、ここ数週間でトンを学んでいます。 LM35センサー、一般的なサーミスタ(10kΩの抵抗を使用)、光依存抵抗(フォトレジスタ?)(10kの抵抗を使用)、ボタン(Arduinoの内部プルアップ抵抗を使用)、そして2個のLED(220Ωの抵抗付き)そして、それらすべてを私のUnoに配線しました。図を提供することはできますが、それが重要であるとは思わない。基本的に、同じ地面を共有している人もいれば、同じ5vを共有している人もいます。

LM35とサーミスタからの温度データが非常に不安定であることに気付きました。ボタンを押すと、それだけで変化します。これらのタイプのセンサーは正確であるために電圧調整器を必要とすると多くのフォーラム投稿を読んだので、ここに私の質問があります。それは私のArduinoからの供給が十分に一定ではないためです垂れ下がっているのか、それとも急上昇しているのか?

もしそうなら(あるいはそうでなければ)、この問題の解決策は何ですか?私はそれらの小さな5Vブレッドボード電源の1つを買うべきですか?

Update: Ok, here's a diagram. It's a proud day for me, this is my first circuit schematic ever! enter image description here

And here's a graph of the LM35 readings. It's only read once every 9 seconds. It's just sitting on my office desk, no furnace vent nearby or anything. Now, the graph is not raw analog readings, but rather F temperature. But the raw analog readings are all over the map, including 116, 107, 90, 145, 129, etc. Don't get distracted by the analog->temperature math, I don't care about the accuracy, I just want it to be stable! enter image description here

Update 2: The photoresistor and the thermistor are reading very consistent, only the LM35 is all over the map.

0
nl ru de
私の勧めはそれ自身の回路であなたのセンサーのそれぞれを単独でテストすることでしょう
追加された 著者 wannabecapablanca,
あなたは図を提供するべきです - それは重要です。電源とアースへのすべての接続、およびArduinoへのすべての接続を含めます。あなたの質問はこれがなければあまり答えられません(そしてそれ故に移行の候補者ではありません!!)。あなたもあなたのコードを提供するかもしれません。
追加された 著者 wannabecapablanca,
@ScottSeidmanさて、Visioで1つ上げました。更新しました。私はそのコードが適切であるとは思わない。基本的には9秒に1回各センサーを読み取るだけです。
追加された 著者 Arno van der Weijden,

4 答え

ノイズが相関しているかランダムであるかを判断します。

大量のデータをキャプチャしてプロットすると役立ちます。ノイズの周波数と種類は非常に重要です。 「ランダムな」ノイズがある場合は、ADCを十分な速度でサンプリングしている限り、ソフトウェアで簡単に除外できます。ノイズに相関関係がある場合、これは基本的にノイズが測定しようとしている信号とともに変化することを意味します。

そこで、元の質問に答えるために、ノイズが電源変動によるものかどうかを判断するために、Arduinoの別のADCピンを電源に(抵抗分割器を介して)接続し、センサーと同時にサンプリングします。両方のデータをプロットすると、ノイズが相関しているかどうかが非常に明確になります。

それらが相関している場合、1つの選択肢は供給ADCを設計内に保ち、それをセンサーの読みから差し引いて準差動読みを与えることです。

それらが相関していない場合、ノイズはおそらく他のものから来ています。その場合、

  • センサーに接続されているワイヤの長さはどれくらいですか。
  • リモートセンサーにフィルタキャップはありますか?

また、これはソフトウェアフィルターをすばやく設計するためによく使用する優れたツールです。 .com/それはあなたのためのソースコードを生成します。 (Arduinoでは、数値フォーマットを必ず整数に設定してください。)

1
追加された
Definitelly FFTはarduinoに最適であり、これは単純な作業以上のものです。 Arduinoはその計算能力で知られています。
追加された 著者 Chuck Mattern,

正直に言うと、LM35がどれほど正確であるかを思い出すことはできません。

しかし、(特に「不安定な」センサーで)使用される非常によく知られたアルゴリズムは、最後のx個の測定値の「移動平均」を使用することです。これは最後のx値の平均をとることを意味します。新しいセンサー値を取得した場合は、最後のx個の値の平均をもう一度取ります(これが「動いている」部分です)。

これにより、時間が経つにつれて温度がずっと滑らかになります。あなたがどんなxであるかはあなた自身を定義することができます。大きいxの場合、最初のx個の測定値が必要なので、少し「遅延」が生じます。しかし私が5から10の間のxを取るとあなたは多くの改善を見るでしょう。

もう一つの追加は、あなたが真実であることができないと知っている値を削除することです(非常に低いか高いスパイク)。

スパイク値を考慮に入れず、最後のx個の測定値の平均を取ると、はるかに良い値になります。

There seems to be even an Arduino library for it (it's calling running average), see here.

0
追加された
毎回最後の10個の値の平均を考えてみてください。最初の2/3は合理的な滑らかな流れを持ち、最後の1/3はより低い値を持ちますが、多少温度がリアルタイムで変化する可能性があります。
追加された 著者 Spike,
あなたの提案をありがとう。私のデータはとてもクレイジーなので、データがあまりにも散らばっているので、データを平均化することが有益であるとは確信できません。私はもう少し詳細とグラフで私の記事を更新しました。
追加された 著者 Arno van der Weijden,

平均よりもはるかに優れたIMOは、非常に単純なデジタルローパスフィルタです。

LPF_DEPTH_SHIFT as large as slower reaction to the changes (lower filter "frequency"). Remember that LPF_data has to accommodate (max value) << LPF_DEPTH_SHIFT. You need to choose the proper type.

#define LPF_DEPTH_SHIFT   3

unsigned int LPF_data = UINT_MAX;

unsigned int lowpassfilter(unsigned int value)
{
    unsigned int v = LPF_data >> LPF_DEPTH_SHIFT;
    if(LPF_data == UINT_MAX)
        LPF_data = value << LPF_DEPTH_SHIFT;
    LPF_data -= v;
    LPF_data += value;
    return LPF_data >> LPF_DEPTH_SHIFT;
}
0
追加された
私は私が間違っていたとすでに言った。
追加された 著者 wannabecapablanca,
これはほとんどがローパスフィルタと呼ぶものではありません。
追加された 著者 wannabecapablanca,
具体的には、IIRフィルタがあります。
追加された 著者 wannabecapablanca,
...そして移動平均はLPFでもボックスカーです。
追加された 著者 wannabecapablanca,
これはLPFですが、確かにLM35の問題については説明していません。
追加された 著者 wannabecapablanca,
@ScottSeidman - あなたは間違っていると認めることはできません。ばかげている。
追加された 著者 Chuck Mattern,
@ScottSeidman - ローパスフィルターかどうかあなたはそれをグーグルしましたか?
追加された 著者 Chuck Mattern,
@ScottSeidmanこのコードもそうではないと思ってください。コードをよく読み、理解してください。それはたった5行です - ロケット科学ではありません
追加された 著者 Chuck Mattern,
@ScottSeidmanしかしそうです。もちろんとても簡単です。これは移動(またはランニング)平均ローパスフィルタと呼ばれます。あなたはそれについて聞いたことがない場合はGoogleのそれ
追加された 著者 Chuck Mattern,

レギュレータを購入する代わりに、デバイスをRCフィルタすることができます。データシートによると、ICは4Vで動作可能で、5Vを供給しています。それはまたあなたがあなたができるだけ速くサンプリングしていない限りあなたのarduinoがそうではないであろう出力をロードしていないと仮定すると最大消費電流はおよそ100μAであると述べています。安全のため、ICが最大1000μAを消費すると仮定しましょう。

5V〜4V = 1V 1V/1000uA =1kΩ

抵抗の後、ICの電源入力のすぐ向こう側に合理的にできる限り大きいコンデンサを適用すると、よりクリーンな電源が得られます。下のシミュレーションリンク。

Falstad Sim

0
追加された
LM35の出力の後でADCの入力に直接この同じタイプのフィルタを適用することもできます。これはより効果的であることが証明されるかもしれません。
追加された 著者 NKN,
それはクールです、シミュレーションとアイデアのおかげで。キャップを購入して試してみる必要があります。
追加された 著者 Arno van der Weijden,