回答

收藏

Micropython TturnipBit 体感遥控车

STMCU STMCU 2907 人阅读 | 0 人回复 | 2018-05-22

本帖最后由 酥小小酥 于 2018-5-22 10:06 编辑

所需器材:
?        TurnipBit开发板 一块
?        下载数据线 一条
?        智能小车套件 一套(底盘、车轮、电机等)
?        超声波模块(HC-SR04)一个(用作小车的“眼睛”)
?        L298N电机驱动模块 一个
?        接入互联网的电脑 一台(推荐使用Google Chome或者Firefox浏览器)
电机驱动和超声波的安装   超声波模块共4个引脚,分别是VCCGNDTrigEchoVCCTurnipBit扩展板的+5V引脚,GNDTurnipBit扩展板的GND引脚,Trig触发引脚接P5Echo回传引脚接P8 L298N电机驱动模块左侧OUT3OUT4接线端子对应接入左轮电机的下侧、上侧侧铜片,右侧也是。L298N的输入端IN1IN2IN3IN4分别接入扩展板的P19P13P12P11 详细见下表:
TurnipBit扩展板
超声波模块
L298N
+5V
VCC
+12V+5V
GND
GND
GND
P5
Trig
P8
Echo
P11
IN4
P12
IN3
P13
IN2
P19
IN1

程序设计 伪代码分析  
    让我们先用伪代码来分析一下避障车的程序逻辑。首先,我们通过小车的超声波模块来检测前方是否存在障碍物,计算出与障碍物之间的距离。当与障碍物的距离小于或等于我们预设的安全距离时,控制小车进行转向避开障碍物;当与障碍物的距离大于我们预设的安全距离时,控制小车进行继续前进;逻辑顺序如下: 第一步,触犯超声波模块开始检测; 第二步:计算出与前方障碍物的距离; 第三步:判断与障碍物的距离是否小于设定的安全距离; 第四步:若小于或等于则进行转向,避开障碍物; 第五步:若大于则继续保持前进。 根据伪代码,画成流程图如下:
     代码分析 会思考的避障车整体代码,可参考右侧代码显示区,如下。
  1. from microbit import *


  2. display.show(Image.ARROW_N)
  3. pin11.write_digital(0)
  4. pin12.write_digital(1)
  5. pin13.write_digital(0)
  6. pin19.write_digital(1)
  7. while True:
  8. num = 0
  9. pin5.write_digital(0)
  10. pin5.write_digital(1)
  11. sleep(0.01)
  12. if pin8.read_digital() != True:
  13. pin5.write_digital(0)
  14. pin5.write_digital(1)
  15. sleep(0.01)
  16. while pin8.read_digital():
  17. num = num + 1
  18. if num <= 8:
  19. display.show(Image.ARROW_W)
  20. pin11.write_digital(1)
  21. pin12.write_digital(0)
  22. pin13.write_digital(0)
  23. pin19.write_digital(1)
  24. sleep(1000)
  25. display.show(Image.ARROW_N)
  26. pin11.write_digital(0)
  27. pin12.write_digital(1)
  28. pin13.write_digital(0)
  29. pin19.write_digital(1)


  30.      接下来,我们一起来分析一下代码。        通过上面的代码,不难发现,控制避障车前进的代码部分我们重复编写了两遍,在实际项目中这种写法是不合理的。为了让代码更加简洁,优雅,我们将控制前进的代码部分提取出来建立名称为Go()的函数,在需要执行前进的地方直接调用Go()函数即可。

  31. from microbit import *

  32. def Go():
  33. display.show(Image.ARROW_N)
  34. pin11.write_digital(0)
  35. pin12.write_digital(1)
  36. pin13.write_digital(0)
  37. pin19.write_digital(1)

  38. Go()
  39. while True:
  40. num = 0
  41. pin5.write_digital(0)
  42. pin5.write_digital(1)
  43. sleep(0.01)
  44. if pin8.read_digital() != True:
  45. pin5.write_digital(0)
  46. pin5.write_digital(1)
  47. sleep(0.01)
  48. while pin8.read_digital():
  49. num = num + 1
  50. if num <= 8:
  51. display.show(Image.ARROW_W)
  52. pin11.write_digital(1)
  53. pin12.write_digital(0)
  54. pin13.write_digital(0)
  55. pin19.write_digital(1)
  56. sleep(1000)
  57. Go()
复制代码


按照同样的方式,我们将控制转向和检测障碍物的代码分别建立Turn()Detection()函数。
  1. from microbit import *

  2. def Go():
  3. display.show(Image.ARROW_N)
  4. pin11.write_digital(0)
  5. pin12.write_digital(1)
  6. pin13.write_digital(0)
  7. pin19.write_digital(1)

  8. def Turn():
  9. display.show(Image.ARROW_W)
  10. pin11.write_digital(1)
  11. pin12.write_digital(0)
  12. pin13.write_digital(0)
  13. pin19.write_digital(1)

  14. def Detection():
  15. num=0
  16. pin5.write_digital(0)
  17. pin5.write_digital(1)
  18. sleep(0.01)
  19. if pin8.read_digital() != True:
  20. pin5.write_digital(0)
  21. pin5.write_digital(1)
  22. sleep(0.01)
  23. while pin8.read_digital():
  24. num = num + 1
  25. return num

  26. Go()
  27. while True:
  28. num = Detection()
  29. if num <= 8:
  30. Turn()
  31. sleep(1000)
  32. Go()
复制代码


代码如上  ,那么如果用拼插编程怎么实现?
图形拼插代码.rar (1.57 MB, 下载次数: 0)

微信公众号:Micropython玩家汇


分享到:
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /3 下一条