找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1437|回复: 6
收起左侧

为什么加了和寻迹相关的单片机代码之后,小车的速度变慢了

[复制链接]
ID:1008389 发表于 2022-6-5 10:20 | 显示全部楼层 |阅读模式
为什么加了和寻迹相关的代码之后,小车的速度变慢了?有什么解决的方法吗?
  1. int GraysensorRPin = 18;
  2. int GraysensorLPin = 14;
  3. int motor_01 = 10;
  4. int motor_02 = 6;
  5. int motor_03 = 5;
  6. int motor_04 = 9;
  7. int start_stop_flag = 0;
  8. int stop_num = 0;
  9. int stop_clear_num = 0;
  10. void right();
  11. void left();
  12. void forwards();
  13. void stop();

  14. void setup() {
  15.   pinMode(GraysensorRPin,INPUT);
  16.   pinMode(GraysensorLPin,INPUT);
  17.   pinMode(motor_01,OUTPUT);
  18.   pinMode(motor_02,OUTPUT);
  19.   pinMode(motor_03,OUTPUT);
  20.   pinMode(motor_04,OUTPUT);
  21. }

  22. void loop() {
  23.   if(!(digitalRead(GraysensorRPin)) &&digitalRead(GraysensorLPin))
  24.   {
  25.     right();
  26.   }
  27.     if(digitalRead(GraysensorRPin) && !(digitalRead(GraysensorLPin)))
  28.   {
  29.     left();
  30.   }
  31.     if( (!digitalRead(GraysensorRPin))&& (!digitalRead(GraysensorLPin)))
  32.   {
  33.     forwards();
  34.   }
  35.     if(digitalRead(GraysensorRPin) &&digitalRead(GraysensorLPin))
  36.   {
  37.     stop();
  38.   }
  39.   if(stop_clear_num == 2)
  40.   {
  41.     start_stop_flag = 1;
  42.   }
  43.   
  44. }
  45. void stop()
  46. {
  47.    if(start_stop_flag)
  48.   {
  49.     analogWrite(motor_03, 0);
  50.     analogWrite(motor_02, 0);
  51.     analogWrite(motor_04, 0);
  52.     analogWrite(motor_01, 0);
  53.     start_stop_flag = 0;
  54.     forwards();
  55.   }else
  56.   {
  57.     stop_num++;
  58.   }
  59. }

  60. void right()
  61. {
  62.   analogWrite(motor_03, 175);
  63.   analogWrite(motor_02, 0);
  64.   analogWrite(motor_04, 0);
  65.   analogWrite(motor_01, 175);
  66. }

  67. void forwards()
  68. {
  69.   analogWrite(motor_03, 175);
  70.   analogWrite(motor_02, 0);
  71.   analogWrite(motor_04, 175);
  72.   analogWrite(motor_01, 0);
  73.    if(stop_num > 10)
  74.   {
  75.     stop_num = 0;
  76.     stop_clear_num++;
  77.   }
  78. }

  79. void left()
  80. {
  81.   analogWrite(motor_03, 0);
  82.   analogWrite(motor_02, 175);
  83.   analogWrite(motor_04, 175);
  84.   analogWrite(motor_01, 0);
  85. }
复制代码




回复

使用道具 举报

ID:844772 发表于 2022-6-6 08:51 | 显示全部楼层
我觉得你程序判断上有问题,因该没法循迹。至于循迹时车速慢很正常,你可以加强动力,就是analogwrite那的值大一点呗,它的范围是255以内。
回复

使用道具 举报

ID:1008389 发表于 2022-6-6 14:44 | 显示全部楼层
寻迹是能正常寻迹的,只是加了寻迹的代码之后,小车变得比之前的慢
回复

使用道具 举报

ID:1032698 发表于 2022-6-6 20:17 | 显示全部楼层
看样子你这是四个电机,在没加寻迹之前你是四个电机都动,加了寻迹后只有两个电机工作,其实转弯时可以让四个电机都工作的,两个正转,两个反转。
回复

使用道具 举报

ID:1032698 发表于 2022-6-6 20:20 | 显示全部楼层
可以两个电机正转,两个电机反转,这样甚至能实现原地转圈,速度和转向能力也会提高不少。还有就是可如楼上说的调高电压,选用5V电压可能也能解决一部分问题。
回复

使用道具 举报

ID:1004455 发表于 2022-6-6 20:27 | 显示全部楼层
调pwm
回复

使用道具 举报

ID:844772 发表于 2022-6-7 09:09 | 显示全部楼层
新人小白 发表于 2022-6-6 14:44
寻迹是能正常寻迹的,只是加了寻迹的代码之后,小车变得比之前的慢

仅仅想速度快点,就把analogWrite(motor_02, 175);中的175调大,距离255还有好大的调节空间。由于循迹时用的是差动法,导致动能损失大,必然会降低速度的。如果转向时,用一边转一边不转方式,这样转向不那么灵敏,但动能损失小点。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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