2018-05-0118:53:50

先上图:

再来视频:

http://v.youku.com/v_show/id_XMzU3NzAwNzMyNA==.html?spm=a2hzp.8244740.0.0

  1. #coding=utf-8
  2. from pyfirmata import Arduino, util
  3. import time
  4. import cv2
  5. import numpy as np
  6. import serial
  7. ser = serial.Serial()
  8. ser.baudrate = 9600 # 设置波特率
  9. ser.port = 'COM6' # 端口是COM3
  10. print(ser)
  11. ser.open() # 打开串口
  12. print(ser.is_open) # 检验串口是否打开
  13. # board = Arduino('COM3')
  14. """
  15. def duoji ():
  16. board.servo_config(13, 0, 255, 20)
  17. print("ceshi")
  18. time.sleep(0.2)
  19. board.servo_config(13, 0, 255, 255)
  20. time.sleep(0.2)
  21. def arduino ():
  22. board.digital[13].write(0) # 向io口13写入0
  23. time.sleep(0.1)
  24. board.digital[13].write(1) # 向io口13写入1
  25. time.sleep(0.1)
  26. board.analog [13].write(100)
  27. """
  28. def detect_circle_demo ():
  29. video_capture = cv2.VideoCapture(0)
  30. while True:
  31. if not video_capture.isOpened():
  32. print('Unable to load camera.')
  33. break
  34. ret, img = video_capture.read()
  35. #img = cv2.pyrMeanShiftFiltering(img, 10, 25)
  36. gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 灰度图像
  37. circles1 = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT , 1, 100, param1=100, param2=100, minRadius=50,maxRadius=200)
  38. # cv.HoughCircles(cimage, cv.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0, maxRadius=0)
  39. try: # 如果上一步没有检测到。执行try内容,就会报错。可以修改尝试看下。
  40. circles = circles1[0, :, :] # 提取为二维
  41. except TypeError:
  42. print('未发现圆形物体!!')
  43. else:
  44. circles = np.uint16(np.around(circles)) # 四舍五入
  45. for i in circles[:]:
  46. cv2.circle(img, (i[0], i[1]), i[2], color=[0, 0, 0], thickness=2) # 画圆
  47. cv2.circle(img, (i[0], i[1]), 2, color=[0, 255, 0], thickness=2) # 画圆心
  48. cv2.putText(img, "center", (i[0] - 20, i[1] - 20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
  49. print(i[0],i[1])
  50. print("检测到圆形物体,开始分离!")
  51. ser.write(b"a")
  52. #print(ser.read(1))
  53. # 输出坐标
  54. # 显示视频
  55. cv2.imshow('Video', img)
  56. cv2.waitKey(10)
  57. detect_circle_demo()
  58.  
  59. """
  60. dp,用来检测圆心的累加器图像的分辨率于输入图像之比的倒数,且此参数允许创建一个比输入图像分辨率低的累加器。上述文字不好理解的话,来看例子吧。例如,如果dp= 1时,累加器和输入图像具有相同的分辨率。如果dp=2,累加器便有输入图像一半那么大的宽度和高度。
  61. minDist,为霍夫变换检测到的圆的圆心之间的最小距离,即让我们的算法能明显区分的两个不同圆之间的最小距离。这个参数如果太小的话,多个相邻的圆可能被错误地检测成了一个重合的圆。反之,这个参数设置太大的话,某些圆就不能被检测出来了。
  62. param1,有默认值100。它是method设置的检测方法的对应的参数。对当前唯一的方法霍夫梯度法,它表示传递给canny边缘检测算子的高阈值,而低阈值为高阈值的一半。
  63. param2,也有默认值100。它是method设置的检测方法的对应的参数。对当前唯一的方法霍夫梯度法,它表示在检测阶段圆心的累加器阈值。它越小的话,就可以检测到更多根本不存在的圆,而它越大的话,能通过检测的圆就更加接近完美的圆形了。
  64. minRadius,默认值0,表示圆半径的最小值。
  65. maxRadius,也有默认值0,表示圆半径的最大值
  66. """

程序的原理是图像识别,并将圆形物体取出来。python发送数据给单片机,舵机执行相关动作。

  1. #include<Stepper.h>
  2. #include <Servo.h>
  3. Servo myservo;
  4. Servo myservo1;
  5. char serial_line[] ="";
  6. int serial_line_length=;
  7. char val='/';
  8. #define STEPS 100
  9. Stepper stepper(STEPS, , , , );
  10. int pos;
  11. int pos1;
  12. int i ;
  13. void setup()
  14. {
  15. Serial.begin();
  16. pinMode(,OUTPUT);
  17. digitalWrite(,HIGH);
  18. myservo.attach();
  19. myservo1.attach();
  20. myservo.write();
  21. myservo1.write();
  22. stepper.setSpeed();
  23.  
  24. }
  25. void zhixing()
  26. {
  27. myservo.write();//右
  28. delay();
  29. digitalWrite(,LOW);//吸
  30. for (pos = ;pos>=;pos-=)
  31. {
  32. myservo1.write(pos);
  33. delay();
  34. }
  35. myservo1.write();
  36. delay();
  37. myservo.write();
  38.  
  39. /////归位
  40. delay();
  41. digitalWrite(,HIGH);
  42.  
  43. }
  44. void loop()
  45. {
  46. stepper.step(-);
  47. Serial.println("go");
  48. val=Serial.read();
  49. if (val == 'a')//检测到圆形物体
  50. {
  51.  
  52. if (i == )
  53. {
  54. Serial.println('');
  55. zhixing();
  56. i = ;
  57. }
  58. else i++ ; //Serial.println(i);
  59.  
  60. }
  61.  
  62. }

两者相互配合,实现物体分拣。

python与arduino串口通讯对接opencv实现智能物品分拣的更多相关文章

  1. Arduino 串口通讯参考笔记 - Serial 类库及相关函数介绍

    声明: 本ID发布的所有文章及随笔均为原创,可随意转载,单转载文章必须注明作者 aiyauto 及包含原文出处地址 http://www.cnblogs.com/aiyauto/p/7071712.h ...

  2. win10上使用php与python实现与arduino串口通信

    注意: php 需要php7,安装及开启php_dio.dll com口按照实际的进行设置,如果不知道可以打开arduino编辑器进行查看 可以与用户实现命令行交互,但是效率过慢,不清楚如何优化,使用 ...

  3. 手机与Arduino蓝牙串口通讯实验及完整例程

    安卓手机与Arduino之间采用蓝牙串口通讯,是很多智能装置和互动装置常用的控制方法,简单而有效,无需网络环境,很实用的技术. 实验采用Arduino UNO板,加了一块1602LCD屏做显示(因为只 ...

  4. Python 串口通讯

    摘要: pyserial module: https://github.com/tbusf/pyserial Python使用pyserial进行串口通信:http://blog.csdn.net/l ...

  5. python实现串口通讯小程序(GUI界面)

    python实现串口通讯小程序(GUI界面) 使用python实现串口通讯需要使用python的pyserial库来实现,这个库在安装python的时候没有自动进行安装,需要自己进行安装. 1.安装p ...

  6. 用电脑Python控制Arduino

    python指令: import serial #导入串口通讯库 import time ser=serial.Serial("com4",9600,timeout=1) demo ...

  7. modbus串口通讯C#

    简介 公司给的一个小任务,这篇文章进行详细讲解 题目: modbus串口通讯 主要内容如下: 1.实现使用modbus通讯规约的测试软件: 2.具有通信超时功能: 3.分主站从站,并能编辑报文.生成报 ...

  8. Winform 串口通讯之读卡器

    老板给我的第一个硬件就是一个读卡器, 说让我做一下试试,于是从网上查了查就写了出来,相当的简单. 但是后来还有一个地磅的串口通讯,我整整搞了一天. 在窗体类的构造函数中写入 Form.CheckFor ...

  9. 【单片机入门】(三)应用层软件开发的单片机学习之路-----UART串口通讯和c#交互

    引言 在第一章博客中,我们讲了Arduino对Esp32的一个环境配置,以及了解到了常用的一个总线通讯协议,其中有SPI,IIC,UART等,今天我为大家带来UART串口通讯和c#串口进行通讯的一个案 ...

随机推荐

  1. Android GIS开发系列-- 入门季(13)Gdal简单写个shp文件

    Gdal是用来读写栅格与矢量数据的,在Gdal官网,可以下载相关的资源进行平台的编译.其实Arcgis底层也是用Gdal来读取shp文件的,那在Android中可以直接读写shp文件吗,是可以的.这里 ...

  2. zip4j加密压缩、解压缩文件、文件夹

    原文:http://blog.csdn.net/k21325/article/details/54376188 1.首先,引用到zip4j的第三方类库,感谢作者的无私奉献,官网打不开,这里就不贴了,下 ...

  3. CentOS 6.9正式版下载

      2017-04-07 ,CentOS 6.9正式发布,带来了诸多改进,具体如下. CentOS 6.9重大改进: — 不再有LiveCD,用户可将LiveDVD复制到USB key,在需要时使用: ...

  4. windows 7 忘記密碼,用“带命令行的安全模式”

    net user administrator /active:yes net user tester /add net localgroup administrators tester /add

  5. 查看yarn当前执行任务列表

    Author: kwu 查看yarn当前执行任务列表.可使用例如以下命令查看: yarn application -list 如需杀死当前某个作业,使用kill application-id的命令例如 ...

  6. EXISTS 执行顺序 CLR-2-2-引用类型和值类型

    EXISTS 执行顺序   select * from a where a.s_status=1 and exists (select orderid from b on a.orderid=b.or ...

  7. NPOI2.2.0.0实例详解(十)—设置EXCEL单元格【文本格式】 NPOI 单元格 格式设为文本 HSSFDataFormat

    NPOI2.2.0.0实例详解(十)—设置EXCEL单元格[文本格式] 2015年12月10日 09:55:17 阅读数:3150 using System; using System.Collect ...

  8. 6个变态的C语言Hello World程序 之 雷人的程序语言

    以下的六个程序片段主要完毕这些事情: 输出Hello, World 混乱C语言的源码 以下的全部程序都能够在GCC下编译通过,仅仅有最后一个须要动用C++的编译器g++才干编程通过. hello1.c ...

  9. JS 通过选择百度地图地址获取经纬度自动填充到文本框中的方法

    首先要注册百度地图API. 1.登录百度地图开放平台http://lbsyun.baidu.com 注册账号,完善信息,点击网站右上角的“API控制台”,点击,创建应用. 应用类型选择:“浏览器端”, ...

  10. 关于移动平台的viewport

    viewport是用来设置移动平台上的网页宽度,写device-width比较好,不然会和设备上不一样 在使用device-width之后,图片资源最好使用百分比布局,进行自动缩放. 文字大小是一样的 ...