国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

水濁度傳感器

zzbo / 3024人閱讀

摘要:傳感器內部是一個紅外線對管,當光線穿過一定量的水時,光線的透過量取決于該水的污濁程度,水越污濁,透過的光就越少。根據上面的原理可知,了解到只要獲取到電壓就可以獲取水濁度,所以采取模擬數字轉換來實現獲取到水濁度。

水濁度傳感器

文章目錄

硬件使用

  • STM32F103 RCT6 (32芯片)
  • TSW-30 (水濁度傳感器)

軟件使用

  • keil5 MDK
  • 串口調試助手

實現說明

?

1. 水濁度傳感器原理

??這款濁度傳感器利用光學原理,通過溶液中的透光率和 散射率來綜合判斷濁度情況。傳感器內部是一個紅外線對管,當光線穿過一定量 的水時,光線的透過量取決于該水的污濁程度,水越污濁,透過的光就越少。光接收端把透過的光強度轉換為對應的電流大小,透過的光多,電流大,反之透過的光少,電流小。

? ??根據上面的原理可知,了解到 只要獲取到電壓就可以獲取水濁度,所以采取 ADC 模擬/數字轉換來實現獲取到水濁度。

??

2. 具體操作代碼說明

?(1)首先先定義 TSW30(水濁度傳感器)上所對應的 LED 引腳,方便后續校驗

GPIO_InitTypeDef GPIO_InitStrue;		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);		GPIO_InitStrue.GPIO_Mode = GPIO_Mode_Out_PP;										GPIO_InitStrue.GPIO_Pin = GPIO_Pin_13;	GPIO_InitStrue.GPIO_Speed = GPIO_Speed_50MHz;		GPIO_Init(GPIOC,&GPIO_InitStrue);

?(2)再定義 STM32 上對應的 模擬 引腳和 ADC 引腳,這個需要根據下面的圖來進行定義
?

?

?博主這邊采取的是 通道1 PA1 口 的 ADC1

?大概實現步驟為:

- 開啟 PA 口時鐘和 ADC1 時鐘,設置 PA1 為模擬輸入- 復位 ADC1, 同時設置 ADC1 分頻因子- 初始化 ADC1 參數- 使能 ADC 并校準

?所以可得出的代碼為:

	GPIO_InitTypeDef GPIO_InitStruct;	ADC_InitTypeDef ADC_InitStruct;		RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1, ENABLE);	RCC_ADCCLKConfig(RCC_PCLK2_Div4);			GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;		GPIO_Init( GPIOA, &GPIO_InitStruct);		ADC_DeInit(ADC1);	ADC_InitStruct.ADC_ContinuousConvMode = DISABLE;	ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;	ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;	ADC_InitStruct.ADC_Mode = ADC_Mode_Independent;	ADC_InitStruct.ADC_NbrOfChannel = 1;	ADC_InitStruct.ADC_ScanConvMode = DISABLE;		ADC_Init(ADC1,&ADC_InitStruct);		ADC_Cmd(ADC1,ENABLE);  //使能 ADC		ADC_ResetCalibration( ADC1); //使能復位校準	while(ADC_GetResetCalibrationStatus(ADC1)); //等待復位校準結束		ADC_StartCalibration( ADC1);	while(ADC_GetCalibrationStatus(ADC1));

? ?注意: 需要額外注意的是 RCC_ADCCLKConfig(RCC_PCLK2_Div4); //需要對 ADC時鐘進行分頻

?

3. 配置通道規則

ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_1Cycles5);參數1: ADCx 選擇 ADC 外設參數2: 設置 ADC 通道  (更多參閱 STM32 庫函數 中的 ADC_Channel)參數3: 規則組采樣順序    --這里我們只使用一種,所以直接定義為 Rank = 1 即可參數四: 指定 ADC 通道的采樣時間值   

?

4. 開啟軟件轉換

ADC_SoftwareStartConvCmd( ADC1, ENABLE);

?

5. 判斷轉換完成,讀取 ADC 值

while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)); //判斷是否轉換結束   	return ADC_GetConversionValue(ADC1); //返回最近一次 ADC 采取的數值**再寫個函數 取平均值,大概每 10 次取平均值即可**

? ?

6.計算水濁度

? ?根據商家提供的計算公式或例程可以計算出 所對應的 水濁度信息 (獲取電流)

	adcx=Get_Adc_Average(ADC_Channel_1,10); //獲取到 電壓平均值		temp=(float)adcx*(3.3/4096);	temp = temp*100/3.3;	if(temp > 100) temp = 100;

?

7.通過串口發送到串口調試助手

(1)初始化串口

GPIO_InitTypeDef GPIO_InitStrue;	USART_InitTypeDef USART_InitStrue;	NVIC_InitTypeDef NVIC_InitStrue;		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //使能 USART1		GPIO_InitStrue.GPIO_Mode = GPIO_Mode_AF_PP;	//復用推挽輸出								//USART1_Tx  USB Rx  STM32中為 Tx,需要接到 USB轉TTL串口中的 Rx	GPIO_InitStrue.GPIO_Pin = GPIO_Pin_9;	GPIO_InitStrue.GPIO_Speed = GPIO_Speed_10MHz;		GPIO_Init(GPIOA,&GPIO_InitStrue);		//USART1_Rx  USB Tx	GPIO_InitStrue.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空輸入						GPIO_InitStrue.GPIO_Pin = GPIO_Pin_10;	GPIO_InitStrue.GPIO_Speed = GPIO_Speed_10MHz;		GPIO_Init(GPIOA,&GPIO_InitStrue);		USART_InitStrue.USART_BaudRate = 115200;	USART_InitStrue.USART_HardwareFlowControl = USART_HardwareFlowControl_None;	USART_InitStrue.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;			USART_InitStrue.USART_Parity = USART_Parity_No; 	USART_InitStrue.USART_StopBits = USART_StopBits_1; 	USART_InitStrue.USART_WordLength = USART_WordLength_8b;		USART_Init(USART1,&USART_InitStrue);		USART_Cmd(USART1,ENABLE);															USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); 		NVIC_InitStrue.NVIC_IRQChannel = USART1_IRQn;//設置中斷	NVIC_InitStrue.NVIC_IRQChannelCmd = ENABLE;	   	NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority = 1; //搶占優先級1	NVIC_InitStrue.NVIC_IRQChannelSubPriority = 1;			//子優先級1		NVIC_Init(&NVIC_InitStrue);

?
(2)中斷發送數據

void USART1_IRQHandler(void)                {			  u8 s;	  while(*s!="/0")	{ 		while(USART_GetFlagStatus(USART1,USART_FLAG_TC )==RESET);			USART_SendData(USART1,*s);		s++;	}} 

?

最后

? ?第一次嘗試編寫博客,若是有什么建議,歡迎批評指出。

? ?后續會逐步分塊更新,并會在最后一篇文章上傳源代碼。

? ?若是該文章對你有作用或是覺得文章寫得還行,幫忙點點贊,三連!

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/121369.html

相關文章

  • 基于ShineBlink物聯網開發板和機智云平臺開發的“針對短期內寵物無人照顧的智能寵物屋”系統

    摘要:為了解決人們因工作出差旅游等短期時間內家中寵物無人照顧的問題,我們基于物聯網開發板機智云平臺和各類傳感器模塊研究設計了一套針對短期內寵物無人照顧的智能寵物屋系統。 正式介紹作品前先說明一下,我是湖南文理學院計算機與電氣工程學院的一名大三學生,我叫陳海濤。作品全部內容均為個人創意、個人設計并手...

    jerryloveemily 評論0 收藏0
  • “云原生邊緣計算”會成為“嵌入式計算”的終結者嗎?

    摘要:全球最大的開源基金會軟件基金會的董事甚至認為,云原生邊緣計算意味著嵌入式計算的終結。這次我們不妨更加透徹的談談,云原生邊緣計算和嵌入式計算,將如何融合相互借勢。云原生應用,即指專門為在云平臺部署和運行而設計的應用。這是我在【物女心經】專欄寫的第105篇文章。嵌入式計算已經笑傲江湖多年,然而,最近它的地位似乎正在受到某種撼動。全球最大的開源基金會——Apache軟件基金會的董事Roman Sh...

    chnmagnus 評論0 收藏0
  • 邊緣計算對企業的業務適用嗎?

    摘要:對于采取邊緣計算的企業來說,制定全面戰略的五個主要組成部分如下確定目標和要求,包括業務目標驅動因素以及品牌,客戶和投資回報要求。 像大多數新的IT技術發展一樣,邊緣計算并不是一場革命,相反,它更像是一個進化。邊緣計算的根源在于早期的內容交付和點對點網絡以及網格計算。然而,隨著網絡,計算和分析技術能力的提高以及...

    zhangfaliang 評論0 收藏0
  • 邊緣計算對企業的業務適用嗎?

    摘要:對于采取邊緣計算的企業來說,制定全面戰略的五個主要組成部分如下確定目標和要求,包括業務目標驅動因素以及品牌,客戶和投資回報要求。 像大多數新的IT技術發展一樣,邊緣計算并不是一場革命,相反,它更像是一個進化。邊緣計算的根源在于早期的內容交付和點對點網絡以及網格計算。然而,隨著網絡,計算和分析技術能力的提高以及大規模數據增長的需求,意味著計算對于IT管理人員而言將變得越來越重要。?隨著大量數據...

    whjin 評論0 收藏0

發表評論

0條評論

zzbo

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<