arduino的智能小车的功能2:巡线功能

arduino的智能小车的功能:巡线功能
材料清单:
上文提到的小车一台;
光电对管两个(也可以多个);
杜邦线若干;
我们设定的是当光电对管检测到黑线的时候做出动作。
当左侧传感器检测到黑线时,小车左转;当右侧传感器检测到黑线时,小车右转;当两个传感器都检测到黑线时,小车停止。

#include <Servo.h>

int mL1=6;//左1
int mL2=5;
int mR1=11;//右1
int mR2=3; 
int trac1 = 12; //从车头方向的最右边开始排序
int trac2 = 13; 
Servo s;  //舵机


void setup() {
  Serial.begin(9600);
  s.attach(9);//舵机信号线
  s.write(68);//舵机初始化角度 
  pinMode(mL1,OUTPUT);
  pinMode(mL2,OUTPUT);
  pinMode(mR1,OUTPUT);
  pinMode(mR2,OUTPUT);
  pinMode(trac1, INPUT);
  pinMode(trac2, INPUT);
}

void loop() {
  tracing();
}
void motorRun(int cmd)
{
  switch(cmd){
    case FORWARD:
      Serial.println("FORWARD"); //输出状态
      analogWrite(mL1,30);
      analogWrite(mL2,LOW);
      analogWrite(mR1,30);
      analogWrite(mR2,LOW);
      break;
     case BACKWARD:
      Serial.println("BACKWARD"); //输出状态
      analogWrite(mL1,0);
      analogWrite(mL2,40);
      digitalWrite(mR1,LOW); 
      analogWrite(mR2,40);
      break;
     case TURNLEFT:
      Serial.println("TURNLEFT"); //输出状态
      analogWrite(mL1,0); 
      analogWrite(mL2,0);
      analogWrite(mR1,60);
      analogWrite(mR2,0);
      break;
     case TURNRIGHT:
      Serial.println("TURNRIGHT"); //输出状态
      analogWrite(mL1,50);
      analogWrite(mL2,0);
      analogWrite(mR1,0);  
      analogWrite(mR2,0);
      break;
     default:
      Serial.println("STOP"); //输出状态
      digitalWrite(mR1,LOW);
      digitalWrite(mL1,LOW);
      digitalWrite(mR2,LOW);
      digitalWrite(mL2,LOW);
  }
}
void tracing()
{
  int data[4];
  data[2] = digitalRead(12);
  data[3] = digitalRead(13);

  if(!data[2] && !data[3])  //左右都没有检测到黑线
  {
    motorRun(FORWARD);
  }

  if(data[2])  //左边检测到黑线
  {
    motorRun(TURNLEFT);
  }

  if(data[3])  //右边检测到黑线
  {
    motorRun(TURNRIGHT);
  }

  if(data[2] && data[3])  //左右都检测到黑线是停止
  {
    motorRun(STOP);
    while(1);
  }
}

除此之外,我们还可以使用多个光电对管来进行检测,以此来减少车子的搬动幅度。
ccd巡线也是一个不错的选择。

展开阅读全文

没有更多推荐了,返回首页