ヘルニアクソ野郎エンジニアblog

~ヘルニアでHell near~

unitv2とRaspberry Pi picoで遠隔操作ネットワークカメラの作成(micropython))

calendar

サーボモーターの扱いにほんの少しですが慣れてきましたので、遠隔操作で視点を調整できるネットワークカメラを作成いたしました。

カメラとWEBサーバーはunitv2、サーボモーターの制御にRaspberry Pi picoを使用しました。※WEBサーバーはpython http.serverを使います。

流れ的には、

unitV2→uart→Raspberry Pi pico→サーボモーター

となります。

プログラムはサーバー側にhtml/css,js,cgi(python), サーボモーター側にmicropythonとなっています。

ブラウザでunitv2のサーバにアクセスして、そこにカメラストリーミング表示とボタンをを設置し、遠隔操作出来るようになっています。

簡単なものになりますが、備忘録のためにまとめておこうと思います。

 

 

スポンサーリンク

初めに

使用するもの

・unitv2

・raspberry pi pico

・サーボモーター(SG90) × 2

・ジャンピングワイヤー多数

・ブレッドボード

・適当な土台

 

 

遠隔から左右上下にカメラを動かせるものを作るので、適当な土台が必要です。

 

 

土台作成

我ながらセンスのかけらも見当たりませんが、とりあえずサーボモーターを左右と上下に振れるように細工します。

OKOK、何となく形になればいいんですよ。

続いてプログラムを書きます。

 

 

unitv2

html/css

 

 

javascript

jsからpythonに値を送りたいので、ajaxの非同期通信を行っています。これでpythonのCGIスクリプトが動かせます。

※CGIについては過去記事で詳細をまとめています。↓

CGI(python)

jsからpostされた値を受け取って、uartでpicoに転送しています。

uartについても詳細は過去記事でまとめています。↓

 

 

Raspberry Pi pico

micropython

先頭の方でサーボモーターの設定、uartの受信設定を行っています。

1つ目のwhile文ですが、一見いらないように見えますが、ここがハマりどころで1日悩みました。

leadlineでunitv2からの値を受け取っているのですが、どうもpicoをスタンドアロンで起動した場合、入力が無い状態の一発目の値が空である「None」にならず、何等かの値が転送されてきているみたいです。

ここのループ処理がなければ次のループ内にある「decode」のところでループ処理がストップしてしまう挙動になってしまい、「IDEではスタート出来るがスタンドアロンだとプログラムが起動しない」という頭が混乱する症状を発生してしまうので、とにかく一発目のゴミをループで除去しました。(他にもっと良いやり方あるんでしょうけど。。)

下半分は、押してる間だけボタンの方向にサーボが動かし、現在の位置は変数を使ってキープさせています。

プログラムは以上です。

 

 

ハードウェア

回路組立て

pico配線

汚い配線図で申し訳ないですが、図のような感じです。(ブレッドボードを使えばこんな配線にはなりませんが。。)

電源は5V2A位のモバイルバッテリー1個で大丈夫だと思います。

これで完成になります。

 

 

完成

配線丸見えだし、少しタイムラグが気になりますが、初めにしては上出来だという事にしておきます。