水位檢測(cè)在水資源管理、城市防洪、農(nóng)業(yè)灌溉、家用電器和工業(yè)生產(chǎn)等多領(lǐng)域發(fā)揮積極建設(shè)作用。利用水位傳感器,可以實(shí)現(xiàn)水資源的智能管理,提高生產(chǎn)效率。
本文介紹了安信可 Ai-M61-32S 開發(fā)板結(jié)合水位傳感器實(shí)現(xiàn)水位監(jiān)測(cè)計(jì)的項(xiàng)目設(shè)計(jì)。
項(xiàng)目方案
通過(guò)讀取 IO 接口的模擬值,進(jìn)行電壓轉(zhuǎn)換,獲取檢測(cè)到的電壓值,進(jìn)一步通過(guò)電壓-水位校準(zhǔn),實(shí)現(xiàn)水位高度的串口打印和串口繪圖,實(shí)時(shí)水位監(jiān)測(cè)功能。
電壓轉(zhuǎn)換
根據(jù)歐姆定律,V = I / R,電壓和電阻成正比;
因此通過(guò)獲取 3.3V 和 GND 對(duì)應(yīng)的模擬數(shù)值(實(shí)測(cè)為 3199 和 21),
即可得到實(shí)際電壓的轉(zhuǎn)換公式 Valtage = val * (3.3 / (3199-21)) .
代碼
#include
void setup() {
pinMode(19, INPUT);
Serial.begin(115200);
}
void loop() {
int val = analogRead(19); // analog value reading
float vlt = val * (3.3 / (3199-21)); // real voltage conversion
Serial.println(vlt);
delay(200);
}
按住 IO2 鍵的同時(shí),短按 EN 鍵,進(jìn)入下載模式,配置端口號(hào)后上傳工程,復(fù)位運(yùn)行程序。
效果
水位傳感器
水位傳感器(Water Sensor)可以檢測(cè)水位高度(檢測(cè)高度:0 - 40 mm),亦可用作雨滴傳感器,用于各種天氣狀況的監(jiān)測(cè),檢測(cè)是否下雨及雨量的大小,廣泛應(yīng)用于汽車自動(dòng)刮水系統(tǒng)、智能燈光系統(tǒng)、洗衣機(jī)和智能天窗系統(tǒng)等。
模塊簡(jiǎn)介
當(dāng)模塊上電,電源指示 LED 點(diǎn)亮;
工作電壓:DC 3.3V - 5V ;
輸出類型:模擬信號(hào);
傳感器具有 10 條裸露的銅線,其中 5 條是電源銅線,另外 5 條是感測(cè)銅線。
走線隔行平行排列,每?jī)蓷l電源銅線間有一條感測(cè)銅線。
模塊原理圖
參考:水位檢測(cè)報(bào)警 - Telesk
引腳定義
S(信號(hào))為模擬輸出;
+(VCC)為傳感器供電;
–(GND)為接地。
參考:Arduino Uno 水位傳感器
運(yùn)行原理
當(dāng)平行銅線之間有水時(shí),水浸沒(méi)的高度不同,電流不同。銅線間的電阻根據(jù)水位的變化而變化。
電阻與水的高度成反比(傳感器浸水越深,導(dǎo)電性越好,電阻越小,電流越大)。
參考:水位傳感器如何工作并與Arduino接口
因此根據(jù) ADC 測(cè)量傳感器輸出的電壓,便可以確定水位。
硬件連接
S -> IO19
+ -> 3V3
- -> GND
硬件連接完成后,打開串口,此時(shí)輸出的電壓值應(yīng)為 0 。
水位校準(zhǔn)
由于各地的水質(zhì)差異,導(dǎo)電性能不同,因此需要根據(jù)實(shí)際情況進(jìn)行校準(zhǔn)。
多次校準(zhǔn),取平均值;
每次校正前,需將 PCB 表面的平行銅線擦干,待測(cè)得電壓為 0 時(shí)再置入水中,記錄水位值和電壓值。
校準(zhǔn)數(shù)據(jù)采集
水位 10 毫米,相應(yīng)的串口輸出電壓為 1.25 伏特
增加水位高度,采集多組電壓-水位數(shù)據(jù)。
假設(shè) ADC 讀取電壓(V)與水位高度(mm)為線性相關(guān)關(guān)系,對(duì)上述數(shù)據(jù)進(jìn)行擬合。使用 Excel 軟件進(jìn)行擬合,獲得擬合表達(dá)式 y = 41.774 x - 38.686。
工程代碼
在代碼中添加相應(yīng)的水位高度定義
#include void setup() { pinMode(19, INPUT);
Serial.begin(115200); } void loop() { int val = analogRead(19); // analog sensor value
float vlt = val * (3.3 / (3199-21)); // real voltage conversion float wl = 41.774 * vlt - 38.686; // water level (mm)
Serial.print(val);
Serial.print(","); Serial.print(vlt); Serial.print(","); Serial.println(wl); delay(200);
}
保存代碼,構(gòu)建工程,上傳固件,復(fù)位后運(yùn)行程序。
打開串口助手,連接目標(biāo)串口對(duì)應(yīng)的設(shè)備端口號(hào),打開串口,獲取實(shí)時(shí) IO 模擬值、電壓值(伏特)和水位值(毫米)。
效果演示
對(duì)應(yīng)的水位演化曲線
水位的數(shù)碼管顯示
在前面關(guān)于 ADC 讀取電壓并結(jié)合水位傳感器實(shí)現(xiàn)電壓-水位高度轉(zhuǎn)換的基礎(chǔ)上,增加 4 位共陽(yáng) 數(shù)碼管顯示 水位高度的功能。
硬件連接
這里采用 2 個(gè) 74HC595 驅(qū)動(dòng)的 4 位共陽(yáng)數(shù)碼管,支持 3.3V 至 5V 的寬電壓輸入,僅需 3 個(gè)信號(hào)引腳即可驅(qū)動(dòng)。
水位傳感器接線方式
Water-sensor_S -> IO19
Water-sensor_+ -> 3V3
Water-sensor_- -> GND
數(shù)碼管接線方式
4Bit-segment_SCLK -> IO23
4Bit-segment_RCLK -> IO24
4Bit-segment_DIO -> IO11
工程代碼
#include
const int sensorPin = 19; // water-level sensor pin
// 74HC595 引腳設(shè)置
const int latchPin = 24; // RCLK
const int clockPin = 23; // SCLK
const int dataPin = 11; // DIO
unsigned char num[]={0xC0, //"0"
0xF9, //"1"
0xA4, //"2"
0xB0, //"3"
0x99, //"4"
0x92, //"5"
0x82, //"6"
0xF8, //"7"
0x80, //"8"
0x90 //"9"
};
void setup()
{
pinMode(latchPin,OUTPUT);
pinMode(clockPin,OUTPUT);
pinMode(dataPin,OUTPUT);
pinMode(sensorPin, INPUT);
Serial.begin(115200);
}
/* ------------ loop for serial print and segment display -------------- */
void loop() {
int count = 0;
int val = analogRead(sensorPin); // analog sensor value
float vlt = val * (3.3 / (3199-21)); // real voltage conversion
float wl = 41.774 * vlt - 38.686; // water level (mm)
//Serial.print("Analog Value: ");
Serial.print(val); // in order to serial plot
Serial.print(", ");
//Serial.print("Voltage: ");
Serial.print(vlt);
//Serial.print("V");
Serial.print(", ");
//Serial.print("Water Level: ");
Serial.println(wl);
//Serial.println("mm");
Serial.println((String)"Analog Value: " + val + ", Valtage: " + vlt + "V, Water Level: " + wl + "mm"); // serial print string
while (count < 25) // loop 25 times for delay 500ms (20ms every display)
{
if (wl < 0){
disp(0);
}else{
disp(wl); // display water level
}
count++;
}
}
/* ------------ segment display number (dynamics scanning) -------------- */
void disp(float n)
{
int t = 5;
int yi = ((int)(n*10))%10;
int ge = (int)n%10;
int shi = ((int)n/10)%10;
int bai = ((int)n/100)%10;
if(bai>0){
shiftOut(dataPin,clockPin,MSBFIRST,num[bai]);
}else{
shiftOut(dataPin,clockPin,MSBFIRST,0xFF);
}
shiftOut(dataPin,clockPin,MSBFIRST,0b00001000);
digitalWrite(latchPin, HIGH);
delay(t);
digitalWrite(latchPin,LOW);
if(shi>0){
shiftOut(dataPin,clockPin,MSBFIRST,num[shi]);
}else{
if(bai>0){
shiftOut(dataPin,clockPin,MSBFIRST,num[0]);
}else{
shiftOut(dataPin,clockPin,MSBFIRST,0xFF);
}
}
shiftOut(dataPin,clockPin,MSBFIRST,0b00000100);
digitalWrite(latchPin, HIGH);
delay(t);
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,num[ge]&0x7F);//與運(yùn)算加入小數(shù)點(diǎn)
shiftOut(dataPin,clockPin,MSBFIRST,0b00000010);
digitalWrite(latchPin, HIGH);
delay(t);
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,num[yi]);
shiftOut(dataPin,clockPin,MSBFIRST,0b00000001);
digitalWrite(latchPin, HIGH);
delay(t);
digitalWrite(latchPin,LOW);
}
/* ------------ shiftOut -------------- */
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val)
{
uint8_t i;
for (i = 0; i < 8; i++) {
if (bitOrder == LSBFIRST)
digitalWrite(dataPin, !!(val & (1 << i)));
else
digitalWrite(dataPin, !!(val & (1 << (7 - i))));
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
}
}
●注意 shiftOut 函數(shù)需要定義;
●由于每次采樣數(shù)值均存在較大波動(dòng),為了避免數(shù)碼管動(dòng)態(tài)刷新過(guò)于頻繁,加入循環(huán)延長(zhǎng)數(shù)據(jù)刷新時(shí)間;
●或者多次采樣取平均值,進(jìn)而減小水位數(shù)值的波動(dòng),使數(shù)碼管的顯示更穩(wěn)定。
效果顯示
數(shù)碼管顯示水位
動(dòng)態(tài)
串口輸出電壓和水位值
動(dòng)態(tài)水位的演化曲線
靜態(tài)水位的演化曲線
-
傳感器
+關(guān)注
關(guān)注
2561文章
52366瀏覽量
762687 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5460瀏覽量
101504 -
安信可
+關(guān)注
關(guān)注
0文章
181瀏覽量
4335
發(fā)布評(píng)論請(qǐng)先 登錄
安信可開源硬件:小安派-DSL 屏幕驅(qū)動(dòng)開發(fā)板

Ai-M61-32S(點(diǎn)燈)
安信可開源工程——小安派-Eyes-S1/S2多功能開發(fā)板

安信可推出2款小安派開源硬件:Cam-U和Cam-D!

玩透開源硬件!安信可科技小安派2款音頻開發(fā)板全新上線

安信可開源硬件——小安派-Eyes-DU開發(fā)板

安信可Ai-M61-32S開發(fā)板能玩出多少拓展板?

晚上再也不摸黑 ,用Ai-M61-32S&Rd-03制作一盞自動(dòng)感應(yīng)小夜燈

DIY案例:用Ai-M61-32S做一個(gè)多功能書桌燈

不到10塊錢,用Ai-M61-32S如何自制一個(gè)開機(jī)棒?

外設(shè)移植 安信可Ai-WB2-32S開發(fā)板+TM1637 NTP時(shí)鐘

評(píng)論