自制基于Arduino的玩具小汽车
1. 制作需求
家里面小朋友很喜欢玩具小汽车,但是总是三分钟热度,玩了几次就丢在一边,于是就想着自己动手来做小汽车,最好是可以修改程序的,这样就可以不断添加一些新的功能进去,让小朋友保持新鲜感。
第一次制作玩具小汽车,对功能的期望不能太高,于是大概列了几点基本功能:
- 能前进、后退、左转、右转
- 能通过遥控来控制
- 能播放音乐
按照这个需求清单,我在网上找了一些实现方案,后来就找到了一个特别适合我的小白开发神器——Arduino。
Arduino是一款方便上手的开源电子原型平台,包含Arduino电路板和Arduino IDE程序开发环境两个部分。只要在开发环境中编写程序代码,将程序上传到Arduino电路板后,程序就会告诉Arduino电路板要做些什么。对于没有什么单片机基础的小白来说,可以说是非常友好了。
2.在参考了各种制作视频之后,大概确定了要准备哪些材料
名称 | 图片 |
7.4V锂电池(可充电) | |
Arduino开发板 | |
2WD小车底盘套件 | |
电机驱动 | |
红外遥控接收头,遥控器 | |
MP3解码播放器、扬声器、U盘 | |
彩排杜邦线、铜柱、螺丝、螺母 | |
工具:焊枪、焊锡丝、螺丝刀、万用表 | ---- |
3. 安装接线
第一步:组装2WD小车底盘套件
第二步:连接电机驱动
选用的电机驱动板(淘宝上找的一个能驱动两个直流电机的驱动板)接受2-10V电源供电,这里我直接用7.4V的锂电池给它供电,IN1-IN4是PWM控制信号输入口,分别接Arduino开发板的5、6、9、10引脚,输出Motor-A,Motor-B分别接左轮和右轮两个直流电机。
第三步:连接红外接收器
红外接收器包含三个引脚,电源正负引脚和信号输出引脚,电源正极接Arduino开发板的5V引脚,电源负极接Arduino开发板的GND,信号输出引脚接Arduino开发板的2号引脚。
第四步:连接MP3解码播放器、扬声器
淘宝上找的一个能通过红外遥控器控制的MP3解码器,可以播放U盘中的mp3文件,供电电源5V,电源负极接Arduino开发板的GND,正极接Arduino开发板的5V引脚。输出引脚接一个3瓦,4欧的扬声器。
总的接线示意图如下:
小车接线实物图如下:
4. 编写代码
#include <IRremote.h>
#define choose 2 // 1 串口模式;2 运行模式
int leftNeg=5; // 5号引脚控制左轮负极
int leftPos=6; // 6号引脚控制左轮正极
int rightNeg=9; // 9号引脚控制右轮负极
int rightPos=10; // 10号引脚控制右轮正极
int dt=2000; // 延时
void motor_init(); // 电机初始化函数
void forward(); // 前进
void back(); // 后退
void turnLeft(); // 左转
void turnRight(); // 右转
void _stop(); // 停止const int irReceivePin=2; // 2号引脚用于接收红外信号
IRrecv irrecv(irReceivePin); // 创建红外接收对象
decode_results results; // results用于保存红外信号结果void rev(void); // 接收红外信号,控制小车
void scan(void); // 测试红外信号,打印输出接收代码void setup() { // 配置函数Serial.begin(9600); // 设置串口 motor_init(); // 调用电机初始化函数irrecv.enableIRIn(); // 启用红外线接收
}void loop() { // 主循环if (choose==1) scan(); // 如果模式为1,测试红外信号代码else if (choose==2) rev(); // 如果模式为2,接收信号,控制小车·
}void motor_init(){ // 电机初始化函数pinMode(leftNeg, OUTPUT); // 将5,6,9,10引脚设为输出模式pinMode(leftPos, OUTPUT);pinMode(rightNeg, OUTPUT);pinMode(rightPos, OUTPUT);
}void forward(){ // 前进analogWrite(leftPos,120); // 左轮正转analogWrite(leftNeg,0);analogWrite(rightPos,120); // 右轮正转analogWrite(rightNeg,0);
}void back(){ // 后退analogWrite(leftPos,0); // 左轮反转analogWrite(leftNeg,120);analogWrite(rightPos,0); // 右轮反转analogWrite(rightNeg,120);
}void turnLeft(){ // 左转analogWrite(leftPos,0); // 左轮反转analogWrite(leftNeg,120);analogWrite(rightPos,120); // 右轮正转analogWrite(rightNeg,0);
}void turnRight(){ // 右转analogWrite(leftPos,120); // 左轮正转analogWrite(leftNeg,0);analogWrite(rightPos,0); // 右轮反转analogWrite(rightNeg,120);
}void _stop(){ // 停止analogWrite(leftNeg,0); // 全部置低电平analogWrite(leftPos,0);analogWrite(rightNeg,0);analogWrite(rightPos,0);
}void rev(void){if(irrecv.decode(&results)){ //接收红外信号,结果保存在results中irrecv.resume(); //继续等待接收下一组信号if (results.value==16718055){ // 按遥控上的数字键2,前进forward();delay(dt);_stop();} else if(results.value==16730805){ //按遥控上的数字键8,后退back();delay(dt);_stop();}else if(results.value==16716015){ //按遥控上的数字键4,左转turnLeft();delay(dt);_stop();}else if(results.value==16734885){ //按遥控上的数字键6,右转turnRight();delay(dt);_stop();}else if(results.value==16726215){ //按遥控上的数字键5,停止_stop();delay(dt);}}
}void scan(void){ // 测试红外信号,打印输出接收代码if(irrecv.decode(&results)){ //接收红外信号,结果保存在results中irrecv.resume(); //继续等待接收下一组信号Serial.println(results.value, DEC); //打印接收到的按键代码}
}
自制基于Arduino的玩具小汽车相关推荐
- 自制基于arduino的GPS地图导航系统 原型
这是一篇关于动手制作基于arduino 和12864液晶模块的图形化显示GPS导航系统的帖子,作品效果和成本可能无法和TB上的导航产品媲美,但是动手过程会带给你乐趣和知识. 动手之前最好能具备一些背景 ...
- 使用加速度计DIY自制基于Arduino手势控制的空中鼠标
曾经想知道我们的世界是如何走向沉浸式现实的.我们不断寻找与周围环境互动的新方式和方法,使用虚拟现实.混合现实.增强现实等.每天都有新设备通过这些快速技术推出,以通过他们的新互动技术给我们留下深刻印象. ...
- 基于Arduino的草缸自动控制系统
[智能草缸-哔哩哔哩] https://b23.tv/Pxea9NK 很早之前就想要实现一个全自动控制的草缸,当时是19年刚研究生入学,正好在本科毕业的暑假时间,有在培训机构教学Micro bit的硬 ...
- 基于Arduino的智能晾衣架
前段时间,由于个人原因没有及时更新,今天准备写一个基于Arduino的智能晾衣架. 摘要: 智能晾衣架是应用物联网工程技术,通过网络和物品的连接得以控制晾衣架的状态.智能晾衣架通过多个传感器来对外界环 ...
- 基于Arduino单片机的nRF24L01+无线遥控装置设计(爆肝制作)
目录 前言 一.总体思路 二.硬件介绍 (一)主机 (二)从机 三.电路设计 (一)主机 (二)从机 四.程序代码 (一)主机 (二)从机 五.总结及改进 六.所用到的文献链接 前言 此文章只涉及单片 ...
- STM32G070RBT6基于Arduino框架下点灯程序
STM32G070RBT6基于Arduino框架下点灯程序 ✨说明:Arduino STM32系列开发环境搭建不在本示例范围内. 相关篇<[硬件开源电路]STM32G070RBT6开发板> ...
- 基于Arduino高温巡逻报警智能小车
引言 1.1 目的 高温巡逻报警智能小车 学习了解Arduino的工作原理 实战拼接小车内部结构模板 掌握了解高温传感器如何识别环境温度和工作原理 学习了解火焰传感器如何识别火焰的工作原理 掌握了解蓝 ...
- 红外测温枪,超进化 -- 智能温度传感器 基于 arduino 的智能测温模块
红外测温枪,超进化!--智能温度传感器!基于 arduino 的智能测温模块. 前言 硬件选择 代码讲解 通过 SDDC 协议接入 Spirit 1 部分 配置设备信息 数据获取与发送流程 融合!特殊 ...
- 【媒体控制器】开源项目学习笔记(基于Arduino Micro开发板)
☑️ 首先说明:本项目基于Arduino Micro 开发板开发的,外设只用到了EC11E1534408无定位旋转编码器. 项目来源:[DIY]自制PC外设-媒体控制器,在英国_哔哩哔哩_bilibi ...
最新文章
- CVPR 2021|三维视觉相关论文汇总
- html怎么让方块自动旋转,如何使用纯CSS实现一个圆环旋转错觉的动画效果(附源码)...
- spring的事件机制实战
- java什么时候创建进程,Java创建进程
- Nature:全球掠夺性期刊已超过15500种
- 为linux服务器安装rkhunter工具
- Linux内核邮件列表发送和回复格式研究
- 2018计算机一级选择题知识题库,计算机二级选择题题库 2018年计算机一级《WPS》选择题练习及答案...
- wgs84坐标系拾取工具_Wgs84坐标系转换为gcj02坐标系及bd09坐标系的验证
- 计算机电子电路原理图,简单电路图入门-电路原理图入门知识图解
- 使用CURL抓取https网页报错的一种解决方法
- pyinstaller打包有pandas和numpy库过程中遇到的bug及处理
- ZOJ - 3939
- 小程序如何隐藏滚动条
- 江浦街的汉庭酒店只有雨季
- 一步一步学Silverlight 2系列(21):如何在Silverlight中调用JavaScriptjavascript
- VBA每日一练(4),补充VBA的基础语句知识,基本控制结构,I/O基础
- 共享单车智能管控技术手段探讨
- 【cmd】CMD中Pushd和Popd命令的用法
- oracle 创建表 as,Oracle创建表(create table as)