[项目]行空板搬运车 精华

294浏览
查看: 294|回复: 1

[项目] 行空板搬运车

[复制链接]
【项目背景】

在别人的仓库里找到一台带机械爪的车,说明书上说主控可用Arduino IDE编程,技术支持可访问官网,别的就没有了,可官网也访问不了,公司倒闭了?最怕遇到这种情况。那主控用不了,我来改造一下吧。
行空板搬运车图1

【项目设计】
使用行空板做为主控,电机驱动使用DF的L289N电机驱动。使用行空板的原因,是因为这套设备有Xbox遥控器,我会使用行空板连接Xbox遥控器
【硬件连接】
1.Xbox遥控器无线接收器插入行空板USB接口。
行空板搬运车图4

2.电机驱动器
因为搬运车有五个电机,两个用于控制车运动,三个用于控制机械爪,水平旋转、上下运动、爪张开与闭合。所以我使用了三个L289N电机驱动,一个驱动控制两个电机。
行空板搬运车图3

行空板搬运车图5


3.通过扩展板与电机驱动板连接
行空板搬运车图7

4.行空板插入扩展板
行空板搬运车图6


5.供电
充电宝为行空板供电,7.4V锂电池为电机驱动板供电,驱动板、扩展板、电源三者要共地。
行空板搬运车图8

6.整机
行空板搬运车图9


行空板搬运车图2


行空板搬运车图10


行空板搬运车图11


【编写程序】
1.使用pygame库,连接Xbox蓝牙手柄。
  1. import pygame
  2. import time
  3. pygame.init()
  4. pygame.joystick.init()
  5. # 初始化手柄
  6. joystick = pygame.joystick.Joystick(0)
  7. joystick.init()
复制代码
2.使用Pinpong库,初始化行空板引脚
  1. from pinpong.extension.unihiker import *
  2. from pinpong.libs.microbit_motor import DFMotor
  3. from pinpong.board import Board
  4. from pinpong.board import Pin
  5. Board().begin()
  6. p_p8_pwm=Pin(Pin.P8, Pin.PWM)
  7. p_p9_pwm=Pin(Pin.P9, Pin.PWM)
  8. p_p5_out=Pin(Pin.P5, Pin.OUT)
  9. p_p6_out=Pin(Pin.P6, Pin.OUT)
  10. p_p16_pwm=Pin(Pin.P16, Pin.PWM)
  11. p_p0_pwm=Pin(Pin.P0, Pin.PWM)
  12. p_p3_pwm=Pin(Pin.P3, Pin.PWM)
  13. p_p13_out=Pin(Pin.P13, Pin.OUT)
  14. p_p15_out=Pin(Pin.P15, Pin.OUT)
  15. p_p12_out=Pin(Pin.P12, Pin.OUT)
复制代码
3.运动控制函数
  1. def forward(speed):#带速度参数——前进
  2.     p_p8_pwm.write_analog(speed)
  3.     p_p9_pwm.write_analog(speed)
  4.     p_p5_out.write_digital(1)
  5.     p_p6_out.write_digital(1)
  6. def back(speed):#带速度参数——后退
  7.     p_p8_pwm.write_analog(speed)
  8.     p_p9_pwm.write_analog(speed)
  9.     p_p5_out.write_digital(0)
  10.     p_p6_out.write_digital(0)
  11.    
  12. def left(speed):#带速度参数——向左
  13.     p_p8_pwm.write_analog(speed)
  14.     p_p9_pwm.write_analog(speed)
  15.     p_p5_out.write_digital(0)
  16.     p_p6_out.write_digital(1)
  17. def right(speed):#带速度参数——向右
  18.     p_p8_pwm.write_analog(speed)
  19.     p_p9_pwm.write_analog(speed)
  20.     p_p5_out.write_digital(1)
  21.     p_p6_out.write_digital(0)
  22. def stop():#停止
  23.     p_p8_pwm.write_analog(0)#左电机
  24.     p_p9_pwm.write_analog(0)#右电机
  25.     p_p16_pwm.write_analog(0)#水平电机
  26.     p_p0_pwm.write_analog(0)#垂直电机
  27.     p_p3_pwm.write_analog(0)#夹电机
  28. def Lrotate(speed):#带速度参数——水平向左原地旋转
  29.     p_p0_pwm.write_analog(speed)
  30.    
  31.     p_p13_out.write_digital(1)
  32.       
  33. def Rrotate(speed):#带速度参数——水平向右原地旋转
  34.     p_p0_pwm.write_analog(speed)
  35.    
  36.     p_p13_out.write_digital(0)
  37. def up(speed):#带速度参数——垂直向上
  38.     p_p16_pwm.write_analog(speed)#左电机
  39.    
  40.     p_p15_out.write_digital(0)
  41.       
  42. def down(speed):#带速度参数——垂直向下
  43.     p_p16_pwm.write_analog(speed)
  44.    
  45.     p_p15_out.write_digital(1)
  46. def Open(speed):#带速度参数——夹打开
  47.     p_p3_pwm.write_analog(speed)   
  48.     p_p12_out.write_digital(0)
  49. def Close(speed):#带速度参数——夹关闭
  50.     p_p3_pwm.write_analog(speed)   
  51.     p_p12_out.write_digital(1)
复制代码
4.手柄按键事件
  1. while True:
  2.         
  3.     for event in pygame.event.get():
  4.          if event.type == pygame.JOYBUTTONDOWN:
  5.              if event.button==0:#"A"键
  6.                 print("“A”键")
  7.                
  8.              elif event.button==1:#"B"键
  9.                  print("“B”键")
  10.                  
  11.              elif event.button==4:#"Y"键
  12.                  print("“Y”键")
  13.                
  14.              elif event.button==3:#"X"键
  15.                  print("“X”键")
  16.                  
  17.              elif event.button==6:#"RB"键,右肩键:Right Shoulder Button
  18.                  print("“RB”键")
  19.                  
  20.              elif event.button==7:#"LB"键,左肩键:Left Shoulder Button
  21.                  print("“LB”键")
  22.                
  23.              elif event.button==10:#"View"键
  24.                  print("“View”键")
  25.                
  26.              elif event.button==11:#"Menu"键
  27.                 print("“Menu”键")
  28.                
  29.              elif event.button==15:#“共享”按键
  30.                 print("“共享”键")
  31.                
  32.              elif event.button==12:#“xbox”按键
  33.                 print("“xbox”键")
  34.          elif event.type == pygame.JOYHATMOTION:#方向键
  35.              if event.hat==0:
  36.                  print(str(event.value[0])+":"+str(event.value[1]))
  37.                  if event.value[0]==0:
  38.                      if event.value[1]==0:#中间位置
  39.                          print("“中间位置”方向键")
  40.                          stop()
  41.                      elif event.value[1]==1:#向上
  42.                          print("“向上”方向键")
  43.                          forward(800)
  44.                      elif event.value[1]==-1:#向下
  45.                          print("“向下”方向键")
  46.                          back(800)
  47.                  elif event.value[0]==-1:#向右
  48.                     print("“向右”方向键")
  49.                     right(800)
  50.                  elif event.value[0]==1:#向左
  51.                      print("“向左”方向键")
  52.                      left(800)
  53.          elif event.type == pygame.JOYAXISMOTION:
  54.              #左摇杆按键
  55.              if event.axis==0:#左右
  56.                 if event.value<-0.1:#向左
  57.                    left(int(abs(event.value)*1000))
  58.                    print("“向左”左摇杆按键")
  59.                 elif event.value>0.1:#向右
  60.                    right(int(event.value*1000))
  61.                    print("“向右”左摇杆按键")
  62.                 else:
  63.                    stop()
  64.                    print("左右stop左摇杆按键")
  65.              elif event.axis==1:#上下
  66.                 if event.value<-0.1:#向上
  67.                    forward(int(abs(event.value)*1000))
  68.                    print("“向上”左摇杆按键")
  69.                 elif event.value>0.1:#向下
  70.                    back(int(event.value*1000))
  71.                    print("“向下”左摇杆按键")
  72.                 else:
  73.                     stop()
  74.                     print("上下stop左摇杆按键")
  75.              #右摇杆按键
  76.              if event.axis==2:#左右
  77.                 if event.value<-0.1:#向右
  78.                    Rrotate(int(abs(event.value)*1000))
  79.                    print("“向右”右摇杆按键")
  80.                 elif event.value>0.1:#向左
  81.                    Lrotate(int(event.value*1000))
  82.                    print("“向左”右摇杆按键")
  83.                 else:
  84.                     stop()
  85.                     print("“停止”右摇杆按键")
  86.              elif event.axis==3:#上下
  87.                 if event.value<-0.1:#向上
  88.                    up(int(abs(event.value)*1000))
  89.                    print("“向上”右摇杆按键")
  90.                 elif event.value>0.1:#向下
  91.                    down(int(event.value*1000))
  92.                    print("“向下”右摇杆按键")
  93.                 else:
  94.                     stop()
  95.              elif event.axis==5:#左射击键
  96.                   if event.value>0:
  97.                      print("左射击键")
  98.                      print(int(event.value*1000))
  99.                      Open(int(event.value*1000))
  100.                   else:
  101.                       stop()
  102.              elif event.axis==4:#右射击键
  103.                    if event.value>0:
  104.                      print("右射击键")
  105.                      print(int(event.value*1000))
  106.                      Close(int(event.value*1000))
  107.                    else:
  108.                       stop()
复制代码


4.完整程序
  1. import pygame
  2. import time
  3. pygame.init()
  4. pygame.joystick.init()
  5. # 初始化手柄
  6. joystick = pygame.joystick.Joystick(0)
  7. joystick.init()
  8. from pinpong.extension.unihiker import *
  9. from pinpong.libs.microbit_motor import DFMotor
  10. from pinpong.board import Board
  11. from pinpong.board import Pin
  12. Board().begin()
  13. p_p8_pwm=Pin(Pin.P8, Pin.PWM)
  14. p_p9_pwm=Pin(Pin.P9, Pin.PWM)
  15. p_p5_out=Pin(Pin.P5, Pin.OUT)
  16. p_p6_out=Pin(Pin.P6, Pin.OUT)
  17. p_p16_pwm=Pin(Pin.P16, Pin.PWM)
  18. p_p0_pwm=Pin(Pin.P0, Pin.PWM)
  19. p_p3_pwm=Pin(Pin.P3, Pin.PWM)
  20. p_p13_out=Pin(Pin.P13, Pin.OUT)
  21. p_p15_out=Pin(Pin.P15, Pin.OUT)
  22. p_p12_out=Pin(Pin.P12, Pin.OUT)
  23. bs=0
  24. time1=0
  25. time2=0
  26. def forward(speed):#带速度参数——前进
  27.     p_p8_pwm.write_analog(speed)
  28.     p_p9_pwm.write_analog(speed)
  29.     p_p5_out.write_digital(1)
  30.     p_p6_out.write_digital(1)
  31. def back(speed):#带速度参数——后退
  32.     p_p8_pwm.write_analog(speed)
  33.     p_p9_pwm.write_analog(speed)
  34.     p_p5_out.write_digital(0)
  35.     p_p6_out.write_digital(0)
  36.    
  37. def left(speed):#带速度参数——向左
  38.     p_p8_pwm.write_analog(speed)
  39.     p_p9_pwm.write_analog(speed)
  40.     p_p5_out.write_digital(0)
  41.     p_p6_out.write_digital(1)
  42. def right(speed):#带速度参数——向右
  43.     p_p8_pwm.write_analog(speed)
  44.     p_p9_pwm.write_analog(speed)
  45.     p_p5_out.write_digital(1)
  46.     p_p6_out.write_digital(0)
  47. def stop():#停止
  48.     p_p8_pwm.write_analog(0)#左电机
  49.     p_p9_pwm.write_analog(0)#右电机
  50.     p_p16_pwm.write_analog(0)#水平电机
  51.     p_p0_pwm.write_analog(0)#垂直电机
  52.     p_p3_pwm.write_analog(0)#夹电机
  53. def Lrotate(speed):#带速度参数——水平向左原地旋转
  54.     p_p0_pwm.write_analog(speed)
  55.    
  56.     p_p13_out.write_digital(1)
  57.       
  58. def Rrotate(speed):#带速度参数——水平向右原地旋转
  59.     p_p0_pwm.write_analog(speed)
  60.    
  61.     p_p13_out.write_digital(0)
  62. def up(speed):#带速度参数——垂直向上
  63.     p_p16_pwm.write_analog(speed)#左电机
  64.    
  65.     p_p15_out.write_digital(0)
  66.       
  67. def down(speed):#带速度参数——垂直向下
  68.     p_p16_pwm.write_analog(speed)
  69.    
  70.     p_p15_out.write_digital(1)
  71. def Open(speed):#带速度参数——夹打开
  72.     p_p3_pwm.write_analog(speed)   
  73.     p_p12_out.write_digital(0)
  74. def Close(speed):#带速度参数——夹关闭
  75.     p_p3_pwm.write_analog(speed)   
  76.     p_p12_out.write_digital(1)
  77. while True:
  78.         
  79.     for event in pygame.event.get():
  80.          if event.type == pygame.JOYBUTTONDOWN:
  81.              if event.button==0:#"A"键
  82.                 print("“A”键")
  83.                
  84.              elif event.button==1:#"B"键
  85.                  print("“B”键")
  86.                  
  87.              elif event.button==4:#"Y"键
  88.                  print("“Y”键")
  89.                
  90.              elif event.button==3:#"X"键
  91.                  print("“X”键")
  92.                  
  93.              elif event.button==6:#"RB"键,右肩键:Right Shoulder Button
  94.                  print("“RB”键")
  95.                  
  96.              elif event.button==7:#"LB"键,左肩键:Left Shoulder Button
  97.                  print("“LB”键")
  98.                
  99.              elif event.button==10:#"View"键
  100.                  print("“View”键")
  101.                
  102.              elif event.button==11:#"Menu"键
  103.                 print("“Menu”键")
  104.                
  105.              elif event.button==15:#“共享”按键
  106.                 print("“共享”键")
  107.                
  108.              elif event.button==12:#“xbox”按键
  109.                 print("“xbox”键")
  110.          elif event.type == pygame.JOYHATMOTION:#方向键
  111.              if event.hat==0:
  112.                  print(str(event.value[0])+":"+str(event.value[1]))
  113.                  if event.value[0]==0:
  114.                      if event.value[1]==0:#中间位置
  115.                          print("“中间位置”方向键")
  116.                          stop()
  117.                      elif event.value[1]==1:#向上
  118.                          print("“向上”方向键")
  119.                          forward(800)
  120.                      elif event.value[1]==-1:#向下
  121.                          print("“向下”方向键")
  122.                          back(800)
  123.                  elif event.value[0]==-1:#向右
  124.                     print("“向右”方向键")
  125.                     right(800)
  126.                  elif event.value[0]==1:#向左
  127.                      print("“向左”方向键")
  128.                      left(800)
  129.          elif event.type == pygame.JOYAXISMOTION:
  130.              #左摇杆按键
  131.              if event.axis==0:#左右
  132.                 if event.value<-0.1:#向左
  133.                    left(int(abs(event.value)*1000))
  134.                    print("“向左”左摇杆按键")
  135.                 elif event.value>0.1:#向右
  136.                    right(int(event.value*1000))
  137.                    print("“向右”左摇杆按键")
  138.                 else:
  139.                    stop()
  140.                    print("左右stop左摇杆按键")
  141.              elif event.axis==1:#上下
  142.                 if event.value<-0.1:#向上
  143.                    forward(int(abs(event.value)*1000))
  144.                    print("“向上”左摇杆按键")
  145.                 elif event.value>0.1:#向下
  146.                    back(int(event.value*1000))
  147.                    print("“向下”左摇杆按键")
  148.                 else:
  149.                     stop()
  150.                     print("上下stop左摇杆按键")
  151.              #右摇杆按键
  152.              if event.axis==2:#左右
  153.                 if event.value<-0.1:#向右
  154.                    Rrotate(int(abs(event.value)*1000))
  155.                    print("“向右”右摇杆按键")
  156.                 elif event.value>0.1:#向左
  157.                    Lrotate(int(event.value*1000))
  158.                    print("“向左”右摇杆按键")
  159.                 else:
  160.                     stop()
  161.                     print("“停止”右摇杆按键")
  162.              elif event.axis==3:#上下
  163.                 if event.value<-0.1:#向上
  164.                    up(int(abs(event.value)*1000))
  165.                    print("“向上”右摇杆按键")
  166.                 elif event.value>0.1:#向下
  167.                    down(int(event.value*1000))
  168.                    print("“向下”右摇杆按键")
  169.                 else:
  170.                     stop()
  171.              elif event.axis==5:#左射击键
  172.                   if event.value>0:
  173.                      print("左射击键")
  174.                      print(int(event.value*1000))
  175.                      Open(int(event.value*1000))
  176.                   else:
  177.                       stop()
  178.              elif event.axis==4:#右射击键
  179.                    if event.value>0:
  180.                      print("右射击键")
  181.                      print(int(event.value*1000))
  182.                      Close(int(event.value*1000))
  183.                    else:
  184.                       stop()
  185.                     
复制代码

【演示视频】


不过是条河鱼  学徒

发表于 2024-4-20 22:27:03

老师,我在b站看到您的AI测跌倒的视频,很有兴趣,想学习一下,不过没找到相关的帖子,请问您这边帖子还在吗,或者相关源码还在吗
回复

使用道具 举报

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail