1
0
Fork 0
The documentation repository for the software projects developed for the 'Return to Ritherdon Project' by Nicola Ellis. http://www.nicolaellis.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

288 lines
13 KiB

Squashed commit of the following: commit e23be46f540ded7f8c5797627bb9589eec9ffe5e Author: Craig Oates <craig@craigoates.net> Date: Fri Nov 5 16:59:01 2021 +0000 update Midpoint doc. commit 70e23d0902027e7a1855dbacc275fdc2667ec5ec Author: Craig Oates <craig@craigoates.net> Date: Fri Nov 5 16:55:27 2021 +0000 update Midpoint doc. commit 3daa38662a85c98c98314bf602352f96f0455c6f Author: Craig Oates <craig@craigoates.net> Date: Fri Nov 5 16:46:04 2021 +0000 update README doc. commit 2e9d1df94dffddea972bc08527bf766ba723954a Author: Craig Oates <craig@craigoates.net> Date: Fri Nov 5 16:19:39 2021 +0000 create and populate Light Wave doc. commit 73464777fe01bf7dc305b1c1a22b913420999011 Author: Craig Oates <craig@craigoates.net> Date: Thu Nov 4 20:34:37 2021 +0000 add Return to Ritherdon Project Overview .dot file. This is the file used to generate the .png version of the file in the main README.md file. commit 76710d26cb4414365b0250c765852db017f5dbb5 Author: Craig Oates <craig@craigoates.net> Date: Thu Nov 4 20:32:30 2021 +0000 update README doc. diagrams. I added a .dot file for the Return to Riterdon project overview and fix the image links for so the diagrams sit in their correct places within the document. commit 131bdefdc388e4ca778e58cab7df18f1df1faae2 Author: Craig Oates <craig@craigoates.net> Date: Thu Nov 4 20:27:49 2021 +0000 add .dot file for diagram in README. This is the file used to illustrate the how 'Personal Flash in Real-Time' fits into the 'Return to Ritherdon' project. commit 6dae2040dc8250825a530ef07badd05c4c73e6cb Author: Craig Oates <craig@craigoates.net> Date: Thu Nov 4 20:27:27 2021 +0000 update README doc (main project overview). commit d20d59249562d5420a6d1534c819254a1d50df91 Author: Craig Oates <craig@craigoates.net> Date: Thu Nov 4 19:39:12 2021 +0000 update Midpoint doc. commit db74ec5d062b6faffba8158259727042a7dd2291 Author: Craig Oates <craig@craigoates.net> Date: Thu Nov 4 19:14:05 2021 +0000 populate midpoint doc. commit a4ecffeec941ac2bb20d9247abd4b22b7b3e81da Author: Craig Oates <craig@craigoates.net> Date: Wed Nov 3 20:31:37 2021 +0000 start populating Midpoint doc. This is a work in progress (end of session) commit. commit bf8a961f99e0fbcb3e6daa58bb427e26ec47e66a Author: Craig Oates <craig@craigoates.net> Date: Wed Nov 3 20:02:07 2021 +0000 fix typo in Relay doc. commit 8902037b83b9bb19da93c25e32a2b5b7a18b64b1 Author: Craig Oates <craig@craigoates.net> Date: Wed Nov 3 19:53:14 2021 +0000 update Relay doc. commit 0e62c64f069d36c4fb7f933ff2f5882e11ce4eef Author: Craig Oates <craig@craigoates.net> Date: Tue Nov 2 19:00:20 2021 +0000 stub out further sections for Relay doc. This is prep. work for expanding the documentation for the Relay project. End of session commit, though, which is the reason why the sections are not filled out. commit af03002f48b0e17a65d1a39001cb5381dd1ca835 Author: Craig Oates <craig@craigoates.net> Date: Tue Nov 2 18:50:31 2021 +0000 populated Relay doc. This is a rough transfer of my personal notes in to the public doc's for the Relay project. I've not gone through it properly so expect mistakes and it needing a good proof-read. commit c8eba160fb2eac9f42825072b07eb736e94ef933 Author: Craig Oates <craig@craigoates.net> Date: Tue Nov 2 18:07:02 2021 +0000 update Light Meter doc. commit 755db34e927c3abba5087c2c8a242668a802516e Author: Craig Oates <craig@craigoates.net> Date: Tue Nov 2 17:52:21 2021 +0000 update light-meter doc. commit d28dea87c494ec7a6f5d5d9a0f1b18dfd81a0c10 Author: Craig Oates <craig@craigoates.net> Date: Tue Nov 2 17:15:13 2021 +0000 add install section to Eyes and Ears doc. commit d5e6440297e200f318a6a0b60eb3cea8ff153f7a Author: Craig Oates <craig@craigoates.net> Date: Tue Nov 2 17:09:27 2021 +0000 add links to other projects (Eyes and Ears doc's). commit 5b2583c00b97f8b4fa5dee1ff2534d4af74681bc Author: Craig Oates <craig@craigoates.net> Date: Tue Nov 2 16:59:32 2021 +0000 populate the Eyes and Ears section. commit b3408532d89e1c5ce0ee2e7def8796cb731e18ae Author: Craig Oates <craig@craigoates.net> Date: Tue Nov 2 12:57:48 2021 +0000 change Ross to Andy. At some point, I forgot when it was, Ross was replaced by Andy as a welder. This name change is just me dotting the i's and crossing the t's.
3 years ago
# Return to Ritherdon: Relay
Relay is one of three smaller projects which make-up the 'Personal
Flash in Real-Time' -- which is one artwork with the main 'Return to
Ritherdon' project.You should view the three smaller projects as one
project. And, for the purpose of this documentation, I will refer to
'Personal Flash in Real-Time' as a system instead of an artwork.
For more information on the 'Return to Ritherdon' project, use the
following link:
- [Return to Ritherdon Overview](https://git.abbether.net/return-to-ritherdon/rtr-docs)
### 'Personal Flash in Real-Time': Project Overview
The overall system ('Personal Flash in Real-Time') consists of three
separate/smaller projects. You should not view them as individual
pieces within the overall project. From an artwork point-of-view,
'Personal Flash in Real-Time' is one piece. The name of the software
projects are 'Light Meter' (which is this one), 'Midpoint' and
'Relay'. All three projects reside in their own git repositories. You
can find the repositories at the following links:
- [Light Meter](https://git.abbether.net/return-to-ritherdon/light-meter)
- [Mid-Point](https://git.abbether.net/return-to-ritherdon/midpoint)
- [Relay](https://git.abbether.net/return-to-ritherdon/relay)
The (technical) aim of the project is to turn a set of lights on at
the gallery when the welding machines are active in the welding booths
at Ritherdon. The solution we arrived at was a three-stage
process. The stages are as follows:
1. Monitor the light levels in the welding booths at Ritherdon and
send that information to a sever (Light Meter).
2. Receive the light readings and store them in a database and make
them available for others to access (Midpoint).
3. Have the lights installed at the gallery connected to wi-fi enabled
relays which request the latest light readings from the server. If
the readings are above a certain threshold, have the light in the
gallery turn on (otherwise, turn off). The relays are responsible
for turning the lights on and off (Relay).
Each step should require no human intervention.
For more information on how each project accomplishes its task, please
use the (repo.) links above. Otherwise, here is an diagram to help
explain the three stages mentioned above.
![Main Project Architecture](attachments/main-proj-architecture.png)
## Hardware Specifications
Here are a list of parts used in this project:
- [Raspbian](https://www.raspberrypi.org/downloads/raspbian/) (You can
use the G.U.I. or "headless" version)
- [Raspberry Pi
4](https://www.raspberrypi.org/products/raspberry-pi-4-model-b/) (I
am assuming you have the appropriate power cable, S.D. cards Etc.)
- [Single Channel 5v Relay](https://www.amazon.co.uk/Dealikee-Module-Indicator-Channel-Arduino/dp/B08ZJ9T355/ref=sr_1_12?dchild=1&keywords=5v+relay+module&linkCode=gs3&qid=1635877670&qsid=262-0370227-8667213&sr=8-12&sres=B08YK9V3V6%2CB07RKH9KLM%2CB06XK6HCQC%2CB01H2D2RI0%2CB08MTD5BPJ%2CB07PZC9ZMM%2CB07CNR7K9B%2CB08ZJ9T355%2CB07V1YQQGL%2CB07MY2R2ML%2CB07G71S7VP%2CB09C2ZHXXP%2CB08GPF9FNX%2CB09CN81J32%2CB07SDLJSWB%2CB08YJ6TS29%2CB08V15SNZS%2CB09DS3DD1J%2CB08KWPMP2V%2CB07TTVYGC8&srpt=RELAY)
## Points of Interest for Understanding How Relays work
I have included this section if you are unfamiliar with what a relay
is, how it works and how it connects/works with a Raspberry Pi. If you
are already familiar with relays, you can skip this section.
### Checking Your Raspberry Pi's Hardware Layout
Because there are multiple versions of the Raspberry Pi, the layout of
the General Purpose Input/Output (G.P.I.O.) Pins differ. A quick way
to find out how the G.P.I.O. pins are laid out, for the Pi you are
currently working on, is to open a terminal and entering the following
command `pinout`.
Doing this will lead to you seeing something similar to the image
below,
![pinout-terminal](attachments/pinout-terminal.png)
More information about this can be found at the following URL:
- [Checking Raspberry Pi Board Version](https://www.raspberrypi-spy.co.uk/2012/09/checking-your-raspberry-pi-board-version/][Raspberry Pi Board Information)
### Wiring-Up the Relay
- [Wiring Single Channel Relay with Raspberry Pi](https://www.14core.com/wiring-single-channel-relay-with-raspberry-pi-on-wiringpi-python/)
I used this article/blog post (linked above) as a starting-point for
the relay part of the project. It includes software written in C and
Python but I have stuck to just Python for this project. You can see
how the relay is wired-up to the Pi in the image below.
![Wiring Diagram Relay](attachments/wiring-diagram-relay.png)
### General Overview of Controlling Relays
- [Four Ways to Control Electronic Relays](https://makezine.com/2018/03/19/control-electronic-relays/)
This is a primer for understanding how to control relays and the
various types of relays at your disposal. The list is not exhaustive
but is enough to get you going.
- [YouTube Guide](https://www.youtube.com/watch?v=58XWVDnB7Ss)
I find the guy in this video difficult to understand but he gets his
message across well enough. He explains how a relay works and how to
connect it to an *Arduino Board* and control a light bulb. If you are
not familiar with how relays work, this video should give you a good
grounding in it. /Note: This video does not use a Raspberry Pi so the
information is limited to just the relay and the light part of the
project.
- [How to Set-up a 5v Relay](https://www.circuitbasics.com/setting-up-a-5v-relay-on-the-arduino/)
The link above focuses on using an *Arduino Board* but you can
determine what pin does what. The example in the link, also,
includes a thermistor in its set-up which does not apply to this
project. The image below is taken from the site and
highlights what each pin is.
![Relay Pins Layout](attachments/5v-relay-pins-layout.png)
- **NO (Normally Open)**: In the normally open configuration, when the
relay receives a HIGH signal the 120-240V switch closes and allows
current to flow from the C terminal to the NO terminal. A LOW signal
deactivates the relay and stops the current. So if you want the HIGH
signal to turn ON the relay, use the normally open terminal. See
images below for further information.
- **NC (Normally Closed)**: In the normally closed configuration, a
HIGH signal opens the switch and interrupts the 120-240V current. A
LOW signal closes the switch and allows current to flow from the C
terminal to the NC terminal. Therefore, if you want the HIGH signal
to turn OFF the 120-240V current, use the normally closed
terminal. See images below for further information.
![Relay Normally Open Layout](attachments/5v-relay-normally-open-layout.png)
![Relay Normally Closed Layout](attachments/5v-relay-normally-closed-layout.png)
## Project Set-up
Relay consists of two parts: hardware and software. The hardware part
focuses on the electronics attached to the Raspberry Pi 4 and the
software side focuses on installing software dependencies onto the
operating system and 'maintenance' tasks for sustained use of the
device (whilst in operation). For the code written specifically for
this project, please use the following link:
- [Relay Software Repository](https://git.abbether.net/return-to-ritherdon/relay)
### Initial Raspbian Set-up
Upon the initial installation of Raspbian on to the Pi, you need to make sure the following is established:
- The username is `rtrp`.
- The host-name is `gallery#` (where "#" is either 1 and 2).
- The Pi is set to auto-login with the `rtrp` account.
You can set the Pi up to automatically login to the desktop but the
recommended option is to login to a "headless" environment
(I.E. console-mode). Remember, you can only log into the desktop
environment if your version of Raspbian has one. The final version of
this project does not expect one.
### Hardware Preparations
### Network Connections
Before installing Raspberry Pi in its final location
(gallery/exhibition), make sure it can connect to the galleries
internet - either via Wi-Fi or Ethernet cable. If you use an Ethernet
cable, you do not need to do anything, but Wi-Fi requires a little
work on the command-line (if you are using a 'headless' version of
Raspbian). If you are unsure how to connect to a router via Wi-Fi, use
the following link to learn how:
- [Raspbian Wi-Fi Tutorial](https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md)
### Relay Set-up
To connect the relay to the Raspberry Pi, refer to the following image:
- [the image above](https://git.abbether.net/return-to-ritherdon/rtr-docs/src/branch/unstable/relay/rtr-relay.md#wiring-up-the-relay)
### Software Preparations
Depending on what version of Linux/Raspbian you are running, you might
need to install some dependencies. I have listed the common ones I
came across whilst developing this project. But, you might need to
rely on your own cunning to track down missing dependencies.
```bash
# Don't forget to apt update and upgrade first...
sudo apt install python3-pip
sudo pip3 install requests
sudo pip3 install RPi.GPIO
# You might need to install RPi.GPIO via apt
sudo apt install python3-rpi.gpio
# I will explain why this is here below...
mkdir ~/repos
```
**Note: I decided not to create/use a (Python) virtual environment
because of the projects objectives. I expect the software in this
repository to run on an unmanned machine with only one task to
complete. The environment this project will run in/on will not change
throughout the course of the exhibition. So, the redundancies afforded
by the virtual environment are not needed.**
When you clone this repository, you need to make sure you clone it
into the following location: `/home/rtrp/repos/relay/`. From
there, run the following command,
```bash
# This must be the first thing you run after you have cloned
# the repository.
. ~/repos/relay/make-log-files.sh
```
You can test the code is working properly by running it. You can do
that by entering `sudo python3 ~/repos/relay/reply.py`. This is
assuming the server specified in `reply.py` is set-up and working as
intended. The server is developed in the 'Midpoint' project
repository. Links for 'Midpoint' are as follows:
- [Midpoint Code](https://git.abbether.net/return-to-ritherdon/relay/src/branch/master)
- [Midpoint Documentation](https://git.abbether.net/return-to-ritherdon/rtr-docs/src/branch/master/midpoint)
Note: For some reason, I had trouble running `relay.py` without
sudo. I would sometimes get an error message saying "RPi.GPIO is not
available/installed" (paraphrased). If you manage to get it working
without the use of sudo, remain as you were. Otherwise, keep a mental
note of this if you come across the problem.
### Set-Up Program as a Cronjob
When you are ready to run this project as intended, you can set-up a
cron-job for it. To do so enter `sudo crontab -e` into the console (see
note about sudo above). You might need to select an editor if this is
your first time setting up a cron-job. I tend to go for Nano -- which
is option "1" most of the time. When the crontab file opens, enter the
following commands at the bottom of the file,
```bash
@reboot bash /home/rtrp/repos/relay/startup.sh &
00 18 * * * /home/rtrp/repos/relay/shutdown.sh
```
These tasks make the Raspberry Pi send a message to the sever to
indicate its/their status ("on" or "off") and makes the `startup.sh`
script run. At this point, you should be able to walk away and let the
Pi do its thing. This is assuming the server is up and running and the
Pi is connected to the world-wide-web. If all is successful, you will
notice the Pi will turn itself off at 18:00 (6 p.m.) and will start
receiving reading when you turn it on without any input from
you. Unfortunately, the Pi can only manage the shutdown procedure on
its own. You will need to turn it on. (This has been accounted whilst
the exhibition is open.)
This next part is optional. To make sure the Pi sends a "powering
down" message to the server, I tend you create an alias called
`powerdown`. When you type this into the console, it runs the
`shutdown.sh` script -- which has the shutdown command within it. To
make the alias permanent, enter `alias='~/repos/relay/shutdown.sh`
into `~/.bashrc`. This is easier to test the bespoke shutdown
procedure is working as intended. You can, also, adjust the time in
the crontab or run the script by running the script like you normally
would but I find them to be frustrating to do in this instance.
### Running the Program Manually (Quick Reference)
If you have already completed the other installation/set-up tasks, use
the code below.
```bash
# This assumes you have cloned the repository and completed the other
# installation tasks.
sudo python3 ~/repos/relay/reply.py
```
(Note: This is here so I have something to quickly refer to after I've
forgot how the Relay works -- because I've not used it for a long
time.)