我是如何在2个小时用智能CCD图像检测系统实现一个零件的自动分选项目

项目实例完整代码可以下载Examples:https://pan.baidu.com/s/1YPjR_TPJYLmriXNVnNbgZg 提取码:52ai 

有一种水表的塑料齿轮,是有注塑机大批量生产出来,外观和尺寸基本相似,唯一的区别是零件表面有一个凸起的数字,代表来自不同的模具,现在工厂要求把零件按不同的数字进行分选。技术指标是:检测速度每分钟不少于200个;检测准确率达于99.9%;支持的齿轮种类包含白色、红色、黑色及不同尺寸的多种类型;用户可以比较方便的添加新的型号。其中一种的零件的照片如图:

面对客户这样苛刻的要求,本项目采用的Basler aca1300相机作为图像采集设备,采用同轴光源已保证可以把特征轮廓清晰的呈现,采用康恩士智能CCD图像检测软件作为图像处理平台。主要处理步骤如下(部分步骤省略):

1、首先用对象计数工具识别齿轮零件的位置

2、利用尺寸零件的位置建立坐标,使ROI区域可以跟随零件的位置

3、利用图像运算工具对图像进行剪裁,消除容易特征无关的区域

4、另外增加一个对象计数工具,识别零件上小黑点的位置,作为齿轮零件的角度信息

5、利用几何工具中的两点角度工具得到零件的角度

6、利用图像变换工具,对图像的角度进行校正,使所有图像的角度都校正成黑点朝上的角度。以提高图像识别的准确率和执行速度。

7、创建几何匹配工具,并学习数字部位的形状,自动保存为一个识别模板

8、在完章图像中测试几何匹配的自动识别与定位效果

9、重复步骤7和步骤8,完成其他字符的模板学习

10、添加逻辑运算工具,设定多个几何匹配识别结果的组合逻辑

11、增加显示注释工具,使界面可以实时显示识别结果

12、增加IO输出工具,把不同字符的识别结果分别通过继电器输出1、继电器输出2、继电器输出3、继电器输出4传给PLC。

这样一个零件的自动识别项目就完成了,通过实际测试,根据实际情况再调整部分ROI区域和参数,即可以达到较好的效果。

具体工程完章代码可以在一下链接中下载到:https://pan.baidu.com/s/1YPjR_TPJYLmriXNVnNbgZg 提取码:52ai 

谢谢大家,请多提意见。

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要了解CCD通信系统的基本原理和通信协议。CCD(Charge Coupled Device)是一种集成电路芯片,可以将光信号转化为电信号,被广泛应用于图像传感器中。在CCD通信系统中,数据通过CCD芯片进行传输,通信协议一般采用串行通信。 下面是一个简单的CCD通信系统的verilog代码,包括控制器和CCD芯片的模块。 ```verilog module ccd_controller( input clk, input reset, input start, output reg [7:0] data_out, output reg done ); // 定义状态机的状态 localparam [2:0] IDLE = 3'b000; localparam [2:0] SEND_ADDR = 3'b001; localparam [2:0] SEND_DATA = 3'b010; localparam [2:0] READ_DATA = 3'b011; // 定义状态机的变量 reg [2:0] state; reg [7:0] addr; reg [7:0] data_in; reg [7:0] data_out_reg; reg send_bit; reg read_bit; // 初始化状态机 always @(posedge clk, posedge reset) begin if (reset) begin state <= IDLE; addr <= 8'h00; data_in <= 8'h00; data_out_reg <= 8'h00; send_bit <= 1'b0; read_bit <= 1'b0; done <= 1'b0; end else begin case(state) IDLE: begin if (start) begin state <= SEND_ADDR; end end SEND_ADDR: begin send_bit <= 1'b0; if (send_bit == 1'b0) begin // 发送地址 data_out_reg <= addr; send_bit <= 1'b1; end else begin state <= SEND_DATA; end end SEND_DATA: begin send_bit <= 1'b0; if (send_bit == 1'b0) begin // 发送数据 data_out_reg <= data_in; send_bit <= 1'b1; end else begin state <= READ_DATA; end end READ_DATA: begin read_bit <= 1'b0; if (read_bit == 1'b0) begin // 读取数据 data_out <= CCD_DATA; read_bit <= 1'b1; end else begin done <= 1'b1; state <= IDLE; end end endcase end end // 写入数据 always @(posedge clk) begin if (state == SEND_ADDR) begin addr <= addr + 1; end else if (state == SEND_DATA) begin data_in <= data_in + 1; end end endmodule module ccd( input clk, input reset, input [7:0] data_in, output reg [7:0] data_out ); // 定义CCD芯片的状态 localparam [1:0] IDLE = 2'b00; localparam [1:0] READ = 2'b01; localparam [1:0] WRITE = 2'b10; // 定义CCD芯片的变量 reg [1:0] state; reg [7:0] data_reg; // 初始化CCD芯片 always @(posedge clk, posedge reset) begin if (reset) begin state <= IDLE; data_reg <= 8'h00; data_out <= 8'h00; end else begin case(state) IDLE: begin state <= READ; end READ: begin data_out <= data_reg; state <= WRITE; end WRITE: begin data_reg <= data_in; state <= READ; end endcase end end endmodule ``` 以上代码实现了一个简单的CCD通信系统,其中控制器模块`ccd_controller`负责控制通信协议的发送和接收,CCD芯片模块`ccd`负责转换数据信号。在使用时,可以通过修改地址和数据输入信号来实现不同的数据传输。需要注意的是,以上代码仅供参考,实际应用中还需要根据具体需求进行修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值