“SKU:RB-02S160 DS18B20 水溫傳感器”的版本間的差異
來(lái)自ALSROBOT WiKi
(→?example2_Arduino) |
(→?example3_Raspberry Pi) |
||
第303行: | 第303行: | ||
[[文件:02S16006.png|500px|縮略圖|居中]] | [[文件:02S16006.png|500px|縮略圖|居中]] | ||
? | === | + | ===example3_arduino=== |
+ | * 主要硬件 | ||
+ | :Arduino UNO 控制器 | ||
+ | :傳感器擴(kuò)展板V5.0 | ||
+ | :LED發(fā)光模塊-紅/綠/黃 | ||
+ | :蜂鳴器發(fā)聲模塊 | ||
+ | :繼電器模塊 | ||
+ | :潛水泵 | ||
+ | :DC2.1 電源接線端子 | ||
+ | :7.4V 1300mAh 鋰電池 | ||
+ | * 硬件連接 | ||
+ | [[文件:02S16007.png|900px|縮略圖|居中]] | ||
+ | * 示例程序 | ||
+ | <pre style='color:blue'> | ||
+ | #define Skip_ROM 0xCC | ||
+ | #define Convert_T 0x44 | ||
+ | #define Read_scratchpad 0xBE | ||
+ | |||
+ | #define Port_18B20 12 //溫度傳感器 | ||
+ | #define Tx_18B20 pinMode(Port_18B20, OUTPUT) | ||
+ | #define Rx_18B20 pinMode(Port_18B20, INPUT) | ||
+ | |||
+ | #define Set_Port_18B20_High digitalWrite(Port_18B20, HIGH) | ||
+ | #define Set_Port_18B20_Low digitalWrite(Port_18B20, LOW) | ||
+ | |||
+ | #define Read_Port_18B20 digitalRead(Port_18B20) | ||
+ | |||
+ | #define LED1 9 //G | ||
+ | #define LED2 10 //Y | ||
+ | #define LED3 11 //R | ||
+ | #define buzzer 7 //蜂鳴器 | ||
+ | #define relay 8 //繼電器 | ||
+ | |||
+ | unsigned char DS18B20_reset(); | ||
+ | void DS18B20_write(char WRT); | ||
+ | unsigned char DS18B20_read(); | ||
+ | |||
+ | unsigned short tempL = 0; | ||
+ | unsigned short tempH = 0; | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | Serial.begin(9600); | ||
+ | pinMode(LED1,OUTPUT); | ||
+ | pinMode(LED2,OUTPUT); | ||
+ | pinMode(LED3,OUTPUT); | ||
+ | pinMode(buzzer,OUTPUT); | ||
+ | pinMode(relay,OUTPUT); | ||
+ | |||
+ | digitalWrite(LED1,LOW); | ||
+ | digitalWrite(LED2,LOW); | ||
+ | digitalWrite(LED3,LOW); | ||
+ | digitalWrite(buzzer,HIGH); | ||
+ | digitalWrite(relay,LOW); | ||
+ | } | ||
+ | |||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | unsigned int temp = 0; | ||
+ | float Temperature = 0.0; | ||
+ | |||
+ | if(!DS18B20_reset()) | ||
+ | { | ||
+ | DS18B20_write(Skip_ROM); | ||
+ | DS18B20_write(Convert_T); | ||
+ | delay(50); | ||
+ | |||
+ | DS18B20_reset(); | ||
+ | DS18B20_write(Skip_ROM); | ||
+ | DS18B20_write(Read_scratchpad); | ||
+ | |||
+ | tempL = DS18B20_read(); | ||
+ | tempH = DS18B20_read(); | ||
+ | |||
+ | temp = ((unsigned int)tempH << 8) + (unsigned int)tempL; | ||
+ | |||
+ | temp = (float)temp * 6.25; | ||
+ | |||
+ | Temperature = (float)temp/100; | ||
+ | |||
+ | Serial.println(Temperature); | ||
+ | int val = int(Temperature); | ||
+ | if(val>= 30 && val <= 40) | ||
+ | { | ||
+ | digitalWrite(LED1,LOW); | ||
+ | digitalWrite(LED2,HIGH); | ||
+ | digitalWrite(LED3,LOW); | ||
+ | digitalWrite(buzzer,HIGH); | ||
+ | digitalWrite(relay,LOW); | ||
+ | } | ||
+ | else if(val > 40) | ||
+ | { | ||
+ | digitalWrite(LED1,LOW); | ||
+ | digitalWrite(LED2,LOW); | ||
+ | digitalWrite(LED3,HIGH); | ||
+ | digitalWrite(buzzer,LOW); | ||
+ | digitalWrite(relay,HIGH); | ||
+ | } | ||
+ | else if(val < 30) | ||
+ | { | ||
+ | digitalWrite(LED1,HIGH); | ||
+ | digitalWrite(LED2,LOW); | ||
+ | digitalWrite(LED3,LOW); | ||
+ | digitalWrite(buzzer,HIGH); | ||
+ | digitalWrite(relay,LOW); | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | digitalWrite(LED1,LOW); | ||
+ | digitalWrite(LED2,LOW); | ||
+ | digitalWrite(LED3,LOW); | ||
+ | digitalWrite(buzzer,HIGH); | ||
+ | digitalWrite(relay,LOW); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | unsigned char DS18B20_reset() | ||
+ | { | ||
+ | Tx_18B20; | ||
+ | Set_Port_18B20_Low; | ||
+ | delayMicroseconds(480); | ||
+ | Rx_18B20; | ||
+ | delayMicroseconds(60); | ||
+ | |||
+ | if(Read_Port_18B20 == 0) | ||
+ | { | ||
+ | delayMicroseconds(480); | ||
+ | return 0; | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | delayMicroseconds(480); | ||
+ | return 1; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void DS18B20_write(char WRT) | ||
+ | { | ||
+ | char i = 0, Cmd = 0; | ||
+ | Cmd = WRT; | ||
+ | Rx_18B20; | ||
+ | for(i = 0; i< 8; i++) | ||
+ | { | ||
+ | if((Cmd & (1<<i)) != 0) | ||
+ | { | ||
+ | Tx_18B20; | ||
+ | Set_Port_18B20_Low; | ||
+ | delayMicroseconds(1); | ||
+ | Rx_18B20; | ||
+ | delayMicroseconds(60); | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | Tx_18B20; | ||
+ | Set_Port_18B20_Low; | ||
+ | delayMicroseconds(60); | ||
+ | Rx_18B20; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | unsigned char DS18B20_read() | ||
+ | { | ||
+ | char i = 0, result = 0; | ||
+ | Rx_18B20; | ||
+ | for(i = 0; i < 8; i++) | ||
+ | { | ||
+ | Tx_18B20; | ||
+ | Set_Port_18B20_Low; | ||
+ | delayMicroseconds(2); | ||
+ | Rx_18B20; | ||
+ | if(Read_Port_18B20 != 0) | ||
+ | result |= 1<<i; | ||
+ | delayMicroseconds(60); | ||
+ | } | ||
+ | |||
+ | return result; | ||
+ | }</pre> | ||
+ | |||
+ | * 程序效果 | ||
+ | 此例程可模擬控溫系統(tǒng)<br/> | ||
+ | :若水溫在大于40攝氏度時(shí),LED 紅燈亮起、蜂鳴器發(fā)出報(bào)警聲、水泵開(kāi)始抽水降溫,直到溫度降低40攝氏度以下后,停止抽水。 | ||
+ | :若水溫在30攝氏度和40攝氏度之間時(shí),LED 黃燈亮起、蜂鳴器停止報(bào)警、水泵停止抽水。 | ||
+ | :若水溫在30攝氏度以下時(shí),LED 綠燈亮起、蜂鳴器停止報(bào)警、水泵停止抽水。 | ||
+ | |||
+ | ===example_Raspberry Pi=== | ||
* 主要硬件 | * 主要硬件 | ||
2018年9月4日 (二) 11:32的版本
目錄 |
產(chǎn)品概述
DS18B20是常用的數(shù)字溫度傳感器,其輸出的是數(shù)字信號(hào),具有體積小,硬件開(kāi)銷(xiāo)低,抗干擾能力強(qiáng),精度高的特點(diǎn)。 DS18B20數(shù)字溫度傳感器接線方便,封裝成后可應(yīng)用于多種場(chǎng)合,如管道式,螺紋式,磁鐵吸附式,不銹鋼封裝式等。主要根據(jù)應(yīng)用場(chǎng)合的不同而改變其外觀。
DS18B20水溫水溫傳感器采用的是不銹鋼封裝,防水防潮。封裝后的DS18B20可用于電纜溝測(cè)溫,高爐水循環(huán)測(cè)溫,鍋爐測(cè)溫,機(jī)房測(cè)溫,農(nóng)業(yè)大棚測(cè)溫,潔凈室測(cè)溫,彈藥庫(kù)測(cè)溫等各種非極限溫度場(chǎng)合,適用于各種狹小空間設(shè)備數(shù)字測(cè)溫和控制領(lǐng)域。
產(chǎn)品參數(shù)
基本參數(shù)
- 品名:DS18B20水溫傳感器
- 貨號(hào):RB-02S160
- 品牌:奧松機(jī)器人
- 產(chǎn)地:哈爾濱
- 固定孔:M3*4
- 電纜長(zhǎng)度:90cm
- 傳感器:直徑6mm,長(zhǎng)30mm
電氣參數(shù)
1.接口類型:3P防插反接口
2.信號(hào)類型:數(shù)字信號(hào)
3.工作電壓:3V - 5.5V
4.引腳定義:
- +:電源正極
- -:電源負(fù)極
- S:信號(hào)端
5.傳感器接口:KF2510-3P防插反接口
6.測(cè)試范圍:-55℃~+125℃(-67°F至+ 257°F)
7.測(cè)量精度:在-10~+85℃范圍內(nèi)精確度為±5℃
8.測(cè)量分辨率:溫度計(jì)分辨率可以被使用者選擇為9~12位
使用方法
example1_Arduino
- 主要硬件
- Arduino UNO 控制器
- 傳感器擴(kuò)展板 V5.0
- DS18B20 溫度傳感器
- 單頭防插反 3P 傳感器連接線
- USB 數(shù)據(jù)線
- 硬件連接
- 示例程序
#define Skip_ROM 0xCC #define Convert_T 0x44 #define Read_scratchpad 0xBE #define Port_18B20 7 #define Tx_18B20 pinMode(Port_18B20, OUTPUT) #define Rx_18B20 pinMode(Port_18B20, INPUT) #define Set_Port_18B20_High digitalWrite(Port_18B20, HIGH) #define Set_Port_18B20_Low digitalWrite(Port_18B20, LOW) #define Read_Port_18B20 digitalRead(Port_18B20) unsigned char DS18B20_reset(); void DS18B20_write(char WRT); unsigned char DS18B20_read(); unsigned short tempL = 0; unsigned short tempH = 0; void setup() { Serial.begin(9600); } void loop() { unsigned int temp = 0; float Temperature = 0.0; if(!DS18B20_reset()) { DS18B20_write(Skip_ROM); DS18B20_write(Convert_T); delay(750); DS18B20_reset(); DS18B20_write(Skip_ROM); DS18B20_write(Read_scratchpad); tempL = DS18B20_read(); tempH = DS18B20_read(); temp = ((unsigned int)tempH << 8) + (unsigned int)tempL; temp = (float)temp * 6.25; Temperature = (float)temp/100; Serial.print("Temperature: "); Serial.println(Temperature); } } unsigned char DS18B20_reset() { Tx_18B20; Set_Port_18B20_Low; delayMicroseconds(480); Rx_18B20; delayMicroseconds(60); if(Read_Port_18B20 == 0) { delayMicroseconds(480); return 0; } else { delayMicroseconds(480); return 1; } } void DS18B20_write(char WRT) { char i = 0, Cmd = 0; Cmd = WRT; Rx_18B20; for(i = 0; i< 8; i++) { if((Cmd & (1<<i)) != 0) { Tx_18B20; Set_Port_18B20_Low; delayMicroseconds(1); Rx_18B20; delayMicroseconds(60); } else { Tx_18B20; Set_Port_18B20_Low; delayMicroseconds(60); Rx_18B20; } } } unsigned char DS18B20_read() { char i = 0, result = 0; Rx_18B20; for(i = 0; i < 8; i++) { Tx_18B20; Set_Port_18B20_Low; delayMicroseconds(2); Rx_18B20; if(Read_Port_18B20 != 0) result |= 1<<i; delayMicroseconds(60); } return result; }
- 程序效果
example2_Arduino
- 主要硬件
- Arduino UNO 控制器
- 傳感器擴(kuò)展板 V5.0
- DS18B20 水溫傳感器
- IIC1602 LCD 液晶顯示器
- 硬件連接
- 示例程序
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); #define Skip_ROM 0xCC #define Convert_T 0x44 #define Read_scratchpad 0xBE #define Port_18B20 7 #define Tx_18B20 pinMode(Port_18B20, OUTPUT) #define Rx_18B20 pinMode(Port_18B20, INPUT) #define Set_Port_18B20_High digitalWrite(Port_18B20, HIGH) #define Set_Port_18B20_Low digitalWrite(Port_18B20, LOW) #define Read_Port_18B20 digitalRead(Port_18B20) unsigned char DS18B20_reset(); void DS18B20_write(char WRT); unsigned char DS18B20_read(); unsigned short tempL = 0; unsigned short tempH = 0; void setup() { Serial.begin(9600); lcd.init(); lcd.backlight(); } void loop() { unsigned int temp = 0; float Temperature = 0.0; if(!DS18B20_reset()) { DS18B20_write(Skip_ROM); DS18B20_write(Convert_T); delay(750); DS18B20_reset(); DS18B20_write(Skip_ROM); DS18B20_write(Read_scratchpad); tempL = DS18B20_read(); tempH = DS18B20_read(); temp = ((unsigned int)tempH << 8) + (unsigned int)tempL; temp = (float)temp * 6.25; Temperature = (float)temp/100; Serial.println(Temperature); lcd.setCursor(0, 0); lcd.print("Temperature ="); lcd.setCursor(0,1); lcd.print(Temperature); lcd.setCursor(6,1); lcd.print("Celsius"); } } unsigned char DS18B20_reset() { Tx_18B20; Set_Port_18B20_Low; delayMicroseconds(480); Rx_18B20; delayMicroseconds(60); if(Read_Port_18B20 == 0) { delayMicroseconds(480); return 0; } else { delayMicroseconds(480); return 1; } } void DS18B20_write(char WRT) { char i = 0, Cmd = 0; Cmd = WRT; Rx_18B20; for(i = 0; i< 8; i++) { if((Cmd & (1<<i)) != 0) { Tx_18B20; Set_Port_18B20_Low; delayMicroseconds(1); Rx_18B20; delayMicroseconds(60); } else { Tx_18B20; Set_Port_18B20_Low; delayMicroseconds(60); Rx_18B20; } } } unsigned char DS18B20_read() { char i = 0, result = 0; Rx_18B20; for(i = 0; i < 8; i++) { Tx_18B20; Set_Port_18B20_Low; delayMicroseconds(2); Rx_18B20; if(Read_Port_18B20 != 0) result |= 1<<i; delayMicroseconds(60); } return result; }
- 程序效果
example3_arduino
- 主要硬件
- Arduino UNO 控制器
- 傳感器擴(kuò)展板V5.0
- LED發(fā)光模塊-紅/綠/黃
- 蜂鳴器發(fā)聲模塊
- 繼電器模塊
- 潛水泵
- DC2.1 電源接線端子
- 7.4V 1300mAh 鋰電池
- 硬件連接
- 示例程序
#define Skip_ROM 0xCC #define Convert_T 0x44 #define Read_scratchpad 0xBE #define Port_18B20 12 //溫度傳感器 #define Tx_18B20 pinMode(Port_18B20, OUTPUT) #define Rx_18B20 pinMode(Port_18B20, INPUT) #define Set_Port_18B20_High digitalWrite(Port_18B20, HIGH) #define Set_Port_18B20_Low digitalWrite(Port_18B20, LOW) #define Read_Port_18B20 digitalRead(Port_18B20) #define LED1 9 //G #define LED2 10 //Y #define LED3 11 //R #define buzzer 7 //蜂鳴器 #define relay 8 //繼電器 unsigned char DS18B20_reset(); void DS18B20_write(char WRT); unsigned char DS18B20_read(); unsigned short tempL = 0; unsigned short tempH = 0; void setup() { Serial.begin(9600); pinMode(LED1,OUTPUT); pinMode(LED2,OUTPUT); pinMode(LED3,OUTPUT); pinMode(buzzer,OUTPUT); pinMode(relay,OUTPUT); digitalWrite(LED1,LOW); digitalWrite(LED2,LOW); digitalWrite(LED3,LOW); digitalWrite(buzzer,HIGH); digitalWrite(relay,LOW); } void loop() { unsigned int temp = 0; float Temperature = 0.0; if(!DS18B20_reset()) { DS18B20_write(Skip_ROM); DS18B20_write(Convert_T); delay(50); DS18B20_reset(); DS18B20_write(Skip_ROM); DS18B20_write(Read_scratchpad); tempL = DS18B20_read(); tempH = DS18B20_read(); temp = ((unsigned int)tempH << 8) + (unsigned int)tempL; temp = (float)temp * 6.25; Temperature = (float)temp/100; Serial.println(Temperature); int val = int(Temperature); if(val>= 30 && val <= 40) { digitalWrite(LED1,LOW); digitalWrite(LED2,HIGH); digitalWrite(LED3,LOW); digitalWrite(buzzer,HIGH); digitalWrite(relay,LOW); } else if(val > 40) { digitalWrite(LED1,LOW); digitalWrite(LED2,LOW); digitalWrite(LED3,HIGH); digitalWrite(buzzer,LOW); digitalWrite(relay,HIGH); } else if(val < 30) { digitalWrite(LED1,HIGH); digitalWrite(LED2,LOW); digitalWrite(LED3,LOW); digitalWrite(buzzer,HIGH); digitalWrite(relay,LOW); } else { digitalWrite(LED1,LOW); digitalWrite(LED2,LOW); digitalWrite(LED3,LOW); digitalWrite(buzzer,HIGH); digitalWrite(relay,LOW); } } } unsigned char DS18B20_reset() { Tx_18B20; Set_Port_18B20_Low; delayMicroseconds(480); Rx_18B20; delayMicroseconds(60); if(Read_Port_18B20 == 0) { delayMicroseconds(480); return 0; } else { delayMicroseconds(480); return 1; } } void DS18B20_write(char WRT) { char i = 0, Cmd = 0; Cmd = WRT; Rx_18B20; for(i = 0; i< 8; i++) { if((Cmd & (1<<i)) != 0) { Tx_18B20; Set_Port_18B20_Low; delayMicroseconds(1); Rx_18B20; delayMicroseconds(60); } else { Tx_18B20; Set_Port_18B20_Low; delayMicroseconds(60); Rx_18B20; } } } unsigned char DS18B20_read() { char i = 0, result = 0; Rx_18B20; for(i = 0; i < 8; i++) { Tx_18B20; Set_Port_18B20_Low; delayMicroseconds(2); Rx_18B20; if(Read_Port_18B20 != 0) result |= 1<<i; delayMicroseconds(60); } return result; }
- 程序效果
此例程可模擬控溫系統(tǒng)
- 若水溫在大于40攝氏度時(shí),LED 紅燈亮起、蜂鳴器發(fā)出報(bào)警聲、水泵開(kāi)始抽水降溫,直到溫度降低40攝氏度以下后,停止抽水。
- 若水溫在30攝氏度和40攝氏度之間時(shí),LED 黃燈亮起、蜂鳴器停止報(bào)警、水泵停止抽水。
- 若水溫在30攝氏度以下時(shí),LED 綠燈亮起、蜂鳴器停止報(bào)警、水泵停止抽水。
example_Raspberry Pi
- 主要硬件
- 硬件連接
- 示例程序
- 程序效果
相關(guān)資料
- DS18B20 溫度傳感器 datasheet & 示例程序
百度網(wǎng)盤(pán)鏈接: