Arduino Uno零基础入门学习笔记——智能时钟(可以显示温湿度)【LCD1602+DS1302+温湿度传感器+红外接收器+LED+蜂鸣器】

这篇具有很好参考价值的文章主要介绍了Arduino Uno零基础入门学习笔记——智能时钟(可以显示温湿度)【LCD1602+DS1302+温湿度传感器+红外接收器+LED+蜂鸣器】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、电路连接

需要以下几个外设

  1. LCD1602(IIC驱动)
  2. DS1302
  3. 1-WIRE温湿度检测器
  4. 红外接收器
  5. 遥控器
  6. 两个LED(一红一蓝)
  7. 蜂鸣器

LCD1602IIC

LCD1602IIC引脚 Arduino引脚
VCC 5V
GND GND
SDA A4
SCL A5

我这里的LCD1602是IIC的,所以只需要4根线

Arduino Uno零基础入门学习笔记——智能时钟(可以显示温湿度)【LCD1602+DS1302+温湿度传感器+红外接收器+LED+蜂鸣器】

1-WIRE温湿度检测器

传感器引脚 Arduino引脚
- GND
S 8
+ 5V

Arduino Uno零基础入门学习笔记——智能时钟(可以显示温湿度)【LCD1602+DS1302+温湿度传感器+红外接收器+LED+蜂鸣器】
中间的线是要接5V的

红外接收器

红外接收器引脚 Arduino引脚
- GND
+ 5V
S 11

Arduino Uno零基础入门学习笔记——智能时钟(可以显示温湿度)【LCD1602+DS1302+温湿度传感器+红外接收器+LED+蜂鸣器】

DS1302

DS1302引脚 Arduino引脚
VCC 5V
GND GND
RST A0(14)
DAT A1(15)
SCK A2(16)

Arduino Uno零基础入门学习笔记——智能时钟(可以显示温湿度)【LCD1602+DS1302+温湿度传感器+红外接收器+LED+蜂鸣器】

蜂鸣器

蜂鸣器引脚 Arduino引脚
- GND
+ 5V
I/O 5

Arduino Uno零基础入门学习笔记——智能时钟(可以显示温湿度)【LCD1602+DS1302+温湿度传感器+红外接收器+LED+蜂鸣器】

LED

LED引脚 Arduino引脚
红色LED 6
蓝色LED 7

Arduino Uno零基础入门学习笔记——智能时钟(可以显示温湿度)【LCD1602+DS1302+温湿度传感器+红外接收器+LED+蜂鸣器】

二、程序

这里需要下载4个库:

  • dht11
  • LiquidCrystal_I2C
  • IRremote
  • DS1302

我把他们都传到我的Github里面了:SmartClock
程序里面的红外遥控器是按任何一个按键都可以切换模式,因为我这个遥控器的解码有点问题,可能是这个库的时序问题,大家可以自己个性化自己的按键,改一下就能用了

功能简介

LCD1602屏默认显示温度和湿度,在按下遥控器任何一个按键时,LCD1602屏显示时间,再按下显示温度和湿度。温度湿度还有时间数据都会在串口打印出来,方便调试。在温度高于一定阈值之后,亮红灯,在湿度低于一定阈值后,亮蓝灯。时钟到设定的时间后,蜂鸣器叫10声。

#include <dht11.h>   //引用dht11库文件,使得下面可以调用相关参数
#include <Wire.h> 
#include <LiquidCrystal_I2C.h> //引用I2C库
#include <DS1302.h>
#include<IRremote.h>

#define dht11Pin 8   //定义温湿度针脚号为8号引脚
#define ledBlue 6 //定义湿度阈值灯为6号引脚
#define ledRed 7 //定义温度阈值灯为7号引脚
#define beep 5 //定义蜂鸣器为5号引脚
dht11 dht;    //实例化一个对象
char buf1[50];
char buf2[50];
LiquidCrystal_I2C lcd(0x27,16,2); //这里是0x27
DS1302 rtc(14, 15, 16); //对应DS1302的RST,DAT,CLK
int RECV_PIN = 11;   //红外线接收器OUTPUT端接在pin 11
int Keynum=1;
IRrecv irrecv(RECV_PIN);   // 定义IRrecv 对象来接收红外线信号
decode_results results;   //解码结果放在decode_results构造的对象results里

void initRTCTime(void)//初始化RTC时钟
{
  rtc.writeProtect(false); //关闭写保护
  rtc.halt(false); //清除时钟停止标志
  Time t(2022, 12, 19, 16, 25, 50, 4); //新建时间对象 最后参数位星期数据,周日为1,周一为2以此类推
  rtc.time(t);//向DS1302设置时间数据
}
void printTime()//打印时间数据
{
  Time tim = rtc.time(); //从DS1302获取时间数据
  
  snprintf(buf1, sizeof(buf1), "%04d-%02d-%02d ",
           tim.yr, tim.mon, tim.date
           );
  snprintf(buf2, sizeof(buf2), "%02d:%02d:%02d",
           tim.hr, tim.min, tim.sec);

  Serial.println(buf1);
  Serial.println(buf2);

}
void setup()    //初始化函数,只执行一次
{
  Serial.begin(9600);      //设置波特率参数
  pinMode(dht11Pin, OUTPUT);    //通过定义将Arduino开发板上dht11Pin引脚(8号口)的工作模式转化为输出模式
  pinMode(ledBlue, OUTPUT);
  pinMode(ledRed, OUTPUT);
  pinMode(beep, OUTPUT);

  lcd.init();                  // 初始化LCD
  lcd.backlight();             //设置LCD背景等亮
  initRTCTime();
  irrecv.enableIRIn(); //    启动红外解码
  delay(2000);
}

void loop()     //loop函数,重复循环执行
{
  
  if (irrecv.decode(&results)!=0)  
  {        
      delay(500);
      Keynum++;
      delay(500);
      lcd.clear();
      if(Keynum>=3)
      {
        Keynum=1;
      }
      irrecv.resume();
  }
  switch(Keynum)
  {
    case 1:  SerialTem();ther();TemJudge();alarm();break;
    case 2:  printTime();TemJudge();
            Time tim = rtc.time(); //从DS1302获取时间数据
            lcd.setCursor(0,0);
            lcd.print(buf1);
            lcd.setCursor(0,1);
            lcd.print(buf2);
            alarm();
            break;
    default: break;
  }   
}
void ther()//温湿度计
{
  int tol = dht.read(dht11Pin);    //将读取到的值赋给tol
  int temp = (float)dht.temperature; //将温度值赋值给temp
  int humi = (float)dht.humidity; //将湿度值赋给humi

  lcd.setCursor(0,0);
  lcd.print("Tem:");
  lcd.setCursor(4,0);
  lcd.print(temp);
  lcd.setCursor(6,0);
  lcd.print("C");

  lcd.setCursor(0,1);
  lcd.print("Hum:");
  lcd.setCursor(4,1);
  lcd.print(humi);
  lcd.setCursor(6,1);
  lcd.print("%");
}
void TemJudge()
{
  int tol = dht.read(dht11Pin);    //将读取到的值赋给tol
  int temp = (float)dht.temperature; //将温度值赋值给temp
  int humi = (float)dht.humidity; //将湿度值赋给humi
  if(temp>=20)//假如温度高于20度亮红灯
  {
    digitalWrite(ledBlue,HIGH);
  }
  else digitalWrite(ledBlue,LOW);
  if(humi>=34)//假如湿度高于34%亮蓝灯
  {
    digitalWrite(ledRed,HIGH);
  }
  else digitalWrite(ledRed,LOW);

}
void alarm()
{
  digitalWrite(beep,HIGH);
  int alarm_hr=16;//设置闹钟小时
  int alarm_min=26;//设置闹钟分钟
  int alarm_sec=0;//设置闹钟秒
    Time tim = rtc.time(); //从DS1302获取时间数据
  
  snprintf(buf2, sizeof(buf2), "%02d:%02d:%02d",
           tim.hr, tim.min, tim.sec);
  if((tim.hr==alarm_hr)&&(tim.min==alarm_min)&&(tim.sec==alarm_sec))
  {
    for(int i=0;i<20;i++)
    {
    digitalWrite(beep,LOW);
    delay(100);
    digitalWrite(beep,HIGH);
    delay(100);
    }
  }
}
void SerialTem()//串口打印温度湿度
{
  int tol = dht.read(dht11Pin);    //将读取到的值赋给tol
  int temp = (float)dht.temperature; //将温度值赋值给temp
  int humi = (float)dht.humidity; //将湿度值赋给humi
  Serial.print("Temperature:");     //在串口打印出Tempeature:
  Serial.print(temp);       //在串口打印温度结果
  Serial.println(".C");    //在串口打印出℃
  Serial.print("Humidity:");     //在串口打印出Humidity:
  Serial.print(humi);     //在串口打印出湿度结果
  Serial.println("%");     //在串口打印出%  
}

三、效果

Arduino Uno零基础入门学习笔记——智能时钟(可以显示温湿度)【LCD1602+DS1302+温湿度传感器+红外接收器+LED+蜂鸣器】文章来源地址https://www.toymoban.com/news/detail-456294.html

到了这里,关于Arduino Uno零基础入门学习笔记——智能时钟(可以显示温湿度)【LCD1602+DS1302+温湿度传感器+红外接收器+LED+蜂鸣器】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【雕爷学编程】Arduino智能家居之使用Arduino Uno和DHT22传感器发送温度和湿度数据到ThingSpeak

    Arduino是一个开放源码的电子原型平台,它可以让你用简单的硬件和软件来创建各种互动的项目。Arduino的核心是一个微控制器板,它可以通过一系列的引脚来连接各种传感器、执行器、显示器等外部设备。Arduino的编程是基于C/C++语言的,你可以使用Arduino IDE(集成开发环境)来

    2024年02月04日
    浏览(37)
  • 原理图认识之Arduino(入门学习笔记)

    这是一张简单的Arduino开发板原理图,红色圈起来的代表实际连接在一起,为避免用线连接起来,在图中用同样名称的5v0连接。       AMS1117-5.0是一种线性稳压器,其工作原理是将输入电压稳定在5V输出。因此,将12V的输入电压通过AMS1117-5.0可以得到稳定的5V输出电压。 XC6206P

    2024年02月03日
    浏览(25)
  • Arduino UNO HC-05蓝牙配对教程

    1. 准备材料         Arduino1(主)、Arduino2(从)、蓝牙1(主)、蓝牙2(从)、杜邦线若干 2. 接线方式(主从一致) 1.主机配对 1. 新建一个空白工程,直接上传到Arduino。   2. 设置蓝牙进入AT指令模式,具体操作方法:按住蓝牙模块按钮,然后上电,直到蓝牙模块LED进入慢闪烁模式,

    2023年04月27日
    浏览(33)
  • Arduino UNO 4X4矩阵键盘

    目录 一,硬件 二,原理 三,电路图 四,代码  五,实物图 Arduino UNO 4X4矩阵键盘         连接矩阵键盘的8个IO全部上拉,先使行线变为输入,列线变为输出并为低电平,若有按键按下,则对应的行线接地,判断哪个行线为低电平,则可读出第几行有按键被按下;然后使列

    2024年02月16日
    浏览(29)
  • 【ESP32最全学习笔记(基础篇)——2.ESP32 Arduino 集成开发环境】

    关于本教程: 1.ESP32简介                                                                 2.ESP32 Arduino 集成开发环境 ☑ 3.VS 代码和 PlatformIO 4.ESP32 引脚 5.ESP32 输入输出 6.ESP32 脉宽调制 7.ESP32 模拟输入 8.ESP32 中断定时器 9 .ES P32 深度睡眠 ESP32 网络

    2024年02月10日
    浏览(37)
  • 使用Arduino Uno构建一个巡线机器人

    原文 MX 巡线机器人 (LFR: line follower robot)是一种简单的自主引导机器人,它遵循在地面上绘制的线来检测白色表面上的暗线或黑暗表面上的白线。在本教程中,使用 Arduino Uno 和一些易于访问的组件构建黑线跟随机器人。 巡线机器人的原理 如前所述,巡线机器人(LFR)跟随

    2024年02月10日
    浏览(29)
  • 【宿舍指纹锁---Arduino UNO (保姆级教程)】

    Arduino UNO AS608指纹模块+TTL转接口 MG996R舵机 1602液晶 胶枪 杜邦线 面包板 细线 5v电源 https://github.com/adafruit/Adafruit-Fingerprint-Sensor-Library/archive/master.zip 1.首先下载Adafruit指纹库(https://github.com/adafruit/Adafruit-Fingerprint-Sensor-Library/archive/master.zip)。下载完成后,您将得到一个.zip文件;

    2024年02月02日
    浏览(43)
  • arduino uno+驱动器控制42步进电机

    1.步进电机工作原理 步进电机通过不停的变换通电线圈和线圈的通电方向进行旋转,每次变换使步进电机转子转动1.8°。如图所示,这里采用的是两相四线步进电机,所有的转动都由以下四个步骤构成 2.arduino+驱动器+步进电机,接线示意图 3.编写arduino程序

    2024年02月13日
    浏览(24)
  • 基于Arduino Uno开发板制作音乐播放器

    1.Arduino开发板 Arduino Uno 是一款基于 Microchip ATmega328P 微控制器的开源微控制器板,由 Arduino.cc 开发,最初于 2010 年发布。该板配备了一组数字和模拟输入/输出 (I/O) 引脚,可以连接到各种扩展板(屏蔽)和其他电路。 该板具有 14 个数字 I/O 引脚(6 个能够进行 PWM 输出)、6 个

    2024年02月16日
    浏览(31)
  • 【ESP32最全学习笔记(基础篇)——5.ESP32 数字输入和数字输出(Arduino IDE)】

    关于本教程: 1.ESP32简介                                                                 2.ESP32 Arduino 集成开发环境 3.VS 代码和 PlatformIO 4.ESP32 引脚 5.ESP32 输入输出 ☑ 6.ESP32 脉宽调制 7.ESP32 模拟输入 8.ESP32 中断定时器 9 .ESP32 深度睡眠 ESP32 网络

    2024年02月01日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包