用单片机做了个倒车后视镜下翻功能
上几个月车友聚会聊天时,有一朋友提到见过人家高档的车,挂倒档时后视镜会自动下翻一定的角度,方便看到车轮附近的障碍物,当退出倒档时,后视镜也会自行上翻回正常的行车视线位置,感觉这个功能很高大上,问我能不能制作一个出来玩玩。当时想了一下,感觉应该不难做。后来由于工作较忙,就忘了这回事了。近段时间朋友又再问这事,刚好这段时间是生意的淡季,比较空闲,于是决定做个出来玩玩看。先确定了一下大体的设计思路,感觉还是用单片机做会比用模拟电路做要可靠点,主要是硬件线路简单,各种功能出较易写出来。由于我的车是自动档的,每次停车时挂P档都要经过R档,所以R档要做一个检测,只要在R档的位置达到1秒或以上时,才触发视镜下翻功能。然后当挂R档超过30秒后,后视镜复位,这时应该是处于长距离倒车状态。还有有时泊车时需要不断地前进后退,所以一但触发了视镜下翻功能后,在5秒内即便退出了R档,视镜依然保持下翻状态。倒档时,后视镜下翻1秒,复位时侧上翻1秒。各种的时间状态只是初步决定,以后可以再根据实际情况作修改,反正也方便,在程序中改变一下延时的时间即可。另外我自己的使用上,倒车时只下翻右后视镜侧可(当然左右后视镜同时下翻也是很容易办到)。
然后就是硬件上的测量,包括电压变化,控制方式等。把后视镜控制器拆下。由于手头上没有这个控制器的线路图跟后视镜控制的线路图,所以只能拆解测量了。
这时发现居然是6触点的,原本以为四个方向就四个触点而已……
还好所有的都是物理触点,并没有其它的晶休管控制电路,这对测量来说也是一个好消息。重新组合好控制器,然后把控制方向打到右,一手按住上,然后用万用表测量背面的针脚看哪组会相通。同样方法按住下,测量针脚哪组相通。下图的就是控制器的插头,最后测出从左到右,第二根跟第五根线就是右视镜垂直电机的接线,这个电机是直流有刷小电机,通过改变电流的方向改变转向,从而使到视镜上翻或下翻。
单片机的供电接到车内常电的保险丝上(我现在是接到故障诊断保险丝上),倒档信号从倒档继电器上获取(这个信号是当锁匙开关到ON时,倒档时有12V电压,其它档位时电压为0V)。线路图并不复杂,但要驱动电机,单片机自身的功率不足,所以采用单片机推动ULN2003(功率放大IC),ULN2003再推动继电器,继电器完成电平转换接到后视镜垂直控制电机上。单片机依旧选用15F104W,7805是5V的三端稳压管,提供5V的电源给单片机工作。
继电器用双触点的,下图是触点控制接线图,当需要下翻后视镜时,控制右边继电器吸合,输出端为左正右负。当需要上翻时,控制两个继电器吸合,输出端侧为左负右正。
硬件实物花了点时间,由于手头上的零件有限,而中间出了点小差错,还好最后都是做出来了。
最后接到车上,都能按照设定的程序工作了。 本帖最后由 我的电脑! 于 2015-8-6 19:10 编辑
silverdj 发表于 2015-8-6 16:36 static/image/common/back.gif
强悍! 单片机 写 怎么搞
硬件上要买个程序写入器,不贵。
然后按写入原理由接好线(其实就四根线,电源两根,数据线两根)
最后就是用STC-ISP软件把程序写入到单片机内。STC-ISP软件可以在STC单片机的主页 上下载到,免费的。
一个滤波电容也没有啊。车上干扰很厉害,建议做一定的退耦,也防止7805自激 yrxinxin 发表于 2015-8-5 20:05 static/image/common/back.gif
如何保证倒车完毕后,后视镜翻回到原来的角度呢?
倒档时后视镜下翻1秒,那回复时就上翻1秒。实际上有的车友的后视镜马达可能有卡济,所以有可能出现下翻跟上翻回复角度的时间不一定,这个可以通过调整上翻的延时时间来匹配。但我的车马达较好,下翻的时间跟上翻的时间一样,所以就不用调整了。 :( :( ....居然没有找到视频的连接按钮,想上个效果视频也不行了。给个源程序吧:
#include<reg52.h>
#include<intrins.h>
sfr P3M1=0xb1;// P3口输出功能地址
sfr P3M0=0xb2;//详细在单片机手册中有注明
sbit ss=P3^2; // 单片机P3.2口状态,即倒档信号输入端
sbit j2=P3^5; //J2继电器控制口
sbit j1=P3^4; // J1继电器控制口
sbit io=P3^3; //用于检测的端口
unsigned char t,flag;//flag标志位,程序使后视镜下翻时置1,复位时置0
void delay1(void) //短时间延时 大约是4个机器周期的时间
{
_nop_();
_nop_();
_nop_();
_nop_();
}
void delay(unsigned int ti) //经典的延时函数
{
unsigned int a; //由于15F104W单片机的运算速度
unsigned char b; //比传统的51单片机快近10多倍,所以
for(a=ti;a>0;a--) //输入的数值也要相应该增大10倍以上
for(b=110;b>0;b--);
}
void xia(void) //控制倒后镜下翻功能
{
j1=1; //把P3.2脚输出高电平,驱动ULN2003
delay(25000); //再通过ULN2003驱动J1继电器使它吸合
j1=0; //延时大约1.5秒后,P3.2脚输出低电平,J1继电器释放
}
void shang(void) //控制倒后镜上翻功能
{
j2=1; //先把J2继电器吸合,实现电流方向转换
delay(500); //通过一个短的延时后,再把J1继电器接通
j1=1; //J1继电器接通后,倒后镜的垂直控制电机
delay(25000); //得电工作。同样延时1.5秒后,断开J1 J2断电器
j1=0;
delay(500);
j2=0;
}
void chuli(void) interrupt 0// 检测倒档处理功能
{ // 采用中断检测功能,无论是进入倒档,还是退出倒档,都会激活本功能模块
unsigned char a; //即当P3.2口出现电压跳变时,进入此功能
EX0=0; // 进入此功能后,EX=0先把外部中断功能关闭,以免产生中断重入
io=ss; //将P3.2口的状态送给检测口
if(io==1&&flag==0) // 如果P3.2口为高电平(即倒档状态),且标志位为0
{
delay(15000); //先延时1秒左右,一来防抖动,二来避开从N到P档时经过R档时的触发
io=ss;
delay1();
if(io==1) //若经过1秒后,P3.2口仍为高电平(即在倒档状态),可确定此时在倒车
{
xia(); // 执行后视镜下翻功能
flag=1; // 置标志位为1
t=30; // t是长时间倒车时间常数。这里设定约为30秒,若30秒还在倒车状态,即
} // 此时为长距离倒车,后视镜要上翻回正常的位置,实现这个功能在主程序里面
}
if(io==0&&flag==1) // 如果P3.2口为低电平(退出倒档状态),且标志位为1
{ // 先进行约5秒的延时,这里是预防有时在泊车时,需要不断在前进与后退之间
for(a=10;a>0;a--) // 做切换,所以在倒档退出的5秒内,后视镜依然保持下翻的状态。
delay(10000);
io=ss;
delay1();
if(io==0) // 超过5秒后,若P3.2口依旧为低电平,
{
shang(); // 这时执行后镜上翻功能
flag=0; // 同时置标志位为0
}
}
EX0=1; // 重新打开外部中断功能
}
main() //主程序
{
ss=1;
j1=0; //单片机上凳保?鱅O端口默认为高电平的,
j2=0;
io=0;
P3M0=0x30; //把P3.5 P3.4端口设为强推挽输出,输入高电平时就可以直接推动ULN2003
flag=0;
delay(25000);
IT0=0; //下面三行是打开外部中断设置命令
EX0=1;
EA=1;
while(1)
{
if(flag==1) //若标志位为1,则此时后视镜是处于下翻状态
{
while(t>0) // 延时约30秒
{
delay(18000);
t--;
}
if(flag==1) //若超过30秒后,后视镜还是处于下翻状态,
{ //判断为处于长距离倒车
shang(); //后视镜上翻复位,恢复原来视线
flag=0; //同时置标志位为0,可以避免一会退出倒档时,
} //再重复印执行视镜上翻功能
}
PCON=0x2; //进入停机模式,降低功耗
delay1();
}
} 本帖最后由 rocky123 于 2015-8-3 06:53 编辑
这个有用,收藏了。倒车继电器在什么地方 收藏了 很不错的创意 用单片机技术解决日常生活中所遇到的问题,楼主是个有心人,很好的创意! 这个很不错,LZ连源程序都分享出来了 rocky123 发表于 2015-8-3 06:52 static/image/common/back.gif
这个有用,收藏了。倒车继电器在什么地方
在车内的保险里面有的了。自动档的车一般就用倒档继电器,如果是手动档的,那一般是倒档保险丝。
我的电脑! 发表于 2015-8-3 18:42 static/image/common/back.gif
在车内的保险里面有的了。自动档的车一般就用倒档继电器,如果是手动档的,那一般是倒档保险丝。
谢谢!车型不一样,到时候找找看 ChrisLove 发表于 2015-8-3 08:07 static/image/common/back.gif
一个滤波电容也没有啊。车上干扰很厉害,建议做一定的退耦,也防止7805自激
对的,当时就赶着做出来,并没有考虑好这个事情,加上退藕肯定可以更加稳定。好消息是这个家伙装车上已有半个月了,还好一直能稳定地工作着…… ntwhq 发表于 2015-8-3 09:01 static/image/common/back.gif
用单片机技术解决日常生活中所遇到的问题,楼主是个有心人,很好的创意!
谢谢鼓励!!貌似开放了视频的权限了,我上个试试。
视频中滴一声就是挂到倒档,小屏处是倒车影像,当小屏熄灭就是退出倒车档了。由于手机的摄像头有广角功能,所以后视镜下翻角度并不是太明显。
http://player.youku.com/player.php/sid/XMTI4NDM5MjUxNg==/v.swf 厉害,做的也漂亮 如何保证倒车完毕后,后视镜翻回到原来的角度呢? 我的电脑! 发表于 2015-8-5 20:22 static/image/common/back.gif
倒档时后视镜下翻1秒,那回复时就上翻1秒。实际上有的车友的后视镜马达可能有卡济,所以有可能出现下翻跟 ...
高手在民间!强烈建议给楼主加精!如此原创还很实用,还分享给广大坛友的无私的人,我为你点赞!!!!!!