如何利用DHT22实现蛇形小音箱的设计

2023-06-07  

该项目是一个模拟自然光循环的摄像头。

我想不需要24/7 24/7 的一个导演到剧情的发展形式,从一个母线到导演的形式,从一个母线到它的出发点都在变化。它们的温度特性也能保持各种自然栖息地的风化和热源季节的变化,并通过日晒和与它们的自然栖息地复制相匹配,以适应它们的状态,同时希望设置。这些设置。

pYYBAGLNKKqAK8iHAAXUYNngFes212.png

它如何

保存启动它的日期和时间(数据显示时间) RTC 未显示。不同的设置(如增加控制以进行改变)。

pYYBAGLNKK-AcfE6AAWD-swOdyo841.png

DHT 22 从读取环境温度和自动。

poYBAGLNKLSALG8bAAWCBtLxtsY157.png

两个温度传感器读取每块岩石以确保它们不会过热。

使用接收到的数据,可以控制在项目盒中的两个中继屏蔽。

pYYBAGLNKLmAS-EkAAVYQl3wZF8908.png

这些继电器控制夜灯、日光、取暖灯、加热岩石1和2、雾化器和风化。

pYYBAGLNKL6AQBNiAATeOZbTcfo569.png

将连接到滚动条,将连接到连接到网关的另一端,将连接到连接点的另一端,将连接到节点的5个输入端,将连接到接地电阻(3个),不电阻连接到连接节点(3)220重要的是,只要你有一个,我已经测试了一些,它们都有效),

我有一个模型,因此不会对后续进行过多的介绍,在设置的时候并不那么重要。

pYYBAGLNKMKAMbSRAAV6uYhit74791.png

这些是我为显示屏幕而制作的屏幕。(我的蛇名是Harold和Kumar。)主只与蛇的数据有关,如拉丁名和本国。日期显示当前温度和设定温度,以及一个相同的显示显示屏幕时间相反(显示日期设置)的切换按钮。 由屏幕显示每日显示的每日显示时间设置。如果发生变化,它就会有一个相关的天数变量,在午夜产生一个。

poYBAGLNKMeABro4AAY_sDI9V2o066.png

我添加了一个用于远程监控的摄像头

poYBAGLNKMyAcljQAAKcmaKqAXo704.png

就是有一个网络服务器,让我读取当前的一个例子。

pYYBAGLNKNKACJ7sAAV_Mt_wl8I709.png

硬件硬件

poYBAGLNKNiAKxH9AAZDXKvNIPE970.png

软件

#include
#include
#include
#include
#include
#include
#include
#包括
#include
#include
#include
#include
#include
#include
#include "DHT.h"
#include
#include
#include "TFTv2.h"
int page;
int firsttimeon = 1;
//时间
可变量 int daynow;
国际月份;
int yearnow;
分钟现在;
时间现在;
int 页面;
int npage;
诠释 dnchan;
浮动常数 LONGITUDE = -1.41503959;
浮动常量纬度 = 8.528874379;
//温度和湿度
变量浮动湿敏;
浮动加湿器;
潮湿的日子;
#define DHTPIN 22 // 温度/湿度传感器 
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
浮动 hkhr1temp;
浮动 hkhr2temp;
浮动 hkdaytemp;
浮动 hknighttemp;
浮动 ambitempcur;
浮动 ambitempdisp;
浮动 hkdaytempdisp;
浮动 hknighttempdisp;
浮动湿气;
浮动湿度;
#define hr1 23
#define hr2 24
OneWire oneWire_hr1(hr1);
OneWire oneWire_hr2(hr2);
达拉斯温度传感器_hr1(&oneWire_hr1);
达拉斯温度传感器_hr2(&oneWire_hr2);
浮动 hr1tempcur;
浮动 hr1tempdisp;
浮动 hr2tempcur;
浮动 hr2tempdisp;
int ambitempday;
int ambitempnight;
浮动室温;
float roomtempdisp;
//光周期
变量 int srhour;
int sr分钟;
int sr秒;
int srhourset;
int srminuteset;
int srhoursetdisp;
int srminutesetdisp;
int srsecondset;
整数 srday;
int sshour;
int ss分钟;
int ss秒;
int sshourset;
int ssminuteset;
int sssecondset;
int ssminutesetdisp;
int sshoursetdisp;
int ssday = 0;
夜间;
byte todaysr[] = {0, 0, 0, 0, 0, 0};
字节今天[] = {0, 0, 0, 0, 0, 0};
字节 dlstime[] = {0, 0, 小时(), 日(), 月(), 年()};
好久不见;
很长一段时间;
很长一段时间;
//引脚变量
//环境热/湿度是引脚 22
//热岩石 1 温度是引脚 23
//热岩石 2 温度是引脚 24
//ds3231rtc SCL 在模拟引脚 A5
// ds3231rtc SDA 在模拟引脚 A4
const诠释 dnlamp = 25;
常量 int 雾化器 = 26;
常量 int hrock1 = 27;
常量 int hrock2 = 28;
常量 int 风扇 = 29;
常量 int 雾水 = 31;
常量 int hlamp = 30;
常量 int rset = 41;
// 传感器质量
验证 int ambithsen;
int hr1sen;
int hr2sen;
诠释福格森;
//开机
验证 int dlpwr;
诠释 hlpwr;
诠释 hr1pwr;
诠释 hr2pwr;
int雾pwr;
int fanpwr;
intfoggerpwr;
触摸屏 ts = 触摸屏(XP、YP、XM、YM);//init TouchScreen 端口引脚
// 文件变量
String myData;
字符串 myDoc;
归档我的文件;
/*Cat5 电线
  Red Taped ---- 继电器盒
  实心棕色 = 5v
  白色棕色 = 接地
  实心绿色 = 始终开启继电器的引脚 7 -- Heat Rock 2 电源 -- Arduino 引脚 = 28
  白色绿色 = 始终开启继电器的引脚 6 -- Heat Rock 1 电源 -- Arduino 引脚 = 27
  稳定蓝色 = 始终开启继电器的引脚 5 -- 热灯电源 -- Arduino 引脚 = 30
  白色蓝色 = 始终开启继电器的引脚 4 -- 日夜灯电源 -- Arduino 引脚 = 25
  纯橙色 = 节电继电器的引脚 5 -- Fogger 电源 -- Arduino 引脚 = 26
  白色橙色 = 节电继电器的引脚 4 -- 未使用
  //
  白色胶带 -- -- 继电器盒
  绿色常亮 = 省电继电器的引脚 7 -- 风扇继电器 -- Arduino 引脚 = 29
  白色绿色 = 未使用
  蓝色常亮 = J1 打开风扇继电器
  白色蓝色 = J1 普通风扇继电器
  棕色常亮 = 未使用
  白色棕色 = 未使用
  常亮橙色 = 5v
  白色橙色 = 接地
  //
  黄色胶带 ---- 传感器
  纯棕色 = 风扇电源
  白色棕色 = 风扇接地
  纯绿色 = 环境温度/湿度传感器 -- Arduino 引脚 = 22
  白色绿色 = 热岩 1 传感器 -- Arduino 引脚 = 23
  纯蓝色 = Heat Rock 2 传感器 -- Arduino 引脚 = 24
  白色蓝色 = 未使用
  纯橙色 = 5v
  白色橙色 = 接地
  //
  红黄色胶带 ---- 触摸屏
  纯棕色 = 右上角 ICSP
  白色棕色 = 模拟 3
  纯绿色 =模拟 2
  白色 绿色 = 模拟 1
  稳定蓝色 = 模拟 0
  白色蓝色 = 重置
  橙色稳定 = 5v
  白色橙色 = 接地
  //
  红色白色胶带 ---- 触摸屏
  稳定棕色 = 数字 7
  白色棕色 = 数字 6
  稳定绿色 = 数字 5
  白色绿色 = 左下 ICSP
  稳定蓝色 = 左上 ICSP
  白色蓝色 = 底部中间 ICSP
  稳定橙色= 顶部 MiddleICSP
  白色橙色 = 底部右侧 ICSP
*/
// 在下面输入您的控制器的 MAC 地址和 IP 地址。
// IP 地址将取决于您的本地网络:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IP地址 ip(192, 168, 1, 109);
// 初始化以太网服务器库
// 带有您要使用的 IP 地址和端口
//(端口 80 是 HTTP 的默认端口):
EthernetServer server(6113);
#define W5200_CS 10
#define SDCARD_CS 4
//Camera definitions
#define VC0706_PROTOCOL_SIGN 0x56
#define VC0706_Serial2_NUMBER 0x00
#define VC0706_COMMAND_RESET 0x26
#define VC0706_COMMAND_GEN_VERSION 0x11
#define VC0706_COMMAND_TV_OUT_CTRL 0x44
#define VC0706_COMMAND_OSD_ADD_CHAR 0x45
#define VC0706_COMMAND_DOWNSIZE_SIZE 0x53
#define VC0706_COMMAND_READ_FBUF 0x32
#define FBUF_CURRENT_FRAME 0
#define FBUF_NEXT_FRAME 0
#define VC0706_COMMAND_FBUF_CTRL 0x36
#define VC0706_COMMAND_COMM_MOTION_CTRL 0x37
#define VC0706_COMMAND_COMM_MOTION_DETECTED 0x39
#define VC0706_COMMAND_POWER_SAVE_CTRL 0x3E
#define VC0706_COMMAND_COLOR_CTRL 0x3C
#define VC0706_COMMAND_MOTION_CTRL 0x42
#define VC0706_COMMAND_WRITE_DATA 0x31
#define VC0706_COMMAND_GET_FBUF_LEN 0x34
#define READ_DATA_BLOCK_NO 56
unsigned char tx_counter;
无符号字符 tx_vcbuffer[20];
bool tx_ready;
布尔 rx_ready;
无符号字符 rx_counter;
无符号字符 VC0706_rx_buffer[80];
uint32_t 帧长度 = 0;
uint32_t vc_frame_address = 0;
uint32_t last_data_length = 0;
// 一个整数变量来计算照片
// 如果你有困难连接,增加
// 但它会不经常刷新
int waitForPhoto = 4;
整数等待计数;
//////////////////
void setup() {
  // 重置 w5100
  pinMode(10, OUTPUT);
  数字写入(10,高);
  // 打开到相机的 Serial2 连接
  Serial2.begin(115200);
  // 设置相机的jpeg压缩
  //数字越小文件越小,但质量越低
  VC0706_compression_ratio(15);
  延迟(100);
  pinMode(SDCARD_CS,输出);
  Sd2卡卡;
  card.init(SPI_FULL_SPEED, SDCARD_CS);
  if (!SD.begin(SDCARD_CS)) {
    rsetFunc();
  }
  // 启动以太网连接和服务器:
  Ethernet.begin(mac, ip);
  server.begin();
  // 把你的设置代码放在这里,运行一次:
  TFT_BL_ON;
  TFT.TFTinit();
  setSyncProvider(RTC.get);
  页 = 1;
  月现在 = 月();
  年份 = 年份();
  分钟=分钟();
  小时现在 = 小时();
  npage = 1;
  湿敏 = 50.00;
  dht.begin();
  sensor_hr1.begin();
  sensor_hr2.begin();
  时间领主塔迪斯;
  tardis.TimeZone(0);
  tardis.Position(纬度,经度);
  // 引脚
  pinMode(dnlamp,输出);
  pinMode(雾化器,输出);
  pinMode(hlamp,输出);
  pinMode(hrock1,输出);
  pinMode(hrock2,输出);
  pinMode(风扇,输出);
  pinMode(雾水,输入);
  myDoc = "daynow.txt";
  读取();
  daynow = myData.toInt();
  myDoc = "hd.txt";
  读取();
  湿天 = myData.toInt();
  myDoc = "hs.txt";
  读取();
  humidminset = myData.toFloat();
  myDoc = "atd.txt";
  读取();
  ambitempday = myData.toInt();
  myDoc = "atdset.txt";
  读取();
  hkdaytempdisp = myData.toFloat();
  myDoc = "atn.txt";
  读取();
  ambitempnight = myData.toInt();
  myDoc = "atnset.txt";
  读取();
  hknighttempdisp = myData.toFloat();
  myDoc = "ssetday.txt";
  读取();
  ssday = myData.toInt();
  myDoc = "sriseday.txt";
  读取();
  srday = myData.toInt();
  myDoc = "ssetmin.txt";
  读取();
  ssminutesetdisp = myData.toInt();
  myDoc = "srisemin.txt";
  读取();
  srminutesetdisp = myData.toInt();
  myDoc = "sriseh.txt";
  读取();
  srhoursetdisp = myData.toInt();
  myDoc = "ssethour.txt";
  读取();
  sshoursetdisp = myData。toInt();
}
///////////////////
void loop() {
  // 把你的主代码放在这里,重复运行:
  TimeLord tardis;
  tardis.DstRules(3, 2, 11, 1, 60);
  if (firsttimeon == 1) {
    tardis.TimeZone(-5 * 60);
    tardis.Position(纬度,经度);
    dlstime[5] = (年() - 2000);
    dlstime[4] = 月();
    dlstime[3] = day();
    dlstime[2] = 小时();
    dlstime[1] = 分钟();
    tardis.DST(dlstime);
    第一次 = 0;
  }
  // 照片时间
  倒计时 waitCount = waitCount - 1;
  if (waitCount < 2) {
    capture_photo("live.jpg");
    waitCount = waitForPhoto;
  }
  // 创建客户端连接
  EthernetClient client = server.available();
  如果(客户){
    int pos = 0;
    字符客户端请求[100];
    while (client.connected()) {
      if (client.available()) {
        // 读取客户端请求的内容
        char c = client.read();
        if (c != 'n' && c != 'r') {
          clientReq[pos] = c;
          正++;
          如果 (pos >= 100) pos = 99; // 不要让缓冲区溢出...
          继续;
        }
        // 发送 jpeg 文件或发送 html 来显示文件
        // 如果 'GET /' 请求后有字符
        // 发送 jpeg 文件
        if (clientReq[5] != ' ' ) {
          // ###### 在这里找出客户请求的文件!!!
          文件 myFile = SD.open("live.jpg");
          // 尝试打开文件
          // 如果成功,发送 header 和 jpeg 数据
          if (myFile) {
            client.println("HTTP/1.1 200 OK");
            client.println("内容类型:图片/jpg");
            客户端.println();
            字节clientBuf[64];
            int 客户端计数 = 0;
            while (myFile.available())
            {
              clientBuf[clientCount] = myFile.read();
              客户端计数++;
              if (clientCount > 63) {
                client.write(clientBuf, 64);
                客户端计数 = 0;
              }
            }
            if (clientCount > 0) {
              client.write(clientBuf, clientCount);
            }
            myFile.close();
          }
        } else {
          // 'GET /' 后面没有字符
          // 发送 HTML 站点
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("连接:关闭");
          client.println("刷新:2");
          客户端.println();
          客户端.println("           client.println("");
          client.print("Harold & Kumar's Enclosure");
          client.println("
");
          client.print(dayStr(weekday(now())));
          client.print(", ");
          client.print(monthStr(dlstime[4]));
          客户端.print("");
          client.print(dlstime[3]);
          client.print(", ");
          client.print(year());
          client.print("在");
          if (dlstime[2] < 10) {
            client.print("0");
          }
          client.print(dlstime[2]);
          client.print(":");


          }
          client.print(minute());
          client.print(":");
          if (second() < 10) {
            client.print("0");
          }
          client.print(second());
          client.println("
");
          client.println("
");
          client.print("室温 = ");
          client.print(roomtemp);
          客户端.print("");
          client.print(char(176));
          client.print("F");
          client.println("
");
          client.println("
");
          客户端.print("

          客户端.print("");
          client.print(char(176));
          client.print("F");
          client.println("
");
          client.print(" Range = ");
          if (night == 0) {
            client.print(hkdaytempdisp - .5);
          } else {
            client.print(hknighttempdisp - .5);
          }
          client.print(" ");
          client.print(char(176));
          client.print("F-");
          if (night == 0) {
            client.print(hkdaytempdisp + .5);
          } else {
            client.print(hknighttempdisp + .5);


          client.print(char(176));
          client.print("F");
          if (night == 0 && ambitempday > 0) {
            client.print("For ");
            client.print(ambitempday);
            client.print("天");
          }
          if (night == 1 && ambitempnight > 0) {
            client.print(" For ");
            client.print(ambitempnight);
            client.print("天");
          }
          client.println("
");
          client.println("
");
          client.print("日晒温度 = ");
          client.print(hr1tempdisp);

          client.print(char(176));
          client.print("F");
          client.println("
");
          client.print(" Range = ");
          client.print(88);
          客户端.print("");
          client.print(char(176));
          client.print("F-");
          client.print(96);
          客户端.print("");
          client.print(char(176));
          client.print("F");
          client.println("
");
          client.println("
");
          client.print("借用温度 = ");
          client.print(hr2tempdisp);
          客户端.print("");
          client.print(char(176));
          client.print("F");
          client.println("
");
          client.print(" Range = ");
          if (night == 0) {
            client.print(hkdaytempdisp - .5);
          } else {
            client.print(hknighttempdisp - .5);
          }
          client.print(" ");
          client.print(char(176));
          client.print("F-");
          if (night == 0) {
            client.print(hkdaytempdisp + .5);
          } else {
            client.print(hknighttempdisp + .5);
          }
          client.print(" ");
          client.print(char(176));

          if (night == 0 && ambitempday > 0) {
            client.print(" For ");
            client.print(ambitempday);
            client.print("天");
          }
          if (night == 1 && ambitempnight > 0) {
            client.print(" For ");
            client.print(ambitempnight);
            client.print("天");
          }
          client.println("
");
          client.println("
");
          client.print("湿度 = ");
          client.print(湿气);
          client.print("%");
          client.println("


          client.print(湿敏集);
          client.print("% - ");
          客户端.print(湿敏集+ 10);
          客户端.print("%");
          if ( 湿天 > 0) {
            client.print("For ");
            client.print(潮湿的日子);
            client.print("天");
          }
          client.println("
");
          client.println("
");
          client.print("水位 = ");
          if (digitalRead(foggerwater) == HIGH) {
            client.print("Good");
          } else {
            client.print("现在填写!");


          client.print("时间 = ");
          if (night == 0) {
            client.print("Day");
          } else {
            client.print("夜晚");
          }
          client.println("
");
          client.print("日出时间 = ");
          if (srhoursetdisp < 10) {
            client.print("0");
          }
          client.print(srhoursetdisp);
          client.print(":");
          if (srminutesetdisp < 10) {
            client.print("0");
          }
          client.print(srminutesetdisp);
          如果 (srday >

            client.print(srday);
            client.print("天");
          }
          client.println("
");
          client.print("日落时间 = ");
          if (sshoursetdisp < 10) {
            client.print("0");
          }
          client.print(sshoursetdisp);
          client.print(":");
          if (ssminutesetdisp < 10) {
            client.print("0");
          }
          client.print(ssminutesetdisp);
          if (ssday > 0) {
            client.print(" For ");
            client.print(ssday);
            client.print("天");

          client.println("
");
          client.println("
");
          client.print("热灯 = ");
          if (hlpwr == 1) {
            client.print("ON");
          } else {
            client.print("OFF");
          }
          client.println("
");
          client.print("粉丝 = ");
          if (fanpwr == 1) {
            client.print("ON");
          } else {
            client.print("OFF");
          }
          client.println("
");
          client.print("姥岩 = ");
          if (hr1pwr == 1) {
            client.print("ON");
          } 别的 {
            client.print("OFF");
          }
          client.println("
");
          client.print("借石 = ");
          if (hr2pwr == 1) {
            client.print("ON");
          } else {
            client.print("OFF");
          }
          client.println("
");
          client.print("雾化器 = ");
          if (foggerpwr == 1) {
            client.print("ON");
          } else {
            client.print("OFF");
          }
          client.println("
");
          客户端.println("<

          client.println("Harold & Kumar 现场直播

文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。