Previous posts for this project:

 

 

Introduction

 

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.

 

Project Information

 

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.


arch-hw.png

 

 

Raspberry Pi

 

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.

 

RPiSoC

 

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.

 

EnOceanPi

 

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.

 

Arduino UNO

 

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.

 

ATtiny85

 

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:

  • openHAB
  • MySQL Server
  • motion
  • Python

 

On the Arduino, 3 libraries are used:

  • SPI
  • MFRC522
  • NeoPixel

 

Here's an overview:

arch.png

 

Let's go into more detail on each software component.

 

openHAB

 

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

 

MySQL Server

 

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

 

motion

 

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


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


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.

3D-Prints-collage.png

 

Circuits

 

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

circuits-collage.png

 

Enclosure

 

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.

build-collage.png

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:

Screen Shot 2014-10-23 at 21.47.26.pngScreen Shot 2014-10-23 at 21.48.29.png

Screen Shot 2014-10-23 at 21.49.12.pngScreen Shot 2014-10-23 at 21.51.43.png

Screen Shot 2014-10-25 at 08.37.31.pngScreen Shot 2014-10-25 at 09.34.06.png

 

 

The Result

 

After 12 weeks of coding, building, blogging and figuring things out, I am proud to present the result of all that work:

output_rsQ0oi.gif

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.

 

 

 


Source Files


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



Thank you


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 ...

sponsors.png


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

10672096_382317635250807_7906661666465324390_n.jpgcypress-semi-logo.jpg


I hope you have enjoyed tagging along as I made progress with my project! Thank you, and see you in a new challenge!