这是一个相当简单的物联网项目,有很多学习机会。
在直接深入创建最终产品之前,我将首先详细概述一个人应该经历的步骤。虽然互联网上已经有很多关于 DIY 机器人汽车的资料,但在这个特定项目的工作中,很多艰苦的日子过去了却没有任何重大进展,特别是因为我是物联网主题的初学者。因此,我为您提供了一个分步指南,介绍我如何成功完成这个项目以及我遇到的所有问题(以及显然如何克服它们)。
1. Arduino的乌诺和该电机驱动器
我选择使用 L298N 电机驱动模块。我使用了 2 个电机驱动器来控制我的 4 个电机。由于我的 Arduino 板上缺少 GPIO 引脚,我不可能编写一个程序来分别控制所有 4 个电机。因此,我的问题的唯一解决方案是并联我的两个电机驱动器。在我的四驱车中,我为后部指定了一个电机驱动器,为前部指定了一个电机驱动器。所以,我的安排是这样的,当给定特定输入时,(两个电机驱动器的)两个左侧电机都会经历相同的变化(速度和方向)。与前部和后部的正确电机一样。
问题:
电机直接供电工作但连接电机驱动器后不工作。这可能是因为电源电压低或电机消耗的电流大于供应的电流. 首先,请确保您的电源电压大于 7V。任何低于 6.5V 的电压都可能导致电机驱动器开始波动(LED 闪烁是这种现象)并且电机不会转动。其次,您需要一个可以根据需要提供电流的电池。就我个人而言,我使用了 11.1V 3S 2200mAh 25/30C 锂聚合物充电电池,带 XT60 连接器。这是非常昂贵的,如果您打算在其他项目中使用相同的东西,我只会向您推荐这个(这对于无人机应用来说非常棒!)因为我不得不为它购买更多必要的配件,比如男性 XT60 到女性 JST 适配器(使用带跳线的电池)和锂聚合物充电器。主要目标是实现足够大的电流供应,因此您可以寻找满足您要求的电池。
这两个电机不转用的相同的速度。由于缺乏所需的电流供应,这再次发生。您的电池可能提供 12V 的电压输出,但其中一个连接的电机仍可能以另一个电机的一半速度运行,这将导致最终组装完成后运动不均匀。至少 5A 的电流供应足以让所有 4 个电机平稳运行。
这是一个小代码来测试您的电机驱动器和电机。通过学习如何改变电机的方向和速度。看看是什么配置使电机顺时针和逆时针转动并记下它 - 这将有助于稍后组装过程中,这样您就不必在最后再次重复此操作以确定哪些命令将使您的遥控车向前移动和落后。
int motor1pin1 = 2;
int motor1pin2 = 3;
int motor2pin1 = 4;
int motor2pin2 = 5;
int speedx;
void setup() {
pinMode(motor1pin1, OUTPUT);
pinMode(motor1pin2, OUTPUT);
pinMode(motor2pin1, OUTPUT);
pinMode(motor2pin2, OUTPUT);
/*speed control pins*/
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
}
void loop() {
//Controlling speed (0 = off and 255 = max speed):
analogWrite(9, 50); //ENA pin
analogWrite(10, 50); //ENB pin
//Controlling spin direction of motors:
digitalWrite(motor1pin1, LOW);
digitalWrite(motor1pin2, HIGH);
digitalWrite(motor2pin1, LOW);
digitalWrite(motor2pin2, HIGH);
delay(5000);
analogWrite(9, 50);
analogWrite(10, 50);
delay(5000);
/*digitalWrite(motor1pin1, LOW);
digitalWrite(motor1pin2, HIGH);
digitalWrite(motor2pin1, LOW);
digitalWrite(motor2pin2, HIGH);
delay(5000);*/
}
2. NodeMCU ESP8266通用的Wi-Fi模块和MIT应用发明人:车削一个LED上并关闭
在使用 NodeMCU 和 App Inventor 做任何甚至远程复杂的事情之前,最好通过构建一个简单的应用程序来打开和关闭 Wi-Fi 模块中的内置 LED 来试水!
我得到了这个网页的帮助,它详细概述了什么是 MIT App Inventor、代码块和 Arduino 代码。唯一的一点是,作者在这里展示了如何控制继电器。但是 LED ON/OFF 应用程序的基本原理几乎相同。对于您的 NodeMCU,您可以参考以下代码:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
const char* ssid = "Wi-Fi ssid";
const char* password = "Wi-Fi password";
WiFiServer server(80);
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, 0);
Serial.println();
Serial.print("Connecting to ");
Serial.print(ssid);
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
server.begin();
Serial.println("Server started");
Serial.println(WiFi.localIP());
}
void loop() {
WiFiClient client = server.available();
if(!client){
return;
}
Serial.println("New Client");
while(!client.available()){
delay(1);
}
String req = client.readStringUntil('\r');
Serial.println(req);
client.flush();
int val;
if (req.indexOf("/gpio/0") != -1){
val = 0;
}
else if (req.indexOf("/gpio/1") != -1){
val = 1;
}
else {
Serial.println("invalid request");
client.stop();
return;
}
// Set GPIO2 according to the request
digitalWrite(LED_BUILTIN, val);
client.flush();
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now ";
s += (val)?"high":"low";
s += "</html>
问题:
NodeMCU ESP8266不工作。如果您遇到任何特定错误,那么摆脱它的最佳方法就是复制错误并在互联网上查找,因为大多数时候,数百人已经遇到过完全相同的问题,以及解决方案随时可用。否则,如果您认为您的 Wi-Fi 模块有问题,请按照此网页上的说明进行操作。如果它不起作用,那么您的模块很可能是错误的或伪造的。
3. Arduino Uno和NodeMCU ESP8266接口:I2C通信协议
这是在 NodeMCU 和 Arduino 之间建立串行通信的惊人来源/指南。您还可以看到 I2C 以外的协议来连接两个板,但我更喜欢 I2C,因为它看起来更容易。
现在,在它们之间建立连接后,我们终于可以使用我们在步骤 2 中创建的相同 LED ON/OFF App 来打开或关闭 Arduino 的内置 LED。
更多详情资料可前往基于 Arduino UNO 的遥控汽车 - 电路城
此方案版权归电路城用户所有,如作者不愿发布在头条可私信或前往电路城联系相关人员删除。