使用arduino控制舵机_使用Arduino和Node.js控制摩托车

使用arduino控制舵机

GitHub最近发布了一篇博客文章 ,该文章显示了不同语言在这段时间内的发展情况。 排名表示GitHub的公共和私有存储库中使用的语言(不包括fork),这被称为Linguist的库检测到。 从中可以明显看出,JavaScript无疑在各个领域都赢得了竞争。 尽管来自C,C ++和Java的竞争非常激烈,但编程语言已成为游戏编程,机器人技术和IoT设备的非常受欢迎的选择。 当JavaScript开始为机器人提供动力时, NodeBots诞生了。

NodeBots是由Node.js控制的机器人。 如果您有兴趣进一步了解它们,建议您阅读Patrick Catanzariti撰写的标题为NodeBots简介的文章。

在本教程中,我们将制作一个可以从浏览器控制的简单NodeBot。 整个项目的源代码可在GitHub上找到

设置硬件

我们将在该项目中使用以下硬件:

  • Arduino的
  • 2马达
  • L298电机控制器
  • 将Arduino连接到计算机的电线

Arduino是一个基于易于使用的硬件和软件的开源原型平台。 它在全球成千上万的项目中使用。 我们使用Arduino的原因是它处理廉价且易于扩展的跨平台(可在Windows,Linux和OS X上运行)。

我们将从组装硬件开始。 连接的表示在下面给出。

电路原理图

如果您在理解引脚号时遇到任何困难,请参考下面的示意图。

原理图

我建议您根据需要选择电动机(例如,它必须承受的负载)。 如果您使用额定电压更高的电动机,则可能必须使用外部电源,因为Arduino提供的电压可能不够。

连接完成后,我们必须确保StandardFirmata已安装在板上。 Firmata是用于从主机计算机上的软件与微控制器通信的通用协议。 为此,请按照以下简单步骤操作:

  • 下载Arduino IDE
  • 通过USB插入Arduino或Arduino兼容微控制器
  • 打开Arduino IDE,选择File> Examples> Firmata> StandardFirmata
  • 点击“上传”按钮。

完成硬件连接并将StandardFirmata上传到Arduino之后,我们可以移至下一部分,在其中创建Web应用程序。

应用程序入门

首先从Web应用程序开始,让我们定义项目的软件依赖关系。 为此,我们将创建一个如下所示的package.json文件:

{
  "name": "nodebot-sample",
  "dependencies": {
    "express": "^4.11.2",
    "johnny-five": "^0.8.53",
    "socket.io": "^1.3.3"
  }

创建文件后,在项目文件夹的根目录中运行npm install ,以便将安装所有依赖项。 如果您不熟悉npm ,请阅读Peter Dierx撰写的标题为npm入门指南— Node Package Manager文章

服务器端代码

服务器代码依赖于Node.jsExpress 。 我们将在项目目录的根目录下创建一个名为index.js的文件。 该文件将包含我们所有的服务器端逻辑。

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
});

express()函数是Express模块​​导出的顶级函数。 express.static()负责将静态资产提供给客户端。 app.get使用回调函数将HTTP请求路由到指定的路径。 res对象代表快递应用在收到请求时发送的HTTP响应。 sendFile方法将文件从特定路径发送到浏览器。

我们正在利用Socket.IO来利用WebSockets和johnny-five的功能来帮助Arduino与服务器进行通信,从而维护客户端与服务器之间的实时连接。 johnny-five是一个基于Firmata协议的IoT和机器人编程框架。

首先,我们创建一个Board的新实例。 一旦完成,所有逻辑将在开发板准备就绪后实现(这意味着在触发ready事件时)。 在回调函数中,我们通过提供带有两个数字的数组来创建Motor的两个实例。 具体来说, [3,12][11,13]代表与相应电机相连的Arduino的引脚。

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

    commands = null;

    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 () {
            var aSpeed = 220;
            var bSpeed = 50;
            motors.a.fwd(aSpeed);
            motors.b.rev(bSpeed);
        });

        socket.on('right', function () {
            var aSpeed = 50;
            var bSpeed = 220;
            motors.a.rev(aSpeed);
            motors.b.fwd(bSpeed);
        });
    });
});

电动机的速度由0到255之间的数字指定.stop()方法使电动机.stop()停止。 还有一种替代方法.brake()强制电动机停止(而不是.brake()停车),但仅适用于带有专用制动销的电路板。 .fwd().rev()方法只是.forward().reverse()别名。 它们都接受一个数字作为参数,范围从0到255,以控制速度。 我们使用前进和后退速度的不同组合来获得电动机的不同运动。

免费学习PHP!

全面介绍PHP和MySQL,从而实现服务器端编程的飞跃。

原价$ 11.95 您的完全免费

为了完成我们的项目,我们必须实时检测用户何时在客户端选择了特定选项。 这是Socket.IO发挥作用的地方。 与客户端建立新连接后,将触发connection事件。 每当客户端发出事件时, .on()方法就允许我们在服务器端侦听该事件并执行一些操作。

客户端代码

屏幕截图

客户端实施包括创建界面,用户可以在其中选择电动机的不同运动。 我们首先在目录根目录下的app文件夹内创建一个index.html文件。 在此页面中,我们包含Socket.IO的客户端版本。

<body>
   <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">STOP</i>
   </div>
   <script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.6/socket.io.min.js"></script>
   <script src="app.js"></script>
</body>

Socket.IO公开了一个全局方法,该方法被添加到window对象上,该方法称为io()socket.emit('right')会将事件名称为right的消息发送回服务器。 一旦.emit()被调用客户端上,安装有回调socket.on('right')的服务器上被执行。

var socket = io();

function moveForward(){
    socket.emit('start');
}
function turnRight(){
    socket.emit('right');
}
function turnLeft(){
    socket.emit('left');
}
function moveReverse(){
    socket.emit('reverse');
}
function stop(){
    socket.emit('stop');
}

document.getElementById('forward').onclick = moveForward;
document.getElementById('right').onclick = turnRight;
document.getElementById('left').onclick = turnLeft;
document.getElementById('reverse').onclick = moveReverse;
document.getElementById('stop').onclick = stop;

在最后一个代码片段中,我们已经完成了代码。 现在,您可以从浏览器控制电动机了。 您甚至可以将keypress事件绑定到箭头键,并使用它们控制电机。

要启动服务器,请打开终端并在项目目录的根目录中运行node index.js 。 现在,您可以在浏览器上访问位于127.0.0.1:8081的网页,并从那里开始控制电动机。 如果Board not found问题,请确保Arduino与计算机之间的连接良好,并且您已将StandardFirmata从Arduino IDE正确上传到了Board。

这个项目是一个非常小的示例,说明您可以通过结合使用Node.js和Arduino来实现。 您可以使用WebSockets的功能将从传感器( MPU6050 )接收的数据实时传输到浏览器。 您可以基于此显示实时图形,并根据收到的读数控制电动机。 在这里可以找到基于这些原理的类似实现,这是当前项目的扩展。 如果您对该项目感兴趣,则一定要检查一下。

结论

在本教程中,我们学习了创建基本的NodeBot。 同时,我们还探索了Node.js提供的各种可能性,以及如何利用其功能在Web应用程序和机器人之间建立链接。

希望大家都喜欢这篇文章,并找到更多喜欢JavaScript的理由。 再次强调,您可以在GitHub上找到整个项目的源代码

翻译自: https://www.sitepoint.com/controlling-a-motorbot-using-arduino-and-node-js/

使用arduino控制舵机

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值