一、背景介绍

我们工作久了,久坐导致的毛病就显现出来了,腰酸背痛颈椎疼,最近看到利用番茄钟工作法挺好,工作25分钟,休息5分钟,既能调整工作节奏,避免精力过分消耗,也能避免久坐导致的身体问题。
我刚开始使用闹钟做提醒,后来尝试番茄钟软件,但是都要手动去操作手机,拿起手机看到信息,然后就会去处理手机上的事情了,起不到作用…
直到有一天收拾东西看到了我大学期间基于51单片机做的一个电子设计,激起了我的灵感,开始了基于51单片机的自动番茄钟,久坐提醒神器的设计和制作。
整体方案硬件部分继承了大学时焊接的电路板,更换了传感器部分,软件部分重新编写了控制部分的代码。
之前的软硬件设计方案可以参考这篇文章《基于51单片机的上下限可调的数字温度控制系统》,本文重点阐述差异部分。

二、功能描述

本设计要求能够识别到座位上有人,并开始计时,能够在LCD屏上显示工作状态和倒计时时间。当超过设置的久坐提醒时间(25分钟),进行蜂鸣器和LED灯报警,并在LCD屏上显示让你休息的提示。人离开后能够重置时间,LCD屏显示离开状态,直到你坐下后开始重新计时。另外如果有特殊情况无法按时休息,支持按复位键重新计时。

三、系统组成

本系统由STC89C52单片机主控,通过晶振时钟模块、复位电路模块、按键模块、液晶显示模块、声光报警模块、传感器模块组成。
其中液晶显示模块采用LCD1602液晶显示屏,声光报警模块采用蜂鸣器和红黄绿三个LED灯,传感器模块开始采用的是E18-D80NK红外漫反射光电传感器。
传感器部分刚开始选用的是HC-SR501热释电红外传感器,但是调试过程中发现该人体红外传感器只能检测到移动的人体,无法检测到静止的人体。咱们工作的时候有时会很专注,静止在那里识别不到,传感器就认为没有人,导致功能失效。后来找了一下发现E18-D80NK红外漫反射光电传感器能够满足要求,于是选了这个传感器。

四、硬件设计

1、总体电路图


其中,传感器要换成红外漫反射光电传感器。

2、传感器介绍

五、软件设计

1、流程图

2、源代码

见附录

六、结果展示

1、正常工作状态

2、久坐提醒状态

3、离开休息状态

附录

主控部分
main.c

#include <reg52.h>
#include <stdio.h>#include "lcd1602.h"#define WORK_MAX_TIME (25 * 60)sbit beep = P1 ^ 3;   //蜂鸣器
sbit pir = P2 ^ 0;    //热释电红外传感器信号线
sbit reset = P3 ^ 2;  //定义按键--复位键sbit led0 = P2 ^ 2;  //绿灯
sbit led1 = P2 ^ 3;  //黄灯
sbit led2 = P2 ^ 4;  //红灯uint work_time = WORK_MAX_TIME;  //工作坐着的秒数//蜂鸣器
void di(uchar s) {beep = 0;delay1ms(s);beep = 1;
}//按键音
void key() {di(100);
}//报警音
void warn() {di(5000);
}//点亮LED
void lightLED(uchar c) {if (c == 'r') {  // 红灯亮led0 = 1;led1 = 1;led2 = 0;} else if (c == 'g') {  // 绿灯亮led0 = 0;led1 = 1;led2 = 1;} else if (c == 'y') {  // 黄灯亮led0 = 1;led1 = 0;led2 = 1;} else {led0 = 1;led1 = 1;led2 = 1;}
}//液晶显示
void showLCD(char *_msg, uint _tm) {uchar tm[16] = {0};uint min = _tm / 60;uint sec = _tm % 60;write_com(0x80);write_str(_msg);write_com(0x80 + 0x40);sprintf(tm, "time %02d:%02d", min, sec);write_str(tm);
}//处理红外漫反射传感器信号
void processPIR() {// 人在座位上if (pir == 0) {// led显示working和倒计时if (work_time > 0) {showLCD("working ...     ", work_time);// 绿灯亮lightLED('g');work_time--;} else {work_time = 0;showLCD("go go go !!!    ", work_time);// 红灯亮lightLED('r');warn();}} else if (pir == 1) {// led显示leaving和25:00work_time = WORK_MAX_TIME;showLCD("leaving ...     ", work_time);// 黄灯亮lightLED('y');}
}void main() {EA = 1;   //全局中断开关IT0 = 1;  //跳变沿触发方式EX0 = 1;  //开启外部中断0led0 = 0;led1 = 0;led2 = 0;init_1602();delay1ms(1000);while (1) {processPIR();delay1ms(1000);}
}//外部中断0函数
void int0(void) interrupt 0 {EX0 = 0;  //关外部中断0// 重置命令if (reset == 0) {delay1ms(5);if (reset == 0) {while (!reset);key();// 复位重新计时work_time = WORK_MAX_TIME;}}EX0 = 1;  //开启外部中断0
}

LCD1602部分
lcd1602.h

#ifndef _LCD1602_H_
#define _LCD1602_H_#include <reg52.h>typedef unsigned char uchar;
typedef unsigned int uint;//延时程序
void delay1ms(uint z);//写命令操作
void write_com(uchar com);//写数据操作
void write_data(uchar date);//写字符串
void write_str(uchar *str);//液晶初始化
void init_1602();#endif  //_LCD1602_H_

lcd1602.c

#include "lcd1602.h"sbit lcden = P3 ^ 7;  //液晶使能端
sbit lcdrs = P3 ^ 4;  //液晶数据命令选择端
sbit lcdrw = P3 ^ 6;  //读写选择端//延时程序
void delay1ms(uint z) {uint x, y;for (x = z; x > 0; x--)for (y = 114; y > 0; y--);
}//写命令操作
void write_com(uchar com) {lcdrs = 0;P0 = com;delay1ms(5);lcden = 1;delay1ms(5);lcden = 0;
}//写数据操作
void write_data(uchar date) {lcdrs = 1;P0 = date;delay1ms(5);lcden = 1;delay1ms(5);lcden = 0;
}//写字符串
void write_str(uchar *str) {while (*str != '\0')  //字符串未结束{write_data(*str++);delay1ms(1);}
}//液晶初始化
void init_1602() {uchar table[16] = {0};uchar table1[16] = {0};lcdrw = 0;lcden = 0;write_com(0x38);  //设置16x2显示,5x7点阵,八位数据接口write_com(0x0c);  //设置开显示,不显示光标write_com(0x06);  //写一个字符后地址指针加1write_com(0x01);  //显示清0,数据指针清0
}

基于51单片机和红外漫反射传感器的久坐提醒神器(番茄钟)的设计相关推荐

  1. (含代码)基于51单片机的红外遥控(独立按键)舵机开关灯控制

    硬件说明: 采用STC89C51作为主控芯片,结合SG90舵机模块,红外遥控(独立按键),等电路模块实现远程控制舵机. 应用实例: 在不改变外部电路的情况下,实现远程开灯,关灯. 远程控制机器开关状态 ...

  2. 基于51单片机的红外体温计的设计

    硬件设计 本系统利用51单片机控制红外温度传感器进行温度的非接触式检测并显示,能够实现快速测量人体体温.            整体电路主要由51单片机最小系统,LCD1602液晶显示电路,蜂鸣器报警 ...

  3. 196、基于51单片机无线蓝牙防丢器无线寻物报警器手机防丢失APP搜寻设计

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘 要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.程序源码 七.资料包括 摘 要 在现实生活中,大多数人都曾有过丢失贵重 ...

  4. 39、基于51单片机小车红外循迹、避障、遥控控制系统设计

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.程序 部分代码 七.资料包括 摘要 随着计算机.微电子.信息技术的快速进 ...

  5. 基于51单片机的红外循迹小车

    在前面(废话):金沙滩的板子入门51单片机,有幸见过学长的各种小车视频,亿点点羡慕,于是在期末考试前计划寒假上手尝试,刚好学校社团又有比赛 材料: 小车套件(包含底盘,轮子,减速电机,若干铜柱螺丝螺帽 ...

  6. 基于51单片机的红外非接触测温仪阈值报警方案原理图设计

    系统的功能分析 (附文件) 系统功能分析 本设计由STC89C52单片机电路+1602液晶显示电路+MLX90614ESF红外非接触温度检测电路+按键电路+蜂鸣器报警电路. 1.液晶实时显示MLX90 ...

  7. 基于51单片机的红外测温智能空调

    设计简介: 本设计是基于单片机的红外测温智能空调控制器设计,主要实现以下功能: 可实现LCD1602显示温度的示数和空调开关: 可实现通过按键可以设置温度的最大值以及最小值: 可实现通过红外遥控控制空 ...

  8. 基于51单片机的红外感应的智能垃圾桶设计

    目 录 摘 要 I ABSTRACT II 第1章 绪论 1 1.1本文研究背景和意义 1 1.2智能垃圾桶控制系统发展状况 1 1.2.1国外发展状况 1 1.2.2国内发展状况 2 1.3本课题应 ...

  9. 基于51单片机的红外智能垃圾桶原理图程序设计

    硬件设计 (末尾附文件) 系统功能分析 本设计由STC89C52单片机电路+红外避障传感器+HX711称重电路+蜂鸣器报警电路+继电器电路+电源电路组成. 1.避障红外传感器1检测到障碍物,继电器闭合 ...

最新文章

  1. Ansible05-部署文件
  2. 里程碑:BCH网络出现首例Schnorr Multisig交易
  3. discuz admin.php无法登录,discuz搬家管理员无法登录后台解决方法
  4. c++ 数组置0_0基础学习C语言第七章:数组(1)
  5. 爬虫基本原理及Request和Response分析
  6. Linux上用户之间对话
  7. laravel5.5中间件
  8. python100以内自然数之和_python教程:利用while求100内的整数和
  9. python中weekday_[转载] Python日历模块| 使用示例的weekday()方法
  10. 视觉SLAM十四讲学习笔记——ch9后端1
  11. Android四大组件详解
  12. mac卸载mysql
  13. video.js在react中实现视频播放(video.js)
  14. 产品经理懂点技术之:大话5G
  15. 程序员年薪45万,国企年薪20万,该不该跳槽去国企?
  16. [转贴]色彩调和的原理
  17. 怎么在ppt上设置文字滑动的效果html,PPT 中如何设置图片滚动切换效果
  18. 无线电定位系统与技术期末个人总结
  19. STM32(1)跑马灯
  20. 卫冰飞:互联网金融才开拓了冰山一角

热门文章

  1. 如何用python获取通达信数据_Python读取通达信本地数据
  2. Android图库(系统相册)的数据库
  3. java多线程的实现方式_JAVA多线程实现的三种方式
  4. 【读书笔记】动机与人格
  5. 任天堂 Switch 正式发售10天,宅男刚舔完卡带就被黑客破解了……解了……了
  6. 泰迪云课堂《数据分析基础》ppt(上)
  7. 比较全面的typescript + react 开发教程
  8. 斜拉桥主梁的预应力混凝土横梁计算midas
  9. 计算机毕设Python+Vue医院挂号系统设计(程序+LW+部署)
  10. C# Tcp服务器实现多端口、多协议解析