用电压降控制遥控车

时间:2009-04-07 00:01:20

标签: c# c

所以我的伴侣和我需要一些帮助;我们正在进行一个电气工程学位的最终项目。我们的问题,没有人真正了解课堂上的编程。我们需要有关如何编程的帮助或一些一般性的想法。

项目:

我们有一个带有两个IR(红外线)传感器的怪物卡车,通过电压检测它的路径。有了这个,我们使用自由尺度的电路板作为“大脑”,我们有一个nerf“导弹炮塔”通过开门射击(我们需要编程来记录红外传感器的电压降。

编程:

我们正在努力并且非常努力地为此创建代码

  1. 在程序启动时需要延迟功能,以便将怪物卡车设置在地面上,之后我们需要它按照红外传感器在地面上读取的设定电压标准的直线。
  2. 在它开始的时候会有一个很大的V drop读数,当它通过一个打开的门时,我们需要它停止射击然后按照它的路径。
  3. 我知道要提出很多要求,但是我们需要大量的帮助,我们的老师在他所有的电气方面都超越了他多年的智慧(让我想起回到未来的医生)c编程缺乏而且也不是这里的许多人都拥有使用C编程技能的丰富知识。 最后,一旦我们得到这个工作(5月中旬)我会发布视频,如果能够,并告诉你所有。我感谢任何意见和任何想法,谢谢大家的时间!!

3 个答案:

答案 0 :(得分:5)

您的代码可能如下所示:

  // Give yourself some time to set the robot down
  <sleep_for_some_interval>;

  // Keep reading the sensors and reacting until
  // some amount of time passes, or a button is pressed, etc.
  while(<keep_running_condition>)
  {
     // Update sensor readings
     int leftDist = <ConvertToDistance>(<read_left_voltage>);
     int rightDist = <ConvertToDistance(<read_right_voltage>);

     // React to sensor readings
     if(leftDist > <door_threshold> && 
        rightDist > <door_threshold>)
     {
         // A door has been detected.
         <stop>
         <shoot>
         <move_forward_fixed_amount>
     } 
     else if(leftDist > <turn_threshold>) 
     {
         // Left distance is beyond the threshold, 
         // need to turn left
         <turnLeft>;
     } 
     else if(rightDist > <turn_threshold>) 
     {
         // Right distance is beyond the threshold,
         // need to turn right
         <turnRight>
     } 
     else (<terminate_condition>) 
     {
         // Something happened (a sensor condition, etc)
         // that tells us that we need to end
         // the program
         break; // This will exit the while loop
     } 
     else (...) 
     {
         // Other conditions...
     } 
     else 
     {
         // Default reaction (happens if none of the previous 
         // conditions are met)
         <goForward>
     }
  }

  // Shutdown the robot
  <stop>
  // ...

显然,比较可能需要不同,但基本的想法是不断读取您的传感器,然后列出一些条件,以便在满足条件时进行检查和采取措施。

备注/提示:

  • 要“延迟......在程序开头”,您会拨打sleep / usleep
  • 之类的内容
  • 确保以正确的顺序检查您的条件(首先检查最严格的条件)在上面的示例中,如果我将“turnLeft”检查移到顶部,我可能最终向左转,而不是对门。
  • 编写上述代码的方式,每次循环都只会发生一个反应。 (这样可以防止你在做一件事时不小心尝试做两件事,例如左转和开火)
  • 编写可将电压转换为距离
  • 的功能可能会有所帮助
  • 如果您采取复杂的操作(例如检测到门后的反应)并将其移动到自己的功能中,您的代码将更清晰,更易于维护。
  • 确保使用某种形式的revision control,即使您只是定期压缩您的开发目录。当您发现自己在代码中引入了错误时,它会非常有用。

答案 1 :(得分:4)

出于好奇,有没有理由你不能在硬件中做到这一切?我对你的项目有很多假设,但我认为如果你的专业领域是至少#1甚至可能更容易在硬件上做。当然,除非您有必须遵守的软件说明。

如果红外传感器已经输出可变电压,你不能只是缩放传感器的电压输出来驱动电机吗?我假设车轮是由电机驱动的,而你的旋转速度比另一个要快,可以让它转动。然后你甚至可以获得更平滑的驾驶模式(转向/调整),而不是标准的软件解决方案,这是一种转弯。

对于#2,您可以实现state machine。这也可以处理延迟,只需在状态0(等待)和状态1(正常)之间抛出timer。然后使用门传感器的电压输出触发状态2(点火)。如果需要,可以将其分为两种状态,2(布防)和3(触发),两者之间有另一个计时器。轮子马达仅在状态1中有效,并在状态3发生时释放导弹触发器。

答案 2 :(得分:0)

大多数大学都有一个编程俱乐部(我知道我的确如此) - 为什么不在那里闲逛,看看是否有人想帮忙? 或者甚至在uni的计算机房周围的布告牌上放一些东西,我相信大多数优秀的程序员会发现这是一个有趣的项目,可以节省一些时间。

因为这是一个你已经到达的实体项目,你真的希望有人在那里与你在一起,可以这么说。