『子供の科学2026年6月号』の「AkaDakoものづくりラボ」では、2026年5月号に引き続き、JavaScriptで「自動猫じゃらしマシン」をつくりました。ただ、今の人感センサーを使う方式は、ネコだけでなく人でも反応してしまいます。
2月号から4月号で紹介した生成AIを使ってネコの判定をしても良いのですが、生成AIを使う方法は、判定に時間がかかる上に、使用するために費用がかかったり、年齢制限の問題もあります。
そこでここでは「COCO-SSD」を使います。これは、GoogleのTensorFlow チームが開発したAIモデルで、カメラ映像から80種類の一般的なオブジェクト(人、車、イヌ、ネコなど)を素早く認識することができます。
■プログラムを改造しよう
今回は、ブラウザ上で簡単に機械学習を利用できる「ml5.js」 というライブラリーを使ってCOCO-SSDを利用します。以下はサンプルプログラムです。
コメントを入れたPDFは下記のボタンよりダウンロードができます。がんばって読んでみてください。
<html>
<head>
<meta charset="UTF-8">
<title>AIねこじゃらし</title>
<script src="https://unpkg.com/ml5@0.12.2/dist/ml5.min.js"></script>
<script src="https://699.jp/src/js/akadako.js"></script>
<style>
video { width: 400px; border: 5px solid #fff; border-radius: 10px; }
</style>
</head>
<body>
<h1>ねこじゃらし(AIカメラ版)</h1>
<div>
<video id="myVideo" autoplay playsinline></video>
</div>
<script>
async function servo(board,speed,angle,ms) {
await board.runServoTurn(AkaDako.DigitalWrite.A1,speed,angle);
await new Promise(r => setTimeout(r, ms));
}
async function main() {
let timer = 0;
const board = await AkaDako.connect();
const video = document.getElementById('myVideo');
const stream = await navigator.mediaDevices.getUserMedia({ video: true });
video.srcObject = stream;
await new Promise(r => {
video.onloadedmetadata = r;
});
const detector = await new Promise((resolve) => {
const d = ml5.objectDetector('cocossd', () => {
resolve(d);
});
});
setInterval(() => {
if (timer > 0) timer--;
}, 1000);
while (true) {
const results = await new Promise(r =>
detector.detect(video, (err, res) => r(res || []))
);
if ( results && results.find(obj => obj.label === 'cat') ) {
timer = 30;
}
if (timer > 0) {
await servo(board,20,-60,4000);
await servo(board,100,60,1000);
await servo(board,100,55,200);
await servo(board,100,60,200);
await servo(board,100,55,200);
await servo(board,100,60,4000);
} else {
await new Promise(r => setTimeout(r, 100));
}
}
}
main();
</script>
</body>
</html>
■実験してみよう!
マリちゃんは、「自動猫じゃらしマシン」が飼いネコのくーちゃんとマリちゃんを間違えないかどうかを実験します。ネコを飼っていない人は、スマートフォンなど別の端末でネコの画像を検索して、パソコンのカメラに見せてください。

うわっ!動いた!

じゃあ、今度はマリちゃんがカメラの前に立ってみるとどうなるかな?

人間だから反応しない。すごーい!
文
