智能蓝牙控制、温湿度控制时间风扇
1.理论知识
装置意义
人的一生中有 80%以上的时间是在室内度过,室内环境品质如声、光、热环境及室 内空气品质对人的身心健康、舒适感和工作效率都会产生显著的影响。在炎热的夏 天,基于全球温室效应下,空调与风扇的利用率将飞速提升,然而风扇与空调相比, 在省电、实惠的前提下适用人群也极为广泛,例如有一部分身体较弱的老人和小孩群 体度,一就旦更上加升偏或爱下风降扇,的就自又然需风要。重但新传手统动风调扇档智,能这化就程导度致不人高们,在风夜速晚档熟位睡较之少后,会并因且忘温记 关风扇而感冒,又或者因为室内温、湿度的升高而感到不适。本选题设计一个多功能 智能电风扇,可检测人体的温度,以及外界环境的温度和湿度,根据三者数据之间差 值的关系与人体舒适度所需大致风力对比,模拟自然风,给人们创造一个舒适的睡眠 环境,防止感冒,又可在节能模式下实现在风扇摇头的过程中红外检测到无人的情况 下化、智能化、环保化和人性化等方向发展,具有一定的市场前景。 风速降低或者停止。既响应了国家节约型社会的号召,又可推动电风扇行业自动。
装置功能
- 通过蓝牙控制风扇开关
- 自动感知温度湿度开关风扇
- 时钟报时
前期准备
arduino 算是c/c++的一个实现,很多都是用类写的,而类是cpp的一大特征。
Arduino是一款便捷灵活、方便上手的开源硬件产品,具有丰富的接口,有数字I/O口,模拟I/O口,能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他装置来反馈、影响环境。有简便的编程环境IDE,极大的自由度,可拓展性能也很高。
Arduino,是一个基于开放原始码的软硬体平台,构建于开放原始码simple I/O介面版,并且具有使用类似Java,C语言的Processing/Wiring开发环境。
Arduino的编程是利用 Arduino编程语言 (基于 Wiring)和Arduino开发环境(based on Processing)来实现 的。基于Arduino的项目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上运行的软件,他们之间进行通信 (比如 Flash, Processing, MaxMSP)来实现。
C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点, 它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
2.程序实现与设计
2.1 装置中的类对象
2.1.1 信号控制类
void ly(){if (Serial.available() > 0){Incoming_value = Serial.read(); Serial.print(Incoming_value); Serial.print("\n"); if (Incoming_value == '1') flag = 1;else if (Incoming_value == '0') flag = 0 ;if (flag != 0)if (Incoming_value == 'y') digitalWrite(FANPIN, HIGH);else if (Incoming_value == 'n') digitalWrite(FANPIN, LOW); }}
2.1.2 信号扫描类
void scan(){for (int i = 0; i < 10; i ++){ delay(100);ly();}}
2.2 装置中的函数
2.2.1 液晶显示函数
#include <LiquidCrystal.h>const int rs = 3, en = 5, d4 = 10, d5 = 11, d6 = 12 d7 = 13;LiquidCrystal lcd(rs, en, d4, d5, d6, d7);void setup() {lcd.begin(16, 2);//输出Hello Worldlcd.print("hello, world!");}void loop() {lcd.setCursor(0, 1);lcd.print( millis() / 1000);}
2.2.2 温湿度感应函数
#include <dht11.h>dht11 DHT11;#define PIN_DHT11 2void setup(){Serial.begin(9600);}void loop(){DHT11.read(PIN_DHT11);Serial.print("Humidity (%): ");Serial.println((float)DHT11.humidity, 2);Serial.print("Temperature (oC): ");Serial.println((float)DHT11.temperature, 2);delay(500);}
2.2.3 时钟函数
#include <RTClib.h>RTC_DS1307 RTC;void setup () {Serial.begin(9600);RTC.begin();if (! RTC.isrunning()) {Serial.println("RTC is NOT running!");RTC.adjust(DateTime(__DATE__, __TIME__));//采用当前日期和时间初始化芯片中的时间}}void loop () {DateTime now = RTC.now();Serial.print(now.year(), DEC);Serial.print('/');Serial.print(now.month(), DEC);Serial.print('/');Serial.print(now.day(), DEC);Serial.print(' ');Serial.print(now.hour(), DEC);Serial.print(':');Serial.print(now.minute(), DEC);Serial.print(':');Serial.print(now.second(), DEC);Serial.println();delay(1000);}
2.2.4 蓝牙控制函数
void setup(){Serial.begin(9600);}void loop(){while(Serial.available()){char c=Serial.read();if(c=='A'){Serial.println("Hello I am amarino");}}}
2.2.5 风扇控制函数
if (flag != 0)if (Incoming_value == '1') analogWrite(FANPIN,80);else if(Incoming_value == '2')analogWrite(FANPIN,150);else if(Incoming_value == '3')analogWrite(FANPIN,255);else if (Incoming_value == 'n') digitalWrite(FANPIN, LOW);
2.3 装置中的事件
2.3.1 温度感应触发事件
if (flag == 0) {if (hic > 30) {digitalWrite(FANPIN, HIGH);} else {digitalWrite(FANPIN, LOW);}}
2.3.2 蓝牙控制事件
用户通过app蓝牙控制输入y或者n控制风扇开关
2.4 主函数部分
2.4.1 初始化对象
void setup(){// 设定LCD 的行列数目(2 x 16)pinMode(FANPIN, OUTPUT);digitalWrite(FANPIN, LOW);lcd.begin(16, 2);Serial.begin(9600);Wire.begin();RTC.begin();RTC.adjust(DateTime(__DATE__, __TIME__));lcd.createChar(1, flash1);lcd.createChar(2, flash2);lcd.createChar(3, flash3);lcd.write(1);lcd.write(2);lcd.write(3);dht.begin();}
2.4.2 全局变量
RTC_DS1307 RTC;DHT dht(DHTPIN, DHTTYPE);byte flash1[8] = {0b00100, 0b01000, 0b11000, 0b11111, 0b00011, 0b00010, 0b00100, 0b00000};byte flash2[8] = {0b00000, 0b00100, 0b01110, 0b11111, 0b11111, 0b11111, 0b01110, 0b00000};byte flash3[8] = {0b00111, 0b00101, 0b00111, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000};// 初始化针脚const int rs = 3, en = 5, d4 = 10, d5 = 11, d6 = 12 , d7 = 13;LiquidCrystal lcd(rs, en, d4, d5, d6, d7);char Incoming_value = 0;int flag = 0;
3.效果图
4.附录
#include <LiquidCrystal.h>
#include <DHT.h>
#include <DHT_U.h>
#include <Arduino.h>
#include <Wire.h>
#include <RTClib.h>#define DHTPIN A3
#define FANPIN 6
#define DHTTYPE DHT11
RTC_DS1307 RTC;
DHT dht(DHTPIN, DHTTYPE);byte flash1[8] = {0b00100, 0b01000, 0b11000, 0b11111, 0b00011, 0b00010, 0b00100, 0b00000};
byte flash2[8] = {0b00000, 0b00100, 0b01110, 0b11111, 0b11111, 0b11111, 0b01110, 0b00000};
byte flash3[8] = {0b00111, 0b00101, 0b00111, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000};// 初始化针脚
const int rs = 3, en = 5, d4 = 10, d5 = 11, d6 = 12 , d7 = 13;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
char Incoming_value = 0;
int flag = 0;void setup()
{
// 设定LCD 的行列数目(2 x 16)
pinMode(FANPIN, OUTPUT);
digitalWrite(FANPIN, LOW);
lcd.begin(16, 2);
Serial.begin(9600);
Wire.begin();
RTC.begin();
RTC.adjust(DateTime(__DATE__, __TIME__));
lcd.createChar(1, flash1);
lcd.createChar(2, flash2);
lcd.createChar(3, flash3);
lcd.write(1);
lcd.write(2);
lcd.write(3);
dht.begin();
}void ly()
{
if (Serial.available() > 0)
{
Incoming_value = Serial.read();
Serial.print(Incoming_value);
Serial.print("\n");
if (Incoming_value == 'l') flag = 1;
else if (Incoming_value == 'w') flag = 0 ;
if (flag != 0)
if (Incoming_value == '1')
analogWrite(FANPIN,80);
else if(Incoming_value == '2')
analogWrite(FANPIN,150);
else if(Incoming_value == '3')
analogWrite(FANPIN,255);
else if (Incoming_value == 'n')
digitalWrite(FANPIN, LOW);
}
}void scan()
{
for (int i = 0; i < 10; i ++)
{ delay(100);
ly();
}
}void loop()
{
ly();
// 将光标设到第5列,第2行(第一列第一行为0,0),设置显示到屏幕第二行中间
float h = dht.readHumidity();
float t = dht.readTemperature();
float hic = dht.computeHeatIndex(t, h, false);
if (flag == 0) {
if (hic > 30) {
digitalWrite(FANPIN, HIGH);
} else {
digitalWrite(FANPIN, LOW);
}
}
lcd.setCursor(1, 0);
lcd.write(1);
lcd.print("AMAZING FAN!");
lcd.write(2);
scan();
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("H:");
lcd.print(h);
lcd.print("%");
lcd.print(" ");
lcd.setCursor(4, 1);
lcd.print("T:");
lcd.print(hic);
lcd.write(3);
lcd.print("C");
lcd.setCursor(1, 1);
scan();
lcd.clear();
lcd.setCursor(1, 0);
DateTime now = RTC.now();
lcd.print("DATE:");
lcd.print(now.year());
lcd.print('/');
lcd.print(now.month());
lcd.print('/');
lcd.print(now.day());
lcd.print(' ');
lcd.setCursor(1, 1);
lcd.print("TIME:");
lcd.print(now.hour());
lcd.print(':');
lcd.print(now.minute());
lcd.print(':');
lcd.print(now.second());
scan();
lcd.clear();
}
参考链接:
【1】Arduino连接LCD1602显示屏
【2】Arduino使用蓝牙通信模块
【3】使用Arduino Uno输出自定义频率的PWM
转载于:https://www.cnblogs.com/boxker/p/10820328.html
智能蓝牙控制、温湿度控制时间风扇相关推荐
- 智能窗帘控制(光、红外、时间)
设计简介: 本设计是智能窗帘控制(光.红外.时间),主要实现以下功能: 可实现LCD1602显示光照强度和时间: 可实现通过按键控制窗帘的开关: 可实现通过红外遥控去控制窗帘的开关: 可实现通过时间去 ...
- 基于数字电路交通灯信号灯控制系统设计-基于单片机病房温度监测与呼叫系统设计-基于STM32的无线蓝牙心电监护仪系统设计-基于STM32的智能蓝牙温控风扇控制设计-基于STM32的智能温室控制系统设计
1617基于数字电路交通灯信号灯控制系统设计(仿真电路,论文报告) 摘 要:交通灯控制系统在城市交通控制中发挥着重要的作用,本次课程设计就是以城市交通灯控制系统为背景的,主要通过运用学过的数字电路 ...
- 基于STM32的智能温室控制系统仿真电路设计(温控补光)-基于STM32的智能蓝牙温控风扇控制系统设计-基于STM32的无线蓝牙心电监护仪系统设计【毕设课设分享】
1609 基于STM32的智能蓝牙温控风扇控制系统设计-毕设课设 1.LCD1602液晶显示当前温度,温度上下限值,风扇等级,自动手动模式: 2.设置有4个按键,按键1可以设置自动和手动2种模式切换: ...
- 基于STM32单片机智能蓝牙PWM温控风扇带定时APP控制
实践制作DIY- GC0009-智能蓝牙PWM温控风扇 一.功能说明: 基于STM32单片机设计-智能蓝牙PWM温控风扇 功能介绍: 1.基于STM32F103C系列,OLED,DHT11温度湿度传感 ...
- android智能小车 论文,基于安卓手机蓝牙控制的智能小车设计毕业设计(论文).doc...
编 号: 审定成绩: 毕业设计(论文) 设计(论文)题目: 学院:学 生 姓 名 :专 业 :班 级 :学 号 :指 导 教 师 :答辩组 负责人 : 填表时间:年月 摘 要 随着物联网的兴起,And ...
- 基于STM32蓝牙控制的app智能台灯设计
提示:记录毕设 文章目录 前言 一.任务书 1.1设计(研究)目标: 1.2设计(研究)内容: 二.代码思路 三.硬件设计 3.1总体设计 3.2蓝牙部分设计 四.联系我们 五.部分代码 喜欢请点赞哦 ...
- 智能窗帘控制(光、红外、蓝牙)
设计简介: 本设计是智能窗帘控制(光.红外.蓝牙),主要实现以下功能: 可实现LCD1602显示光照强度和模式以及窗帘的开关: 可实现通过按键控制窗帘的开关: 可实现通过红外遥控去控制窗帘的开关: 可 ...
- 智能窗帘控制(语音、时间、光、红外)
设计简介: 本设计是智能窗帘控制(光.红外.时间.语音),主要实现以下功能: 可实现LCD1602显示光照强度和时间: 可实现通过按键控制窗帘的开关: 可实现通过红外遥控去控制窗帘的开关: 可实现通过 ...
- 毕业论文 | 基于安卓手机蓝牙控制的智能小车设计(源代码)
博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 预告:源代码.论文.电路图设计链接 ...
最新文章
- Netty实现自定义简单的编解码器(二)
- 【错误记录】Git 使用报错 ( no changes added to commit (use “git add“ and/or “git commit -a“) )
- JavaScript时间日期函数
- ASP.NET Core 1.1 简介
- 关于TCP/IP必须知道的几个基础问题
- python两次调用write连续写入的数据之间_两次调用文件的write 方法,以下选项中描述正确的是...
- 第六章:nginx实现动静分离
- Linux一个驱动管理多个设备,poll方法(select多路监控原理与实现)
- Byobu(tmux)的使用与定制
- 正则表达式 相关教程
- 标签条码打印机开发大纲
- 2019年通信工程考研初试经验帖(366分)
- Google Cloud API设计指南
- 2、硬件工程师之元器件学习—电阻(二)
- 【论文笔记-01】Re-ranking Person Re-identification with k-reciprocal Encoding
- stm32指纹考勤机 (程序源码包括app程序+pcb电路图+原件清单)
- 奥特曼系列ol星球破坏是哪个服务器,奥特曼里的“六大星球毁灭者”,每个都是轻松毁灭星球的存在...
- 什么是无线信号的灵敏度和保真度
- centos8.2+Tesla T4搭建深度学习运行环境
- 【MyBatis-Plus】实现字段自动填充功能
热门文章
- .NET库和向后兼容的技巧——第1部分
- Gitlab 从 12.1 版本开始将不再支持 MySQL !!!
- Ubuntu 放弃支持 32 位应用程序实属乌龙
- python 运维管理架构_企业运维监控平台架构设计与实现(ganglia篇)
- php mysql json 转义字符_PHP转义Json里的特殊字符的函数
- 白月黑羽教python_白月黑羽Python在线教程
- vue-quill-editor 获取无法获取光标位置
- php sql判断l列的存在,thinkphp 模块不存在:404
- Linux错误27,解决在linux下编译32程序出现“/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录问题”...
- java 两个对象合并_Java 对象按照多个属性来合并。