国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32-土壤濕度傳感器

這篇具有很好參考價(jià)值的文章主要介紹了STM32-土壤濕度傳感器。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

0 說明

1 傳感器介紹

?2 代碼說明

? 2.1 ADC初始化函數(shù)(adc.c)

? 2.2 GPIO初始化函數(shù)

? 2.3 主函數(shù)


0 說明

????????本篇文章主要是說明怎么使用STM32單片機(jī)讀取土壤濕度傳感器采集到的數(shù)據(jù),包括模擬和數(shù)字?jǐn)?shù)據(jù),并且附帶著STM32所需要的全部代碼,所使用的土壤濕度傳感器如下圖所示。

附:使用單片機(jī)STM32f103系列

STM32-土壤濕度傳感器

1 傳感器介紹

????????該傳感器具有數(shù)字開關(guān)量輸出(0和1)和模擬量AO電壓輸出兩種輸出形式。 ? ??

? ? ? ? 接上5V電源,電源燈亮,當(dāng)濕度低于設(shè)定的閾值時(shí),DO輸出為高電平,開關(guān)指示燈滅;高于設(shè)定的閾值時(shí),DO輸出為低電平,開關(guān)指示燈亮。AO模擬輸出,可以連接單片機(jī)的AD口檢測(cè)土壤濕度精確數(shù)值。

????????電位器是用于土壤濕度的閥值調(diào)節(jié),順時(shí)針調(diào)節(jié),控制的濕度會(huì)越大,逆時(shí)針越小,通過電位器調(diào)節(jié)土壤濕度閾值,當(dāng)土壤濕度低于設(shè)定的閾值時(shí),模塊輸出高電平,高于設(shè)定的閾值時(shí),模塊輸出低電平。

STM32-土壤濕度傳感器

2 代碼說明

代碼主要包括主函數(shù)(main.c)、ADC初始化函數(shù)(adc.c)、GPIO初始化函數(shù)

? ?2.1 ADC初始化函數(shù)(adc.c)

ADC的初始化都差不多,需要注意的是ADC的采集函數(shù)

這里采用ADC1通道的PA5進(jìn)行采集AO的信息

#include "stm32f10x.h"    //包含需要的頭文件
#include "delay.h"	      //包含需要的頭文件
 
 
/*函數(shù)名:初始化ADC */									   
void Adc_Init(void)
{    
	GPIO_InitTypeDef      GPIO_InitStructure;                             //定義一個(gè)設(shè)置GPIO的變量
	ADC_InitTypeDef       ADC_InitStructure;                              //定義一個(gè)設(shè)置ADC的變量
 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );	              //使能GPIOA通道時(shí)鐘
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE );	              //使能ADC1通道時(shí)鐘
	
	RCC_ADCCLKConfig(RCC_PCLK2_Div6);                                      //設(shè)置ADC分頻因子6 72M/6=12,ADC最大時(shí)間不能超過14M
 
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;        //準(zhǔn)備設(shè)置PA5
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;		                   //模擬輸入引腳
	GPIO_Init(GPIOA, &GPIO_InitStructure);                                 //設(shè)置PA5
    	
	ADC_DeInit(ADC1);                                                      //復(fù)位ADC1,將外設(shè) ADC1 的全部寄存器重設(shè)為缺省值
 
	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;	                   //ADC工作模式:ADC1和ADC2工作在獨(dú)立模式
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;	                       //模數(shù)轉(zhuǎn)換工作在單通道模式
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;	                   //模數(shù)轉(zhuǎn)換工作在單次轉(zhuǎn)換模式
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;	   //轉(zhuǎn)換由軟件而不是外部觸發(fā)啟動(dòng)
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;	               //ADC數(shù)據(jù)右對(duì)齊
	ADC_InitStructure.ADC_NbrOfChannel = 1;	                               //順序進(jìn)行規(guī)則轉(zhuǎn)換的ADC通道的數(shù)目
	ADC_Init(ADC1, &ADC_InitStructure);                                    //根據(jù)ADC_InitStruct中指定的參數(shù)初始化外設(shè)ADCx的寄存器   
 
	ADC_Cmd(ADC1, ENABLE);	                                               //使能指定的ADC1	
	ADC_ResetCalibration(ADC1);	                                           //使能復(fù)位校準(zhǔn)  	 
	while(ADC_GetResetCalibrationStatus(ADC1));                     	   //等待復(fù)位校準(zhǔn)結(jié)束	
	ADC_StartCalibration(ADC1);	                                           //開啟AD校準(zhǔn)
	while(ADC_GetCalibrationStatus(ADC1));	                               //等待校準(zhǔn)結(jié)束
}
 
/*-------------------------------------------------*/
/*函數(shù)名:獲得ADC結(jié)果                              */
/*參  數(shù):ch: 通道數(shù)                               */
/*-------------------------------------------------*/	
int Get_Adc(int ch)   
{	
	ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );	//ADC1,ADC通道,采樣時(shí)間為239.5周期	  			    
	ADC_SoftwareStartConvCmd(ADC1, ENABLE);		                        //使能指定的ADC1的軟件轉(zhuǎn)換啟動(dòng)功能	
	while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));                     //等待轉(zhuǎn)換結(jié)束
	return ADC_GetConversionValue(ADC1);	                            //返回最近一次ADC1規(guī)則組的轉(zhuǎn)換結(jié)果
}
/*-------------------------------------------------*/
/*函數(shù)名:平均多次ADC結(jié)果,提高精度                */
/*參  數(shù):channel: 通道數(shù)                               */
/*參  數(shù):count: 平均次數(shù)                          */
/*-------------------------------------------------*/	
int Get_Adc_Average(int channel,int count)
{
	int sum_val=0;
	char t;
	
	for(t=0;t<count;t++)             //循環(huán)讀取times次
	{
		sum_val+=Get_Adc(channel);       //計(jì)算總值
		Delay_Ms(5);                 //延時(shí)
	}
	return sum_val/count;           //返回平均值
} 

? 2.2 GPIO初始化函數(shù)

本個(gè)例程采用的是PA0讀取DO的狀態(tài),使用#define宏定義

????????2.2.1 gpio.h

#ifndef __GPIO_H
#define __GPIO_H 
 
#define gpio_readA  GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)  //讀取GPIOA的P0口電平(0/1)
 
void Gpio_Init(void);         //延時(shí)初始化函數(shù)
int Gpio_read(void);        //讀取A0口
 
#endif

2.2.1 gpio.c文章來源地址http://www.zghlxwxcb.cn/news/detail-406559.html

#include "stm32f10x.h"
#include "delay.h"
#include "gpio.h"
#include "usart1.h"
 
void Gpio_Init(void)
{    	 
	GPIO_InitTypeDef GPIO_InitStructure;                     //定義一個(gè)設(shè)置GPIO的變量
	
	
 RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);   //使能GPIOA端口時(shí)鐘
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;       //設(shè)置PA0/1
//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;   		   //下拉輸入,默認(rèn)狀態(tài)是低電平
//	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;   		   //上拉輸入,默認(rèn)狀態(tài)是高電平 
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;    //浮空輸入
 GPIO_Init(GPIOA, &GPIO_InitStructure);            		 //設(shè)置PA
	
}
 
int Gpio_read(void)
{
	if(gpio_readA == 1)
	{ 
		Delay_Ms(100);
		return 1;
	}
	return 0;
}

? 2.3 主函數(shù)

 
#include "stm32f10x.h"  //包含需要的頭文件
#include "main.h"       //包含需要的頭文件
#include "delay.h"      //包含需要的頭文件
#include "usart1.h"     //包含需要的頭文件
#include "adc.h"        //包含需要的頭文件
#include "gpio.h"       //包含需要的頭文件
 
int main(void) 
{
	float raindata;         //接受雨滴數(shù)據(jù)
		
	Delay_Init();           //延時(shí)功能初始化              
	Usart1_Init(9600);      //串口1功能初始化,波特率9600
	Gpio_Init();            // PA0,讀取數(shù)字?jǐn)?shù)據(jù)
	Adc_Init();             //ADC初始化
	
	while(1)                //主循環(huán)
	{		
		u1_printf("DO:%d\r\n",Gpio_read());
		if(Gpio_read()){
			u1_printf("沒有雨水出現(xiàn)!\r\n");
		}
		else{
			u1_printf("有雨水出現(xiàn)!\r\n");
		}
		raindata = (float)(Get_Adc_Average(5,20))*(3.3/4096);
		u1_printf("rain:%.2f\r\n",raindata);
		Delay_Ms(1000);                                                   //延時(shí)
	}
}

到了這里,關(guān)于STM32-土壤濕度傳感器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • STM32+DHT11溫濕度傳感器

    STM32+DHT11溫濕度傳感器

    DATA 用于微處理器與 DHT11之間的通訊和同步,采用單總線數(shù)據(jù)格式,一次 通訊時(shí)間4ms左右,數(shù)據(jù)分小數(shù)部分和整數(shù)部分,具體格式在下面說明,當(dāng)前小數(shù) 部分用于以后擴(kuò)展,現(xiàn)讀出為零.操作流程如下: 一次完整的數(shù)據(jù)傳輸為40bit,高位先出。 數(shù)據(jù)格式:8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)

    2023年04月13日
    瀏覽(90)
  • STM32—DHT11溫濕度傳感器

    STM32—DHT11溫濕度傳感器

    (1).下圖一是DHT11總的時(shí)序圖。 (2).圖二對(duì)應(yīng)圖一的左邊黑色部分,圖三對(duì)應(yīng)圖一的綠色部分,圖四的左部分圖對(duì)應(yīng)圖一的紅色部分,圖四的右部分對(duì)應(yīng)圖一的黃色部分。 (3).首先圖二部分是單片機(jī)向DHT11發(fā)送我要開始的信號(hào),此時(shí)單片機(jī)IO口處于輸出模式,輸出低電平至少18MS,

    2024年02月19日
    瀏覽(90)
  • STM32--DHT11溫濕度傳感器

    STM32--DHT11溫濕度傳感器

    本文介紹基于STM32F103實(shí)現(xiàn)的DHT11溫濕度傳感器數(shù)據(jù)采集及顯示,完整代碼見文末鏈接 一、DHT11傳感器簡介 DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度復(fù)合傳感器。它應(yīng)用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品具有極高的可靠性與卓越的長期

    2024年02月16日
    瀏覽(96)
  • STM32 —— 溫濕度( AHT20 )傳感器入門

    STM32 —— 溫濕度( AHT20 )傳感器入門

    溫濕度的具體使用方法可以看官方給出的基于 STM32 的歷程,這里只進(jìn)行簡單介紹 官方歷程如下: AHT20-21 DEMO V1_3(stm32) AHT20在STM32上的例程 V1.4 DHT20 是 DHT11 的全新升級(jí)產(chǎn)品,配置了專用的 ASIC 傳感器芯片、高性能的半導(dǎo)體硅基電容式濕度傳感器和一個(gè)標(biāo)準(zhǔn)的片上溫度傳感器,并

    2024年02月07日
    瀏覽(58)
  • stm32讀取DHT11溫濕度傳感器

    stm32讀取DHT11溫濕度傳感器

    我們知道DHT11是單總線協(xié)議,只有一根數(shù)據(jù)線。 且內(nèi)部有個(gè)上拉電路(下圖)。那么數(shù)據(jù)線默認(rèn)就是高電平那接下來就可以講解主機(jī)如何和DHT11通訊的 讀取DHT11的芯片手冊(cè),可以知道,DHT11一次完成的數(shù)據(jù)輸出是40bit,高位先出。 格式:8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù) +8bi溫

    2024年02月09日
    瀏覽(94)
  • stm32連接DHT11溫濕度傳感器

    stm32連接DHT11溫濕度傳感器

    目錄 1. DHT11簡介 1.1. 連接電路? 1.2. 串行接口 (單線雙向) ?2. cubeMX設(shè)置 3. 代碼開發(fā) ?3.1. 實(shí)現(xiàn)定時(shí)函數(shù) 3.2. 打開串口調(diào)試 3.4. 測(cè)試代碼實(shí)現(xiàn) 4. 運(yùn)行效果 信息如下: 建議連接線長度短于20米時(shí)用5K上拉電阻,大于20米時(shí)根據(jù)實(shí)際情況使 用合適的上拉電阻 ?DHT11的供電電壓為 3-5

    2023年04月16日
    瀏覽(95)
  • STM32+DHT11采集溫濕度傳感器數(shù)據(jù)

    STM32+DHT11采集溫濕度傳感器數(shù)據(jù)

    ????????DHT11 是一款濕溫度一體化的數(shù)字傳感器。該傳感器包括一個(gè)電阻式測(cè)濕元件和一個(gè) NTC 測(cè)溫元件,并與一個(gè)高性能 8 位單片機(jī)相連接。通過單片機(jī)等微處理器簡單的電路連接就能夠 實(shí)時(shí)的采集本地濕度和溫度。 DHT11 與單片機(jī)之間能采用簡單的單總線進(jìn)行通信,僅

    2024年02月07日
    瀏覽(39)
  • 【STM32(HAL庫)--DHT11溫濕度傳感器】

    【STM32(HAL庫)--DHT11溫濕度傳感器】

    stm32控制DHT11溫濕度傳感器,進(jìn)行溫濕度的讀取.以下是自己的一點(diǎn)學(xué)習(xí)過程和心得,若有不妥之處,還望各位大佬指正,在下感激不盡. DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度復(fù)合傳感器 。 它應(yīng)用專用的數(shù)字模塊采集技術(shù)溫濕度傳感技術(shù), 確保產(chǎn)品具有極高

    2024年04月15日
    瀏覽(28)
  • 嵌入式 STM32 SHT31溫濕度傳感器

    嵌入式 STM32 SHT31溫濕度傳感器

    目錄 簡介 1、原理圖? 2、時(shí)序說明? 數(shù)據(jù)傳輸 起始信號(hào)? 結(jié)束信號(hào)? 3、SHT31讀寫數(shù)據(jù)? SHT31指令集 讀數(shù)據(jù)? 溫濕度轉(zhuǎn)換 4、溫濕度轉(zhuǎn)換應(yīng)用? sht3x初始化 讀取溫濕度? 什么是SHT31?? 一主機(jī)多從機(jī)--通過尋址的方式--每個(gè)從機(jī)都有唯一的地址(器件地址0x44+引腳地址)1 + 讀寫位

    2024年02月01日
    瀏覽(17)
  • 【STM32】DHT11溫濕度模塊傳感器詳解&代碼

    【STM32】DHT11溫濕度模塊傳感器詳解&代碼

    DHT11是數(shù)字溫濕度傳感器,測(cè)量范圍:濕度20%-95%,溫度0-50℃,廣泛應(yīng)用于加濕器、溫濕度計(jì)、空調(diào)、汽車等領(lǐng)域。 如上圖DATA引腳用于MCU與DHT11之間的通訊和同步,采用單總線數(shù)據(jù)格式,一次通訊時(shí)間4ms左右(超時(shí)時(shí)間的判斷)。一次完整的數(shù)據(jù)傳輸為40bit,高位先出(MSB最高

    2024年02月12日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包