snifer

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

0
阅读(2746)

我工作的地方全年平均温度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模块,具体可见我的另一篇博客,请大家投票啊,谢谢!

Baidu
map