找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 24606|回复: 22
收起左侧

基于STM32的土壤湿度实时监测器的制作 附源码+原理图

  [复制链接]
ID:329761 发表于 2018-11-15 22:47 | 显示全部楼层 |阅读模式
本文设计的是基于单片机STM32F103CBT6的土壤湿度检测系统,主要以广泛应用的土壤湿度传感器YL-69作为温度和湿度的检测,该仪器具有测量精度较高、硬件电路简单、并能很好的进行显示,可测试不同土壤环境湿度的特点。
单片机是系统的控制核心,所以单片机的性能关系到整个系统的好坏。因此单片机的选择,对所设计系统的实现以及功能的扩展有着很大的影响。本次设计是以STM32F103CBT6单片机为核心,配合土壤湿度传感器YL-69,IIC OLED显示器以及按键和蜂鸣器组成的湿度检测系统,通过传感器检测环境中的湿度的变化,可以接收所测土壤环境的湿度信号,并对采集到的数据进行处理和传输,再通过IIC OLED显示器显示湿度,实时监控环境的湿度数据。

硬件方面:
1、系统结构框图
1.png



2、土壤湿度传感器简介:湿度的采集可以用湿度传感器来实现。将湿度传感器看作可调变阻器,当湿度传感器采集到湿度时,电阻值发生变化,湿度最小时的电阻值为 10K,湿度最大时为0.1Ω。 变化的幅度是根据湿度传感器采集到的湿度大小而定。随着电阻值的变化,电路的输出电压也跟着变化。调节电阻值的大小,可得到想要的电压,满足电路的需求。此次设计采用的是土壤湿度传感器YL-69
2.png

土壤湿度传感器原理图

3、土壤湿度传感器特性:(1)   土壤湿度传感器YL-69,表面采用镀镍处理,有加宽的感应面积,可以提高导电性能 ,防止接触土壤容易生锈的问题,延长使用寿命;(2)   采用三线制,接线简单,只需把VCC外接3.3V-5V电压,GND外接数字地,AO“小板模拟量输出接口”接到单片机即可;3)   比较器采用LM393芯片,工作稳定
软件方面:
1、系统软件流程框图
3.png

程序如下:
  1. #include "delay.h"
  2. #include "stm32f10x.h"
  3. #include "OLED_I2C.h"
  4. #include "led.h"
  5. #include "usart.h"        
  6. #include "string.h"        
  7. #include "adc.h"
  8. #include "timer.h"
  9. #include "sys.h"
  10. #include "exti.h"
  11. #include "beep.h"

  12. float temp_avrg=0;
  13. int temp_LL=40;
  14. int shidu;
  15. int num;
  16. int num_adj=1;
  17. int j=0;
  18. int times;
  19. float total=0;

  20. void Hardware_Init(void)   
  21. {        
  22.         Delay_Init();                    
  23.         
  24.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  25.         
  26.         I2C_Configuration();      
  27.         
  28.         OLED_Init();               
  29.         
  30.         Led_Init();                                                                        
  31.         
  32.         uart_init(9600);                                       
  33.         Adc_Init();                                                        
  34.         
  35.         EXTIX_Init();                                                               
  36.         
  37.         BEEP_Init();                                                               
  38. }

  39. void OLED_Show(void)                                
  40. {
  41.         unsigned char i;
  42.         extern const unsigned char BMP2[];
  43.         OLED_CLS();                  
  44.         OLED_DrawBMP(0,0,128,8,(unsigned char *)BMP2);
  45.         
  46.         for(i=10;i<14;i++)            
  47.                 OLED_ShowCN(0,2*(i-10),i);
  48.         
  49.         for(i=14;i<18;i++)            
  50.                 OLED_ShowCN(112,2*(i-14),i);
  51.         
  52.         DelayMs(2500);
  53.         OLED_CLS();                 
  54.         
  55.         for(i=0;i<4;i++)            
  56.                 OLED_ShowCN(31+i*16,1,i);
  57.         
  58.         for(i=18;i<21;i++)           
  59.                 OLED_ShowCN(39+(i-18)*16,5,i);
  60.         
  61.         DelayMs(1500);
  62.         OLED_CLS();                  
  63.         
  64.         for(i=4;i<10;i++)           
  65.                 OLED_ShowCN(14+(i-4)*16,0,i);
  66.                
  67.         for(i=6;i<8;i++)              
  68.                 OLED_ShowCN(0+(i-6)*16,3,i);
  69.                
  70.         OLED_ShowStr(36,4,":",1);
  71.         OLED_ShowStr(90,4,"%",1);
  72.         

  73.         for(i=6;i<8;i++)               
  74.                 OLED_ShowCN(0+(i-6)*16,6,i);
  75.         for(i=21;i<23;i++)               
  76.                 OLED_ShowCN(32+(i-21)*16,6,i);

  77.         
  78.         OLED_ShowStr(70,7,":",1);
  79.         OLED_ShowStr(110,7,"%",1);
  80.         OLED_ShowNum(75,7,temp_LL,1);
  81. int main(void)
  82. {
  83.         num=50;        
  84.          Hardware_Init();     
  85.         printf("\r\n³õʼ»¯Íê³É\r\n");
  86.         OLED_Show();         
  87.         
  88.          while(1)
  89.         {
  90.                  Get_Adc_Average(1,10);
  91.                 DelayMs(500);
  92.                
  93.                 if(shidu>10000)
  94.                         shidu=10000;
  95.                
  96.                 if(shidu<0)
  97.                         shidu=0;
  98.                
  99.                 OLED_ShowNum(60,4,shidu%100,1);
  100.                 OLED_ShowNum(40,4,shidu/100,1);
  101.                 OLED_ShowStr(64,4,".",1);
  102.                
  103.                 if(shidu/100<temp_LL)
  104.                 {
  105.                         BEEP=0;
  106.                         DelayMs(500);
  107.                         BEEP=1;
  108.                         DelayMs(500);
  109.                         
  110.                 }
  111.          }  
  112. }

  113. /*AD转化处理*/
  114. u16  Get_Adc(u8 ch)
  115. {
  116.         
  117.         ADC_RegularChannelConfig(ADC1,ch,1, ADC_SampleTime_239Cycles5);
  118.         
  119.         ADC_SoftwareStartConvCmd(ADC1,ENABLE);
  120.         
  121.         while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
  122.         
  123.         return ADC_GetConversionValue(ADC1);
  124. }
  125. u16 Get_Adc_Average(u8 ch,u8 times)
  126. {
  127.         u32 temp_val=0;
  128.         u8 t;
  129.         for(t=0;t<times;t++)
  130.         {
  131.                 temp_val+=Get_Adc(ch);
  132.                 DelayMs(1);
  133.         }
  134.         temp_avrg=temp_val/times;
  135.         shidu=(4092-temp_avrg)/3292*10000;
  136.         
  137.         
  138.         
  139.         return temp_avrg;
  140. }
复制代码

第一次发帖,多有不足,希望大家提出来和多多包涵,谢谢!
附件在一楼下载

土壤湿度传感器模块电路图.pdf

25.87 KB, 下载次数: 280, 下载积分: 黑币 -5

评分

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

查看全部评分

回复

使用道具 举报

ID:329761 发表于 2018-12-1 20:38 | 显示全部楼层
最近有点忙,现在才看到大家的评论,不好意思。整个工程文件都在这了,大家根据自己需求改吧。

土壤湿度传感器Res式1.2.rar

327.26 KB, 下载次数: 430, 下载积分: 黑币 -5

工程文件

评分

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

查看全部评分

回复

使用道具 举报

ID:420092 发表于 2018-11-18 15:50 | 显示全部楼层
请问我下载了这个压缩包,用keil5 打开,里面没有东西?
回复

使用道具 举报

ID:429320 发表于 2018-11-20 12:47 | 显示全部楼层
1002464445 发表于 2018-11-18 15:50
请问我下载了这个压缩包,用keil5 打开,里面没有东西?

同问,我也是,路径不对,不能用keil5打开编译
回复

使用道具 举报

ID:429320 发表于 2018-11-20 12:51 | 显示全部楼层
可否把core等文件夹也发出来,否则不能用啊
回复

使用道具 举报

ID:429320 发表于 2018-11-20 13:01 | 显示全部楼层
可不可以把整个文件夹发出来,谢谢
回复

使用道具 举报

ID:395134 发表于 2018-11-20 16:40 | 显示全部楼层
怎么打开什么也没有啊
回复

使用道具 举报

ID:335302 发表于 2018-11-20 20:59 | 显示全部楼层
hhhhhh111 发表于 2018-11-20 13:01
可不可以把整个文件夹发出来,谢谢

我也是这么想的   路径错误   这个东西真的不错想法也好   
回复

使用道具 举报

ID:335302 发表于 2018-11-20 21:01 | 显示全部楼层
那个题主的资料很好  但是一些库函数没发出来啊  我解压后发现那个文件夹里  近乎是空的
回复

使用道具 举报

ID:435120 发表于 2018-11-28 17:44 | 显示全部楼层
楼主,能否把整个工程都发出来   我用keil5打开后 发现好多源文件都没有   
回复

使用道具 举报

ID:72576 发表于 2018-12-2 10:22 | 显示全部楼层
用keil5打开后 发现好多源文件都没有  
回复

使用道具 举报

ID:362227 发表于 2018-12-30 10:49 | 显示全部楼层
感谢分享,谢谢
回复

使用道具 举报

ID:516185 发表于 2019-4-19 10:55 | 显示全部楼层
土壤温湿度传感器
回复

使用道具 举报

ID:447904 发表于 2019-6-3 20:44 | 显示全部楼层
索局先生 发表于 2018-12-1 20:38
最近有点忙,现在才看到大家的评论,不好意思。整个工程文件都在这了,大家根据自己需求改吧。

你好  下载下来不是测土壤温湿度的啊,能给详细讲解一下吗
回复

使用道具 举报

ID:585133 发表于 2019-7-16 15:14 | 显示全部楼层
索局先生 发表于 2018-12-1 20:38
最近有点忙,现在才看到大家的评论,不好意思。整个工程文件都在这了,大家根据自己需求改吧。

棒棒的
回复

使用道具 举报

ID:416106 发表于 2019-7-17 16:56 | 显示全部楼层
借鉴一下。。
回复

使用道具 举报

ID:522101 发表于 2019-8-2 10:00 | 显示全部楼层
能否把整个电路发出来?
回复

使用道具 举报

ID:617427 发表于 2019-10-17 22:16 | 显示全部楼层
简述 发表于 2019-6-3 20:44
你好  下载下来不是测土壤温湿度的啊,能给详细讲解一下吗

这个是超声波测距吧
回复

使用道具 举报

ID:662258 发表于 2019-12-15 15:08 | 显示全部楼层
感谢楼主的分享
回复

使用道具 举报

ID:728317 发表于 2020-4-14 11:53 | 显示全部楼层
感谢作者!
回复

使用道具 举报

ID:487588 发表于 2022-1-11 17:42 | 显示全部楼层
请问(4092-temp_avrg)/3292*10000公式怎么得来的?
回复

使用道具 举报

ID:597761 发表于 2022-4-4 20:27 | 显示全部楼层
归刃 发表于 2022-1-11 17:42
请问(4092-temp_avrg)/3292*10000公式怎么得来的?

同问,有理解的没
回复

使用道具 举报

ID:1059782 发表于 2022-12-30 16:13 | 显示全部楼层
请问有没有代码包和pro工程包
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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