• Arduino——My-Clock项目 发布时间:2018-12-31


    技术: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. 硬件连接:

    1546072388181081677.png

    2. 加载库:

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

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

    1546072509820048913.png

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

    1546072521895032534.png

    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,修改以下:

    1546072704913085822.png

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

    1546072791423029489.png

    这里我们得到的是:

    {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效果如下图:

    1546073616622085855.png

    My-Clock效果演示视频:


    三、总结

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

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


    四、项目结构图

    图片7.png

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

  • 相关阅读:
    个体户、独资公司、有限公司、股份公司、控股公司、集团公司
    个人所得税
    移动端下拉滚动刷新
    web页面引入字体
    Flex布局
    NodeJS包管理器之Yarn
    域名、顶级域名、一级域名、二级域名、子域名
    JVM线程状态Running、Sleeping、Wait、Park、Monitor
    Java虚拟机解释器与JIT编译器
    ASP.NET之Cookie(坑爹的Response.Cookies.Remove)
  • 原文地址:https://www.cnblogs.com/demodashi/p/10503394.html
Copyright © 2020-2023  润新知