帮别人做网站多少钱,做网站话术,营销型网站设计网站,小清新 轻音乐网站 wordpress#x1f4c8; 算法与建模 | 专注PLC、单片机毕业设计
✨ 擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导#xff0c;毕业论文、期刊论文经验交流。✅ 专业定制毕业设计✅ 具体问题可以私信或查看文章底部二维码#xff08;1#xff09;
食堂后厨作为人… 算法与建模 | 专注PLC、单片机毕业设计✨ 擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导毕业论文、期刊论文经验交流。✅ 专业定制毕业设计✅ 具体问题可以私信或查看文章底部二维码1食堂后厨作为人员密集且用火频繁的场所燃气泄漏监测系统的设计必须兼顾经济性与高可靠性。在控制器选型上考虑到系统主要任务是实时采集气体浓度模拟量并进行简单的逻辑判断与输出不需要复杂的数字信号处理算法。因此设计中通常会对比通用的51系列、AVR系列以及低成本的STM8系列单片机。51系列虽然技术老旧但其极其成熟的生态和低廉的价格使其在低成本家电类控制中依然占据一席之地而STM8系列在无需外部晶振的情况下也能稳定运行且ADC精度通常优于普通51。设计论证倾向于选择一款自带多路10位以上ADC的单片机以简化外部电路。系统电源设计需考虑后厨潮湿、油烟大的环境PCB设计应增加防潮处理电源模块需具备过压保护和短路保护功能将市电220V转为系统所需的直流电压同时为气敏传感器提供稳定的加热电压。2燃气传感器的选择直接针对后厨常用的燃料类型主要是天然气甲烷或液化石油气LPG。这两种气体的密度不同天然气比空气轻LPG比空气重这不仅影响传感器的安装位置天花板或地面附近也影响选型。常用的MQ系列半导体气敏传感器是首选方案其中MQ-4对甲烷灵敏度高MQ-5对液化气和天然气均有较好的灵敏度且对乙醇烹饪料酒干扰较小。设计内容需详细分析半导体传感器的特性其敏感元件需在高温下工作因此内部加热丝需要5V供电。传感器输出的是随气体浓度变化的电阻值需通过分压电路转换为0-5V的模拟电压信号送入单片机。由于半导体传感器存在初始稳定时间长、受温湿度影响大的缺点电路设计中可引入热敏电阻进行温度补偿软件上设置开机预热倒计时防止刚通电时的误报。3安全联动控制与报警机制是本系统的核心功能输出。当单片机检测到ADC采样值超过预设的爆炸下限LEL的百分比如10% LEL时系统立即进入报警状态。设计中不仅要有本地的高响度蜂鸣器和红色闪烁警示灯更关键的是要有自动切断气源的动作。这需要驱动防爆电磁切断阀该阀门通常为脉冲驱动型或常开型设计电路时需注意驱动电流的大小和脉冲宽度的控制。除了切断气源系统还应自动启动强力排风扇进行通风换气降低室内燃气浓度。为了防止继电器动作时的火花引发爆炸必须选用密封型继电器或固态继电器SSR并将其安置在防爆盒内。软件逻辑上报警状态具有锁定功能即一旦触发报警即使气体浓度随后下降报警状态也不会自动解除必须由人工确认并复位以强制工作人员检查泄漏点。此外系统可预留RS485接口或无线模块接口以便接入食堂的综合安防管理系统。#include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int sbit DQ P1^0; sbit PWM_OUT P1^1; sbit KEY_MODE P3^0; sbit KEY_UP P3^1; sbit KEY_DOWN P3^2; sbit FAN_RELAY P1^3; sbit LED_AUTO P2^0; sbit LED_MANUAL P2^1; uchar code LED_SEG[] {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar code LED_DIG[] {0xfe,0xfd,0xfb,0xf7}; uchar dis_buf[4]; uchar temp_value 25; uchar set_temp 26; uchar fan_speed 0; bit mode_flag 0; bit update_flag 1; void delay(uint t) { while(t--); } void ds18b20_init() { DQ 1; _nop_(); DQ 0; delay(80); DQ 1; delay(10); while(DQ); while(~DQ); delay(20); } uchar ds18b20_read() { uchar i, dat 0; for(i0;i8;i) { DQ 0; _nop_(); DQ 1; _nop_(); _nop_(); if(DQ) dat | (1i); delay(30); while(~DQ); } return dat; } void ds18b20_write(uchar dat) { uchar i; for(i0;i8;i) { DQ 0; _nop_(); DQ dat0x01; delay(10); DQ 1; dat1; } } uint read_temp() { uchar TL, TH; uint temp; ds18b20_init(); ds18b20_write(0xcc); ds18b20_write(0x44); delay(1000); ds18b20_init(); ds18b20_write(0xcc); ds18b20_write(0xbe); TL ds18b20_read(); TH ds18b20_read(); temp TH; temp 8; temp | TL; temp temp * 0.0625; return temp; } void keys_scan() { static uchar key_count 0; if(!KEY_MODE) { if(key_count 100) { key_count 0; mode_flag ~mode_flag; update_flag 1; } } else if(!KEY_UP) { if(key_count 100) { key_count 0; if(mode_flag) { if(fan_speed 3) fan_speed; } else { if(set_temp 40) set_temp; } update_flag 1; } } else if(!KEY_DOWN) { if(key_count 100) { key_count 0; if(mode_flag) { if(fan_speed 0) fan_speed--; } else { if(set_temp 10) set_temp--; } update_flag 1; } } else key_count 0; } void pwm_init() { TMOD 0xf0; TMOD | 0x01; TH0 0xff; TL0 0x9c; ET0 1; EA 1; TR0 1; } void display() { static uchar cnt 0; P0 0x00; P2 (P2 0xf0) | LED_DIG[cnt]; if(cnt 0) P0 LED_SEG[temp_value/10]; else if(cnt 1) P0 LED_SEG[temp_value%10] | 0x80; else if(cnt 2) P0 LED_SEG[set_temp/10]; else if(cnt 3) P0 LED_SEG[set_temp%10]; if(cnt 4) cnt 0; } void control_logic() { if(mode_flag) { LED_AUTO 1; LED_MANUAL 0; switch(fan_speed) { case 0: PWM_OUT 1; FAN_RELAY 0; break; case 1: PWM_OUT 0; FAN_RELAY 1; break; case 2: PWM_OUT 0; FAN_RELAY 1; break; case 3: PWM_OUT 0; FAN_RELAY 1; break; } } else { LED_AUTO 0; LED_MANUAL 1; if(temp_value set_temp) { PWM_OUT 0; FAN_RELAY 1; } else { PWM_OUT 1; FAN_RELAY 0; } } } void timer0_isr() interrupt 1 { static uchar pwm_cnt 0, speed_map[] {0, 30, 60, 100}; TH0 0xff; TL0 0x9c; if(mode_flag fan_speed0 fan_speed4) { if(pwm_cnt 100) pwm_cnt 0; PWM_OUT (pwm_cnt speed_map[fan_speed]) ? 0 : 1; } display(); } void main() { uint temp_tmp; pwm_init(); while(1) { keys_scan(); if(update_flag) { control_logic(); update_flag 0; } temp_tmp read_temp(); if(temp_tmp ! temp_value) { temp_value temp_tmp; update_flag 1; } } }如有问题可以直接沟通