簡単な歴史
最初は混乱がありました...世界の創造と恐竜の時代の段階をスキップして、21世紀に直行しましょう。 ワイヤレステクノロジー、あらゆる場所の電子機器、宇宙船が火星に飛ぶ...
さまざまな商品の中国のオンラインストアを発見したので、私はすべての良いものを買いました。 特に、電球のリモートコントロール用のキットが購入されました。リモートコントロールとそのためのいくつかのボックスです。 その結果、自宅で4つの制御ソケットを作成し、夕方にはソファに横になってHabrを読んで、ソファから立ち上がらずに部屋と廊下の明かりをオンまたはオフにできます。 便利に。
また、絶対に素晴らしい小さな安価なWiFiルーターが購入されました 。 そのうちの1つは保育園のワイヤレスインターネットの「延長コード」として使用され、もう1つは予備のままでした。 ちなみに、私は600ルーブル未満の非常に良い仕様をお勧めします。
「祖国の大箱」には、さまざまな良いものがたくさんあり、それは素晴らしい新年の週末でした。 そして、プロジェクトが生まれました...
目的と手段
私の「スマートホーム」で絶対に必要なものは、インターネットを介して制御できるコンセントであることが決定されました。 このために、必要な詳細がヒープに収集されました。
- ルーター
- 古いプロジェクトのAtMega16マイクロコントローラーを搭載したボード
- ソリッドステートリレー
- 2行LCD
- 体
- ワイヤおよびその他の消耗品
参照条件
デバイスには「MZスイッチ」という名前が付けられ、次のことを行う必要がありました。
- インターネット経由で所有者からコマンドを受け取る
- 負荷制御リレーおよび時間リレーとして動作します
- 「pingovalka」として動作し、pingがない場合にルーターを再起動して負荷を切断できる
- コマンドラインから作業パラメータをプログラムし、メモリに保存します
- ディスプレイにステータスを表示
- 所有者の存在を喜ばせるために
ルーターへのコードの挿入
ルーターを受け取ったら、もちろん、すぐに中に登りました。 最初は、機械的にではなく、形而上学的にtelnetを使ってそこに登りました。
彼は内部に
スクリプトを実行する可能性を見つけるために、数日間が殺されました。 主なアイデアは、いくつかの開始スクリプトの起動に「コードを挿入する」ことでしたが、そのようなスクリプトが見つかりました! 注入は次のようになります。
今、私のルーターは、起動時に、そこに保存されているスクリプトをメモリから抽出して起動します。 したがって、外界との相互作用の独自のアルゴリズムを実装できます。
ルーターからスクリプトを取得したので、機械的にそれに乗り込みました。 内部には、コンソールにアクセスできるシリアルポートが見つかりました。 ボード上の目的のポイントに3ピンをはんだ付けすると、マイクロコントローラーを使用してシリアルポートを介してルーターを制御する機会を得ました。
マイクロコントローラーと制御プログラム
マイクロコントローラーは、シリアルポートを介してルーターと通信し、負荷を管理し、ディスプレイに作業結果を表示し、通常はすべての汚れた作業を実行できる必要があります。 前のプロジェクトから、必要な機能を備えたAtMega16チップを搭載したボードがありました。 彼女はビジネスに行きました。
マイクロコントローラーの基本的なアルゴリズムは次のとおりです。コマンドを使用して行を取得し、分析し、実行し、回答を含む行を返します。 これにより、アナログモデムのロジックを思い出しました。データ付きSレジスタとAT制御コマンド 。
著作権を尊重し、一般的に変更については、アルゴリズムはR-レジスタとMZ-コマンドの概念で動作します。 レジスタには数値と文字列が格納され、コマンドを使用してレジスタを変更し、作業のロジックを制御できます。
ディスプレイのコントラスト調整コマンドの例: " MZ + R0 = 200 "
スマートアルゴリズム
マイクロコントローラの動作アルゴリズムは、いくつかの個別のタスクで構成されています。
- 転送バッファからデータを転送する
- データを受信し、受信バッファーに保存します
- 受信したデータの分析とチームの定義
- 内部Rレジスタの読み取りと書き込み
- 負荷管理と作業ロジック
- 動作モードの表示
- 時間間隔のカウントダウン
これはすべて、マイクロコントローラーの半分のリソースを使用して、8Kコードと512バイトのデータ量に対応することができました。 だから、あなたはまだ何かとプログラムを考えることができます。 たとえば、表示時間、天気、音楽の再生、アパート内の移動に表示します。
制御プログラムは、通常の端末で作成およびデバッグされました。 この場合、単一のデバイスが破損したわけではありません。
その結果、次のデバイス機能が実現しました。
- 電源投入後に一時停止:ルーターが読み込まれ、コンソールに与える「ガベージ」に応答しないように待機できます
- 承認が必要な場合は、ルーターからの要求に応じてログインとパスワードを入力します
- デバイスで動作するようにルーターを構成するスクリプトの実行(init)
- 職場のルーターによって実行されるメインスクリプトの起動(ループ)
- ルーターからコマンドを受信し、応答メッセージを送信する
- アクティビティがないときにルーターを再起動するウォッチドッグタイマー
- ルーターをリブートするスクリプトを実行する(停止)
- 光絶縁リレーを使用した負荷のオンとオフの切り替え
- すべてのパラメーターを構成し、それらをマイクロコントローラーのメモリーに保存する機能
シャイタン機
何らかの理由で、非常に多くの場合、単純なものの機能の実装は、 信じられないほどのマシンゲームのタスクを思い出させます。 さて、「電球を点灯する」という目標は、どのようにこのような複雑な物事や行動から成り立つのでしょうか? そして、ここに方法があります:
- ルーターがスクリプトを実行できるように、独自のスクリプトの1つに「コードを挿入」します。
- 挿入されたコードは、/ tmpフォルダーにいくつかのユーティリティスクリプトを作成します。これは後で使用します。
- ルーターでは、「実行可能」属性を持つファイルを作成することはできません。また、思いやりのある中国語のおかげで、chmodコマンドはありません。
- しかし、この問題をエレガントに回避します。まず、必要な名前で実行可能なスクリプトを/ tmpフォルダーにコピーし、その内容を上書きします。
- ルーターには管理用のWEBインターフェースがありますが、ページを変更/追加することはできません。すべて読み取り専用です
- しかし、この迷惑をエレガントに回避します。チームを立ち上げるためのページはありますが、それへの直接リンクはありません。 このページのアドレスを手動で入力すると、スクリプトを実行できます! 美しいボタンではありませんが、昔ながらのコマンドラインです。
- デバイスがユーザーからコマンドを受信するために、save-and-passメソッドを使用します。コマンド入力フォームから1つのスクリプトが呼び出され、ユーザー入力をファイルに保存します。 別のスクリプトはこのファイルの存在を常にチェックし、それを見つけると、シリアルポートを介してマイクロコントローラーに送信します。
- ユーザー入力を受信すると、マイクロコントローラーはコマンドを選択して実行します。 たとえば、「enable load」コマンド。
すべて、問題は解決しました!
ハウジング内の組み立て
多くのプロジェクトは、通常のボディを作成するために怠lazまたは何もないという事実のためにリリースするまで生き残りません。 この場合、目標はもともと設定されていました。「工業デザイン」を作成して、通常ではなく大人のように見せることです。
ケースは、すべてを混雑させることなくそこに配置するのに十分なほど広く取られました。 ドリルとヤスリ、ヨーホー、ラム酒のボトルを入れた週末の週末、そして今、デバイスは組み立てられています。 すべての留め具はクローゼットの中にあり、家具のアセンブリの残骸と一般的に
組み立て中に不可欠な材料は、「中国の鼻」-グルーガン用のプラスチックチューブです。 そのような銃がなければ、すべての作業は通常のはんだごてを刺して行われました。
結果は次のとおりです。
外で
内側から
なぜこれが必要でしたか
アナログがまだ存在しないユニークなデバイスが作成されたとは言いません。 しかし、なぜ私はしないのですか? なります! マーケティング資料の新製品は、「ユニーク」および「比類のない」と呼ばれます。 極端な場合、「通常よりも数倍良い...」。 したがって、私は言う:それは本当にユニークなデバイスであることが判明し、 従来のコンセントよりも9000倍以上スマートです。
電気ポットを接続し、Wi-Fi経由でラップトップから電源を入れることができます。 そして、家がインターネットを失った場合、汽船のサイレンをオンにすることができます。 また、 Most Main Serverをデバイスに接続し、自宅にいる間に再起動できます。
実際、このプロジェクトは、マイクロコントローラーのプログラミングとはんだごての所有のスキルを失わないために、「心のためのトレーニング」として実装されました。
プロジェクト資料はコピーおよび変更できます。 プロジェクトの作成者を参照してください。