PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mini Moving Heads für Lightshow im Zimmer



jo_robot
15.10.2007, 14:39
Hi alle zusammen!

So wie der Titel schon sagt will ich 4 Mini Moving Heads machen. Die werden dann in die vier oberen ecken meines Zimmers gestellt wenn sie je einmal funktionieren werden.

Als Basis hab ich mir gedacht dass ich einfach 2 Servos aufeinander mach für Pan u. Tilt
Ich hab dann 8 Servos die ich warscheinlich dann mit dem Servo Control von Robotikhardware.de ansteuere.

Die Leuchten werden auch recht einfach sein: ich nehme warscheinlich einfach nur 4 rgb leds die einen abstrahlwinkel von 20° haben. Keine gobos usw das wäre zu schwierig.
Um die Farbe zu mischen brauch ich noch eine gute idee. jede led hat rot gelb blau die ich vermutlich mit PWM dimmen und die farbe mischen werde nur bräuchte ich da ziemlich viele Controller oder könnte man dies auch mit einem Servo Control machen?

Als übergeordnete Controll einheit würde ich ein RN-Control nehmen, auf dem ich dann die Effekte, vielleich noch eine Musiksteurerung programmiere und noch andere Leds sozusagen als sehr kleine "Par64 leuchten" ansteurn will.

Ich will alles mit rs232 oder höchstens noch I2C machen. weil DMX wär mir glaub eine Nummer zu groß


Bin offen für Vorschläge und wär dankbar wenn mir jm. die Frage beantworten kann ob ich ein (oder eher 2 ;) )weitere(s) servokontroll nehmen kann um die Farbe zu mischen und dimmen.

MarsoTexx
15.10.2007, 16:49
Wow! So ein relatief kleines Project Lichtshow mach ich gern. Bin for 3 Jahren mit ein MoonFlower beschaftigt gewesen. Mit eine Birne, Rotationsscheibe und alles in ein altes Gehauzer eine PowerSuply ein PC's. Sache liegt jetz im Schrottecke... Schade. Ich denke deine Basis ist so ok. Es sollte einfacher konnen glaube ich: instatt den servo-controller mussen die Servo signalen auch mit ein MicroContoller herzu stellen sein.

Abhanglich wie die Servo mechanisch belasten werden, brauchst du vieleicht die Servo's nict contineu anzu steuren. Damit meine ich: wen der Servo sein nachstes Ziel erreicht hat, bleibt er dort stehn wenn die mechanische Belasting niederich ist. (must du uberichens sicher sein das der Servo das Steuersignal lang genug entfangt um das Ziel zu erreichen). Das ist meine Erfarung. Viel Erfolg. Marcel

jo_robot
15.10.2007, 17:41
Deinem Deutsch nach nehme ich an das du nicht aus Deutschland kommst?

aber danke für den tipp... Ich schau mal ob ich das ganze mit einem µC hinbekomme

HannoHupmann
15.10.2007, 18:55
Vielleicht reicht es für jedes ServoModul einen kleinen AVR mit I²C zu verwenden. Dann könnte man das System beliebig erweitern. Einzig das Problem, dass alle hintereinander gehängt werden. Damit würden dann 4Adern in der Leitung reichen (SCL, SDA, 5V und GND)

und ja MarsoTexx ist Niederländer wie man schon an der Flagge erkennen kann :-) Er schreibt bestimmt besser in Deutsch als unser einer in Niederländisch.

jo_robot
15.10.2007, 20:17
jo^^ die flagge hab ich völlig übersehen. Ich wollte das auch eigl nur wissen weil es mich interessiert wer aus einem evtl. nicht deutschsprachigem land in einem deutschem roboterforum etwas schreibt^^ alle achtung!


also das mit nacheinander hängen sollte kein problem sein denke ich. aber wären mega8 ausreichend ich kenn mich nicht so genau aus. wie viele pwm ports haben die? und mann müsste für jeden einen eigenen motortreiber hinhängen oder?

wkrug
15.10.2007, 22:23
Wenn Du keine alzu hohen Ansprüche an die Frequenz stellst lässt sich eine PWM auch softwaremässig erzeugen.
Dann sollte das kein Problem mehr mit der Anzahl der PWM Kanäle geben.

Ich meine eine PWM für 3 Kanäle (RGB) + Ansteuerungsimpulse für 2 Servos + Verarbeitung einer seriellen Schnittstelle sollte ein ATMEGA 8 locker packen.

Wenn Du das Ganze sowieso über RS232 machen willst, kannst Du auch gleich auf DMX 512 aufspringen.
Bis auf die Erzeugung der Sync Impulse und den Schnittstellentreiber Baustein gibts da keine so großen Unterschiede.

Wenn Du das Spielchen per DMX dann über den PC steuern willst kannst Du das DMX4ALL interface ( http://www.dmx4all.de/ ) verwenden.
Gut - das Ding kostet ein paar Euro, aber deine Servos schenkt Dir ja auch niemand.
Ein paar DMX Softwarepakete gibts gratis im Internet.
Mir gefällt zum Beispiel DMXControl sehr gut.
Auch FreeStyler soll sehr gut sein , ich konnte mich aber damit nicht anfreunden.
Beide Softwarepakete sollten auch semiprofessionellen Ansprüchen genügen.
Ausserdem kann mit dem selben Equipment dann auch richtige DMX Geräte angesteuern.

Ich würd auf jeden Fall mal einen Blick auf DMX riskieren.

jo_robot
16.10.2007, 16:10
Also mit dem DMXCOntorl hab ich schon bisschen rumgespielt. Aber dann brauch ich am PC auch noch ein Dmx Interface wie du geschrieben hast...?

Auserdem hab ich das noch nicht so ganz gecheckt wie des funktioniert (dmx) Des ist einfach so das jeder "Kanal auf einer anderen Frequenz die man mit PWM erzeugen kann liegt oder??

Und wie wie dimme ich dann die leds? bitte helft mir bisschen auf die sprünge


bin leider nich so das eltektronik ass...

wkrug
16.10.2007, 19:23
Also mit dem DMXCOntorl hab ich schon bisschen rumgespielt. Aber dann brauch ich am PC auch noch ein Dmx Interface wie du geschrieben hast...?

Das mit dem DMX Interface stimmt.
Wir haben das DMX Interface V4 von DMX4All.
Wenn Du das einfache über USB anschließst, braucht das Interface keine eigene Stromversorgung.



Auserdem hab ich das noch nicht so ganz gecheckt wie des funktioniert (dmx) Des ist einfach so das jeder "Kanal auf einer anderen Frequenz die man mit PWM erzeugen kann liegt oder??
Schau mal auf diese Seite http://www.soundlight.de/techtips/dmx512/dmx512.htm
Im Prinzip handelt es sich dabei um eine serielle Datenübertragung mit 1 Startbit, 8 Datenbits und einem Stop Bit, also 250kBit/s 8N1.
Diesen Datenstrom kann der USART eines Microcontrollers ohne weiteres empfangen und auswerten.
Um eine definierten Startpunkt zu bekommen werden in die Impulskette gezielt Code Verletzungen eingebaut.
Es wird eine Dauerlage 0 für mehr als eine Impulskette ( = 10 Bit ) eingefügt.
Diese Codeverletzung kann man auswerten ( erzeugt einen Frame Error =FE) beim USART des Microcontrollers.
Nach dieser Code Verletzung wird ein DMX Status Byte eingefügt. Das ist üblicherweise 8Bit * 0. Dieses Statusbyte war und ist mal vorgesehen um verschiedenartige Geräte über DMX 512 anzusteuern. Üblicherweise wird aber nur das Statusbyte 0 verwendet. Statusbyte 0 bedeutet Dimmer.

Die Empfänger bekommen eine Startadresse die von 1...512 einstellbar sein sollte. Die meisten einfachen Geräte haben da einfach einen Dip Fix Schalter drin.
Dein Moving Head wird also 5 Kanäle benötigen (RGB + 2 Servos) der nächste Moving Head krigt dann Adresse 6 und ist somit unabhängig vom erten Moving Head ansteuerbar.
Sollen 2 Moving Heads immer genau das gleiche machen kann man für die beiden einfach nur die gleiche Adresse verwenden.
Man spricht dabei auch von Soft - Patching.

Über den elektischen Aufbau der Schnittstelle ist nicht viel zu sagen. Da werden einfach ganz normale RS 485 Schnittstellentreiber eingesetzt.
Da die Datenübertragung nur von einem Master zu mehreren Slaves (maximal 32) geht braucht man sich auch um einen Handshake nicht zu kümmern.
Am Ende einer DMX Kette wird ein Terminator = ein XLR Stecker mit eingebautem 120 Ohm Widerstand eingebaut.

Ein DMX Gerät hat jeweils einen Stecker und eine Buchse, weil das Signal ja auf weitere Geräte weitergeführt werden kann.

Als Steckverbinder sind in der Norm 5polige XLR Stecker/ Buchsen definiert.
Nur an diese Norm hält sich so gut wie kein Hersteller.
Üblicherweise werden da ganz normale 3 polige XLR Stecker Buchsen verwendet, die auch wesentlich kostengünstiger sind.
Als Kabel sind Digital Audiokabel vorgesehen.
Cat. 5 Netzwerk Patchkabel sind aber genauso gut, und zur Not tut es auch ein 3 poliges Mikrofonkabel.

Ein paar Softwaresourcen für ATMEL AVR Microcontroller hatte ich auch schon mal im Internet gefunden, die sind aber zur Zeit irgendwo im meinem Datenmüll untergegangen.


Und wie wie dimme ich dann die leds? bitte helft mir bisschen auf die sprünge

Wenn Dir eine Dimm Frequenz von 60..80 Hz reicht, kannst Du den Timer 0 frei laufen lassen, bis ein Timer Overflow Interrupt anliegt.

In diesem Timer Overflow Interrupt zählst Du ein Register hoch.
Dieses Register wird dann mit der gewünschten Helligkeit deiner Led's verglichen. Also bei RGB 3 Vergleiche.
So lange der Zählerstand unter der gewünschten Helligkeit ist wird der entsprechende Ausgang eingeschaltet. Sobald der Zählerstand >= der gewünschten Helligkeit ist wird der Ausgang abgeschaltet.
Diese Routine sollte möglichst schnell ablaufen, also wäre da Assembler sinnvoll.
Wenn die Routine läuft brauchst Du im Hauptprogramm nur die entsprechenden Sollwerte in die Dimm Speicherplätze einschreiben und die Dimmung läuft dann automatisch im Hintergrund.

Da auch DMX nur Werte von 0...255 kennt braucht dieses Zählregister auch nur 1Byte breit sein.
Die Erzeugung der Servoimpulse würde ich mit dem Timer 1 machen.
Wenn Du die Taktfrequenz und die Prescaler geschickt auswählst kann Servo 1 mit Comparematch A Interrupt, Servo 2 mit Comparematch B Interrupt und die Pause zwischen den Impulsen mit dem Timer Overflow bedient werden und läuft somit ebenfalls im Hintergrund.
Dein Hauptprogramm hat somit "alle Zeit der Welt" um die Werte in die entsprechenden Speicheradressen zu schreiben und die Daten von DMX zu empfangen, wobei ich den Datenempfang ebenfalls in einen Interrupt verschieben würde.
Da Du in deinem Controler ja nur die Bytes des DMX Stromes auswerten musst die den Controller auch betreffen (Adresszähler mitlaufen lassen) braucht der Controller auch nur die Werte des DMX Stromes abspeichern die er für seine Funktion braucht - sprich der Controller braucht nicht mal viel RAM. Ich meine die komplette Applikation für ein Moving Head sollte sich mit einem ATMEGA8 realisieren lassen. Also 4 mal gleicher Aufbau mit gleicher Software und dein Projekt sollte laufen.

jo_robot
16.10.2007, 21:09
Ok ich hab mir das grad durchgelesen und erstmal bahnhof.

aber nach dem zweiten mal durchlesen hat sich das ganze schon etwas entschleiert.

Ich kann aber nciht das komplette teil mit einem mega8 machen oder? Wenn ja hab ichs immer noch nicht verstanden.

Wie DMX ansich funktioniert hab ich auch schon so ungefähr verstanden aber

woher weis jetzt mal meinetwegen die rote led mit der nummer 1 das jetzt sie schwächer werden soll? des muss ich doch irgendwie mti pwm machen ? und da ich ja nur 2 pwm ports hab muss ich doch mind. 20 mega8 kaufen oder nich?

jo_robot
16.10.2007, 21:17
irgendwie hab ich das gefühl ich hab irgendwas mit PWM noch nicht so ganz verstanden.

Brauch ich jetzt die verschiedene Puls weite um zu dimmen oder um den kanal auszusuchen



naja vielen dank dass du oder ihr meine Noobigen fragen beantwortet

jo_robot
16.10.2007, 21:21
so jez schreib ich noch einen dritten beitrag:

Aber eigentlich wollte ich ja gar keine dmx steuerung, zumindest nciht mit dem PC weil ich in meinem Zimmer ja gar keinen PC habe...

Ich wollte eigl nur so vll 10 versch. effekte in einen Controller Programmieren der die dann autonom oder auf tastendruck ablaufen lässt

MarsoTexx
17.10.2007, 16:11
Hallo allen zusammen.


Er schreibt bestimmt besser in Deutsch als unser einer in Niederländisch.
Haha, vielen dank.

Ok, jetz zum Theme! Jo-Robot: mach dein Project so einfach wie mochlich! Du musst unbedingt jeden Module (nenne mall 2servo's und 1 Led) verbinden mit der Centrale (Microcontroller usw.) Wen du die Modulen mit I2C oder was sonst ansteuren mochtest, heisst es das jeden Module ein Inteligentes System sein soll. Muss ja die angeboteten dateien umsetzen zu dem Servo's un Led. (wie wkrug auch anlich schreibt). Anderseids: ein kabel muss unbedingt zu jeden Module gehn, werde doch egal ob 4 oder z.B. 12 Leiter in einem kabel sind? Brauchst du auch keinen inteligentes Kommunicatios-system anzu wenden. (Plus, minus,) 2-er Servo und 3-er RGB macht 5! Sind 20 signalenzusammen, ist ja ziemlich viel. Wen alle Led's den gleichen weg sind dan brauchst du for den Leds nu 3 Leiter ingesamt...

jede led hat rot gelb blau die ich vermutlich mit PWM dimmen und die farbe mischen werde nur bräuchte ich da ziemlich viele Controller oder könnte man dies auch mit einem Servo Control machen
Reicht ja nicht weil den Servocontroller liefert nur Pulsen von 1 bis 2 ms jeden 20ms (zo man bekomt nur ein maximales 'Einzeit' von etwa 10% !

Oh moment mall, wenn du einfach ein 82C55 (etwa 4 euro) addatiert zum 'Centrale' hast du gleich 24 In/Ausgangen. Last sich einfach programieren und muss kein Probleem sein Servo-signalen herzu stellen und RGB-anzu steuren. Habe selbst Servo's laufen an Parralleschnittstelle
mit und ohne 82C55!

Uberliech dich mall. Marcel

wkrug
17.10.2007, 18:16
irgendwie hab ich das gefühl ich hab irgendwas mit PWM noch nicht so ganz verstanden.

Brauch ich jetzt die verschiedene Puls weite um zu dimmen oder um den kanal auszusuchen

Ich rede hier von 3 Programmteilen in einem Controller pro Moving Head.

1. Der PWM Erzeugung zur Dimmung deiner 3 LED, also 3 PWM's.
2. Dem PulsPhasenmodulator für deine 2 Servos.
3. Dem Empfänger für deine DMX Daten.
Und natürlich einer Hauptroutine die die empfangenen DMX Daten kanalbezogen in die richtigen Speicherstellen schreibt, damit die anderen Programmteile damit arbeiten können.

Nochmal detailierter:
Also die PWM brauchst Du um die Helligkeit deiner LED's zu dimmen.
Da der ATMEGA8 nur 2 PWM Kanäle hat - wie Du bereits festgestellt hast - kann man eine PWM Ansteuerung auch mit Software machen.
Wenn man sowas geschickt programmiert sind auch 8 oder noch mehr Kanäle möglich. Allerdings braucht natürlich ein Software PWM Rechenzeit vom Controller, die dann nicht für andere Anwendungen zur Verfügung steht.
Eine Möglichkeit wie man so was Proggen kann, hab ich Dir in dem langen vorherigen Post beschrieben. Es gibt auch noch wesentlich effektivere Methoden, aber ich finde diese ist am einfachsten zu verstehen.

Nun müssen ja auch noch deine Servos angesteuert werden. Dazu würd ich die beiden Comparematch Register mit den dazugehörigen Interrupts des Timer 1 benutzen.
Bei einem 0 Durchgang von TCNT1 werden die für die Servoimpulsanschlüsse benötigten Ports auf 1 geschaltet.
nach 1....2ms muss dann ein Comparematch Interrupt A bzw B kommen, der dann den Ausgang für Servo A bzw B wieder nach 0 schaltet.
Somit bekommst Du programmierbare Servoimpulslängen, die nur von den Werten des Comparematch Registers A bzw. B abhängen.
Du musst nur darauf achten, das die Comparematchwerte im 0 Durchgang (Timer1Overflow) aktualisiert werden, da es sonst zu Überholeffekten kommen kann. Die Laufzeit des kompletten Timers also das durchzähler aller Zählerstände von 0....65535 sollte 18 bis 25 ms betragen.
Das gesagte gilt für normale Modellbauservos.

Nun brauchst Du ja noch etwas, das deine DMX Daten empfängt. Dazu bietet sich der USART und ein entsprechendes Schnittstellen IC an.
Softwaresourcen dafür kann man nach ein bischen suchen im Internet auch finden.

Mein Vorschlag wäre also ein ATMEGA8 pro Moving Head. Also insgesamt 4.

Eine Lösung mit DMX 512 ist natürlich auch nur eine Möglichkeit.
Der Vorteil wäre halt, das Du deine Lichtanlage auch mit käuflichen Komponenten erweitern könntest.

Wenn Du eine andere Datenübertragungsart verwenden möchtest, kannst Du die PWM und den Servoimpulsgenerator trotzdem so proggen wie ich es beschrieben hab.

Im Stand allone Betrieb wirst Du natürlich schon ein paar Problemchen kriegen. Eventuell besorgst Du Dir aber das größere DMX Interface von DMX4All, da das auch Sequenzen vom PC aufzeichnen und ohne PC wiedergeben kann.
Du kannst Dir natürlich auch einen kleinen DMX Sender selber bauen, der dann verschiedene Sequenzen selbstständig abspielen kann.
Mir wäre allerdings der Entwicklungsaufwand für einen DMX Sender mit Speichermöglichkeit zu hoch.

Eine weitere Möglichkeit wäre noch die RFM Funk Module von Pollin für die Datenübertragung einzusetzen. Allerdings ist die Ansteuerung dieser Module nicht gerade lapidar, aber dafür sind sie günstig ( um die 5,-€ ).
Mit denen ließe sich eine normale asynchrone Datenübertragung realisieren.

In uralter Zeit (10..15Jahre) wurden Lampen auch mittels einer Steuerspannung von 0..10V gedimmt. Auch das wäre eine Möglichkeit deine Steuersignale für LED und Servos zu Übertragen. Blos 6 Drähte (5 + Masse) pro Moving Head sind aber auch eine ganze Menge.

Von RS232, SPI und I²C zur Datenübertragung würde ich in diesem Fall nicht so viel halten, da hier schnell mal 15..20m Kabelstrecke zusammenkommen und da dürften diese Bus Systeme Probleme kriegen.

Ich hoffe dieser Post konnte zur Klärung einiger Fragen und nicht noch zur weiteren Verwirrung beitragen.

jo_robot
17.10.2007, 18:46
ja du hast schon recht^^ Jetzt hab ichs auch verstanden... thx!!

DMX wär schon besser. aber ich brauch dazu einen PC... und ich hab keinen PC in meinem Zimmer. Und so ein teuren DMX kontroller kaufen möcht ich nicht...


Ich lass mir das ganze nochmal durch den kopf gehen...

aber vielen dank für eure tipps!!

sigo
19.10.2007, 10:56
Hi,

wenn du einen ATtiny2313 nimmst, hast du 4 PWM-Kanäle zur Verfügung.
Damit kannst du die Farben mischen und somit auch die Helligkeit.

Wenn du nun einfach 4 weitere Ports nimmst, kannst du die LEDs multiplexen, also umschalten. Eigentlich leuchtet dann immer nur 1 LED.
Aber da es sehr schnell umgeschaltet wird, sieht man es nicht.
Nebeneffekt: Da jede LED dann nur 1/4 der Zeit an ist, kannst du den 4-fachen Strom durch die LED schicken. Das wird dann als heller wahrgenommen, als bei Dauerstrom.

Das Programm wäre dann etwa wie folgt:

PWMs für LED 1 einstellen
LED1 einschalten
PWMs für LED2 einstellen
LED2 einschalten
usw.

Wenn du z.B. alle 2,5ms die LED wechselst, wäre das ein Zyklus von 10ms bei 4 LEDs oder 100Hz. Die sind flimmerfrei.
Auch etwas langsamer geht noch.

Die PWM-Frequenz dann auf ca. 20-30kHz einstellen..

Zum Schalten der LEDs kannst du P-und N-Kanal-Mosfets nehmen.
Einfache kleine NPN und PNP - 1A - Transistoren, wie BC337 und BC327 sollten aber auch gehn.

Sigo.

sigo
19.10.2007, 11:03
Ergänzung:

Das alles kann interruptgetrieben im Hintergrund laufen.

Steuerung der Servos per Servo-Controller IC. Also Kommunikation mit diesem.
Und zuletzt Kommunikation mit dem Host.

Sigo

jo_robot
19.10.2007, 21:02
ich könnte aber auch mit nem Mega8 software mäßig die pwm signale erzeugen...

sigo
19.10.2007, 22:14
ich könnte aber auch mit nem Mega8 software mäßig die pwm signale erzeugen...

Ja, klar.

wkrug
19.10.2007, 23:27
Steuerung der Servos per Servo-Controller IC
Ich denk mal das schafft der ATMEGA8 auch ohne zusätzliche Chips.

MarsoTexx
01.11.2007, 15:37
He hallo,

bin mir nicht ganz sicher was du mit die Leds' machst. Scheinen die direct oder kommen Linzen in betrieb? Habe fur'ne eigenes Poject
was mit Led's und sachen 'rum gebasteld. Habe Weisfarbige Led's 5mm, 10.000 mcd mit 20' Winkel. Muchte mein Windmull im Garten gern gut beleuchtet haben Abend's. Habe ein Luype angewendet (Brenwert 15cm)
und konnte so ein Spot mit beliebigen Grosse auf dem Windmull richten.

Aber mit den Lupe in richtige Position, bekommt man ein sehr scharven
Leuch-Bundel, in meinen Fall so 7 cm Breit. Den Bundel seht man fast ohne zusatsliche Rauch shon gut im Dunkel. Mit ein bischen Rauch war es Fabelhaft. Vieleicht was fur dich, vorallen mit mehrere Farben muss das Toll aus sehn denk eich mall. Werde bald mall ein kleines Topic machen. Nichte vergessen, mein Windmull auf:
http://marsotexx.eu/photo-gallery/American-windmill

Den Geschichte mit dem Lupe ist nur zum experimenteren. Es gibt speciale Linzen or/und Spieglen um ein guten Strahl usw. her zu stellen.
Ich denke zo an ein Linze von etwa 2bis3 cm mit Brenwert un etwa gleiche Grosse

Gruss. Der Marcel.

jo_robot
01.11.2007, 16:19
ich hatte nicht vor was mit linsen zu machen!
das wird zu teuer und zu viel mechanischer aufwand.


Aber ich hab jetzt endlich mal die teile für ein movi bestellt