donglaile 发表于 2011-7-30 20:50:46

用arduino板做的蔽障小车

潜水很久了,在论坛上学了很多。发个以前做的小车,那时的我只知道单片机很强大,不知道怎么用,总觉得学电子要花好多钱,在读书又没多少钱,虽然学的是电子专业,但那时才大一,也没人指导,也不知道去找老师请教,自己学习加网上找资料还是花了近一年的时间才弄出来的。
》》》现在看看觉得当时太笨了
http://cache.amobbs.com/bbs_upload782111/files_43/ourdev_662320UL970V.JPG
减速电机 (原文件名:DSC00073.JPG)

http://cache.amobbs.com/bbs_upload782111/files_43/ourdev_662321Y4GJTR.JPG
(原文件名:DSC00064.JPG)

http://cache.amobbs.com/bbs_upload782111/files_43/ourdev_662322V6JCD2.JPG
(原文件名:DSC00072.JPG)

http://cache.amobbs.com/bbs_upload782111/files_43/ourdev_662323I9Z3CO.JPG
(原文件名:DSC00071.JPG)

http://cache.amobbs.com/bbs_upload782111/files_43/ourdev_662324UZ6CV4.JPG
(原文件名:DSC00056.JPG)

http://cache.amobbs.com/bbs_upload782111/files_43/ourdev_662325RT32IN.JPG
(原文件名:DSC00054.JPG)

http://cache.amobbs.com/bbs_upload782111/files_43/ourdev_662326JCDSGQ.JPG
(原文件名:DSC00058.JPG)

http://cache.amobbs.com/bbs_upload782111/files_43/ourdev_662327G51FB2.JPG
(原文件名:DSC00057.JPG)

http://cache.amobbs.com/bbs_upload782111/files_43/ourdev_662328Y6TQCN.JPG
(原文件名:DSC00053-1.JPG)

http://cache.amobbs.com/bbs_upload782111/files_43/ourdev_662329CDQ2SA.JPG
(原文件名:DSC00067.JPG)

http://cache.amobbs.com/bbs_upload782111/files_43/ourdev_662330ZFRUQ2.JPG
(原文件名:DSC00069.JPG)

http://cache.amobbs.com/bbs_upload782111/files_43/ourdev_662331X6HLX9.JPG
(原文件名:DSC00065.JPG)



程序:
int inputPin=12;
int outputPin=13;
int pinI1=8;//定义I1接口
int pinI2=9;//定义I2接口
int speedpin0=5;//定义EA(PWM调速)接口
int pinI3=10;//定义I3接口
int pinI4=11;//定义I4接口
int speedpin1=6;//定义EB(PWM调速)接口
int IRR=2;//定义右侧避障传感器接口
int IRM=3;//定义中间避障传感器接口
int IRL=4;//定义左侧避障传感器接口
void setup()
{
Serial.begin(9600);
pinMode(pinI1,OUTPUT);
pinMode(pinI2,OUTPUT);
pinMode(speedpin0,OUTPUT);
pinMode(pinI3,OUTPUT);
pinMode(pinI4,OUTPUT);
pinMode(speedpin1,OUTPUT);
pinMode(IRR,INPUT);
pinMode(IRM,INPUT);
pinMode(IRL,INPUT);
pinMode(inputPin,INPUT);
pinMode(outputPin,OUTPUT);
}       
void loop()
{
    int r,m,l;
    /***********************读取红外接收管信号**************************/
    r=digitalRead(IRR);
    m=digitalRead(IRM);
    l=digitalRead(IRL);
    /******************超声波测距*************************/
    digitalWrite(outputPin,LOW);
    delayMicroseconds(2);
    digitalWrite(outputPin,HIGH);
    delayMicroseconds(10);
    digitalWrite(inputPin,LOW);
    long distance=pulseIn(inputPin,HIGH);
    distance=distance/58;
    Serial.print("S=");
    Serial.print(distance);
    Serial.print("cm");
    Serial.println();   
    /*******************************************/
    if(distance>10)//双分支
    {
      advance(120);//前进
    }
    else
    {
      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);//左转
    }
}
void advance(int a)//前进
{
   analogWrite(speedpin0,a);//输入模拟值进行设定速度
   analogWrite(speedpin1,a);
   digitalWrite(pinI4,LOW);//使直流电机(右)逆时针转
   digitalWrite(pinI3,HIGH);
   digitalWrite(pinI1,LOW);//使直流电机(左)顺时针转
   digitalWrite(pinI2,HIGH);
}
void right(int r)//右转
{
   analogWrite(speedpin0,r);//输入模拟值进行设定速度
   analogWrite(speedpin1,r);
   digitalWrite(pinI4,HIGH);//使直流电机(右)顺时针转
   digitalWrite(pinI3,LOW);
   digitalWrite(pinI1,LOW);//使直流电机(左)顺时针转
   digitalWrite(pinI2,HIGH);
}
void left(int l)//左转
{
   analogWrite(speedpin0,l);//输入模拟值进行设定速度
   analogWrite(speedpin1,l);
   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 b)//后退
{
   analogWrite(speedpin0,b);//输入模拟值进行设定速度
   analogWrite(speedpin1,b);
   digitalWrite(pinI4,HIGH);//使直流电机(右)顺时针转
   digitalWrite(pinI3,LOW);
   digitalWrite(pinI1,HIGH);//使直流电机(左)逆时针转
   digitalWrite(pinI2,LOW);
}

速度值要自己实际调试,我用的是两个坏手机的电池串联供电的,速度跟电压有关
pde格式的文件ourdev_662334N97PWC.zip(文件大小:1K) (原文件名:xunji_first.zip)

哦,还有红外蔽障电路
http://cache.amobbs.com/bbs_upload782111/files_43/ourdev_662346R6DV3V.JPG
(原文件名:捕获.JPG)

其他的都用了超声波模块和电机驱动模块

huayuliang 发表于 2011-7-30 21:16:03

那个。。。。字打错了,是躲避的避,不是屏蔽的蔽。

donglaile 发表于 2011-7-30 21:42:08

回复【1楼】huayuliang 花生
-----------------------------------------------------------------------
呵呵。。。谢谢指正!

little_Monkey 发表于 2011-7-30 22:29:32

楼主,你的应用用nano或者pro mini会更方便,引出插针直接接杜邦线
额,又广告了一把。。。

highyo88 发表于 2011-7-31 18:17:29

不错,最近也在搞这个

NS123 发表于 2011-9-21 12:53:01

做的挺不错的 我现在也在弄arduino小车呢,向楼主学习!

wlksos 发表于 2014-5-31 13:44:22

谢谢分享@@@
页: [1]
查看完整版本: 用arduino板做的蔽障小车