明日開催する、表題の体験ラボの準備をしています。
簡単な電子工作・プログラミングによる行動実験系構築。Pythonを使ってモータやカメラを制御します。

これが準備している実験装置の全景。
魚をいれた水槽が左のテーブルの上にのっていて、中の魚の様子を水槽の手前に設置したUSB接続のWebカメラから撮影してノートPC上で表示しています。ここまでは数千円のWebカメラと適当なフリーウェアがあればすぐ魚の様子を記録することができます。
じゃあ、Webカメラを使って魚の様子を覗き見しながら、餌(になりそうなもの)をあげたら、それに魚がよってくるかどうかを調べるにはどうすればよいでしょう。
餌を手で持って水槽の上から撒いてあげる?
そんなことしたら、ヒトに慣れている魚だったら直ぐに餌だと思って寄ってくるかもしれませんが、それって予め条件づけした行動ですよね?そんな条件づけを行わずに臆病でヒトの気配がしただけで怯えてしまう魚の行動を調べるにはどうすればよいでしょう?
魚からヒトの姿・気配がわからないようにして、
餌をやるのもヒトがやったとわからないようにすればよい
ですよね。そこで、私達はこれを使います。

このケースの中に入っているのはArduino(アーデュイノ)といって、あらかじめプログラムを書き込んで使用する小さなコンピュータ(マイクロコンピュータ)です(値段はAmazonで一個1000〜2000円程度)。
Arduinoは温度や明るさなどを測るセンサーを繋いだり、モータを繋いでものを動かすことができます>例えば明るさセンサーで周りが暗くなってきたら、モータで部屋の壁にある照明のスイッチを押す装置をつくることができる。ロボコンコンテストでロボットの手や脚の制御に使われているのもこのArduino。
Arduinoは単独で使えますし、プラグラムをかきこむときに使うUSBケーブルでパソコンと繋いでおけば、パソコンからの命令を使って、Arduinoに接続したモータなどいろんなものを動かすことができます。

そこでArduinoに小さなモータ(同じくAmzonで一個300円くらい)をとりつけて、その先にエッペンドルフチューブの蓋を切ったものをとりつけると、これだけで自動餌やり機ができてしまいます
では、この「Arduinoとモータを使った自動餌やり機」と「Webカメラ」を使って、動画の記録開始からピッタリ10秒後に餌をあげると、魚がどれくらい早く気づいて寄ってくるか、記録するにはどうすればよいでしょうか?それにはコンピュータを使って、これらの機械を同時コントロールしてしまえば可能になります。そのようなことをするには通常、高価な市販ソフトウェアを使用するか、自分でプログラムを書く必要があります。
その目的のために私達の部屋では、psychopy(サイコパイ)と呼ばれる、心理学の研究で使用するPythonプログラムを作成するための無料ソフトウェアを使用しています。

psychopyは本来はPythonのライブラリですので、通常のPythonプラグラムのようにプログラムをイチから書くこともできますが、psychopy builderというアプリを使用すると上の写真のようにウインドウの中にいろんな部品を配置することで、画面になにを表示する、カメラを使って動画を記録する、キーボードを押すことで次の動作をさせる、なんてことを指定することができます。
「プログラムで他の装置をコントロールする?なんか難しそう」
という部分をまるでレゴブロックを組み合わせるかのような感覚で行うことができます。
以下のXの投稿には、こうやってつくった自動餌やり・行動記録装置が動いているところの動画をアップしてあります。https://x.com/Abe_NagoyaU/status/1826507432493002921
そしてもっと素晴らしいのは、psychopy bulderで作成したプログラムは通常のPythonのプログラムの形に自動変換してくれること。今回使用したPythonコードはpsychopy builderを使ってGUIベースで作成したプログラムをpythonプログラムに自動変換したものです(最初,プログラムそのものを公開しておりましたが,あまり無償でノウハウを流出させるのもと考え直して非公開にしています。このやりかたに興味を持たれた方は,阿部までお問い合わせください)。
近年,スマート農業やスマート漁業など,環境の様々なデータをセンサーで取得して,それらのデータを活用して水やりや給餌をコントロールする技術が活用されつつありますが,いずれも製品化されたものや業者に特注で作ってもらったものは大変高価です。そんな装置を遊園地に1日遊びに出かけるくらいのお金で実現できる「ワザ」を身につけれますよ♪
参考とした資料
概ね以下の資料を参考にして、適宜機能を組み合わせて作成しています。


