矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 33317|回复: 117

用单片机做了个倒车后视镜下翻功能

  [复制链接]
     
发表于 2015-8-1 22:50:58 | 显示全部楼层 |阅读模式
     上几个月车友聚会聊天时,有一朋友提到见过人家高档的车,挂倒档时后视镜会自动下翻一定的角度,方便看到车轮附近的障碍物,当退出倒档时,后视镜也会自行上翻回正常的行车视线位置,感觉这个功能很高大上,问我能不能制作一个出来玩玩。当时想了一下,感觉应该不难做。
     后来由于工作较忙,就忘了这回事了。近段时间朋友又再问这事,刚好这段时间是生意的淡季,比较空闲,于是决定做个出来玩玩看。先确定了一下大体的设计思路,感觉还是用单片机做会比用模拟电路做要可靠点,主要是硬件线路简单,各种功能出较易写出来。由于我的车是自动档的,每次停车时挂P档都要经过R档,所以R档要做一个检测,只要在R档的位置达到1秒或以上时,才触发视镜下翻功能。然后当挂R档超过30秒后,后视镜复位,这时应该是处于长距离倒车状态。还有有时泊车时需要不断地前进后退,所以一但触发了视镜下翻功能后,在5秒内即便退出了R档,视镜依然保持下翻状态。倒档时,后视镜下翻1秒,复位时侧上翻1秒。各种的时间状态只是初步决定,以后可以再根据实际情况作修改,反正也方便,在程序中改变一下延时的时间即可。另外我自己的使用上,倒车时只下翻右后视镜侧可(当然左右后视镜同时下翻也是很容易办到)。
       然后就是硬件上的测量,包括电压变化,控制方式等。把后视镜控制器拆下。由于手头上没有这个控制器的线路图跟后视镜控制的线路图,所以只能拆解测量了。

2.jpg

1.jpg

     这时发现居然是6触点的,原本以为四个方向就四个触点而已……

3.jpg

      还好所有的都是物理触点,并没有其它的晶休管控制电路,这对测量来说也是一个好消息。重新组合好控制器,然后把控制方向打到右,一手按住上,然后用万用表测量背面的针脚看哪组会相通。同样方法按住下,测量针脚哪组相通。下图的就是控制器的插头,最后测出从左到右,第二根跟第五根线就是右视镜垂直电机的接线,这个电机是直流有刷小电机,通过改变电流的方向改变转向,从而使到视镜上翻或下翻。

4.jpg

单片机的供电接到车内常电的保险丝上(我现在是接到故障诊断保险丝上),倒档信号从倒档继电器上获取(这个信号是当锁匙开关到ON时,倒档时有12V电压,其它档位时电压为0V)。  线路图并不复杂,但要驱动电机,单片机自身的功率不足,所以采用单片机推动ULN2003(功率放大IC),ULN2003再推动继电器,继电器完成电平转换接到后视镜垂直控制电机上。单片机依旧选用15F104W,7805是5V的三端稳压管,提供5V的电源给单片机工作。

6.jpg

   继电器用双触点的,下图是触点控制接线图,当需要下翻后视镜时,控制右边继电器吸合,输出端为左正右负。当需要上翻时,控制两个继电器吸合,输出端侧为左负右正。

7.jpg


  硬件实物花了点时间,由于手头上的零件有限,而中间出了点小差错,还好最后都是做出来了。

8.jpg

     最后接到车上,都能按照设定的程序工作了。
5.jpg

评分

2

查看全部评分

     
 楼主| 发表于 2015-8-6 19:09:03 | 显示全部楼层
本帖最后由 我的电脑! 于 2015-8-6 19:10 编辑
silverdj 发表于 2015-8-6 16:36
强悍! 单片机 写 怎么搞


硬件上要买个程序写入器,不贵。

写入机.jpg

然后按写入原理由接好线(其实就四根线,电源两根,数据线两根)

0518.png

最后就是用STC-ISP软件把程序写入到单片机内。STC-ISP软件可以在STC单片机的主页 上下载到,免费的。

614.jpg
回复 支持 1 反对 0

使用道具 举报

     
发表于 2015-8-3 08:07:45 | 显示全部楼层
一个滤波电容也没有啊。车上干扰很厉害,建议做一定的退耦,也防止7805自激
回复 支持 1 反对 0

使用道具 举报

     
 楼主| 发表于 2015-8-5 20:22:05 | 显示全部楼层
yrxinxin 发表于 2015-8-5 20:05
如何保证倒车完毕后,后视镜翻回到原来的角度呢?

倒档时后视镜下翻1秒,那回复时就上翻1秒。实际上有的车友的后视镜马达可能有卡济,所以有可能出现下翻跟上翻回复角度的时间不一定,这个可以通过调整上翻的延时时间来匹配。但我的车马达较好,下翻的时间跟上翻的时间一样,所以就不用调整了。
回复 支持 1 反对 0

使用道具 举报

     
 楼主| 发表于 2015-8-1 22:55:58 | 显示全部楼层
....居然没有找到视频的连接按钮,想上个效果视频也不行了。给个源程序吧:


#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();
}
}                                                    
回复 支持 反对

使用道具 举报

     
发表于 2015-8-3 06:52:35 来自手机 | 显示全部楼层
本帖最后由 rocky123 于 2015-8-3 06:53 编辑

这个有用,收藏了。倒车继电器在什么地方
回复 支持 反对

使用道具 举报

     
发表于 2015-8-3 07:36:41 | 显示全部楼层
收藏了   很不错的创意
回复 支持 反对

使用道具 举报

     
发表于 2015-8-3 09:01:47 | 显示全部楼层
用单片机技术解决日常生活中所遇到的问题,楼主是个有心人,很好的创意!
回复 支持 反对

使用道具 举报

发表于 2015-8-3 11:22:26 | 显示全部楼层
这个很不错,LZ连源程序都分享出来了
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2015-8-3 18:42:05 | 显示全部楼层
rocky123 发表于 2015-8-3 06:52
这个有用,收藏了。倒车继电器在什么地方

在车内的保险里面有的了。自动档的车一般就用倒档继电器,如果是手动档的,那一般是倒档保险丝。

保险盒.jpg
回复 支持 反对

使用道具 举报

     
发表于 2015-8-3 18:43:27 | 显示全部楼层
我的电脑! 发表于 2015-8-3 18:42
在车内的保险里面有的了。自动档的车一般就用倒档继电器,如果是手动档的,那一般是倒档保险丝。

谢谢!车型不一样,到时候找找看
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2015-8-3 18:45:13 | 显示全部楼层
ChrisLove 发表于 2015-8-3 08:07
一个滤波电容也没有啊。车上干扰很厉害,建议做一定的退耦,也防止7805自激

对的,当时就赶着做出来,并没有考虑好这个事情,加上退藕肯定可以更加稳定。好消息是这个家伙装车上已有半个月了,还好一直能稳定地工作着……
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2015-8-3 18:48:11 | 显示全部楼层
ntwhq 发表于 2015-8-3 09:01
用单片机技术解决日常生活中所遇到的问题,楼主是个有心人,很好的创意!

谢谢鼓励!!貌似开放了视频的权限了,我上个试试。

视频中滴一声就是挂到倒档,小屏处是倒车影像,当小屏熄灭就是退出倒车档了。由于手机的摄像头有广角功能,所以后视镜下翻角度并不是太明显。

回复 支持 反对

使用道具 举报

     
发表于 2015-8-3 23:12:37 | 显示全部楼层
厉害,做的也漂亮
回复 支持 反对

使用道具 举报

     
发表于 2015-8-5 20:05:16 | 显示全部楼层
如何保证倒车完毕后,后视镜翻回到原来的角度呢?
回复 支持 反对

使用道具 举报

     
发表于 2015-8-5 21:03:25 | 显示全部楼层
我的电脑! 发表于 2015-8-5 20:22
倒档时后视镜下翻1秒,那回复时就上翻1秒。实际上有的车友的后视镜马达可能有卡济,所以有可能出现下翻跟 ...

高手在民间!强烈建议给楼主加精!如此原创还很实用,还分享给广大坛友的无私的人,我为你点赞!!!!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2024-5-8 01:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表