Arduino UNOおよび433 MHz無線送信機によるバリア制御

みなさんこんにちは! 職場に駐車場があります。 もちろん、この記事の目的は、駐車スペースのある道路の困難な状況と、従業員を気にするリーダーシップのPRではないことを誇っていません(私は彼らの仕事の場所についても言及しません!)、これは事実ではありません。 一番下の行は、私の駐車場に関係のない他の人がこの駐車場に駐車するのを妨げるものは何ですか? そして、これはこの駐車場への出入りを制限する障壁です。



多くの組織と同様に、私の企業への入場は、私と他のすべての人を制御するために、通常のパスで実行されます。 まあ、駐車場への入り口も同じパスで行われました。 つまり、あなたは駐車場まで車で行き、パスを読者に持って行き、それが機能し、バリアが開き(自動的に閉じます)、立ち寄ってそれだけです。 彼らは考えました。 しかし、電子機器と自然な怠forの私の趣味(毎回運転し、窓を開け、手を引き、窓を閉め、雨が降って寒い場合は)システムに逆らいました。



だから、ポイントに近い。 まず第一に、私は障壁が非常に人気のある会社ニースであることが判明し、それについての情報を探し始めました。 ただし、メーカーの会社の人気にもかかわらず、そのコード形式に関する情報はほとんどありませんでした。 12ビットと24ビットのコード形式があることが判明しました。 12ビット古い、24ビット-より新しい。 障壁が長い間機能していることを知っているので、12ビットコード(後で推測される)から始めることにしました。 したがって、データパケットは12ビットで構成されます。 12ビットコードの前に、いわゆる「パイロット期間」と「開始インパルス」があります。 「パイロット期間」は36の低レベル間隔で構成され、「開始パルス」は1つの高レベル間隔で構成されます。 1つのデータパケットは、「パイロット期間」、「開始インパルス」、およびその後に続く12ビットコード(各バリア)で構成されます。 バリアコントロールパネルは一度に4つのデータパケットを送信しますが、多くのデバイスがこの周波数で動作し(特に車のアラーム)、干渉が発生する可能性があるため、さらに多くのデータパケットを送信します。 ニースバリアのパルス持続時間:





私はこの障壁からのリモートコントロールを持っていないため(この場合、アクティブなリモートコントロールからの信号だけを考慮することができます)、すべての可能なオプションと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付き)に設定したため、送信のすべての瞬間が表示され、カウントされ、正確なコードが決定されました。



以上です! デモ対決ビデオとして:





ご清聴ありがとうございました!



All Articles