前文として、私はすでに同様の記事があったので、最初はHabrのカメラについて書くつもりはなかったと言います。
このカメラは、興味、トレーニングスキル、および物理オブジェクトのリモートコントロールテクノロジーのテストのために作成されました。
少し後、私はこのシステムをレビューに伴う良い例として、別のリソースで使用しました(実際には、声を上げるためのチートとして)。 これは、多くの欠陥を明らかにした本当のベータテストでした。 これについては、気遣う人、アドバイスを手伝ってくれる人、コードを手伝ってくれる人に感謝します。
同時に、カメラで遊んだ訪問者は、1時間も経たないので、大騒ぎを覚えていないことに加えて、この全体のデバイス、技術的な詳細、ソフトウェアの実装、そしてもちろんコストにも積極的に興味を持ち始めました。
記事を読んだきっかけはそれだけです。 そして繰り返さないために、私はコストに焦点を合わせることにしました。 このトピックに関する前のトピックの著者である私が覚えている限り、最終コストは5000r程度の領域に注がれました。
私の工芸品の価値について: 以下をお読みください。
だから、「あなたが船を呼ぶとき、それは航海します」、私が安さについて見出しを書いたら、私は散文に対応するので、詳細は後で、そして最初に費用について来るでしょう。
価格を見てみましょう*
*すべての価格には割引があります。 割引について-別途、後で。
必須セット :
- Arduino Uno(またはnano)-15.29ドル
- サーボ(ステアリングマシン)SG90 2x2.37 $ = 4.74 $
- ウェブカメラ3.01 $
追加セット (怠iness +パン):
- Nokia 5110の画面は250ルーブルです(2年前に購入したNokia自体と電源を備えており、この目的のために、実際には既に半分、または無料でさえあることがわかります)
- MegaShield v4からArduino-$ 5.86
- 配線コネクタ-2.86ドル(この価格で40個、実際に7個使用)
- バックライト用のスーパーブライトスーパーブルースーパーダイオード-5p / pc(4pcsの方が良い、私は間違っていた)
合計:1300こする
実装について
すべてがゼロから行われました。 第一にトレーニングの理由で、すでに起こったことを繰り返さず、第二にその時点でイーサネットモジュールを持っていなかったので、あまりにも複雑であると判断しました(MySQLはそこに縛られていました)。間違いなく適切ではありません。
タスクについて
私は自分で次のタスクを特定しました。
- 写真/ビデオを見る
- カメラを制御する能力を持っている
- ビデオまたは画像のサイズと品質を制御できるようにすること。「クライアント側で既に」ではなく、「クライアント側のコマンドでサーバー側で」。 このようなニーズは、「大規模で幅広いインターネット」がどこからでもアクセスできないという事実のために発生しました。
- 許容可能な「リアルタイム」を提供する
- 220Vの負荷制御など、将来のために予約してください。 実際、これのために、すべてが開始されました。 既製のソリューションは非常に高価であるか、そのような機会を提供しません。
問題について
実装中に、そのような計画から疑問が生じました。
- ビデオは、複数のユーザーに表示される場合にプロセッサをロードするか、5〜10の遅延を与えます。 「リアルタイム」を提供しないため、経営陣の妥当性と全体的なパフォーマンスをすぐに判断することは不可能です。
- 翻訳サービスを使用すると、大規模なオンラインの場合にサーバーが大幅に軽減されますが、必要な信頼性が得られず、再び遅延が発生します
- ビデオストリームをブロードキャストするための特別なサーバーには、まだ持っていない特定のスキルが必要です
- 画像を変更してディスプレイを使用しても高いfpsが得られず、常にハードディスクにアクセスします。これは、多数のユーザーで、プロセッサの読み込みではなく、ディスクアクセスのために画像の遅れを引き起こす可能性があります
ソリューションについて
- ディスプレイとして使用することが決定されました-写真
- ハードディスクをイメージ発行プロセスから除外するために、RamDiskがインストールされます。RamDiskには、Webカメラからのイメージが2回「配置」されます
- 写真を発行するために、phpとgdlibを使用することが決定されました
- 画像の更新は、クライアントによってjavascriptとajaxによって開始され、ページ自体を更新せずに行われます
十分な歌詞!
それはどのように見えますか
すべてが控えめなものよりも多く見える
次のように機能します。
Arduin、誰も見ていない場合
配線付きメガシールド
プロファイルのサンドイッチ
サンドイッチフルフェイス
LCD
彼女は背面図です(ピンとコンダー)
アッシー
アッシー2
集合農場-配線とロープのシステム(カメラマウント)
それなしで
ハードウェアにどのように配置されていますか?
WebカメラはUSB経由でコンピューターに接続されています。
ArduinoもUSB経由でコンピューターに接続されます。
非常に低い消費電流のため、すべての外部デバイスはArduinoに直接接続され、1か月半の間24時間稼働しており、最小負荷時には10人のユーザーがオンラインになっています。
プログラム的にどのように機能しますか
クライアント側では、プラグインやローションのない、きれいなWebインターフェース。 html、css、およびjavascript(+ ajax)のみ。
サーバー側
- サーバー自体-Apache
- スクリプトハンドラ-PHP
- カメラからの写真の受信-Webカメラから写真を保存するための最も簡単で利用可能な、無料または自作のプログラム
- イメージストレージ-RamDisk、RAMにディスクパーティションを作成するユーティリティ(ロシア語版のRAMDisk "Enterprise"はローカライズされたシステムでは無料です)
- PHPに直接ローカルパスを登録しないために、画像のあるフォルダーは、juctionを使用してwwwフォルダーにマウントされます(Mark Russinovichの無料ユーティリティ)
- インターネットからArduinoへのコントロール転送は、次のようにプロキシプログラムを使用して実装されます。phpスクリプトは、UDPソケットを作成し、特定のポートにデータグラムを送信します。 (治療なしでも可能です)。 UDPの選択は、システムを単純化するためだけに呼び出されました。UDPは、クライアントからもサーバーからも配信を送信することについての確認や確認を必要としません。
アルドゥイノの側に
- それ自体(なぜ「自分」?「ボード」だから)Arduino
- 内部のスケッチは、インターネット上で見られる表示用のarduino-0022サーボおよびシリアル+ライブラリの標準セットからの標準的な例であり、許容可能な形式に変更されています(同時にキリル文字とラテン語に関して)
- 現時点では、純粋にその便利さと文化的外観のために、メガシールドはプラスです-このバージョンでは、単一の配線をはんだ付けしませんでした(ディスプレイへのボードを除く)
システムは、すべての侵略と襲撃に耐え、120人以上のユーザーをオンラインで受け入れました。
プロキシプログラムの欠陥、特にエラー処理が不十分なために発生した管理障害のケースがありましたが、ApacheとArduinoのソフトウェア部分は価値がありました。
ささいなことに注意してください
私自身の不注意/知識不足/観察不足のために起こったソフトウェアの問題に注意したい:
- 最初にひどく苦しめられたのは、Arduinoが仮想COMポートに送信された回線から最初のバイトとそれ以外のすべてを別々に受信することです。 私が試したのは洗練されていません-配列とチェックの束で...少なくともあなたは殺します。 問題の解決策は? 思いも寄らなかった瞬間に、突然、突然、やって来ました。各バイトを読んだ後、Sleep 2。 すべて!
- 2番目の問題-画像の実際のダウンロード(または読み込みエラー)を待たずにタイマーで画像が更新されたため、サーバーに深刻な負荷がかかったように見えます。 このようにして、大量の「余分な」リクエストが送信されました。
- 3番目:FireFoxは最も正確で不機嫌なブラウザであることが判明し、有効なコードを書くことを学びました。 たとえば、Option要素のOnClickイベントは機能しません。 そして、それは、炉端を除くすべての場所で機能します。
- 第4に、完全に暗黙的で、めったにポップアップしません。時々、画像が「壊れた」。 結局のところ、これは書き込み中にファイルがビジーだったときに起こりました。 つまり file_exists()がパスしたことを確認し、ファイルはロックされたままです。 is_writable()のチェックも役に立たなかった。 エラーの存在によってサイクルを整理し、その中の「最後まで」ファイルを読み取る作業をしなければなりませんでした。
残りの欠陥
いくつかあります。
- まず、これらはkamentyで記述された「左」の文字で、画面上のメッセージの最後に表示されることがあります。 これらは実際には管理チームです。 このバグの耳は、アクティブにスパムを送信するかボタンを押すと、com-portバッファーがArduinaによって完全に読み取る時間がなく、後続のメッセージがバッファーの最後までロールバックするという事実から大きくなります。 解決策はありますが、まだ作成されていません。
- 第二に、これは、プロキシプログラムがオンラインのときに、UDPソケットが定期的にドロップすることです。 理由は何ですか-私は知りません。 すぐには表示されません。 彼は死に、「樹液」はありません。 ソケットを閉じて、新しい方法でバインドするのに役立ちます。 おそらく、Widowski winsock.ocx曲線が原因である可能性があります。 このビジネスをAPIで基本的な、なんとなく怠に書き換える。 「不器用な」決定の1つとして、タイマーによるソケットのリセットと再バインドが、たとえば30分ごとに見られます。
割引について
中国では安いことはよく知られています。 主なことは、それがより安い場所、および追加の割引を得る方法を知ることです。
ここに書くことは意味がありません-多くの人にも知られている写真付きのテキストが多すぎます。
したがって、スパムや他の「紹介」との闘いの熱烈な反対者を誘発しないために、私は必要な最小値に注意します-これはBiCの15%割引であり、10%の1回限りのクーポンと推奨者を入力するときの最初の購入の5%割引+このシステムの使用方法のヒントです繰り返します。
興味のあるすべての人は、実際にはカメラ自体のページ上のリンクに関する完全な情報に慣れることができます。
参照資料
カメラ、作業インスタンス 、まだ見たりプレイしたことがない人向け
カメラへのリンクがオタク誌に事前にリークされたトピック
RAMDisk
オークション
ソース (回避するために簡略化)、クライアント部分、サーバー(php)およびweb-arduino-proxyプログラム(VB 6.0)
Apache、php、または何らかの組み合わせのアセンブリなど -あなたの好みに合わせて。