ワイヤレス温度計

... バンドルあたり5ドルの超低コスト無線モジュール。



このキットには、無線送信機と超再生受信機が含まれています。 連絡先の数は、実際にはそれぞれ3つで、そのうち2つは力であり、それらとの連携が非常に簡単であることを示唆しています。 確かに、このキットはリモートコントロールに重点を置いており、専用のマイクロサーキットのエンコーダーおよびデコーダーと組み合わせて使用​​されることがよくありますが、 あなたの自転車は常により高価です。





433 MHzの周波数で振幅変調されたトランスミッターは、SAWによって周波数が安定化されます。 送信機は、無線技術( vrtp.ruの多くのスキーム)に関与したことのあるすべての人によって作成された1、2、3トランジスタのバグとビーコンの近縁です。 トランスミッタへの電力は最大12 Vまで許容されます。データ入力は実際にトランジスタを開き、生成を開始します。入力レベルが低い場合、生成は停止します。 したがって、特定の周波数の入力にHiとLoを設定すると、データを送信できます。







受信機は超再生のクラスに属します。 今日、このような方式はほぼ完全に廃止され、スーパーヘテロダインに置き換えられましたが、数十年前に、ラジオ放送を聴くために産業用受信機もリリースされました。

Superregenerateは、ダイレクトゲインレシーバーのさらなる開発です。 間欠モードでの数十kHzの周波数での正帰還により、電源のエネルギーは、回路がチューニングされているのと同じ周波数の振動の形で入力回路に導入されます。 これにより、回路の損失が補償され、品質係数が改善されます。 無線モジュールの出力には、回線にData HiまたはLoを発行するコンパレータがあります。





超再生レシーバーの利点:



利点から生じる欠点:





両方のモジュールにアンテナ用の穴が残っています。 近くにあるモジュールがようやく間隔を空けた後、アンテナなしでは何もすることがないことに気付き、アンテナとしてモジュールにワイヤーでワニを引っ掛けました。 この形式では、送信機にKrona 9Vを搭載した場合、組み立てられたデバイスの範囲は直線で10メートルを超えていました。 約1波長または½波長のワイヤをアンテナとして使用できることを思い出してください。この場合、17または34 cmになります。共通ワイヤ(GND)、可能であれば、金属製ケースまたは別の部品であるカウンターウェイトに接続することをお勧めしますアンテナから反対方向を指すワイヤ。



この写真は、送信機を10メートル取り外したときのものです。 信号電力が視覚的に大幅に低下したという事実にもかかわらず、受信モジュールは自信を持ってデータを受信します。





今すぐ直接データ転送に。 トランスミッターをあるコントローラーのUARTに接続し、別のコントローラーのUARTに接続したときの素朴さ。 送信されたバイトを見ましたが、何十もの余分なものに囲まれていました! 次の図を見ると、受信機は常に何かをキャッチします。 そして、安定した周期的(!)信号がある場合にのみ、すべての着信ガベージに明確に現れます。 UARTは、各ビットを分割せずにビットごとにデータを送信します。0x00が送信される場合、バイト送信中はローになります。 送信機は単純にオフになり、0xffが送信されると高レベルになりますが、それでも受信機はすぐに不均一性を発見し、ランダムなシーケンスを出力します。







つまり 送信機の電源を入れ、データ線を電源に入れ、送信機はすべての電力でキャリアを送信し、受信機にはいくつかのユニットがあり、ゴミ11111111110100101001が表示されます。データ線を解放すると、ゼロが表示され、ゴミ000000000110101010が再び表示されます。



そして、そのようなコードがあります。 マンチェスター マンチェスターコードでは、ビットは低レベルから上に(1になる)、または上から下に(0になる)ことによってエンコードされます。 したがって、各ビットを送信する前に、レベルを初期位置に設定し、途中で変更する必要があります。 最適なデータ転送速度は約5〜10〜20キロビット/秒であることが実験的にわかっています。 これにより、かなり安定した受信が実現され、プロトタイプデバイスで使用されます。これについては、さらに説明します。







従来は温度計ですが、現在は無線データ転送が可能です。 タスクの状態に応じて、送信機はフィルムの下のベッドにあり、家の中には受信機があります。受信機は、いわば、センサーからデータを収集し、1つのセンサーからヒストグラムを作成します。 つまり 夜に0度だったことがわかると、なぜすべての苗木が凍結したのかがわかり、犯人を見つけるだけです。







トランスミッターは、LM335温度センサーを備えたAttiny13コントローラーに組み込まれています。 アナログ温度センサーは、1Kで100mVを提供します。 基準電圧源MKは内部1.1Vを使用します。 なぜなら 3Vを超えるセンサーからの値、ADCのデータは分周器を介して送信されます。 コントローラーは30分に1回起動し、デバッグモードでは4秒に1回、温度センサーに電力を供給し、トランスミッターをオンにして、約1〜2秒で現在の温度を1000回送信します。 はい! 何千回も連続しています 100回連続して転送しても、一部のセッションでデータを見逃しました。 433 MHzで数十台の車の信号が送られている現代の都市は、最も平和な場所ではありません。

温度は、マンチェスターコーディングで1バイトとして送信されます。







受信側の0b10101011は21°Cに変わります。



バイト転送
void send1() { PORT_TX&=~B_TX; _delay_us(DELAY_US); PORT_TX|=B_TX; _delay_us(DELAY_US); } void send0() { PORT_TX|=B_TX; _delay_us(DELAY_US); PORT_TX&=~B_TX; _delay_us(DELAY_US); } void send(char c) { send1(); for(uint8_t i=128; i>0; i>>=1) { if(c & i) send1(); else send0(); } PORT_TX&=~B_TX; }
      
      







データ転送後、ウォッチドッグタイマー割り込みが到着するまでスリープ状態になる
 if(debug_mode) { cli(); wdt_reset(); WDTCR=1<<WDCE | 1<<WDTIE; WDTCR=1<<WDP3 | 1<<WDTIE; // 4  sei(); MCUCR|=1<<SE | 1<<SM1; //   Power-down sleep_cpu(); } else for(uint8_t i=0; i<SLEEP_TIME; i++) { cli(); wdt_reset(); WDTCR=1<<WDCE | 1<<WDTIE; WDTCR=1<<WDP3 | 1<<WDP0 | 1<<WDTIE; // 8  sei(); MCUCR|=1<<SE | 1<<SM1; sleep_cpu(); }
      
      









電力は、アクティブモード6mA、スリープモード0.2mAでの中国のテスター消費量で測定した同じKrona 9Vを介して供給されます。 電圧レギュレータ回路に注意せずにはいられません。 9Vからのコントローラーは単純に死に、トランスミッターでは5V以下が小さいため、電力コンバーターが必要でした。 ブーストパルス、おそらく干渉を引き起こす可能性があり、私はそれを実験しませんでした。 従来の7805のように、ステップダウンリニアを配置する方が簡単でした。しかし、突然、彼女自身の6 mAの消費があることがわかりました。 これは、コントローラーがスリープしている間、バッテリー全体を消費することを意味します。 グーグル、私は低電力コンバータLP2950、MCP1700を見つけました.... しかし、それらは近くになく、このような回路はトランジスタ7002のペアで起動しました。抵抗器の値はメガオームまでではなく、数百キロオームまで減少する必要がありました。そうでなければ、出力電圧は小さなボルトで3を超えて上昇しませんでした。 これで約4.6Vになり、コントローラーにとって非常に快適です。



送信機回路、それをしない方法!








レシーバーは、Nokia 5110のディスプレイを備えたAttiny85に基づいて組み立てられています。上の行は現在の温度用に予約されており、下の行は最大と最小を示しています。 中央領域84x32には、0〜32Cのヒストグラムが表示されます。 上または下はすべて切断されます。







受付は継続中です。 LoからHiに受信回線に切り替えると、8ビットのデータを受信しようとします。 元のバージョンでは、受信ビットは次のようになりました。 LoからHiへの最初の遷移は開始ビット1の中間であり、それからビット継続時間より少し短い値が測定され、入力の値が固定され、少し遅れてビットの後半の時間が来ると、値は再びポートで固定されます したがって、上位または下位レベルへの遷移が決定されます。 さらに、うまく機能しなかったことがわかります。



受信回路








ごみをふるいにかけるために、私は3つのパッケージが連続して期待され、それらが一致する場合、これは現在の温度になります。 同時に、0.5秒間表示されます。 受信インジケータが表示されます。 15分ごとに1回、ヒストグラムがシフトされ、45分以内に新しい温度が受信されない場合、現在の温度表示は消え、ヒストグラムは空の列で移動し続けます。 GCC設定のcharに符号が付いていない場合、すべてがハーフキックで機能しますが、夜まで奇妙なグリッチが私の脳をつつきました。 そして午前中、送信機をオフにして受信機の電源を入れ、30分間ノイズをキャッチし、-91度になりました。

それから私は驚かされず、4つのパッケージが連続して期待されました。 そして、彼は30分以内に再び誤った前提を見つけました。 2つの連続する同一バイトとCRC8の確認を期待しました。 そして1時間後、彼は再び無限の猿の定理によると、誤った温度を見つけました。

「半ダースの猿が、タイプライターを持っているかどうかにかかわらず、現在も大英博物館に保管されているすべての本を作成します」

そして最後に、三重の前提に戻りますが、個々のビットを受信するためのアルゴリズムを変更して、私は少し落ち着きましたが、猿は眠っていないと理解しています。



変更されたアルゴリズムでは、各ビットが受信されると、ポートのいくつかの中間測定値が作成され、タイミングの悪いレベル遷移がある場合、受信が中断されます。



だった
 int8_t read_bit() { _delay_us(160); //    char rx=PIN_RX & B_RX; //     for(uint8_t i=0; i<6; i++) { if((PIN_RX & B_RX) != rx) { if(rx) return 0; else return 1; } } return -1; }
      
      







になっています
 int8_t read_bit() { char rx=PIN_RX & B_RX; for(uint8_t i=0; i<5; i++) { if((PIN_RX & B_RX) != rx) return -1; //   } _delay_us(40); //        rx=PIN_RX & B_RX; for(uint8_t i=0; i<5; i++) { if((PIN_RX & B_RX) != rx) return -1; //   } rx=PIN_RX & B_RX; for(uint8_t i=0; i<6; i++) //       { if((PIN_RX & B_RX) != rx) { if(rx) return 0; else return 1; } } return -1; }
      
      









これらの無線モジュールは、データ転送モジュールとしての深刻な使用にはほとんど適していないという事実にもかかわらず、統計を収集し、その後のデータの処理および拒否を行うことは完全に不正確です。



なぜなら デバイスにはデモ機能しかないので、意図的にプリント回路基板を掲載することはありません。バグを修正するために、それらをさらに再翻訳する必要があります。

アーカイブ内のソースkrivoruky Cコードと16進ファイル。 デフォルトでヒューズビット。



All Articles