RaspberryPiでサーボモーターと専用カメラを利用してネットワークカメラ作成途中 | オヤジのブログ

オヤジのブログ

Yahooからの避難組/FC2と2足のわらじ/趣味やら日々の出来事やら

RaspberryPiでサーボモーターと専用カメラを利用してネットワークカメラを作成途中。

 

Youtubeにカメラ画面を入れた動画をアップしたので備忘も兼ねてこちらでも改めて詳細を書きます。

何をしてるかは動画を見てもらえればおおよそは分かると・・

RaspberryPiでサーボモーターと専用カメラを利用してリモートでパン&チルトができるネットワークカメラの製作途上。
マイコン      :RaspberryPi model B+
               CPU:ARM 700MHz 512MBメモリ
カメラ        :よく分からないコピー品
サーボモーター:Miuzei-sg90
使用言語      :C言語,HTML,JavaScript
ソフトウェア  :MJPG-Streamer /pigpio(c言語ライブラリ)/Apache2

庭を監視する必要があり、RaspberryPiと模型用のサーボモーターでパン&チルトで画角可動な監視カメラを作成途上です。
RaspberryPi model B+ はシングルコアのワンボードマイコンです。
40ピンのI/Oピン(GPIO)があり最近のRaspberryPi用のC言語/Pythonライブラリである「pigpio」およびそのデーモンである「pigpiod」を使うとそのうち32ピンでpwmが使え、サーボモーターのコントロールも簡単にできるようになります。

(※もちろんpigpioを扱うにはC言語もしくはPythonでプログラムが書け、コンパイルなどができるほどにはコンピュータに詳しいことが条件ですが、僅か数行ですので、初心者でもそう難しくはない・・・かな。ちなみにpwmは、細かくオンオフを繰り返すことで時間あたりの電流量をコントロールし、モーターの回転数を変えたりLEDの明るさを変えたりするための技術。)
なお、カメラの映像を得るために「MJPG-Streamer」というソフトを使っています。
また、それをwebページとして閲覧かつ操作するために、webサーバーで有名な「apache2」というソフトを使っています。
当初、映像は「motion」という、これも有名な動体感知機能のついた映像ソフトを使っていたのですが、シングルコアのRaspBerryPiB+では動作が厳しく、コマ送り映像にしかならないのでもっと軽い動作のMJPG-Streamerに切り替えることにしました。(それでもpigpiodとのダブルでの動作は荷が重いようです)
MJPG-Streamerはそれ単体でもwebサーバー機能を持っており、設置した時点で、同一のネットワークからは、他のパソコンのブラウザからそのCPU(この場合はラズパイ)のIP+8080ポート指定ですぐに映像を見ることができます。
(例えば 192.168.1.10:8080 など)
ですが、今回はそこにパン・チルト用にサーボのコントロールボタンをつける必要があったため、別途Apache2を立ち上げてページを作り、そのページにiframeタグで
<iframe src="http://192.168.1.10:8080/?action=stream" width="640" height="400">
のような感じで MJPG-Streamerの動画像を貼り付けています。
/?action=streamの指定はMJPG-StreamerのページにSource snippetとして書いてあったものです。
そこへ、

<html>
    <head>    
    <meta charset="UTF-8">
        <title>web camera foundation</title>
        <script>
            function left(){
                    fetch("/cgi-bin/pigpiod_left.cgi");

                    //alert("left");
            };
        </script>
    </head>
    <body>
        <button onclick="left()" >←</button>

    <br><br>

    <iframe src="http://192.168.1.10:8080/?action=stream" width="640" height="400">

    </body>
<html>
<!--もちろんこれだけでは動きません-->

みたいな感じでボタンでJavaScriptからcgiとしてコントロール用のcプログラムを呼び出してサーボモーターを駆動しています。

ちなみに、RaspberryPiのGPIOを動かすにはルート権限が必要になりますので、直接web上からpigpioライブラリを使ったプログラムを呼び出すとエラーになります。
このため、pigpioのサーバー版であるpigpiodをルートで立ち上げおき、そこを介してGPIOを操作する事になります。
詳しくはそれぞれのHPに詳しいです。

リンク:MJPG-Streamer  カメラ用ソフト
                       https://github.com/neuralassembly/mjpg-streamer
             〃解説    https://ponkichi.blog/mjpg-streamer/

        pigpio         RaspberryPiのGPIO用ライブラリ
                       https://abyz.me.uk/rpi/pigpio/

       Apache        Webサーバープログラム
                       https://httpd.apache.org/download.cgi

 

こういうの忘れちゃうので一応備忘で入れとく。