首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用压降控制遥控车

用压降控制遥控车
EN

Stack Overflow用户
提问于 2009-04-07 00:01:20
回答 3查看 775关注 0票数 3

所以我和我的搭档需要一些帮助,我们正在做一个最后的项目,这是一个电子工程学位。我们的问题是,在课堂上没有人真正懂得编程。我们需要帮助或一些关于如何编程的一般性想法。

该项目:

我们有一辆装有红外(红外)传感器的怪物卡车,通过电压探测到它的路径。与此,我们正在使用一个自由规模的电路板作为“大脑”,连同这一点,我们有一个书呆子“导弹炮塔”通过开放的门(我们需要做编程,以注意一个压降从红外传感器。

方案编制:

我们正在非常非常努力地努力为这个创建代码--

  1. 需要一个延迟功能,在程序的开始,设置怪物卡车在地面,之后,我们需要它遵循一条直线从一套标准的电压,红外传感器正在地面读取。
  2. 当它运行时,它将有一个大的V下降读数,当它经过一个敞开的门,我们需要它停止射击,然后沿着它的路径。

我知道这是一个很大的要求,但我们有很大的需要帮助,我们的老师虽然聪明超过他的年龄在一切电气(让我想起医生从回到未来)c编程是缺乏和没有太多的知识在这里有大量的知识使用C编程技能。最后,一旦我们得到这项工作(5月中旬),我将张贴视频,如果可以的话,并向大家展示。我感谢您对此的任何意见和建议,谢谢大家的宝贵时间!

EN

回答 3

Stack Overflow用户

发布于 2009-04-07 00:20:23

您的代码可能如下所示:

代码语言:javascript
复制
  // 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“检查移到顶部,我可能会向左转而不是对门作出反应。
  • 按照上述代码的编写方式,每次通过循环时只会发生一个反应。(这将防止你在只做一件事情时意外地尝试做两件事,例如左转射击)
  • 编写能将电压转换为距离的函数可能会有所帮助。
  • 如果您采取了复杂的操作(比如检测到一扇门后的反应)并将它们移动到自己的功能中,那么您的代码就会更干净、更容易维护。
  • 确保使用某种形式的修订控制,即使您只需要定期压缩您的开发目录。当您发现您在代码中引入了一个bug时,这将是非常有用的。
票数 5
EN

Stack Overflow用户

发布于 2009-04-07 00:26:22

出于好奇,你为什么不能在硬件上做到这一点呢?我对你的项目有很多假设,但我认为如果你的专业领域是硬件的话,至少第一种可能更容易在硬件上完成。当然,除非你有指令在你必须遵守的软件中这样做。

如果红外传感器已经输出了可变电压,你就不能用传感器输出的电压来驱动马达吗?我假设车轮是由马达驱动的,而你旋转一个比另一个快,让它转动。然后,您甚至可能得到一个更平滑的驾驶模式(转弯/调整),而不是标准的软件解决方案,即转或转。

对于#2,您可以实现一个状态机。这也可以解决延迟问题,只需在状态0(等待)和状态1(正常)之间抛出一个计时。然后使用从门传感器输出的电压触发状态2(点火)。如果你需要的话,你可以把它分成两种状态,2(武装)和3(射击),在两种状态之间有另一个定时器。车轮电机只处于状态1,当状态3发生时,释放导弹触发器。

票数 4
EN

Stack Overflow用户

发布于 2009-04-07 00:17:33

大多数大学都有一个编程俱乐部(我知道我有)--为什么不呆在那里看看有没有人想帮忙呢?或者在大学机房的布告栏上放点东西,我相信大多数优秀的程序员都会发现这是一个很有趣的项目,值得花点时间。

因为这是一个物理项目,你已经在那里,你真的希望有人‘地面’与你,可以这么说。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/723696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档