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#串口进行通讯的一个案 ...
随机推荐
- HDU 5074 Hatsune Miku 2014 Asia AnShan Regional Contest dp(水
简单dp #include <stdio.h> #include <cstring> #include <iostream> #include <map> ...
- C#.NET如何判断是否有缺少的using
调试的时候会报错,红色的波浪线表示出错的位置,右击即可找到对应的using
- 省市县三级联动js代码
省市县三级联动菜单,JS全国省市县(区)联动代码,一般可以用于用户注册或分类信息二手交易网站,需要的朋友直接复制代码就可以用了,不过有朋友反馈说缺少某些城市,具体缺少哪个尚不知,请想用的朋友自己补全吧 ...
- HDU1236 排名 题解
Problem Description 今天的上机考试尽管有实时的Ranklist,但上面的排名仅仅是依据完毕的题数排序,没有考虑 每题的分值,所以并非最后的排名.给定录取分数线.请你敲代码找出最后 ...
- 内容可编辑且随内容自增长的div
<!DOCTYPE HTML> <html> <head> <title></title> <meta http-equiv=&quo ...
- VS2010打开2012项目(转载)
原文出处:http://www.cnblogs.com/johnsony/p/Version2012To2010.html vs2012 出来了,但是MS还是一如既往的向上兼容. 废话不多说,直接主题 ...
- 项目实战之poi导出excel
所需jar包 官方下载地址:http://mirrors.hust.edu.cn/apache/poi/release/bin/poi-bin-3.17-20170915.zip 1.前端调用方法: ...
- 获取浏览器弹窗alert、自定义弹窗以及其操作
web自动化测试第10步:获取浏览器弹窗alert.自定义弹窗以及其操作 - CSDN博客 http://blog.csdn.net/ccggaag/article/details/76573857 ...
- 洛谷 P1181,1182 数列分段Section
数列分段Section I 题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入输出格式 输入格 ...
- 推理集 —— death
事故: 自杀: 他杀: 1. 跳楼 头向下死得比较快,没那么痛苦. 脚向下,不会立刻死亡,痛苦至极.死亡原因可能不是跳楼,而是失血过多而死 扑下去, 同头向下. 仰着跌下去,同头向下.. 跳楼最好头先 ...