37款傳感器與模塊的提法,在網絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止37種的。鑑於本人手頭積累了一些傳感器和執行器模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流爲目的,這裏準備逐一動手試試多做實驗,不管成功與否,都會記錄下來——小小的進步或是搞不掂的問題,希望能夠拋磚引玉。
【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗三十九:DS18B20單總線數字溫度傳感器模塊
18B20元件官方鏈接如下:
https://www.maximintegrated.com/cn/products/sensors/DS18B20.html
相關技術參考資料:
https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf
https://www.jin-hua.com.tw/upload/product/2110000001544_DATA.pdf
18B20數字溫度傳感器模塊實驗所需硬件清單
Arduino Uno開發板 X1
0.96寸OLED顯示屏X1
杜邦線 若干(備了9條)
高電平觸發有源蜂鳴器模塊X1
IIC/I2C 1602 LCD液晶屏模塊X1
18B20數字溫度傳感器模塊X2
LED發光二極管(綠、藍色)X2
高電平觸發單路5V繼電器模塊X1
Proto Shield 原型擴展板(帶mini麪包板)X1
傳感器模塊實驗所需軟件平臺
代碼編程 Arduino IDE (版本1.8.19)
仿真編程 Linkboy (版本V4.6.3)
圖形編程 Mind+ (版本 V1.7.0 RC2.0)
以及編玩邊學(線上平臺https://ide.codepku.com/?type=Arduino)
實驗接線示意圖
搜索安裝“DallasTemperature”和“OneWire”庫
1、打開Arduino——工具——管理庫——搜索DallasTemperature——安裝
2、打開Arduino——工具——管理庫——搜索OneWire——安裝
程序一:單線數字溫度18B20 + Arduino
Arduino參考開源代碼
/* 【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程) 程序一:單線數字溫度18B20 + Arduino */ #include <OneWire.h> // 調用OneWire庫 #include <DallasTemperature.h> // 調用DallasTemperature庫 #define ONE_WIRE_BUS 2 // 定義18B20數據口連接arduino的 2 腳 OneWire oneWire(ONE_WIRE_BUS); // 初始連接在單總線上的單總線設備 DallasTemperature sensors(&oneWire); void setup(void) { Serial.begin(9600); // 設置串口通信波特率 Serial.println("18B20溫度 IC 控制庫演示"); // 溫度IC控制庫演示 sensors.begin(); // 初始化總線 } void loop(void) { Serial.print(" 讀取溫度..."); // 發起溫度轉換 sensors.requestTemperatures(); // 向總線上所有設備發送溫度轉換請求 Serial.println("完成"); // 溫度轉換完成 Serial.print("溫度爲: "); // 串口打印實時溫度值 // 同一總線上可以有多個 DS18B20。 // 0指的是線上的第一個IC Serial.print(sensors.getTempCByIndex(0)); delay(500); // 延時500毫秒 }
實驗串口返回情況(手摸傳感器升溫3度)
Arduino實驗場景圖
程序二:串口顯示溫度
實驗開源仿真編程(Linkboy V4.63)
實驗串口返回情況
Arduino實驗場景圖
程序三:帶工作指示燈的溫度檢測器
(1)實驗開源圖形編程(Mind+、編玩邊學)
(2)實驗串口返回情況
程序四:TM1637數碼管顯示溫度
(1)實驗開源仿真編程(Linkboy V4.63)
Arduino實驗場景圖
程序五:溫度控制紅綠藍三色燈
(1)Arduino參考開源代碼
/* 【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程) 程序五:溫度控制紅綠藍三色燈 */ #include <OneWire.h> // 調用OneWire庫 #include <DallasTemperature.h> // 調用DallasTemperature庫 int redLedPin = 2;//紅色LED int greenLedPin = 3;//綠色LED int blueLedPin = 4;//藍色LED int temp_sensor = 5;//溫度傳感器 float temperature = 0; //低於下限的溫度值都會觸發藍色LED燈亮起。 //高於上限的變量都會觸發紅色LED燈亮起。 //介於兩者之間的變量都將打開綠色LED燈。 int lowerLimit = 25;//溫度下限闕值 int higherLimit = 27;//溫度上限闕值 //創建一個OneWire對象 OneWire oneWirePin(temp_sensor); DallasTemperature sensors(&oneWirePin); void setup(void) { //激活Arduino串行接口 Serial.begin(9600); //設置LED作爲輸出 pinMode(redLedPin, OUTPUT); pinMode(greenLedPin, OUTPUT); pinMode(blueLedPin, OUTPUT); sensors.begin();//溫度傳感器初始化 } void loop() { Serial.print("Requesting Temperatures from sensors: "); sensors.requestTemperatures(); Serial.println("DONE"); temperature = sensors.getTempCByIndex(0); digitalWrite(redLedPin, LOW); digitalWrite(greenLedPin, LOW); digitalWrite(blueLedPin, LOW); Serial.print("Temperature is "); Serial.print(temperature); //設置LED作爲輸出 if (temperature <= lowerLimit) { Serial.println(", blue LED is Activated"); digitalWrite(blueLedPin, HIGH); } else if (temperature > lowerLimit && temperature < higherLimit) { Serial.println(", Green LED is Activated"); digitalWrite(greenLedPin, HIGH); } else if (temperature >= higherLimit) { Serial.println(", Red LED is Activated"); digitalWrite(redLedPin, HIGH); } delay(2000); }
實驗串口返回情況
(2)實驗場景圖
溫度下限爲25度,上限爲27度
低於下限的溫度值都會觸發藍色LED燈亮起
高於上限的變量都會觸發紅色LED燈亮起
介於兩者之間的變量都將打開綠色LED燈