YFROBOT创客社区

标题: Arduino智能车制作 [打印本页]

作者: 原始人    时间: 2013-9-24 19:04
标题: Arduino智能车制作
本帖最后由 原始人 于 2013-9-24 19:06 编辑

Arduino智能车制作(超声波避障、12864显示、测速

学习Arduino有段时间了,也看了很多东西,所以打算最近做了一辆3轮的智能车,一开始想要做个超声波避障小车的,但是正好手边有个LCD12864,果断将它加入其中,后来又加入测速模块(想想有点鸡肋,但是小车底盘又带码盘,不能浪费。。。不管它了,先做了再说)!!做的不好请轻拍~~~有在做小车的朋友可以一起讨论!
下面看下我所用到的装备(上次已经发了一个关于配件的帖子点击查看:制作所用的配件表):

1、首先当然是小车底盘了,我用的是3轮小车底盘,带开关(很方便);安装小车应该很简单,这里就不废话了,下面是小车图片:

[attach]568[/attach]

2、控制板(我用的是UNO兼容版),电机驱动,扩展板(方便用杜邦线,VCC及GND也很多);3块板子可以直接插在一起,节省了很多空间,如下图:

[attach]574[/attach]

3、供电电源,我使用的是7.4V充电锂电池加DC转接头,当然还有充电器~~如下图:

[attach]571[/attach]

4、超声波舵机云台,如图:

[attach]570[/attach]

5、显示模块LCD12864,我的买回来后又加工了一次,原来是直排针(不太还接线),将它改成弯排针了,如下图

[attach]569[/attach]


6、最后就是测速模块,现在还没调试到它,但是已经将它安装在小车上;还有些配件:螺丝、铜柱、杜邦线等,还有些简单的工具:烙铁、螺丝刀什么的;我还有用扎带,热缩管,这样小车看起来会更美观!
买回来的东西我就将这些东西照着想好的方法一股脑的都安装好了,也没去想想是否合适,更都没想着去拍照什么的(第一次做没经验啊,现在发帖也很纠结,没图没真相啊!!)额额~~组装起来后,在调试阶段又才发现有很多问题,无奈又去拆啊什么的,够繁琐的~~总之先看下我的小车样子吧

[attach]573[/attach]

原来电池安装在小车背面舵机和电机之间的位置,后来小车跑起来之后,发现头太重了,万向轮会翘起来,所以后来改装在控制板的下方,也还行没影响美观~~

下面是我写的程序:[attach]572[/attach]    欢迎下载 仅供参考!

程序中还用到了LCD12864显示库文件:[attach]575[/attach]

这个程序个人觉得还是不太满意,有空会再完善,希望谁有更好的程序拿出来大家分享分享~~~

程序中没有测速内容,但是实物有把测速模块安装上去,建议小车未安装之前,先想办法测试两个电机的速度,保证他们的速度基本相同!后面的避障程序中可以不用测速部分的程序(累赘)。

如果真的想做好避障,还是需要多加几个传感器,一个超声波明显不太完美,有的低点的障碍物避免不了碰撞了~~ 还有,超声波检测前方的障碍物,如果遇到窄道,有时还会出现错误!

后期准备完善小车,增加循迹,红外或者蓝牙遥控功能~~~~~~~~~



作者: YFRobot    时间: 2013-10-19 19:26
如果再详细一些就好了...
作者: ILM.    时间: 2014-10-4 11:09
cm_R[s] = float(int(cm_R[s] * 100.0)) / 100.0; //保留两位小数
这句是什么意思,不是很懂,求解释
作者: hero_sun    时间: 2016-1-24 15:52
本帖最后由 hero_sun 于 2016-2-8 10:51 编辑

int pinI1=8;//定义I1接口
int pinI2=9;//定义I2接口
int speedpin=11;//定义EA(PWM调速)接口
int pinI3=6;//定义I3接口
int pinI4=7;//定义I4接口
int speedpin1=10;//定义EB(PWM调速)接口
int IRR=3;//定义右侧避障传感器接口
int IRM=4;//定义中间避障传感器接口
int IRL=5;//定义左侧避障传感器接口
void setup()
{
  pinMode(pinI1,OUTPUT);
  pinMode(pinI2,OUTPUT);
  pinMode(speedpin,OUTPUT);
  pinMode(pinI3,OUTPUT);
  pinMode(pinI4,OUTPUT);
  pinMode(speedpin1,OUTPUT);
  pinMode(IRR,INPUT);
  pinMode(IRM,INPUT);
  pinMode(IRL,INPUT);
}
void advance(int a)//
{
     analogWrite(speedpin,a);//输入模拟值进行设定速度
     analogWrite(speedpin1,a);
     digitalWrite(pinI4,LOW);//使直流电机(右)逆时针转
     digitalWrite(pinI3,HIGH);
     digitalWrite(pinI1,LOW);//使直流电机(左)顺时针转
     digitalWrite(pinI2,HIGH);
}
void right(int b)//右转
{
     analogWrite(speedpin,b);//输入模拟值进行设定速度
     analogWrite(speedpin1,b);
     digitalWrite(pinI4,HIGH);//使直流电机(右)顺时针转
     digitalWrite(pinI3,LOW);
     digitalWrite(pinI1,LOW);//使直流电机(左)顺时针转
     digitalWrite(pinI2,HIGH);
}
void left(int c)//左转
{
     analogWrite(speedpin,c);//输入模拟值进行设定速度
     analogWrite(speedpin1,c);
     digitalWrite(pinI4,LOW);//使直流电机(右)逆时针转
     digitalWrite(pinI3,HIGH);
     digitalWrite(pinI1,HIGH);//使直流电机(左)逆时针转
     digitalWrite(pinI2,LOW);
}
void stop()//停止
{
     digitalWrite(pinI4,HIGH);//使直流电机(右)制动
     digitalWrite(pinI3,HIGH);
     digitalWrite(pinI1,HIGH);//使直流电机(左)制动
     digitalWrite(pinI2,HIGH);
}
void back(int d)//后退
{
     analogWrite(speedpin,d);//输入模拟值进行设定速度
     analogWrite(speedpin1,d);
     digitalWrite(pinI4,HIGH);//使直流电机(右)顺时针转
     digitalWrite(pinI3,LOW);
     digitalWrite(pinI1,HIGH);//使直流电机(左)逆时针转
     digitalWrite(pinI2,LOW);
}
void loop()
{
    int r,m,l;
    r=digitalRead(IRR);
    m=digitalRead(IRM);
    l=digitalRead(IRL);
    if(l==HIGH &&m==HIGH && r==HIGH)
      advance(120);
    if(l==LOW &&m==LOW  && r==LOW )
      {
        back(120);
        delay(300);
        right(100);
        delay(100);
      }
    if(l==LOW &&m==HIGH  && r==LOW )
      {
        back(120);
        delay(300);
        right(100);
        delay(100);
      }
    if(l==HIGH  &&m==LOW  && r==HIGH  )
          {
        back(120);
        delay(300);
        right(100);
        delay(100);
      }
    if(l==LOW &&m==LOW  && r==HIGH )
    right(100);
    if(l==LOW && m==HIGH && r==HIGH)
    right(80);
    if(l==HIGH &&m==LOW  && r==LOW )
    left(100);
    if(l==HIGH &&m==HIGH  && r==LOW )
    left(80);
  
}
   //(拷贝)请多指教!
作者: hero_sun    时间: 2016-1-24 16:11
同求ILM的问题
作者: hero_sun    时间: 2016-1-24 16:28
可不可以用4个电机的车底盘?我是初学者。请多指教!
作者: hero_sun    时间: 2016-1-24 16:42
请问超声波传感器那4个脚分别插在哪儿?
作者: hero_sun    时间: 2016-1-24 17:00
本帖最后由 hero_sun 于 2016-1-24 17:13 编辑
YFRobot 发表于 2013-10-19 19:26
如果再详细一些就好了...

不够详细!

作者: hero_sun    时间: 2016-1-24 17:26
/Users/Cheng/Downloads/bzxc_cp_  
作者: hero_sun    时间: 2016-1-24 19:15
本帖最后由 hero_sun 于 2016-3-27 10:45 编辑

云台连哪儿?
作者: hero_sun    时间: 2016-1-25 08:36
请问扩展板是什么型号?
作者: hero_sun    时间: 2016-1-25 10:00
本帖最后由 hero_sun 于 2016-1-25 13:34 编辑

请问LCD12864用的是什么线?
作者: 原始人    时间: 2016-1-26 08:58
本帖最后由 原始人 于 2016-1-26 09:03 编辑
hero_sun 发表于 2016-1-24 16:42
请问超声波传感器那4个脚分别插在哪儿?

超声波使用的是 A2 和A3脚,这个自行定义也可以的!我使用的扩展板上就有这个接口舵机使用的是D13
12864 使用的是杜邦线连接的,引脚使用下面也有!
所有的连接方式都有写到程序中,打开一看就知道了!

  Arduino避障小车
  電路連接:
    D3、D4和D6、D7分别连接左右电机,控制电机
    超聲波連接:
      VCC  ----  +5V;Trig ----  A2;Echo ----  A3;GND  ----  GND;
    舵機控制:D13
    LCD12864引脚连接:
      RS   ----  D2;R/W  ----  D8;E    ----  D9;PCB  ----  GND;  VSS  ----  GND;  VDD  ----  VCC;    LED+ ----  VCC;  LED- ----  GND;

作者: 原始人    时间: 2016-1-26 09:07
hero_sun 发表于 2016-1-24 16:11
同求ILM的问题

那句话是将 int 型 转为 float 型,并保留 两位小数
作者: hero_sun    时间: 2016-1-26 09:07
请问支撑的柱子是多少寸?
作者: hero_sun    时间: 2016-1-26 09:10
谢谢楼主!
作者: hero_sun    时间: 2016-1-26 09:12
hero_sun 发表于 2016-1-26 09:07
请问支撑的柱子是多少寸?

arduino uno的
作者: 原始人    时间: 2016-1-26 09:14
hero_sun 发表于 2016-1-26 09:12
arduino uno的

也是30mm的,底下有电池的
作者: hero_sun    时间: 2016-1-26 09:25
好像缩小的汽车耶...
作者: hero_sun    时间: 2016-1-29 12:30
怎么还没有回复
作者: hero_sun    时间: 2016-2-16 11:50
喂喂,没回复?
作者: AllBlue    时间: 2016-2-16 13:02
hero_sun 发表于 2016-2-16 11:50
喂喂,没回复?

什么问题?
作者: hero_sun    时间: 2016-3-12 08:59
谢谢!我用同样的东西和版本,竞然不行?(程序也一样)!
作者: hero_sun    时间: 2016-3-27 10:41
int WER;
int fcv = 2;
int comI = 3,comII = 11;
void astvg(int asdI,int asdII)
{
analogWrite(comI,asdI);
analogWrite(comII,asdII);


}
void setup()
{


pinMode(comI,OUTPUT);
pinMode(comII,OUTPUT);
}

void loop()
{
  WER = analogRead(fcv);
  if(WER <30)
  {
    astvg(30,70);
}
  if(WER >30)
  {
    astvg(50,50);
  }
}

作者: AllBlue    时间: 2016-3-28 13:37
hero_sun 发表于 2016-3-27 10:41
int WER;
int fcv = 2;
int comI = 3,comII = 11;

你这是驱动小车程序?
作者: tiantianyouyou    时间: 2019-5-8 07:42
值得学习的好资料,谢谢
作者: duyi324    时间: 2019-5-8 21:00
我来学习一下,新人报道
作者: mwam2005    时间: 2020-4-21 21:37

哦哦 谢谢楼主
作者: hjhj    时间: 2020-7-2 23:50
这么多东西




欢迎光临 YFROBOT创客社区 (http://yfrobot.com.cn/) Powered by Discuz! X3.1