基于Arduino UNO的循迹小车

news2025/1/4 16:16:41

目录

1.analogWrite函数的使用

2.红外循迹模块介绍

3.循迹小车代码实现

4.实物示例

1.analogWrite函数的使用

用analogWrite来替换digitalWrite

说明

将一个模拟数值写进Arduino引脚。这个操作可以用来控制LED的亮度, 或者控制电机的转速.

在Arduino UNO控制器中, analogWrite()函数支持以下引脚: 3, 5, 6, 9, 10, 11 在调用analogWrite()函数前,您无需使用pinMode()函数来设置该引脚。

语法

analogWrite(pin, value)

参数

pin :被读取的模拟引脚号码

value :0到255之间的PWM频率值, 0对应off, 255对应on

小车接线情况说明(具体看个人)

2,3控左电机,4,5控右电机

代码示例:

//小车前进的代码是:
void qianJin() {
// 小车前进的功能
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
}
//如果我们只对前进,左转,右转控制速度
//由于硬件特性:Arduino UNO的3,5口支持analogWrite函数,2,4口不支持
//所以,我希望前进的代码是
void qianJin() {
// 小车前进的功能
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
}
//此时,把接口4,5的杜邦线对调
//为了速度控制可以优化代码成
void qianJin() {
// 小车前进的功能
digitalWrite(2, LOW);
analogWrite(3, 120);
digitalWrite(4, HIGH);
analogWrite(5, 120);//120是
}

控制前进速度的代码:

/*
把IO口4和IO口5的接线对调!
前进代码左轮3是模拟输出,5是模拟输出,2和4口不支持,直接给低电平
3口和5口支持模拟输出,达到小车前进方向上的速度控制目的。
*/
void carInit()
{
// put your setup code here, to run once:
pinMode(2, OUTPUT); // 配置2口为输出引脚
pinMode(3, OUTPUT); // 配置3口为输出引脚
//右轮信号方向初始化
pinMode(4, OUTPUT); // 配置4口为输出引脚
pinMode(5, OUTPUT); // 配置5口为输出引脚
}
void qianJin() {
// 小车前进的功能
digitalWrite(2, LOW);
analogWrite(3, 230);
digitalWrite(4, LOW);
analogWrite(5, 230);
}
void setup() {
// put your setup code here, to run once:
carInit();
}
void loop() {
// put your main code here, to run repeatedly:
qianJin();
}

控制前进左转右转:

void carInit()
{
// put your setup code here, to run once:
pinMode(2, OUTPUT); // 配置2口为输出引脚
pinMode(3, OUTPUT); // 配置3口为输出引脚
//右轮信号方向初始化
pinMode(4, OUTPUT); // 配置4口为输出引脚
pinMode(5, OUTPUT); // 配置5口为输出引脚
}
void qianJin() {
// 小车前进的功能
digitalWrite(2, LOW);
analogWrite(3, 150);
digitalWrite(4, LOW);
analogWrite(5, 150);
}
void zuoZhuan() {
// 小车左转,左边电机速度慢,右边电机速度快
digitalWrite(2, LOW);
analogWrite(3, 90); //左
digitalWrite(4, LOW);
analogWrite(5, 250);//右
}
void youZhuan() {
// 小车左转,左边电机速度慢,右边电机速度快
digitalWrite(2, LOW);
analogWrite(3, 250); //左
digitalWrite(4, LOW);
analogWrite(5, 90);//右
}
void setup() {
// put your setup code here, to run once:
carInit();
}
void loop() {
// put your main code here, to run repeatedly:
youZhuan();
}

2.红外循迹模块介绍

我这里用的是红外循迹模块TCRT5000

简单概括:没反射回来,D0输出高电平,灭灯

(1)什么情况下红外线没有返回来

         红外照射在黑线上

         在黑线上DO电平表现为高电平!

         灯的表现为灭灯

(2)什么时候该左转

         说明小车偏右,说明左循迹模块在黑线上,左循迹模块的电平表现为高电平

         右循迹模块能接收到红外,电平表现为低电平

(3)什么实时该右转

         说明小车偏左,右循迹在黑线上,右循迹高电平,左循迹低电平

3.循迹小车代码实现

/*
做循迹模块接Arduino的11口,右循迹模块接Arduinod的12口
小车控制速度前进
*/
int leftX = 11;
int rightX = 12;
void carInit()
{
// put your setup code here, to run once:
pinMode(2, OUTPUT); // 配置2口为输出引脚
pinMode(3, OUTPUT); // 配置3口为输出引脚
//右轮信号方向初始化
pinMode(4, OUTPUT); // 配置4口为输出引脚
pinMode(5, OUTPUT); // 配置5口为输出引脚
}
void qianJin() {
// 小车前进的功能
digitalWrite(2, LOW);
analogWrite(3, 100);
digitalWrite(4, LOW);
analogWrite(5, 100);
}
void ting() {
// 小车前进的功能
digitalWrite(2, LOW);
analogWrite(3, 0);
digitalWrite(4, LOW);
analogWrite(5, 0);
}
void zuoZhuan() {
// 小车左转,左边电机速度慢,右边电机速度快
digitalWrite(2, LOW);
analogWrite(3, 80); //左
digitalWrite(4, LOW);
analogWrite(5, 250);//右
}
void youZhuan() {
// 小车左转,左边电机速度慢,右边电机速度快
digitalWrite(2, LOW);
analogWrite(3, 250); //左
digitalWrite(4, LOW);
analogWrite(5, 80);//右
}
void setup() {
// put your setup code here, to run once:
carInit();
pinMode(leftX,INPUT);
pinMode(rightX,INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
//什么时候该左转
//左循迹模块的电平表现为高电平,右循迹模块表现为低电平
if( digitalRead(leftX) == 1 && digitalRead(rightX) == 0 ){
zuoZhuan();
}
//什么时候右转
//右循迹高电平,左循迹低电平
if( digitalRead(leftX) == 0 && digitalRead(rightX) == 1 ){
youZhuan();
}
//什么时候前进
//左右都为低电平
if( digitalRead(leftX) == 0 && digitalRead(rightX) == 0 ){
qianJin();
}
//什么时候停
//左右都为高电平
if( digitalRead(leftX) == 1 && digitalRead(rightX) == 1 ){
ting();
}
}

4.实物示例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/688502.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于二叉树的操作,详细操作与实现方法

树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。在面试环节中,二叉树也是必考的模块。本文主要讲二叉树操作的相关知识,梳理面试常考的内容。一起来复习吧。 本篇针对面试中常见的二叉树操作作个总结: 前序遍历&#x…

Kubernetes(k8s)容器编排控制器使用

目录 1 Pod控制器1.1 Pod控制器是什么1.2 Pod和Pod控制器1.3 控制器的必要性1.4 常见的控制器1.4.1 ReplicaSet1.4.2 Deployment1.4.3 DaemonSet 2 ReplicaSet控制器2.1 ReplicaSet概述2.2 ReplicaSet功能2.2.1 精确反应期望值2.2.2 保证高可用2.2.3 弹性伸缩 2.3 创建ReplicaS…

专项练习12

目录 一、选择题 1、JavaScript中定义var a"40",var b7,则执行a%b会得到? 2、下面哪个选项中的对象与浏览列表有关( ) 3、下面哪一个语句可以实现在jQuery中找到所有元素的同辈元素? 4、如何阻止IE和各大浏览器默认行为…

CVSS4.0将于2023年底正式发布

通用漏洞评分系统(CVSS)是一种流行的、标准化的方法,用于评估数字系统安全漏洞的严重程度。由事件反应和安全小组论坛(FIRST)开发,它为安全专业人员提供了评估和优先排序风险的一致方法。 目前的CVSS v3.0已经运行了十多年,但因其复杂性和灵…

Jenkins 持续集成:Linux 系统 两台机器互相免密登录

背景知识 我们把public key放在远程系统合适的位置,然后从本地开始进行ssh连接。 此时,远程的sshd会产生一个随机数并用我们产生的public key进行加密后发给本地,本地会用private key进行解密并把这个随机数发回给远程系统。 最后&#xf…

ModaHub魔搭社区:向量数据库MIlvus服务端配置(四)

目录 常见问题 常见问题 除了配置文件外,怎样可以判断我确实在使用 GPU 做搜索? 有以下三种方式: 使用 nvidia-smi 命令查看 GPU 使用情况。用 Prometheus 配置,详见 使用 Grafana 展示监控指标 > 系统运行指标。使用 Milv…

一文教你Mysql如何性能优化

Mysql性能优化 Mysql性能优化 性能优化维度 数据库优化思路 应急调优的思路: 针对突然的业务办理卡顿,无法进行正常的业务处理!需要立马解决的场景! show processlist(查看连接session状态) explain(分…

hudi系列-timeline service

Timeline Service(时间线服务)是hudi的一个组件,用于暴露文件系统视图接口给客户端,是一个基于Javalin+Jetty实现的web服务。当客户端使用远程文件系统视图(RemoteHoodieTableFileSystemView)时,就是访问时间线服务http接口 默认情况下,如果开启了时间线服务,则它运行在…

支付中心“收银台“设计方案

01.收银台的产品架构 重点收银台架构的三个方面: 1.公司所支持的收银台种类以未来拓展倾向 2.支付方式的枚举及根据业务发展预判拓展倾向 3.收银台服务端的能力建设规划和选择 02.收银台的业务架构 收银台,是支付的起点,所以无论是何种…

接口自动化测试学习笔记分享(附上视频教程供你学习)

目录 接口自动化测试框架介绍 目录 接口测试场景 自动化测试场景 接口测试在分层测试中的位置 接口自动化测试与 Web/App 自动化测试对比 接口自动化测试与 Web/App 自动化测试对比 接口测试工具类型 为什么推荐 Requests Requests 优势 Requests 环境准备 接口请求…

Java安全——应用安全

Java安全 Java 应用安全 JCE(Java Cryptography Extension)java加密扩展包 Java Cryptography Extension(JCE)是一个可选的Java标准扩展,提供了一组用于加密、密钥生成和密钥协商等功能的类和接口。JCE包含了导入、生…

【ChatGpt】解决视频框交换中的平滑过渡的问题

【ChatGpt】解决视频框交换中的平滑过渡的问题 问题抽象chatgpt 看看直接给参考代码 解决效果 问题 在视频的播放中,我们想调换下容器的位置 ,在互调的过程中,如果需要重新进行数据的初始化,获取与加载,就会很慢&…

RocketMQ --- 原理篇

一、专业术语 Producer 消息生产者,负责产生消息,一般由业务系统负责产生消息。 Consumer 消息消费者,负责消费消息,一般是后台系统负责异步消费。 Push Consumer Consumer 的一种,应用通常向 Consumer 对象注册一个…

基于JavaScript的百度AI的人脸识别微信小程序(深度学习+机器视觉)含全部工程源码及视频演示(仅供学习)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. Access token 获取2. 人脸注册3. 人脸删除4. 人脸识别 系统测试工程源代码下载其它资料下载 前言 本项目采用了百度AI的训练模型,利用图像识别接口返回结果,旨在实现人脸在库中的判断&am…

制造业质量管理如何实现数字化转型?这份指南讲透了

一、什么是制造业质量管理 制造业质量管理是现代制造业非常重要的一个方面。它包括了一系列的活动和方法,以确保制造产品或提供服务的过程中,实现高质量标准的目标。 制造业质量管理包括质量规划、控制和改进等各种方法和工具,以确保产品或…

4.25 IO多路复用简介 4.26select API介绍 4.27 select代码编写

4.25 IO多路复用简介 IO多路复用使得程序能同时监听多个文件描述符,能够提高程序的性能,Linux下实现IO多路复用的系统调用主要有select、poll和epoll。 4.26select API介绍 主旨思想: 1、首先构造一个关于文件描述符的列表&#xff…

【高危】Openfire权限绕过漏洞(POC公开)

漏洞描述 Openfire是Java开发且基于XMPP(前称Jabber,即时通讯协议)的开源实时协作(RTC)服务器。 在受影响版本中,由于路径验证机制存在缺陷,攻击者可以通过/setup/setup-s/%u002e%u002e/%u002e…

基于Python所写的学生管理系统

点击下方链接获取源码资源: https://download.csdn.net/download/qq_64505944/87950397?spm1001.2014.3001.5503 《学生信息管理系统》程序使用说明 在IDLE中运行《学生信息管理系统》即可进入如图1所示的系统主界面。在该界面中可以选择要使用功能对应的菜单进行…

【编译、链接、装载十四】堆与内存管理

【编译、链接、装载十四】堆与内存管理 一、堆与内存管理1、什么是堆 二、Linux进程堆管理三、Windows进程堆管理Q&A 一、堆与内存管理 相对于栈而言, 堆这片内存面临一个稍微复杂的行为模式: 在任意时刻, 程序可能发出请求,…

请求响应相关知识点

这里写目录标题 请求响应概述 请求postman各种参数的封装以及接收简单参数原始方式springboot方式映射解决参数不匹配小结 实体参数简单的实体参数复杂的实体参数注意点 数组集合参数数组集合总结 日期参数json参数模拟发送注意点服务端注意点 路径参数各个参数总结 响应注解统…