找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4538|回复: 5
收起左侧

单片机智能晾衣系统程序电路设计,手机蓝牙互联

  [复制链接]
ID:357645 发表于 2019-6-17 21:14 | 显示全部楼层 |阅读模式
基于蓝牙模块,可以通过手机蓝牙助手app控制衣架收放
晾衣架是每个家庭都会用到的工具,我们生活中常用的晾衣架已经经过了多代的发展,从一根竹竿撑起的晾衣时代,到传统固定晾衣架的时代,再到手摇晾衣架等。它们都存在着易受天气影响和功能过于单一等缺点。在此基础上我们借助多种传感器和低成本小体积的单片机以及无线通信技术,整合而成我们的智能晾衣系统。智能晾衣系统在满足基本的晾衣需求之余,还可以根据外界环境情况自动控制衣服的送出与收回,以及通过物联网进行远程控制监测。让我们的衣服既能沐浴大自然的和风暖阳又能自动躲避开它的狂风暴雨。让我们不用再为衣服的晾晒而操心,大大方便我们的生活。

本文主要介绍了光敏模块,雨滴模块以及湿度传感器部分。这三部分也是主要的数据传入部分,数据传入后通过单片机分析在控制其他部分驱动。

晾衣架的现状


我们生活中常用的晾衣架已经经过了多代的发展,从根竹竿撑起的晾衣时代,到传统固定晾衣架的时代,再到手摇晾衣架等。


图1.1-1一根绳撑起的晾衣架                图1.1-2固定的晾衣架


图1.1-3手摇晾衣架

这些传统的晾衣架有着结构简单的优势,同时也存在着受天气影响严重,功能过于单一的缺点。当遇到刮风下雨天需要依靠人把衣物收回到屋内,晾晒效果也大大折扣。

1.2智能晾衣系统的构想

    现如今电子行业越来越发达,各种传感器、芯片等也越来越普及。我们可以利用各式的传感器结合单片机等完成一些智能的控制。智能晾衣系统就是以此为基础借助雨滴感应模块、光敏模块、温湿度模块、湿度检测模块等感知环境的信息,并将信息交给单片机处理,单片机再通过控制驱动模块对环境的改变做出机械反应,同时连接显示模块把环境信息实时显示给使用者。使用者还可以通过手机实现和单片机的无线通信从而实现对晾衣架的远程遥控,并能通过手机得知衣服的晾晒状况。


  • 基本原理

1.光敏传感器模块

光敏传感器由光敏电阻和lm393双电压比较器以及它的外围电路组成,采用5V直流供电。它一般用来检测周围环境的光线亮度。拥有DO(数字量)和AO(模拟量)两种输出模式。当环境光线强度达不到设定阀值时DO输出高电平,当环境光线强度超过阀值时DO输出低电平。阀值可以通过转动模块上的电位器来调节。


                        图2.1-1光敏模块



2.雨滴传感器模块

雨滴传感器模块由雨传感器和lm393双电压比较器以及它的外围电路组成,采用5V直流供电。可以监测到下雨环境,原理与上一传感器类似当感应板上没有雨滴时DO输出高电平,当感应板上有雨滴时DO输出低电平给单片机引脚,刷掉感应板上的雨滴DO重新输出高电平。雨滴传感器模块同样有电位器可以调节阀值。



                  图2.1-2雨滴传感器模块


3.湿度检测模块

              湿度监测模块由湿度传感器和lm393双电压比较器以及它的外围电路构成,采用5V直流供电。在晾衣系统中用来藏入晾晒的衣服里检测衣物的晾晒情况。它的用作原理是当检测到衣服的湿度低于设定值时DO输出低电平,高于设定值时DO输出高电平,这个设定值同样可以通过转动电位器来调节。


                         图2.1-3湿度检测模块


以上三种模块均有AO输出,AO为模拟量输出可接在单片机AD口检测被测量的大小,但使用AO口输出系统结构和代码难度会更复杂,而DO口输出已经满足了使用要求,所以以上三个模块全部使用DO输出。

三个模块原理也相同 原理:当传感器接收到雨滴时传给单片机一个高电平,然后驱动步进电机转动。

代码如附录


  •        具体实现

天气良好状态下光敏模块和雨滴模块检测到光照充足且没有雨滴,并把信息传给单片机,单片机控制步进电机正转,连接传动装置将衣物晾晒到屋外。

当天气变坏即光敏模块和雨滴模块检测到阴天或下雨有一个条件出现时,就会把信息传给单片机,单片机控制步进电机反转,连接传动装置自动将衣物收回屋内,以免被雨淋湿。



3-1电路原理图

第四章 结果

经过小组成员反复的调试和对环境状况的模拟实验并对各个模块进行整合我们一步步实现了设想的功能要求,最终完成了作品,基本达到了我们的预想,实现了功能要求。但系统也依然存在一点小问题如:当手机控制步进电机正转,步进电机在完成正转停下之前手机发送其他指令系统不会运行,只有到电机做完正转任务手机发送最指令才能正常运行,这是需要我们进一步去完善的地方。


第五章 结论

我们小组的智能晾衣系统以智能家居为主题,以让生活更美好为目标,借助光敏传感器、雨滴传感器检测环境状况把数据交给单片机,通过单片机进一步控制步进电机对衣物收回和放出。借助温湿度模块监测环境温湿度并通过液晶屏显示。通过蓝牙模块让使用者可以通过手机对晾衣系统进行遥控和查看衣物的晾晒情况。省去了下雨天需要的手动收衣服,并提高了人们对环境信息的感知,以较低的成本大大方便了人们的生活。同时使用蓝牙进行通信存在通信距离过短的缺陷,未来借助wifi远程通信是我们的发展方向。


单片机源程序如下:


  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. # define  dianping P1
  5. uchar code zheng[4]={0x08,0x04,0x02,0x01};
  6. uchar code fan[4]  ={0x01,0x02,0x04,0x08};
  7. uchar DHT11[5],RTflag=0;
  8. uchar  FLAG,flag_q,num,gg,t,j,s;
  9. uint flag_k=0;
  10. sbit key1=P2^0;/*回收*/
  11. sbit key2=P2^1;        /*送出*/
  12. sbit guan=P2^6;
  13. sbit shidu=P2^7;
  14. sbit yudi=P2^5;
  15. sbit Beep=P2^3;
  16. sbit dat=P2^4;
  17. sbit IN1=P3^2;
  18. sbit IN2=P3^3;
  19. sbit EN=P3^4;
  20. sbit RS=P3^5;
  21. sbit RW=P3^6;         
  22. uchar table[5];
  23. void key();
  24. uint wd,sd;
  25. void HH_H();
  26. void Init();
  27. void zhengzhuan();
  28. void fanzhuan();
  29. void tingzhi();
  30. unsigned char flag_z,k,n;
  31. void Delay_t(uint j)
  32. {      uchar i;
  33.             for(;j>0;j--)
  34.           {         
  35.                 for(i=0;i<27;i++);        
  36.           }
  37. }
  38. void  Delay_10us(void)
  39. {
  40.         uchar i;
  41.          i--;
  42.          i--;
  43.          i--;
  44.          i--;
  45.          i--;
  46.          i--;
  47. }

  48. void delay(uint z)
  49. {
  50.    uint x,y;
  51.    for(x=z;x>0;x--)
  52.     for(y=110;y>0;y--);
  53. }

  54. void lcd_write_com(uchar com)
  55. {
  56.    RS=0;
  57.    RW=0;
  58.    EN=1;
  59.    P0=com;
  60.    delay(1);
  61.    EN=0;

  62. }
  63. void lcd_init()
  64. {

  65.   lcd_write_com(0x38);
  66.   delay(1);
  67.   lcd_write_com(0x08);
  68.   delay(1);
  69.   lcd_write_com(0x01);
  70.   delay(1);
  71.   lcd_write_com(0x06);
  72.   delay(1);
  73.   lcd_write_com(0x0C);
  74.   delay(1);

  75. }
  76. void lcd_write_data(uchar date)
  77. {
  78.    RS=1;
  79.    RW=0;
  80.    EN=1;
  81.    P0=date;
  82.    delay(1);
  83.    EN=0;
  84. }
  85. void write_str(uchar x,uchar y,uchar *s)
  86. {
  87.           if(y==0)                                                                                 
  88.           lcd_write_com(0x80+x);
  89.           else
  90.           lcd_write_com(0xc0+x);
  91.         while(*s)
  92.         {
  93.            lcd_write_data(*s);
  94.            s++;
  95.         }



  96. }
  97. void write_shu(uchar x,uchar y,uchar num)
  98. {
  99.          
  100.           uchar s,g;
  101.           if(y==0)
  102.           lcd_write_com(0x80+x);
  103.           else
  104.           lcd_write_com(0xc0+x);
  105.           s=num/10;
  106.           lcd_write_data(0x30+s);
  107.           g=num%10;
  108.           lcd_write_data(0x30+g);
  109. }

  110. uchar  write_byte1()
  111. {
  112.            uchar i,comdata,temp1;
  113.        for(i=0;i<8;i++)           
  114.             {
  115.                        FLAG=2;        
  116.                    while((!dat)&&FLAG++);
  117.                         Delay_10us();
  118.                     Delay_10us();
  119.                         Delay_10us();
  120.                           temp1=0;
  121.              if(dat)temp1=1;        
  122.                     FLAG=2;
  123.                  while((dat)&&FLAG++);
  124.                      
  125.                     if(FLAG==1)break;        
  126.                            
  127.                      
  128.         
  129.                    comdata<<=1;
  130.                       comdata|=temp1;
  131.              }
  132.                  return (comdata);  
  133. }
  134. void DHT11_5()
  135. {
  136.    
  137.           uchar i,temp;
  138.        dat=0;
  139.               t=temp;
  140.            Delay_t(180);
  141.            dat=1;
  142.            Delay_10us();
  143.            Delay_10us();
  144.            Delay_10us();
  145.            Delay_10us();
  146.            dat=1;         
  147.            if(!dat)                           
  148.            {
  149.                 FLAG=2;                                    
  150.                 while((!dat)&&FLAG++);
  151.                         FLAG=2;
  152.                         
  153.                 while((dat)&&FLAG++);
  154.                         for(i=0;i<5;i++)
  155.                         {
  156.                                 DHT11[i]=write_byte1();        
  157.                         }                 
  158.                         dat=1;        
  159.                  
  160.                         temp=(DHT11[0]+DHT11[1]+DHT11[2]+DHT11[3]);
  161.                         if(temp==DHT11[4])        
  162.                         {                       
  163.                                 RTflag=1;                  
  164.                         }
  165.                         if(RTflag==1)
  166.                    {                          
  167.                                 RTflag=0;
  168.                                 write_str(0,0,"   shidu  : ");
  169.                                 write_shu(12,0,DHT11[0]);
  170.                                 t=DHT11[0];
  171.                                 if(DHT11[0]>=60)
  172.                    {
  173.                      Beep=0;
  174.                    }
  175.                                 write_str(14,0,"RH");
  176.                                 write_str(0,1,"   wendu  : ");                                
  177.                             write_shu(12,1,DHT11[2]);
  178.                                 if(DHT11[2]<=10)
  179.                                 {
  180.                                  Beep=0;
  181.                                 }
  182.                             write_str(14,1,"^C");                                
  183.                    }

  184.                 }

  185. }

  186. void main()
  187. {
  188.   lcd_init();  
  189.   delay(1000);

  190.   while(1)
  191.     {
  192.         
  193.    delay(1000);//
  194.    write_byte1();
  195.    DHT11_5();
  196.    delay(1000);
  197.       key();
  198.       HH_H();

  199.      }   
  200.         
  201.    }

  202.                   
  203. void delayms(uint z)
  204. {
  205.   uint i , j;
  206.   for(i=z;i>0;i--)
  207.       for(j=110;j>0;j--);
  208. }
  209. void delayus(uint x)
  210.          {
  211.             uint t, y;
  212.                 for(t=x;t>0;t--)
  213.                      for(y=110;y>0;y--);
  214.         
  215.         }         
  216. void key()
  217.     {
  218.            
  219.                                                          
  220.           {
  221.            if((guan==0&&flag_k==0)||key2==0)                                                                                
  222.            {
  223.                for(j=300;j>0;j--)
  224.                    {
  225.                    fanzhuan();
  226.                    }
  227.                             flag_k=1;
  228.            }   
  229.            
  230.               if(guan==0&&flag_k==1)
  231.            {
  232.                tingzhi();               
  233.            }
  234.            

  235.                    if((guan==1&&flag_k==1)||(yudi==0)||(key1==0))
  236.            {
  237.             
  238.                     for(j=200;j>0;j--)
  239.                    {
  240.                    zhengzhuan();
  241.                    }
  242.                                 
  243.                             flag_k=0;
  244.            
  245.            }
  246.            if((guan==1&&flag_k==0))
  247.            {
  248.               tingzhi();               
  249.            }   
  250.                 }
  251.            }
  252.            
  253. void zhengzhuan(void)           /*正转*/
  254.     {
  255.            uchar a;
  256.                    for(s=10;s>0;s--)
  257.                 {
  258.            for(a=0;a<4;a++)
  259.            {
  260.            dianping=zheng[a];
  261.            delayms(3);
  262.                 }
  263.                  }
  264.         }
  265.         void  fanzhuan(void)        /*反转*/
  266.         {
  267.            uchar a;
  268.           for(s=40;s>0;s--)
  269.           {
  270.           for(a=0;a<4;a++)
  271.           {
  272.           dianping=fan[a];
  273.            delayms(3);
  274.           }        
  275.         }
  276.         }
  277.         void tingzhi()                                /*停止*/
  278.         {
  279.             dianping=0x00;
  280.         }
  281.    

  282. void HH_H()
  283. {

  284.         TMOD=0x21;
  285.         TH1=0xfd;
  286.         TL1=0xfd;
  287.         TH0=(65536-50000)/255;
  288.         TL0=(65536-50000)%255;
  289.         TR1=1;
  290.         ET0=1;
  291.         SM0=0;
  292.         SM1=1;                                                                                                                                          
  293.         REN=1;
  294.         EA=1;
  295.         ES=1;
  296.           }

  297. void chuankou (void) interrupt 4
  298. {
  299.     unsigned char Temp,q;         
  300.    ES=0;
  301.    if(RI)                        
  302.      {
  303.           RI=0;                    
  304.           Temp=SBUF;
  305.          
  306.           q=0;            
  307.           if(Temp=='1'&&q==0)
  308.             {

  309.                    SBUF='a';
  310.                    {
  311.                            for(j=100;j>0;j--)
  312.                    {
  313.                    fanzhuan();
  314.                    }
  315.                         delayus(1000);
  316.                    }
  317.                    q=1;
  318.                    if(Temp=='1'&&q==1)
  319.                    {
  320.                
  321.                       tingzhi();
  322.                              q=0;
  323.                    }
  324.                 }
  325.                  if(Temp=='2'&&q==0)
  326.             {
  327.                   {
  328.                   for(j=100;j>0;j--)
  329.                    {
  330.                    zhengzhuan();
  331.                    }
  332.                
  333.                    q=1;
  334.                   }
  335.                         SBUF='b';
  336.                  if(Temp=='2'&&q==1)
  337.                  {
  338.                  
  339.                  tingzhi();
  340.                           q=0;
  341.                  }
  342.                 }
  343.                  if(Temp=='3')
  344.                 {
  345.                 SBUF='s';
  346.                 while(!TI);        
  347.                 TI=0;
  348.             SBUF='h';
  349.                 while(!TI);        
  350.                 TI=0;
  351.                 SBUF='i';
  352.                 while(!TI);        
  353.                 TI=0;
  354.                 SBUF='3';
  355.                 while(!TI);        
  356.                 TI=0;

  357.                 SBUF='5';
  358.                 while(!TI);        
  359.                 TI=0;
  360.                 SBUF='R';
  361.                 while(!TI);        
  362.                 TI=0;
  363.                 SBUF='H';
  364.                 while(!TI);        
  365.                 TI=0;
  366.                 }
  367.                 if(Temp=='4')
  368.                 {
  369.                 SBUF='w';
  370.                 while(!TI);        
  371.                 TI=0;
  372.             SBUF='e';
  373.                 while(!TI);        
  374.                 TI=0;
  375.                 SBUF='n';
  376.                 while(!TI);        
  377.                 TI=0;
  378. ……………………

  379. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:

智能晾衣系统.rar (1.98 KB, 下载次数: 62)

评分

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

查看全部评分

回复

使用道具 举报

ID:301551 发表于 2019-6-18 00:25 | 显示全部楼层
太厉害
回复

使用道具 举报

ID:372939 发表于 2019-6-18 11:03 | 显示全部楼层
感谢楼主共享精神,智能晾衣架目前越来越多人开始使用,不过目前都是配合智能家居应用的。
回复

使用道具 举报

ID:164041 发表于 2019-10-15 17:45 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

ID:627486 发表于 2019-10-24 11:17 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

ID:627771 发表于 2019-10-25 00:41 | 显示全部楼层
这个我们最近单片机课刚好讲到,挺好。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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