STM32版CCD线性摄像头寻线寻迹小车_stm32接ccd
基于STM32F103C8T6的CCD线性摄像头寻线寻迹小车
目录
前言
目前大多数的小车寻线寻迹都是用红外对管寻线,这是比较简单也比较成熟的技术方案,且成本也低。本文将介绍使用CCD线性摄像头寻线寻迹。
一、模块介绍
TSL1401 线性传感器由一个 1×128 的光电二极管阵列、相关的电荷放大电路以及一个内部像素数据保功能组成。内部像素数据保功能可以为所有像素点提供同时积分的开始和停止时间。该阵列由 128 个像素组成,每个像素的感光面积为 3,524.3 平方微米。 像素之间的间隔为 8μm。内部控制逻辑简化了操作,该模块需要串行输入(SI)信号和时钟信号(CLK)。
二、使用说明
1.引脚说明
通过查看数据手册模块的管脚介绍如上
- AO: 信号输出(供单片机进行信号采集读取)
- CLK: 时钟信号
- GND: 地线
- SI: 信号输入(单片机向 CCD 发送指令)
- VDD: 电源(模块引脚标识为 VCC,接单片机逻辑电平,支持 3~5V)
2.其他
CCD 传感器是光学传感器,会受到环境光线的影响;程序中已经运用了动态阈值算法,尽量减小环境光线的影响,但是太暗或者太亮的环境下是不能正常工作的(一般室内正常光线可以运行)。
三、调试过程
在CCD调试助手中可以看出,当CCD摄像头扫描到黑线时,会出现一个凹槽,左右移动,凹槽也移动,脱离黑线凹槽消失。从这条线大概可以看出中值为多少。
通过串口助手打印出的中值结果如下:
四、寻线原理
小车寻线原理是通过 CCD 线性摄像头扫描黑线,摄像头扫描到 128 的像素点,中值为 64,扫描到黑线会得到一个二值化数据,用这个二值化数据减去中值64再除以 2,就得到小车偏离黑线的值(有正有负,如果为正,小车左转,如果为负,小车右转),舵机初始角度的值加上偏差的值就可以控小车沿着黑线跑了(数据是实时获取的,所以小车沿着黑线行驶不会卡方向)。
五、部分代码
1.CCD摄像头相关代码
首先对CCD摄像头初始化所用到的管脚初始化:
void Ccd\_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC\_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PA端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.2 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO\_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化GPIOA.2
作者:普通网友