Node.js 网页控制的机器人车(无线)
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 2 |
关于这个项目
项目理念
Node.js 是实时应用程序的最佳选择之一。我之前做过一些使用Sockets的实时应用,所以基于同样的想法,我决定用Node.js服务器做一些物联网项目,用于自学。
我的这个 Rover 使用蓝牙与我的 Node.js 服务器通信,在前端,我使用 Sockets 向服务器发送命令。
项目目标
研究和实现Node服务器和硬件(这里是我们的Rover)之间的无线通信,并通过Node服务器使用Sockets提供的移动网页远程控制Rover。
先决条件
您需要具备 Node、socket 编程和 L298 Motor Driver 工作的一些基本知识。
要求
- 1 个 Arduino Uno
- 1 个 L298 电机驱动器
- HC-05 蓝牙模块
- 跳线
- 2 节电池 - 每节 9 伏
- 2 个齿轮马达(6-9 伏)
- 2 个兼容的轮子
- 机箱
- 为我们的服务器安装了 Node.js 的计算机。
第 1 步 - 构建漫游者
构建 Rover 并没有那么复杂,您可以购买“2 轮底盘套件”,该套件可轻松在线获得并随附所有组装单元。
我们的 Arduino Uno 和 L298 电机驱动器嵌入在我们的 Rover 顶部,两者分别由两个 9 伏电池供电。
反过来,Arduino Uno 将为 HC-05 蓝牙模块供电,该模块将与我们的服务器进行通信。
电路图
如上图所示,L298 电机驱动器由 9V 电池供电,两个电机控制输出连接到电机 A 和电机 B,由于电机没有极性,您可以将任何端子连接到它,但请确保两个电机同向旋转。请勿移除 5V 稳压器跳线。
注意 :如果你用超过 12 伏的电压给 L298 供电,板载 5V 稳压器将会损坏。
Arduino Uno 也由 9V 电池供电,其正极连接到 Arduino 的 Vin 引脚,负极连接到公共地。 Arduino 依次为蓝牙模块供电,因此将HC-05 的Vcc 引脚连接到Arduino 的5V 和GND 接地。
HC-05和Arduino串口通信,将HC-05的TXD引脚连接到Arduino的RX引脚,HC-05的RXD引脚连接到Arduino的TX引脚。
现在要控制 L298 模块,您可以将 EN1 和 EN2 引脚与 Arduino 的任何 PWM 引脚连接。然后将L298的Input pin -1, 2, 3, 4 与Arduino的任意数字pin相连。
数据传输
如上图,是信号传输示意图。
1. 用户将访问节点服务器提供的网页。 URL 将是使用端口号的 IP 地址,例如-“192.XXX.XXX.129:8080”。
2. 当用户点击网页上的按钮时,它会触发服务器执行所需的功能。这种通信是由套接字引起的。
3.Node服务器通过蓝牙连接到HC-05模块,将需要的数据发送给HC-05模块。
4. HC-05 将使用串行通信将数据传输到 Arduino UNO。
5. Arduino UNO 将依次控制 L298 模块。
第 2 步 - 设置服务器
对于我们的服务器,我们需要安装 Node.js。安装任何稳定版本的节点,我的是 11.15 版本。我们需要安装以下包-
- 节点-gyp
- 快递
- 节点蓝牙
- socket.io
- ejs
注意 - “node-gyp”的安装可能很棘手,因为它不支持某些最新版本的 Node,所以最好安装 11.15 版的 Node。
现在,我们需要监听来自网页的事件,一旦在与网页交互时触发了一个事件,该页面就会发出需要执行到我们的 Node 服务器的所需函数。服务器将依次侦听该消息并执行所需的功能(在我们的示例中,将数据发送到蓝牙)。
因此,使用“express”和“EJS”等包创建服务器和网页。用你想要的控件设计网页并通过创建套接字服务器为其设置套接字连接,你可以参考这个文档。
有关蓝牙设置,请参阅此文档。每当点击任何控制按钮时,都会向 HC-05 模块发送一条消息。
这是我的简单网页 --
第 3 步 - Arduino 代码
由于蓝牙将使用串行通信与 Arduino-Uno 进行通信,因此我们将发送一些“字符串”作为命令和一个额外的字母,告诉我们终止并捕获字符串。
例如-:为了前进,蓝牙会传输“forwardT”,在Arduino端,只要遇到字母“T”就知道串口通信完成了。
使用传入的字符串命令,我们将配置 L298 驱动程序以向前、向后、向左、向右移动、改变速度等。
找到随附的 Arduino 代码。
第 4 步 - 最终结果
增强功能和未来范围
在后期阶段,我计划使用语音命令和避障功能来控制漫游车。我还可以维护一个数据库,我将在其中保存统计记录,例如行驶距离、最大速度、平均速度等。我还将添加多个传感器,例如温度、光线和湿度,并定期跟踪它存储在我们的数据库中。
下一个版本
检查我的下一个项目“使用移动设备的语音控制漫游者”
代码
- Node Rover Arduino 代码
Node Rover Arduino 代码Arduino
const int en1 =9;const int en2 =3;const int inp1 =2;const int inp2 =4;const int inp3 =7;const int inp4 =8;char charRead;String inputString ="";void setup () { Serial.begin(9600); pinMode(en1,输出); pinMode(en2,输出); pinMode(inp1, 输出); pinMode(inp2, 输出); pinMode(inp3, 输出); pinMode(inp4, OUTPUT);}void loop() { // 把你的主要代码放在这里,重复运行: if (Serial.available()) { charRead =Serial.read(); if (charRead !='T') { inputString +=charRead; } else { if (inputString =="forward") { // 向前移动 digitalWrite(inp1, HIGH);数字写入(inp2,低);数字写入(inp3,高);数字写入(inp4,低); } else if (inputString =="backward") { // 向后移动 digitalWrite(inp1, LOW);数字写入(inp2,高);数字写入(inp3,低);数字写入(inp4,高); } else if (inputString =="fleft") { // 向左移动 digitalWrite(inp1, HIGH);数字写入(inp2,低);数字写入(inp3,低);数字写入(inp4,低); } else if (inputString =="fright") { // 向右移动 digitalWrite(inp1, LOW);数字写入(inp2,低);数字写入(inp3,高);数字写入(inp4,低); } else if (inputString =="bleft") { // 向左后移 digitalWrite(inp1, LOW);数字写入(inp2,低);数字写入(inp3,低);数字写入(inp4,高); } else if (inputString =="bright") { // 向右后移 digitalWrite(inp1, LOW);数字写入(inp2,高);数字写入(inp3,低);数字写入(inp4,低); } else if (inputString =="break") { // 停止analogWrite(en1, 50);模拟写入(en2,50);延迟(550);数字写入(inp1,低);数字写入(inp2,低);数字写入(inp3,低);数字写入(inp4,低);模拟写入(en1,150);模拟写入(en2,150); } else if (inputString =="maxspeed") { // 最大速度analogWrite(en1, 250);模拟写入(en2,250); } else if (inputString =="medspeed") { // 中速模拟写入(en1, 180);模拟写入(en2,180); } else if (inputString =="lowspeed") { // 低速模拟写入(en1, 90);模拟写入(en2,90); } else { // 停止digitalWrite(inp1, LOW);数字写入(inp2,低);数字写入(inp3,低);数字写入(inp4,低); } inputString =""; } }}
示意图
制造工艺