Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
Компоненты и материалы
- Arduino UNO — 1 шт.
- Bluetooth-модуль HC-06 — 1 шт.
- Arduino Proto Shield (или любой монтажный щит с пайкой) — 1 шт.
- Motor/Stepper/Servo Shield V2 (Adafruit) — 1 шт.
- Сервопривод непрерывного вращения SM-S4306R — 1 шт. (для поворота камеры)
- DC-моторы с редукторами — 4 шт.
- Колёса для моторов — 4 шт.
- Перемыечные провода — 8 шт. (для моторов)
- Короб для 4×AA батарей — 2 шт. (всего 8 батарей AA)
- АА батареи (NiMH рекомендуется) — 8 шт.
- Мобильный телефон (например, Nokia Lumia 520) — 1 шт.
- Держатель для телефона — 1 шт.
- Самостоятельный шасси (деревянная плата или готовое пластиковое) — 1 шт.
Программное обеспечение
- Johnny-Five (Node.js фреймворк для робототехники)
- Node.js + Express.js (веб-сервер)
- Socket.io (WebSocket для управления)
- Библиотеки: Susy (верстка), Google Material Design, Gulp, Babel, Browserify
О проекте
Четырёхколёсный робот с дифференциальным управлением, управляемый по Bluetooth с компьютера через веб-интерфейс. Телефон на борту работает как IP-камера (приложение Win IP Camera). Автор — JavaScript-разработчик, поэтому логика управления написана на Node.js с использованием Johnny-Five.
Шасси
Сделано самостоятельно из дерева. Главное правило для дифференциального управления: колёса должны быть как можно ближе друг к другу по оси, иначе робот будет плохо поворачивать. Моторы закреплены хомутами (cable ties) — требует точной разметки отверстий. Готовые пластиковые шасси проще и надежнее.
Питание
Два держателя 4×AA соединены в последовательную батарею 8×AA (≈9,6 В NiMH). Arduino питается от этой батареи через джек. Motor Shield V2 имеет джампер разделения питания: сняв его, можно запитать двигатели отдельно от Arduino (рекомендуется).
Беспроводная связь
HC-06 смонтирован на Proto Shield с распайанными пинами и переходниками — модуль можно извлекать. Настройка HC-06 для работы с Johnny-Five: инструкция.
Движение
Вперёд, назад, повороты дифференциальным управлением. Сервопривод поворачивает держатель телефона左右.
Код: архитектура
Backend (entry point):
var boardModule = require('./src/boardModule'),
servoModule = require('./src/servoModule'),
motorModule = require('./src/motorModule');
boardModule.initBoard().then(function() {
motorModule.initMotors();
servoModule.initServo();
});
Frontend (управление клавиатурой):
import {moveWheels, stopWheels} from './wheelsControl';
import {moveServo, stopServo} from './servoControl';
document.onkeydown = checkKeyDown;
document.onkeyup = checkKeyUp;
function checkKeyDown(e) {
moveWheels(e.keyCode);
moveServo(e.keyCode);
}
function checkKeyUp(e) {
stopWheels(e.keyCode);
stopServo(e.keyCode);
}
Полный исходный код на GitHub: arduino-spybot-V2.
Используемые библиотеки
- express.js — веб-сервер
- johnny-five — API Arduino для JS
- socket.io — WebSocket связь фронт/бэк
- susy — адаптивная вёрстка
- google material design — UI компоненты
- gulpJS — автоматизация задач
- BabelJS — транспиляция ES6
- Browserify — модули в браузере
Заключение
Первый IoT-проект автора. Есть куда улучшать: 3D-печать корпуса, обратная связь от вибрации/экрана, автономное вождение. Но как proof-of-concept — работает.
Схемы
Файл схемы для Fritzing: arduino-spybot.fzz (в оригинале).
Производственный процесс
- Профессиональное руководство по анимации битмапов на TFT-экране ILI9341 2.4" с Visuino
- Веб-управляемая DMX-система освещения: Arduino Mega как мастер-контроллер
- FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
- DIY Arduino TV-B-Gone: универсальный пульт для выключения любого телевизора
- Создание пользовательских LED-часов с будильником — видно с 12 метров
- HSV Clock: Яркие, настраиваемые часы для энтузиастов Arduino
- Android-управляемая робот-платформа на Raspberry Pi и Motor Shield
- Find Me: Умный поисковик вещей на Arduino и Bluetooth
- Оптимизированные решения питания для проектов на Arduino
- Крестики-нолики на Arduino с матрицей MAX7219 и картонным корпусом