Steuerbare Webcam - Wie funktionierts?

Wie funktioniert die steuerbare Webcam und was braucht man hierzu? Und nicht zu vergessen: Was kostet der Spaß?

Diese Fragen sollen hier kurz angerissen werden....

 

Die Wirkungsweise soll anhand der Struktur erläutert werden. Das System besteht aus folgenden Komponenten:

  • Kameramodul

  • Schrittmotor

  • Steuerrechner (Mikrocontroller)

  • PC mit Videokarte und Software

  • Internetanbindung über Hardwarerouter (DSL-Flatrate  ;-) )

  • Dynamische IP-Vergabe über Provider

Die Kamera ist ein fertig aufgebautes Modul, welches man direkt an die Videokarte anschließen kann.

Der Microcontroller hat die Aufgabe, den Schrittmotor anzusteuern. Hierzu erhält er über eine serielle Verbindung zum PC die Steuerbefehle vom HTML-Server. Man kann jedoch auch mit der installierten Software auf dem Board den Motor über ein Terminalprogramm ansteuern. Doch dazu später mehr.

Auf dem PC läuft der HTML-Server (remcam), welcher die Befehle vom Client (Browser) entgegen nimmt und an das Controllerboard weitergibt (Steuerbefehle). Ist der Befehl  ausgeführt worden übergibt er dem Client die neue darzustellende Webseite. 

Der Videostream wird mittels Webcam32 erzeugt mit der sogenannten PUSH-Technologie. Wir haben diese Software gekauft, eine kostenlose Variante haben wir nicht gefunden.

Man benötigt noch eine Internet (IP) -Adresse über die die Kommunikation läuft. Da bei den meisten Providern sich diese Adresse bei der Einwahl ändert (dynamische IP-Vergabe), muss man dafür Sorge tragen, dass man über einen DDNS-Provider eine quasistatische IP erhält. Der Zugriff erfolgt somit immer über eine DNS z.B. www.myaccount.dyndns.org. Der Router muss dafür sorgen, dass der DDNS-Provider immer die aktuell zugewiesen IP erhält. Wir erläutern die Einstellungen an Hand unseres Systems später genauer.

In unserem Fall ist also der PC in ein Ethernet-Netzwerk integriert über den auch der Internetzugang (DSL-Flatrate!) erfolgt. Es versteht sich wahrscheinlich selbstredend, das solch ein Projekt schlecht mit einem Modemzugang realisiert werden kann.

Wie man erkennen kann, ist der Aufwand schon beträchtig und auch wenn man alles selbst aufbaut ist der preisliche Aufwand nicht zu unterschätzen (ganz zu schweigen vom zeitlichen Aufwand!!). Es ist jedoch hervorragend geeignet, um sich mal ein wenig mit Microcontrollern und mit der Wirkungsweise des Steuerns übers Internet zu beschäftigen.

 

Kameramodul

Die verwendete Kamera ist ein fertiges Modul, welches folgende Eigenschaften besitzt:

- Komplette PAL-Farbkamera mit hoher Auflösung (628 H x 582 V = 365 496 Pixel, 340 TV-Linien)

- Kleinste Abmessungen, geringe Leistungsaufnahme und sehr gute Bildqualität 

- Standart-Videoausgang 75Ohm, direkter Anschluss an Videokarte oder Monitor möglich

- geringe Zusatzbeschaltung notwendig

Technische Daten: 

- Betriebsspannung 5 VDC · Stromaufnahme 10 mA · Abm. (L x B x T) 22 x 22 x 26 mm 

- Linse mit IR-Filter: Öffnungswinkel FOV 51º x 43º · Brennweite f=6 mm, Blende F=1,6 mm · Automatischer Schwarz/Weiß-Abgleich

 

Das Datenblatt findet man hier. Das Modul kann über www.conrad.de bezogen werden (Bestell-Nr. 150026 - 62). Der Preis liegt bei ca. 55€.

 

Erste Erfahrungen zeigen, daß die Kamera ein wirklich gutes Bild liefert, sie jedoch große Probleme hat, wenn Gegenlicht auf das Modul trifft. Der automatische Abgleich ist auch relativ träge. Wir haben noch ein Graufilter (Sonnenschutzfolie) vor die Kamera gesetzt, um das Gegenlichtproblem ein wenig zu lindern.

 

Schrittmotor

 

Hier verwendet man am besten einen alten ausgeschlachteten bipolar Steppermotor. Ich hatte Glück und konnte für einen € aus der Wühlkiste bei Conrad 2 Stück mit nach Hause nehmen. Um den mechanischen Aufwand so gering wie möglich zu halten, ist es günstig einen Motor mit einer hohen Schrittrate zu wählen, so kann man den Drehteller direkt antreiben und benötigt kein zusätzliches Getriebe.

Der Motor hat folgende Daten

- Typ PM42L-048 Minebea (z.B. aus einem alten Fax oder Kopierer)

- Schritte/Winkel: 48/7,5°

- Spannung 24V

- Strangstrom 600mA @24V

Der Motor läuft auch noch problemlos bei kleineren Spannungen, bringt natürlich dann nicht das volle Drehmoment. Der Phasenstrom sollte unter 500mA liegen. Dann ist es relativ einfach, diesen über ein Transistorarray ULN2803A anzusteuern.

Eine hervorragende Seite (allerdings in englisch) rund um den Schrittmotor habe ich hier gefunden.

 

 

Controller - Flashboard 89S8252

 

Der Einstieg für mich in die Welt der Microcontroller erfolgte mit dem Flashboard der Zeitschrift Elektor. Ist seinerzeit erschienen 12/2001 und wurde ergänzt mit einem wirklich guten Basiskurs für µ-Controller (1/2002-5/2002).

Der verwendete Controller ist ein 8051-Derivat von Atmel. Hierfür gibt es reichlich Software fürs Programmieren (Assembler, Compiler z.B. ReadS51 etc.). Die Platine und die Bauelemente können bei www.geist-electronic.de bestellt werden (Kosten: Platine 18,28€  Best. Nr. EPS010208-1; Bauteile ca. 25€ Best. Nr. 011201-1BT). Die Teileliste gibt es hier.

Da die darauf installierte Software nicht allzu groß ist, kann man das Projekt noch etwas preislich zurechtstutzen. Den externen RAM 62256 (IC 4) kann in diesem Fall weggelassen werden. Die Stecker K3/K8 brauchen wir auch nicht.

Dafür kommt noch das Transistorarray ULN2803A hinzu und eine gewöhnliche Chinchbuchse für die Leiterplattenmontage. Den Stromlaufplan für die Erweiterung der Platine um den Motor anzusteuern gibt es hier. Die Buchse schaltet man in das Videosignal der Kamera damit die elektrische Verbindung (Kabel) auch mal getrennt werden kann. Die Spannung für die Kamera greift man an K6 (+5V) und K7 (GND) ab. Für den Referenzpunkt (Nulllage) braucht man noch einen Schalter. Ich habe statt eines Mikroschalters eine Gabellichtschranke H22B3 verwendet. Eine Lasche fährt in die Gabel und unterbricht den Lichtstrahl der LED und ruft somit einen Schaltvorgang aus.

Noch ein altes Steckernetzteil für 12-15VDC/500mA hervorgekramt und fertig ist die Hardware der Kamerasteuerung.

 

Verwendet wurde der Port P1.0 bis P1.3 für die Ansteuerung der Phasen des Motors (Ausgänge) und der  Port 1.4 zum Einlesen des Referenzpunktes.

 

Zur Software:

Sie wurde in C geschrieben (bin kein Profi!!). Das Hauptprogramm gibt es hier

Die Kommunikation läuft über die serielle Schnittstelle (UART). Die Steuerkommandos die übergeben werden vom HTML-Server (remcam) sind:

SYNC-BYTE KOORDINATE1 KOORDINATE2  --> Beispiel 255 128 0 (Sync-Byte ist immer 255, Koordinaten 0..255)

Remcam erwartet ein "Acknowledge"-Signal zurück. In diesem Fall wird ein "A" zurückgegeben, damit der Server weis, dass der Befehl ordnungsgemäß ausgeführt wurde.

Mit einem Monitorprogramm/Terminal (z.B. HEXTERM von WINDOWS 3.1) kann man den Motor auch von Hand steuern, wobei folgende Steuercodes gelten: 

i Initialisieren
a Fahren an den Anfang
e Fahren ans Ende
d Fahren in die Mitte
x ein Schritt vor
y ein Schritt zurück
v Fahren vorwärts
r Fahren Rückwärts
o Motor aus
s Status abfragen
255 Sync Byte senden (wartet auf weitere 2 Byte)
0..255 1. Drehwinkelkoordinate
0..255 2. Drehwinkelkoordinate

Wenn die Software soweit läuft, dass man den Motor über das Terminal steuern kann, geht es zum nächsten Schritt, der Anbindung an den PC mit dem HTML-Server (remcam)

 

HTML-Server

 

Die Kommunikation vom Webbrowser zum Steuern der Kamera läuft über einen HTML-Server. Keine Angst hört sich schwieriger an als es ist (solange man ihn nicht selber programmieren muss!). Als ich seinerzeit an die Realisierung meines Projektes ging fand ich im Web eine interessante Seite, welche den Aufbau einer steuerbaren Kamera gut beschrieb. Leider ist sie derzeit offline und nicht mehr verfügbar. Von dort konnte man seinerzeit auch den kleinen HTML-Server (remcam.exe) zum Steuern der Webcam downloaden. Ich hoffe ich verletze hier nicht die Urheberrechte wenn ich das Programm zu download anbiete (Mrs Cesco bitte ansonsten bei melden!). Die zip-Datei enthält die Orignal-Files die ich seinerzeit downgeloaded habe sowie die Verzeichnisse so wie die Anwendung es erfordert. Die Datei JavaCam.class ist von Webcam32. 

 

Die Inbetriebnahme ist an sich nicht schwierig.

Zuerst das remcam.ini-File angeschaut und angepaßt:

 

serial port number [1, 2] 
# serport 2 
Festlegung des Ports der RS232
TCP port number [80 .. 32000] 
# tcpport 80 
Belegung des TCP/IP Ports, über den die Steuerung laufen soll, ich habe ihn auf 8889 festgelegt, da dieser nicht belegt war und der Port 8888 von webcam32 verwendet wird
play sound [y, n] 
# playsound y
Festlegung ob remcam einen Ton abspielen soll
horizontal multiplier [-300 .. 300]
# hormult 50
Multiplikationsfaktor für die erste Koordinate
vertical multiplier [-300 .. 300]
# vermult 50
Multiplikationsfaktor für die zweite Koordinate

 

Für mein Projekt habe ich nur die horizontale Einstellmöglichkeit verwendet. Man muss nun die HTML-Seiten noch seinen Bedürfnissen anpassen. Ein paar html-Kenntnisse sind von Vorteil.

Die Steuerung läuft über ein sogenanntes Formular, welches in locnomap.htm eingebunden ist. Hier der HTML-Code für das Einstellen eines beliebigen Drehwinkels und die Auswahl einer Voreinstellung eines Drehwinkels.

<form action="http://myaccount.dyndns.org:8889/webcam.htm" method="get">

<input type="hidden" name="Host" value="http://myaccount.dyndns.org:8889">

<p><font size="2">Azimuth (-128 bis +128 grad):</font>

<!--webbot bot="Validation" s-data-type="Integer"

s-number-separators="x"

s-validation-constraint="Greater than or equal to"

s-validation-value="-128"

s-validation-constraint="Less than or equal to" s-validation-value="128"

--><input type="text" size="5" name="Azimu" value="%%AZ%%">

<select size="1" name="D1">

<option value="90">Süd</option>

<option value="270">Nord</option>

<option value="180">West</option>

<option value="0">Ost</option>

<option value="120">Elbe</option>

<option value="0">Center</option>

</select>

 <input type="submit" value="Abschicken" name="B1"></p>


Man muss lediglich die Werte anpassen:

<form action="http://myaccount.dyndns.org:8889/webcam.htm" method="get"> myaccount und den Port 8889 (siehe remcam.ini) ersetzen und anpassen. myaccount ist dabei der angelegte Zugang z.B. bei http://www.DynDNS.org 
<input type="hidden" name="Host" value="http://myaccount.dyndns.org:8889"> wie oben
<input type="text" size="5" name="Azimu" value="%%AZ%%"> das Textfeld erhält von remcam die aktuelle Position, Name "Azimu" unbedingt beibehalten! "value" übergibt dabei den einzustellenden Drehwinkel horizontal
<input type="text" size="5" name="Elev" value="%%EL%%"> das Textfeld erhält von remcam die aktuelle Position, Name "ELEV" unbedingt beibehalten! "value" übergibt dabei den einzustellenden Drehwinkel vertikal (vom Controller nicht unterstützt)

<select size="1" name="D1">

<option value="90">Süd</option>

Auswahlfenster für Positionsvoreinstellungen, "value" übergibt dabei den einzustellenden Drehwinkel
   


Will man die die Kamera über z.B. Pfeilbuttons steuern geht das so:

<a href="http://myaccount.dyndns.org:8889/turnr.htm"><img border="0" src="http://www.meinewebcam.de/PFEILRECHTS.GIF" width="40" height="40"></a>

Dies entspricht einer Verknüpfung eines Bildes (z.B. einem Pfeil nach rechts) mit dem Link http://...
und diese Werte sind anzupassen 

<a href="http://myaccount.dyndns.org:8889/turnr.htm">

myaccount und den Port 8889 (siehe remcam.ini) ersetzen und anpassen. myaccount ist dabei der angelegte Zugang z.B. bei DynDNS.org

turnr.htm => rechts drehen

turnl.htm => links drehen

turnu.htm => nach oben drehen (nicht unterstütz durch Controller)

turnd.htm => nach unten drehen (nicht unterstütz durch Controller)

turn.htm => in die Mitte drehen 

<img border="0" src="http://www.meinewebcam.de/PFEILRECHTS.GIF" width="40" height="40"></a> src => den Link auf die entsprechende Grafik setzen


Wichtig ist, das die Webseite locnomap.htm sowohl auf dem FTP-Server der Homepage (als Startseite sozusagen) als auch auf dem lokalen PC (im remcam-Verzeichnis) enthalten ist! Dem Webbrowser wird als Antwort der Anfrage die lokale html-Seite zur Verfügung gestellt.

 

Webcam32

 

Was man nun noch benötigt ist eine Software, welche die Videobilder ins Netz transferiert ("streamt"). Wir haben uns für Webcam32 entschieden, zwar nicht kostenlos, dafür bekommt man aber jede Menge Funktionen geboten. Wir brauchen speziell die Möglichkeit, via "Java Server Push" die Streams ins Netz zu stellen. Was sich dahinter verbirgt  kann man z.B. bei http://www.webcam-center.de nachlesen, genauso wie webcam32 zu konfigurieren ist.

Die wichtigsten Einstellungen jedoch auch noch mal hier:

 

Preferences:

TCP/IP    
Features Single Frame Enabled [X]
  Applet Enabled [X]
  Server Push Enabled [X]
Access Remote acces Port z.B. 8888
  Enable HTTP-Logging [X] wenn die Zugriffe geloggt werden sollen
  Current IP Adress  
Server Push Alle Werte auf null stellen unbegrenzte Datenmenge pushen
FTP    
  keine Einstellungen notwendig, da kein Transfer via FTP!  
Device Format und Bild einstellen  
Image Caption  z.B. %C (für Datum und Uhrzeit) den Zeitstempel festlegen 
Display Suppressed all messages [X]
     
In unserem Fall übernimmt der Hardware-Router (SMC Barricade kompatibel) das uploaden der aktuellen IP zum DDNS- Provider. Webcam32 besitzt ebenfalls die Möglichkeit die IP-Adresse zu aktualisieren (d.h. es wird die html-Datei (auf welche der  Stream laufen soll) auf dem FTP-server mit der aktuellen IP "versorgt". Leider liegen hier keine Erfahrungen vor.

Nun noch die in remcam.zip  enthaltenen html-Dateien angepasst und das Frame (stream-frame.htm, locnomap.htm und wc32push.htm) auf denFTP-Homepage-Server gelegt und dann ist es fast fertig das Projekt...

Router und DDNS-Provider

 

Nun muss noch der Router eingestellt werden und es gilt sich eine quasistatische IP zu beschaffen. Das geht wie folgt:

  • Router

Wir gehen von einem SMC Barricade Router aus. Wie es sich mit anderen Routern verhält, fehlt leider die Vergleichsmöglichkeit. Aber an Hand dessen soll ja das Wirkprinzip erläutert werden.

Hier wieder die wichtigsten Einstellungen:

Primary Setup neben Euren Einstellungen zur Einwahl noch folgendes Häkchen setzten

Auto-reconnect [X]

ermöglicht die sofortige Wiedereinwahl,

Flat-Rate ist Voraussetzung!! Ansonsten wird es  teuer!

Virtual Server Die Service Ports zur Kommunikation müssen hier hinterlegt werden. In unserem Fall: 8888 und 8889 (jeweils an die IP-Adresse des Steuer-PCs binden, auf dem Webcam32 und remcam läuft!!!). Beispiel

ID     Service-Ports         Server-IP                Enabled

1       8888                    192.168.123.111     [X]

in diesem Beispiel hat der PC von Webcam32 die IP 192.168.123.111
Dynamic DNS In unserem Fall unterstütz der Router www.dyndns.org. Also 

DDNS     enable [o]

Host       myaccount.dyndns.org

Provider und Zugangsdaten angeben....

 

 
Misc Items IP Address of DMZ Host  : 192.168.123.111 in diesem Beispiel hat der PC von Webcam32 die IP 192.168.123.111
  • DDNS-Provider

Wir haben uns als DDNS-Provider www.DynDns.org ausgesucht. Dieser bietet einen kostenlosen Dynamic-DNS-Service.

Einen Zugang anmelden und anschließend unter http://www.dyndns.org/services/dyndns/ einen Host anlegen der im Router hinterlegt wird (wie eben beschrieben). Wie der Zugriff über die Webseiten erfolgt, ist bereits beim html-Server beschrieben worden.

 

Kleiner Tipp am Rande: auf diesem Wege kann man auch seinen privaten FTP und HTML-Server einrichten und betreiben. Einfach den kostenlosen JANA-SERVER downloaden....aber das ist schon ein wenig "Off Topic".

 

Resume

Eine kleine Webcam zu betreiben und die Bilder über den FTP-Transfer ins WWW zu stellen, bringt heute niemanden mehr ins Schwitzen. Die Kamera dabei auch noch steuerbar zu machen, bedarf wie gezeigt wurde eines weitaus höheren Aufwandes

  • möglichst DSL-Internetzugang mit Flat-Rate 

  • bestehendes lokales Ethernet mit Hardware-Router

  • einige Programmier- und Hardwarekenntnisse

  • eine ganze Menge Zeit (nur gut das meine Frau das so mitmacht...)

  • nicht zu verschweigen die finanziellen Aufwendungen (Summa Summarum ohne PC/Ethernet: ca. 200€)

Unser fertiges Gerät gibt es hier zu bestaunen. Und wie es funktioniert sieht man hier....

 

Also: viel Spass beim Selbermachen, und lasst es mich wissen wenn es auch bei Euch funktioniert (oder noch nicht)!

- Diese Seite ist Bestandteil des privaten Wetterservice Mühlanger  (c) 2003 CaRei -

Stand 06.04.2003