多くの組織と同様に、私の企業への入場は、私と他のすべての人を制御するために、通常のパスで実行されます。 まあ、駐車場への入り口も同じパスで行われました。 つまり、あなたは駐車場まで車で行き、パスを読者に持って行き、それが機能し、バリアが開き(自動的に閉じます)、立ち寄ってそれだけです。 彼らは考えました。 しかし、電子機器と自然な怠forの私の趣味(毎回運転し、窓を開け、手を引き、窓を閉め、雨が降って寒い場合は)システムに逆らいました。
だから、ポイントに近い。 まず第一に、私は障壁が非常に人気のある会社ニースであることが判明し、それについての情報を探し始めました。 ただし、メーカーの会社の人気にもかかわらず、そのコード形式に関する情報はほとんどありませんでした。 12ビットと24ビットのコード形式があることが判明しました。 12ビット古い、24ビット-より新しい。 障壁が長い間機能していることを知っているので、12ビットコード(後で推測される)から始めることにしました。 したがって、データパケットは12ビットで構成されます。 12ビットコードの前に、いわゆる「パイロット期間」と「開始インパルス」があります。 「パイロット期間」は36の低レベル間隔で構成され、「開始パルス」は1つの高レベル間隔で構成されます。 1つのデータパケットは、「パイロット期間」、「開始インパルス」、およびその後に続く12ビットコード(各バリア)で構成されます。 バリアコントロールパネルは一度に4つのデータパケットを送信しますが、多くのデバイスがこの周波数で動作し(特に車のアラーム)、干渉が発生する可能性があるため、さらに多くのデータパケットを送信します。 ニースバリアのパルス持続時間:
- 論理「1」-1400μsの低レベル(2つの間隔)と700μsの高さ(1つの間隔)
- 論理「0」は、700 µsの低(1間隔)および1400 µsの高(1間隔)です。
- 「パイロット期間」-25200マイクロ秒(36間隔)
- 「スタートパルス」-700μs(1間隔)
私はこの障壁からのリモートコントロールを持っていないため(この場合、アクティブなリモートコントロールからの信号だけを考慮することができます)、すべての可能なオプションと4096を列挙することにより、真のコードを推測する必要があります。
一般的に、これらすべてを実現できるものは何ですか? 最近のArduinoプラットフォームへの興味から、この問題について長い間反省することができませんでした。
コンポーネントリスト:
1. Arduino Uno、
2. 433MHz無線送信機、それに自家製アンテナ、
3.バッテリーは9ボルトで、一般的にクローナとして知られています。
有名な中国の店舗にあるこれらの無線送信機は、無線受信機と一緒に非常に安く(約50ルーブル)販売されています。 これらは非常に単純で、3つの接点:電源、接地、信号接点です。 5〜12ボルトの電源は、供給電圧が高いほど範囲が広くなります。 実際、この理由から、9ボルトのバッテリーが選択されました。 推奨されるArduino Unoの供給電圧は7〜12ボルト(Vinコンタクト)であるため、Kronaは非常に適しています。 また、無線送信機の範囲はアンテナの存在に依存します(アンテナがない場合、範囲は約1メートルになります)。 セット全体のコストは約300ルーブルです。
実際、これはArduino Unoのスケッチそのものです。
int send_code_pin = 13; //int send_code = 3061; void setup() { pinMode(send_code_pin, OUTPUT); } void loop () { for (int send_code = 0; send_code < 4096; send_code++) // { for (int j = 0; j <7; j++) // 4-, - 7 { digitalWrite(send_code_pin, HIGH); // delayMicroseconds(700); digitalWrite(send_code_pin, LOW); for (int i = 12; i > 0; i--) { boolean bit_code = bitRead(send_code, i - 1); if (bit_code) { digitalWrite(send_code_pin, LOW); // delayMicroseconds(1400); digitalWrite(send_code_pin, HIGH); delayMicroseconds(700); } else { digitalWrite(send_code_pin, LOW); // delayMicroseconds(700); digitalWrite(send_code_pin, HIGH); delayMicroseconds(1400); } } digitalWrite(send_code_pin, LOW); // delayMicroseconds(25200); } } //delay(10000); }
すべての可能なオプションの検索には、バリアへの1日あたり1つの出口を考慮して、約1週間かかりました。 適切なコードをすばやく選択する手法は非常に簡単でした。 micros()コマンドを使用して、1つのコードの送信時間を決定しました。 約0.25秒になりました。 すべてのオプションの合計列挙は約17分です。 バリアがArduinoを起動してタイミングを計る前。 12.5分で障壁が開きました。 これに基づいて、私はすぐに最初の2800オプションを破棄しました。 などなど。 約30のオプションが残ったとき、各データ転送後に1秒の遅延を設定しました。 データ転送の連絡先を13番目(LED付き)に設定したため、送信のすべての瞬間が表示され、カウントされ、正確なコードが決定されました。
以上です! デモ対決ビデオとして:
ご清聴ありがとうございました!