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实现智能物品分拣的更多相关文章

  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. 在 IIS 中承载 WCF 服务

    本主题概述了创建 Internet 信息服务 (IIS) 中承载的 Windows Communication Foundation (WCF) 服务所需的基本步骤. 本主题假设您熟悉 IIS 且了解 ...

  2. crontab not running

    there are mutliple ways to describle this issue 1. crontab not running 2. crontab not running and no ...

  3. Linux学习系列之LNMP

    LNMP介绍 LNMP是什么 LNMP(Linux-Nginx-MySQL-PHP)网站架构是目前国际流行的Web架构; 这四种软件组合,可以成为一个免费.高效.扩展性强的Web架构; LNMP原理图 ...

  4. NA交换①

    常用的交换设备:     交换机(ASIC)和网桥(Brigde):     交换机的三种转发方式:     直通式(Cut-Through):一旦检测到MAC即转发,速度快但是无法保证准确性:    ...

  5. python批量删除文件

    敲代码測试时总会碰到要删除日志目录下的日志或者删除一些历史文件.每次都会生成,再測试的时候为了查找错误原因方便总是要在測试前删除这些文件.手动删除比較麻烦.所以写一个批量删除脚本 import os ...

  6. WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍

    WPF自学入门(十一)WPF MVVM模式Command命令   在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式 ...

  7. Cocos2d-x学习笔记(12)(CCControlSwitch开关、CCControlSlider滑动条、CCControlButtonbutton)

    CCEditBox.CCControlSwitch.CCControlSlider.CCControlColourPicker.CCControlButton等都是Cocos2d-x 2.x的最新UI ...

  8. 洛谷 P1759 通天之潜水

    P1759 通天之潜水 19通过 65提交 题目提供者lych 标签动态规划洛谷原创 难度普及/提高- 提交该题 讨论 题解 记录 最新讨论 暂时没有讨论 题目背景 直达通天路·小A历险记第三篇 题目 ...

  9. What does jQuery.fn mean?

    n jQuery, the fn property is just an alias to the prototype property. The jQuery identifier (or $) i ...

  10. 控件CListCtr详解

    1.CListCtrl控件 CListCtrl控件在数据库编程中是用得比较多的控件之一,也是Window控件中较难掌握的一个控件.他可以有四显示方式,Report.List.Icon.SmallIco ...