导航

    • 登录
    • 搜索
    • 版块
    • 产品
    • 教程
    • 论坛
    • 淘宝
    1. 主页
    2. g5ay
    G
    • 举报资料
    • 资料
    • 关注
    • 粉丝
    • 屏蔽
    • 帖子
    • 楼层
    • 最佳
    • 群组

    g5ay

    @g5ay

    0
    声望
    7
    楼层
    599
    资料浏览
    0
    粉丝
    0
    关注
    注册时间 最后登录

    g5ay 关注

    g5ay 发布的帖子

    • 我这个代码运行这 舵机也在供电 舵机他就不动啊 代码也没问题啊 他连初始化的动作都不做啊

      ![1_1716033410840_2.jpg](正在上传 100%) ![0_1716033410840_1.jpg](正在上传 100%)

      import time,sensor,image,math,pyb
      from servo import Servos
      #from pyb import Pin#可有可无
      from machine import I2C, Pin
      
      #摄像头初始化函数
      sensor.reset()
      sensor.set_pixformat(sensor.GRAYSCALE)
      sensor.set_framesize(sensor.VGA) # High Res!
      sensor.set_windowing((80, 640)) #该部分是摄像头分辨率调整,条形码建议640x80或反之
      sensor.skip_frames(30)
      sensor.set_auto_gain(False)  # must turn this off to prevent image washout...
      sensor.set_auto_whitebal(False)  # must turn this off to prevent image washout...
      clock = time.clock()
      
      i2c = I2C(sda=Pin('P5'), scl=Pin('P4'))#pca9685初始化,下面预计为舵机使用iic地址配置
      servo = Servos(i2c, address=0x40, freq=50, min_us=500, max_us=2500, degrees=180)
      
      pin1 = Pin('P1', Pin.IN, Pin.PULL_UP)   ##将P1口作为阈值控制口 OUT_PP PULL_NONE
      key1=0
      
      #所有舵机度数为90度时机械臂与地面垂直
      servo.position(0,90)#初始化舵机位置,从下到上6个舵机
      time.sleep_ms(1000)
      servo.position(1,90)#按支架方向度数减小是向前
      time.sleep_ms(1000)
      servo.position(2,90)#该舵机度数增大是向前
      time.sleep_ms(1000)
      servo.position(3,90)#该舵机度数增大是向前申
      time.sleep_ms(1000)
      servo.position(4,90)#旋转机械爪舵机,一般不用动,90度是水平状态
      servo.position(5,80)#机械爪张合舵机(120度完全闭合,减小度数张开)
      time.sleep_ms(2000)
      
      #按键中断函数
      def callback_PIN1(line):
          global key1#全局变量
          key1=1
          pyb.delay(5)#按键消抖,下面内容为外部中断配置
      extint = pyb.ExtInt(pin1, pyb.ExtInt.IRQ_FALLING, pyb.Pin.PULL_UP, callback_PIN1)
      
      #条形码识别函数(详细可参考星曈官网)
      def barcode_name(code):
          if(code.type() == image.EAN2):
              return "EAN2"
          if(code.type() == image.EAN5):
              return "EAN5"
          if(code.type() == image.EAN8):
              return "EAN8"
          if(code.type() == image.UPCE):
              return "UPCE"
          if(code.type() == image.ISBN10):
              return "ISBN10"
          if(code.type() == image.UPCA):
              return "UPCA"
          if(code.type() == image.EAN13):
              return "EAN13"
          if(code.type() == image.ISBN13):
              return "ISBN13"
          if(code.type() == image.I25):
              return "I25"
          if(code.type() == image.DATABAR):
              return "DATABAR"
          if(code.type() == image.DATABAR_EXP):
              return "DATABAR_EXP"
          if(code.type() == image.CODABAR):
              return "CODABAR"
          if(code.type() == image.CODE39):
              return "CODE39"
          if(code.type() == image.PDF417):
              return "PDF417"
          if(code.type() == image.CODE93):
              return "CODE93"
          if(code.type() == image.CODE128):
              return "CODE128"
      
      #用字典将大中小和左中右位置对应
      barcode_positions = {}
      
      #条形码扫描函数
      def scan_barcode(position_label):
          while True:#死循环,未检测到条形码则一直检测
              clock.tick()
              img = sensor.snapshot()
              codes = img.find_barcodes()
              if codes:#该部分可参考星曈官网示例
                  for code in codes:
                      img.draw_rectangle(code.rect())
                      barcode_type = barcode_name(code)
                      payload = code.payload()
                      barcode_positions[payload] = position_label
                      print("Barcode %s, Payload \"%s\", position %s" % (barcode_type, payload, position_label))
                      return  # Successfully detected a barcode, exit the loop
              else:
                  print("No barcode detected, retrying...")
      
      #扫描右侧函数
      def scan_move_right():
          for pos0 in range(90,80,-2):
              servo.position(0,pos0)
              time.sleep_ms(50)
          time.sleep_ms(500)
      
      #中间扫描函数
      def scan_move_middle():
          for pos1 in range(90,50,-2):
              servo.position(1,pos1)
              time.sleep_ms(50)
          time.sleep_ms(500)
          for pos3 in range(90,160,2):
              servo.position(3,pos3)
              time.sleep_ms(30)
          time.sleep_ms(500)
          for pos2 in range(90,105,2):
              servo.position(2,pos2)
              time.sleep_ms(50)
          time.sleep_ms(500)
      
      #扫描左侧函数
      def scan_move_left():
          for pos0 in range(90,102,2):
              servo.position(0,pos0)#(100度左右适宜,可能略有误查)
              time.sleep_ms(50)
          time.sleep_ms(500)
      
      #扫描后复位到中间
      def scan_move_back():
          for pos0 in range(80,91,2):#扫描完所有条形码后机械臂转回中间
              servo.position(0,pos0)
              time.sleep_ms(50)
          time.sleep_ms(500)
          for pos1 in range(52,90,2):
              servo.position(1,pos1)
              time.sleep_ms(50)
          time.sleep_ms(500)
      #扫描后的抓取函数左中右一次性抓取
      def catch_move(barcode_positions,key):
          if barcode_positions.get(key)=='L':
              for pos0 in range(90,101,2):
                  servo.position(0,pos0)
                  time.sleep_ms(50)
              time.sleep_ms(500)
              for pos1 in range(90,50,-2):
                  servo.position(1,pos1)
                  time.sleep_ms(50)
              time.sleep_ms(500)
              for pos3 in range(90,75,-2):
                  servo.position(3,pos3)
                  time.sleep_ms(50)
              time.sleep_ms(500)
              for pos2 in range(90,150,2):
                  servo.position(2,pos2)
                  time.sleep_ms(50)
              time.sleep_ms(500)
              servo.position(5,110)
              time.sleep_ms(500)
              for pos1 in range(50,90,2):
                  servo.position(1,pos1)
                  time.sleep_ms(50)
              time.sleep_ms(500)
              for pos0 in range(100,160,2):
                  servo.position(0,pos0)
                  time.sleep_ms(50)
              time.sleep_ms(2000)
              #if key1==1 and pin1.value()==0:#按键按下则打开机械爪并旋转复位,否则机械臂不动
                  #servo.position(3,110)#机械爪张开
                  #time.sleep_ms(1000)
                  #servo.position(0,90)
                  #time.sleep_ms(5000)
              #else:
                  #servo.position(0,180)
                  #time.sleep_ms(1000)
          if barcode_positions.get(key)=='M':
              servo.position(0,90)
              time.sleep_ms(500)
              for pos1 in range(90,50,-2):
                  servo.position(1,pos1)
                  time.sleep_ms(50)
              time.sleep_ms(500)
              for pos3 in range(90,75,-2):
                  servo.position(3,pos3)
                  time.sleep_ms(50)
              time.sleep_ms(500)
              for pos2 in range(90,150,2):
                  servo.position(2,pos2)
                  time.sleep_ms(50)
              time.sleep_ms(500)
              servo.position(5,110)
              time.sleep_ms(500)
              for pos1 in range(50,90,2):
                  servo.position(1,pos1)
                  time.sleep_ms(50)
              time.sleep_ms(500)
              for pos0 in range(90,160,2):
                  servo.position(0,pos0)
                  time.sleep_ms(50)
              time.sleep_ms(2000)
      
              #if key1==1 and pin1.value()==0:#按键按下则打开机械爪并旋转复位,否则机械臂不动
                  #servo.position(3,110)#机械爪张开
                  #time.sleep_ms(1000)
                  #servo.position(0,90)
                  #time.sleep_ms(5000)
              #else:
                  #servo.position(0,180)
                  #time.sleep_ms(1000)
          if barcode_positions.get(key)=='R':
              for pos0 in range(90,80,-2):
                  servo.position(0,pos0)
                  time.sleep_ms(50)
              time.sleep_ms(500)
              for pos1 in range(90,50,-2):
                  servo.position(1,pos1)
                  time.sleep_ms(50)
              time.sleep_ms(500)
              for pos3 in range(90,75,-2):
                  servo.position(3,pos3)
                  time.sleep_ms(50)
              time.sleep_ms(500)
              for pos2 in range(90,150,2):
                  servo.position(2,pos2)
                  time.sleep_ms(50)
              time.sleep_ms(500)
              servo.position(5,110)
              time.sleep_ms(500)
              for pos1 in range(50,90,2):
                  servo.position(1,pos1)
                  time.sleep_ms(50)
              time.sleep_ms(500)
              for pos0 in range(80,160,2):
                  servo.position(0,pos0)
                  time.sleep_ms(50)
              time.sleep_ms(2000)
              #if key1==1 and pin1.value()==0:#按键按下则打开机械爪并旋转复位,否则机械臂不动
                  #servo.position(3,110)#机械爪张开
                  #time.sleep_ms(1000)
                  #servo.position(0,90)
                  #time.sleep_ms(5000)
              #else:
                  #servo.position(0,180)
                  #time.sleep_ms(1000)
      #######################################################################
      #以下为本次抓取程序,上述为各部分函数
      
      #检测中间物体的条形码
      scan_move_middle()
      time.sleep_ms(500)
      scan_barcode("M")
      #向左移动
      scan_move_left()
      time.sleep_ms(500)
      #左边识别条形码
      scan_barcode("L")
      #向右移动
      #右边识别条形码
      scan_move_right()
      scan_barcode("R")
      time.sleep_ms(500)
      scan_move_back()
      time.sleep_ms(500)
      #以下为抓取物料顺序,更改引号内内容即可
      catch_move(barcode_positions,"middle")
      if key1==1 and pin1.value()==0:#按键按下则打开机械爪并旋转复位,否则机械臂不动
          servo.position(5,80)#机械爪张开
          time.sleep_ms(1000)
          for i in range(160,90,-2):
              servo.position(0,i)
              time.sleep_ms(50)
          time.sleep_ms(500)
      catch_move(barcode_positions,"small")
      if key1==1 and pin1.value()==0:#按键按下则打开机械爪并旋转复位,否则机械臂不动
          servo.position(5,80)#机械爪张开
          time.sleep_ms(1000)
          for i in range(160,90,-2):
              servo.position(0,i)
              time.sleep_ms(50)
          time.sleep_ms(500)
      catch_move(barcode_positions,"big")
      if key1==1 and pin1.value()==0:#按键按下则打开机械爪并旋转复位,否则机械臂不动
          servo.position(5,80)#机械爪张开
          time.sleep_ms(1000)
          for i in range(160,90,-2):
              servo.position(0,i)
              time.sleep_ms(50)
          time.sleep_ms(500)
      #这样大中小就和方位对应起来了
      #比如定义一个moveto(L/M/R)ifL左移,ifR右移,if不动
      #机械臂移动到中方块处moveto(barcode_positions["middle"])然后拿走
      #回到初始位置
      #移到小方块处moveto(barcode_positions["small"])拿走
      #回到初始位置
      #移到大方块处moveto(barcode_positions["big"])拿走
      #回到初始位置
      
      ![0_1716033374049_IMG_20240518_195556.jpg](正在上传 100%) 
      
      发布在 OpenMV Cam
      G
      g5ay
    • 为什么我的舵机没反应啊 用的例程 线接的也是对的 舵机也是5V就能供的起来的 就是没反应

      import time
      from servo import Servos
      from machine import I2C, Pin

      i2c = I2C(sda=Pin('P5'), scl=Pin('P4'))
      servo = Servos(i2c, address=0x40, freq=50, min_us=500, max_us=2500, degrees=180)

      while True:
      servo.position(0, 0)
      time.sleep_ms(500)
      servo.position(0, 180)
      time.sleep_ms(500)

      发布在 OpenMV Cam
      G
      g5ay
    • RE: 为什么 我是别不到条形码

      0_1713232075609_516d50bf-0428-4742-9f50-ee02bf089375-image.png
      代码是例程的 而且 三个条形码放在一起 只能识别到一个

      发布在 OpenMV Cam
      G
      g5ay
    • 为什么 我是别不到条形码

      0_1713148778767_d7d87e0b-adea-48e2-b1c6-f3fa449efe42-image.png

      发布在 OpenMV Cam
      G
      g5ay
    • 为什么例程也没有模型啊 我已经升级固件了

      0_1712468253736_a3328520-9e46-49c2-bd9d-21c028361b9f-)3@Z~T43508928GE){9(RBD.png 为什么例程也没有模型啊 我已经升级固件了

      发布在 OpenMV Cam
      G
      g5ay