等级考试四级学习小组 加入小组

288个成员 29个话题 创建时间:2019-02-21

灰度巡线小车案例分享

发表于2019-03-14 1012次查看

四级考试标准中也提到灰度传感器的考察内容,但是理论考试中一直没有考察过灰度传感器的相关知识,大家在图形化软件中使用灰度传感器应该都没啥问题,灰度传感器是一个模拟传感器,需要接入模拟输入端口。但是四级等级考试的实操明确提出使用arduino IDE代码编程,可能还有很多老师和学员对灰度传感器的代码编程不是很了解,所以在这里分享一个灰度巡线小车的代码编程的案例。灰度巡线小车一般要用两个灰度传感器,分居黑线的两侧,灰度传感器离地面的高度在3cm以内,并用串口打印的来检测灰度在白色和黑色返回的值,用黑白返回值不同来进行判断小车的行进状态。代码如下,仅供参考。

/*
本程序示例为双灰度巡线小车,右电机接D1端口,左电机接D3端口
右边灰度接A1端口,左边灰度接A2端口
采用串口打印显示灰度传感器的返回值
本程序仅为示例程序,返回值的设定请根据实际情况调整
*/
int D1=6; //端口D1主IO引脚接右电机
int D1f=5;//端口D1辅助IO引脚
int D3=11;//端口D3主IO引脚接左电机
int D3f=3;//端口D3辅助IO引脚
int ZMDA1=A0;//端口A1IO引脚接右灰度
int ZMDA2=A1;//端口A2IO引脚接左灰度
void forward()//自定义小车前进函数
{ analogWrite(D1, 250);//右马达前进
  digitalWrite(D1f,LOW); 
  analogWrite(D3f, 250);//左马达前进
  digitalWrite(D3,LOW);
  delay(3);
}
void TurnLeft()//自定义小车左转函数
{
  analogWrite(D1, 250);//右马达前进
  digitalWrite(D1f,LOW);
  digitalWrite(D3,LOW);//左马达停止
  digitalWrite(D3f,LOW); 
  
}
void TurnRight()//自定义小车右转函数
{
 digitalWrite(D1,LOW); //右马达停止
  digitalWrite(D1f,LOW); 
  analogWrite(D3f, 250);//左马达前进
  digitalWrite(D3,LOW);
 
}
void Stop()//自定义小车停止函数
{
  digitalWrite(D1,LOW); //右马达停止
  digitalWrite(D1f,LOW); 
  digitalWrite(D3,LOW);//左马达停止
  digitalWrite(D3f,LOW);
}

int SL;    //左灰度变量
int SR;    //右灰度变量

void setup()
{
 Serial.begin(9600); 
}

void loop()
{
SR=analogRead(ZMDA1);
SL=analogRead(ZMDA2);
/*
 * 本部分程序为调试显示传感器返回值。只有调试时方可以打开
Serial.print("SL is");
Serial.print(SL);//打印左传感器返回值
Serial.print("     ");
Serial.print("SR is");
Serial.println(SR);//打印右传感器返回值
delay(1000);//延时便于观察
*/

if(SR>600 && SL>820)//通过串口打印结果调整检测白色的数值,根据实际检测情况修改
  {
    forward();//左右灰度检测到都是白色小车前进
  }
else if (SR<600 && SL>820) 
  {  
    TurnRight();//右边灰度检测到黑色小车右转
  }
  else if (SR>550 && SL<820) 
  {
     TurnLeft(); //左边灰度检测到黑色小车左转
     
  }
 else
   {
    Stop();//其他情况小车停止
   }
}


 

发表回复
你还没有登录,请先 登录或 注册!