技术: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大师发表,拒绝转载,转载需要作者授权

Arduino——My-Clock项目 发布时间:2018-12-31的更多相关文章

  1. 2018.12.31 NOIP训练 偶数个5(简单数论)

    传送门 对于出题人zxyoizxyoizxyoi先%\%%为敬题目需要龟速乘差评. 题意简述:5e55e55e5组数据,给出n,请你求出所有n位数中有偶数个5的有多少,n≤1e18n\le1e18n≤ ...

  2. 2018.12.31 Failed to load JavaHL Library.错误解决

    创建项目出现下面的错误 Failed to load JavaHL Library. These are the errors that were encountered: no libsvnjava ...

  3. 2018.12.31 bzoj4001: [TJOI2015]概率论(生成函数)

    传送门 生成函数好题. 题意简述:求nnn个点的树的叶子数期望值. 思路: 考虑fnf_nfn​表示nnn个节点的树的数量. 所以有递推式f0=1,fn=∑i=0n−1fifn−1−i(n>0) ...

  4. 2018.12.31 bzoj3992: [SDOI2015]序列统计(生成函数+ntt+快速幂)

    传送门 生成函数简单题. 题意:给出一个集合A={a1,a2,...as}A=\{a_1,a_2,...a_s\}A={a1​,a2​,...as​},所有数都在[0,m−1][0,m-1][0,m− ...

  5. 2018.12.31 NOIP训练 czy的后宫6(线性dp)

    传送门 题意简述:给一个nnn个数的数列,你可以把它最多分成mmm段,求每段数之和的最大值的最小值,以及满足这个最小值的时候划分数列的方案数. 思路:第一个问题是二分经典问题,不妨设其答案为limli ...

  6. 2018.12.31 NOIP训练 czy的后宫5(树形dp)

    传送门 题意:给一棵有根树,树有点权,最多选出mmm个点,如果要选一个点必须先选其祖先,问选出来的点权和最大值是多少. 直接背包转移就行了. 代码

  7. 2018.12.31 bzoj3771: Triple(生成函数+fft+容斥原理)

    传送门 生成函数经典题. 题意简述:给出nnn个数,可以从中选1/2/31/2/31/2/3个,问所有可能的和对应的方案数. 思路: 令A(x),B(x),C(x)A(x),B(x),C(x)A(x) ...

  8. Maven入门指南12:将项目发布到私服

    1 . 修改私服中仓库的部署策略 Release版本的项目应该发布到Releases仓库中,对应的,Snapshot版本应该发布到Snapshots仓库中.Maven根据pom.xml文件中版本号&l ...

  9. Delphi C++Builder RAD XE Ver 版本 官方发布时间

    RAD 新版本发布时间记录 代号,官方发布时间 RIO 10.3.1,VER330,Product Ver 26 Program File 20,2019.2.14 发布 24周年 RIO 10.3, ...

随机推荐

  1. iOS截屏方法

    //获取屏幕截屏方法 - (UIImage *)capture { // 创建一个context UIGraphicsBeginImageContextWithOptions(self.view.bo ...

  2. 原生JS实现new方法、new一个对象发生的四部、new里面常用的优先级

    一.js中new一个对象的过程 首先了解new做了什么,使用new关键字调用函数(new ClassA(…))的具体步骤: 1.创建一个新对象: var obj = {}; 2.设置新对象的const ...

  3. Axure-如何设置圆形组件

    --打开Axure软件,在[选择部件库]窗口中找到如图中所示的矩形. --将矩形拖到设计布局中 --将鼠标悬停在矩形上就能看到右上角有一个小圆点 --点击小圆点就能选择不同的形状,如:圆形

  4. object-c 混编 调用C,C++接口

    xcode 支持 object-c 混编,在object-c 中调用c,c++接口 第一步 定义c语言 接口(File.c) #include <stdio.h> void printsB ...

  5. 转:android root tcpdump抓包强烈推荐

    转:http://www.cnblogs.com/findyou/p/3491035.html 写的相当详细且完整,业界良心. adb push d:\tcpdump /data/local/ adb ...

  6. 命令行下的html转pdf工具wkhtmltopdf

    基于webkit和qt的html转pdf的命令行工具,非常好使 http://code.google.com/p/wkhtmltopdf/ http://www.cnblogs.com/shanyou ...

  7. Tomcat下设置项目为默认项目

    项目的实际使用中常常须要将当前项目设为tomcat的默认项目,而不是进入到tomcat的页面,有几种方法能够实现,注意另外一种.第三种情况须要先删除webapps下的ROOT文件夹,否则会失败. 一. ...

  8. Robotframework(1):配置基础环境

    转载:http://www.cnblogs.com/CCGGAAG/p/7800324.html 最近对Robotframework这款基于python的框架比较感兴趣,于是想着来研究一下,下面我们来 ...

  9. 解剖 CPU

    http://www.ruanyifeng.com/blog/2010/11/cpu_autopsy.html 有一个瑞典 Lund 大学物理学博士生,就真的这么干了,还把照片放到网上.我们知道,CP ...

  10. 入门GTD时间管理系统必读

    让我们从什么时间管理开始.什么是时间管理呢?嗯,时间管理就是管理时间.可是,时间怎么能够管理呢? 其实我们管理地并不是时间,而是我们做的事.我们将事情分配到合适的时间段中,在有限的精力中完成它们,得到 ...