501浏览
查看: 501|回复: 0

【行空板】麦克纳姆行空车

[复制链接]
本帖最后由 云天 于 2022-5-22 14:01 编辑

SunMay-202205223724..png

【项目特色】行空板直接控制Micro:bit电机扩展板中的电机接口。
【行空板】
行空板是一款专为Python学习和使用设计的新一代国产开源硬件,采用单板计算机架构,集成LCD彩屏、WiFi蓝牙、多种常用传感器和丰富的拓展接口。同时,其自带Linux操作系统和Python环境,还预装了常用的Python库,让广大师生只需两步就能进行Python教学。
SunMay-202205228042..png
金手指:引脚编号兼容micro:bit, 19路独立I/O(支持1路I2C、1路UART、2路SPI、6路12位ADC、5路12位PWM)
micro:bit 电机驱动扩展板

micro:bit电机驱动扩展采用IIC外扩驱动芯片的方式控制电机和舵机,仅占用IIC两个管脚。
SunMay-202205224627..png
【电机驱动库】
在行空板中加载“microbit_motor.py”(在Pinpong库所在目录下能找到)。
SunMay-202205226132..png
【麦克纳姆行空车】
SunMay-202205226818..png

SunMay-202205227751..png


SunMay-202205224933..png

SunMay-202205222030..png

SunMay-202205229614..png

SunMay-202205228285..png

【麦克纳姆轮】

麦克纳姆轮与普通轮子的区别在于麦克纳姆轮旋转时,由于存在斜向的从动轮,会同时产生一个斜向的力,当我们控制轮子旋转的速度与方向时,将斜向的力增强或抵消,从而实现小车的全向移动。可以完成横移、斜方向移动等普通小车无法完成的高难度动作,轮子的转动方向与小车的运动方向关系如下图:
SunMay-202205229588..png

【2路18650电池座】

该款2路18650电池座使用简单,可安装两节18650电池,具有micro和type-c两个充电输入口,输出口有USB接口输出和端口输出两种方式,支持5V/2A和3.3V/1A输出,其中5V输出端口*5,3.3V端口输出*5,USB输出*1(5V)。模块具有过充和过放保护,能够保护18650电池,有效增加18650电池的使用寿命。

电池座上的拨码开关分为HOLD档和NOMAL档,当使用NOMAL档时,输出电流过低会自动关机,当使用HOLD档不会自动关机,会持续输出直到达到过放保护时才会关机。

其结合18650电池方便用户对微型设备的供电,可以用于户外设备供电和作为智能小车的移动电源使用。

SunMay-202205224915..png


【程序代码】




  1. # -*- coding: utf-8 -*-
  2. import time
  3. import cv2
  4. import numpy as np
  5. from pinpong.board import Board
  6. from microbit_motor import Microbit_Motor #导入Microbit_Motor库
  7. import siot
  8. from pinpong.extension.unihiker import *

  9. from unihiker import GUI
  10. u_gui=GUI()
  11. xianshi=u_gui.draw_text(text="开始",x=50,y=100,font_size=50, color="#0000FF")
  12. # 事件回调函数
  13. def on_message_callback(client, userdata, msg):
  14.   
  15.   if (msg.payload.decode("utf-8")  == 'G'):
  16.       forward(200)
  17.       xianshi.config(text="前进")
  18.   if (msg.payload.decode("utf-8")== 'S'):
  19.       stop()
  20.       xianshi.config(text="停止")   
  21.       
  22.   if (msg.payload.decode("utf-8") == 'B'):
  23.       back(200)
  24.       xianshi.config(text="后退")  
  25.       
  26.   if (msg.payload.decode("utf-8") == 'L'):
  27.       left(200)
  28.       xianshi.config(text="向左")  
  29.       
  30.   if (msg.payload.decode("utf-8") == 'R'):
  31.       right(200)
  32.       xianshi.config(text="向右")
  33.       

  34. siot.init(client_id="siot_192",server="192.168.31.25",port=1883,user="siot",password="dfrobot")
  35. siot.connect()
  36. siot.loop()
  37. siot.set_callback(on_message_callback)
  38. siot.getsubscribe(topic="car/control")

  39. Board("microbit").begin()
  40. motorbit = Microbit_Motor()
  41. def forward(speed):
  42.   #前进
  43.   #电机有M1,M2,M3,M4, CW代表正转,CCW代表反转,255是速度,范围0-255
  44.   if speed>255:
  45.       speed=255
  46.   motorbit.motor_run(motorbit.M1, motorbit.CW, speed)
  47.   motorbit.motor_run(motorbit.M2, motorbit.CW, speed)
  48.   motorbit.motor_run(motorbit.M3, motorbit.CCW, speed)
  49.   motorbit.motor_run(motorbit.M4, motorbit.CCW, speed)
  50. def back(speed):
  51.   #后退
  52.   #电机有M1,M2,M3,M4, CW代表正转,CCW代表反转,255是速度,范围0-255
  53.   if speed>255:
  54.       speed=255
  55.   motorbit.motor_run(motorbit.M1, motorbit.CCW, speed)
  56.   motorbit.motor_run(motorbit.M2, motorbit.CCW, speed)
  57.   motorbit.motor_run(motorbit.M3, motorbit.CW, speed)
  58.   motorbit.motor_run(motorbit.M4, motorbit.CW, speed)
  59. def left_turn(speed):
  60.   #向左转
  61.   #电机有M1,M2,M3,M4, CW代表正转,CCW代表反转,255是速度,范围0-255
  62.   if speed>255:
  63.       speed=255
  64.   motorbit.motor_run(motorbit.M1, motorbit.CW, speed)
  65.   motorbit.motor_run(motorbit.M2, motorbit.CW, speed)
  66.   motorbit.motor_run(motorbit.M3, motorbit.CW, speed)
  67.   motorbit.motor_run(motorbit.M4, motorbit.CW, speed)
  68. def right_turn(speed):
  69.   #向右转
  70.   #电机有M1,M2,M3,M4, CW代表正转,CCW代表反转,255是速度,范围0-255
  71.   if speed>255:
  72.       speed=255
  73.   motorbit.motor_run(motorbit.M1, motorbit.CCW, speed)
  74.   motorbit.motor_run(motorbit.M2, motorbit.CCW, speed)
  75.   motorbit.motor_run(motorbit.M3, motorbit.CCW, speed)
  76.   motorbit.motor_run(motorbit.M4, motorbit.CCW, speed)
  77. def left(speed):
  78.   #向左
  79.   #电机有M1,M2,M3,M4, CW代表正转,CCW代表反转,255是速度,范围0-255
  80.   if speed>255:
  81.       speed=255
  82.   motorbit.motor_run(motorbit.M1, motorbit.CW, speed)
  83.   motorbit.motor_run(motorbit.M2, motorbit.CCW, speed)
  84.   motorbit.motor_run(motorbit.M3, motorbit.CW, speed)
  85.   motorbit.motor_run(motorbit.M4, motorbit.CCW, speed)
  86. def right(speed):
  87.   #向右
  88.   #电机有M1,M2,M3,M4, CW代表正转,CCW代表反转,255是速度,范围0-255
  89.   if speed>255:
  90.       speed=255
  91.   motorbit.motor_run(motorbit.M1, motorbit.CCW, speed)
  92.   motorbit.motor_run(motorbit.M2, motorbit.CW, speed)
  93.   motorbit.motor_run(motorbit.M3, motorbit.CCW, speed)
  94.   motorbit.motor_run(motorbit.M4, motorbit.CW, speed)
  95. def stop():
  96.   motorbit.motor_stop(motorbit.M1)
  97.   motorbit.motor_stop(motorbit.M2)
  98.   motorbit.motor_stop(motorbit.M3)
  99.   motorbit.motor_stop(motorbit.M4)

  100. def trace_fun():

  101.     while True:
  102.       pass
  103.            


  104. if __name__ == '__main__':
  105.     trace_fun()
复制代码
【Appinventor2】
SunMay-202205226588..png

blocks-20220522_135144.jpg
SunMay-202205228323..png

【演示视频】






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

本版积分规则

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

硬件清单

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

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

mail