2021全国电设(F题)灰度传感器——循迹红线

基于灰度传感器的循迹(红色循迹)

通过参加全国电子设计大赛F题总结出识别红色线路的循迹方法——灰度传感器

灰度传感器的工作原理

        灰度传感器利用不同颜色的检测面对光的反射程度不同,光敏电阻对不同检测面返回的光其阻值也不同的原理进行颜色深浅检测。

       在有效的检测距离内,发光二极管发出白光,照射在检测面上,检测面反射部分光线,光敏电阻检测此光线的强度并将其转换为机器人可以识别的信号。

        Arduino专用传感器扩展板结合使用,可以感知地面或桌面不同的颜色而产生相应的信号,可实现与颜色有相关的互动作品,也可以作为巡线小车的巡线传感器或者足球机器人的场地灰度识别。电源需要和控制器一致,通常为3.3V或5V

实物图

2021全国电设(F题)灰度传感器——循迹红线_第1张图片

原理图

2021全国电设(F题)灰度传感器——循迹红线_第2张图片

引脚定义

  • 输出信号(out)
  • 地(GND)
  • 电源(VCC)

arduino连接示意图

2021全国电设(F题)灰度传感器——循迹红线_第3张图片

 示例代码

void setup()
{
    Serial.begin(9600); //打开串行端口,将波特率设置为9600 bps
}
void loop()
{
    int val;
    val=analogRead(0);   //将灰度传感器连接到模拟0
    Serial.println(val,DEC);//将值打印到串口          
    delay(100);
}

此代码为红色循迹示例代码

printf("此代码需要根据不同环境进行调试,直接套用可能会无法正确循迹\n");

//电机
#include 
AF_DCMotor motor1(1,MOTOR12_64KHZ);
AF_DCMotor motor2(2,MOTOR12_64KHZ);
AF_DCMotor motor3(3,MOTOR34_64KHZ);
AF_DCMotor motor4(4,MOTOR34_64KHZ);

//声明车子方向
void Forward();
void Backward();
void Moveleft();
void Moveright();
void Stop();

void setup() 
{
  Serial.begin(9600);
  Serial.println("Motor test!");
  //电机
  motor1.setSpeed(100);
  motor2.setSpeed(100);
  motor3.setSpeed(100);
  motor4.setSpeed(100);

  
  pinMode(A8,INPUT);
  pinMode(A9,INPUT);
  pinMode(A10,INPUT);
  pinMode(A11,INPUT);
}

void loop() 
{
  int a,b,c,d;
//定义输出口为8,9,10,11
  a = analogRead(8);
  b = analogRead(9);
  c = analogRead(10);
  d = analogRead(11);
//电机的PWM
  motor1.setSpeed(120);
  motor2.setSpeed(120);
  motor3.setSpeed(120);
  motor4.setSpeed(120);
  Forward();
//循迹自动更正
  if(a>555&&a<635)
  {
    Stop();
    delay(500);
    Moveleft();
    delay(250);
  }
  if(c>495&&c<585)
  {
    Stop();
    delay(500);
    Moveright();
    delay(250);
  }
}


void Forward()
{
  motor1.run(FORWARD);
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);-
  motor4.run(FORWARD);
}
void Backward()
{
  motor1.run(BACKWARD);
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(BACKWARD);
}

void Moveright()
{
  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);
}

void Moveleft()
{
  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);
}

void Stop()
{
  motor1.run(RELEASE);
  motor2.run(RELEASE);
  motor3.run(RELEASE);
  motor4.run(RELEASE);
}

欢迎各位莅临指导,交流!

你可能感兴趣的:(自动驾驶,人工智能,物联网,传感器,arduino)