步骤1:工具和材料
此项目使用了以下工具:
焊铁和焊丝直流电机已经将电线焊接到其端子上。..。..但它最终会断裂,您可能需要重新焊接它。所以考虑一下好的烙铁和电线neaby。
EVA泡沫板(或其他非导电材料)。本项目中使用的机器人底盘由铝制成,电路板安装在此金属部件上。我在电路板和金属板之间使用了一层泡沫板,以避免可能的短路。
双面胶带。它用于将泡沫板粘合到电路板上,以及用于安装H桥模块。
剪刀,用于剪切一些泡沫板矩形。
我在项目中使用了以下硬件部件:
Wemos D1 ESP8266开发板(链接/链接)。 Wemos D1板非常易于使用,并且可以使用Arduino IDE进行编程。它与普通的Arduino Uno具有相同的足迹!这样,大多数Arduino防护罩也可以与这块板一起使用。它有内置的Wi-Fi模块,因此您可以在各种项目中使用它。您还可以使用其他基于ESP8266的板(链接/链接)。
L298N双通道H桥模块(链接/链接)。该模块允许来自Wemos(或Arduino)的3.3V信号被放大到电机所需的12V。
DIY机器人底盘坦克(链接)。这个真棒套件具有制造水箱所需的一切:两个直流电机,齿轮,轨道,螺栓,螺母等。它已经配备了组装机箱所需的工具,这对初学者来说非常棒!
18650 3.7V电池(x3)(链接)。我曾经给整个电路供电。这个油箱使用12V电机。我使用了三节串联的3.7V电池给它们供电。
3S 18650电池座(链接)。它可以容纳三个18650电池系列,并且可以很容易地安装在水箱后部。
18650电池充电器(链接)。你的电池最终会耗尽电量。当发生这种情况时,电池充电器将为您解救。
跳线(链接)。我用了6个男女跳线来测量h-bridge和Wemos之间的信号,以及2个用于5V和Gnd的男性 - 男性跳线。如果您计划添加一些传感器,则可能需要更多。
Micro USB线。您需要这个来上传您的代码。大多数电路板已经有自己的电缆。
上面的链接只是建议您可以在哪里找到本教程中使用的项目(也许可以支持我以后的教程)。您可以随意在其他地方搜索,并在您最喜欢的本地或网上商店购买。
第2步:组装机器人
该项目的第一部分是机器人结构的组装。
在以前的项目中,我使用易于获取的材料(不需要复杂的工具,3D打印机或激光切割机)开发了我自己的机器人结构。您可以在以下链接中找到该项目:
https://www.instructables.com/id/WiDC-Wi-Fi-Controlled-FPV-Robot-with-Arduino-ESP82/
这一次,我决定给一个从网上商店获得的机器人工具包。您可以通过以下链接找到机器人机箱的链接:http://bit.ly/2ycI8fP。如果你正在寻找一个套件,我认为这是一个不错的选择!。
起初看起来装配会很复杂,或者我会遇到缺少部件等问题(考虑到数量)组成套件的部件。但是这个套件让我很惊讶!在我看来,所有的部件质量都很好,并配有几个备件。因此,在工作台下方丢失的螺丝将不会使您的项目无法实现,我发现这是非常好的(特别是在丢失几个螺钉后)。
另一个积极的一点是,所有的安装机器人所需的工具包含在套件中(一对艾伦扳手和螺丝刀)。我相信这使得该套件非常适合没有大量工具的初学者!
作为一个消极的方面,我会强调缺乏文档。机器人的装配手册(中文电子表格文件)不是非常用户友好,并且没有很多在线教程。所以我决定在上面的视频中记录组装机器人的过程!另一个关注点涉及机器人结构的材料。底座完全由铝制成,如果印刷电路板的插针接触框架,可能会导致短路。
您可以使用其他在线套件。你甚至可以制作自己的结构,如下所述。
第3步:接线电路(Wemos D1)
在上面的视频中,我将向您展示如何在机器人结构中组装电子设备。
电源由三个18650电池组成的包安装在机器人的背面。它为机器人提供11.1V(3 x 3.7V)。这足以为12V直流电机供电。
L298N双通道H桥用于控制电机。它接收Wemos板的一些3.3V信号,并为电机提供更高的电压。它还允许电机在两个方向上运行,取决于这些输入信号的组合。
每个设备都是根据原理图连接的。
按照您的引脚列表需要连接:
Wemos D1输入/输出:
数字引脚D3(GPIO5)=》 H桥ENB引脚
数字引脚D4(GPIO4)=》 H桥IN4引脚
数字引脚D5(GPIO14)=》 H桥IN3引脚
数字引脚D6( GPIO12)=》 H桥IN2引脚
数字引脚D7(GPIO13)=》 H桥IN1引脚
数字引脚D8(GPIO0)=》 H桥ENA引脚
5V引脚=》 H桥5V引脚
Gnd引脚=》 H桥Gnd引脚
H桥输入/输出:
ENB引脚=》 Wemos D3引脚
IN4引脚=》 Wemos D4引脚
IN3引脚=》 Wemos D5引脚
IN2引脚=》 Wemos D6引脚
IN1引脚=》 Wemos D7引脚
ENA引脚=》 Wemos D8引脚
5V引脚=》 Wemos 5V引脚
Gnd引脚=》 Wemos Gnd引脚
Gnd引脚=》电池组负极线
12V引脚=》电池组正极线
OUT1 =》右电机负极线
OUT2 =》右电机正极线
OUT3 =》左电机正极线
OUT4 =》左电机负极线
步骤4:在Arduino IDE上设置ESP8266板
对于这个项目,我使用Arduino IDE编程我的Wemos。如果您之前已经使用过Arduino,那么这是更简单的方法,您不需要学习新的编程语言,例如Python或Lua。
如果您以前从未这样做过,首先您必须为Arduino软件添加ESP8266板支持。
您可以在Arduino的网站上找到适用于Windows,Linux或MAC OSX的最新版本:https://www.arduino.cc/en/main/software
免费下载,将其安装到您的计算机上并启动它。
2。添加ESP8266主板
Arduino IDE已经支持很多不同的主板:Arduino Nano,Mine,Uno,Mega,Yún等。不幸的是ESP8266默认不是那些被支持的人开发板。因此,为了将代码上传到ESP8266基板,您必须首先将其属性添加到Arduino的软件中。
导航到文件》首选项(Ctrl +,在Windows操作系统上);
将以下URL添加到Additional Boards Manager文本框(Preferences窗口底部的文本框):
http://arduino.esp8266.com/stable/package_esp8266com_index.json
如果文本框不是空白,则表示之前已经在Arduino IDE上添加了其他板。在上一个URL和上面的URL末尾添加一个逗号。
点击“确定”按钮并关闭“首选项”窗口。
导航工具》 Board》 Boards Manager 以添加ESP8266板。
在搜索文本框中键入“ESP8266”,选择“ESP8266社区的esp8266”并安装它。
现在您的Arduino IDE已准备好使用许多基于ESP8266的开发板,如通用ESP8266,NodeMcu(我在本教程中使用),Adafruit Huzzah,Sparkfun Thing,WeMos等。
第3。添加库
在这个项目中,我使用了Blynk库。
应手动安装Blynk库。从https://github.com/blynkkk/blynk-library/releases/tag/v0.5.0下载Blynk库。解压缩文件,并将文件夹复制到Arduino IDE库/工具文件夹。
your_sketchbook_folder的结构现在应如下所示:
your_sketchbook_folder/libraries/Blynk
your_sketchbook_folder/库/BlynkESP8266_Lib
your_sketchbook_folder/工具/BlynkUpdater
your_sketchbook_folder/工具/BlynkUsbScript
。..。..。.. 。..
现在您的开发环境已准备就绪,让我们继续下一步!
步骤5:设置Blynk
Blynk是一项旨在通过互联网连接远程控制硬件的服务。它使您可以轻松创建物联网小工具,并支持多种硬件,如Arduinos,ESP8266,Raspberry Pi等。
您可以使用它从Android或iOS智能手机发送数据(或平板电脑)到远程设备。例如,您还可以读取,存储和显示由harware传感器获取的数据。
Blynk App 用于创建用户界面。它有各种各样的小部件:按钮,滑块,操纵杆,显示器等。用户可以将小部件拖放到仪表板并为多个项目创建自定义图形界面。
它有一个‘能源的概念。用户从2000个自由能点开始。使用的每个小部件(在任何项目中)都会消耗一些能量,从而限制了项目中使用的最大小部件数量。例如,按钮消耗200个能量点。这样,人们可以创建一个最多包含10个按钮的界面。用户可以购买额外的能量点,并创建更复杂的界面和/或几个不同的项目。
Blynk App的命令通过互联网上传到 Blynk服务器。另一个硬件(例如NodeMCU)使用 Blynk Libraries 从服务器读取这些命令并执行操作。硬件还可以向服务器提供一些数据,这些数据可能会显示在应用程序上。
从以下链接下载适用于Android或iOS的Blynk应用程序:
https://play。 google.com/store/apps/details?id=cc.blynk
https://itunes.apple.com/us/app/blynk-control-arduino-raspberry/id808760481?ls=1&mt= 8
安装应用并创建一个新帐户。之后,您将准备好创建第一个项目。
您还需要安装Blynk库并获取身份验证代码。上一步描述了安装库的过程。我将向您展示如何在下一步获取身份验证令牌。
第6步:Blynk应用程序 - 创建新项目
现在,我将向您展示如何使用Blynk设计我的遥控器应用程序。您可以将它作为自己创作的基础。
创建新项目
创建新项目;
添加项目名称( Wifi robot ),选择开发板( Wemos D1 )和连接类型( WiFi )并单击创建按钮;
身份验证令牌将发送到您的电子邮件;
使用身份验证令牌,使用Arduino代码。它允许ESP8266板到达Blynk服务器以发送和接收数据。
为了创建仪表板,您可以拖放多个对象。按钮,滑块和操纵杆可用于创建不同的控制界面。您可以根据需要调整大小(大部分)并配置其设置。
在接下来的步骤中,我将展示使用不同小部件控制机器人的四种不同选择。
第7步:Blynk App#1 - 四个按钮
这第一个应用程序我使用四个简单的按钮进行简单的控制,向前,向右,向左或向后移动机器人。为此,我在Blynk App上使用了“样式按钮”小部件。在小部件框上选择此选项,拖放,并根据需要调整按钮大小。
在按钮设置下,您必须为每个按钮命名(向前,向右,向左移动)并为每个引脚分配一个虚拟引脚作为输出。我使用了以下虚拟引脚:
正向:V0引脚
右:V1引脚
左:V2引脚
向后:V3 pin
您还必须配置开/关标签。默认情况下,它们被命名为On和Off,但我更改了以便更好地理解每个按钮的含义。您可以在上面的图片上看到最终应用的屏幕截图。
如您所见,每个按钮都是二进制的。一旦点击它们,电机就会全速运转。
如果按照我的原理图连接所有电机,你将得到以下输出:
Arduino代码:
下载代码并在Arduino IDE上打开它。在上传代码之前,您必须更新Blynk身份验证密钥和WiFi凭据(ssid和密码)。
要上传代码,请选择“Wemos D1 R2&mini”(如果您使用的是NodeMCU)上传速度为921600 kbps。在计算机的USB端口上插入电路板并上传代码。
这需要一段时间(远远超过为Arduino编写和上传草图。..。..请耐心等待。..。..)。现在是你在等待的时候给这个教练们一个喜欢的好时机! :D
上传完成后,拔下USB电缆,然后放入电池。代码将开始运行,Wemos板将自动尝试连接Wi-Fi路由器并等待来自Blynk服务器的命令。
代码说明:
在这个项目中我只不得不使用ESP8266和Blynk库。它们是在代码的开头添加的。
#include
#include
您必须配置Blynk授权密钥和Wi-Fi凭证。通过这种方式,您的ESP8266将能够到达您的Wi-Fi路由器并等待来自Blynk服务器的命令。将XXXXX,YYYYY和ZZZZZ替换为您的验证密钥(您将通过电子邮件收到),您的Wi-Fi网络的SSID和密码。
char auth[] = “XXXXX”;
char ssid[] = “YYYYY”/
char pass[] = “ZZZZZ”;
定义引脚Wemos连接到h桥。您可以使用每个引脚的GPIO编号的文字值(D1,D2,De等)。
#define ENB D3
#define MOTORB_1 D4
#define MOTORB_2 D5
#define MOTORA_1 D7
#define MOTORA_2 D6
#define ENA D8
我在设置过程中做的第一件事就是配置I/O引脚状态(作为输出)并将使能引脚设置为低电平。这样你就可以在启动时禁用两个电机,机器人在等待剩下的代码时不会随机移动。
pinMode(ENA, OUTPUT);
pinMode(MOTORA_1, OUTPUT);
pinMode(MOTORA_2, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(MOTORB_1, OUTPUT);
pinMode(MOTORB_2, OUTPUT);
digitalWrite(ENA,LOW);
digitalWrite(ENB,LOW);
然后启动串口通信(用于验证代码)和Blynk通信(此处将执行Wi-Fi连接)。
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
主循环包括仅在运行Blynk.run函数时。它将检查来自服务器的传入命令,并在发生某些事情时调用其他函数。
// MAIN CODE
void loop()
{
Blynk.run();
}
应用程序上的每个按钮都映射到虚拟引脚(V0到V3)。 BLYNK_WRITE函数检查是否单击了给定的引脚,然后执行某些操作。为每个虚拟按钮定义了相同的块。当按下按钮时,它们会让机器人沿其中一个方向移动。
// FORWARD
BLYNK_WRITE(V0) {
int button = param.asInt(); // read button
if (button == 1) {
Serial.println(“Moving forward”);
digitalWrite(ENA,HIGH);
digitalWrite(ENB,HIGH);
digitalWrite(MOTORA_1,HIGH);
digitalWrite(MOTORA_2,LOW);
digitalWrite(MOTORB_1,LOW);
digitalWrite(MOTORB_2,HIGH);
}
else {
Serial.println(“Stop”);
digitalWrite(ENA,LOW);
digitalWrite(ENB,LOW);
digitalWrite(MOTORA_1,LOW);
digitalWrite(MOTORA_2,LOW);
digitalWrite(MOTORB_1,LOW);
digitalWrite(MOTORB_2,LOW);
}
}
如果你按照我的方式连接引脚,你将得到以下输出:
输出ENAIN1IN2ENBIN3IN4
FORWARDHIGHHIGHLOWHIGHLOWHIGH
BACKWARDHIGHLOWHIGHHIGHHIGHLOW
RIGHTHIGHLOWHIGHHIGHLOWHIGH
LEFTHIGHHIGHLOWHIGHHIGHLOW
STOPLOW**LOW**
第8步:Blynk App#2 - 滑动条
在之前的应用程序中,我使用简单的按钮来控制机器人。正如我之前解释的那样,当按下按钮时,电机将全速运转。这次我做了一个使用两个滑杆的实验。每一个都将设置给定电机的速度和方向。根据每个轨道的速度,可以使机器人向前移动,向左/向右转或以可变速度返回。
为此,我在Blynk App上使用了“Vertical Slider”小部件。在窗口小部件框中选择此选项,拖放,并根据需要调整按钮的大小。后来我意识到普通的’Slider‘会是一个更好的选择(握住手机并同时移动两个电机会更舒服)。
在按钮设置下你必须命名每个按钮(向右或向左),指定虚拟引脚作为输出,并设置值的范围。我使用了以下虚拟引脚:
左:V0引脚,从-1023到1023
右:V1引脚,从-1023到1023
您可以在上面的图片上看到最终应用的屏幕截图。
请记住将“仅发布时发送值”设置为“关闭”。这样,当您更改滑块位置时,Blynk将向机器人发送命令,而不仅仅是在释放时。
Arduino代码:
代码初始化与描述的几乎相同之前。
以下几行被添加到初始化中。
Blynk.virtualWrite(V0, 0);
Blynk.virtualWrite(V1, 0);
这样滑块在启动过程中将转到零位(机器人将停止移动)。
为每个电机创建了以下代码。微控制器将读取每个滑块的值,该值将转换为每个轨道的速度。定义了死区(介于-500和500之间),以便机器人在低速时停止。
如果它接收到负速度,则切换到motor1和motor2引脚的信号。速度还决定了模拟输出中使用的PWM信号的占空比。绝对值越大,机器人运行得越快。
// LEFT TRACK
BLYNK_WRITE(V0) {
int speedL = param.asInt(); // read button
Serial.print(“Left speed: ”);
Serial.println(speedL);
if (speedL 》 500) {
analogWrite(ENB,speedL);
digitalWrite(MOTORB_1,LOW);
digitalWrite(MOTORB_2,HIGH);
}
else if (speedL 《 -500) {
analogWrite(ENB,-speedL);
digitalWrite(MOTORB_1,HIGH);
digitalWrite(MOTORB_2,LOW);
}
else {
digitalWrite(ENB,LOW);
digitalWrite(MOTORB_1,LOW);
digitalWrite(MOTORB_2,LOW);
}
}
步骤9:Blynk App#3 - Accelerometer
智能手机的某些传感器也可以与Blynk一起使用。这次我想用它的加速度计来控制我的机器人。倾斜手机,机器人将向左/向右转动或向前/向后移动。
从窗口小部件框中拖动加速度计对象并将其放在仪表板上。在按钮设置下,将虚拟引脚指定为输出。我使用虚拟引脚V0。您可以在上面的图片上看到最终应用的屏幕截图。
Arduino代码:
代码的初始化与之前描述的几乎相同。
BLYNK_WRITE(V0)函数用于读取加速度计值。 y轴上的加速度用于控制机器人是否应该向右/向左转,并且使用z轴加速度来查看机器人是否应该向前/向后移动。
代码验证是否加速度高于/低于给定的阈值,以便选择电机的速度/方向。
BLYNK_WRITE(V0) {
float y = param[1].asFloat(); // read y-axis acceleration
float z = param[2].asFloat(); // read z-axis acceleration
if (y 》 0.5) {
Serial.println(“Turning left”);
digitalWrite(ENA,HIGH);
digitalWrite(ENB,HIGH);
digitalWrite(MOTORA_1,HIGH);
digitalWrite(MOTORA_2,LOW);
digitalWrite(MOTORB_1,HIGH);
digitalWrite(MOTORB_2,LOW);
}
if (y 《 -0.5) {
Serial.println(“Turning right”);
digitalWrite(ENA,HIGH);
digitalWrite(ENB,HIGH);
digitalWrite(MOTORA_1,LOW);
digitalWrite(MOTORA_2,HIGH);
digitalWrite(MOTORB_1,LOW);
digitalWrite(MOTORB_2,HIGH);
}
if (z 《 -0.9) {
Serial.println(“Moving forward”);
digitalWrite(ENA,HIGH);
digitalWrite(ENB,HIGH);
digitalWrite(MOTORA_1,HIGH);
digitalWrite(MOTORA_2,LOW);
digitalWrite(MOTORB_1,LOW);
digitalWrite(MOTORB_2,HIGH);
}
if (z 》 0) {
Serial.println(“Moving backward”);
digitalWrite(ENA,HIGH);
digitalWrite(ENB,HIGH);
digitalWrite(MOTORA_1,LOW);
digitalWrite(MOTORA_2,HIGH);
digitalWrite(MOTORB_1,HIGH);
digitalWrite(MOTORB_2,LOW);
}
if ((y 《 0.5) and (y 》 -0.5) and (z 》 -0.9) and (z 《 0)) {
Serial.println(“Stop”);
digitalWrite(ENA,LOW);
digitalWrite(ENB,LOW);
digitalWrite(MOTORA_1,LOW);
digitalWrite(MOTORA_2,LOW);
digitalWrite(MOTORB_1,LOW);
digitalWrite(MOTORB_2,LOW);
}
}
如果未超过阈值,电机将停止。
第10步:Blynk App#4 - 操纵杆
在这个应用程序中,我使用一个操纵杆来控制机器人。定义每个轨道的速度在操纵杆的x和y位置上降低。这样,就可以在每个轨道上应用不同的速度,并以不同的速度/方向移动机器人。
-
智能手机
+关注
关注
66文章
17962浏览量
176824 -
机器人
+关注
关注
206文章
26730浏览量
200911 -
wi-fi
+关注
关注
14文章
1961浏览量
122620
发布评论请先 登录
相关推荐
评论