1.理论知识

装置意义

人的一生中有 80%以上的时间是在室内度过,室内环境品质如声、光、热环境及室 内空气品质对人的身心健康、舒适感和工作效率都会产生显著的影响。在炎热的夏 天,基于全球温室效应下,空调与风扇的利用率将飞速提升,然而风扇与空调相比, 在省电、实惠的前提下适用人群也极为广泛,例如有一部分身体较弱的老人和小孩群 体度,一就旦更上加升偏或爱下风降扇,的就自又然需风要。重但新传手统动风调扇档智,能这化就程导度致不人高们,在风夜速晚档熟位睡较之少后,会并因且忘温记 关风扇而感冒,又或者因为室内温、湿度的升高而感到不适。本选题设计一个多功能 智能电风扇,可检测人体的温度,以及外界环境的温度和湿度,根据三者数据之间差 值的关系与人体舒适度所需大致风力对比,模拟自然风,给人们创造一个舒适的睡眠 环境,防止感冒,又可在节能模式下实现在风扇摇头的过程中红外检测到无人的情况 下化、智能化、环保化和人性化等方向发展,具有一定的市场前景。 风速降低或者停止。既响应了国家节约型社会的号召,又可推动电风扇行业自动。

装置功能

  1. 通过蓝牙控制风扇开关
  2. 自动感知温度湿度开关风扇
  3. 时钟报时

前期准备

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

智能蓝牙控制、温湿度控制时间风扇相关推荐

  1. 智能窗帘控制(光、红外、时间)

    设计简介: 本设计是智能窗帘控制(光.红外.时间),主要实现以下功能: 可实现LCD1602显示光照强度和时间: 可实现通过按键控制窗帘的开关: 可实现通过红外遥控去控制窗帘的开关: 可实现通过时间去 ...

  2. 基于数字电路交通灯信号灯控制系统设计-基于单片机病房温度监测与呼叫系统设计-基于STM32的无线蓝牙心电监护仪系统设计-基于STM32的智能蓝牙温控风扇控制设计-基于STM32的智能温室控制系统设计

    1617基于数字电路交通灯信号灯控制系统设计(仿真电路,论文报告)  摘  要:交通灯控制系统在城市交通控制中发挥着重要的作用,本次课程设计就是以城市交通灯控制系统为背景的,主要通过运用学过的数字电路 ...

  3. 基于STM32的智能温室控制系统仿真电路设计(温控补光)-基于STM32的智能蓝牙温控风扇控制系统设计-基于STM32的无线蓝牙心电监护仪系统设计【毕设课设分享】

    1609 基于STM32的智能蓝牙温控风扇控制系统设计-毕设课设 1.LCD1602液晶显示当前温度,温度上下限值,风扇等级,自动手动模式: 2.设置有4个按键,按键1可以设置自动和手动2种模式切换: ...

  4. 基于STM32单片机智能蓝牙PWM温控风扇带定时APP控制

    实践制作DIY- GC0009-智能蓝牙PWM温控风扇 一.功能说明: 基于STM32单片机设计-智能蓝牙PWM温控风扇 功能介绍: 1.基于STM32F103C系列,OLED,DHT11温度湿度传感 ...

  5. android智能小车 论文,基于安卓手机蓝牙控制的智能小车设计毕业设计(论文).doc...

    编 号: 审定成绩: 毕业设计(论文) 设计(论文)题目: 学院:学 生 姓 名 :专 业 :班 级 :学 号 :指 导 教 师 :答辩组 负责人 : 填表时间:年月 摘 要 随着物联网的兴起,And ...

  6. 基于STM32蓝牙控制的app智能台灯设计

    提示:记录毕设 文章目录 前言 一.任务书 1.1设计(研究)目标: 1.2设计(研究)内容: 二.代码思路 三.硬件设计 3.1总体设计 3.2蓝牙部分设计 四.联系我们 五.部分代码 喜欢请点赞哦 ...

  7. 智能窗帘控制(光、红外、蓝牙)

    设计简介: 本设计是智能窗帘控制(光.红外.蓝牙),主要实现以下功能: 可实现LCD1602显示光照强度和模式以及窗帘的开关: 可实现通过按键控制窗帘的开关: 可实现通过红外遥控去控制窗帘的开关: 可 ...

  8. 智能窗帘控制(语音、时间、光、红外)

    设计简介: 本设计是智能窗帘控制(光.红外.时间.语音),主要实现以下功能: 可实现LCD1602显示光照强度和时间: 可实现通过按键控制窗帘的开关: 可实现通过红外遥控去控制窗帘的开关: 可实现通过 ...

  9. 毕业论文 | 基于安卓手机蓝牙控制的智能小车设计(源代码)

    博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 预告:源代码.论文.电路图设计链接 ...

最新文章

  1. Netty实现自定义简单的编解码器(二)
  2. 【错误记录】Git 使用报错 ( no changes added to commit (use “git add“ and/or “git commit -a“) )
  3. JavaScript时间日期函数
  4. ASP.NET Core 1.1 简介
  5. 关于TCP/IP必须知道的几个基础问题
  6. python两次调用write连续写入的数据之间_两次调用文件的write 方法,以下选项中描述正确的是...
  7. 第六章:nginx实现动静分离
  8. Linux一个驱动管理多个设备,poll方法(select多路监控原理与实现)
  9. Byobu(tmux)的使用与定制
  10. 正则表达式 相关教程
  11. 标签条码打印机开发大纲
  12. 2019年通信工程考研初试经验帖(366分)
  13. Google Cloud API设计指南
  14. 2、硬件工程师之元器件学习—电阻(二)
  15. 【论文笔记-01】Re-ranking Person Re-identification with k-reciprocal Encoding
  16. stm32指纹考勤机 (程序源码包括app程序+pcb电路图+原件清单)
  17. 奥特曼系列ol星球破坏是哪个服务器,奥特曼里的“六大星球毁灭者”,每个都是轻松毁灭星球的存在...
  18. 什么是无线信号的灵敏度和保真度
  19. centos8.2+Tesla T4搭建深度学习运行环境
  20. 【MyBatis-Plus】实现字段自动填充功能

热门文章

  1. .NET库和向后兼容的技巧——第1部分
  2. Gitlab 从 12.1 版本开始将不再支持 MySQL !!!
  3. Ubuntu 放弃支持 32 位应用程序实属乌龙
  4. python 运维管理架构_企业运维监控平台架构设计与实现(ganglia篇)
  5. php mysql json 转义字符_PHP转义Json里的特殊字符的函数
  6. 白月黑羽教python_白月黑羽Python在线教程
  7. vue-quill-editor 获取无法获取光标位置
  8. php sql判断l列的存在,thinkphp 模块不存在:404
  9. Linux错误27,解决在linux下编译32程序出现“/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录问题”...
  10. java 两个对象合并_Java 对象按照多个属性来合并。