Полный стартовый набор Arduino и Intel Edison: датчики, веб-камера и аксессуары
Компоненты и материалы
| Arduino 101 | ×1 |
| Intel Edison | ×1 |
| Logitech c270 HD Webcam | ×1 |
| Pololu Carrier с Sharp GP2Y0D815Z0F (цифровой датчик расстояния 15 см) | ×2 |
| Adafruit Square FSR (Interlink 406) — датчик силы | ×1 |
| Adafruit Si7021 — датчик температуры и влажности (I2C) | ×1 |
| Seeed Grove Starter Kit Plus, Intel IoT Edition | ×1 |
| Конденсатор 47 мкФ | ×2 |
| Резистор 1 кОм | ×1 |
| Adafruit Terminal Block 2-pin 3.5mm (упак. 5 шт.) | ×1 |
| Adafruit Compact Switching Power Supply 3-12VDC | ×1 |
| Adafruit Perma-Proto Quarter-sized Breadboard PCB | ×1 |
| Перемычки (набор) | ×1 |
Инструменты
- 3D-принтер
- Паяльник
Приложения и сервисы
- Intel XDK for IoT
- Autodesk Fusion 360
- PubNub Publish/Subscribe API
- Cloudinary (хранение и трансформация изображений)
- noble.js (BLE для Node.js)
О проекте
«Это для птиц!» — переосмысление эко-мониторинга с Arduino 101
Введение и мотивация
Здоровье экосистемы оценивают по разнобразию фауны. С 1987 г. Корнельская лаборатория орнитологии проводит Project FeederWatch — зимний учёт птиц на кормушках по Северной Америке. Данные показывают изменения в ареалах и численности видов. Мы захотели совместить мейкинг, природу и участие в проекте — создали IoT-кормушку на Arduino 101.
Arduino 101 идеален: простота IDE, встроенный BLE, множество датчиков. Встроили в самодельную кормушку: 2 ИК-датчика расстояния (птицы на жерди), FSR (уровень корма), Si7021 (погода). Arduino 101 — BLE-периферия, шлёт данные центральному устройству. Питание — 4 АА батареи. Всё в 3D-печатном корпусе.

Intel Edison на Arduino Breakout Board — BLE-центральное устройство и интернет-шлюз. Logitech c270 веб-камера по USB делает фото при срабатывании ИК-датчиков, сохраняет на SD-карту. Wi-Fi Edison используется для PubNub (реальное время) и Cloudinary (изображения в облаке).

Кормушка из пластиковой бутылки и деревянной жерди, висит на столбе во дворе.
Сборка проекта
Arduino 101 — встроенная кормушка
Основа — Arduino 101 в кормушке. Нужна беспроводная передача в реальном времени на небольшое расстояние — BLE идеален.
Схема на Fritzing, но были проблемы:
- 1. Детекция птиц на улице. Нужен датчик, работающий на улице, защищённый от погоды, не пугающий птиц, срабатывающий только на жерди. PIR — слишком широкий угол, срабатывает на ветках. Выбрали Sharp GP2Y0D815Z0F — короткий диапазон, работает через пластик бутылки.
- 2. Два датчика не работали вместе. После подключения второго — сбой. Причина: питание. Датчик потребляет импульсные токи. Решение из FAQ: добавить 10–47 мкФ конденсатор у каждого датчика. Добавили 47 мкФ электролитов — заработало. Важно: оба питания прямо с пина 5V Arduino.
- 3. Измерение уровня корма. FSR — резистор, меняющий сопротивление под силой. Сначала не чувствовал корм. Решение: делитель напряжения с более низким вторым резистором + механический усилитель давления (маленькая площадка в центре FSR, как противоположность снегоступу). Сработало!
Остальное просто: Si7021 на I2C (3.3В), питание от 4хАА батарейного отсека под корпусом. Датчики припаяны к Perma-Proto платам, закреплены на Arduino 101 двухсторонним скотчем. Пакет выжил в мороз, дождь и снег.
Скетч Arduino 101
Главная задача — опрос датчиков и отправка по BLE. Данные в BLE — байты. Для float (температура, влажность) используем 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 — байты готовы для setValue() характеристик.
Избегаем delay() — останавливает процессор и мешает BLE. Используем неблокирующие таймеры (метод Bill Earl / Adafruit). Объект устройства, интервалы опроса, функция Update(), вызываемая в loop():
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);
Serial.println("LEFT PERCH ACTIVITY");
previousLeftPerch = 0;
}
// ... аналогично для правого, температуры, влажности, корма
}
}
void loop() {
blePeripheral.poll();
birdFeeder.Update();
}
Intel Edison и Arduino Breakout Board
Самое сложное — настройка Edison. Лучший туториал: Vincent Wong «Intel Edison and Intel XDK IoT Edition 101». После настройки Wi-Fi ставим библиотеки:
npm install noble
npm install pubnub
npm install cloudinary
USB-веб-камера
Logitech c270 — UVC-совместима. В Yocto Linux (на Edison) нужен модуль uvcvideo. Инструкции:
vi /etc/opkg/base-feeds.conf
# добавить репозитории
opkg update
opkg install kernel-module-uvcvideo
ls -l /dev/video* # должно появиться /dev/video0
opkg install fswebcam
# тест: fswebcam -r 1280x720 --jpeg 100 -D 3 -S 13 "test.jpg"
Также нужен переключатель USB на плате в сторону USB-порта и внешний блок питания (Adafruit 1448). SD-карта в слот, проверка cd /media/sdcard && ls. Bluetooth: rfkill unblock bluetooth && bluetoothctl -> scan on.
В Intel XDK создаём проект, заменяем index.js на наш код (из GitHub), загружаем. При включённом Arduino 101 должно обнаружиться устройство «bird».


Код на Edison (Node.js)
Используем noble.js для BLE. UUID сервиса и характеристик (без дефисов!):
var LOCAL_NAME = 'bird';
var SERVICE_UUID = '917649a0d98e11e59eec0002a5d5c51b';
var PERCH_UUID = '917649a1d98e11e59eec0002a5d5c51b';
var TEMPERATURE_UUID = '917649a2d98e11e59eec0002a5d5c51b';
var HUMIDITY_UUID = '917649a3d98e11e59eec0002a5d5c51b';
var FEED_UUID = '917649a4d98e11e59eec0002a5d5c51b';
Сканирование, подключение, обнаружение сервиса/характеристик, подписка на уведомления (notify(true)). Ключевой момент: в новых версиях noble событие данных — 'data', а не 'read'. Функция transformRawData(uuid, data) обрабатывает входящие данные.
При активности на жерди — вызываем fswebcam через child_process.execFile, сохраняем фото на SD.
PubNub и Cloudinary: В той же функции загружаем 3 последних фото в Cloudinary, получаем URL, формируем JSON с данными (уровень корма, темп., влажность, счётчики посещений, URL фото) и публикуем в PubNub. Никакого своего сервера не нужно!
index.html (UI)
Подключаем PubNub SDK и eon.js для графиков. Подписываемся на канал feederview, парсим JSON, обновляем изображения и виджеты.
<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>
var pubnub = new PubNub({ subscribeKey: "your_subscribe_key" });
pubnub.subscribe({channels: ['feederView']});
pubnub.addListener({
message: function(m) {
var msg = m.message;
var imageIndex = msg.imageIndex;
if (msg.latestView) {
document.getElementById("myImage"+imageIndex).src = msg.latestView;
}
// обновление графиков eon.js ...
}
});
Корпус и кормушка
Кормушка: 2-литровая бутылка, срез 11 см от дна, отверстия под жердь (3 см). Электроника внутри, проверка размера. Верхняя часть: отверстия под провод навески, 4 отверстия разной высоты для птиц и запаха корма. Соединяем части скотчем (не перекрывая датчики). Насыпаем корм, вешаем.

3D-печатный корпус: измерен диаметр бутылки (~105 мм). Корпус под Arduino и две платы, крышка с ручкой, отсек для батарей с экономией филамента. Крепление площадки FSR. Собранный комплект компактный и рабочий.





Тестирование
Проверка BLE через nRF Master Control App. Приём сигналов за пределами дома. Пошаговая отладка. При садящихся батареях первым теряется BLE. Калибровка FSR: с площадкой получилась линейная зависимость в рабочем диапазоне. Настроили min/max и цвета на eon.js gauge.
Галерея развёртывания
Лучшее — фото птиц! За пару часов тысячи кадров. Просмотр в Cloudinary или на SD.
Seeed Grove Kit
Перешли на Seeed Grove Starter Kit: Base Shield питает оба Sharp IR без конденсаторов! Макет сильно упростился. Стандартный ИК-датчик Seeed отличается — припаяли монтажные провода к GND, Vin, SIG для совместимости.

Соответствие Project FeederWatch и заключение
Методика FeederWatch: за 2 дня фиксируют макс. число птиц вида одновременно. Наши счётчики жердей не совпадают, но параметры среды и расход корма — да. Фото помогают идентифицировать и документировать редких птиц. Потенциал стриминга через PubNub огромен: данные и фото в реальном времени для классов и любителей по всему миру. Хотим попробовать Clarifai блок PubNub для автораспознавания птиц, Cloudinary блок для улучшения фото. Какие ещё Grove датчики добавить?
Проект принес много радости: наблюдение за птицами вживую, «около сокровищничества» просмотр фото, график расхода корма. Arduino, Edison, Grove, PubNub, Cloudinary, 3D-печать — отличный вызов. Надеемся, вы вдохновитесь и присоединитесь к FeederWatch. В конце концов — это для птиц!
Код
Все файлы на GitHub: https://github.com/lachendeKatze/ItsForTheBirds
Кастомные детали и корпуса
.stl файлы для кормушки в бутылке: GitHub/3DBuild
Схемы
Схема встроенной в кормушку электроники (Arduino 101 + датчики):

Часть с Edison проста, фрицинг-компонента для веб-камеры нет — фото реальной сборки:

Производственный процесс
- Компактный breakout для DHT температуры и влажности на Raspberry Pi — ATtiny85 и DHT22/DHT11
- Подключение ультразвукового датчика HC-SR04 к Raspberry Pi — практическое руководство
- Лучшие аксессуары для раскрытия полного потенциала Raspberry Pi
- SIGHT: умные очки для слабовидящих на Raspberry Pi
- Intel и Udacity запускают сертифицированную программу по Edge AI разработке
- Выбор правильного датчика наполнения: точность, надежность и рентабельность
- Продвинутая сенсорная плёнка TOMOPLEX для мониторинга аэрокосмических аппаратов в реальном времени
- Точный WiFi RSSI трекинг для датчиков МКС
- Революционный математический фреймворк помогает инженерам выбирать оптимальные авиационные сенсоры
- Интеграция метода 5S в Industry 4.0: преодоление вызовов внедрения