`
yiqieanhao
  • 浏览: 66057 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于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.htmlhttp://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); 
}



布线和结果请看附件效果图。

  • 大小: 2.6 MB
  • 大小: 30.1 KB
  • 大小: 8.1 KB
  • 大小: 4.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics