直接上图:
对,您没有看错!!!~~下面的确是舵机~~
看不清,好吧~~ 来,小乌龟,翻个身。。。
同志们,下面进行“车展” o(≧v≦)o~~好棒
ARDUIN 代码:基于 Arduino 的循迹小车
//包含 Arduino 的 Servo.h 库
#include <Servo.h>
Servo servo_L;
Servo servo_R;
//评估更改伺服舵机停止点脉冲的值
int servo_R_stop = 89; //设置右伺服舵机的中间位置
int servo_L_stop = 89; //设置左伺服舵机的中间位置
//设置右伺服舵机基于中间的前进和反转速度的值
int servo_R_forward = servo_R_stop + 50;
int servo_R_reverse = servo_R_stop - 50;
//设置左伺服舵机基于中间的前进的反转速度的值
int servo_L_forward = servo_L_stop + 50;
int servo_L_reverse = servo_R_stop - 50;
//改变下面的值来更改电机行动
int turn_time = 1000; //5000 ms = 5 s 调头时间
//用来保存定时变量的值名
unsigned long timer_startTick;
//创建传感器读数的变量
int sensor1 = 0;
int sensor2 = 0;
int sensor3 = 0;
int sensor4 = 0;
int sensor5 = 0;
//创建校对读数的变量
int adj_1 = 0;
int adj_2 = 0;
int adj_3 = 0;
int adj_4 = 0;
int adj_5 = 0;
//可以修改下列最大最小值,来调整小车上的每个传感器
int s1_min = 240;
int s1_max = 800;
int s2_min = 220;
int s2_max = 910;
int s3_min = 320;
int s3_max = 890;
int s4_min = 230;
int s4_max = 730;
int s5_min = 310;
int s5_max = 960;
//当传感器正在读取黑线时,定义该临界值
int lower_threshold = 40;
//当传感器正在读取白色海报时,定义该临界值
int upper_threshold = 210;
void setup()
{
servo_R.attach(2); //使用 Servo.h 库将 attach servo 连接 R 到 引脚 2
servo_L.attach(3); //使用 Servo.h 库将 attach servo 连接 L 到 引脚 3
//声明左侧电机
servo_R.write(servo_R_forward);
//声明右侧电机
servo_L.write(servo_L_forward);
}
void update_sensors()
{
//该代码将读取传感器 1 数据
sensor1 = analogRead(0);
adj_1 = map(sensor1, s1_min, s1_max, 0, 255);
adj_1 = constrain(adj_1, 0, 255);
//该代码将读取传感器 2 数据
sensor2 = analogRead(1);
adj_2 = map(sensor2, s2_min, s2_max, 0, 255);
adj_2 = constrain(adj_2, 0, 255);
//该代码将读取传感器 3 数值
sensor3 = analogRead(2);
adj_3 = map(sensor3, s3_min, s3_max, 0, 255);
adj_3 = constrain(adj_3, 0, 255);
//该代码将读取传感器 4 的值
sensor4 = analogRead(3);
adj_4 = map(sensor4, s4_min, s4_max, 0, 255);
adj_4 = constrain(adj_4, 0, 255);
//该代码将读取传感器 5 的值
sensor5 = analogRead(4);
adj_5 = map(sensor5, s5_min, s5_max, 0, 255);
adj_5 = constrain(adj_5, 0, 255);
}
void loop()
{
update_sensors(); //更新传感器
//首先,检查中兴传感器数值
if(adj_3 < lower_threshold)
{
//如果中心传感器值小于临界值,检查周围传感器
if(adj_2 > upper_threshold && adj_4 > upper_threshold)
{
forward_motors();
}
//要小车在碰到黑盒子时调头
else if(adj_1 < 1)
{
if(adj_2 < 1)
{
if(adj_4 < 1)
{
if(adj_5 < 1)
{
//复位定时器
timer_startTick = millis();
turn_motors(); //左转调头
}
}
}
}
}
else
{
//首先检查传感器 1
if(adj_1 < lower_threshold && adj_5 > upper_threshold)
{
turn_left();
}
//然后检查传感器 5
else if(adj_1 > upper_threshold && adj_5 < lower_threshold)
{
turn_right();
}
//如果不是传感器 1 或者传感器 5,那么就检查传感器 2
else if(adj_2 < lower_threshold && adj_4 > upper_threshold)
{
turn_left();
}
//如果不是传感器 2, 那就检查传感器 4
else if(adj_2 > upper_threshold && adj_4 < lower_threshold)
{
turn_right();
}
}
}
//开始电机控制功能
void forward_motors()
{
//无限期前进
servo_R.write(servo_R_forward);
servo_L.write(servo_L_forward);
}
void turn_left()
{
//左转
servo_R.write(servo_R_forward);
servo_L.write(servo_L_reverse);
}
void turn_right()
{
//右转
servo_R.write(servo_R_reverse);
servo_L.write(servo_L_forward);
}
void turn_motors()
{
//根据 "turn_time" 变量中的时间左转调头
while(millis() < timer_startTick + turn_time)
{
servo_R.write(servo_R_forward);
servo_L.write(servo_L_reverse);
}
}
Arduino_循迹小车 视频:
http://www.tudou.com/programs/view/ku5VLjlvxaU/ |