利用红外线传感器让小车在规定路线上行进
1. 所需材料
- 小车车架及车轮(可以用sw建模然后利用3D打印机打印,也可以在网上直接购买小车地板,用纸板最廉价O(∩_∩)O哈哈~)
该图为3D打印效果
- Arduino开发板及扩展板
- 三个红外传感器
- 两个360度舵机(我是以舵机为驱动的,也可以用电机)
- 杜邦线若干
- 锂电池
组装小车及模块调试
舵机调试利用代码使舵机前传后传停止
参考代码如下:
#include <Servo.h>
Servo servo; //定义舵机
void setup()
{
servo.attach(2);//舵机串口设为2
}
void loop()
{
servo.write( 360 );//舵机前转
delay(1000);
servo.write( -360 );//舵机后转
delay(1000);
servo.write( 90 );//舵机停止
delay(1000);
}
**
- 小车循迹代码
**
#include <Servo.h>
Servo servo_pin_right; //定义右驱动
Servo servo_pin_left; //定义左驱动
const int SensorLeft=19;//左红外
const int SensorMid=20;//中红外
const int SensorRight=21;//右红外
int SL;//左红外状态
int SM;//中红外状态
int SR;//右红外状态
void setup()
{
Serial.begin(9600);//初始化串口
servo_pin_right.attach(9);//右驱动串口设为9
servo_pin_left.attach(10);//左驱动串口设为10
pinMode(SensorLeft,INPUT);//定义左红外为输入
pinMode(SensorMid,INPUT);//定义中红外为输入
pinMode(SensorRight,INPUT);//定义右红外为输入
}
//===========小车基本运动===============
void car_go()//小车直行
{
servo_pin_left.write( 360 );//左轮前进
servo_pin_right.write( -360);//右轮前进
}
void car_left()//小车左转
{
servo_pin_left.write( 90);//左轮后退
servo_pin_right.write( -360 );//右轮前进
}
void car_right()//小车右转
{
servo_pin_left.write( 360 );//左轮前进
servo_pin_right.write( 90);//右轮后退
}
void car_back()//小车后退
{
servo_pin_left.write( -360 );//左轮后退
servo_pin_right.write(360 );//右轮后退
}
void car_stop()//小车停止
{
servo_pin_left.write( 90 );//左轮停止
servo_pin_right.write(90 );//右轮停止
}
void loop()
{
while(1)
{
// 有信号为LOW,没信号为HIGH
SL=digitalRead(SensorLeft);//有信号表明在白色区域,没有信号表示在黑色区域
SM=digitalRead(SensorMid);//有信号表明在白色区域,没有信号表示在黑色区域
SR=digitalRead(SensorRight);//有信号表明在白色区域,没有信号表示在黑色区域
if(SL==LOW & SR==LOW & SM==HIGH)//左右红外检测到信号,中红外没有检测到信号,小车前进
car_go();
else if( SR==HIGH & SL==LOW & SM==HIGH)//左红外检测到信号,右中红外没有检测到信号,小车右转
car_right();
else if(SL==HIGH & SR==LOW & SM==HIGH)//右红外检测到信号,左中红外没有检测到信号,小车左转
car_left();
else if(SR==LOW & SM==LOW & SL==LOW)//左右中红外检测到信号,小车后退
car_back();
else
car_stop();
}