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

Управление 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
Автор
Редакция

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

Форматирование отрицательных чисел в Excel
Excel

Форматирование отрицательных чисел в Excel

Отключить запись трофеев на PS5
Игры

Отключить запись трофеев на PS5

Xbox Live не работает на детском аккаунте — исправить
Поддержка

Xbox Live не работает на детском аккаунте — исправить

Добавить Dropbox в Проводник Windows
Инструкции

Добавить Dropbox в Проводник Windows

Сканирование QR‑кодов на Windows — быстро и просто
Руководство

Сканирование QR‑кодов на Windows — быстро и просто

Отключить выборочную приостановку USB — Windows 10
Windows

Отключить выборочную приостановку USB — Windows 10