Openjumper避障小车教程-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 37077|回复: 18

Openjumper避障小车教程

[复制链接]
发表于 2013-8-21 15:56 | 显示全部楼层 |阅读模式
本帖最后由 money0010 于 2013-8-21 16:16 编辑

                                                   Openjumper避障小车
一.  概述
                  简介

31.jpg
在完成寻线小车的制作后,使用红外避障传感器改装小车就变得十分简单了。
         基本原理
控制流程:小车的红外传感器检测到障碍物后发送给控制器,控制器判断应该如何行走,再通过电机驱动控制电机转速来改变小车的行驶方向。
32.jpg
二.需要的材料
1.      车体:Openjumper小车车体套件×1
2.      控制器:Arduino uno×1
3.      电机驱动:openjumperL298电机驱动板×1
4.      扩展板:UNO配套的传感器扩展板×1
5.      传感器模块:红外避障传感器×3
6.      尼龙柱,螺丝螺帽,杜邦线,传感器3p杜邦线若干。
三.硬件的组装试调
1.车体组装和板卡安装
详见小车车体组装教程和循迹小车组装教程。
2.安装传感器
避障传感器的安装比较简单,可以像循迹传感器一样装在下层,也可以装在上层。
先将5mm长的短尼龙柱用螺丝固定在传感器上,再将尼龙柱有螺纹的一段穿过车体板上的孔后用螺母固定即可。
33.jpg
四.规格
  
控制器
  
Arduino uno
电机驱动
L298
驱动部分工作电流
2A
驱动部分输入电压
4.8~25V
逻辑部分输入电压
5V
长*宽*高
200mm*180mm*110mm
重量
520g
电机型号
130
电机电压
3-6v
转速
125转/分
减速比
Jan-48
最大行驶速度
47.7米/分
电机空载电流
110ma
电机堵转电流
150ma
车轮直径
65mm
底盘离地面高度
20-22mm
传感器探测距离
3~30cm(不同物体反射率不定)

五.引脚定义
  
IO
  
类型
作用
描述
D4
数字输出
电机A正反转控制端
1为正转0为反转
D5
PWM输出
电机A调速端
电机速度0-255
D6
PWM输出
电机B调速端
电机速度0-255
D7
数字输出
电机B正反转控制端
1为正转0为反转
D11
数字输出
左传感器
检测到障碍物为0未检测到为1
D12
数字输出
中间传感器
检测到障碍物为0未检测到为1
D13
数字输出
右传感器
检测到障碍物为0未检测到为1

六.示例代码
[mw_shl_code=cpp,true]int SNUM[3] ;//定义3个传感器,从SNUM[0]-SNUM[2]为从左到右3个红外避障传感器
int INA = 4; //电机A正反转控制端
int PWMA = 5; //电机A调速端
int INB = 7; //电机B正反转控制端
int PWMB = 6; //电机B调速端

void motospd(int sp1,int sp2) //电机速度控制函数。括号内分别为左右电机速度值,
{                        //范围-255~+255,正值为正转,负值为反转。
  if(sp1>0)
    digitalWrite(INA, HIGH);   
  else
     digitalWrite(INA, LOW);
  if(sp2>0)
     digitalWrite(INB, HIGH);
  else
     digitalWrite(INB, LOW);
  analogWrite(PWMA,abs (sp1));
  analogWrite(PWMB,abs (sp2));
}
void setup(){

pinMode(11, INPUT); //配置左传感器IO口为输入
pinMode(12, INPUT); //配置中传感器IO口为输入
pinMode(13, INPUT); //配置右传感器IO口为输入
Serial.begin(9600); //打开串口,初始化
pinMode(INA,OUTPUT);
pinMode(INB,OUTPUT);   //配置电机驱动IO口为输出

}
void loop(){

SNUM[0] = digitalRead(11);//左传感器赋值
SNUM[1] = digitalRead(12); //中传感器赋值
SNUM[2] = digitalRead(13); //右传感器赋值
for (int i=0;i<3;i++)
{
   Serial.print(SNUM);//串口输出每个传感器的值,打开串口可显示传感器检测结果
  }                 
   Serial.println(SNUM[2]);
  if ((SNUM[0]==1)&&(SNUM[1]==1)&&(SNUM[2]==1))//所有传感器都没有检测到障碍
motospd(100,100);                          //直行
  if ((SNUM[0]==0)&&(SNUM[1]==1)&&(SNUM[2]==1)) //左传感器检测到障碍物
    motospd(100,50);                           //右转
    if ((SNUM[0]==1)&&(SNUM[1]==1)&&(SNUM[2]==0)) //右传感器检测到障碍物
    motospd(50,100);                             //左转
    if ((SNUM[0]==1)&&(SNUM[1]==0)&&(SNUM[2]==1)) //中传感器检测到障碍物
    motospd(-100,-100);                           //后退
delay(50);
}[/mw_shl_code]

七.改进思路
本例程中的避障小车利用三个红外传感器实现了简单的避障功能。下面也给大家一些改进加强的提示,给喜欢自己摸索和DIY的朋友们一些方向。
1.      增减传感器数量:3个传感器最多只能检测前-左-右三个方向的障碍物,增加多个传感器并改进控制程序可以让小车变得更加智能。
2.      使用超声波传感器:超声波传感器可以通过返回的超声波信号计算出前方障碍物的具体距离,其范围为2-450cm。超声波传感器配合舵机加装在小车上,效果比红外传感器好很多哦。
发表于 2014-2-16 21:37 | 显示全部楼层
你好,请问你所用的红外避障传感器跟下图这种有区别么
发表于 2014-2-18 20:30 | 显示全部楼层
纸鸢 发表于 2014-2-16 21:37
你好,请问你所用的红外避障传感器跟下图这种有区别么

区别是楼主所用的红外避障传感器比你的便宜,你用的稍微贵一点。功能上没区别。性能上你的更好。
发表于 2014-2-18 20:53 | 显示全部楼层
zzp 发表于 2014-2-18 20:30
区别是楼主所用的红外避障传感器比你的便宜,你用的稍微贵一点。功能上没区别。性能上你的更好。 ...

谢谢无处不在的师父
发表于 2014-2-18 21:21 | 显示全部楼层
你好楼主,请问这一套东西多少钱啊
发表于 2014-2-18 21:40 | 显示全部楼层
纸鸢 发表于 2014-2-18 20:53
谢谢无处不在的师父

哈哈,一起学习学习嘛1
 楼主| 发表于 2014-2-18 21:41 | 显示全部楼层
高价位 发表于 2014-2-18 21:21
你好楼主,请问这一套东西多少钱啊

你可以在淘宝上搜索OPENJUMPER小车
发表于 2014-2-24 22:27 | 显示全部楼层
这个程序更改可以控制步进电机吗?
发表于 2014-9-18 03:44 | 显示全部楼层
我正在用超声波组装壁障小车,但判断《20cm小车停止并转向怎么编程啊?望赐教!
发表于 2015-3-14 14:55 | 显示全部楼层
这个传感器和你那个一样吗?
TB16zKKGVXXXXaOXpXXXXXXXXXX_!!0-item_pic.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-27 15:15 , Processed in 0.114528 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表