巡线小车左右摇摆,怎么办?-Arduino中文社区 - Powered by Discuz!
查看: 10553|回复: 15

[已解决] 巡线小车左右摇摆,怎么办?

[复制链接]

该用户从未签到

发表于 2017-12-30 12:40 | 显示全部楼层 |阅读模式
本帖最后由 向阳花 于 2018-1-26 14:09 编辑

系统的架构是:采用3个数字光电传感器获取地面黑线情况,arduino获取传感器信号后做出相应判断,然后驱动左右电机、车轮转动。

现在小车的运行结果,能沿着黑线前进,但左右摇摆幅度很大。不知道怎么样进一步改进。

小车运行视频

小车程序:
int SNUM[3] ;//定义3个传感器
int INA = 4; //电机A正反转控制端
int PWMA = 5; //电机A调速端
int INB = 7; //电机B正反转控制端
int PWMB = 6; //电机B调速端
void motospd(int sp1,int sp2);
void setup(){
pinMode(2, INPUT); //配置3个传感器IO口为输入
pinMode(3, INPUT);
pinMode(8, INPUT);
pinMode(INA,OUTPUT);//配置电机输出IO口为输出
pinMode(INB,OUTPUT);   
}
void loop(){
SNUM[0] = digitalRead(2);//SNUM[0]-SNUM[2]分别为从左到右三个红外寻线传感器
SNUM[1] = digitalRead(3);
SNUM[2] = digitalRead(8);

  if ((SNUM[0]==0)&&SNUM[1]&&SNUM[2])//左端传感器检测到黑线
  {
    motospd(50,120);//设置左右电机转速,使小车向左行驶
  }
  if (SNUM[0]&&(SNUM[1]==0)&&SNUM[2])//中间传感器检测到黑线
  {
    motospd(100,100);//小车直行
  }
  if (SNUM[0]&&SNUM[1]&&(SNUM[2]==0))//右端传感器检测到黑线
  {
    motospd(120,50);//小车向右行驶
  }   
   delay(50);
}
void motospd(int sp1,int sp2)//电机速度控制函数。括号内分别为左右电机速度值,
{
  if(sp1>0)                  //范围-255~+255,正值为正转,负值为反转。
    digitalWrite(INA, HIGH);   
  else
     digitalWrite(INA, LOW);
  if(sp2>0)
     digitalWrite(INB, HIGH);
  else
     digitalWrite(INB, LOW);
  analogWrite(PWMA,abs (sp1));
  analogWrite(PWMB,abs (sp2));
}


该用户从未签到

发表于 2017-12-30 13:26 | 显示全部楼层
使用PID,去找一下PID的资料

该用户从未签到

 楼主| 发表于 2017-12-30 18:37 | 显示全部楼层
ssgzhl 发表于 2017-12-30 13:26
使用PID,去找一下PID的资料

感谢大侠指点,能否给我个例子参考下

该用户从未签到

发表于 2017-12-31 10:08 | 显示全部楼层
再者就是  我个人觉得 这种普通电机其实反应也没那么快 可以考虑一下一些高端编码电机

该用户从未签到

 楼主| 发表于 2018-1-1 06:40 | 显示全部楼层
单片机菜鸟 发表于 2017-12-31 10:08
再者就是  我个人觉得 这种普通电机其实反应也没那么快 可以考虑一下一些高端编码电机 ...

感谢指点!

该用户从未签到

发表于 2018-1-1 08:24 | 显示全部楼层
补偿太大了降低电机转速

该用户从未签到

 楼主| 发表于 2018-1-2 08:26 | 显示全部楼层
Ksource 发表于 2018-1-1 08:24
补偿太大了降低电机转速

感谢指点!

该用户从未签到

 楼主| 发表于 2018-1-22 10:49 | 显示全部楼层
本人后来改进了红外线传感器模块的间距,从原先的7cm调整到2cm,车辆摇摆就不太明显了。

该用户从未签到

发表于 2018-2-27 16:44 | 显示全部楼层
analogWrite(PWMA,abs (sp1));
  analogWrite(PWMB,abs (sp2));  请教代码中abs(sp1)  abs是什么意思?

该用户从未签到

发表于 2018-2-27 16:52 | 显示全部楼层
abs是取绝对值的意思么?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

【Arduino】168种传感器模块系列实验(159)---MAX9814咪头传感器
【Arduino】168种传感器模
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
【Arduino】108种传感器模块系列实验(61)---WS2812直条8位模块
【Arduino】108种传感器模
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
【Arduino】108种传感器系列实验(06)---声音传感器模块
【Arduino】108种传感器系
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
有没有大佬用过CC1101 模拟433遥控器的 来帮忙解答一下感谢
有没有大佬用过CC1101 模
主控用的是 ESP-WROOM-02(ESP8266) CC1101 用的是这个!对应ESP8266的脚位图 库用
开学季新/老会员回馈活动!
开学季新/老会员回馈活动
开学季:社区会员回馈活动!Arduino中文社区联合openjumper推出开学季会员福利回馈活
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表