极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 27695|回复: 15

399元的小车

[复制链接]
发表于 2013-12-23 05:35:18 | 显示全部楼层 |阅读模式
本帖最后由 新月 于 2013-12-24 15:51 编辑


按避障程序写入在手中一切正常,放在地上就不走了,明显是电机没力带不动,怎么办?
说来说去,还是代码的事,初学就是一头雾水啊!

本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2013-12-23 05:36:43 | 显示全部楼层
int SNUM[3] ;//定义3个传感器,从SNUM[0]-SNUM[2]为从左到右3个红外避障传感器
int INA = 4; //电机A正反转控制端
int PWMA = 5; //电机A调速端
int INB = 7; //电机B正反转控制端
int PWMB = 6; //电机B调速端

void motospd(int sp1,int sp2) //电机速度控制函数。括号内分别为左右电机速度值,
{                        //范围-255~+255,正值为正转,负值为反转。
  if(sp1>0)
    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));
}
void setup(){

  pinMode(11, INPUT); //配置左传感器IO口为输入
  pinMode(12, INPUT); //配置中传感器IO口为输入
  pinMode(13, INPUT); //配置右传感器IO口为输入
  Serial.begin(9600); //打开串口,初始化
  pinMode(INA,OUTPUT);
  pinMode(INB,OUTPUT);   //配置电机驱动IO口为输出

}
void loop(){

  SNUM[0] = digitalRead(11);//左传感器赋值
  SNUM[1] = digitalRead(12); //中传感器赋值
  SNUM[2] = digitalRead(13); //右传感器赋值
  for (int i=0;i<3;i++)
  {
    Serial.print(SNUM[i]);//串口输出每个传感器的值,打开串口可显示传感器检测结果
  }                  
  Serial.println(SNUM[2]);
  if ((SNUM[0]==1)&&(SNUM[1]==1)&&(SNUM[2]==1))//所有传感器都没有检测到障碍
    motospd(100,100);                          //直行
  if ((SNUM[0]==0)&&(SNUM[1]==1)&&(SNUM[2]==1)) //左传感器检测到障碍物
    motospd(100,50);                           //右转
  if ((SNUM[0]==1)&&(SNUM[1]==1)&&(SNUM[2]==0)) //右传感器检测到障碍物
    motospd(50,100);                             //左转
  if ((SNUM[0]==1)&&(SNUM[1]==0)&&(SNUM[2]==1)) //中传感器检测到障碍物
    motospd(-100,-100);                           //后退
  delay(50);
}

回复 支持 反对

使用道具 举报

发表于 2013-12-23 07:57:40 | 显示全部楼层
怎么供电的?
回复 支持 反对

使用道具 举报

发表于 2013-12-23 09:44:33 | 显示全部楼层
感觉电池供电不足
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-23 10:08:38 | 显示全部楼层
298板单独供电,电池是新充的,准备再加一节3.7V的锂电试一下。
回复 支持 反对

使用道具 举报

发表于 2013-12-23 12:17:57 | 显示全部楼层
新月 发表于 2013-12-23 10:08
298板单独供电,电池是新充的,准备再加一节3.7V的锂电试一下。

电压多少?什么类型的电池?
建议直接3.7V×3的锂电供电
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-23 16:01:02 | 显示全部楼层
i7456 发表于 2013-12-23 12:17
电压多少?什么类型的电池?
建议直接3.7V×3的锂电供电

谢谢!
是的,现在用三节3.7V/3000mAH锂电池,可以跑了,
但速度太快,
准备换 双轴 6V  1:288 扭力2kg的电机再试。
回复 支持 反对

使用道具 举报

发表于 2013-12-23 17:08:22 | 显示全部楼层
本帖最后由 沧海笑1122 于 2013-12-23 17:09 编辑

速度快可以软件调速啊,不过我觉得你的电压有点高了,3×3.7V,你可以查查电机的电压范围。我也曾遇到这种问题,我更换了电机,只换电机(TB 5元左右的电机),减速齿轮部分不用换。另外就是轮胎的问题,有的轮胎是比较硬的,抓地不好。
回复 支持 反对

使用道具 举报

发表于 2013-12-23 23:05:53 | 显示全部楼层
http://x.openjumper.com/l298motorshield/
先试一试这个就知道是不是电机问题了

你贴那个代码直接用肯定是力量不足的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-24 05:39:15 | 显示全部楼层
三水 发表于 2013-12-23 23:05
http://x.openjumper.com/l298motorshield/
先试一试这个就知道是不是电机问题了

超版你好!
/*OPEN JUMPER L298 Shield
20131224 试了这个程序小车可以运行但速度太快*/
int INA = 4; //电机A正反转控制端
int PWMA = 5; //电机A调速端
int INB = 7; //电机B正反转控制端
int PWMB = 6; //电机B调速端

void setup(){
   pinMode(INA,OUTPUT);
   pinMode(INB,OUTPUT);
}
void loop(){
  int value;
  for(value = 0 ; value <= 255; value+=5){
   digitalWrite(INA,HIGH);
   digitalWrite(INB,HIGH);
   analogWrite(PWMA,value);
   analogWrite(PWMB,value);
   delay(50);
   }
}
--------------------------------------------------
才试了这个程序:
用三节3.7V锂电串的电源,放在地上小车跑的很有劲,速度快;
换二节3.7V锂电串的电源,放有地上小车就跑不动了。
回复 支持 反对

使用道具 举报

发表于 2013-12-24 12:05:29 | 显示全部楼层
本帖最后由 三水 于 2013-12-24 12:10 编辑
新月 发表于 2013-12-24 05:39
超版你好!
/*OPEN JUMPER L298 Shield
20131224 试了这个程序小车可以运行但速度太快*/


是的 这个程序是监测电机和电机驱动板是否正常的

void setup(){

  pinMode(11, INPUT); //配置左传感器IO口为输入
  pinMode(12, INPUT); //配置中传感器IO口为输入
  pinMode(13, INPUT); //配置右传感器IO口为输入
  Serial.begin(9600); //打开串口,初始化
  pinMode(INA,OUTPUT);
  pinMode(INB,OUTPUT);   //配置电机驱动IO口为输出

}
这段代码里没有初始化PWM端口 所以你直接使用的时候会发现力矩不够

if ((SNUM[0]==1)&&(SNUM[1]==1)&&(SNUM[2]==1))//所有传感器都没有检测到障碍
    motospd(100,100);                          //直行
  if ((SNUM[0]==0)&&(SNUM[1]==1)&&(SNUM[2]==1)) //左传感器检测到障碍物
    motospd(100,50);                           //右转
  if ((SNUM[0]==1)&&(SNUM[1]==1)&&(SNUM[2]==0)) //右传感器检测到障碍物
    motospd(50,100);                             //左转
  if ((SNUM[0]==1)&&(SNUM[1]==0)&&(SNUM[2]==1)) //中传感器检测到障碍物
    motospd(-100,-100);                           //后退
其次这里的PWM值过小 建议改大
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-24 15:50:04 | 显示全部楼层
其次这里的PWM值过小 建议改大
是的改大后两节3.7V锂电可以运行了,谢了!
回复 支持 反对

使用道具 举报

发表于 2013-12-27 15:25:50 | 显示全部楼层
建议上航模电池吧,你是不是两节18650?持续放电能力不足,我换了7.4V 5200MAH车模电池 30C。
我的蓝牙小车,703N视频,几乎都走不动,18650用不了多久就没电了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-27 21:22:33 | 显示全部楼层
沧海笑1122 发表于 2013-12-27 15:25
建议上航模电池吧,你是不是两节18650?持续放电能力不足,我换了7.4V 5200MAH车模电池 30C。
我的蓝牙小车 ...

我买了两节26650 6800mAH准备试一下。
回复 支持 反对

使用道具 举报

发表于 2013-12-27 23:32:24 | 显示全部楼层
锂电池有一个重要的参数,叫做最大可持续放电倍数,代表提供大电流的能力,也就是说,同样的容量,航模电池可以在一定时间内提供更大的电流。
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-18 14:06 , Processed in 0.062781 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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