Maker.io main logo

Getting Started with Automation HAT, pHAT, and HAT Mini

45

2024-07-25 | By Pimoroni

License: See Original Project

Courtesy of Pimoroni

Guide by Pimoroni

Automation HAT is an all-singing all-dancing monitoring and automation ‎board, with three each of 0-24V tolerant inputs, sinking outputs, relays, and ‎ADC (analog to digital converter) channels that allow you to read voltages ‎from 0-24V, as well as an additional 3.3V ADC channel and several GPIO pins ‎broken out (SPI, serial, etc).‎

Automation pHAT is Automation HAT's little bro', with all the same features, ‎except that the pHAT has just one relay and no status LEDs. It's now ‎discontinued, but fear not!‎

Automation HAT Mini is our updated version of Automation pHAT, it has all ‎the same functionality, but we've also managed to squeeze in a nifty little ‎LCD screen.‎

Any of them are great for monitoring and controlling devices in your home, as ‎much of the control circuitry in your home appliances will operate at 12 or ‎‎24V.‎

DO NOT use Automation HAT, pHAT, or HAT Mini with mains voltages, or ‎any voltages higher than 24V!‎

This tutorial will show you how to install the Automation HAT Python library, ‎and then walk through its functionality, finishing with an example of how to ‎monitor and log on/off events, such as the number of times a coffee machine ‎is used.‎

For a fantastically understandable and straightforward explanation of the ‎functionality of Automation HAT, including how relays work, then check ‎out Tanya's blog post!‎

Installing the Software

We always recommend using the most up-to-date version of Raspberry Pi OS ‎‎(Bookworm or later), as this is what we test our boards and software against, ‎and it often helps to start with a completely fresh install.‎

If you're using an existing install, it's a good idea to run sudo apt update and sudo ‎apt upgrade to make sure everything's up to date before you install our library.‎

The Automation HAT library will autodetect whether you're using the HAT, ‎pHAT or HAT Mini and adapt the library as required.‎

Open a new terminal (Ctrl-Alt-T, or find it in the Raspberry Pi menus), and ‎type the following, making sure to type 'y' or 'n' when prompted:‎

Copy Code
git clone https://github.com/pimoroni/automation-hat
cd automation-hat
./install.sh

The install script enables I2C and SPI and (optionally) will set up a virtual ‎environment for you, which you will need to be able to install Python ‎packages in recent versions of Pi OS.‎

Once that's done, reboot your Pi to let the changes propagate.‎

Running the Examples

To run an example, you'll first need to switch to your virtual environment - if ‎you let our installer set one up you can type this command in the terminal to ‎do that:‎

Copy Code
source ~/.virtualenvs/pimoroni/bin/activate

‎There are several example scripts provided with the Automation HAT library. ‎If you asked the installer to copy them to their own directory, they can be ‎found in ~/Pimoroni/automationhat/examples/. They are sorted into a hat and a hat-‎mini directory - you can navigate to them using

Copy Code
cd ~/Pimoroni/automationhat/examples/hat/

or

Copy Code
cd ~/Pimoroni/automationhat/examples/hat-mini/

Let's run the output.py example, which will toggle the outputs and relay/s on ‎and off, as well as two of the three coloured LEDs (Comms and Warn!) if ‎you're using the HAT. Open a new terminal window or tab and type the ‎following to run the example:‎

Copy Code
python3 output.py

Type control-c to exit the script.‎

Try running the other examples - analog.py, input.py, and relay.py - in the same ‎way that you just did:‎

Copy Code
python3 analog.py
python3 input.py
python3 relay.py

Using the software

Open a new terminal and type python3 to open a new Python prompt.‎

Type the following to import the Automation HAT library, from which we'll call ‎functions and create instances:‎

Copy Code
import automationhat

Analog (ADC) Channels

The analog channels will return a floating-point number between 0 and 24, ‎representing the voltage measured on each channel. The three-screw ‎terminal connected channels are tolerant up to 24V, while the fourth channel, ‎available on the broken out pins in the centre of the board, can measure up ‎to 3.3V.‎

Note that the ADC channels have an approximate ±2% accuracy, and you ‎should take this into account when looking at your readings.‎

To read analog channel 1, type the following:‎

Copy Code
value = automationhat.analog.one.read()
print(value)

The analog channels can be referenced either ‎by automationhat.analog.one.read(), automationhat.analog.two.read(), etc., or ‎by automationhat.analog[0].read(), automationhat.analog[1].read(), etc. Note that the ‎channels are indexed from 0 to 3 in the latter case.‎

Try now connecting a short piece of wire between one of the 5V screw ‎terminals and the analog channel 1 screw terminal, and read the channel ‎again, as you did before. What value do you get back?‎

wire_1

Inputs

The three input channels are, again, tolerant up to 24V. Their state will be low ‎below 1V, high between 3 and 24V, and undefined (either low or high) ‎between 1 and 3V (these are approximate, not exact values). When read, ‎they will return 0 for low and 1 for high, and they can be read in a very similar ‎way to the analog channels:‎

Copy Code
state = automationhat.input.one.read()
print(state)

‎Again, they can be ‎referenced automationhat.input[0].read(), automationhat.input[1].read(), and so on, using ‎indices rather than the word form of the channel numbers.‎

Try the same test as before with the analog channel and connect a short ‎length of wire from one of the 5V terminals to input channel 1. It should now ‎be pulled high, and the LED indicator light on channel 1 should light! Try ‎reading the state again and confirm that it has changed from 0 to 1.

test_2

Outputs

The outputs on Automation HAT are sinking, so your load should be switched ‎on the ground side, i.e., 12/24V (from supply) -> load -> output terminal -> ‎ground (from supply).‎

We'd suggest testing them with an LED, and an appropriate voltage-limiting ‎resistor if necessary, connecting the anode or positive leg of your LED to one ‎of the 5V terminals on Automation HAT and the cathode or negative leg to ‎output one. To toggle the output on and off, you can either use:‎

Copy Code
import time

while True:
automationhat.output.one.on()
time.sleep(0.5)
automationhat.output.one.off()
time.sleep(0.5)

Or:‎

Copy Code
import time

while True:
automationhat.output.one.toggle()
time.sleep(0.5)

Or:‎

Copy Code
import time

while True:
automationhat.output.one.write(1)
time.sleep(0.5)
automationhat.output.one.write(0)
time.sleep(0.5)

methods_3

The inputs, outputs, and relays also have ‎convenient .is_on() and .is_off() methods that allow you to query whether they ‎are currently turned on or off.‎

Try the following:‎

Copy Code
while True:
if automationhat.input.one.is_on():
print('ON')
else:
print 'OFF'
time.sleep(0.5)

Now try bridging one of the 5V terminals to input one with a short length of ‎wire or a male-to-male jumper wire and watch the results.‎

Relays

Relays are mechanical switches that are turned on and off by an ‎electromagnet on one side. They work in much the same way as the outputs, ‎although they can tolerate up to 2A each and should be switched on the high ‎side rather than the low. Plus, they have the advantage of having both ‎normally open and normally closed sides.‎

Which side you choose to use - the normally open or normally closed - ‎depends on the default state you want. If you're switching a device that will ‎be switched off a majority of the time and then will be switched on then you'll ‎want to use the normally open side, and if your device will be switched on a ‎majority of the time and then switched off then you'll want to use the ‎normally closed side.‎

You'll need an LED and a 470Ω resistor for this part. We're going to use the ‎first relay to toggle the LED on and off, but you could use any device that ‎takes up to 24V, as long as you remember to connect it on the high side, i.e., ‎‎12/24V (from supply) -> relay -> load -> ground (from supply).‎

We'll use a mini breadboard to connect everything up with a few jumper wires.‎

First, pop your LED into the breadboard, taking note of which leg is which; the ‎longer leg is the positive side. Place your 470Ω resistor on the positive side of ‎the LED; the direction doesn't matter for the resistor.‎

Now, take a male-to-male jumper wire and connect it to the resistor in the ‎breadboard and screw the other end into the COM terminal on relay 1. Use ‎another male-to-male jumper wire to connect the NO terminal on relay 1 to ‎one of the 5V terminals.‎

Finally, connect another male-to-male jumper wire to the other leg of your ‎LED (the shorter one) to one of the GND terminals. It should look something ‎like the image below once connected up.

connect_4

We'll use a little while loop to toggle our LED on and off. Type the following:‎

Copy Code
while True:
automationhat.relay.one.toggle()
time.sleep(0.5)

Your LED should now be blinking on and off, once every second.‎

The relays work, in terms of their methods, just the same as the outputs. As ‎well as the .toggle() method that toggles the state of the relays, there ‎are .on() and .off() methods that do exactly what they say, ‎and .is_on() and .is_off() methods that return Boolean (True or False) values ‎depending on whether the relays are on or off.‎

Like the outputs, there's also a .write() method that accepts a Boolean value ‎‎(0 / 'False', or '1' / 'True') to switch them off or on respectively.‎

Try connecting one LED to the normally open side, and one to the normally ‎closed side of the same relay to see how their behaviour differs.‎

Uses for Automation HAT, pHAT and HAT Mini

Just to reiterate... be EXTREMELY careful when dismantling electronic ‎devices and ensure that the circuitry that you're tapping into is 24V or less ‎and is unplugged and/or switched off when you're working with it!‎

The control circuitry of many home devices like coffee machines, low voltage ‎lighting systems, some boiler and air conditioning thermostats, garage doors, ‎and more, operate on 12V or 24V and could be controlled or monitored with ‎Automation HAT.‎

Often, a good place to tap into is a push button that operates, for instance, a ‎coffee machine. Measuring the current and voltage across the button when ‎pressed (put your multimeter in series with the button) will give you an idea ‎of whether it falls within the 24V range of Automation HAT's outputs and ‎relays, and the combined 500mA limit of the outputs and 2A per relay limit.‎

As well as controlling devices, you could also use Automation HAT's inputs to ‎monitor a device. Why not connect an input on Automation HAT in series ‎with your coffee machine's button or beeper that signals when the coffee is ‎ready, and then post a message to your office's Slack channel?‎

That's all folks!

Mfr Part # PIM213
AUTOMATION HAT RPI 40 PIN
Pimoroni Ltd
€ 30,06
View More Details
Mfr Part # PIM487
AUTOMATION HAT MINI RPI 40 PIN
Pimoroni Ltd
€ 22,54
View More Details
Add all DigiKey Parts to Cart
Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.