这是一个简单的智能小车寻迹
所需材料:红外传感器模块 ,两个就行。
红外传感器:有一个发射管和一个接受管。透明的为发射管,黑颜色的为接收管。红外传感器通电后,透明管会发出红外光,当红外光照射在黑色的线上面,黑色的吸光能力比较强,返回来的红外光就比较少,从而接收管接收到的红外光就比较少。它的内部电阻就会变大。通过外接电路就可以读出其检测的状态。相反,如果照射到白色的线上,被吸收的就少,电阻就会变小。然后我们根据Arduino读出返回的值,就可以判断出小车是否在黑线上行走。
这里有很多种方法,可以帮助我们判断
Ps: 如果安装好传感器的位置写简单的寻迹就成功了百分之90%。(安装过程需多次调试)
1、两个红外传感器(都在线上,左边的偏了就右转、右边的偏了就右转)//这个方法未测试成功效果不好
2、让黑线在小车的两个传感器中间,两个传感器的距离比黑线宽一点。安装效果需要多次调试。
以下是简单的寻迹代码:
//寻迹:左边7,右边8。在黑线上是1
int sensor_L;
int sensor_R;
int a=0;
void setup(){
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(3,OUTPUT);
pinMode(11,OUTPUT);
pinMode(7,INPUT);
pinMode(8,INPUT);
Serial.begin(9600);
}
void loop(){
analogWrite(3,150);
analogWrite(11,150);
sensor_L=digitalRead(7);
sensor_R=digitalRead(8);
//Serial.println(sensor_L);
Serial.println(sensor_R);
if(sensor_L==0&&sensor_R==0){
//表示黑线在正中间,小车直行
forward();
}
if(sensor_L==1&&sensor_R==0){
//表示小车左边压线,小车应该左转
turnLeft();
}
if(sensor_L==0&&sensor_R==1){
//表示小车右边压线,小车应该右转
turnRight();
}
if(sensor_L==1&&sensor_R==1){
//如果都在黑线上,小车应该停止
stop1();
}
}
void stop1(){
digitalWrite(5,0);
digitalWrite(6,0);
digitalWrite(9,0);
digitalWrite(10,0);
}
void forward(){
digitalWrite(5,1);
digitalWrite(6,0);
digitalWrite(9,1);
digitalWrite(10,0);
}
void back1(){
digitalWrite(5,0);
digitalWrite(6,1);
digitalWrite(9,0);
digitalWrite(10,1);
}
void turnLeft(){
digitalWrite(5,1);
digitalWrite(6,0);
digitalWrite(9,0);
digitalWrite(10,1);
}
void turnRight(){
digitalWrite(5,0);
digitalWrite(6,1);
digitalWrite(9,1);
digitalWrite(10,0);
}