Arduino 101とIntel Edisonで作る鳥観察IoTステーション – センサー、Webカメラ、クラウド連携
部品と材料
| Arduino 101 | 1 | |
| Intel Edison | 1 | |
| Logitech C270 HD Webカメラ | 1 | |
| Pololu Sharp GP2Y0D815Z0F デジタル距離センサー(15cm) | 2 | |
| Adafruit 角型FSR(フォースセンシティブ抵抗)Interlink 406 | 1 | |
| Adafruit Si7021 温湿度センサーブレークアウト | 1 | |
| Seeed Grove Starter Kit Plus, Intel IoT Edition | 1 | |
| コンデンサ 47µF | 2 | |
| 抵抗 1kΩ | 1 | |
| Adafruit ターミナルブロック 2ピン 3.5mm (5個パック) | 1 | |
| Adafruit コンパクトスイッチング電源 3-12V可変 | 1 | |
| Adafruit Perma-Proto 1/4サイズ ブレッドボードPCB | 1 | |
| ジャンパーワイヤー | 1 |
必要な工具と機器
- 3Dプリンター
- はんだごて
アプリとオンラインサービス
- Intel XDK for IoT
- Autodesk Fusion 360
- PubNub Publish/Subscribe API
- Cloudinary
- noble.js
このプロジェクトについて
「鳥のために!」 – Arduino 101でエコモニタリングの未来を再発明
導入と動機
気候と生態系の健康を測る一つの方法は、動物相の規模と多様性を測ることです。1987年から毎冬、コーネル大学鳥類学研究所は「プロジェクト・フィーダーウォッチ」という大規模な市民科学プロジェクトを実施しています:
「プロジェクト・フィーダーウォッチは、北米の庭先、自然センター、コミュニティエリアなどの餌台に訪れる鳥を冬期間通じて調査するものです…どの鳥種が訪れ、各種が何羽観察されたかのデータが蓄積され、鳥類の冬季分布と個体数の変化を長期的に把握できます。」
初参加の今年、メイキング/ハッキングの興味と自然観察、フィーダーウォッチ参加を融合し、Arduino 101で鳥観察と環境モニタリングの未来を再発明することにしました。
Arduino 101は、Arduino IDEの手軽さ、オンボードBluetooth LE、豊富なセンサー/ブレークアウトボードが揃っており、このプロジェクトに最適です。自作バードフィーダーにArduino 101を組み込み、気象パラメータ測定と鳥の活動監視を行う実験プラットフォームを開発。CloudinaryとPubNubのIoT技術を加え、環境/生態系健康モニタリングの未来を切り拓きます!
プロジェクト概要

核心: Arduino 101搭載バードフィーダー
- Sharp赤外線距離センサー×2で、フィーダーを貫通する木製止まり木に留まる鳥を検知
- FSR(フォースセンシティブ抵抗)で餌の残量を検知
- Adafruit Si7021温湿度センサー(I2C接続)で気象データ取得
- Arduino 101をBLEペリフェラルとして動作、センサーデータをBLEでセントラルデバイスへ送信
- 単3電池4本で駆動、全コンポーネントをカスタム3Dプリント筐体に収納
ゲートウェイ: Intel Edison(Arduinoブレークアウトボード上)
- BLEセントラル兼インターネットゲートウェイとして動作
- Logitech C270 USB Webカメラを接続、BLE通知受信時に撮影
- 画像をブレークアウトボードのSDカードスロットに保存
- EdisonのWi-Fi機能でインターネット接続、PubNubでリアルタイムデータストリーミング、Cloudinaryでクラウド画像保存/変換

バードフィーダーは空の2Lペットボトルと木製止まり木で自作し、庭の杭から吊り下げました。

プロジェクトの構築
Arduino 101: 組み込みバードフィーダー
屋外設置に耐える必要があり、リアルタイム無線伝送が必須。距離は数フィートなのでオンボードBLEを採用。
回路の大半はFritzing図に従えば組めますが、いくつか課題がありました:
課題1: 屋外での鳥検知
屋外で動作し、風雨から保護され、鳥を驚かせず、止まり木上のみを検知するセンサーが必要。PIRセンサーは検知範囲が広すぎて枝の揺れ等のノイズを拾う。Sharp IRセンサーは検知範囲が極めて短く(数cm)、ペットボトル壁越しでも検知可能で最適でした。
課題2: 2つのSharp IRセンサーが同時動作しない
1個目は動作したが、2個目を繋ぐと両方動かない。原因究明の末、製品FAQで解決策発見:このセンサーは短時間に大電流を消費するため、電源が不安定だと誤動作する。各センサーの電源・グランド間に10µF以上のコンデンサを追加せよとのこと。47µF電解コンデンサを各センサーに追加し、両方をArduinoの5Vピンから直接給電することで解決。
課題3: 餌残量の自動測定
フィーダーウォッチ推奨の「餌の重量測定・消費量算出」を自動化したく、FSRを採用。アナログ入力に接続するが、指圧では反応するのに餌の重量変化では反応が鈍い。
解決策:
- 分圧抵抗の値を下げて感度向上
- パスカルの原理に着想:FSR全面に重みを分散せず、中央に小さな接点を持つプラットフォームを設け、餌の重力を一点に集中させる(スノーシューの逆)。これで劇的に感度向上!
FSR接続には2ピン3.5mmターミナルブロックで確実に。
Si7021はI2Cバス(3.3V駆動)に接続。IR/FSRセンサーはPerma-Proto基板にはんだ付けし、Arduino 101裏面に両面テープで固定。全体をペットボトルフィーダー内に収納。氷点下、霧雨、雪(偽ブリザード「Stella」!)でも動作継続。
Arduino 101 スケッチのポイント
メインの仕事はセンサー監視とBLE通知。BLEでは全データをバイト列として送信するため、float/intをバイト配列に変換する必要があります。unionを使うと同一メモリを異なる型で共有でき便利です:
union { float t; unsigned char bytes[4]; } tempData;
union { float h; unsigned char bytes[4]; } humidityData;
union { int f; unsigned char bytes[2]; } feedData;
float値をunionに格納するとbyte配列も自動更新され、setValue()で送信可能。
delay()はプロセッサーを止めるためBLE通知に悪影響。代わりに非ブロッキングなミリ秒カウント方式(Adafruit Bill Earl氏のチュートリアル参照)で疑似マルチタスクを実現:
void Update() {
currentPerchMillis = millis();
if ((currentPerchMillis - previousPerchMillis) > perchInterval) {
previousPerchMillis = currentPerchMillis;
currentLeftPerch = digitalRead(LEFT_PERCH);
currentRightPerch = digitalRead(RIGHT_PERCH);
if ((currentLeftPerch == 0) && (previousLeftPerch == 1)) {
perchCharacteristic.setValue(1); // BLE通知
Serial.println("LEFT PERCH ACTIVITY");
previousLeftPerch = 0;
}
// ...右側も同様
}
// 温湿度、FSRもインターバルごとに読み取り
}
void loop() {
blePeripheral.poll();
birdFeeder.Update();
}
Intel EdisonとArduinoブレークアウトボード
Edisonセットアップで最も難しいのは初期設定。Vincent Wong氏の「Intel Edison and Intel XDK IoT Edition 101」が最良のチュートリアルです。これをやり抜く価値あり!
Intel XDK IoT Editionでコマンドライン操作し、JavaScript/Node.jsでプログラミング。PubNub、Noble.js、Cloudinaryなど強力なAPIが簡単に使えます。
Wi-Fi接続確認後、必要ライブラリをインストール:
npm install noble
npm install pubnub
npm install cloudinary
USB Webカメラのセットアップ
Logitech C270はUVC対応。Yocto Linux(EdisonのOS)でuvcvideoモジュールが必要。以下の手順で導入(Intel XDKシリアルターミナルで実行):
vi /etc/opkg/base-feeds.conf
# 以下のリポジトリ行を確認/追加
src/gz all https://repo.opkg.net/edison/repo/all
src/gz edison https://repo.opkg.net/edison/repo/edison
src/gz core2-32 https://repo.opkg.net/edison/repo/core2-32
src intel-iotdk https://iotdk.intel.com/repos/3.0/intelgalactic/opkg/i586
opkg update
opkg install kernel-module-uvcvideo
# Webカメラ接続後
ls -l /dev/video*
# /dev/video0 が見えればOK
opkg install fswebcam
# cronieは不要(タイマー撮影ではなく鳥検知トリガー撮影のため)
# テスト撮影
fswebcam -r 1280x720 --jpeg 100 -D 3 -S 13 "test.jpg"
さらに、マイクロUSB/USB切り替えスイッチをUSBポート側に倒し、Adafruitコンパクトスイッチング電源(3-12V可変)で給電。
SDカードをスロットに挿入し、コマンドラインで確認:
cd /media/sdcard
ls
# エラーが出たら reboot で再起動して再確認
Bluetooth有効化:
rfkill unblock bluetooth
bluetoothctl
scan on
# 近くのBLEデバイスがリスト表示される

Intel XDKでBLESCANプロジェクトを開き、index.jsを本プロジェクトのコード(GitHub参照)に置き換え、package.jsonの依存関係も更新。Arduino 101電源オンでEdisonコード実行。検知されれば成功。

コード詳細
Edison側コードはNode.js。必要なライブラリからオブジェクト生成後、Arduino 101側のBLEサービス/キャラクタリスティックUUIDを定義:
// noble.js用BLE定義(ダッシュなし!)
var LOCAL_NAME = 'bird';
var SERVICE_UUID = '917649a0d98e11e59eec0002a5d5c51b';
var PERCH_UUID = '917649a1d98e11e59eec0002a5d5c51b';
var TEMPERATURE_UUID = '917649a2d98e11e59eec0002a5d5c51b';
var HUMIDITY_UUID = '917649a3d98e11e59eec0002a5d5c51b';
var FEED_UUID = '917649a4d98e11e59eec0002a5d5c51b';
noble.jsでペリフェラル検出→接続→サービス/キャラクタリスティック検出→通知有効化の流れ。重要な変更点:古いnoble.jsでは'read'イベントだったが、新版では'data'イベントで通知データを受信(characteristic.on('data', callback(data, isNotification)))。この変更で数時間ハマったため注意喚起。
受信データはtransformRawData(characteristic.uuid, data)で処理。停まり木検知時はchild_process.execFile('fswebcam', ...)で撮影コマンド実行。これが非常に強力な機能です。
PubNubとCloudinaryの活用
同じ関数内でPubNubとCloudinaryも動作!
- PubNub: リアルタイムデータストリーミングネットワーク。インターネット接続さえあれば世界中にデータ配信可能。購読キーを持つあらゆるアプリがJSONペイロードでデータ取得可能。餌残量、温度、湿度、訪問回数、最新3枚の画像URLを配信。
- Cloudinary: 画像アップロード/保存/変換サービス。APIが極めてシンプルで強力。ヘルプデスクも優秀。ローカルSDカードの最新3枚をアップロードし、返ってきたURLを配列に保存、PubNubペイロードに含めて送信。HTMLページで表示可能。
index.html – ポータブルUI
PubNubでデータストリーミング、Cloudinaryで画像公開URL取得しているため、JavaScript/HTML/CSSだけでポータブルUIが作れます。サーバー不要!
// PubNubとEon.js読み込み
<script src="https://cdn.pubnub.com/sdk/javascript/pubnub.4.5.0.js"></script>
<script src="https://pubnub.github.io/eon/v/eon/1.0.0/eon.js"></script>
<link rel="stylesheet" href="https://pubnub.github.io/eon/v/eon/1.0.0/eon.css" />
// PubNubオブジェクト作成(購読キー設定)
var pubnub = new PubNub({ subscribeKey: "your_subscribe_key" });
// チャンネル購読とペイロード処理
pubnub.subscribe({channels: ['feederView']});
pubnub.addListener({
message: function(m) {
var msg = m.message;
var theURLMSG = JSON.parse(JSON.stringify(msg));
var imageIndex = theURLMSG["imageIndex"];
if (theURLMSG.latestView != null) {
if (imageIndex=="0") document.getElementById("myImage0").src = theURLMSG["latestView"];
else if (imageIndex=="1") document.getElementById("myImage1").src = theURLMSG["latestView"];
else if (imageIndex=="2") document.getElementById("myImage2").src = theURLMSG["latestView"];
}
}
});
PubNubのEon.jsライブラリでグラフ表示ウィジェットも簡単作成。チュートリアルとウェビナーが充実。
バードフィーダーと筐体
フィーダー製作は簡単。2Lペットボトルを約11cmの高さで真っ直ぐカット、底部分に約3cmの穴を開けて木製止まり木を通す。電子機器パッケージを入れてサイズ確認(ぴったり)。上部はキャップ下に小穴を開けワイヤーで吊り下げ用フックを作り、四方に異なる高さで穴を開け(様々な鳥サイズ対応+餌の匂い拡散)。上下をマスキングテープで固定(センサー部分は避ける)。透明梱包テープでも可。漏斗で餌を入れて庭に設置、鳥の来訪を待つ。
3Dプリント筐体:ペットボトル直径をラベル長(円周)から逆算(約105mm)。Arduinoと2枚のブレッドボードを収納するケース、取り出し用ハンドル付き蓋、電池ボックス収納部(フィラメント節約設計)、FSR用プレートを設計・プリント。ネジ止めしてコンパクトなパッケージに。





テストとデプロイ
設置前に系統的テストを実施:
- BLE接続確認: nRF Master Control AppでArduino 101の通知動作確認(BLEデバッグに必須ツール)。家の外からでも十分な通信距離を確認。
- Edison準備後、再確認。ステップバイステップで切り分けが重要。
- 電池消耗時、最初に失われる機能はBLE通信であることも判明。
FSRキャリブレーションでは、接点プラットフォーム採用で全体的に非線形ながら線形領域が得られました。これをEon.jsゲージの最小/最大値と色レンジに反映。将来的に正確な消費量推定に発展させたい。
デプロイメントギャラリー
このプロジェクトの醍醐味は写真レビュー!CloudinaryダッシュボードまたはSDカードで確認可能。鳥がフィーダーを見つけると数時間で2,000枚以上のJPEGが生成されます(誇張ではありません)。
Seeed Studio Groveキットでさらなる進化
SeeedStudioキットで再設計・テスト中。コンテスト締切に間に合わなかったが、自腹でGrove Starter Kitを購入。ベースシールドの電源回路のおかげで、Sharp IRセンサー2個がコンデンサなしで正常動作! 配線も大幅に簡素化。
標準Grove赤外線センサーはSharpとは異なるため、ソリッドワイヤーをGND/Vin/SIGにはんだ付けしてベースシールド互換に改造:

プロジェクト・フィーダーウォッチとの整合性と結論
元の着想はフィーダーウォッチ初参加。私たちのIoTフィーダーはどう整合するか?

フィーダーウォッチの公式手法:連続2日間で、特定鳥種が同時に観察された最大数を報告。私たちの止まり木カウントとは直接合致しません。しかし、環境パラメータ測定と餌消費量の自動化は合致。訪問鳥の静止画撮影は同定学習に役立ち、「希少鳥」訪問時の写真証拠にもなります。
PubNubネットワークでのライブストリーミングの可能性は巨大。世界中のバードウォッチャーや教室でデータ/画像をリアルタイム共有可能。PubNubのClarifaiブロックで鳥種自動判定、Cloudinaryブロックで悪天候画像補正、他のSeeed/Groveセンサー追加など、今後の展開が楽しみです。
ギークメイカーとしても大いに楽しめました。リアルタイムで鳥を観察し、後で何千枚もの写真から「宝探し」のように発見するのは最高。餌データが一日で減っていく様子をEon.jsで見るのも面白い。Arduino、Edison、Grove、PubNub、Cloudinary、3Dプリントが一体となって動く達成感は格別。皆さんもフィーダーウォッチに参加して、最後にこう言えることを願っています……「それは鳥のためだ!」
コード
It's For the Birds!
このプロジェクトに必要な全コードファイルはこちら:https://github.com/lachendeKatze/ItsForTheBirds
カスタムパーツとエンクロージャ
.stlファイル
「ペットボトル内蔵型」バードフィーダー構築に必須のSTLファイル:https://github.com/lachendeKatze/ItsForTheBirds/tree/master/3DBuild
回路図
バードフィーダーに内蔵される回路:

Edison側回路はシンプル。WebカメラのFritzingパーツが見つからなかったため実物写真で代用:

製造プロセス
- Raspberry Pi向けコンパクトDHT温湿度ブレークアウト – ATtiny85 & DHT22/DHT11
- HC-SR04超音波センサーをRaspberry Piに接続する実践ガイド
- Raspberry Piの可能性を最大限に引き出す必須アクセサリー
- SIGHT:視覚障害者を支援するスマートグラス
- インダストリー4.0への5S導入:実装課題を克服する
- Intel Edison IoT:次世代IoTプロトタイプに最適なミニコンピューター選び
- 適切な充填センサーの選び方:精度、信頼性、収益性
- 先進TOMOPLEXセンサーフィルムで航空宇宙機のリアルタイム監視を実現
- ISSセンサー向け高精度WiFi RSSIトラッキング
- 革新的数学フレームワーク、エンジニアの最適航空機センサー選定を支援
- IntelとUdacityが提携、エッジAI開発の認定学位プログラムを提供