找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10028|回复: 14
打印 上一主题 下一主题
收起左侧

基于51单片机的汽车大灯自动控制

  [复制链接]
跳转到指定楼层
楼主
   最初接触单片机就是自己想把自己的汽车改成自动大灯(可能是自己懒,又可能是为了安全,但后面实际上耗费了大量精力)。最开始是买了个开发板在家看教程学习了好几天,然后就买了继电器,8个一起的,但我因车的原因,只用了两个,所以大的开发板加上长的继电器放在车上换挡的地方,你们脑补一下有多乱多丑。经过了一年多的升级,做了最小系统,把最初的光敏二极管换成了红外线感应器(自己焊接的感应器),把8组继电器换成了2个,可以直接放在仪表台下面。 ————————这里是正题————————-------功能:通过红外线感应器接收自然光,adc转换器处理接收到的光的强度,再发送到51单片机处理,单片机通过设定好的判断程序控制继电器闭合,延时断开。
-------材料:单片机最小系统 图1(电路板+stc8952芯片)、红外传感 图2、继电器 图3、pcf8591adc转换器 图4、车载usb充电器、usb充电线给单片机 供电用,所以要看好单片机的接口是哪种)、杜邦线若干。
------接线及烧写:继电器控制接口接单片机p1.4与p1.5,pcf8591的scl与sda分别接单片机的p2.1与p2.0,红外感应器out接口接pcf8591的AIN0或AIN1(两个接口只有一个是正确的),其余的该接vcc的接vcc,该接gnd的接gnd(汽车部分接线不懂的请咨询汽车维修工程师,请勿乱接,发生危险我是不负责的),下载器我用的cp2102,怎么下载请去百度一下。最后附上程序,程序可以根据自己喜好去修改,若有高手发现程序中有可以优化的地方请指出及把修改后的程序发出来。

图1


图2


图3


图4


下载器


红外线强度+out+按键V1.2的单片机源程序如下:
  1. /****************************************************
  2.                                    自动控制

  3.    红外线感应电阻IR与ADC构成亮度检测电路,
  4.    光线弱时继电器闭合灯光开启,光线强时继电器延时断开灯光关闭,达到节约电量同时保证黑夜行驶安全。

  5. ****************************************************/
  6. #include<reg52.h>
  7. #include<intrins.h>
  8. #include"IIC.h"

  9. typedef unsigned int u16;          //对数据类型进行声明定义
  10. typedef unsigned char u8;
  11. unsigned char Voltage;
  12. unsigned char Voltagetwo;

  13. sbit turn1=P1^4;//开关
  14. sbit turn2=P1^5;
  15. sbit turn3=P1^6;
  16. sbit turn0=P1^7;//悬空
  17. sbit turn4=P1^3;

  18. sbit k1=P3^6;//按键

  19. u16 t;
  20. u8 bz;

  21. void delay(int j)   //误差 0us
  22. {
  23.     int i;
  24.     for(j;j>0;j--)
  25.         for(i=0;i<110;i++);
  26. }


  27. void IR()         //第一感应器
  28. {
  29.          ADC_Init();
  30.      Voltage=ADC_Read(); //读取光敏电阻采样电压//最大255,用10进制转换为16进制
  31.        
  32.   if((Voltage<0x0a)&&(bz==0)){bz=1;turn1=0;}  //比较函数
  33.         if(bz==1){t=t+1;if(t>20){bz=0;t=0;}}   //时钟延时函数
  34.         if((Voltage<0x32)&&(bz==0)){bz=0;turn2=0;}
  35.         if(bz==1){t=t+1;if(t>200){bz=0;t=0;}}   //时钟延时函数
  36.        
  37.   if((Voltage>0x12)&&(bz==0)){bz=2;turn0=1;}//故意添加一个空指令来延长时间
  38.         if(bz==2){t=t+1;if(t>1100){bz=0;t=0;}}
  39.         if((Voltage>0x50)&&(bz==0)){bz=3;turn1=1;}
  40.         if(bz==3){t=t+1;if(t>1100){bz=0;t=0;}}
  41.         if((Voltage>0xc8)&&(bz==0)){bz=0;turn2=1;}
  42.        
  43.   if(k1==0){t=t+1;if(t>20){turn3=~turn3;t=0;}}//按键处理
  44. }
  45. void IRw()        //第二个感应器
  46.         {
  47.                 ADC_Inittwo();
  48.         Voltagetwo=ADC_Read();                         //读取光敏电阻采样电压//最大255,用10进制转换为16进制
  49.        
  50.                  //以下是远光控制
  51.        
  52.             if(Voltagetwo>0x64){turn4=0;}
  53.                 if(Voltagetwo<0x32){turn4=1;}

  54.         }

  55. void main()
  56. {
  57.         turn1=1;    //开机优先处理值
  58.     turn2=1;
  59.         turn4=1;
  60.         delay(500);
  61.    while(1)
  62.    {
  63.         IR();
  64.         IRw();
  65.    }
  66. }
复制代码


所有资料51hei提供下载:
红外线强度 out 按键V1.2 - 副本.rar (47.56 KB, 下载次数: 60)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:93502 发表于 2018-9-10 20:08 | 只看该作者
如果在ADC中加入对汽车电瓶电压进行检测,这样可以判断车辆发动了电压达到一定数值时再工作,这样对电瓶有一定的保护可能会比较好,另外,当检测到光线达到一定域值时来控制开关灯,会不会在黄昏时,灯反复亮暗?可不可以加入在一定时间内达到这个域值的次数时直接转成黑夜模式,在一定时间内超过这个域值的次数直接转成白天模式?个人看法,欢迎探讨。
回复

使用道具 举报

板凳
ID:489174 发表于 2019-3-29 16:56 来自手机 | 只看该作者
解压密码是啥
回复

使用道具 举报

地板
ID:704284 发表于 2020-3-7 21:40 来自手机 | 只看该作者
高手高手,改下来多少钱
回复

使用道具 举报

5#
ID:293108 发表于 2020-12-7 10:12 | 只看该作者
胡闹闹 发表于 2018-9-10 20:08
如果在ADC中加入对汽车电瓶电压进行检测,这样可以判断车辆发动了电压达到一定数值时再工作,这样对电瓶有 ...

这个是刚学stc时做的,没有定时器,现在已经有更新版本,换成了自带adc的stc15,体积更小,加入了阀值,用了定时器延时更灵敏。
回复

使用道具 举报

6#
ID:832201 发表于 2020-12-15 09:44 | 只看该作者
感谢分享,不错的想法
回复

使用道具 举报

7#
ID:349543 发表于 2020-12-25 19:22 | 只看该作者
胡闹闹 发表于 2018-9-10 20:08
如果在ADC中加入对汽车电瓶电压进行检测,这样可以判断车辆发动了电压达到一定数值时再工作,这样对电瓶有 ...

楼主说了,电源应该是用车载USB充电器,这充电器一般插在点烟器上的,熄火后点烟器一般是没电的没必要做一个检测电瓶电压的。
回复

使用道具 举报

8#
ID:693523 发表于 2020-12-25 19:59 | 只看该作者
学习了,准备做一个自动巡航,大致原理是通过车速控制油门(目前市面大部分都是电子油门),想法有了关键是懒得动手,也没有时间
回复

使用道具 举报

9#
ID:93502 发表于 2021-2-16 13:50 | 只看该作者
chentang 发表于 2020-12-7 10:12
这个是刚学stc时做的,没有定时器,现在已经有更新版本,换成了自带adc的stc15,体积更小,加入了阀值, ...

新年快乐!可不可以把新版本的分享一下呢?
回复

使用道具 举报

10#
ID:5212 发表于 2021-9-2 20:08 | 只看该作者
LZ把新版本也分享一下呢,谢谢了
回复

使用道具 举报

11#
ID:540334 发表于 2021-9-25 00:35 来自手机 | 只看该作者
胡闹闹 发表于 2018-9-10 20:08
如果在ADC中加入对汽车电瓶电压进行检测,这样可以判断车辆发动了电压达到一定数值时再工作,这样对电瓶有 ...

这个苦我吃过了,我在某宝购买了一片光敏电阻控制模块安装在我的摩托车上。在夜晚经过有路灯的树荫下时大灯反复亮灭,爆闪状态。感觉很扰民很失败,对面来车以为是在挑衅他们。我现在也在想办法加入适当的延时,或者是加入时钟芯片显示时钟,顺便让摩托车在夜晚的时间段禁用光敏电阻,大灯自动开启,在白天的时候(没有路灯和树影)使能光敏方便摩托车进入车库等光线不足的地方可以自动开关。这是我的思路也希望作者有所借鉴
回复

使用道具 举报

12#
ID:130230 发表于 2021-9-27 10:16 | 只看该作者
qixiu1342 发表于 2020-12-25 19:59
学习了,准备做一个自动巡航,大致原理是通过车速控制油门(目前市面大部分都是电子油门),想法有了关键是 ...

。。。你这有点危险吧
回复

使用道具 举报

13#
ID:969272 发表于 2021-10-12 19:47 | 只看该作者
红外感应器可以用成品代替吗?比如电视机上用的。
回复

使用道具 举报

14#
ID:47286 发表于 2021-10-13 12:57 来自手机 | 只看该作者
Aizlna 发表于 2021-9-25 00:35
这个苦我吃过了,我在某宝购买了一片光敏电阻控制模块安装在我的摩托车上。在夜晚经过有路灯的树荫下时大 ...

你只需要加一个带导管的光敏以区分正向光强变化就行
回复

使用道具 举报

15#
ID:969272 发表于 2021-10-22 18:34 | 只看该作者
看一下新版的?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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