根据温度自动开关空调,已成功。【付代码下载】
本帖最后由 废墟 于 2015-5-7 23:44 编辑家有龙猫,那玩意儿太怕热,夏天就要来了,以前都是上班的时候就要把空调打开,琢磨着太费电,于是有了这个小玩意儿。
uno只有一个5v输出口,所以我把温度传感器的供电放在3.3V上,经过测试没有问题,可以正常使用。
需要:
arduino uno
温度传感器DS18B20模块
红外发射模块
9V电池
代码如下,参考了很多人的帖子,不一一致谢。
#include <avr/sleep.h>
#include <avr/wdt.h>
#include <IRremote.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
volatile byte count = 0;
volatile byte stat = 0;
unsigned int raw_AC_open = {8950, 4350, 700, 1600, 700, 500, 650, 550, 650, 1600, 700, 500, 650, 550, 650, 500, 650, 550, 650, 500, 650, 1600, 700, 500, 700, 1550, 700, 500, 700, 500, 650, 500, 700, 500, 650, 550, 650, 500, 650, 500, 700, 500, 700, 450, 700, 500, 700, 500, 650, 500, 700, 500, 650, 550, 650, 450, 700, 550, 650, 1550, 700, 550, 650, 1550, 700, 500, 700, 500, 700, 1550, 700, 500, 700};
unsigned int raw_AC_close = {9000, 4350, 700, 1600, 650, 500, 700, 500, 650, 500, 700, 500, 700, 450, 700, 550, 650, 500, 650, 500, 700, 1600, 700, 450, 700, 1600, 700, 450, 700, 500, 700, 450, 700, 500, 700, 450, 750, 500, 650, 500, 700, 450, 700, 500, 700, 500, 650, 500, 700, 500, 650, 500, 700, 500, 650, 550, 650, 450, 750, 1550, 700, 500, 700, 1550, 700, 500, 700, 450, 700, 1600, 700, 450, 700};
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
IRsendirsend;
float maxTemperature = 32.00;
float minTemperature = 27.00;
void setup() {
sensors.begin();
Setup_watchdog(9);
ACSR |= _BV(ACD); //OFF ACD
ADCSRA = 0; //OFF ADC
Sleep_avr();//Sleep_Mode
}
void Setup_watchdog(byte time) {
byte w_time;
if (time > 9 ) time = 9;
w_time = time & 7;
if (time > 7) w_time |= (1 << 5);
w_time |= (1 << WDCE);
MCUSR &= ~(1 << WDRF);
// start timed sequence
WDTCSR |= (1 << WDCE) | (1 << WDE);
// set new watchdog timeout value
WDTCSR = w_time;
WDTCSR |= _BV(WDIE);
}
ISR(WDT_vect) {
++count;
}
void Sleep_avr() {
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here
sleep_enable();
sleep_mode(); // System sleeps here
}
void loop()
{
if (count >= 8) {
count = 0;
//-------------------------------
digitalWrite(13, HIGH);
delay(100);
sensors.requestTemperatures();
if (sensors.getTempCByIndex(0) > maxTemperature) {
irsend.sendRaw(raw_AC_open, 74, 40);
stat = 1;
} else if (sensors.getTempCByIndex(0) < minTemperature && stat == 1) {
irsend.sendRaw(raw_AC_close, 74, 40);
stat = 0;
}
digitalWrite(13, LOW);
//--------------------------------
Sleep_avr();
}
else {
Sleep_avr();//Continue Sleep
}
} 有爱心的达人啊,非常实用的应用。激发了一个想法,要是客厅没人多长时间,就把空调和电视、机顶盒这些东西关掉来省电。 顶~~! 参考着做一个玩玩 谢谢分享学习一下 温度传感器的供电放在3.3V上,我也试过 楼主可以用半导体制冷片给龙猫单独做小空调哇,节约电还方便 楼主,能不能把你可以用的IRremote库和那几个不是自带的库打包发上来的啊?你的空调是通过什么方式获得raw数组的? 我今天试了一个下午都没办法开得空调 可恨的大菠萝 发表于 2015-5-7 22:56 static/image/common/back.gif
楼主可以用半导体制冷片给龙猫单独做小空调哇,节约电还方便
那个工作量太大了。。还是算了吧。。 yuanrongfa 发表于 2015-5-7 23:10 static/image/common/back.gif
楼主,能不能把你可以用的IRremote库和那几个不是自带的库打包发上来的啊?你的空调是通过什么方式获得raw数 ...
这是全部打包代码,至于发送的开启和关闭空调代码你需要自己根据空调来弄,帖子也很多,我就不重复了。 楼主可以买个小冷风机,我家仓鼠就是这样过的。一个月才2度电。
页:
[1]