【树莓派C语言开发】实验13:雨滴传感器模块(关联PCF8591)
好久沒玩樹莓派了,今天上手來做一個實驗
文章目錄
- 1.實驗器材
- 2.實驗原理
- 2.1基本說明
- 2.2電路圖
- 2.3接線圖
- 3.代碼效果
- 3.1代碼示例
- 3.2運行效果
- 結語
1.實驗器材
- 樹莓派開發板
- 40p軟排線+T型轉接板+面包板
- 雨滴傳感器模塊
- LM393模塊
- PCF8591模數轉換器模塊(實驗12)
- 一些跳線
- 一個一字螺絲刀
2.實驗原理
2.1基本說明
雨滴傳感器的控制模塊具有4個輸出,其中VCC連接到5V電源,模塊的GND引腳接地。DO引腳連接到微控制器的數字引腳以進行數字輸出,也可以使用模擬引腳。要使用模擬輸出,可以將A0引腳連接到微控制器的ADC引腳。
在雨滴/雨水器系統中,用雨滴傳感器檢測降雨量并轉換控制器檢測到的信號。然后根據這些信號自動設置雨刮器的間隔,以方便地控制雨刮器的電機;在智能照明系統中,自動檢測駕駛環境并調整照明模式,提高惡劣環境下的行車安全;在智能天窗系統中,檢測是否下雨,如果檢測到雨滴,則自動關閉天窗。
傳感器模塊包括一個電位計,LM393比較器,LED,電容器和電阻器。雨板模塊由銅軌組成,銅軌用作可變電阻器。它的阻力隨雨板上的濕度而變化。
2.2電路圖
2.3接線圖
| SDA | SDA | SDA |
| SCL | SCL | SCL |
| 5V | 5V | VCC |
| GND | GND | GND |
| DO | GPIO 17 | * |
| AO | * | AIN 0 |
| VCC | 3.3V | * |
| GND | GND | * |
在連接LM393和雨滴傳感器的時候,發現雨滴傳感器上并沒有明確標出正負極,但是在正極的管腳下方用小點做了標識(負極無該白點)
本次實驗需要接的線非常多,注意不要接錯了。其中PCF8591模塊在接線時需要將所有跳線帽拔出
3.代碼效果
3.1代碼示例
因為需要使用pcf8591模數轉換器,所以需要引用頭文件<pcf8591.h>
//雨滴探測傳感器實驗 #include <stdio.h> #include <wiringPi.h> #include <pcf8591.h> #include <math.h>#define makerobo_PCF 120 // 基礎管腳120 #define makerobo_DOpin 0 // 雨滴傳感器管腳//打印雨滴傳感器提示信息 void makerobo_Print(int x) {switch(x){case 1: //沒有雨滴printf("\n************************\n" );printf( "* makerobo Not Raining *\n" );printf( "************************\n\n");break;case 0: //有雨滴printf("\n**********************\n" );printf( "* makerobo Raining!! *\n" );printf( "**********************\n\n");break;default: //打印數據錯誤printf("\n**********************\n" );printf( "* Print value error. *\n" );printf( "**********************\n\n");break;} }int main() {int makerobo_analogVal; // 定義模擬量存儲變量int makerobo_tmp, makerobo_status;// 定義狀態信息//初始化連接失敗時,將消息打印到屏幕if(wiringPiSetup() == -1){printf("setup wiringPi failed !");return 1;}//在基本引腳120上設置pcf8591,地址0x48pcf8591Setup(makerobo_PCF, 0x48);//設置雨滴傳感器管腳為輸入模式pinMode(makerobo_DOpin, INPUT);//默認狀態值設置為0makerobo_status = 0; //無限循環while(1) {makerobo_analogVal = analogRead(makerobo_PCF + 0);//獲取AIN0上的值printf("%d\n", makerobo_analogVal); //打印出該值 makerobo_tmp = digitalRead(makerobo_DOpin); //讀取數字IO口電平,讀取數字雨滴傳感器DO端口if (makerobo_tmp != makerobo_status) //狀態發生改變{makerobo_Print(makerobo_tmp); //打印出雨滴傳感器檢測信息makerobo_status = makerobo_tmp; //狀態值重新賦值}delay (200); //延時200ms}return 0; }注意:雨滴傳感器其實是LM393和雨滴感應模塊的集合體,所以代碼注釋中說的設置管腳為input模式,實際上設置的是LM393模塊的管腳(畢竟只有它連上了T型轉接板)
本次博客的代碼和之前的實驗很相似,其中PCF8591在上篇實驗12博客中已經有過講解,所以在這里就不bb啦
3.2運行效果
當你把濕紙巾印在雨滴傳感器上,屏幕上會打印出makerobo Raining!!,數值會隨著雨滴量的大小變化(我這里測試的是,水多的時候打印的值小)但最后會趨于穩定,打印128
如果沒有水,屏幕上打印makerobo Not Raining,數值打印255
在LM393模塊上有兩個LED指示燈,在傳感器探測到水后,DO-LED會亮起
如果你的DO-LED沒有亮起,可以通過該傳感器上藍色的模塊,用十字螺絲調節LM393模塊的靈敏度(這個藍色模塊調節的是電阻)
結語
有了這個東西,你可以把雨滴傳感器丟到窗臺上,在不在家的時候,就可以運行代碼,看看家里有無下雨了(畢竟時候工作上學的地方和家里隔了十幾公里,天氣就可能完全不同)
配合cpolar實現內網穿透,效果更佳哦😀
不過知道自己家下雨了,被子還沒收,是不是徒增焦慮?
總結
以上是生活随笔為你收集整理的【树莓派C语言开发】实验13:雨滴传感器模块(关联PCF8591)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: P2P网络穿越 NAT穿越
- 下一篇: Entity Framework 批量插