Two-way AC control
How to control the AC two way using Raspberry Pi
In my previous posts, I have described my small Home Automation system. It consists of various
sensors, connected to several Raspberry Pi computers. The control was initially one-way, meaning that I
could only watch sensor data on the Home Automation web site. Then I have added AC remote control support to
the system. I have used the lirc library which enables user to record IR commands and then to
reproduce them. The initial setup enabled users to remotely control the AC from the Home web site. However,
there was no way of knowing the actual AC status (if the AC already works or not). This means that the Home
web site could not display the current AC status and instead of turning the AC on, we could turn it off.
That is the topic of this post - how to add the support to the Home Automation system, which can read AC
status.
By default, the AC is controlled using the IR remote. I have rather old AC,
which is not connected to the WiFi, so there is only one way of knowing if the AC is working or not - the
status LED at the AC device. I have figured out a way to read the LED status and to feed that information to
the RPI. The Idea is quite simple: glue the photo sensitive resistor to the AC status LED, and connect that
resistor to the simple circuit which gives an information to the RPI if the AC is working.
This is the photo sensitive resistor - photoresistor:
This is the photo sensitive resistor - photoresistor:
Here is the circuit:
The photo resistor decreases the resistance when exposed to the light. If
there is no light, the resistance is couple of hundred kilo Ohms. When lit by the AC LED, the resistance
drops to the approx. 20 kilo Ohms. Since the circuit is actually a voltage divider, when LED is not lit, the
voltage at the GPIO port is high, meaning logical 1. If the LED is turned on, the resistance drops, the
voltage at the divider drops, and the GPIO port reads 0.
The Python code which reacts to the change of LED operation is here:
PORT_AC = 21
GPIO.setmode(GPIO.BCM)
GPIO.setup(PORT_AC, GPIO.IN)
acStatus = not GPIO.input(PORT_AC)
print 'AC STATUS: ', acStatus
def ac_edge_detected(channel):
time.sleep(0.25) // give some time to properly read GPIO port
print 'AC EDGE detected, channel is ', channel
global acStatus
acStatus = not GPIO.input(PORT_AC)
print 'AC STATUS: ', acStatus
requests.get('http://' + STATUS_HOST + ':8080/setAc/' + str(acStatus))
GPIO.add_event_detect(PORT_AC, GPIO.BOTH, callback=ac_edge_detected, bouncetime=50)
Conclusion
Initial AC solution provided me with the option of turning on/off AC remotely.
However, the system could not know the initial and current AC status, making turning on/off unreliable. This
contraption is capable of determining the AC status by observing the AC LED status. It does so by having the
voltage over the photo resistor dropping when the LED is turned on.
Comments
Comments powered by Disqus