技术:Arduino、光敏传感器、DHT11、DS1302、OLED显示屏
 

概述

项目My-Clock是一个环境监测时钟,接入光敏传感器和温湿度传感器监测环境信息,加入DS1302模块用于获取时间,并用OLED显示屏进行实时显示。

详细

一、My-Clock简介

项目My-Clock是一个环境监测时钟,接入光敏传感器和温湿度传感器监测环境信息,加入DS1302模块用于获取时间,并用OLED显示屏进行实时显示。Arduino内部有AD/DA转换器,所以用Arduino来获取一些传感器的模拟值是非常容易的事。

My-Clock的硬件材料:Arduino、光敏传感器、DHT11温湿度传感器和0.96寸OLED显示屏(7针)。


二、My-Clock实现

1. 硬件连接:

2. 加载库:

  • 右击Arduino软件->打开文件所在的位置

  • 将本项目代码文件夹中的Dht11,DS1302文件夹复制到libraries文件夹中

  • 打开Arduino IDE -> 项目 -> 加载库 -> 管理库中搜索U8glib,然后安装即可

3. OLED如何显示中文呢?

U8glib的位图函数可以实现中文的显示:

函数原型:drawBitmapdrawBitmapP(u8g_uint_t x ,u8g_uint_t y ,u8g_uint_t cnt,u8g_uint_t h , const uint8_t * bitmap)//参数: x:x轴起点,y:y轴起点,cnt:一行是8的几倍,h:高,bitmap为数组地址

打开PCtoLCD2002.exe,修改以下:

输入你想要显示的汉字,点击->生成字模,复制下面的数组即可:

这里我们得到的是:

{0x00,0x08,0x00,0x08,0x7C,0x08,0x44,0x08,0x45,0xFE,0x44,0x08,0x44,0x08,0x7C,0x08},
{0x44,0x88,0x44,0x48,0x44,0x48,0x44,0x08,0x7C,0x08,0x44,0x08,0x00,0x28,0x00,0x10},/*"时",0*/
{0x20,0x00,0x13,0xFC,0x10,0x04,0x40,0x04,0x47,0xC4,0x44,0x44,0x44,0x44,0x44,0x44},
{0x47,0xC4,0x44,0x44,0x44,0x44,0x44,0x44,0x47,0xC4,0x40,0x04,0x40,0x14,0x40,0x08},/*"间",1*/

放到代码中为:

const uint8_t bitmap_z0 [] U8G_PROGMEM ={
0x00,0x08,0x00,0x08,0x7C,0x08,0x44,0x08,0x45,0xFE,0x44,0x08,0x44,0x08,0x7C,0x08,
0x44,0x88,0x44,0x48,0x44,0x48,0x44,0x08,0x7C,0x08,0x44,0x08,0x00,0x28,0x00,0x10,
};//‘时’
const uint8_t bitmap_z1 [] U8G_PROGMEM ={
0x20,0x00,0x13,0xFC,0x10,0x04,0x40,0x04,0x47,0xC4,0x44,0x44,0x44,0x44,0x44,0x44,
0x47,0xC4,0x44,0x44,0x44,0x44,0x44,0x44,0x47,0xC4,0x40,0x04,0x40,0x14,0x40,0x08,
};//‘间’

接着用drawBitmapP函数就可以打印中文“时间”了:

u8g.drawBitmapP ( 0 , 0 , 2 , 16 , bitmap_z0);   //在(0,0)处打印‘时’
u8g.drawBitmapP ( 16 , 0 , 2 , 16 , bitmap_z1); //在(0,0)处打印‘间’

OLED显示代码如下:

u8g.firstPage();  //表示图像循环的开始
do{
u8g.setColorIndex(1);
u8g.drawBitmapP ( 0 , 0 , 2 , 16 , bitmap_z0); //时
u8g.drawBitmapP ( 16 , 0 , 2 , 16 , bitmap_z1); //间
u8g.setFont(u8g_font_fub11); //设置字体和自号
u8g.setPrintPos(32, 13); //显示的位置
u8g.print(":"); //打印‘:’
u8g.setPrintPos(42, 13); //显示的位置
u8g.print(buf); //打印时间
u8g.setPrintPos(90, 13); //显示的位置
u8g.print(day); //打印星期 u8g.setPrintPos(0, 35); //显示的位置
u8g.print("T:"); //打印“T:”
u8g.setPrintPos(22, 35); //显示的位置
u8g.print(tem); //打印温度
u8g.setPrintPos(42, 35); //显示的位置
u8g.print("C"); //打印‘C’
u8g.setPrintPos(68, 35); //显示的位置
u8g.print("H:"); //打印“H:”
u8g.setPrintPos(90, 35); //显示的位置
u8g.print(hum); //打印湿度
u8g.setPrintPos(110, 35); //显示的位置
u8g.print("%"); //打印‘%’ u8g.setPrintPos(0, 60); //显示的位置
u8g.print("L:"); //打印“L:”
u8g.setPrintPos(18, 60); //显示的位置
u8g.print(light_date); //打印光强
u8g.setPrintPos(36, 60); //显示的位置
u8g.print("%"); //打印‘%’ u8g.setPrintPos(60, 60); //显示的位置
u8g.print("MyClock"); //打印“MyClock” }while( u8g.nextPage() ); //u8g.nextPage() 表示图像循环的结束

My-Clock效果如下图:

My-Clock效果演示视频:


三、总结

前面教大家如何开发传感器和使用显示屏,都是为本文做铺垫的,做个小项目将所学的知识整合起来是很有必要的。这里我将获取到的时间、温湿度和光照强度值在OLED上简单的显示出来。Arduino内部有AD/DA转换器,因此接收传感器的模拟值非常容易,大家也可以在此功能上加入其他传感器,继续扩展功能。希望你能继续支持!!!

觉得对你有帮助的话,可以收藏下哦,后面还会介绍其他高大上的东西!!!


四、项目结构图

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

最新文章

  1. webgl画个点
  2. 第7章 权限管理(3)_文件系统属性和sudo权限
  3. 强大好用的"文本"编辑器
  4. SSH使用密钥登录并禁止口令登录实践
  5. C++之路进阶——codevs1281(Xn数列)
  6. Maven学习总结(七)——eclipse中使用Maven创建Web项目
  7. 使用Git Bash for Windows
  8. 这些git技能够你用一年了
  9. 05_最长公共子序列问题(LCS)
  10. JS 公共方法
  11. 大饱眼福 7款类型各异的CSS3实用菜单
  12. Python基础复习_Unit one
  13. SQL Server 2008 游标使用实例
  14. (转载)mysql中limit用法
  15. 一个处理Date与String的工具类
  16. wpf CollectionViewSource与ListBox的折叠、分组显示,及输入关键字 Filter的筛选
  17. linux C 文件操作之fgets()
  18. SpringMVC @SessionAttributes注解
  19. 洛谷 [p1439] 最长公共子序列 (NlogN)
  20. 练习 map集合被使用是因为具备映射关系 "进度班" "01" "张三" "进度班" "02" "李四" "J1701" "01" "王五" "J1701" "02" "王二" 此信息中,我们要怎样把上述信息装入集合中, 根据班级信息的到所有的所有信

热门文章

  1. linux中的通配符、元字符、转义符
  2. Mockito 中被 Mocked 的对象属性及方法的默认值
  3. solr高亮设置以及摘要
  4. 生成Markdown目录 字符串解析 MD
  5. 在springboot项目中使用mybatis 集成 Sharding-JDBC
  6. C# 简单日志文本输出
  7. vue项目实现列表页-详情页返回不刷新,再点其他菜单项返回刷新的需求
  8. 【MySQL】PostgresSQL-MySQL对比
  9. Java-JUC(五):闭锁(CountDownLatch)
  10. ElasticSearch无法启动