python与arduino串口通讯对接opencv实现智能物品分拣
2018-05-0118:53:50
先上图:
再来视频:
http://v.youku.com/v_show/id_XMzU3NzAwNzMyNA==.html?spm=a2hzp.8244740.0.0
- #coding=utf-8
- from pyfirmata import Arduino, util
- import time
- import cv2
- import numpy as np
- import serial
- ser = serial.Serial()
- ser.baudrate = 9600 # 设置波特率
- ser.port = 'COM6' # 端口是COM3
- print(ser)
- ser.open() # 打开串口
- print(ser.is_open) # 检验串口是否打开
- # board = Arduino('COM3')
- """
- def duoji ():
- board.servo_config(13, 0, 255, 20)
- print("ceshi")
- time.sleep(0.2)
- board.servo_config(13, 0, 255, 255)
- time.sleep(0.2)
- def arduino ():
- board.digital[13].write(0) # 向io口13写入0
- time.sleep(0.1)
- board.digital[13].write(1) # 向io口13写入1
- time.sleep(0.1)
- board.analog [13].write(100)
- """
- def detect_circle_demo ():
- video_capture = cv2.VideoCapture(0)
- while True:
- if not video_capture.isOpened():
- print('Unable to load camera.')
- break
- ret, img = video_capture.read()
- #img = cv2.pyrMeanShiftFiltering(img, 10, 25)
- gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 灰度图像
- circles1 = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT , 1, 100, param1=100, param2=100, minRadius=50,maxRadius=200)
- # cv.HoughCircles(cimage, cv.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0, maxRadius=0)
- try: # 如果上一步没有检测到。执行try内容,就会报错。可以修改尝试看下。
- circles = circles1[0, :, :] # 提取为二维
- except TypeError:
- print('未发现圆形物体!!')
- else:
- circles = np.uint16(np.around(circles)) # 四舍五入
- for i in circles[:]:
- cv2.circle(img, (i[0], i[1]), i[2], color=[0, 0, 0], thickness=2) # 画圆
- cv2.circle(img, (i[0], i[1]), 2, color=[0, 255, 0], thickness=2) # 画圆心
- cv2.putText(img, "center", (i[0] - 20, i[1] - 20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
- print(i[0],i[1])
- print("检测到圆形物体,开始分离!")
- ser.write(b"a")
- #print(ser.read(1))
- # 输出坐标
- # 显示视频
- cv2.imshow('Video', img)
- cv2.waitKey(10)
- detect_circle_demo()
- """
- dp,用来检测圆心的累加器图像的分辨率于输入图像之比的倒数,且此参数允许创建一个比输入图像分辨率低的累加器。上述文字不好理解的话,来看例子吧。例如,如果dp= 1时,累加器和输入图像具有相同的分辨率。如果dp=2,累加器便有输入图像一半那么大的宽度和高度。
- minDist,为霍夫变换检测到的圆的圆心之间的最小距离,即让我们的算法能明显区分的两个不同圆之间的最小距离。这个参数如果太小的话,多个相邻的圆可能被错误地检测成了一个重合的圆。反之,这个参数设置太大的话,某些圆就不能被检测出来了。
- param1,有默认值100。它是method设置的检测方法的对应的参数。对当前唯一的方法霍夫梯度法,它表示传递给canny边缘检测算子的高阈值,而低阈值为高阈值的一半。
- param2,也有默认值100。它是method设置的检测方法的对应的参数。对当前唯一的方法霍夫梯度法,它表示在检测阶段圆心的累加器阈值。它越小的话,就可以检测到更多根本不存在的圆,而它越大的话,能通过检测的圆就更加接近完美的圆形了。
- minRadius,默认值0,表示圆半径的最小值。
- maxRadius,也有默认值0,表示圆半径的最大值
- """
程序的原理是图像识别,并将圆形物体取出来。python发送数据给单片机,舵机执行相关动作。
- #include<Stepper.h>
- #include <Servo.h>
- Servo myservo;
- Servo myservo1;
- char serial_line[] ="";
- int serial_line_length=;
- char val='/';
- #define STEPS 100
- Stepper stepper(STEPS, , , , );
- int pos;
- int pos1;
- int i ;
- void setup()
- {
- Serial.begin();
- pinMode(,OUTPUT);
- digitalWrite(,HIGH);
- myservo.attach();
- myservo1.attach();
- myservo.write();
- myservo1.write();
- stepper.setSpeed();
- }
- void zhixing()
- {
- myservo.write();//右
- delay();
- digitalWrite(,LOW);//吸
- for (pos = ;pos>=;pos-=)
- {
- myservo1.write(pos);
- delay();
- }
- myservo1.write();
- delay();
- myservo.write();
- /////归位
- delay();
- digitalWrite(,HIGH);
- }
- void loop()
- {
- stepper.step(-);
- Serial.println("go");
- val=Serial.read();
- if (val == 'a')//检测到圆形物体
- {
- if (i == )
- {
- Serial.println('');
- zhixing();
- i = ;
- }
- else i++ ; //Serial.println(i);
- }
- }
两者相互配合,实现物体分拣。
python与arduino串口通讯对接opencv实现智能物品分拣的更多相关文章
- Arduino 串口通讯参考笔记 - Serial 类库及相关函数介绍
声明: 本ID发布的所有文章及随笔均为原创,可随意转载,单转载文章必须注明作者 aiyauto 及包含原文出处地址 http://www.cnblogs.com/aiyauto/p/7071712.h ...
- win10上使用php与python实现与arduino串口通信
注意: php 需要php7,安装及开启php_dio.dll com口按照实际的进行设置,如果不知道可以打开arduino编辑器进行查看 可以与用户实现命令行交互,但是效率过慢,不清楚如何优化,使用 ...
- 手机与Arduino蓝牙串口通讯实验及完整例程
安卓手机与Arduino之间采用蓝牙串口通讯,是很多智能装置和互动装置常用的控制方法,简单而有效,无需网络环境,很实用的技术. 实验采用Arduino UNO板,加了一块1602LCD屏做显示(因为只 ...
- Python 串口通讯
摘要: pyserial module: https://github.com/tbusf/pyserial Python使用pyserial进行串口通信:http://blog.csdn.net/l ...
- python实现串口通讯小程序(GUI界面)
python实现串口通讯小程序(GUI界面) 使用python实现串口通讯需要使用python的pyserial库来实现,这个库在安装python的时候没有自动进行安装,需要自己进行安装. 1.安装p ...
- 用电脑Python控制Arduino
python指令: import serial #导入串口通讯库 import time ser=serial.Serial("com4",9600,timeout=1) demo ...
- modbus串口通讯C#
简介 公司给的一个小任务,这篇文章进行详细讲解 题目: modbus串口通讯 主要内容如下: 1.实现使用modbus通讯规约的测试软件: 2.具有通信超时功能: 3.分主站从站,并能编辑报文.生成报 ...
- Winform 串口通讯之读卡器
老板给我的第一个硬件就是一个读卡器, 说让我做一下试试,于是从网上查了查就写了出来,相当的简单. 但是后来还有一个地磅的串口通讯,我整整搞了一天. 在窗体类的构造函数中写入 Form.CheckFor ...
- 【单片机入门】(三)应用层软件开发的单片机学习之路-----UART串口通讯和c#交互
引言 在第一章博客中,我们讲了Arduino对Esp32的一个环境配置,以及了解到了常用的一个总线通讯协议,其中有SPI,IIC,UART等,今天我为大家带来UART串口通讯和c#串口进行通讯的一个案 ...
随机推荐
- Android GIS开发系列-- 入门季(13)Gdal简单写个shp文件
Gdal是用来读写栅格与矢量数据的,在Gdal官网,可以下载相关的资源进行平台的编译.其实Arcgis底层也是用Gdal来读取shp文件的,那在Android中可以直接读写shp文件吗,是可以的.这里 ...
- zip4j加密压缩、解压缩文件、文件夹
原文:http://blog.csdn.net/k21325/article/details/54376188 1.首先,引用到zip4j的第三方类库,感谢作者的无私奉献,官网打不开,这里就不贴了,下 ...
- CentOS 6.9正式版下载
2017-04-07 ,CentOS 6.9正式发布,带来了诸多改进,具体如下. CentOS 6.9重大改进: — 不再有LiveCD,用户可将LiveDVD复制到USB key,在需要时使用: ...
- windows 7 忘記密碼,用“带命令行的安全模式”
net user administrator /active:yes net user tester /add net localgroup administrators tester /add
- 查看yarn当前执行任务列表
Author: kwu 查看yarn当前执行任务列表.可使用例如以下命令查看: yarn application -list 如需杀死当前某个作业,使用kill application-id的命令例如 ...
- EXISTS 执行顺序 CLR-2-2-引用类型和值类型
EXISTS 执行顺序 select * from a where a.s_status=1 and exists (select orderid from b on a.orderid=b.or ...
- NPOI2.2.0.0实例详解(十)—设置EXCEL单元格【文本格式】 NPOI 单元格 格式设为文本 HSSFDataFormat
NPOI2.2.0.0实例详解(十)—设置EXCEL单元格[文本格式] 2015年12月10日 09:55:17 阅读数:3150 using System; using System.Collect ...
- 6个变态的C语言Hello World程序 之 雷人的程序语言
以下的六个程序片段主要完毕这些事情: 输出Hello, World 混乱C语言的源码 以下的全部程序都能够在GCC下编译通过,仅仅有最后一个须要动用C++的编译器g++才干编程通过. hello1.c ...
- JS 通过选择百度地图地址获取经纬度自动填充到文本框中的方法
首先要注册百度地图API. 1.登录百度地图开放平台http://lbsyun.baidu.com 注册账号,完善信息,点击网站右上角的“API控制台”,点击,创建应用. 应用类型选择:“浏览器端”, ...
- 关于移动平台的viewport
viewport是用来设置移动平台上的网页宽度,写device-width比较好,不然会和设备上不一样 在使用device-width之后,图片资源最好使用百分比布局,进行自动缩放. 文字大小是一样的 ...