极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 24199|回复: 10

Arduino_循迹小车

[复制链接]
发表于 2015-5-7 21:16:04 | 显示全部楼层 |阅读模式
直接上图:

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


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


同志们,下面进行“车展”  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/

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-5-27 01:00:37 | 显示全部楼层
能列一下清单吗?想知道用到了哪些东西。。。。。
还有问问,这个供电是先给mini供电后,通过mini引脚再给舵机供电吗?
最后问个,看你的接线,那个舵机和板子的接线,你是重新设计了一个电路然后通过设计的板子再接到mini的吗?因为看到你的接线很规整,所以想问问。
回复 支持 1 反对 0

使用道具 举报

发表于 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
哇哦~学习学习~niubility

谢谢支持!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-30 17:53:04 | 显示全部楼层
血阳 发表于 2015-5-27 01:00
能列一下清单吗?想知道用到了哪些东西。。。。。
还有问问,这个供电是先给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压缩文件太大~~无法上传
便附循迹板原理图:



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2015-5-30 22:12:12 | 显示全部楼层
请叫我小萌兽 发表于 2015-5-30 17:53
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
突然还有个问题,就是我看的舵机讲解,都是只能让舵机转一定角度。
为什么你的这个程序能够让舵机一直转动 ...

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

使用道具 举报

发表于 2015-6-7 03:31:48 | 显示全部楼层
请叫我小萌兽 发表于 2015-6-6 21:40
因为我将舵机改装成了“能连续旋转的伺服舵机”
详情请看:http://www.geek-workshop.com/thread-14885- ...

难怪啊,在这看了半天不理解,原来是改过的舵机啊,学习了~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-25 15:54 , Processed in 0.042222 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表