摘要:傳感器傳感器簡介串口與并口單工與半雙工上拉電阻是用來供應電流的下拉電阻是用來分擔電流的傳感器串行接口收發數據分析的讀寫時序傳感器簡介智能終端是在感知層如果想要感知采集數據必定需要使用傳感器市面上的傳感器有很多檢測氣體的
智能終端是在感知層,如果想要感知采集數據必定需要使用傳感器
市面上的傳感器有很多:
檢測氣體的 溫度 濕度 稀有氣體含量(CO CO2 O2 甲醛 乙醇 甲烷 …)
檢測液體的 溫度 PH值 渾濁 液位
檢測固體的 濕度 元素含量
檢測人體 溫度 血壓 心率 血糖…傳感器的接口也有很多:
GPIO接口 串口接口(USART/UART IIC IIS SPI …) 并口接口數字型傳感器 和 模擬型傳感器
傳感器可以從采集種類、接口種類、采集到的數據種類分為很多種
串口:串行的接口或者串行的通信接口|串行的通訊接口,是指數據按照串行的方式進行傳輸(是指數據一位一位進行傳輸)
并口:并行的接口或者并行的通信接口|并行的通訊接口,是指數據按照并行的方式進行傳輸(是指數據多位多位進行傳輸)
注意:并不是說并口可以一次發送多位數據就說明并口比串口通信快,實際上正好相反,串口通信速度要比并口快
并口有很多的限制,(數據線與數據線之間會有電平干擾、需要同時發送同時接收)
單工模式 A–>---->–B
半雙工模式 A–>----<–B
全雙工模式 ---->-----
略…
從手冊中了解DHT11傳感器:
需要把形參c保存的8bit二進制數據,通過高位先出的方式進行傳輸
假設:MCU連接了PC9管腳,可以使用位帶發數據PCOut(9) 收數據PCIn(9)
數據線低電平代表數據0,數據線高電平代表數據1
/*發送數據*/void func(u8 c)//10111110{ u8 i = 0;//循環變量 for(i = 0; i < 8; i++) { if(c & 0x80) PCOut(9) = 1; else PCOut(9) = 0; c <<= 1;//01111100 }}
需要接收8bit二進制數據,傳感器通過高位先出的方式發送數據
假設:MCU連接了PC9管腳,可以使用位帶發數據PCOut(9) 收數據PCIn(9)
數據線低電平代表數據0,數據線高電平代表數據1
u8 func(void){ u8 c = 0;//用來接收數據的變量 u8 i = 0;//循環變量 for(i = 0; i < 8; i++) { c <<= 1;//c >>= 1; if(PCIn(9) == 1) c |= 1;//c |= 0x80; }}
傳輸數據之前需要先檢測DHT11存不存在|DHT11有沒有損壞
void set_dht_output(void)//內部函數,把PC10管腳配置為輸出模式{ GPIO_InitTypeDef Gpio_Value;//定義了GPIO初始化結構體類型的變量 Gpio_Value.GPIO_Mode = GPIO_Mode_Out_PP;//選擇了推挽的輸出模式 Gpio_Value.GPIO_Pin = GPIO_Pin_10;//選擇了10號管腳 Gpio_Value.GPIO_Speed = GPIO_Speed_50MHz;//選擇了50MHz的輸出速率 GPIO_Init(GPIOC, &Gpio_Value);//按照上述配置初始化GPIOC組的管腳}void set_dht_input(void)//內部函數,把PC10管腳配置為輸入模式{ GPIO_InitTypeDef Gpio_Value;//定義了GPIO初始化結構體類型的變量 Gpio_Value.GPIO_Mode = GPIO_Mode_IN_FLOATING;//選擇了浮空的輸入模式 Gpio_Value.GPIO_Pin = GPIO_Pin_10;//選擇了10號管腳 GPIO_Init(GPIOC, &Gpio_Value);//按照上述配置初始化GPIOC組的管腳}void dht_output_status(int n){ set_dht_output();//先把PC10管腳初始化為輸出模式 if(n == 0) PCOut(10) = 0; else PCOut(10) = 1;}int dht_input_status(void){ set_dht_input();//先把PC10管腳初始化為輸入模式 return PCIn(10);}void dht_init(void)//DHT11初始化{ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //通過APB2總線使能GPIOC組的時鐘}void get_dht_value(char buf[5])//獲取DHT11傳感器采集的數據{ u8 flag = 0;//該變量是用來獲取PC10管腳的電平高低 u8 time = 0;//該變量是用來計數 dht_output_status(1);//把PC10管腳拉高 dht_output_status(0);//把PC10管腳拉低 delay_ms(20);//延時20ms dht_output_status(1);//把PC10管腳拉高 //while(dht_input_status());//以死等的方式等待PC10管腳被拉低 do { flag = dht_input_status();//獲取PC10管腳的電平高低 delay_us(2);//延時2us time++;//計數自增 }while(flag == 1 && time <= 20);//以超時處理的方式等待PC10管腳被拉低 if(time > 20)//判斷是否超時 return ;//提前結束程序 while(!dht_input_status());//以死等的方式等待PC10管腳被拉高 /*開始接收40bit的數據*/ //...............}
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/123450.html
摘要:當溫度感應器感應到設備主體內部的溫度高于設定值時,此時溫度設定器會控制風機進行啟動,對內部進行散熱處理,低于設定值時停止。設定的時間間隔溫度閾值,當前溫度由顯示,表示工作狀態。為繼電器,,,供電。必須手動清除,否則將持續引發中斷。 目錄 一、 設計要求 二、 總體設計和系統框圖 三、設計...
摘要:下面是演示視頻物聯網文章目錄前言一準備二操作步驟配置配置三效果展示總結前言實現萬物互聯第一步,千里點燈,然后添加你想要的模塊就可以了,接下來我們進入正文。 前面學習...
摘要:設計簡介本設計是基于藍牙的超聲波無線測距的設計,主要實現以下功能實現通過測量當前溫度值實現通過溫差補償法公式修改超聲波在當前空氣中的傳播速度實現通過超聲波傳感器測量距離值。 設計簡介: 本設計是基于藍牙的超聲波無線測距的設計,主要實現以下功能: ① 實現通過DS18B20測量當前溫度值 ② ...
摘要:單片機在一片集成電路芯片上集成微處理器存儲器接口電路,從而構成了單芯片微型計算機,即單片機。沒搞懂專欄咋弄的,慢慢摸索吧,本人純新手,讀書人的事沒啥要臉不要臉的,有問題隨便指出,隨便噴,歡迎來指點 2021-9-25 自己手繪的一張圖,算是簡單的介紹吧? 對照實圖看一下 ? ? ? ?...
摘要:工具樹莓派溫濕度傳感器在開始實驗之前,要在電腦上安裝,并且建立好一個數據庫連接。到這里對電腦配置就結束了,對了,還有如果你們到時運行樹莓派代碼出現遠程連接失敗錯誤碼,像下圖這是因為,你的防火墻開了,把防火墻關掉就不會報這個錯誤了。 ...
閱讀 2122·2023-04-25 14:56
閱讀 2440·2021-11-16 11:44
閱讀 2696·2021-09-22 15:00
閱讀 1902·2019-08-29 16:55
閱讀 2177·2019-08-29 14:04
閱讀 2305·2019-08-29 11:23
閱讀 3678·2019-08-26 10:46
閱讀 1907·2019-08-22 18:43