A basic USB camera can be used to detect motion in a room. In the following steps we will show you how you can use Reactive Blocks to program a ready to run Java application that sends SMS when motion is detected. With Reative Blocks you make Java SE applications so the alarm application can be deployed on any machine with Java SE and a camera attached or integrated. The application is easily deployed on the Pi since the Raspbian release has Oracle Java pre-installed. .
This is what you need:
- Raspberry Pi Model B+ with Raspbian OS
- Standard USB camera
- Ethernet cable
- Screen and keyboard for the Pi
- Windows or MAC computer with JDK
- Reactive Blocks, an Eclipse plugin, to program the application.
This alarm application is one of several modifiable example systems that are accessible after you install Reactive Blocks. The application is made ready to run out of the box and you won´t need any Java programming skills to complete the tutorial. To make your own Reactive Blocks applications and building blocks, you need to be a proficient Java programmer. When building more complex applications with several sensors and actuators, Reactive Blocks makes it easy to get the logic and the data flow right. Reactive Blocks is free for open source projects.
Step 1: Install Reactive Blocks
Install Reactive Blocks to your computer from www.bitreactive.com/installation/,
Reactive Blocks is free for Open Source Projects.
Step 2: Download the application from the libraries
Make sure you have opened the Reactive Blocks perspective and that you are in the Blocks view.
From the Blocks view select the import button and choose Reference applications. Select the Motion Detection project. At this point you will be asked to register with a google ID. This will give you immediate access to the building blocks libraries and modifiable systems and tutorials.
The Motion Detection project you downloaded includes two applications, the actual Alarm System and a test application the Test motion detection. In this tutorial you will only use the Alarm System.
Step 3: The application at top level
This step gives an explanation of the application. The first picture shows the diagram of what the complete application looks like at the top level. It is composed of 7 building blocks; 5 standard building blocks from the libraries and 2 custom made blocks that were made for this application.
Standard Blocks from the IoT library are:
- Grabber, grabs images from the USB camera
- Image to file, writes buffered image object to file
- Periodic Timer, starts at accurate time stamps and sends a signal on the tick pin every period.
- Buffer Eager, pushes out the first element in the queue automatically. The buffer ensures that only one message is sent to the SMS Send block since it can only process one message at a time.
- SMS Send, sends SMS through the Twilio service
Custom made blocks for this application are:
- ReadConfig, reads config data from input file
- View, views an image on the screen.
The Periodic Timer block works as a system engine. It will periodically issue a tick that sends a signal to the Grabber block via the grab pin.The Grabber block uses the Open Intelligent Multimedia Analysis for Java, OpenIMAJ. When the block is initialized, a separate thread is started to read data from the camera. The thread listens to a command queue. When the block receives a command via the grab pin it will take one picture and deliver it on the image pin.
The image is then passed to the Motion Detection block that performs the actual image detection. The Motion detection block also uses OpenIMAJ. A method within this block compares two images and will flag changes in image when motion is detected. The method is very CPU intensive and has to be run in a separate thread. When an image is detected it is signaled on the motionDetected pin which will trigger the generation of an SMS message.
The light blue boxes are all Java methods specifically made for this application. Clicking on a method block opens the Java editor. You can see what some of the methods look like in the second picture.
When you click on a building block you can see the details of the logic inside the block. If you look inside the ReadConfig block you will see it is made by combining one existing building blocks and 4 Java methods.
Step 4: Enable SMS
This alarm application uses Twilio as SMS service. To enable SMS you must edit the file config/motiondetection.ini. You can find it in the package explorer view under br.ref.motiondetection, see the picture.
If you don´t have the Twilio service you can modify the application to use your own SMS service. We also have a ready to use building block for the Clickatell service.
If you rather have email notification or if you want to monitor your application from a cloud service, this is also quite easy to do with small modifications. You can find building blocks for SMTP email, AirVantage Cloud, IBM Bluemix and Xively to name a few.
Of course, you can always run the application without SMS enabled.