找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机红外对射进出门开关灯程序(已在厕所中使用)

查看数: 5259 | 评论数: 12 | 收藏 3
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-5-6 15:48

正文摘要:

做它的目的是提示厕所内有人  不用走近后才被里面的人提示  其他人在远处看到装在外面的灯亮了就知道里面有人 红外接收头遮挡后重新接收到38khz信号会有一个低脉冲  通过判断两个接收 ...

回复

ID:1075398 发表于 2025-6-30 11:30
楼主,你这个发射接收的距离有多远,发射,接收管的使用寿命长不长,
无效楼层,该帖已经被删除
ID:1075398 发表于 2025-3-5 08:43
是问我吗?我这个原来是打算带3路输出,实际上只作了2路,一路控灯,一路控风扇, 进入的话,先开灯,稍延时才开风扇,出来的话,先关灯,风扇会继续延时一小会儿才关掉, 所以用双稳态可能不能达到相要的效果, 再说用MCU电路可能会比较简单一些
ID:325985 发表于 2025-3-4 16:06
那如果搞个双稳态电路不是也能实现这个功能吗?是不是简单多了呢。
ID:1075398 发表于 2025-3-4 10:41
Lthrwy 发表于 2025-3-3 15:51
我也做了一个类似功能的,也是放厕所门口,程序是请人帮写的,有问题, 会自已亮,会不到时间灭,会很长时间不灭, ...

就是这样

墙开关.jpg (1.68 MB, 下载次数: 0)

墙开关.jpg
ID:1075398 发表于 2025-3-3 16:00
把它改为C语言版,谁验证一下#include <stc15.h> #include <intrins.h>  // 发射部分代码 #if 0 // 发射代码,通过定义宏切换发射/接收 /************** 发射程序 **************/ sbit TxPin1 = P3^4; // 38kHz输出引脚 sbit TxPin2 = P3^5;  void Timer0_Init() {     TMOD = 0x12;    // 定时器0模式2(8位自动重装)     TH0 = 0xF4;     // 12MHz下产生38kHz方波     TL0 = 0xF4;     ET0 = 1;        // 允许定时器0中断     EA = 1;         // 开总中断     TR0 = 1;        // 启动定时器0 }  void main() {     P3M0 = 0x00;    // 设置P3为准双向口     P3M1 = 0x00;     Timer0_Init();     while(1); }  void Timer0_ISR() interrupt 1 {     TxPin1 = !TxPin1; // 翻转输出     TxPin2 = !TxPin2; }  #else /************** 接收程序 **************/ sbit RxPin1 = P3^3;   // 红外输入1 sbit RxPin2 = P3^4;   // 红外输入2 sbit LED = P3^5;      // 状态指示灯 sbit Out = P3^1;      // 控制输出 sbit Buzzer = P3^0;   // 蜂鸣器 sbit Switch = P3^2;   // 模式切换  bit X = 1;            // 切换标志 unsigned char counter[8]; // 60H-67H  void delay() {        // 约10ms延时     unsigned char i = 5;     while(i--) {         unsigned char j = 248;         while(j--) {             unsigned char k = 248;             while(k--);         }     } }  void main() {     // IO初始化     P3M0 = 0x00; P3M1 = 0x00; // 准双向模式     RxPin1 = RxPin2 = LED = Switch = 1;     Out = 0;     Buzzer = 1;          X = 1;     delay(); delay();     Buzzer = 0;          // 计数器初始化     for(unsigned char i=0; i<8; i++) counter[i] = 0;      while(1) {         LED = 1;         // 初始延时(约130ms)         for(int i=0; i<13; i++) delay();                  while(1) {             // 输入检测             if(!RxPin2) {        // 关灯检测                 counter[6] = 50; counter[7] = 240; counter[0] = 240;                 LED = 0;                 // 防抖动检测                 while(counter[0]-- || counter[7]-- || counter[6]--) {                     if(RxPin1) {                         if(!X) { // 模式B                             Out = 0;                             Buzzer = 1; delay(); Buzzer = 0; delay();                             Buzzer = 1; delay(); Buzzer = 0;                             goto RESTART;                         }                         break;                     }                 }                 goto RESTART;             }                          if(!RxPin1) {        // 开灯检测                 counter[6] = 50; counter[7] = 240; counter[0] = 240;                 LED = 0;                 while(counter[0]-- || counter[7]-- || counter[6]--) {                     if(RxPin2) {                         if(X) { // 模式A                             Out = 1;                             Buzzer = 1; delay(); Buzzer = 0;                             counter[0] = counter[1] = counter[2] = 240;                             counter[3] = 20;                             goto RESTART;                         }                         break;                     }                 }                 goto RESTART;             }                          if(!Switch) {        // 模式切换                 delay(); delay();                 if(!Switch) {                     X = !X;                     Buzzer = 1; delay(); Buzzer = 0;                 }                 while(!Switch);                 goto RESTART;             }                          // 自动关闭检测             if(!--counter[2] && !--counter[1] && !--counter[0] && !--counter[3]) {                 Out = 0;                 break;             }         }                  RESTART: // 重启循环         counter[3] = 20; // 重置自动关闭定时         counter[0] = counter[1] = counter[2] = 240;     } } #endif
ID:1075398 发表于 2025-3-3 15:51
我也做了一个类似功能的,也是放厕所门口,程序是请人帮写的,有问题, 会自已亮,会不到时间灭,会很长时间不灭,凑合用了好几年了,改天发图片上来
ID:261025 发表于 2020-5-27 21:08
man1234567 发表于 2020-5-15 07:35
去掉单片机可有效降低成本和故障率

还有一个版本我没发  数码管显示进去+1 出来-1  减到0关闭灯  用的是2.3寸数码管 单片机用的是贴片的 和数码管固定在一起
ID:584814 发表于 2020-5-15 07:35
去掉单片机可有效降低成本和故障率
ID:305511 发表于 2020-5-9 13:11
挺有意思的!
ID:282850 发表于 2020-5-8 14:24
思路很好,盒子及整体做工优秀。与我一样是实战派
ID:253767 发表于 2020-5-8 07:18
谢谢分享!!!

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

Powered by 单片机教程网

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