snifer

【原创】嵌入式无线温度监测仪开发实例

0
阅读(2797)

我工作的地方全年平均温度28摄氏度,人均淡水资源量全国第一,所以鱼塘特别多,很多鱼塘再养鱼的过程中需要监测水塘的温度,给几个小公司设计过无线温度检测仪,在此与大家分享。


首先温度监测仪可以实现如下功能:
1、使用铂电阻传感器探测出目标温度,并通过图形的方式显示在LCD屏上
2、当温度超过报警温度时,在LCD屏上显示报警状态
3、当温度超过报警温度时,通过PWM控制蜂鸣器实现报警
4、当温度超过报警温度时,点亮LED报警灯

5、可以通过按键关闭或打开蜂鸣器及报警等功能

系统的构成如下图,非常简单:

具体电路如下图:


1、报警灯电路

处理器S3C2410通过GPF4控制报警LED灯,如下图所示:


2、蜂鸣器电路

处理器S3C2410通过GPB0输出PWM信号控制蜂鸣器,如下图所示:


3、按键电路



当GPE11输出0电平时,按键按下后会在EINT0管脚上产生跳沿信号。系统利用此信号产生中断。如下图所示:


4、LCD液晶屏电路。

LCD屏的分辨率为320*240,颜色深度为16位真彩色。

5、温度采集电路

采样温度范围是0~100℃,变送器将温度信号转换为0~3.3V的电压信号。电压信号和S3C2410的AIN0相连。系统通过测量电压信号从而得到当前的温度值。电路如下图所示:

程序工作流程:

按键中断处理程序:




主程序代码:


13.int main(int argc,char **argv)
14.{
15.  unsigned short adc_data;
16.  float f_value;
17.  sys_init();  //初始化 s3c2410's Clock, MMU, Interrupt,Port and UART
18.  led_init();  //LED接口初始化,配置对应的GPIO属性
19.  lcd_init();  //初始化LCD控制器
20.  int_init();   //初始化按键中断
21.  beep_gpio_setup();    //初始化PWM控制蜂鸣器
22.  adc_init();  //初始化A/D控制器
26.while(1)
27.  {
28.  adc_data=adc_get();    //获取到ad转换值
29.  f_value=adc_data*100.0/1024.0;   //转换为对应的电压值
30.  uart_printf(" %0.1f \n",f_value);
31.  Fill_area(60,80,260,120,0x0);  //填充温度计的默认颜色
32.  Fill_area(60,80,(int)(f_value*2),120,0xf000); 
33.  delay(10000);
34.  if(f_value>80)    //判断温度是否超过报警值80
35.  {
36.  if(flag_alarm)  //判断是否设置了报警功能
37.  {
38.  beep_start();//驱动蜂鸣器
39.  led_on();  //打开报警灯
40.  flag_beep=1;  //置标志
41.  }
42.  else
43.  {
44.  if(flag_beep)  //判断标志
45.  {
46.  beep_stop();  //关闭蜂鸣器
47.  led_off();  //关闭报警灯
48.  flag_beep=0;  //flag标志置0
49.  }
50.  }
51.  }
52.  else
53.  {
54.  if(flag_beep)  //判断标志
55.  {
56.  beep_stop();  //关闭蜂鸣器
57.  led_off();  //关闭报警灯
58.  flag_beep=0;  //flag标志置0
59.  } 
60.  }
61.  }
62.  return 0;
63.}


无线传输目前主要采用的是3G模块,具体可见我的另一篇博客,请大家投票啊,谢谢!