极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 21923|回复: 10

我家的温湿度测量仪

[复制链接]
发表于 2012-6-15 10:26:42 | 显示全部楼层 |阅读模式


盛夏来了,又热又潮,不知道家里的气候如何,想着买个温湿度计,但是物价飞涨,工资不涨,没钱买啊!不如自己做个,应该不难,于是开始动手制作。
     这个作品的两个主角是数字温湿度传感器 DHT11和LCD4884 Shield 点阵液晶显示器,好像很简单,就是把DHT11的温湿度值采样到Arduino控制器里,然后对采样值进行处理,按照格式发送到LCD4884显示器中显示出来。我也就花了1天半的时间搞出来的。
    LCD4884显示器板子直接插在Arduino UNO控制板的母槽引脚上,它与Arduino板子形成层叠关系,但是并未把Arduino可用的端口挡住,因为LCD4884板子上把Arduino的5个模拟端口和6个数字端口引出来了,并布局到LCD4884板子上,以便使用。 于是DHT11温湿度传感器用并排的三根杜邦线插在了模拟端口5上。
     把Arduino控制板和DHT11传感器用双面胶带粘在电池盒背面,再把电池盒的电源插头插到Arduino UNO的电源插座,于是我家的温湿度测量计硬件系统就这样快速搭建完成。至于软件系统的编制,我下面慢慢谈。先介绍LCD4884显示器。
      LCD4884 shield的一款48x84点阵液晶显示器,Arduino叠层设计,可直接插接到大部分Arduino控制器上使用,可显示中文、英文、图片等。模块具有5个模拟扩展端口和6个数字扩展端口,可连接DFRobot公司大部分的模拟或数字传感器,还具有一个小型的手机摇杆,可实现5个按键操作。LCD4884 shield是制作互动作品不可多得的显示器。

    Arduino系统之所以好用,不仅是单片微机本身编程容易,而且给它的外设编程时,只要程序稍复杂些,大都从可以网络上或者厂家得到相应的库文件,LCD4884自然也有好用的库文件,针对Arduino UNO,LCD4884的库文件请下载:


      LCD4884库文件请放在Arduino IDE软件文件夹里的libraries文件夹里,这个库文件就可用了,如下图。(双击图片,都可以放大看图的)


    在Arduino IDE编程环境里,打开库文件里自带的LCD4884样例程序,哇塞,蛮长的,还有些复杂,都是LCD4884板子上的小型手机摇杆“惹得祸”!我这个作品不需要那个摇杆,只需要LCD显示即可,所以我删去了一些“没用的”程序段。
     先做做实验,让屏幕显示:“温度:34'C”和”湿度:52 %“。程序如下(有详细注释):
(注意:程序中itoa()函数作用是,把整数数值转换为字符串,不能转换带小数点的浮点数。)
  1. #include "LCD4884.h" //声明LCD4884库函数
  2. #include "Word1_cn.h" //内含汉字“温度:”的点阵数组的头文件

  3. #include "Word2_cn.h" //内含汉字“湿度:”的点阵数组的头文件


  4. int num1;
  5. int num2;
  6. char string1[10];//温度值字符串变量
  7. char string2[10];//湿度值字符串变量


  8. void setup()
  9. {
  10.    lcd.LCD_init( );//初始化LCD4884
  11.    lcd.LCD_clear( ); //清屏
  12.    //把温度值整数部分转换为字符串
  13.    num1=34;
  14.    itoa(num1,string1,10);
  15.    //把湿度值整数部分转换为字符串
  16.    num2=52;
  17.    itoa(num2,string2,10);
  18. }

  19. //主程序
  20. void loop()
  21. {
  22.     //LCD第6列第1行,显示汉字“温度:”,字体12,显示三个汉字
  23.     lcd.LCD_write_chinese(6,1, Word1_cn,12,3,0,0);
  24.     //LCD第42列第1行,显示温度值整数部分字符,普通显示
  25.     lcd.LCD_write_string(42, 1,string1,MENU_NORMAL);
  26.     //显示温度单位
  27.      lcd.LCD_write_string(54, 1,"'C",MENU_NORMAL);
  28.     //LCD第6列第4行,显示汉字“湿度:”,字体12,显示三个汉字
  29.     lcd.LCD_write_chinese(6,4, Word2_cn,12,3,0,0);
  30.     //LCD第42列第4行,显示湿度值整数部分字符,普通显示
  31.     lcd.LCD_write_string(42,4, string2,MENU_NORMAL);
  32.     //显示湿度单位
  33.     lcd.LCD_write_string(54,4," %",MENU_NORMAL);
  34.     delay(500);//延时0.5s
  35. }
复制代码
看看上面程序,LCD4884可以显示汉字,是通过字模软件提取每个汉字的字模点阵数组来实现的。程序中“温度:”和”湿度:“的字模点阵数组,分别放在红色字体标注的”Word1_cn“和”Word2_cn“头文件里,头文件可以用windows操作系统自带的“记事本”编辑和保存,只不过要记住,文件扩展名为”*.h“。现在问题是用什么字模软件,如何使用它,如何提取它生成的字模点阵字节数据。
LCD汉字字模软件请下载:http://115.com/file/c25immia#
lcd汉字取模软件.zip
    这个字模软件是绿色软件,无需安装,解压后,点击字模软件文件夹里的启动图标,运行软件。请按照图示的步骤顺序操作,然后可以看到,字体为12的”温度:“的点阵数组是什么!



全文见博客文章:http://www.eefocus.com/zhang700309/blog/12-06/280255_7a0b3.html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2012-6-15 16:07:30 | 显示全部楼层
呵呵,这个温湿度计可一点都不便宜丫
回复 支持 反对

使用道具 举报

发表于 2012-6-28 11:57:31 | 显示全部楼层
老张的帖子都很经典。DIY就是一种享受!
回复 支持 反对

使用道具 举报

发表于 2012-9-20 15:03:51 | 显示全部楼层
转换字符串的子程序是哪个库里的呢?
回复 支持 反对

使用道具 举报

发表于 2012-9-21 00:28:55 | 显示全部楼层
LCD4884这货不就是LCD5110嘛
回复 支持 反对

使用道具 举报

发表于 2012-9-21 00:31:47 | 显示全部楼层
zhangdeyue1 发表于 2012-9-20 15:03
转换字符串的子程序是哪个库里的呢?

itoa不是标准库里的函数
标准库里的整型转字符串可以用 snprintf
回复 支持 反对

使用道具 举报

发表于 2012-9-21 07:54:28 | 显示全部楼层
哈哈,5110,老张大师顶
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-21 14:28:39 | 显示全部楼层
太行摄狼 发表于 2012-9-21 07:54
哈哈,5110,老张大师顶

就是玩玩,还没搞过图像显示。
回复 支持 反对

使用道具 举报

发表于 2012-10-15 21:26:46 | 显示全部楼层
这个湿度传感器是数字输出吧,怎么弄的
回复 支持 反对

使用道具 举报

发表于 2012-12-3 14:01:14 | 显示全部楼层
宜昌城老张 发表于 2012-9-21 14:28
就是玩玩,还没搞过图像显示。

我回去的也搞搞,不过看你的帖子真的很享受的,还能学到不少东西
回复 支持 反对

使用道具 举报

发表于 2013-1-23 11:40:39 | 显示全部楼层
照葫芦画瓢 做了一个就是编译出问题
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-1 19:53 , Processed in 0.048396 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表