AXIS、または自分の手で管理されたウェブカメラにお金がない場合、適度に曲がった

モスクワ州立大学の13階にある管理されたWebカメラからのビデオ放送を初めて見たとき、私は非常に感銘を受けました。 それで私は似たようなものを手配したかったのです。 AXIS 214PTZのようなカメラには余分なお金がないので、このアイデアをしばらく残さなければなりませんでした。 Arduinoと、「ネットワークカード」とモーターを接続できるという事実を知りました。 必要なコンポーネントはすぐに取得され、本格的なウェブ制御ウェブカメラの構築に必要なものはすべて手元にありました。

インターネットの調査では、サーバーにカメラを接続するというアイデアが、アルデュインとサーボのすべての幸せな所有者に最初に来ることが示されました。 ただし、既に実装されている制御スキーム(ボタン、PS / 2マウス、管理されたルーター、コンピューター、arduinoに組み込まれたサーバーのWebページ)のいずれも不便であるため、私を感動させませんでした。 サイトにWebインターフェースを配置して管理できるように、普遍的なものが欲しかった。

その結果、次のようなことがありました。


通常のLogitech Pro 9000ウェブカメラ(かなり前にComputerraで受賞)は、No。1サーボロッカー(Y軸)に取り付けられています。 Serva No. 1は、サーボNo. 2(X軸)のロッキングチェアに取り付けられています。 また、サーバー2はベースにかなりしっかりとねじ込まれています。重い木製のブロックです。 Servasは、最もシンプルで安価なSRM-102です(1個あたり約400ルーブル)。

それが全体の設計であり、すべてが基本です。 接続には、子供のデザイナーのストリップが使用されました(そのような古いソビエトの金属デザイナーを覚えていますか?それらはまだ販売中です)。

このすべての不名誉のコントローラーは、たくさんのArduino(より正確には、Freeduino 2009)とEthernet Shield v2で構成されています。 あまり複雑ではありません。

おおよその制御方式が考案されました。 Webインターフェースのスクリプトは、コマンド(ボタンを押す、マウスの動きなど)を受け取り、特定の形式でデータベースに書き込みます。 Arduinaはサーバー上のスクリプトに対してGETリクエストを周期的に実行し、スクリプトはデータベースからすべてのコマンドを発行し、その後データベースがクリアされます。 もっと美しくできるかもしれませんが、これまでのところ、この形式ではすべてが私に合っています。

サーバー上で、MySQLがHEAPデータベースを高速化するために回転しています。 構造は次のとおりです。

CREATE TABLE `servo` (
`id` smallint(6) NOT NULL AUTO_INCREMENT,
`cam_id` tinyint(4) NOT NULL,
`action` varchar(20) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `cam_id` (`cam_id`)
) ENGINE=MEMORY DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;


次はスクリプトです。 sobssno Arduinaの最初の、最も重要なスケッチ。 スケッチは特になめられていないため、stopudovoを改善できます。 しかし、それは安定して動作するため、これまでのところ私には合っています。 Arduinoに精通していれば、あなたはすでにそれを知っているので、スケッチの記入方法については説明しません。 私はArduino 18 IDEを使用しているため、スケッチがあります。 新しいバージョンでは、IDEはおそらく起動しません!

ファイルservowebclient.pde

スケッチをArduinoにアップロードし、ネットワークケーブルを差し込んだ後、作業の半分が完了しました。 Arduinはオンラインで、目的のスクリプトをポーリングし、受信したコマンドを処理することを望みます。 しかし、チームはどこからでも現れなければなりません。 これには、次のスクリプトが使用されます。

index.php-sobssno、Webベースのカメラ制御インターフェースを備えたページ。
set.php-index.phpから非同期的に呼び出され、カメラに必要なコマンドをデータベースに書き込みます
get.php-スクリプトはArduinaによってリモートで呼び出され、データベースからコマンドを読み取り、プレーンテキストで発行します

これらのファイル、および一般にWeb銃口ディレクトリの構造全体は、ここでアーカイブに保存できます。 serva.rar
ここでArduinsのライブラリを使用-libs.rar

原則として、それだけです。 私をメガマインドと呼んだすべての人がリラックスして、「はい、すべての愚か者ができる」と言うことを願っています:-)

もちろん、取り組むべきことがあります。 カメラをだれにも見せないように、何らかの許可が必要です。 基本的な機能、基本的なコントロールの詳細を示すために、意図的にレイアウトします。

制御ロジックは、メインのindex.phpファイル内のJavascriptで完全にプログラムされていますMakeAction関数はコマンドを配置する役割を担っているため、何でもできます。 たとえば、ウェブモールには「固定ポイント-バルコニー」などのリンクがあります。 これは、これと同じMakeAction(11、coordinate_x、coordinate_y)の通常の呼び出しです。 カメラを向ける場所。 このようにして、あらゆる動きをプログラムできます。 しかし、この方法では、チームの列を非常に不本意に台無しにすることができることを忘れてはなりません。 たとえば、JavaScript関数「left_right」がありました。 サイクルの中でX座標を変更した結果、カメラは周期的に前後に移動しました。 そして、誰かがブラウザでこの機能を有効にしていた場合、有効にした人が無効にするまで停止する方法はありませんでした。 一時的な解決策は、jQueryを介して別のファイルをロードするようにタイマーを設定することで、強制的にそのタイマーを強制終了しました。 いですが、うまくいきました。

一般的に、私は良い管理されたウェブカメラを作成し、それがどのように機能するかを示すかなりいい機会について話したかっただけです。 そうすると、他の誰かが幻想を抱くようになります。同じ方法で、あなたは何でもコントロールできるからです。

テストプロセスについて少し説明します。話をするだけです。

数日前に初めてこのカメラの電源を入れました。 ブロードキャストを開始し、ブログにWebインターフェイスへのリンクを投稿しました。 十数人が彼女を少し運転して彼女を捨てた。 翌日、職場でカメラをドラッグして、女の子が座っているオフィスに置いた。 カメラはほとんど常に回転していました。 女の子はオフィスを通り、カメラは彼女の後ろで同期して動いています。人々は通路を譲りませんでした:-)さらに、私たちのオフィスにはオウムPitrovichがいます。最初にカメラを嫌い、常に彼女を攻撃しました。 ところで、この感染はラップトップからの電源ケーブルをかじり、サーバーに配線しました。 少女たちに感謝します-彼らはカメラのたゆまぬ眼の下で一日中仕事に耐えました。 そして、常に新しいテスターを惹きつけました:-)



ここでカメラの説明をハブレに投稿しようとしましたが、カルマが小さいながらも非常に肯定的だったため、まったくできませんでした。 まあ、どのように、少なくともあなたは割れます。 必死、 質問をQ&A投稿しました 。 その結果、彼らは私のカルマを完全に満たし、トピックを配置するのに必要なものをはるかに超えました。 もう一度、みんなに感謝します。 Habrの人々は私のコントロールの実装を本当に気に入っています(コメントで判断します)。そのため、カメラはほぼ9時間連続して回転し続けています(ブロードキャスト統計から取得、.comを参照)。 サーバスは寒いです、ニフィガを加熱しないでください。 Arduinaは少し暖かいです。 この間ずっと、グリッチは1つしかありませんでした-arduinaはグリッドを失いました。 判明したように、「私には崖がありました」(c)アントン・ウラルスキー

訓練された動きの非常に長い再生(誰かが訓練をオンにし、マウスを長時間押してからPlayを押した)に関連する不具合がまだあったので、このモードを100コマンドに制限しました。 もちろん、この制限は簡単に回避できます:-)

明日は仕事の日があり、夜はカメラの電源を切りますが、朝は仕事で再び電源を入れます。 さらに楽しいことがあります。

UPD>最初のデザイン(木製のバー)はあまり安定していないことが判明しました-何度かひっくり返して、カメラを左右に大きく揺らしました。 そこで、新しい修正が行われました。サーボ2番は小さな木製のブロックにボルトで固定されています。 標準の三脚マウントのネジの直径だけのために、ブロックに穴が開けられました。 さて、バーは従来のカメラから三脚に固定されています。 このデザインは非常に信頼性が高いことが判明しました-人々はそれを覆すために7時間頑固に努力してきましたが、うまくいきません。

さらに、メインカメラの隣に2つ目(まったく同じLogitech、ただし静止している)が置かれ、最初のソーセージがどのようにソーセージであるかを観察することができました。 正直なところ、非常に魅力的な光景です。



カメラの反応は驚くほど高速であることが判明しました-Webフェイスの制御に関連する遅延は(私にとってはとにかく)ほんの一瞬です。 私は自宅に座っていますが、サーバーは稼働しており、通常のCorbino / Beelineインターネットを使用しています。 smotri.comでのビデオブロードキャストの速度は低下しますが、常にそうとは限りません。

それでは、デザインを明確にするために、カメラの写真を数枚とビデオを数枚。











いくつかのデモ動画(動画には何も挿入されないので、リンクだけを提供します):
www.youtube.com/watch?v=diEv3LS1nWg
www.youtube.com/watch?v=JEpCG5_nl1s
www.youtube.com/watch?v=t6cCTCtWCqg

ところで、娘はこのおもちゃが大好きです。 確かに、彼女はカメラがそこにあっても他のものであってもかまいません。 www.youtube.com/watch?v=dEOh0asfVJ0を動かす主なもの

そして実際には、コントローラー。 Freeduinoのサンドイッチとイーサネットシールド


そして最後に



神様、トピックが公開されたときにHabraeffectに耐えられるようにサーバーに力を与えてください。 そして、強さの夜明けにカメラを曲げさせないでください。

PS Opera 10.63と最新のChromeで動作を確認しました。 他のブラウザは理論的に対処する必要があります。

PPSこの機会に、SysCat habrayuzerに挨拶したいと思います。彼はかつて私の最初のArduinに電子メールを送ってくれたので、たくさんの興味深い研究に追い込まれました。

UPD>最も重要なことを忘れました-動作するWebインターフェースはここにありますwww.g0l.ru/test/serva
理解して扱ってください-カメラとサーボはゴムではないので、すでに動いている場合はけいれんしないでください。 朝までオンにしておきます。それから私はそれを持って仕事に行き、そこでオンにします。

UPD>管理はWebインターフェースを介して行われますが、ゲームパッドから行われます。 ゲームパッドボタンをキーボードボタンにマッピングするには、Joy2Keyタイプのソフトフォンが必要です。 キーボードWASDにボタンを上下左右に割り当てると、ゲームパッドから制御できます。 基本的なキーボードボタンも機能します。

Source: https://habr.com/ru/post/J108058/


All Articles