使用 Arduino 的 WiFi 控制机器人

使用 Arduino 的 WiFi 控制机器人
这次我们将使用 Arduino 和 Blynk 应用程序制作一个 Wi-Fi 控制的机器人。这款基于 Arduino 的机器人可以使用任何支持 Wi-Fi 的 Android 智能手机进行无线控制。
为了演示 Wi-Fi 控制机器人,我们使用了一个名为“Blynk”的 Android 移动应用程序。Blynk 是一个与 Arduino 非常兼容的应用程序,用于制作基于 IoT 的项目。此应用程序可以从 Google Play 商店下载,并且可以轻松配置。
配置 Blynk 应用程序的步骤:
1. 首先从 Google Play 商店下载并安装在 Android 手机上。
2. 在此之后,需要创建一个帐户。您可以使用您当前的 Gmail 帐户。
3. 现在选择 Arduino Board 并为您的项目命名。

4. 记下 Auth Token 代码,或者直接将其邮寄到您的电子邮件帐户,然后复制并粘贴 Arduino sketch(程序代码)。

5. 在 Arduino sketch 中输入此 Auth Token 代码。
<span style="color:#e4e4e4"><span style="background-color:#1e1e1e">// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "caa17a11c0124d4083d0eaa995f45917";</span></span>
6. 然后点击 Blynk 应用程序中的创建按钮。
7. 现在选择纵杆小部件,单击纵杆,配置纵杆(请参阅最后的视频)并点击返回按钮。



8. 之后按屏幕右上角的 Play 按钮。
所有这些使用 Blynk 应用程序的过程,都在视频中清楚地解释了,最后给出了。
所需组件:
- Arduino UNO
- ESP8266 Wi-Fi 模块
- USB 数据线
- 连接电线
- L293D 系列
- 直流电动机
- 电池
- 10K POT(可选)
- 机器人底盘加轮
- 滚轮脚轮
- Android 手机
- Blynk 应用程序
电路说明:

Wi-Fi 控制机器人的电路图如下。我们主要需要一个 Arduino 和 ESP8266 个 Wi-Fi 模块。ESP8266 的 Vcc 和 GND 引脚直接连接到 Arduino 的 3.3V 和 GND,CH_PD也连接到 3.3V。ESP8266 的 Tx 和 Rx 引脚直接连接到 Arduino 的引脚 2 和 3。软件串行库用于允许在 Arduino 的引脚 2 和 3 上进行串行通信。我们已经详细介绍了 ESP8266 Wi-Fi 模块与 Arduino 的接口。
L293D 电机驱动器 IC 用于驱动直流电机。电机驱动 IC 的输入引脚直接连接到 Arduino 的引脚 8、9、10 和 11。直流电机连接在其输出引脚处。在这里,我们使用 9 伏电池来驱动电路和直流电机。
工作说明:

Wi-Fi 控制的机器人的工作非常简单,我们只需要将纵杆拖动到我们想要移动机器人的方向即可。就像,如果我们想向前移动机器人,那么我们需要向前拖动纵杆“圆圈”。同样,我们可以通过向相应方向拖动纵杆来向左、向右和向后移动机器人。现在,一旦我们松开纵杆,它就会回到中心,机器人停止。
Blynk 应用程序通过 Wi-Fi 介质将值从双轴纵杆发送到 Arduino。Arduino 接收值,将它们与预定义的值进行比较,并相应地将机器人移动到该方向。
编程说明:
程序在 Arduino IDE 中几乎是现成的。我们只需要下载 Arduino 的 Blynk 库。并且经过一些修改后,用户可以制作自己的 Wi-Fi 控制机器人。
首先,我们包含了在 Arduino IDE 中运行此代码所需的所有库,然后在身份验证字符串中输入 Blynk 应用程序中的 Auth Token。在这里,我们将 Wi-Fi 串行引脚与 Arduino 的软件串行连接起来。选择引脚 2 作为 RX,选择引脚 3 作为 TX。
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space #include <ESP8266_SoftSer.h> #include <BlynkSimpleShieldEsp8266_SoftSer.h>// Set ESP8266 Serial object #include <SoftwareSerial.h> SoftwareSerial EspSerial(2, 3); // RX, TXESP8266 wifi(EspSerial);// You should get Auth Token in the Blynk App. // Go to the Project Settings (nut icon). char auth[] = "caa17a11c0124d4083d0eaa995f45917";
然后我们为电机定义了输出引脚(8,9,10,11),并编写了一些方向函数来将机器人移动到特定方向:void forward(),void backward(),void right() 和 void left()
在此之后,在设置功能中,我们初始化所有需要的设备,例如为电机引脚提供方向,开始串行通信,提供 Wi-Fi 用户名和密码。
void setup()
{// Set console baud rateSerial.begin(9600);delay(10);// Set ESP8266 baud rate// 9600 is recommended for Software SerialEspSerial.begin(9600);delay(10);Blynk.begin(auth, wifi, "username", "password"); // wifi username and passwordpinMode(m11, OUTPUT);pinMode(m12, OUTPUT);pinMode(m21, OUTPUT);pinMode(m22, OUTPUT);
}
现在我们已经检查了一些控制机器人的条件。这里我们选择了虚拟引脚 1 (V1) 来从 Blynk 应用程序获取输入来控制机器人。由于我们在应用程序中使用了 marge 选项,因此我们将在同一引脚上获得 x 和 y 轴值。
BLYNK_WRITE(V1)
{int x = param[0].asInt();int y = param[1].asInt();if(y>220)forward();else if(y<35)backward();else if(x>220)right();else if(x<35)left();elseStop();
}
最后我们需要在循环中运行 blynk 函数,以运行系统。
完成项目代码
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include <ESP8266_SoftSer.h>
#include <BlynkSimpleShieldEsp8266_SoftSer.h>
// Set ESP8266 Serial object
#include <SoftwareSerial.h>
SoftwareSerial EspSerial(2, 3); // RX, TX
ESP8266 wifi(EspSerial);
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "caa17a11c0124d4083d0eaa995f45917";
#define m11 8
#define m12 9
#define m21 10
#define m22 11
void forward()
{digitalWrite(m11, HIGH);digitalWrite(m12,LOW);digitalWrite(m21,HIGH);digitalWrite(m22,LOW);
}
void backward()
{digitalWrite(m11, LOW);digitalWrite(m12,HIGH);digitalWrite(m21,LOW);digitalWrite(m22,HIGH);
}
void right()
{digitalWrite(m11, HIGH);digitalWrite(m12,LOW);digitalWrite(m21,LOW);digitalWrite(m22,LOW);
}
void left()
{digitalWrite(m11, LOW);digitalWrite(m12,LOW);digitalWrite(m21,HIGH);digitalWrite(m22,LOW);
}
void Stop()
{digitalWrite(m11, LOW);digitalWrite(m12,LOW);digitalWrite(m21,LOW);digitalWrite(m22,LOW);
}
void setup()
{// Set console baud rateSerial.begin(9600);delay(10);// Set ESP8266 baud rate// 9600 is recommended for Software SerialEspSerial.begin(9600);delay(10);Blynk.begin(auth, wifi, "username", "password"); // wifi username and passwordpinMode(m11, OUTPUT);pinMode(m12, OUTPUT);pinMode(m21, OUTPUT);pinMode(m22, OUTPUT);
}
BLYNK_WRITE(V1)
{int x = param[0].asInt();int y = param[1].asInt();// Do something with x and y
/* Serial.print("X = ");Serial.print(x);Serial.print("; Y = ");Serial.println(y);*/if(y>220)forward();else if(y<35)backward();else if(x>220)right();else if(x<35)left();elseStop();
}
void loop()
{Blynk.run();
}
视频
相关文章:
使用 Arduino 的 WiFi 控制机器人
使用 Arduino 的 WiFi 控制机器人 这次我们将使用 Arduino 和 Blynk 应用程序制作一个 Wi-Fi 控制的机器人。这款基于 Arduino 的机器人可以使用任何支持 Wi-Fi 的 Android 智能手机进行无线控制。 为了演示 Wi-Fi 控制机器人,我们使用了一个名为“Blynk”的 Andr…...
网络安全等级保护2.0 vs GDPR vs NIST 2.0:全方位对比解析
在网络安全日益重要的今天,各国纷纷出台相关政策法规,以加强信息安全保护。本文将对比我国网络安全等级保护2.0、欧盟的GDPR以及美国的NIST 2.0,分析它们各自的特点及差异。 网络安全等级保护2.0 网络安全等级保护2.0是我国信息安全领域的一…...
verb words
纠正correct remedy 修正modify 协商 confer 磋商/谈判 negotiate 通知notice notify *宣布announce 声明declare 宣告 declare *颁布 promulgate /introduce 协调coordinate 评估evaluate assess 撤离evacuate *规定stipulate 参与participate, 涉及refer…...
unity console日志双击响应事件扩展
1 对于项目中一些比较长的日志,比如前后端交互协议具体数据等,这些日志内容可能会比较长,在unity控制面板上查看不是十分方便,我们可以对双击事件进行扩展,将日志保存到一个文本中,然后用系统默认的文本查看…...
维度建模维度表技术基础解析(以电商场景为例)
维度建模维度表技术基础解析(以电商场景为例) 维度表是维度建模的核心组成部分,其设计直接影响数据仓库的查询效率、分析灵活性和业务价值。本文将从维度表的定义、结构、设计方法及典型技术要点展开,结合电商场景案例,深入解析其技术基础。 1. 维度表的定义与作用 定义…...
Leetcode 264-丑数/LCR 168/剑指 Offer 49
题目描述 我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。 示例: 说明: 1 是丑数。 n 不超过1690。 题解 动态规划法 根据题意,每个丑数都可以由其他较小的丑数通过乘以 2 或 3 或 5 得到…...
阿里云MaxCompute面试题汇总及参考答案
目录 简述 MaxCompute 的核心功能及适用场景,与传统数据仓库的区别 解释 MaxCompute 分层架构设计原则,与传统数仓分层有何异同 MaxCompute 的存储架构如何实现高可用与扩展性 解析伏羲(Fuxi)分布式调度系统工作原理 盘古(Pangu)分布式存储系统数据分片策略 计算与存…...
笔记:Directory.Build.targets和Directory.Build.props的区别
一、目的:分享Directory.Build.targets和Directory.Build.props的区别 Directory.Build.targets 和 Directory.Build.props 是 MSBuild 的两个功能,用于在特定目录及其子目录中的所有项目中应用共享的构建设置。它们的主要区别在于应用的时机和用途。 二…...
istio入门到精通-2
上部分讲到了hosts[*] 匹配所有的微服务,这部分细化一下 在 Istio 的 VirtualService 配置中,hosts 字段用于指定该虚拟服务适用的 目标主机或域名。如果使用具体的域名(如 example.com),则只有请求的主机 域名与 exa…...
第5章:vuex
第5章:vuex 1 求和案例 纯vue版2 vuex工作原理图3 vuex案例3.1 搭建vuex环境错误写法正确写法 3.2 求和案例vuex版细节分析源代码 4 getters配置项4.1 细节4.2 源代码 5 mapState与mapGetters5.1 总结5.2 细节分析5.3 源代码 6 mapActions与mapMutations6.1 总结6.2…...
[Python入门学习记录(小甲鱼)]第5章 列表 元组 字符串
第5章 列表 元组 字符串 5.1 列表 一个类似数组的东西 5.1.1 创建列表 一个中括号[ ] 把数据包起来就是创建了 number [1,2,3,4,5] print(type(number)) #返回 list 类型 for each in number:print(each) #输出 1 2 3 4 5#列表里不要求都是一个数据类型 mix [213,"…...
Docker 学习(四)——Dockerfile 创建镜像
Dockerfile是一个文本格式的配置文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。有了Dockerfile,当我们需要定制自己额外的需求时,只需在D…...
Java多线程与高并发专题——为什么 Map 桶中超过 8 个才转为红黑树?
引入 JDK 1.8 的 HashMap 和 ConcurrentHashMap 都有这样一个特点:最开始的 Map 是空的,因为里面没有任何元素,往里放元素时会计算 hash 值,计算之后,第 1 个 value 会首先占用一个桶(也称为槽点ÿ…...
LeetCode hot 100—二叉树的中序遍历
题目 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2]示例 2: 输入:root [] 输出:[]示例 3: 输入:root […...
代码随想录算法训练营第35天 | 01背包问题二维、01背包问题一维、416. 分割等和子集
一、01背包问题二维 二维数组,一维为物品,二维为背包重量 import java.util.Scanner;public class Main{public static void main(String[] args){Scanner scanner new Scanner(System.in);int n scanner.nextInt();int bag scanner.nextInt();int[…...
与中国联通技术共建:通过obdiag分析OceanBase DDL中的报错场景
中国联通软件研究院(简称联通软研院)在全面评估与广泛调研后,在 2021年底决定采用OceanBase 作为基础,自研分布式数据库产品CUDB(即China Unicom Database,中国联通数据库)。目前,该…...
IDEA 接入 Deepseek
在本篇文章中,我们将详细介绍如何在 JetBrains IDEA 中使用 Continue 插件接入 DeepSeek,让你的 AI 编程助手更智能,提高开发效率。 一、前置准备 在开始之前,请确保你已经具备以下条件: 安装了 JetBrains IDEA&…...
斗地主小游戏
<!DOCTYPE html> <html><head><meta charset="utf-8"><title>斗地主</title><style>.game-container {width: 1000px;height: 700px;margin: 0 auto;position: relative;background: #35654d;border-radius: 10px;padding…...
如何改变怂怂懦弱的气质(2)
你是否曾经因为害怕失败而逃避选择?是否因为不敢拒绝别人而让自己陷入困境?是否因为过于友善而被人轻视?如果你也曾为这些问题困扰,那么今天的博客就是为你准备的。我们将从行动、拒绝、自我认知、实力提升等多个角度,…...
C# OnnxRuntime部署DAMO-YOLO人头检测
目录 说明 效果 模型信息 项目 代码 下载 参考 说明 效果 模型信息 Model Properties ------------------------- --------------------------------------------------------------- Inputs ------------------------- name:input tensor:Floa…...
Legacy-iOS-Kit系统降级全指南:让老旧iOS设备重获新生
Legacy-iOS-Kit系统降级全指南:让老旧iOS设备重获新生 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to downgrade/restore, save SHSH blobs, and jailbreak legacy iOS devices 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit 一、问…...
Qwen2.5-72B-Instruct-GPTQ-Int4实战案例:新能源电池BMS日志分析与故障模式推演
Qwen2.5-72B-Instruct-GPTQ-Int4实战案例:新能源电池BMS日志分析与故障模式推演 1. 项目背景与模型介绍 新能源电池管理系统(BMS)是电动汽车和储能系统的核心组件,每天产生大量运行日志数据。传统分析方法依赖人工经验,效率低下且难以发现潜…...
图像处理中的频域魔法:用傅里叶变换消除噪点与增强细节的3种技巧
图像处理中的频域魔法:用傅里叶变换消除噪点与增强细节的3种技巧 当你在处理一张模糊的医学影像或卫星图片时,是否想过那些隐藏在像素背后的频率秘密?傅里叶变换就像一台精密的频谱分析仪,能将图像从空间域转换到频域,…...
typedef用法
将为你介绍typedef 4 种应用方式。应用一、为基本数据类型定义新的类型名用uint32_t替代unsigned int声明变量/* 变量名重定义 */typedef unsigned int uint32_t;/* 定义一个unsigned int类型的变量 */uint32_t count 0;应用二、为自定义数据类型(结构体、共用体和…...
如何快速上手BepInEx:3个高效秘诀解锁Unity游戏插件开发
如何快速上手BepInEx:3个高效秘诀解锁Unity游戏插件开发 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx 想象一下,你心爱的Unity游戏缺少某个功能ÿ…...
告别临时表!MySQL8窗口函数优化复杂统计查询的3种典型方案
MySQL8窗口函数实战:3种替代临时表的高效统计方案 在数据分析与报表生成场景中,开发人员经常需要处理复杂的多维度统计需求。传统解决方案往往依赖临时表和多次查询拼接,不仅代码冗长,还存在显著的性能瓶颈。MySQL8引入的窗口函数…...
SDMatte与LSTM时序模型结合:处理视频连续帧的稳定抠图
SDMatte与LSTM时序模型结合:处理视频连续帧的稳定抠图 1. 引言:视频抠图的挑战与机遇 视频抠图技术一直是影视后期和直播领域的核心需求。传统方法在处理动态场景时常常面临边缘闪烁、细节丢失和时间不一致等问题。想象一下,当你在视频会议…...
实测通义千问3-Reranker-0.6B:轻量模型如何让电商商品搜索更准确
实测通义千问3-Reranker-0.6B:轻量模型如何让电商商品搜索更准确 1. 电商搜索的痛点与解决方案 在电商平台上,用户输入"真丝连衣裙"却看到牛仔裤推荐,这种糟糕的搜索体验每天都在发生。传统搜索技术依赖关键词匹配和简单规则&…...
避坑指南:CentOS虚拟机重启报rdsosreport.txt错误时,为什么xfs_repair有时需要-L参数?
CentOS虚拟机XFS文件系统修复实战:为什么-L参数是最后的救命稻草? 当你深夜加班部署服务,突然虚拟机异常断电,重启后屏幕上赫然出现"generating /run/initramfs/rdsosreport.txt"的报错——这个场景足以让任何Linux管理…...
Retinaface+CurricularFace在网络安全领域的创新应用
RetinafaceCurricularFace在网络安全领域的创新应用 1. 引言 想象一下这样的场景:一家金融机构的服务器机房,只有授权人员才能进入;一个远程办公系统,确保登录者确实是员工本人;一个高安全性的数据平台,每…...
