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巡线也是一个不错的选择。

  • 11
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值