自制高精度控制电热水瓶

发布者:CuriousObserver最新更新时间:2015-07-13 来源: 51hei关键字:自制高精度控制  电热水瓶 手机看文章 扫描二维码
随时随地手机看文章
最近因需要买了一个电热水瓶,使用中发现,水温根本上没有达到沸腾,里面温控器就跳开了,而且水温稍一下降,温控器又很快闭合,再次进入煮水状态,这样水不断处于冷却-加热-冷却状态,这样不但浪费电,长期饮用此水,对身体也是有害的。刚好最近在学单片机编程,于是打算自己写个程序,用单片机来控制水温,可以达到十分精确的沸腾温度。说干就干,马上拆开电热水瓶,发现里面电路极其简单,只是用个KSD301温控器来控制水温,仔细观察发现电源还直接加到另一组加热丝,测量其阻值有600欧左右,粗略计算达到80W,也就是说,在温控器跳开后,此加热丝仍耗电80W来保持水温,这样是很浪费电的。于是把原电路拆掉,接通电源到主加热丝,加入1/3水,直接通电加热到水沸腾,用温度计测量底部原温控器感温点,温度有96度,一直沸腾下去,还是96度,也就是说,只要水沸腾,此处温度就是96度了。于是,根据此数据写了一个温控程序,设定下限温度50度,上限温度96度,并且具备提示功能,就是水要是沸腾了,热水瓶会”滴“一声提醒我们水已经煮好,这个就是单片机的优势,可以实现智能控制!上面我还采用三个数码管直接显示水温,在水温达到设定时,继电器跳开,常闭触点接通副加热器进行恒温加热,不过这次不是连续通电,而是加热3秒,停止1秒,并且是半波交流电,这样耗电是很低的,又可以进行保温,同时使热水瓶耗电降到最低,真正环保啊!好了,下面附上C程序,监于时间关系,我就先不传上电路图了,其实电路倒是 简单,不会很复杂!单片机采用AT89C2051,水温传感用DS18B20,用DS18B20成本稍高,但程序容易设计,而且也比较准确!
#include 
#include 
#define uchar unsigned char
#define uint unsigned int
sbit GW=P3^0;
sbit SW=P3^1;
sbit BW=P3^2;
sbit DQ=P3^3;
sbit JDQ=P3^4;
sbit BAW=P3^5;
sbit FMQ=P3^7;
bit K;
code uchar NUM[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar temp_value;
uchar sec;
uchar TH=96,TL=50;
void delay(uchar a)
{
 while(a--);
}
void INIT()
{
 TMOD=0x01;
 TH0=0x3c;
 TL0=0xb0;
 TR0=1;
 }
void init_DS18B20()
{
 uchar b=0;
 DQ=1;
 delay(8);
 DQ=0;
 delay(100);
 DQ=1;
 delay(14);
 b=DQ;
 delay(20);
}
uchar read()
{
 uint i, dat=0;
 for(i=8;i>0;i--)
 {
  DQ=1;
  _nop_();_nop_();
  dat>>=1;
  DQ=0;
  _nop_();_nop_();_nop_();_nop_();
  DQ=1;
  _nop_();_nop_();_nop_();_nop_();
  if(DQ)
  dat|=0x80;
  delay(12);
  }
  DQ=1;
  return(dat);
}
void write(uchar dat)
{
 uchar d=0;
 for(d=8;d>0;d--)
 {
  DQ=1;
  _nop_();_nop_();
  DQ=0;
  delay(1);
  DQ=dat&0x01;
  delay(12);
  dat=dat/2;
  }
  DQ=1;
  delay(2);
}
void ReadTemp()
{
 uint a=0;
 uint b=0;
 init_DS18B20();
 write(0xCC);    
 write(0x44); 
 delay(100); 
       
 init_DS18B20();
 write(0xCC);  
 write(0xBE);  
 delay(100);
 a=read(); 
 b=read(); 
  
 temp_value=((b<<8)|a)*0.0625;          
}
 void display (uchar num0,uchar num1,uchar num2)
{ 
  P1=NUM[num0];
  GW=0;
  delay(200);
  GW=1;
  P1=NUM[num1];
  SW=0;
  delay(200);
  SW=1;
  
  P1=NUM[num2];
  BW=0;
  delay(200);
  BW=1;
}
void wenkong()
{
   if(temp_value=TH)
   {
    JDQ=0;
    }
}
main() 
{ 
 uchar a,b,c,t;
 INIT();
 K=0;
 if(sec==0)
 FMQ=0;
 BZ: if(sec>=1)
 FMQ=1;
 if(temp_value>=TH&K==0)
 {
  sec=0;
  FMQ=0;
  if(sec==3)
  FMQ=1;
  K=!K;
 }
 while(1)
 {
      if(TF0==1)
     {
     TF0=0;
   TH0=0x3c;
      TL0=0xb0;
   t++;
       }
    if(t==20)
    {
     t=0;
     sec++;
  BAW=0;
     }
    if(sec==4)
    {
       sec=0;
    BAW=1;
    }
    ReadTemp();
  a=temp_value%10; 
     b=temp_value/10%10;
  c=temp_value/100%10;
  display(a,b,c);
   wenkong();
   goto BZ;
 }
}
关键字:自制高精度控制  电热水瓶 引用地址:自制高精度控制电热水瓶

上一篇:基于AT89C51的电子时钟
下一篇:用单片机做的电子时钟

小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
502 Bad Gateway

502 Bad Gateway


openresty
设计资源 培训 开发板 精华推荐

502 Bad Gateway

502 Bad Gateway


openresty
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

502 Bad Gateway

502 Bad Gateway


openresty
502 Bad Gateway

502 Bad Gateway


openresty
502 Bad Gateway

502 Bad Gateway


openresty
随便看看
    502 Bad Gateway

    502 Bad Gateway


    openresty
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
502 Bad Gateway

502 Bad Gateway


openresty