Гид по технологиям

Управление Arduino с JavaScript и Johnny‑Five

6 min read Hardware Обновлено 02 Dec 2025
Управление Arduino с JavaScript
Управление Arduino с JavaScript

Краткое содержание

  • Что нужно: Arduino, сервомотор, провода, USB-кабель, Node.js.
  • Подключение: питание 5 В, общий GND, управляющий провод к PWM‑пину (в примере — D10).
  • Программирование: загрузите StandardFirmataPlus, установите johnny-five и keypress, запустите node test.js.

Аппаратный список

Для проекта вам понадобятся:

  • Arduino Uno или совместимая плата.
  • Хоббийный сервомотор (совместимый с Arduino).
  • Несколько перемычек (hook up wire).
  • USB‑кабель для подключения Arduino к компьютеру.

Важно: многие клоны Arduino и недорогие сервоприводы работают нормально, но обращайте внимание на питание сервомотора — некоторые сервоприводы потребляют больше тока, чем может выдержать USB‑порт.

Схема подключения

Подключите сервомотор к Arduino следующим образом:

Плата Arduino Uno с подключённым сервомотором

  • Линия питания VCC (красный провод) — к 5V на плате Arduino.
  • Общий провод GND (чёрный или коричневый) — к GND на Arduino.
  • Сигнальный провод (жёлтый или оранжевый) — к цифровому PWM‑пину, в примере используется пин 10.

Схема подключения провода питания, земли и сигнала к сервомотору

Примечание: пин не обязательно должен быть именно 10, но он должен поддерживать PWM (часто помечается как ~10).

Подготовка платы и загрузка Firmata

  1. Подключите плату к компьютеру через USB.
  2. Откройте Arduino IDE.
  3. В меню Tools выберите вашу плату (Board) и порт (Port).

Если это ваш первый опыт с Arduino, руководства по началу работы помогут настроить среду. После выбора платы и порта загрузите пример StandardFirmataPlus:

  • File → Examples → Firmata → StandardFirmataPlus.
  • Нажмите Upload.

Этот скетч не требует изменений: он позволяет внешнему ПО (нашему Node.js‑скрипту) посылать команды на плату по протоколу Firmata.

Загрузка StandardFirmataPlus и соединение с платой Arduino

Важно: если у вас нестабильная связь, попробуйте перезагрузить плату и убедиться, что последовательный порт не занят другой программой.

Установка Node.js и npm

Johnny‑Five — JavaScript‑фреймворк для робототехники, поэтому нам нужен Node.js.

  1. Скачайте инсталлятор с официального сайта Node.js. В статье использовалась рекомендованная LTS‑версия 8.9.4, но можно установить текущую LTS‑версию.
  2. Запустите .msi (Windows) и убедитесь, что установщик добавил Node.js и npm в PATH.

После установки откройте Командную строку (CMD) или PowerShell.

Инициализация проекта и установка пакетов

В каталоге проекта выполните:

npm init

Следуйте подсказкам (можно оставить значения по умолчанию). Затем установите пакеты:

npm install johnny-five
npm install keypress

Если при установке johnny-five возникнут проблемы, попробуйте сначала установить keypress, а затем повторить установку johnny‑five — иногда порядок влияет на поведение npm.

JavaScript и Johnny‑Five — основы

Johnny‑Five предоставляет абстракции для входов/выходов плат Arduino: цифровые пины, аналоговые, серво, датчики и пр. В этом примере мы будем работать с сервомотором.

Ключевые понятия:

  • Firmata: протокол, который позволяет управлять Arduino из внешней программы (наше Node.js‑приложение).
  • Board: объект Johnny‑Five, представляющий подключённую плату.
  • Servo: объект для управления сервоприводом; бывает позиционный и continuous (непрерывного вращения).

Код — управление сервом с клавиатуры

Создайте файл test.js и вставьте код ниже. Он инициализирует johnny‑five и keypress, создаёт объект Servo.Continuous на пине 10 и реагирует на нажатия клавиш.

var five = require("johnny-five");
var keypress = require("keypress");

// Включаем прослушивание stdin
keypress(process.stdin);

// Автоопределение платы (можно указать порт явно)
var board = new five.Board();

board.on("ready", function() {
  console.log("Use Up and Down arrows for CW and CCW respectively. Space to stop. Q to quit.");
  var servo = new five.Servo.Continuous(10);

  process.stdin.resume();
  process.stdin.setEncoding("utf8");
  process.stdin.setRawMode(true);

  process.stdin.on("keypress", function(ch, key) {
    if (!key) {
      return;
    }

    if (key.name === "q") {
      console.log("Quitting");
      process.exit();
    } else if (key.name === "up") {
      console.log("CW");
      servo.cw();
    } else if (key.name === "down") {
      console.log("CCW");
      servo.ccw();
    } else if (key.name === "space") {
      console.log("Stopping");
      servo.stop();
    }
  });
});

Примечание: если автоопределение порта не работает, можно явно указать порт при создании Board:

var board = new five.Board({ port: "COM3" }); // Windows
// или
var board = new five.Board({ port: "/dev/ttyUSB0" }); // Linux

Отличие позиционного и непрерывного сервомотора

  • five.Servo(10) — позиционный сервопривод: вы задаёте угол (servo.to(90)).
  • five.Servo.Continuous(10) — сервопривод непрерывного вращения: методы cw(), ccw(), stop().

Если у вас обычный сервопривод (поворотный), замените конструкцию на:

var servo = new five.Servo(10);
// и вместо servo.cw()/ccw() используйте servo.to(0/180) или servo.sweep()

Запуск и ожидание результата

Запустите скрипт в каталоге проекта:

node test.js

В консоли вы увидите информацию о плате и подсказку. Нажмите стрелки вверх/вниз для вращения, пробел для остановки, Q для выхода.

Программа управляет сервомотором по клавишам: интерфейс и вывод в консоли

Если всё подключено правильно, сервомотор начнёт реагировать на нажатия. Небольшая демонстрация работы мотора:

Сервомотор выполняет движения по командам с компьютера

Советы по электропитанию и безопасности

Важно учитывать токовые характеристики сервомотора:

  • Некоторым сервам требуется более высокий ток, чем может дать USB‑порт (обычно ~500 mA). В таких случаях используйте внешний источник питания 5V с общим GND.
  • Никогда не подключайте питание внешнего источника без общей земли с Arduino — это приведёт к неправильной работе или повреждению.

Важно: не подключайте и не отключайте провода при включенном питании, чтобы не повредить электронику.

Полезные расширения и альтернативные подходы

  1. Управление через веб‑интерфейс: запустите Express и сокеты, чтобы получать команды из браузера и пересылать их на Johnny‑Five.
  2. Использование Raspberry Pi: Johnny‑Five работает нативно на Raspberry Pi, что даёт меньше зависимости от ПК.
  3. Использование Python/pyFirmata: если предпочитаете Python, pyFirmata даёт похожую функциональность.

Отладка и типичные проблемы

  • Плата не обнаруживается: убедитесь, что драйвер установлен и выбран правильный COM‑порт.
  • Скетч Firmata не загружен: проверьте Arduino IDE, повторно загрузите StandardFirmataPlus.
  • Серво дергается или не вращается: проверьте питание, общий GND и корректность пинов.
  • npm‑установки падают: обновите npm, попробуйте удалить папку node_modules и package-lock.json и установить снова.

Быстрый список для отладки

  1. Проверить физические подключения (VCC, GND, сигнал).
  2. Проверить, загружен ли StandardFirmataPlus.
  3. Убедиться в наличии порта и доступности его для Node.js.
  4. Запустить скрипт node test.js и наблюдать сообщения в консоли.
  5. Если нужно, включить детальный лог в johnny‑five (см. документацию).

Мини‑методология — как перейти от идеи к результату за 1–2 часа

  1. Подготовьте комплект: плата, сервомотор, провода, USB‑кабель.
  2. Подключите и загрузите StandardFirmataPlus через Arduino IDE (15–20 мин).
  3. Установите Node.js и npm (10–15 мин).
  4. Создайте проект npm и установите johnny‑five и keypress (5–10 мин).
  5. Напишите/скопируйте скрипт, запустите и отладьте (20–30 мин).

Таблица совместимости и заметки по миграции

  • Arduino Uno/Nano/Mega: поддерживаются (Mega может иметь другие нумерации портов).
  • Клоны Arduino: чаще всего работают, но могут требовать установки драйверов (CH340 и проч.).
  • Raspberry Pi: поддержка через IO‑пины и дополнительную библиотеку либо через Firmata.

Краткий совет по миграции: если автоопределение порта не работает на вашей ОС, указывайте порт явно в new five.Board({ port: ‘…’ }).

Роль‑ориентированные чеклисты

Разработчик:

  • Установить Node.js и npm.
  • Настроить среду разработки (IDE).
  • Интегрировать johnny‑five с системой контроля версий.

Хоббист/ученик:

  • Узнать расположение пинов на плате.
  • Подключить сервомотор и загрузить StandardFirmataPlus.
  • Попробовать готовый скрипт и экспериментировать с командами.

Инженер по безопасности:

  • Проверить токи и тепловые характеристики сервомотора.
  • Обеспечить общую землю и защиту от короткого замыкания.

Критерии приёмки

  • Скрипт запускается командой node test.js без ошибок.
  • В консоли отображается подсказка управления (стрелки/пробел/Q).
  • Нажатие клавиш вызывает ожидаемое поведение сервомотора (вращение/останов/выход).

Когда подход не подойдёт — ограничения и крайние случаи

  • Если нужен прецизионный контроль угла (например, для робота‑манипулятора), используйте позиционные сервоприводы и методы servo.to(angle).
  • Для тяжёлых нагрузок servos непрерывного вращения и hobby‑класса не подойдут — нужны мотор‑редукторы и драйверы.
  • В автономных системах без ПК вместо Firmata лучше писать скетч полностью на Arduino.

Короткий словарь терминов

  • Firmata — протокол для управления платой Arduino извне.
  • PWM — широтно‑импульсная модуляция, используется для управления скоростью/позицией.
  • Continuous servo — сервопривод для непрерывного вращения (методы cw/ccw).

Итог

Johnny‑Five позволяет быстро и просто управлять устройствами на базе Arduino с помощью знакомого JavaScript. Это отличный способ начать робомейкинг, интегрировать аппаратные эксперименты в web‑проекты и собирать прототипы. Как только базовая связка работает, можно расширять проект: управлять несколькими сервами, добавлять датчики и веб‑интерфейс, переносить логику на Raspberry Pi.

Важно: всегда следите за питанием сервомотора и общей землёй. Удачных экспериментов и безопасных сборок!

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Outlook: исправление резкого роста CPU
Поддержка

Outlook: исправление резкого роста CPU

Поиск ссылок на Reddit по домену
Руководство

Поиск ссылок на Reddit по домену

Как найти пароль Wi‑Fi на Chromebook
Chromebook

Как найти пароль Wi‑Fi на Chromebook

Streamus — музыка в Chrome без подписки
Расширения Chrome

Streamus — музыка в Chrome без подписки

Просмотр паролей iCloud Keychain на macOS и iOS
Безопасность

Просмотр паролей iCloud Keychain на macOS и iOS

Отключение ekrn.exe в Windows
Windows

Отключение ekrn.exe в Windows