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

用PS2手柄和Arduino UNO做个遥控小车,手把手教你从接线到代码调试(附完整代码)

用PS2手柄和Arduino UNO打造智能遥控小车从硬件搭建到代码实战还记得小时候玩遥控车的兴奋感吗现在你可以亲手制作一台属于自己的智能遥控小车这个项目不仅能让你重温童年乐趣还能学习到Arduino编程、电机控制和无线通信等实用技能。整个过程就像搭积木一样简单有趣即使你是第一次接触Arduino也能轻松上手。1. 项目准备硬件清单与功能解析1.1 核心组件详解让我们先来看看需要准备哪些积木块Arduino UNO开发板项目的大脑负责处理PS2手柄的指令并控制电机。它具备14个数字I/O口其中6个支持PWM输出和6个模拟输入口完全能满足我们的需求。PS2手柄与接收器无线遥控的核心部件。接收器通过SPI协议与Arduino通信手柄的按键和摇杆状态会被实时传输。特别要注意的是手柄的两种工作模式模式LED颜色摇杆输出特点数字模式红色摇杆只有0/1两种状态模拟模式绿色摇杆输出0-255的模拟值L298N电机驱动模块电机的肌肉。这个双H桥驱动芯片可以同时控制两个直流电机支持PWM调速。它的主要参数如下// 典型接线示例 int enA 5; // 电机A使能端(PWM) int in1 6; // 电机A方向控制1 int in2 7; // 电机A方向控制2 int in3 8; // 电机B方向控制1 int in4 9; // 电机B方向控制2 int enB 10; // 电机B使能端(PWM)1.2 辅助材料与工具除了核心组件你还需要准备小车底盘套件含电机和轮子面包板和跳线若干7.4V锂电池组建议使用2节18650电池螺丝刀、热熔胶枪等基础工具万用表非必须但调试时很有用提示购买小车底盘时建议选择带编码器的电机这样后续可以扩展速度闭环控制功能。2. 硬件搭建从零开始组装你的遥控小车2.1 电路连接步骤让我们一步步把各个模块连接起来PS2接收器接线CLK → Arduino数字引脚12CMD → 数字引脚11SEL → 数字引脚10DAT → 数字引脚13VCC → 3.3VGND → GNDL298N电机驱动接线电机A输出 → 连接左侧电机电机B输出 → 连接右侧电机12V电源输入 → 锂电池正极GND → 锂电池负极和Arduino GND使能端ENA/ENB → Arduino PWM引脚(5,6)方向控制IN1-IN4 → Arduino数字引脚(7,8,9,10)Arduino供电建议通过Vin引脚供电7-12V范围也可以使用USB供电但电机动力可能不足2.2 机械结构组装组装小车底盘时要注意确保电机安装牢固轮子转动顺畅电池最好安装在底盘中心位置保持平衡Arduino和L298N可以用尼龙扎带或3M胶固定留出足够的线长以便调试但不要太长避免缠绕常见问题如果电机转动方向与预期相反只需调换电机两根线的连接顺序即可。3. 软件实现代码详解与功能优化3.1 基础库安装与配置首先需要安装PS2X库在Arduino IDE中点击工具→管理库搜索PS2X并安装Bill Porter的版本在代码中添加头文件#include PS2X_lib.h库的初始化代码如下PS2X ps2x; // 创建PS2控制器实例 #define PS2_DAT 13 #define PS2_CMD 11 #define PS2_SEL 10 #define PS2_CLK 12 void setup() { Serial.begin(9600); delay(300); // 给接收器启动时间 int error ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT); if(error ! 0) { Serial.print(手柄连接错误: ); Serial.println(error); } }3.2 电机控制逻辑实现我们为小车设计四种基本运动模式前进/后退两侧电机同向转动左右转向两侧电机反向转动原地旋转一侧前进一侧后退变速控制通过PWM调节速度对应的函数实现void moveForward(int speed) { analogWrite(ena, speed); analogWrite(enb, speed); digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); } void moveBackward(int speed) { analogWrite(ena, speed); analogWrite(enb, speed); digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); } void turnLeft(int speed) { analogWrite(ena, speed); analogWrite(enb, speed); digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); } void stopMotors() { digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); }3.3 手柄按键映射与响应在loop()函数中我们读取手柄状态并控制小车void loop() { ps2x.read_gamepad(); // 读取手柄状态 if(ps2x.Button(PSB_PAD_UP)) { moveForward(200); // 前进 } else if(ps2x.Button(PSB_PAD_DOWN)) { moveBackward(200); // 后退 } else if(ps2x.Button(PSB_PAD_LEFT)) { turnLeft(150); // 左转 } else if(ps2x.Button(PSB_PAD_RIGHT)) { turnRight(150); // 右转 } else { stopMotors(); // 停止 } delay(50); // 适当延时 }4. 调试技巧与进阶优化4.1 常见问题排查遇到问题时可以按照以下步骤检查手柄无响应检查接收器接线是否正确确认手柄电池有电尝试按MODE键切换手柄模式电机不转用万用表测量电机两端电压检查L298N使能跳线帽是否插上确认PWM信号是否正常输出小车运动不稳定检查电源是否充足建议单独给电机供电调整PWM频率默认约490Hz添加软件消抖处理4.2 功能扩展建议完成基础功能后可以尝试以下进阶玩法摇杆精确控制使用模拟值实现变速和转向按键自定义为不同按键分配特殊功能状态反馈添加LED指示灯显示小车状态自动避障加装超声波传感器实现半自动控制手机APP控制通过蓝牙模块替换PS2手柄// 摇杆控制示例代码 int ly ps2x.Analog(PSS_LY); // 获取左摇杆Y轴值 int rx ps2x.Analog(PSS_RX); // 获取右摇杆X轴值 // 将摇杆值映射到电机速度 int leftSpeed map(ly, 0, 255, -255, 255); int rightSpeed map(rx, 0, 255, -255, 255); // 设置电机速度 setMotorSpeed(leftSpeed, rightSpeed);5. 项目总结与实用建议在实际制作过程中我发现几个值得注意的细节电源管理电机启动时会产生较大电流冲击建议在电源端并联一个大容量电容如1000μF稳压。线缆整理使用热缩管或缠绕管整理线缆避免运动中拉扯导致接触不良。调试技巧可以先在桌面上测试所有功能确认无误后再安装到底盘上。扩展接口预留几个I/O口方便后续添加传感器比如A4/A5I2C接口可接OLED屏D2/D3外部中断接编码器A0-A3模拟输入接红外或超声波完成这个小车项目后你会掌握Arduino开发的基本流程包括硬件连接、库使用、调试技巧等。这些经验可以直接迁移到其他物联网和机器人项目中。

相关文章:

用PS2手柄和Arduino UNO做个遥控小车,手把手教你从接线到代码调试(附完整代码)

用PS2手柄和Arduino UNO打造智能遥控小车:从硬件搭建到代码实战 还记得小时候玩遥控车的兴奋感吗?现在,你可以亲手制作一台属于自己的智能遥控小车!这个项目不仅能让你重温童年乐趣,还能学习到Arduino编程、电机控制和…...

XGBoost调参进阶:用特征权重(feature_weights)和样本权重(scale_pos_weight)搞定不平衡数据

XGBoost权重调参实战:用特征与样本双重加权破解不平衡分类难题 金融风控中1%的欺诈交易可能造成99%的损失,广告点击数据里正样本占比往往不足5%。面对这些典型的不平衡分类场景,仅靠调整阈值或过采样难以从根本上解决问题。XGBoost提供的feat…...

保姆级教程:在Ubuntu 20.04上为RISC-V芯片移植并运行CoreMark性能测试

RISC-V架构深度实战:从零构建CoreMark基准测试完整指南 当一块崭新的RISC-V开发板放在你面前时,如何快速验证其真实性能?这个看似简单的问题背后,隐藏着嵌入式开发者必须掌握的基准测试方法论。不同于x86/ARM生态的即插即用&#…...

SSDTTime终极指南:5分钟搞定黑苹果DSDT自动配置

SSDTTime终极指南:5分钟搞定黑苹果DSDT自动配置 【免费下载链接】SSDTTime SSDT/DSDT hotpatch attempts. 项目地址: https://gitcode.com/gh_mirrors/ss/SSDTTime 还在为黑苹果配置中的DSDT补丁头疼不已吗?每次面对复杂的硬件兼容性问题都感到无…...

用MATLAB手把手复现:EKF如何让导弹在三维空间里“看”得更准?(附完整代码与误差分析)

三维制导系统中的EKF实战:从MATLAB代码解析到误差优化 导弹在三维空间中的精确制导一直是航空航天领域的核心挑战。传统方法在面对复杂环境干扰时往往力不从心,而扩展卡尔曼滤波(EKF)技术则为这一难题提供了优雅的解决方案。本文将带您深入EKF在三维制导…...

中午12点,我盯着的是电价,不是云图

云彩只决定你发多少电,但电价决定你发的电值多少钱“12点了,今天中午现货什么价?”光伏电站的交易员老张没抬头看窗外的艳阳高照,而是死盯着电脑屏幕上那个实时出清电价的数字。旁边新来的小李嘟囔了一句:“辐照这么好…...

实时人脸检测实战指南:YOLOv5-face解决密集场景下人脸识别难题

实时人脸检测实战指南:YOLOv5-face解决密集场景下人脸识别难题 【免费下载链接】yolov5-face YOLO5Face: Why Reinventing a Face Detector (https://arxiv.org/abs/2105.12931) ECCV Workshops 2022) 项目地址: https://gitcode.com/gh_mirrors/yo/yolov5-face …...

OpCore-Simplify终极指南:从零到一,10分钟搞定黑苹果EFI配置

OpCore-Simplify终极指南:从零到一,10分钟搞定黑苹果EFI配置 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的Open…...

告别玄学调试:用逻辑分析仪抓取STM32与MLX90614的SMBus波形,精准排查通信故障

STM32与MLX90614通信故障排查实战:逻辑分析仪波形诊断指南 当你的红外测温项目突然返回0℃或异常数据时,那种挫败感就像在黑暗中摸索开关。本文将以一个真实案例为线索,带你用逻辑分析仪揭开SMBus通信故障的真相——不是靠猜测,而…...

从零到一:用CH32V103和逐飞库搞定智能车循迹(附完整代码和避坑指南)

从零到一:基于CH32V103的智能车循迹系统全流程实战 第一次接触智能车循迹项目时,面对琳琅满目的硬件和复杂的控制算法,很多初学者都会感到无从下手。本文将带你完整走一遍从硬件选型到PID调参的全过程,使用CH32V103R8T6作为主控芯…...

如何破解音频格式限制:3步解锁QQ音乐加密文件的完整指南

如何破解音频格式限制:3步解锁QQ音乐加密文件的完整指南 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 你是否曾经下载了一首喜欢的歌曲,却只能在特…...

告别万年历芯片!用STM32F4的RTC闹钟和唤醒功能实现低功耗定时任务(附代码)

用STM32F4内置RTC重构低功耗设备的时间管理架构 在物联网终端和便携式设备设计中,低功耗管理一直是工程师们面临的核心挑战。传统方案往往依赖外置RTC芯片配合主控实现定时唤醒功能,这种架构不仅增加BOM成本,还面临I2C通信可靠性和功耗开销的…...

番茄小说下载器终极指南:打造你的个人离线图书馆

番茄小说下载器终极指南:打造你的个人离线图书馆 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 你是否曾在通勤路上网络不佳时,无法加载心爱的小说章节…...

Windows无线音频传输终极指南:用Scream虚拟声卡实现多设备音频共享

Windows无线音频传输终极指南:用Scream虚拟声卡实现多设备音频共享 【免费下载链接】scream Virtual network sound card for Microsoft Windows 项目地址: https://gitcode.com/gh_mirrors/sc/scream 还在为电脑音频无法无线传输而烦恼吗?想要把…...

cv_unet_image-colorization多图批量处理扩展教程:Python脚本自动化上色

cv_unet_image-colorization多图批量处理扩展教程:Python脚本自动化上色 1. 引言:从手动到自动,解放你的生产力 你是不是也遇到过这样的场景?手头有一堆黑白老照片,想用AI工具给它们上色,但每次只能上传一…...

匿名请求展示 Opus 4.6 与 4.7 在实际输入中的差异

【导语:社区收到匿名的令牌对比请求,展示了 Opus 4.6 和 Opus 4.7 在实际输入中的差异。该项目为开源项目,且与Anthropic无关联。】匿名请求揭示版本差异社区收到匿名请求,进行令牌对比,此对比清晰展示了 Opus 4.6 和 …...

别再死记硬背GCN/GAT公式了!用PyTorch Geometric手写一个MPNN,彻底搞懂消息传递

从零实现MPNN:用PyTorch Geometric拆解图神经网络的消息传递本质 当你第一次接触图神经网络(GNN)时,是否曾被各种公式和概念搞得晕头转向?GCN的拉普拉斯矩阵、GAT的注意力系数...这些看似复杂的数学背后,其…...

Visual Studio 2022搭配XAML Styler:拯救强迫症的WPF/XAML自动格式化与保存即美化实战

Visual Studio 2022搭配XAML Styler:拯救强迫症的WPF/XAML自动格式化与保存即美化实战 每次打开一个混乱的XAML文件,就像走进一间堆满杂物的房间——控件属性随意堆放,命名空间声明像散落的衣物,缩进混乱得像打翻的积木。作为长期…...

服务器资源紧张?用Miniconda在CentOS7上打造轻量级Python开发环境(附常用conda命令清单)

服务器资源紧张?用Miniconda在CentOS7上打造轻量级Python开发环境 在云计算和远程开发日益普及的今天,许多开发者面临着服务器资源有限的挑战。特别是对于使用低配置云服务器、VPS或学习型服务器的用户来说,如何在有限的内存和磁盘空间下&…...

FLUX.1-dev-fp8-dit文生图教程:SDXL Prompt Styler中‘风格锚点’机制与自定义扩展方法

FLUX.1-dev-fp8-dit文生图教程:SDXL Prompt Styler中‘风格锚点’机制与自定义扩展方法 1. 为什么这个组合值得你花10分钟试试 你有没有试过这样的情形:明明写了一大段精心打磨的提示词,生成的图片却总差那么一口气——色彩不够浓郁、构图缺…...

MetaboAnalystR 4.0:从LC-MS原始数据到生物学洞察的完整解决方案

MetaboAnalystR 4.0:从LC-MS原始数据到生物学洞察的完整解决方案 【免费下载链接】MetaboAnalystR R package for MetaboAnalyst 项目地址: https://gitcode.com/gh_mirrors/me/MetaboAnalystR 代谢组学数据分析从未如此简单高效!MetaboAnalystR …...

Pixel Language Portal入门必看:Hunyuan-MT-7B模型许可证解读、商用合规性与数据隐私说明

Pixel Language Portal入门必看:Hunyuan-MT-7B模型许可证解读、商用合规性与数据隐私说明 1. 产品概述与技术背景 Pixel Language Portal(像素语言跨维传送门)是一款基于腾讯Hunyuan-MT-7B大模型构建的创新翻译工具。与传统翻译软件不同&am…...

终极指南:用Universal x86 Tuning Utility彻底解决笔记本高温降频问题

终极指南:用Universal x86 Tuning Utility彻底解决笔记本高温降频问题 【免费下载链接】Universal-x86-Tuning-Utility Unlock the full potential of your Intel/AMD based device. 项目地址: https://gitcode.com/gh_mirrors/un/Universal-x86-Tuning-Utility …...

竞赛技术中的题目设计评分标准与竞赛平台

竞赛技术中的题目设计评分标准与竞赛平台 在各类编程竞赛、算法比赛或创新挑战中,题目设计的科学性和竞赛平台的功能性直接影响参赛者的体验与比赛结果的公平性。优秀的题目设计不仅需要考察参赛者的技术能力,还需兼顾创新性和实用性;而竞赛…...

Gazebo仿真中,UR5机械臂用Grasp_fix插件抓取物体总失败?试试这3个参数调优技巧

Gazebo仿真中UR5机械臂Grasp_fix插件抓取失败的深度调优指南 当你在Gazebo中配置好UR5机械臂和Grasp_fix插件后,发现机械爪要么无法识别物体,要么抓取后莫名其妙掉落——这种挫败感我太熟悉了。经过数十次实验和参数调整,我发现90%的抓取失败…...

手把手复现AlexNet:用PyTorch 2.0+在单GPU上跑通2012年的‘深度’革命

手把手复现AlexNet:用PyTorch 2.0在单GPU上跑通2012年的‘深度’革命 2012年,AlexNet横空出世,以15.3%的Top-5错误率横扫ImageNet竞赛,将传统方法甩开近10个百分点。这个8层神经网络不仅证明了深度学习的潜力,更开创了…...

别再只会用默认设置了!Matplotlib contourf画等高线图,这5个美化技巧让你的论文配图秒变高级

科研制图进阶:5个Matplotlib等高线图精修技巧 在学术论文写作中,一张精心设计的图表往往比千言万语更能清晰传达研究成果。Matplotlib作为Python生态中最主流的科学绘图工具,其contourf函数生成的等高线填充图在气象学、地质学、工程仿真等领…...

Matlab函数传参和返回值的‘黑魔法’:巧用逗号分隔列表处理可变参数

Matlab函数传参和返回值的‘黑魔法’:巧用逗号分隔列表处理可变参数 在Matlab编程中,处理可变数量的输入参数和返回值是每个中高级用户都会遇到的挑战。想象一下,当你需要设计一个像plot那样灵活的函数,能够接受任意数量的属性-值…...

FanControl高级调校方案:Windows系统风扇精准控制与性能优化

FanControl高级调校方案:Windows系统风扇精准控制与性能优化 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trend…...

Qwen3-Reranker-0.6B部署指南:适配国产AI芯片的轻量级RAG重排序服务

Qwen3-Reranker-0.6B部署指南:适配国产AI芯片的轻量级RAG重排序服务 你是不是也遇到过这样的问题?在搭建RAG系统时,检索回来的文档一大堆,但真正相关的没几个,用户问“如何训练大模型”,结果系统返回了“大…...