找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7643|回复: 15
打印 上一主题 下一主题
收起左侧

单片机智能净水器代码分享,并邀你一起完成家用智能净水器电脑板的完整软硬件整体开发

  [复制链接]
跳转到指定楼层
楼主
ID:522450 发表于 2019-5-5 11:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
100黑币
目前我们有净水器及配件净水器控制电脑板,我刚好想计划学习单片机的东西,所以就想着以现有的项目做切入,在实践中逐渐学习,看看有没有大神帮忙指点,因为看起来很简单,但是自己刚开始摸索,很多东西搞不懂,所以也在这里求助大家:

计划分步完成:
1、完成单片机最基础的控制部分的软件,单片机选型直接借鉴现有的板子;

2、继续借鉴现有的板子,完成外围电路的开发,直接可以控制净水器,直接使用;

3、完成TDS检测这个系统的部分,并整合到整块板上;

3、之前想做这个的时候,已经打样了几块液晶显示板,连接并实现驱动;

4、完成上述部分的同时考虑后续的wifigprs的增加,预留接口和程序实现串口透传等通讯和远程控制功能(现在使用的安卓和苹果app都有,做这个部分的时候先考虑安卓,苹果因为成本问题后面再说);

5、后续可能增加的功能:

  A、增加一个水龙头tds显示和滤芯使用情况显示的分支,包含一个水龙头用的触控开关控制一个电磁阀供水到水龙头(市场有类似产品);

B、通过检测的tds值来动态调整冲洗的频率或者冲洗比例阀的大小,实现动态调整节水的目标;

C、设定一个阈值,tds超过这个值后,进行报警,但并不强制停机(这个也可以通过跳码开关实现超过一个值持续一定的时候后就强制待机);

D、滤芯的时间根据tds的大小动态调整,而不是一个固定时间,这个时间自行拟定一个公式进行核算,譬如设定tds值150的时候是标准值,每增加10%则滤芯使用时间在标准值基础上上调10%计入实际使用时间;

F、滤芯到了设定时间后,进行滤芯更换提醒(这里也可以用拨码开关实现,是否强制停机进入待机状态)


现有的电脑板的主要元器件:
1、  STM8S005K6T6C
2、  STM8S003F3P6
3、  显示驱动HT1621B
4、  泵和进水电磁阀驱动MOS管:4406A或GA 5N2P
5、  Wifi:ESP12F乐鑫
6、  Gprs:广和通G510


现有的电脑板分三种:

1、  普通版,控制净水器运作,可以显示进水出水tds值;

2、  Wifi版,有普通版的功能,有app可以联网,使用乐鑫esp8266联网实现远程查看数据及控制的功能;

3、  Gors版,普通版的功能外,有app可以联网,使用广和通g510联网实现远程查看数据及控制的功能;

普通版的具体功能和运作流程:
1、  控制系统正常运作,大致流程是:
A、 上电,检测低压开关(低压闭合说明自来水接入,没有闭合会提示缺水,并蜂鸣器6声报警,缺水指示灯闪烁,持续闪烁直到低压开关闭合,停止闪烁),
B、 低压开关闭合有水后,检测高压开关(高压开关的作用是检测储水桶的水有没有满,水满则待机,水没有满,高压开关是闭合的,这时候进入制水状态,制水指示灯闪烁直至推出制水状态),
C、 如果高压开关断开说明水满,则进入水满状态,整机待机,水满状态灯闪烁,直至状态改变为止,
D、 如果:曾经低压断开过,则低压再闭合直接先进入冲洗状态,之后再检测高压等等流程,
E、  累计制水6个小时,中间没有因为断电,缺水进入过冲洗状态,那么冲洗一次,这个计时不计待机时间,只计算制水时间(可以考虑只计时泵运转的时间)
F、  连续制水3个小时,连续的,中间没有水满过,则进入系统认为超时,系统进入故障状态,整机待机,故障灯闪烁,需要重新上电才能消除故障状态;
G、 输入:高压开关,低压开关,输出:泵+进水电磁阀(这两个产品运作周期相同,直接并联输出即可),排水电磁阀(排水状态打开其他状态关闭),输出还包括各状态指示灯:制水,水满,缺水,冲洗,故障;

2、  除了基础的控制部分,还有显示屏,显示信息,段码屏,用ht1621(b)驱动,不超过128段;

3、  五级滤芯显示,滤芯会定义一个时间,每个滤芯有不同的时间设置,随着时间的减少,进行倒计时,目前的状态是五段逐渐变暗,直到最后全部变暗,同时考虑另外的一种显示方式,一个灯,不断变暗直至灭掉;

4、  单独一个单片机实现两路tds检测,显示在面板上(这个液晶面板已经有打样,后续批量的时候可能要稍微调整,但大体上不变);

5、  Pcb板尺寸130*60mm,显示屏窗口尺寸30*70mm,这个是通用版的尺寸。

附件是CSDN下载的一个STM32的智能净水器的源码,但是因为没有电路原理图等我也看的不是很明白,分享给大家一起看看吧。

有愿意一起合作的,我也没有能力支付什么费用,只能说,有机会做成成品,标注上你的名字或id吧,另外可以考虑帮助最多的以后购买产品可以有优惠,因为实际的支付能力有限,希望你能喜欢吧。

希望各位大咖恢复一些相关的内容或者代码,谢谢!

有意一起合作搞一下的兄弟姐妹加我微信:tigerlyt (不知道能不能发联系方式,如果不合适帮忙删掉就好了)

现有的板子的样子:




我自己画的最简单的原理图和流程图:





准备后期可以加的龙头:


现在的板子实用的状态:


佛山云米科技小米智能净水器源码用IAR设计的基于STM32的程序:下载 智能净水器.7z (2.62 MB, 下载次数: 107)

我自己的单片机程序和思路,不过目前是不可行的,请指出一些错误吧,谢谢:

  1. /*Main.c file generated by New Project wizard
  2. *
  3. * Created:   4 17 2019
  4. * Processor: 89C52
  5. * Compiler:  Keil for 89C52
  6. ****/

  7. #include <reg52.h>
  8. #include <stdio.h>
  9. #include "main.h"
  10. #include "delay.h"
  11. void delay_ms(uint timer)
  12. {
  13.         uchar j=0;
  14.         while(timer--)
  15.         {
  16.                 for(j=110;j>0;j--)
  17.             {
  18.                                 ;
  19.                         }
  20.         }
  21. }
  22. sbit LOW=P2^0;   //低压开关
  23. sbit HIGH=P2^1;   //高压开关
  24. sbit LED1=P1^0;  //冲洗指示灯
  25. sbit LED2=P1^1;   //水满指示灯
  26. sbit LED3=P1^2;    //缺水指示灯
  27. sbit LED4=P1^3;    //故障指示灯
  28. sbit LED5=P1^4;     //制水指示灯
  29. sbit run=P1^5;     //泵+进水阀
  30. sbit flow=P1^6;    //排水阀
  31. sbit dula=P2^6;
  32. sbit wela=P2^7;
  33. /*void display(uchar,uchar);
  34. uchar code table[]={
  35. 0x3f,0x06,0x5b,0x4f,
  36. 0x66,0x6d,0x7d,0x07,
  37. 0x7f,0x6f,0x77,0x7c,
  38. 0x39,0x5e,0x79,0x71};*/
  39. uchar num1,num2,flag,shi,ge,shine;
  40. uint num,numx,aa;
  41. void main()
  42. {
  43.                                 TMOD=0X11;
  44.         TH0=(65536-45872)/256;
  45.         TL0=(65536-45872)%256;
  46.         TH1=(65536-45872)/256;
  47.         TL1=(65536-45872)%256;
  48.         EA=1;
  49.         ET0=1;
  50.         ET1=1;
  51.         TR0=1;
  52.         TR1=1;
  53.               num=0;
  54.         
  55.           //display (shi,ge);
  56.         
  57.         
  58.         while(1)
  59.         {        
  60.           if(LOW==0|flag==1)    //检测有无自来水和连续制水6小时
  61.           {
  62.                         delay_ms(10);  //延时去抖
  63.                         if(LOW==0|flag==1)
  64.                         {
  65.                                 run=0;        //有水,冲洗
  66.                           flow=0;
  67.                           shine=1;
  68.                                 aa=0;
  69.                           delay_ms(18000);  //冲洗延时18秒
  70.                          }
  71.                          else if(HIGH==0)   //高压没动作,水桶没满,进入制水
  72.                          {
  73.                                  run=0;
  74.                                  flow=1;
  75.                                  shine=5;
  76.                                  num=0;
  77.                                  numx=aa;
  78.                                                   if(num==10800)
  79.                                                         {
  80.                                                                 num=0;
  81.                                   shine=4;
  82.                                                                 run=1;
  83.                                                                 flow=1;
  84.                                                          }
  85.                                    
  86.                                                   if(numx==21600)
  87.                                                   {
  88.                                                     numx=0;
  89.                                                           flag=1;
  90.                                                   }                 
  91.                          }
  92.                          else
  93.                                  {
  94.                             num=0;
  95.                                         aa=numx;
  96.                             shine=2;
  97.                                         run=1;
  98.                                         flow=1;
  99.                     }
  100.           }
  101.                 else
  102.                   {
  103.                         shine=3;
  104.                         run=1;
  105.                         flow=1;
  106.                         }
  107.         switch(shine)
  108.         {
  109.                 case 1:
  110.                           while(1)
  111.                                 {
  112.                                   delay_ms(500);
  113.                                         LED1=~LED1;
  114.                                 }
  115.                 case 2:
  116.                           while(1)
  117.                                 {
  118.                                   delay_ms(500);
  119.                                         LED2=~LED2;
  120.                                 }
  121.     case 3:        
  122.                           while(1)
  123.                                 {
  124.                                   delay_ms(500);
  125.                                         LED3=~LED3;
  126.                                 }
  127.     case 4:
  128.                           while(1)
  129.                                 {
  130.                                   delay_ms(500);
  131.                                         LED4=~LED4;
  132.                                 }
  133.     case 5:        
  134.         while(1)
  135.                                 {
  136.                                   delay_ms(500);
  137.                                         LED5=~LED5;
  138.                                 }                        
  139.         
  140.            }
  141.                 }
  142.         
  143.      */
  144.    void T0_time() interrupt 0
  145.       {
  146.             TH0=(65536-45872)/256;
  147.             TL0=(65536-45872)%256;
  148.             num1++;
  149.                                 if(num1==20)
  150.                                 {
  151.                                         num1=0;
  152.                                         num++;
  153.                                        
  154.                                 }
  155.            }
  156.       
  157.    void T1_time() interrupt 1
  158.          {
  159.                TH1=(65536-45872)/256;
  160.          TL1=(65536-45872)%256;
  161.                num2++;
  162.                      if(num2==20)
  163.                                   {
  164.                                         num2=0;
  165.                                         numx++;
  166.                                   }
  167.                 }
复制代码

124/128段液晶显示板:







分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:522450 发表于 2019-5-5 21:16 | 只看该作者
没人有兴趣吗?来人看看呗。
回复

使用道具 举报

板凳
ID:236308 发表于 2019-5-5 23:06 | 只看该作者
MARK
回复

使用道具 举报

地板
ID:522450 发表于 2019-5-6 11:07 | 只看该作者
好像代码附件不对的,正常是13.8m的,现在看怎么才二点几兆(管理压缩了)


小米智能净水器源码

回复

使用道具 举报

5#
ID:522450 发表于 2019-5-9 10:23 | 只看该作者
小米净水器,佛山云米科技,源码发不出来,不知道为什么

需要的联系我,我发给你
回复

使用道具 举报

6#
ID:638679 发表于 2019-11-9 15:52 | 只看该作者
正准备学习,不知道从何下手,能发一份源代码给我吗?再买一个能调试程序的电脑板,可以吗?谢谢!
回复

使用道具 举报

7#
ID:160450 发表于 2019-11-17 13:41 | 只看该作者
tigerlyt 发表于 2019-5-9 10:23
小米净水器,佛山云米科技,源码发不出来,不知道为什么

需要的联系我,我发给你

1037157350@qq.com
回复

使用道具 举报

8#
ID:403593 发表于 2019-12-8 16:13 | 只看该作者
流程图收了,感谢楼主分享!准备用51做一个简单的控制板,直要几个指示灯就行了,楼主有兴趣的话加QQ一起交流(495486180)
回复

使用道具 举报

9#
ID:687585 发表于 2020-1-30 03:39 来自手机 | 只看该作者
zj1037157350 发表于 2019-11-17 13:41

我也想學,可以也發一份給我嗎?
hoattar@msn.com
回复

使用道具 举报

10#
ID:930871 发表于 2021-6-1 18:54 | 只看该作者
落后了,现在都到了,物联网控制板时代
回复

使用道具 举报

11#
ID:930871 发表于 2021-6-1 18:56 | 只看该作者
现在已经是单片机,控制
回复

使用道具 举报

12#
ID:1048692 发表于 2023-12-5 12:20 | 只看该作者
要合作开发净水器电路板不,我已经写完了完整代码
回复

使用道具 举报

13#
ID:97678 发表于 2023-12-6 08:02 | 只看该作者
ljfllp 发表于 2023-12-5 12:20
要合作开发净水器电路板不,我已经写完了完整代码

怎么联系你啊。想要 程序。
回复

使用道具 举报

14#
ID:1092027 发表于 2024-3-23 17:08 | 只看该作者
刚开始学51单片机,对这个感兴趣,有没有一起学习研究的小伙伴啊?
回复

使用道具 举报

15#
ID:420836 发表于 2024-3-24 02:14 | 只看该作者
这是一个非常有趣的话题。 感谢您带领我们深入讨论智能饮水机。
回复

使用道具 举报

16#
ID:1114133 发表于 2024-3-25 15:40 | 只看该作者
希望能互相交流,萌新程序员
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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