当前位置: 首页 > news >正文

使用 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 控制机器人&#xff0c;我们使用了一个名为“Blynk”的 Andr…...

网络安全等级保护2.0 vs GDPR vs NIST 2.0:全方位对比解析

在网络安全日益重要的今天&#xff0c;各国纷纷出台相关政策法规&#xff0c;以加强信息安全保护。本文将对比我国网络安全等级保护2.0、欧盟的GDPR以及美国的NIST 2.0&#xff0c;分析它们各自的特点及差异。 网络安全等级保护2.0 网络安全等级保护2.0是我国信息安全领域的一…...

verb words

纠正correct remedy 修正modify 协商 confer 磋商/谈判 negotiate 通知notice notify *宣布announce 声明declare 宣告 declare *颁布 promulgate /introduce 协调coordinate 评估evaluate assess 撤离evacuate *规定stipulate 参与participate&#xff0c; 涉及refer…...

unity console日志双击响应事件扩展

1 对于项目中一些比较长的日志&#xff0c;比如前后端交互协议具体数据等&#xff0c;这些日志内容可能会比较长&#xff0c;在unity控制面板上查看不是十分方便&#xff0c;我们可以对双击事件进行扩展&#xff0c;将日志保存到一个文本中&#xff0c;然后用系统默认的文本查看…...

维度建模维度表技术基础解析(以电商场景为例)

维度建模维度表技术基础解析(以电商场景为例) 维度表是维度建模的核心组成部分,其设计直接影响数据仓库的查询效率、分析灵活性和业务价值。本文将从维度表的定义、结构、设计方法及典型技术要点展开,结合电商场景案例,深入解析其技术基础。 1. 维度表的定义与作用 定义…...

Leetcode 264-丑数/LCR 168/剑指 Offer 49

题目描述 我们把只包含质因子 2、3 和 5 的数称作丑数&#xff08;Ugly Number&#xff09;。求按从小到大的顺序的第 n 个丑数。 示例: 说明: 1 是丑数。 n 不超过1690。 题解 动态规划法 根据题意&#xff0c;每个丑数都可以由其他较小的丑数通过乘以 2 或 3 或 5 得到…...

阿里云MaxCompute面试题汇总及参考答案

目录 简述 MaxCompute 的核心功能及适用场景,与传统数据仓库的区别 解释 MaxCompute 分层架构设计原则,与传统数仓分层有何异同 MaxCompute 的存储架构如何实现高可用与扩展性 解析伏羲(Fuxi)分布式调度系统工作原理 盘古(Pangu)分布式存储系统数据分片策略 计算与存…...

笔记:Directory.Build.targets和Directory.Build.props的区别

一、目的&#xff1a;分享Directory.Build.targets和Directory.Build.props的区别 Directory.Build.targets 和 Directory.Build.props 是 MSBuild 的两个功能&#xff0c;用于在特定目录及其子目录中的所有项目中应用共享的构建设置。它们的主要区别在于应用的时机和用途。 二…...

istio入门到精通-2

上部分讲到了hosts[*] 匹配所有的微服务&#xff0c;这部分细化一下 在 Istio 的 VirtualService 配置中&#xff0c;hosts 字段用于指定该虚拟服务适用的 目标主机或域名。如果使用具体的域名&#xff08;如 example.com&#xff09;&#xff0c;则只有请求的主机 域名与 exa…...

第5章:vuex

第5章&#xff1a;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是一个文本格式的配置文件&#xff0c;其内包含了一条条的指令(Instruction)&#xff0c;每一条指令构建一层&#xff0c;因此每一条指令的内容&#xff0c;就是描述该层应当如何构建。有了Dockerfile&#xff0c;当我们需要定制自己额外的需求时&#xff0c;只需在D…...

Java多线程与高并发专题——为什么 Map 桶中超过 8 个才转为红黑树?

引入 JDK 1.8 的 HashMap 和 ConcurrentHashMap 都有这样一个特点&#xff1a;最开始的 Map 是空的&#xff0c;因为里面没有任何元素&#xff0c;往里放元素时会计算 hash 值&#xff0c;计算之后&#xff0c;第 1 个 value 会首先占用一个桶&#xff08;也称为槽点&#xff…...

LeetCode hot 100—二叉树的中序遍历

题目 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#xff1a;root […...

代码随想录算法训练营第35天 | 01背包问题二维、01背包问题一维、416. 分割等和子集

一、01背包问题二维 二维数组&#xff0c;一维为物品&#xff0c;二维为背包重量 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中的报错场景

中国联通软件研究院&#xff08;简称联通软研院&#xff09;在全面评估与广泛调研后&#xff0c;在 2021年底决定采用OceanBase 作为基础&#xff0c;自研分布式数据库产品CUDB&#xff08;即China Unicom Database&#xff0c;中国联通数据库&#xff09;。目前&#xff0c;该…...

IDEA 接入 Deepseek

在本篇文章中&#xff0c;我们将详细介绍如何在 JetBrains IDEA 中使用 Continue 插件接入 DeepSeek&#xff0c;让你的 AI 编程助手更智能&#xff0c;提高开发效率。 一、前置准备 在开始之前&#xff0c;请确保你已经具备以下条件&#xff1a; 安装了 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)

你是否曾经因为害怕失败而逃避选择&#xff1f;是否因为不敢拒绝别人而让自己陷入困境&#xff1f;是否因为过于友善而被人轻视&#xff1f;如果你也曾为这些问题困扰&#xff0c;那么今天的博客就是为你准备的。我们将从行动、拒绝、自我认知、实力提升等多个角度&#xff0c;…...

C# OnnxRuntime部署DAMO-YOLO人头检测

目录 说明 效果 模型信息 项目 代码 下载 参考 说明 效果 模型信息 Model Properties ------------------------- --------------------------------------------------------------- Inputs ------------------------- name&#xff1a;input tensor&#xff1a;Floa…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...