lördag 9 mars 2013

Automatisk loggning av vattenförbrukning

Loggning av vattenförbrukning är en av de funktioner som saknas i mitt "system". Tyvärr saknar min vattenmätare någon form av elektrisk pulsutgång så lösningen blir en optisk avläsning.

Planen är att montera en gammal mobiltelefon med kamera och "blixt" som får ta bilder på vattenmätaren med jämna mellanrum. Telefonen är kopplad till mitt WIFI-nät och laddar automatiskt upp alla bilder på en ftp-server. Sedan körs ett analysprogram på servern som genom bildbehandling extraherar nuvarande mätarställning. Det är två typer av bildbehandling som behövs, först bör räkneverket OCR:as och sedan bör de fyra röda mätarna läsas av med lämplig metod. När all information är avläst lagras den i en Mysql databas .

Exempel på hur en vattenmätare kan se ut.
Tanken är att utgå från Python-sciptet på den här sidan.

Trådlös blomövervakning

Detta projektet går ut på att bygga små trådlösa noder med en jordfuktighetssensor. Dessa skall regelbudet rapportera fuktigheten i jorden till ett överordnat system. Det överordnade systemet kan vara en Raspberry Pi med en Tellstick Duo eller en Arduino med 433 MHz mottagare.
Det överordnade systemet kan sedan larma personen ansvarig för blombevattning.


Kontorsnotifieringssystemprojektet

Detta projektet går ut på att sätta ihop 2-8 stycken 8x8 LED matriser och sedan visa meddelande som en scrollande text. Texten skall kunna styras från internet vilket gör att styrnoden måste ha tillgång till ett nätverk med internet-access eller ha ett eget 3g modem.

Planen är att använda en Raspberry Pi som styrnod, det går även med en Arduino men då blir det krångligare att  koppla den till nätet, behövs nog en PC som gateway isåfall.

Komponentlista
  • Raspberry Pi
  • Eventuellt USB-WIFI modul
  • Eventuellt 3g-modem med SIM-kort
  • X st 8x8 LED matriser (exempel)
  • X st MAX7219 LED drivers (exempel)
  • En rejäl nätdel, varje 8x8 drar runt 170 mA + 1A för Rasbperry Pi:n
  • En snygg låda
Progress:
* 2 st LED matriser med drivare beställda.

Trådlös energimonitor

Detta projektet går ut på att trådlöst övervaka hur mycket el som förbrukas i ett hushåll. Detta görs genom att läsa av IR-dioden på elmätaren. Genom att mäta tiden mellan varje puls kan den momentana elförbrukningen i Watt beräknas, antalet pulser per timme/dag/månad/osv kan användas för att beräkna förbrukningen i kWh.

För att slippa springa ut till elmätaren hela tiden kommer systemet bestå av två enheter. En som läser av den blinkande IR-dioden och en som presenterar informationen för en användare. Dessa kommunicerar trådlöst på 433 MHz.

Sensornoden mäter förutom pulser även batterispänningen. När en ny puls detekteras från elmätaren vaknar noden ur sleep-mode och skickar ett kort paket med en start-tag samt en byte med pulsnummer. Batterinivå skickar var X:de puls.

Presentationsnoden är ansvarig för att presentera momentan förbrukning samt ackumulerad förbrukning sista timman, dagen, veckan, månaden och året. Dock bygger detta på att presentationsnoden inte missar att ta emot för många (fler än 256) pulser från sensornoden.

Komponentlista - sensornod

  • Arduino-kompatibel nod, t.ex. ATTiny85
  • TSL261 Light to Voltage sensor
  • 433 MHz sändarmodul (exempel)
  • Batterihållare för 2xAA batteri
  • Låda
Komponentlista - presentationsnod
  • Arduino Mini Pro eller Uno
  • 433 MHz motagarmodul (exempel)
  • 5V nätdel
  • Nokia 5110 display
  • Realtidsklocka (exempel)
  • Låda

Sensornoden är baserad på systemet på den här länken.

Progress:
* Ett prototypsystem är byggt på två stycken Arduino Uno. Den ena noden läser av elmätaren med en IR-sensor och skickar en puls via den trådlösa länken. Den andra noden lyssnar efter pulser och räknar sedan ut den momentana förbrukningen och visar den på en 16x2 display.

Växthusövervakningsprojektet

Eftersom Google Translate gör ett bra jobb med att översätta sidor mellan olika språk kommer detta och nästföljande inlägg om mina Arduinoprojekt vara på svenska.

Detta projektet går ut på att fjärrövervaka växter i ett växthus. Förutsättningarna är att det finns el samt ett wifi-nät med internetaccess.

Tanken med systemet är att mäta förhållandena i växthuset med hjälp av ett antal sensorer. Följande saker kommer mätas:

  • Temperatur (DHT22 sensor) 
  • Luftfuktighet (DHT22 sensor)
  • Jordfuktighet (Soil Hygrometer Detection Module)
  • Timelapse över växternas växt (Raspberry Pi Camera module eller Webcam)
Planen är att använda en Raspberry Pi för att samla in data från sensorer samt att skicka vidare till en server på internet. Alternativt köra en web-server där klienter kan ansluta direkt. Presentation av informationen kommer göras via en websida med grafer samt video och stillbilder.
Temperatur, luftfuktighet samt jordfuktighet kommer att mätas genom sensorer som kopplas till en Arduino Uno som agerar som sensor-board till Raspberry Pi:en. Detta möjliggör sex stycken jordfuktighetssensorer.

Förutom dessa komponenter kommer eventuellt någon av enheterna även ha en enklare display (Nokia 5110 , 16x2 eller 20x4) för att presentera informationen lokalt.

Systemet kommer byggas och deployas under våren 2013.

Komponentlista
  • Raspberry Pi
  • SD-kort
  • Strömförsörjning, 1A, 5V
  • USB-WIFI adapter
  • Arduino Uno med USB kabel
  • DHT22 temperatur/luftfuktighetssensor (exempel)
  • X stycken Soil Hygrometer Detection Module (exempel)
  • 16x2 display till Raspberry Pi (exempel)

tisdag 30 oktober 2012

Caller ID project

I have a problem with caller id. In my cordless phone the number is not stored when you answer in that phone and in my old cable-connected phone (with caller id) the battery is out. The easy fix is of course to replace the batteries but wheres the fun in that?

Instead I remembered that I have an old NIM Personal on a shelf from an earlier (think 2007) idea about a caller id project. A NIM Personal (Link) is a rather nice looking caller id device what instead of presenting the incoming number on a display, sends it on a RS232 serial port (9600) baud.

Wouldn't it be nice to log all incoming calls and automatically look them up in an online directory and same them in a database accessible from a browser or smartphone? I think so and it is much more fun than just replacing the batteries in the old phone.

To make things a little bit harder, serial ports are not the common today as they were in 2007. Therefore I bought a ATEN USB-to-Serial Converter (Link). I plugged everything into a Windows 7 PC and installed the drivers. After that I launched putty, opened COM4 and called my land line from my cellphone. And it worked!
In putty I got this line:

!A**********C,820629123034,000;

But instead of the * I got my cell phone number...
The protocol seams to be quite easy, first the phone number and then some kind of time stamp (I tried calling multiple times and it increased).

The next step is to get it to work with Raspian on my 512 Mb Raspberry PI (Link), set up a database, a lookup service and a simple web-page.

Update 2012-10-31
Now I have tested the NIM Personal connected to Raspberry PI with the ATEN USB-to-Serial converter. With the command "dd if=/dev/ttyUSB0 count=22" I got the caller id information into Linux. I also used "stty -F /dev/ttyUSB0 -ixon raw speed 9600" to set the speed and flow control of the serial port.
I also found a Java software called Who's Calling (Link) that included all the functionality I want. It put the incoming numbers in a database and use online directories to lookup the name of the caller and then stores it in the database.

The next step is to install Open JDK 7 on the PI and try to get Who's Calling to work.

Update 2012-10-01
It almost worked! But unfortunately the Who's Calling installation program return an error on a file called wrapper. After a little digging I found out that it is a service wrapper for java programs and the version bundled with Who's Calling are most likely an x86 binary. Fortunately the vendor also had ARM binaries on their site (Link).
Of course the problems didn't end here, the next problem was the error message:
"; nested exception is java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path"
That I got when I tried to start Who's Calling.

Update 2012-11-09
Success! Now I got the software up and running. The above error was solved by installing the package librxtx-java:
sudo apt-get install librxtx-java

and adding the directory /usr/lib/jni to the wrapper.java.library.path in the WhosCalling/config/wrapper.conf file:

wrapper.java.library.path.1=../lib:/usr/lib/jni

This project is now completed and the software and hardware will be added to the "production system" RaspberryPi in the Network Connection room (with the ADSL modem, WIFI-Router, IP-Telephony box, Ethernet Switch and network patch panel).