8904| 6
|
[防水 DS18B20 传感器套件 教程_2] 陪你洗澡的洗澡喵~ |
我不得不承认,洗澡可以大大帮助放松。 而且我更偏爱热水浴,无论是夏天还是冬天。 但是当无法估计水温是否合适时,可能会令人烦恼。 除此之外,当我们大部分人在浴缸中享受自己时,我们都需要一个计时器。所以我决定制作这样一个BATHING COMPANION。卡通形象来自RIPNDIP。 步骤1. 设计和材料准备 所需物料清单: some PMMA, and some wire 我们需要两个功能: I. 一个定时器(我总是会呆在浴室化太多时间来思考人生。。。Orz) II. 温度传感器(我不想再总是做这样的动作) 解决方案 I. 我用Arduino IDE做了一个计时器,并用LED来提醒你时间。 II. 我将防水DS18B20传感器作为“猫尾”来测量温度,并用通过用LED在猫脸显示“腮红’’来告知使用者水温是否合适。 另外我们还需要一个盒子来装这些传感器 设计草图: 步骤2. 电路设计及连接 & 代码 [/code][mw_shl_code=c,true] #include <OneWire.h> #include <RGBLED.h> RGBLED myled = RGBLED(9,10,11); int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2 //Temperature chip i/o OneWire ds(DS18S20_Pin); // on digital pin 2 int ledPin = 9; // Connect LED on pin 9, or use the onboard one int KEY = 3; // Connect Touch sensor on Digital Pin 3 void setup(){ Serial.begin(9600); pinMode(ledPin, OUTPUT); // Set ledPin to output mode pinMode(12, OUTPUT); pinMode(KEY, INPUT); //Set touch sensor pin to input mode } void loop(){ float temperature = getTemp(); Serial.println(temperature); delay(100); //just here to slow down the output so it is easier to read if(temperature >= 30) { //Read Touch sensor signal digitalWrite(12, LOW); digitalWrite(ledPin, HIGH); // if Touch sensor is HIGH, then turn on } else if(digitalRead(KEY)==HIGH){ delay(1800000); digitalWrite(12, LOW); digitalWrite(11, HIGH); delay(20000); } else{ digitalWrite(ledPin, LOW); // if Touch sensor is LOW, then turn off the led } } float getTemp(){ //returns the temperature from one DS18S20 in DEG Celsius byte data[12]; byte addr[8]; if ( !ds.search(addr)) { //no more sensors on chain, reset search ds.reset_search(); return -1000; } if ( OneWire::crc8( addr, 7) != addr[7]) { Serial.println("CRC is not valid!"); return -1000; } if ( addr[0] != 0x10 && addr[0] != 0x28) { Serial.print("Device is not recognized"); return -1000; } ds.reset(); ds.select(addr); ds.write(0x44,1); // start conversion, with parasite power on at the end byte present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad for (int i = 0; i < 9; i++) { // we need 9 bytes data = ds.read(); } ds.reset_search(); byte MSB = data[1]; byte LSB = data[0]; float tempRead = ((MSB << 8) | LSB); //using two's compliment float TemperatureSum = tempRead / 16; return TemperatureSum; } [/mw_shl_code] 步骤3. 结构设计 我希望解构尽可能简洁。因此,我模仿树莓派等MCU保护壳的做法,用激光切割亚克力制作了一个外壳。 然后用手钻打孔,用螺丝固定 步骤4. 整体组装 Hint: 可以调节螺丝,以确保外壳可以收容“猫尾’’ 自己尝试一下咯!! |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed