该项目是一个模拟自然光循环的摄像头。
我想不需要24/7 24/7 的一个导演到剧情的发展形式,从一个母线到导演的形式,从一个母线到它的出发点都在变化。它们的温度特性也能保持各种自然栖息地的风化和热源季节的变化,并通过日晒和与它们的自然栖息地复制相匹配,以适应它们的状态,同时希望设置。这些设置。
它如何
保存启动它的日期和时间(数据显示时间) RTC 未显示。不同的设置(如增加控制以进行改变)。
DHT 22 从读取环境温度和自动。
使用接收到的数据,可以控制在项目盒中的两个中继屏蔽。
这些继电器控制夜灯、日光、取暖灯、加热岩石1和2、雾化器和风化。
将连接到滚动条,将连接到连接到网关的另一端,将连接到连接点的另一端,将连接到节点的5个输入端,将连接到接地电阻(3个),不电阻连接到连接节点(3)220重要的是,只要你有一个,我已经测试了一些,它们都有效),
我有一个模型,因此不会对后续进行过多的介绍,在设置的时候并不那么重要。
这些是我为显示屏幕而制作的屏幕。(我的蛇名是Harold和Kumar。)主只与蛇的数据有关,如拉丁名和本国。日期显示当前温度和设定温度,以及一个相同的显示显示屏幕时间相反(显示日期设置)的切换按钮。 由屏幕显示每日显示的每日显示时间设置。如果发生变化,它就会有一个相关的天数变量,在午夜产生一个。
我添加了一个用于远程监控的摄像头
就是有一个网络服务器,让我读取当前的一个例子。
硬件硬件
软件
#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 现场直播