Home >Web Front-end >JS Tutorial >Controlling a Motorbot Using Arduino and Node.js

Controlling a Motorbot Using Arduino and Node.js

Lisa Kudrow
Lisa KudrowOriginal
2025-02-19 11:43:12948browse

This tutorial demonstrates building a NodeBot—a robot controlled by Node.js—using Arduino. We'll create a simple motorbot controllable from a web browser. The project leverages JavaScript's growing popularity in robotics and IoT.

Key Concepts:

  • NodeBots & Arduino Integration: NodeBots, powered by Node.js, offer a powerful combination with Arduino for diverse applications, including game development, robotics, and IoT.
  • Hardware Setup: The hardware consists of an Arduino, two motors, an L298 motor controller, and a connection cable. Crucially, StandardFirmata must be installed on the Arduino.
  • Server-Side (Node.js): We use Node.js, Express.js, Socket.IO (for real-time communication), and Johnny-Five (a Firmata-based robotics framework).
  • Client-Side (Browser): A simple web interface allows users to control motor movements. Socket.IO handles real-time communication between the browser and the server.

Hardware:

  • Arduino microcontroller
  • Two motors
  • L298 motor controller
  • USB cable connecting Arduino to computer

Controlling a Motorbot Using Arduino and Node.js

Controlling a Motorbot Using Arduino and Node.js

Motor Selection: Choose motors appropriate for the intended load. Higher voltage motors may require an external power supply.

StandardFirmata Installation:

  1. Download the Arduino IDE.
  2. Connect the Arduino via USB.
  3. In the IDE, navigate to File > Examples > Firmata > StandardFirmata.
  4. Upload the StandardFirmata code to the Arduino.

Software Setup:

Create a package.json file:

<code class="language-json">{
  "name": "nodebot-sample",
  "dependencies": {
    "express": "^4.11.2",
    "johnny-five": "^0.8.53",
    "socket.io": "^1.3.3"
  }
}</code>

Run npm install to install dependencies.

Server-Side Code (index.js):

<code class="language-javascript">var express = require('express');
var app = express();
var io = require('socket.io')(app.listen(8081));
var five = require('johnny-five');

app.use(express.static(__dirname + '/app'));
app.get('/', function (res) { res.sendfile('/index.html'); });

var board = new five.Board({ repl: false });

board.on('ready', function () {
    var speed, commands, motors;
    motors = {
        a: new five.Motor([3, 12]),
        b: new five.Motor([11, 13])
    };

    io.on('connection', function (socket) {
        socket.on('stop', function () { motors.a.stop(); motors.b.stop(); });
        socket.on('start', function () { speed = 255; motors.a.fwd(speed); motors.b.fwd(speed); });
        socket.on('reverse', function () { speed = 120; motors.a.rev(speed); motors.b.rev(speed); });
        socket.on('left', function () { motors.a.fwd(220); motors.b.rev(50); });
        socket.on('right', function () { motors.a.rev(50); motors.b.fwd(220); });
    });
});</code>

Client-Side Code (app/index.html & app.js):

index.html:

<code class="language-html"><!DOCTYPE html>


  <title>NodeBot Control</title>
  
  


  <div class="container">
    <i class="fa fa-angle-up" id="forward"></i>
    <i class="fa fa-angle-left" id="left"></i>
    <i class="fa fa-angle-down" id="reverse"></i>
    <i class="fa fa-angle-right" id="right"></i>
    <i class="fa stop" id="stop"></i>STOP
  </div>

</code>

app.js:

<code class="language-javascript">var socket = io();

document.getElementById('forward').onclick = () => socket.emit('start');
document.getElementById('right').onclick = () => socket.emit('right');
document.getElementById('left').onclick = () => socket.emit('left');
document.getElementById('reverse').onclick = () => socket.emit('reverse');
document.getElementById('stop').onclick = () => socket.emit('stop');</code>

Run node index.js to start the server. Access the control interface at 127.0.0.1:8081. Remember to troubleshoot connection issues if the board isn't recognized. This example demonstrates the basic principles; more complex interactions are achievable with this foundation. The full source code is available on GitHub (link would be inserted here if provided).

The above is the detailed content of Controlling a Motorbot Using Arduino and Node.js. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn