Another example (Panasonic) with simple relay control from alarm system
This commit is contained in:
parent
3d4decf06a
commit
b188325ffc
|
@ -0,0 +1,113 @@
|
|||
#include <Arduino.h>
|
||||
#include <HeatpumpIR.h> // https://github.com/ToniA/arduino-heatpumpir
|
||||
#include <Button.h> // http://playground.arduino.cc/Code/Button
|
||||
|
||||
/*
|
||||
|
||||
This is a project I did for my my friend's summer cottage. He has an alarm system
|
||||
with some extra relays which can be controlled via GSM SMS messages. With two relays
|
||||
we can have four heatpump states:
|
||||
* relay 1 OFF and relay 2 in any state: heatpump OFF
|
||||
* relay 1 ON and relay 2 OFF: heatpump ON, normal heating state
|
||||
* relay 1 ON and relay 2 ON: heatpump ON, maintenance heating (FP mode on Midea's remote)
|
||||
|
||||
The IR led is driven by a transistor amplifier. I used 2 ohms as the resistor. I might sound
|
||||
very small, but also the led operates on very short bursts. For example Panasonic uses 2 ohm
|
||||
resistor for the IR led on its remotes.
|
||||
*/
|
||||
|
||||
#define IR_HEADER_MARK 3500
|
||||
#define IR_HEADER_SPACE 1800
|
||||
#define IR_BIT_MARK 420
|
||||
#define IR_ONE_SPACE 1350
|
||||
#define IR_ZERO_SPACE 470
|
||||
#define IR_PAUSE_SPACE 10000
|
||||
|
||||
// Heatpump states
|
||||
const byte heatpumpOff = 0;
|
||||
const byte heatpumpNormal = 1;
|
||||
const byte heatpumpMaintenance = 2;
|
||||
|
||||
Button relay1 = Button(11, INPUT_PULLUP); // Heatpump ON-OFF state
|
||||
Button relay2 = Button(12, INPUT_PULLUP); // FP mode (maintenance heating at 8 degrees C) ON-OFF state
|
||||
|
||||
IRSenderPWM irSender(9); // IR led on Duemilanove digital pin 9, using Arduino PWM
|
||||
//IRSenderBlaster irSender(9); // IR led on Duemilanove digital pin 9, using IR Blaster (generates the 38 kHz carrier)
|
||||
|
||||
byte heatpumpState = heatpumpOff;
|
||||
|
||||
void sendRaw(char *symbols)
|
||||
{
|
||||
irSender.space(0);
|
||||
irSender.setFrequency(38);
|
||||
|
||||
while (char symbol = *symbols++)
|
||||
{
|
||||
switch (symbol)
|
||||
{
|
||||
case '1':
|
||||
irSender.space(IR_ONE_SPACE);
|
||||
irSender.mark(IR_BIT_MARK);
|
||||
break;
|
||||
case '0':
|
||||
irSender.space(IR_ZERO_SPACE);
|
||||
irSender.mark(IR_BIT_MARK);
|
||||
break;
|
||||
case 'W':
|
||||
irSender.mark(IR_PAUSE_SPACE);
|
||||
break;
|
||||
case 'H':
|
||||
irSender.mark(IR_HEADER_MARK);
|
||||
break;
|
||||
case 'h':
|
||||
irSender.mark(IR_HEADER_SPACE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
irSender.space(0);
|
||||
}
|
||||
|
||||
void setup(){
|
||||
Serial.begin(9600);
|
||||
delay(500);
|
||||
Serial.println(F("Starting..."));
|
||||
}
|
||||
|
||||
void loop(){
|
||||
|
||||
if (relay1.isPressed()) {
|
||||
// Normal heating operation
|
||||
if (!relay2.isPressed() && heatpumpState != heatpumpNormal) {
|
||||
Serial.println(F("Normal heating operation"));
|
||||
|
||||
Serial.println(F("* Sending power OFF"));
|
||||
sendRaw("Hh0100000000000100000001110010000000000000000000000000000001100000WHh01000000000001000000011100100000000000000001001000101000000000011000111000000000000000000111000000000111000000000000000010010001000000000000000001010011");
|
||||
delay(15 * 1000); // 15 seconds, to allow full shutdown
|
||||
|
||||
Serial.println(F("* Sending normal heat command"));
|
||||
sendRaw("Hh0100000000000100000001110010000000000000000000000000000001100000WHh01000000000001000000011100100000000000001001001001010100000000011000010100000000000000000111000000000111000000000000000010010001000000000000000010001000");
|
||||
heatpumpState = heatpumpNormal;
|
||||
|
||||
// Maintenance heating operation
|
||||
} else if (relay2.isPressed() && heatpumpState != heatpumpMaintenance) {
|
||||
Serial.println(F("Maintenance heating operation"));
|
||||
|
||||
Serial.println(F("* Sending power OFF"));
|
||||
sendRaw("Hh0100000000000100000001110010000000000000000000000000000001100000WHh01000000000001000000011100100000000000000001001000101000000000011000111000000000000000000111000000000111000000000000000010010001000000000000000001010011");
|
||||
delay(15 * 1000); // 15 seconds, to allow full shutdown
|
||||
|
||||
Serial.println(F("* Switching to maintenance heating"));
|
||||
sendRaw("Hh0100000000000100000001110010000000000000000000000000000001100000WHh01000000000001000000011100100000000000001001001000101000000000011000111000000000000000000111000000000111000000000000000010010001000000000000000011010011");
|
||||
|
||||
heatpumpState = heatpumpMaintenance;
|
||||
}
|
||||
// Power OFF
|
||||
} else if (!relay1.isPressed() && heatpumpState != heatpumpOff) {
|
||||
heatpumpState = heatpumpOff;
|
||||
Serial.println(F("Sending power OFF"));
|
||||
sendRaw("Hh0100000000000100000001110010000000000000000000000000000001100000WHh01000000000001000000011100100000000000000001001000101000000000011000111000000000000000000111000000000111000000000000000010010001000000000000000001010011");
|
||||
}
|
||||
|
||||
delay(500); // 0.5 seconds delay
|
||||
}
|
Loading…
Reference in New Issue