This project is about creating a robot controlled by a Raspberry Pi.
The main challenge of the project is to identify obstacles in the robot’s path, using a webcam and the limited computing resources of the credit card sized PC. And do it all in real time.
I’ve researched and experimented with several computer vision techniques, such as stereo vision, motion quantization, binocular and monocular vision, background removal. The software used is the excellent computer vision library OpenCV and the chosen programming language is Python.
The result is a robot that is reasonably capable of avoiding obstacles although it’s far from perfect. I will add more information as the project evolves.

« 1 of 3 »

Raspi@Home – Domotics with a Raspberry Pi

Hi, this is a project I’ve worked on for some time. It consists of a raspberry pi connected to several sensors + wifi internet, which alerts me on my Android phone of several events.
The reasons I decided to start this project are:
– I wanted to learn a little of electronics, the practical way (I’ve come to love it!)
– I’m a little bit hard of hearing, enough to miss from time to time the intercom/doorbell sound
– It’s fun! :)


« 1 of 4 »

All the server-side software is written in python.
The setup is the following. The raspberry pi is connected to the entrance door of my house, two doorbells, the intercom, a PIR of my home alarm system, and temperature sensor. It runs a server based on web.py.
When a doorbell, intercom or door are triggered, the raspi saves the event to a sqlite database, and sends the event to the phone through GCM, where it’s received by my application and I’m notified.
Also, when the door is opened, the raspi interrupts the circuit that connects the PIR to the home alarm. So, if the alarm is enabled, it detects the PIR as disconnected and is triggered.
The server on the raspi monitors at regular intervals the cpu temperature and an external temperature sensor, saves the data to a sqlite db, and graphs the last 24 hours to an url-accessible image file.


« 1 of 4 »

A common door switch is used to monitor the door status.
A custom built circuit connects the raspberry pi to the two doorbells (mains 220V AC) and to the intercom (~24V AC). These are optoisolated to ensure my raspberry pi doesn’t fry.
A 2 channel 5V optoisolated relay board connects the raspberry pi to the PIR. I used a NC (normally closed) relay so that in case of power failure the PIR is kept connected to the alarm.
Wireless sensors use Moteino boards and a custom built wireless protocol.

What’s next:
I’ve bought a Zoom 3095 modem, and once it arrives I plan to connect it to the raspi, and get notified when someone calls home. The Android app should be able to check whether the number is in the contacts list and display the name. I’ll also try to implement a blacklist-based call filtering, and auto-close calls if possible. Call recording would also be a nice feature, but it’s probably impossible to do with that modem and is subject to local laws.

HTML5 Canvas map framework: CanvaMap

CanvaMap is a JavaScript program, which takes advantage of HTML5 and Canvas to display a map with several overlays. It’s very small and weights just 8.8kB. CanvaMap is in Alpha stage, so it has bugs, the code is not well documented and some parts of it should be restructured; but for basic tasks it’s quick and easy to deploy. It can also be used to display large images as it offers zoom-in/out and navigation capabilities.

A very basic example is shown below. Double clicking on any of the leftmost buildings, zooms in and shows the floor plans. Zoom can also be achieved using the mouse wheel.

Simple example – Full screen:

Continue reading

Automatic updater for Android applications

Recently I’ve started to develop a few Android applications with some friends, and as soon as I started to make updates I faced a problem: how can I tell my beta testers to update the application to the latest test version?

I could email them all every time, but I’d need to have all their email addresses. I could use a service such as Zubhium (by the way, they have a very good user support), but for a small application such as mine that’s an overkill.

So what could I do? I had to write a custom updater, of course.

Continue reading