基于arduino的温度检测跟显示
基于arduino的温度检测和显示
功能:使用温度传感器采集温度,用2位数码管显示结果。

材料如下:
1 arduino Uno
2 DS18B20 温度传感器
3 2位数码管
数码管相关:
数码管的原理很简单,一般一个字符由7段组成,由a-g,需要控制每段的电压高低来是否亮,比如0则应该abcdef亮,中间的g暗。所以,数码管的接入关键是看针脚的定义。
对于n位数码管,一般是共阳或共阴,针脚的具体定义需要看相应的参数图,不要自己猜测。一般会有n位针脚对应各自的字符开关。一般针脚的序列是从左下角逆时针 1...n。
在自己程序里需要定义数码管的针脚对应板子上的io口,比如我这里:

Arduino引脚 数码管引脚
D11 10(A)
D10 9(B)
D2 1(C)
D3 4(D)
D4 3(E)
D5 6(F)
D6 5(G)
D7 2(DP)
D8 8(LED1)
D9 7(LED2)
右边针脚数字顺序即图里下部所示a-dp对应的顺序。
可以参考:
http://blog.sina.com.cn/s/blog_a6164cc90101a6ks.html
http://www.arduino.cn/thread-1224-1-1.html
相关资料和软件可以在附件中找到。
温度相关:
用的是DS18B20 温度传感器,注意不同型号的温度传感器对应的库和方法不一样,需要针对性开发。这里有篇很好的文章:http://bbs.iqrobot.com/forum.php?mod=viewthread&tid=45。
相关的内容可见http://www.pjrc.com/teensy/td_libs_OneWire.html和http://www.milesburton.com/?title=Dallas_Temperature_Control_Library


需要的库也可从附件下载,解压缩放到arduino的libraries目录下。(一般需要重启arduino IDE才可生效)
我的测试代码:
布线和结果请看附件效果图。
功能:使用温度传感器采集温度,用2位数码管显示结果。
材料如下:
1 arduino Uno
2 DS18B20 温度传感器
3 2位数码管
数码管相关:
数码管的原理很简单,一般一个字符由7段组成,由a-g,需要控制每段的电压高低来是否亮,比如0则应该abcdef亮,中间的g暗。所以,数码管的接入关键是看针脚的定义。
对于n位数码管,一般是共阳或共阴,针脚的具体定义需要看相应的参数图,不要自己猜测。一般会有n位针脚对应各自的字符开关。一般针脚的序列是从左下角逆时针 1...n。
在自己程序里需要定义数码管的针脚对应板子上的io口,比如我这里:
Arduino引脚 数码管引脚
D11 10(A)
D10 9(B)
D2 1(C)
D3 4(D)
D4 3(E)
D5 6(F)
D6 5(G)
D7 2(DP)
D8 8(LED1)
D9 7(LED2)
右边针脚数字顺序即图里下部所示a-dp对应的顺序。
可以参考:
http://blog.sina.com.cn/s/blog_a6164cc90101a6ks.html
http://www.arduino.cn/thread-1224-1-1.html
相关资料和软件可以在附件中找到。
温度相关:
用的是DS18B20 温度传感器,注意不同型号的温度传感器对应的库和方法不一样,需要针对性开发。这里有篇很好的文章:http://bbs.iqrobot.com/forum.php?mod=viewthread&tid=45。
相关的内容可见http://www.pjrc.com/teensy/td_libs_OneWire.html和http://www.milesburton.com/?title=Dallas_Temperature_Control_Library
需要的库也可从附件下载,解压缩放到arduino的libraries目录下。(一般需要重启arduino IDE才可生效)
我的测试代码:
#include <OneWire.h> #include <DallasTemperature.h> //LED #define SEL_LED1 8 //arduino数字针脚8对应LED1的控制 #define SEL_LED2 9 //arduino数字针脚9对应LED1的控制 const unsigned char LED8Pin[]={ 11,10,2,3,4,5,6,7,8,9};//A B C D E F G Dp sel_led const unsigned char LED8Code[]={ //该值可以通过取模软件获得,共阳 0xC0, // 0 0xF9, // 1 0xA4, // 2 0xB0, // 3 0x99, // 4 0x92, // 5 0x82, // 6 0xF8, // 7 0x80, // 8 0x90, // 9 0x88, // A 0x83, // B 0xC6, // C 0xA1, // D 0x86, // E 0x8E // F }; // Data wire is plugged into port 10 on the Arduino #define ONE_WIRE_BUS 13 // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature. DallasTemperature sensors(&oneWire); void setup(void) { // start serial port Serial.begin(9600); Serial.println("Dallas Temperature IC Control Library Demo"); //LED char i; for(i=0;i<10;i++) { pinMode(LED8Pin[i], OUTPUT); digitalWrite(LED8Pin[i], HIGH); } // Start up the library sensors.begin(); } void loop(void) { // call sensors.requestTemperatures() to issue a global temperature // request to all devices on the bus Serial.print("Requesting temperatures..."); sensors.requestTemperatures(); // Send the command to get temperatures Serial.println("DONE"); Serial.print("Temperature for the device 1 (index 0) is: "); float tempValue = sensors.getTempCByIndex(0); int changeValue = getRightValue(tempValue); Serial.print(tempValue); Serial.print(" "); Serial.println(changeValue); for(int i=0;i<20;i++){ LEDAll_Show(changeValue); } //delay(1000); } int getRightValue(float f){ float intValue = f*100; int small = (int)intValue%100; int diff = (small>=50? 1:0); return diff+intValue/100; } void LED8Show(char data){ char i; char j; char hc; if(0<=data<16) { hc = LED8Code[data]; for(i=0;i<8;i++) { j = bitRead(hc,i); digitalWrite(LED8Pin[i], j); if(j==0){ //digitalWrite(LED8Pin[i], LOW); } } } } void LEDAll_Show(unsigned char num) { unsigned char VH,VL; VH = num/10; VL = num%10; //Serial.println(num); digitalWrite(SEL_LED1, 1); digitalWrite(SEL_LED2, 0); LED8Show(VH); delay(10); digitalWrite(SEL_LED1, 0); digitalWrite(SEL_LED2, 1); LED8Show(VL); delay(10); digitalWrite(SEL_LED1, 0); digitalWrite(SEL_LED2, 0); }
布线和结果请看附件效果图。