请叫我小萌兽 发表于 2015-5-7 21:16:04

Arduino_循迹小车

直接上图:

对,您没有看错!!!~~下面的确是舵机~~


看不清,好吧~~        来,小乌龟,翻个身。。。


同志们,下面进行“车展”o(≧v≦)o~~好棒






ARDUIN 代码:基于 Arduino 的循迹小车

//包含 Arduino 的 Servo.h 库

#include <Servo.h>

Servoservo_L;
Servoservo_R;

//评估更改伺服舵机停止点脉冲的值
intservo_R_stop = 89;    //设置右伺服舵机的中间位置
intservo_L_stop = 89;    //设置左伺服舵机的中间位置

//设置右伺服舵机基于中间的前进和反转速度的值
intservo_R_forward = servo_R_stop + 50;
intservo_R_reverse = servo_R_stop - 50;

//设置左伺服舵机基于中间的前进的反转速度的值
intservo_L_forward = servo_L_stop + 50;
intservo_L_reverse = servo_R_stop - 50;

//改变下面的值来更改电机行动
intturn_time = 1000;    //5000 ms = 5 s 调头时间

//用来保存定时变量的值名
unsignedlongtimer_startTick;

//创建传感器读数的变量

intsensor1 = 0;
intsensor2 = 0;
intsensor3 = 0;
intsensor4 = 0;
intsensor5 = 0;

//创建校对读数的变量

intadj_1 = 0;
intadj_2 = 0;
intadj_3 = 0;
intadj_4 = 0;
intadj_5 = 0;

//可以修改下列最大最小值,来调整小车上的每个传感器

ints1_min = 240;
ints1_max = 800;

ints2_min = 220;
ints2_max = 910;

ints3_min = 320;
ints3_max = 890;

ints4_min = 230;
ints4_max = 730;

ints5_min = 310;
ints5_max = 960;

//当传感器正在读取黑线时,定义该临界值
intlower_threshold = 40;

//当传感器正在读取白色海报时,定义该临界值
intupper_threshold = 210;

voidsetup()
{
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);
}

voidupdate_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);
}

voidloop()
{
update_sensors();    //更新传感器

//首先,检查中兴传感器数值
if(adj_3 < lower_threshold)
{
    //如果中心传感器值小于临界值,检查周围传感器
    if(adj_2 > upper_threshold && adj_4 > upper_threshold)
    {
      forward_motors();
    }
    //要小车在碰到黑盒子时调头
   
    elseif(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
    elseif(adj_1 > upper_threshold && adj_5 < lower_threshold)
    {
      turn_right();
    }
   
    //如果不是传感器 1 或者传感器 5,那么就检查传感器 2
    elseif(adj_2 < lower_threshold && adj_4 > upper_threshold)
    {
      turn_left();
    }
   
    //如果不是传感器 2, 那就检查传感器 4
    elseif(adj_2 > upper_threshold && adj_4 < lower_threshold)
    {
      turn_right();
    }
}
}

//开始电机控制功能

voidforward_motors()
{
//无限期前进
servo_R.write(servo_R_forward);
servo_L.write(servo_L_forward);
}

voidturn_left()
{
//左转
servo_R.write(servo_R_forward);
servo_L.write(servo_L_reverse);
}

voidturn_right()
{
//右转
servo_R.write(servo_R_reverse);
servo_L.write(servo_L_forward);
}

voidturn_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/

血阳 发表于 2015-5-27 01:00:37

能列一下清单吗?想知道用到了哪些东西。。。。。
还有问问,这个供电是先给mini供电后,通过mini引脚再给舵机供电吗?
最后问个,看你的接线,那个舵机和板子的接线,你是重新设计了一个电路然后通过设计的板子再接到mini的吗?因为看到你的接线很规整,所以想问问。

Szlq77 发表于 2015-5-15 10:46:23

楼主~你的库函数哪里有下载啊?

请叫我小萌兽 发表于 2015-5-18 12:09:08

Arduino IDE里面自带舵机库。

血阳 发表于 2015-5-25 23:51:50

哇哦~学习学习~niubility

请叫我小萌兽 发表于 2015-5-26 21:44:58

血阳 发表于 2015-5-25 23:51 static/image/common/back.gif
哇哦~学习学习~niubility

谢谢支持!

请叫我小萌兽 发表于 2015-5-30 17:53:04

血阳 发表于 2015-5-27 01:00 static/image/common/back.gif
能列一下清单吗?想知道用到了哪些东西。。。。。
还有问问,这个供电是先给mini供电后,通过mini引脚再给 ...

150*150*3mm 亚克力板一块
一个万向轮 + 2车轮+ 2联轴器
2个995舵机
7.4V电池 一块
固定舵机直角架(自己做的 4个)
Arduino Nano 一块(直接7.4供电→VIN)
2596减压模块 一个(7.4V电池经减压至 5V→舵机)
5个循迹管
150Ω、10K电阻各 5 个, 220Ω电阻 1 个(220Ω电阻接发光二极管用)
自锁按键一个
PCB单面覆铜板一“小”快
铜柱、螺母、螺丝(这个。。。就不数了吧~)

由于Arudino_循迹小车的PCB压缩文件太大~~无法上传
便附循迹板原理图:



血阳 发表于 2015-5-30 22:12:12

请叫我小萌兽 发表于 2015-5-30 17:53 static/image/common/back.gif
150*150*3mm 亚克力板一块
一个万向轮 + 2车轮+ 2联轴器
2个995舵机


谢谢你的耐心解答,感觉好详细,很有帮助。{:3_52:}

血阳 发表于 2015-6-5 23:50:38

突然还有个问题,就是我看的舵机讲解,都是只能让舵机转一定角度。
为什么你的这个程序能够让舵机一直转动?
是哪段的代码实现了这个功能?

请叫我小萌兽 发表于 2015-6-6 21:40:44

血阳 发表于 2015-6-5 23:50 static/image/common/back.gif
突然还有个问题,就是我看的舵机讲解,都是只能让舵机转一定角度。
为什么你的这个程序能够让舵机一直转动 ...

因为我将舵机改装成了“能连续旋转的伺服舵机”
详情请看:http://www.geek-workshop.com/thread-14885-1-2.html

血阳 发表于 2015-6-7 03:31:48

请叫我小萌兽 发表于 2015-6-6 21:40 static/image/common/back.gif
因为我将舵机改装成了“能连续旋转的伺服舵机”
详情请看:http://www.geek-workshop.com/thread-14885- ...

难怪啊,在这看了半天不理解,原来是改过的舵机啊,学习了~
页: [1]
查看完整版本: Arduino_循迹小车