Previous posts for this project:
- [CaTS] ForgetMeNot - Index
- [CaTS] ForgetMeNot - Week 0: Project Description
- [CaTS] ForgetMeNot - Week 1: EnOceanPi and Sensors
- [CaTS] ForgetMeNot - Week 2: Elro CoCo and Pi Cam with OpenHAB
- [CaTS] ForgetMeNot - Week 3: Data persistence and charts with OpenHAB
- [CaTS] ForgetMeNot - Week 4: Arduino-OpenHAB communication
- [CaTS] ForgetMeNot - Week 5: Getting familiar with EAGLE
- [CaTS] ForgetMeNot - Week 6: Getting to know the TBS1052B-EDU oscilloscope
- [CaTS] ForgetMeNot - Week 7: First tests with RPiSoC
- [CaTS] ForgetMeNot - Week 7 (2): More testing with RPiSoC
- [CaTS] ForgetMeNot - Week 8: Water dispenser and temperature
- [CaTS] ForgetMeNot - Week 9: RFID Cat detection and identification
- [CaTS] ForgetMeNot - Week 10: Peltier cooling experiment
- [CaTS] ForgetMeNot - Week 11: Starting the build
- [CaTS] ForgetMeNot - Week 11 (2): Continuing the build
- [CaTS] ForgetMeNot - Week 12: Finalising a few things
- [CaTS] ForgetMeNot - Week 12 (2): Finalising even more things
- [CaTS] ForgetMeNot - 3D Printing: EnOcean sensor bracket
- [CaTS] ForgetMeNot - 3D Printing: EnOcean rocker switch and magnet holder
- [CaTS] ForgetMeNot - 3D Printing: Food dispenser prototype
- [CaTS] ForgetMeNot - 3D Printing: Weighing scale
- [CaTS] ForgetMeNot - Security: Some basic tips
- [CaTS] ForgetMeNot - Minion: Dave, the gassy minion
- [CaTS] ForgetMeNot - Pi Camera: Wide Angle Lens
This will be my final post in the Forget Me Not Design Challenge. The project is finished and the deadline has been met. *pfiew*
I'll try to illustrate as best as I can what has been achieved over the past 12 weeks and what the final result of all this work has become.
The [CaTS] project aims to solve following issues:
- easily turn off all appliances when leaving home using a master switch
- monitor rooms' temperature and ensure the important doors are closed
- automatically feed the cats and keep track of their habits
More information on the original project description can be found here: [CaTS] ForgetMeNot - Week 0: Project Description
Hardware Components Overview
A lot of different components were used in this project. I have attempted to create a clear overview of how all components are logically interconnected.
As visualised below, the Raspberry Pi is at the center of this project. Sensors are connected either directly to the Pi or offloaded to another device which is controlled by the Pi. Various communication types have been used, depending on the device/sensor's capabilities.
The Raspberry Pi can be considered as the "master controller" of this project. It hosts the software and interfaces with the different subcomponents.
Everything is connected to the Pi, making use of the GPIO pins or USB ports.
The RPiSoC simplified a lot for my project. Because of the wide variety of functions, all controllable through a Python API, I was able to implement various features easily.
The RPiSoC drives the following components:
- a servo motor for the food dispenser
- a DC-DC step-up converter's enable pin using a digital output to control a solenoid valve
- a peltier by means of a PWM signal and a MOSFET
- two load cells using INA125P instrumentation amplifiers and two onboard SAR ADCs
The RPiSoC is an interesting add-on, complementing the Pi's GPIO with a bunch of new features.
The EnOceanPi serves as a gateway between the Raspberry Pi and the EnOcean sensors: rocker switch, temperature, humidity or contact.
It communicates with the Raspberry Pi using the serial interface on the Pi's GPIO.
The EnOceanPi and sensors take care of:
- monitoring doors being closed or not
- monitoring room temperatures
- have a master switch, controlling other non-EnOcean hardware
At some point during the challenge, we received an EOP 350 board and a TCM 320. Unfortunately, I had not originally counted on this part and hadn't planned it in the project execution.
I do however plan to spend time exploring it, once the challenge is over and more time becomes available.
The Arduino is in charge of two things:
- reading the status of two RFID readers and pass it to the Raspberry Pi using the serial interface
- listen to serial commands to turn the camera lighting on or off
The good thing about Arduino, is that there is a library for about everything. This simplifies things a lot.
This is why I chose to use the Arduino for the RFID readers: I got both RFID readers up and running in a very short amount of time.
Both RFID readers connect to the Arduino via SPI. The Arduino detects if a tag is in front of any (or both) of the readers and passes those results to the Raspberry Pi using a serial connection over USB.
For the lighting, I used a NeoPixel ring. Because it is a ring, it is easily installed around the camera lens, resulting in a nice solution.
As with the RFID readers, a library is available to control these.
This is a custom circuit I made to control wireless power sockets. It combines an ATtiny85 accessible over I2C, which controls a 433MHz transmitter.
By means of a library, it sends out the proper codes to turn sockets on and off, wirelessly.
Software Components Overview
On the software side, some major components have been used, which then rely on scripts or subcomponents to get the different functionalities covered.
On the Raspberry Pi, 4 core components are used:
- MySQL Server
On the Arduino, 3 libraries are used:
Here's an overview:
Let's go into more detail on each software component.
Just like the Raspberry Pi is at the center of the hardware components, openHAB is at the center of the software components.
openHAB offers an easy to customise GUI, powerful rules engine and a wide variety of bindings and actions.
The installation of openHAB is covered in full detail here: [CaTS] ForgetMeNot - Week 1: EnOceanPi and Sensors
A handful of add-ons are used by openHAB in order to perform the required actions and data collection.
The add-ons used in this particular project are the following:
- exec binding: is used to execute python scripts to get or set values from sensors
- enocean binding: controls all enocean sensors described in the hardware components
- serial binding: is used to interface with the Arduino UNO
- mysql persistence: ensures all sensor data is persisted for trending
- prowl action: takes care of push notifications
The MySQL server is used for persistence of data from openHAB. I have selected this database type because it is the one I am most familiar with for deployment and troubleshooting.
Setting up the MySQL server and persistence in openHAB is covered in detailed in following blog post: [CaTS] ForgetMeNot - Week 3: Data persistence and charts with OpenHAB
The motion application takes the video stream from the Pi camera and converts it to an MJPEG stream, which can then be embedded in openHAB.
For more details, see: [CaTS] ForgetMeNot - Week 2: Elro CoCo and Pi Cam with OpenHAB
Python scripts are used to perform actions for which there is no suitable binding/action in openHAB.
By making use of openHAB's exec binding, the different scripts can be triggered to set or get values, depending on their purpose.
I have created following set of scripts:
- cats_scale.py: read the voltage from the RPiSoC's SAR ADC and convert it to weight
- cats_foodpy: control a servo via the RPiSoC to actuate the food dispenser
- cats_water.py: control a DC-DC step-up converter to actuate the water dispenser's solenoid valve
- cats_cooling.py: control a MOSFET driving the peltier element using a PWM signal generated by the RPiSoC
- cats_rf433.py: control wireless power sockets by sending commands to an ATtiny85 driving a 433MHz transmitter
- cats_temperature.py: read the temperature of a 1-wire sensor connected to the Pi's GPIO
The full set of scripts can be found on GitHub for reuse: https://github.com/fvdbosch/ForgetMeNot/tree/master/python
DIY Components Overview
Some parts needed to be created in order to be able to combine everything into a single solution.
3D printing is fun, that's for sure. But in this project, I tried to demonstrate that it can also be very functional.
A lot of parts have been designed and printed, ranging from clips for EnOcean sensors, weighing platforms for load cells or even mounting plates for RFID readers.
I've made a small collage of some of the parts.
In order to interconnect the different hardware components, I had to create some small circuits.
The different circuits are:
- a power splitter: using a single power supply, up to six devices can be connected either via USB or screw terminal
- a GPIO splitter: the splitter was required to make certain pins of the GPIO header available to different components
- a RPiSoC shield: the shield is used to connect two load cells to the RPiSoC using two instrumentation amplifiers. It also provides connection for a servo motor.
- a NOT gate: to drive the water dispenser's solenoid valve, an inverted pin is required in order to avoid problems in case of reset of the RPiSoC
- a peltier driver: using a MOSFET and a PWM signal, a high current device such as a peltier can be controlled variably
Every project deserves a nice enclosure/build. This project is no different.
I the last weeks, I started building the frame and installing the electronics, using the 3D printed parts.
Both home automation and pet care system components have been integrated in the enclosure, resulting in a single solution with many capabilities.
User Interface Overview
The user interface is created using openHAB. It consists of two main parts: house automation and pet care system.
Here are some screens:
After 12 weeks of coding, building, blogging and figuring things out, I am proud to present the result of all that work:
Click on the picture above to get a 360° view of the build!
I've also made two little video montages to demonstrate the pet care system's features and the home automation part of the project.
All files I have created (scripts, config files, 3D models) have been put on GitHub. Feel free to download and reuse them for your own project!
Improvements are obviously welcome too
You can find the full repository here: https://github.com/fvdbosch/ForgetMeNot
Finally, I'd like to thank Christian DeFeo, element14 and all the sponsors for their help and the opportunity to participate in this incredible challenge.
It's been a long but satisfying journey with a lot of experimenting, learning, sharing and even getting married ...
There were also a few pleasant surprises along the way:
- the challenge within a challenge: the Minion of the week
- the exclusive RPiSoC prototypes giveaway
I hope you have enjoyed tagging along as I made progress with my project! Thank you, and see you in a new challenge!