家有龙猫,那玩意儿太怕热,夏天就要来了,以前都是上班的时候就要把空调打开,琢磨着太费电,于是有了这个小玩意儿。 uno只有一个5v输出口,所以我把温度传感器的供电放在3.3V上,经过测试没有问题,可以正常使用。 需要: arduino uno 温度传感器DS18B20模块 红外发射模块 9V电池 代码如下:
/** * 根据温度自动开关空调 * @author 废墟 */ #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[74] = {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[74] = {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); IRsend irsend; float maxTemperature = 32.00; float minTemperature = 27.00; void setup() { pinMode(13,OUTPUT); sensors.begin(); Setup_watchdog(9); // 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms // 6=1 sec,7=2 sec, 8=4 sec, 9= 8sec 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 >= 2) { 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 } }
代码下载:Arduino自动控制空调
哈哈,博主,你好,同是PHP,又喜欢玩硬件的。
好久没玩了,家里树莓派和arduino套装都放着吃灰尘。
不介意的话,交个朋友,交流交流。