动手制作一个智能小车教程未完成
能亲手制作智能车、机器人,大概是我们每一位marker都想实现的事情,那么今天我们就来看看如何制作一辆可以红外、蓝牙控制,并且可以用openmv摄像头实时追踪色块的智能车吧。
文章目录
1.小车功能设计
现在我们手上有一套智能车模型套件、红外遥控器及传感器、蓝牙模块、一块OpenMV摄像头模块。
- 首先,要快速完成一辆小车的制作,我们可以选用智能车模型套件,直接拼装成智能车,这可以节省我们不少设计的功夫,将精力放在功能实现上面。
- 其次,我们可以使用红外遥控和红外接收模块,对小车进行红外控制;
- 再次,我们可以通过蓝牙模块,通过手机app,蓝牙远程遥控智能车;
- 最后,车子要做到智能,那必不可少的就是图像识别,我们可以使用OpenMV摄像头对颜色进行实时识别和跟踪。
那就让我们开始实现以上的想法吧,JUST DO IT!
2.应用学到那些知识
做这个项目之前,你需要有:
- 一点基础的编程语法知识(任何语言)
- 一颗耐心和创客的激情
做完这个项目,你可以掌握:
- 电机驱动板L298N的使用方法
- arduino的使用方法
- 红外模块的使用方法
- 蓝牙模块HC-05的调试方法
- 手机控制蓝牙的方法
- OpenMV摄像头模块颜色识别的方法
- OpenMV与arduino板子通信的方法
3.材料准备
1.智能车部分:模型套件,如下图

2.控制电路部分:如下表
| 材料 | 数量 |
|---|---|
| arduino模块 | 1块 |
| L298N电机驱动模块 | 1块 |
| 红外接收模块 | 1块 |
| 红外遥控器 | 1件 |
| 蓝牙模块 | 1块 |
| USB转TTL模块(可选) | 1块 |
| OpenMV3 摄像头模块 | 1块 |
| 9-12V电源(博主使用三节18560串联,推荐) | 1件 |
| 杜邦线 | 若干 |
| 螺丝、螺母、铜柱 | 若干 |
| 热熔胶枪 | 1把 |
| 螺丝刀套件 | 1套 |
| L298N电机驱动模块 | 1块 |
| 焊烙铁(可选) | 1件 |
| 剥线钳(可选) | 1把 |
| 电压表(可选) | 1件 |
| android手机(使用软件) | 1部 |
3.摄像头部分:OpenMV摄像头模块,如下图

4.组装小车
按照说明书装配小车模型。
电子模块我是如下图安装的,当然大家可以按照自己的习惯安装。
注意:
- 导线可以先不接,之后可以根据每一次实现的功能再接
- 连接OpenMV的支架为博主自行切割的,大家可以动手自己设计支架


5.制作红外小车
准备工作都做好了,那我们开始动手制作最简单的红外小车吧。
- 如下图连接杜邦线

- 电路原理
- 打开Arduino开发环境并添加库文件,如未安装,点击这里
- 上传代码
//红外小车代码及解释
#include <IRremote.h>//打开IDE:项目→加载库→添加→搜索IRremote→安装IRredmote库
int RECV_PIN = 11;//红外接收端口
IRrecv irrecv(RECV_PIN);
decode_results results;//结构声明
//==============================
int Left_motor_back=3; //左电机后退(IN1)
int Left_motor_go=4; //左电机前进(IN2)
int Right_motor_go=9; // 右电机前进(IN3)
int Right_motor_back=10; // 右电机后退(IN4)
void setup()
{
//初始化电机驱动IO为输出方式
pinMode(Left_motor_go,OUTPUT); // PIN 5 (PWM)
pinMode(Left_motor_back,OUTPUT); // PIN 6 (PWM)
pinMode(Right_motor_go,OUTPUT);// PIN 9 (PWM)
pinMode(Right_motor_back,OUTPUT);// PIN 10 (PWM)
pinMode(13, OUTPUT);////端口模式,输出
Serial.begin(9600); //波特率9600
irrecv.enableIRIn(); // Start the receiver
}
void run() // 前进
{
digitalWrite(Right_motor_go,HIGH); // 右电机前进
digitalWrite(Right_motor_back,LOW);
digitalWrite(Left_motor_go,HIGH); // 左电机前进
digitalWrite(Left_motor_back,LOW);
}
void brake() //刹车,停车
{
digitalWrite(Right_motor_go,LOW);
digitalWrite(Right_motor_back,LOW);
digitalWrite(Left_motor_go,LOW);
digitalWrite(Left_motor_back,LOW);
}
void left() //左转(左轮不动,右轮前进)
{
digitalWrite(Right_motor_go,HIGH); // 右电机前进
digitalWrite(Right_motor_back,LOW);
digitalWrite(Left_motor_go,LOW); //左轮不动
digitalWrite(Left_motor_back,LOW);
}
void spin_left() //左转(左轮后退,右轮前进)
{
digitalWrite(Right_motor_go,HIGH); // 右电机前进
digitalWrite(Right_motor_back,LOW);
digitalWrite(Left_motor_go,LOW); //左轮后退
digitalWrite(Left_motor_back,HIGH);
}
void right() //右转(右轮不动,左轮前进)
{
digitalWrite(Right_motor_go,LOW); //右电机不动
digitalWrite(Right_motor_back,LOW);
digitalWrite(Left_motor_go,HIGH);//左电机前进
digitalWrite(Left_motor_back,LOW);
}
void spin_right() //右转(右轮后退,左轮前进)
{
digitalWrite(Right_motor_go,LOW); //右电机后退
digitalWrite(Right_motor_back,HIGH);
digitalWrite(Left_motor_go,HIGH);//左电机前进
digitalWrite(Left_motor_back,LOW);
}
void back() //后退
{
digitalWrite(Right_motor_go,LOW); //右轮后退
digitalWrite(Right_motor_back,HIGH);
digitalWrite(Left_motor_go,LOW); //左轮后退
digitalWrite(Left_motor_back,HIGH);
}
//=============================================================================
//读取各个按键需要用到这段代码
//=============================================================================
void read_key()
{
if(irrecv.decode(&results)){
//如果接收到信息
Serial.print("code:");
Serial.println(results.value,HEX);//results.value为16进制,unsigned long
Serial.print("bits:");
Serial.println(results.bits);//输出元位数
irrecv.resume();
}
}
void loop()
{
read_key();
if(irrecv.decode(&results)){
//如果接收到信息
switch(results.value){
case 0xFF18E7: //前,对应2
run();
break;
case 0xFF4AB5: //后,对应8
back();
break;
case 0xFF10EF: //左,对应4
left();
break;
case 0xFF5AA5: //右,对应6
right();
break;
case 0xFF38C7: //停止,对应5
brake();
break;
default:
break;
}
irrecv.resume();
}
}
- 测试成果

6.添加蓝牙控制功能
- 如下图连接杜邦线

- 电路原理及注意
- HC-05蓝牙模块原理
- 蓝牙模块与Arduino交叉连接(即蓝牙RX连接板子TX、蓝牙TX连接板子RX)
- 此处红外模块无需拆下,红外接线对蓝牙功能没有影响,正好同时使用两种功能
- 上传代码
//蓝牙小车代码及解释
#include <IRremote.h>//打开IDE:项目→加载库→添加→搜索IRremote→安装IRredmote库
int RECV_PIN = 11;//红外接收端口
IRrecv irrecv(RECV_PIN);
decode_results results;//结构声明
//==============================
int Left_motor_back=3; //左电机后退(IN1)
int Left_motor_go=4; //左电机前进(IN2)
int Right_motor_go=9; // 右电机前进(IN3)
int Right_motor_back=10; // 右电机后退(IN4)
void setup()
{
//初始化电机驱动IO为输出方式
pinMode

最低0.47元/天 解锁文章
1708

被折叠的 条评论
为什么被折叠?



