Funkaktivierung

Hey,

ich bräuchte mal wieder eure Hilfe.

Meine LED's sollen in einer vorher programmierten Reihenfolge zur Musik leuchten. Das habe ich nun soweit schon mal.

Jetzt bin ich auf der Suche nach einer Aktivierungsmöglichkeit da ich zu der Zeit dann nicht an den Arduino ran komme.
Der Arduino wird über ein Battery-Pack mit Strom versorgt.

Deshalb wäre wahrscheinlich die einfachste Möglichkeit zwischen Battery-Pack und Arduino einen Funkschalter einzubauen der nach Aktivierung angeht und die Sequenz abspielt.
Eine weitere Möglichkeit ist durch Funksteuerung den Resetknopf vom Arduino zu betätigen, da dann ja ebenfalls die Sequenz von neuem startet.

Kennt jemand einen Schalter der dafür verwendet werden kann oder hat jemand eine bessere/einfachere Möglichkeit?

Eine weitere nette Option wäre, (wenn es so etwas denn gibt) dass der Arduino aktiviert wird sobald die Musik startet. (Also vom PC ausgehend damit die Synchronität noch genauer wird)

Danke im Voraus

Bluetooth zwischen Arduino und PC.

sschultewolter:
Bluetooth zwischen Arduino und PC.

Wie würdest du das dann am PC machen, dass das Lied und das Signal gleichzeitig gestartet wird?
Weil normalerweise muss man ja z. B. in ein Feld klicken um das Signal zu aktivieren... dabei kann ich aber nicht gleichzeitig die Musik starten.

Da könnte man eine kleine Anwendung schreiben, die den COM-Port für die BT-Übertragung öffnet und dann zeitgleich ein Startsignal sendet einen MP3-Titel abdudelt. Wieviele Arduinos müssen denn synchron gestartet werden?
Wie gesagt, das kann man so machen, BT würde ich bei mehreren Empfängern aber nicht nutzen. Da gibt es günstigere Funkmodule. Alternativ könnte man auch IR-Empfänger an allen Arduino-Boards anschließen und dann die Sequenz mit einer Fernbedienung starten.

sth77:
Da könnte man eine kleine Anwendung schreiben, die den COM-Port für die BT-Übertragung öffnet und dann zeitgleich ein Startsignal sendet einen MP3-Titel abdudelt. Wieviele Arduinos müssen denn synchron gestartet werden?
Wie gesagt, das kann man so machen, BT würde ich bei mehreren Empfängern aber nicht nutzen. Da gibt es günstigere Funkmodule. Alternativ könnte man auch IR-Empfänger an allen Arduino-Boards anschließen und dann die Sequenz mit einer Fernbedienung starten.

Es ist ein einzelner Arduino (ein Kostüm) das entweder von der Bühne aus per Fernbedienung vom Tänzer selbst oder Backstage vom PC aus gestartet werden soll. (Ich würde allerdings eine Fernbedienung bevorzugen die von der Bühne aus beides starten kann)

Ich weiß ja nicht, welches Budget du zur Verfügung hast... :wink: Mit einem Arduino Leonardo oder einem Arduino Micro kann man ebenso eine Tastatur simulieren. Da viele Musikabspielprogramme auch mittels Tastendruck gestartet werden können, kann man per Handsender (ob IR oder Funk ist erstmal egal) auch Musik starten. Wenn der Empfänger am Kostüm auf das gleiche Signal reagiert, wäre das eine sehr bequeme Lösung.
IR benötigt für mittlere Distanzen schon oft eine Sichverbindung, dann doch eher Funk, oder?

Ach so, als Tastaturersatz kann auch ein Trinket genutzt werden: Wiring | Trinket USB Keyboard | Adafruit Learning System
Den gibt es sehr günstig unter anderem hier: http://www.exp-tech.de/Mainboards/Arduino/Adafruit-Trinket-Mini-Microcontroller-5V-Logic.html

sth77:
Ich weiß ja nicht, welches Budget du zur Verfügung hast... :wink: Mit einem Arduino Leonardo oder einem Arduino Micro kann man ebenso eine Tastatur simulieren. Da viele Musikabspielprogramme auch mittels Tastendruck gestartet werden können, kann man per Handsender (ob IR oder Funk ist erstmal egal) auch Musik starten. Wenn der Empfänger am Kostüm auf das gleiche Signal reagiert, wäre das eine sehr bequeme Lösung.
IR benötigt für mittlere Distanzen schon oft eine Sichverbindung, dann doch eher Funk, oder?

Ach so, als Tastaturersatz kann auch ein Trinket genutzt werden: Wiring | Trinket USB Keyboard | Adafruit Learning System
Den gibt es sehr günstig unter anderem hier: http://www.exp-tech.de/Mainboards/Arduino/Adafruit-Trinket-Mini-Microcontroller-5V-Logic.html

Naja also preislich hatte ich mir ja schon mal die ganzen "guten" Bluetooth-Sachen angeschaut und da die teilweise rund 60-80€ kosten, hätte ich das schon eingeplant bzw. zur Verfügung...
Ja, es sollte Funk sein, da der PC nie auf der Bühne stehen würde sondern bei den Anlagen hinter der Bühne und das können schon mal ein paar Meter sein. Also 30-50 mtr Reichweite sollte das Zeug schon zur Sicherheit haben.
Mir wäre also irgendwas über Bluetooth, Wlan oder sonstigem Funkweg der durch eine Fernbedienung von der Bühne aus betätigt werden kann am liebsten. Diese soll halt dann ein Signal an den Arduino abgeben damit er die Sequenz abspielt und gleichzeitig ein Signal an den PC hinter der Bühne um den Playbutton zu aktivieren.

Hmm hab's mir anders überlegt :smiley:
Eigentlich ist es vollkommen egal wie oder was... Denn wenn die Entfernung nur ein paar Meter reicht, hänge ich einfach vor die Sequenz und vor das Lied jeweils ein Delay von 20 - 30 Sekunden in denen man auf die Bühne laufen kann wodurch das ganze überhaupt keinen Unterschied macht.

Was wäre also die ->einfachste<- Möglichkeit? Also ich mag eigentlich das was am wenigsten Platz braucht und wo man nicht großartig viel rumlöten muss. Ob das ganze dann nun über Handy oder Fernbedienung oder sonstiges aktiviert wird ist mir egal.

Wenig Platz, einfach, Sicht Verbindung? Schau mal nach den Infrrot TSOPs von Vishay. Fände ich am einfachsten. Sobald die 38kHz bekommen schalten die. Da brauchst Du dann nichtmal den Code der Fernbedienung auslesen, sondern nur feststelle, ob irgend eine Taste auf der Fernbedienung gedrückt wird. Oder Du legst gleich einen Taster nach außen, der IR Sensor braucht ja auch Sicht.

ELWire:
Hmm hab's mir anders überlegt :smiley:
Eigentlich ist es vollkommen egal wie oder was... Denn wenn die Entfernung nur ein paar Meter reicht, hänge ich einfach vor die Sequenz und vor das Lied jeweils ein Delay von 20 - 30 Sekunden in denen man auf die Bühne laufen kann wodurch das ganze überhaupt keinen Unterschied macht.

Was wäre also die ->einfachste<- Möglichkeit? Also ich mag eigentlich das was am wenigsten Platz braucht und wo man nicht großartig viel rumlöten muss. Ob das ganze dann nun über Handy oder Fernbedienung oder sonstiges aktiviert wird ist mir egal.

Wurde doch schon gesagt, Leonardo / Pro Micro an den PC. Tastatureingabe für Widergabe schicken und gleichzeitig mit einem BT oder RF Modul ein Signal rausschicken. Ich weiß nicht, wie die Reichweite von den 433MHz RF Modulen ist, die es günstig beim Chinesen gibt, aber alternativ einen entsprechenden ZigBee. Es muss nicht gleich der stärkste Zigbee sein für ~1,8km Entfernungen :wink:

Google spuckt genug zu solchen Themen aus.

Falls die Sequenzen länger sind brauchst Du etwas das die Zeit genau hält. Ein Uno hat einen Resonator statt einem Quarz, der läuft pro Sekunde auch mal locker 5ms weg. D.h. nach 200 Sekunden kann der Fehler schon auf 1s angewachsen sein. Falls die Sequenzen also synchron zur Musik sein sollen wird das so nicht funktionieren.

--> Du brauchst was mit Quarz oder eine RTC oder Du überträgst die Sequenzen direkt vom Computer zum Arduino.

-Udo

Die Rede war von 20 - 30s, da ist der Fehler doch recht überschaubar.

Und wozu können wir programmieren?

Wenn der Arduino seine Zeitbasis per Software bildet, dann können wir diese Zeitbasis auch per Software manipulieren, und wir können damit Taktabweichungen vom exakten 16 MHz Takt korrigieren, so dass der Arduino dann mit irgendeiner anderen Zeitquelle synchron läuft.

Zum Beispiel mit den Zeiten aus einem Musikschneideprogramm auf dem PC.

Anbei ein kleiner Sketch, der eine Funktion "correctMillis()" als Zeitbasis bereitstellt, die gegenüber der normalen "millis()" Funktion ein wenig zeitverschoben läuft.

Über die beiden Definitionen

#define CORRECTIONINTERVALL 2222
#define CORRECTIONTICKS  5

kann man vorgeben, nach wie vielen Millisekunden eine Korrektur von wie vielen Millisekunden addiert (oder bei negativen CORRECTIONTICKS substrahiert) werden soll.

void setup() {
  Serial.begin(9600);
}


#define CORRECTIONINTERVALL 2222
#define CORRECTIONTICKS   5

unsigned long correctMillis(){
  static unsigned long prevMillis;
  static unsigned long timeUncorrected;
  static long timeDiff;
  while( millis() - prevMillis >= 1000)
  {
    prevMillis +=1000;
    timeUncorrected+=1000;
  }
  while(timeUncorrected>=CORRECTIONINTERVALL)
  {
    timeUncorrected-=CORRECTIONINTERVALL;
    timeDiff+=CORRECTIONTICKS;
  }
  return millis()+timeDiff;
}


void loop() {
  unsigned long t1=millis();
  unsigned long t2=correctMillis();
  Serial.print(t1/1000.0,3);
  Serial.print('\t');
  Serial.println(t2/1000.0,3);
}

Die Korrektur ist zwar nicht auf die Millisekunde genau, aber wenn man (z.B. mit einer genaugehenden Stoppuhr zum Vergleich) feststellt, dass der Arduino in zehn Minuten um so und so viele Sekunden falsch tickt, kann man leicht solche Korrekturwerte vorgeben, dass er wieder richtig und mit einer exakten Zeitbasis tickt (solange man die Temperatur nach der Kalibrierung nicht sehr stark ändert).

hi,

jurs, ich befürchte, das mit der temperatur wäre das problem. das ding liegt nahe am körper und der tanzt auch noch...
aber nach dem TO ist's ja nicht so genau...

gruß stefan

Die Rede war von 20 - 30s, da ist der Fehler doch recht überschaubar.

20-30s bis zum Start. Ein Lied hat aber normalerweise irgendwas zwischen 2 und 5 Minuten. Zum Ende hin wird da das Eis schon dünner.

Und wozu können wir programmieren?

Wenn der Arduino seine Zeitbasis per Software bildet, dann können wir diese Zeitbasis auch per Software manipulieren, und wir können damit Taktabweichungen vom exakten 16 MHz Takt korrigieren, so dass der Arduino dann mit irgendeiner anderen Zeitquelle synchron läuft.

Tja, das dachte ich auch mal. Nur funktioniert das so nicht. Du kannst das machen wenn die Temperatur konstant bleibt. D.h. wenn das Teil vorher auf Körpertemperatur gebracht wird und dann eingestellt wird, dann klappt das wohl sehr gut. Wenn das Teil aber vorher auf Raumtemperatur ist und dann während der Vorstellung auf Körpertemperatur kommt kannst Du den Ansatz komplett vergessen.

--> Ich sag nur DS3232 RTC ~2 ppm genau. Sowas in der Bauart würde ich nehmen. Alles andere funktioniert nicht zuverlässig.

Ich kalluliere mal: Wenn er wegen fehlender Temperaturkalibrierung eine Ungenauigkeit von 500 ppm bekommt und der Arduino mit 16 MHz taktet, dann bleibt eine Ungenauigkeit von
500*16 = 8000 Takten pro Sekunde
Mal eine Aufführungsdauer von 5 Minuten = 300 Sekunden ==>
8000 Takte/s * 300s = 2,4 Mio Takte

Zeitfehler = 2,4 Mio Takte / 16 Mio Takte/s = 0,15s

D.h. er wäre dann nach einer Aufführungsdauer von 5 Minuten um 0,15s asynchron.

Das muss er wissen, ob es zuviel ist oder noch reicht.

Etwas verbessern ließe sich der Wert aber noch: Da der Atmega324 einen Thermosensor eingebaut hat, könnte man die Korrekturwerte bei der Zeitkalibrierung von der aktuellen Temperatur abhängig machen.

Jedenfalls muß er wohl so oder so kalibrieren, selbst wenn er den Arduino 100% synchron laufend mit dem amtlichen Zeitzeichen bekommt: Denn der PC hat ja auch einen Takt, der etwas vom Soll-Takt abweicht. Und daher spielt ein PC dasselbe Musikstück mit demselben Abspielprogramm auch nach 5 Minuten um den Bruchteil einer Sekunde zu schnell oder zu langsam ab und weicht um Sekundenbruchteile von den Soll-Zeiten ab, die das Musik-Schnittprogramm anzeigt.

Es muß ja nicht die Arduino-Zeitbasis auf die aktuelle amtliche Zeitbasis kalibriert werden, sondern die Arduino-Zeitbasis muß auf die PC-Zeitbasis kalibriert werden, damit PC-Musikabspielzeit und Arduino-Lichteffektabspielzeit synchron laufen bis zum Ende der Performance.

Danke schon mal für die ganzen Antworten x)

Also bis jetzt habe ich das ganze halt soweit programmiert, dass wenn ich gleichzeitig den Resetknopf vom Arduino und den Playknopf vom Mediaplayer drücke, beides synchron abläuft.

Der Arduino würde nicht direkt am Körper platziert werden, sondern wird in einer Umhängetasche (wie man sie von Urlaubern kennt) um die Hüfte geschnallt. In wie weit die Wärme aber dann z. B. von den bis dahin eingeschalteten Scheinwerfern (bei der Vorführung dann ausgeschaltet) mitwirken weiß ich leider auch nicht.

Bis jetzt hätte ich mich eigentlich dazu entschieden auf den Arduino Uno R3

ein XBee Shield WRL-10854
http://www.exp-tech.de/Shields/XBee-Shield-WRL-10854.html

mit einem XBee Modul
http://www.exp-tech.de/Shields/XBee-Module-Series-1-1mW-with-Wire-Antenna-XB24-AWI-001.html

zu hängen.

Für den PC hätte ich dann ein XBee Explorer USB WRL-08687
http://www.exp-tech.de/Shields/Sparkfun-XBee-Explorer-USB.html

mit einem weiteren XBee Modul verwendet.

Anschließend würde ich dann einen Macro-Recorder nehmen, der sowohl das Signal zum Arduino weitergibt und gleichzeitig den Playbutton im Windows Mediaplayer drückt.
(Ist das sicher genug oder würdet ihr es mit einem Arduino Leonardo + Shield + Modul machen?)

Was würde ich nun noch alles brauchen damit es wirklich synchron abläuft??

Danke euch :slight_smile:

@Jurs:: heutzutage hat fast jeder PC Netzwerkzugang. Wenn's also drauf ankommt --> NTP. Und falls kein Netz da sein sollte NTPD + Funkuhr, geht auch mit Arduino Meinberg Emulator | Blinkenlight / NTPD Configuration | Blinkenlight

Die Kalibrierungstheorie wird bei Resonatoren nicht funktionieren. Einen Resonator auf 500 ppm genau zu bekommen ist mehr als sportlich und funktioniert nicht. Das ist genauso wie der sinnlose Versuch auf 10% Widerständen die 10% zu suchen die auf 1% genau sind. Das Problem ist immer das gleiche: ungenaue Bauteile halten die Genauigkeit nicht, auch dann nicht wenn man sie ausmisst.

Der eingebaute Temperatursensor des Arduino ist auch nicht hilfreich. Der misst die Die Temperatur. Was benötigt würde wäre aber die Oszilatortemperatur.

Wenn aber eh schon XBees da sind: warum steuert der Rechner nicht einfach alles direkt darüber? Das scheint mir die erfolgversprechendste Methode zu sein. Oder gibt es auf der Bühne zuviele Störungen?

ELWire:
Bis jetzt hätte ich mich eigentlich dazu entschieden auf den Arduino Uno R3
Arduino Uno R3 | EXP Tech

Vorsicht, der UNO R3 hat für seine Takterzeugung nur die relativ ungenauen Resonatoren, die in der Frequenz nicht ganz stabil laufen und je nach Temperatur relativ stark in der Taktrate driften. Worüber Udo und ich gerade diskutieren, was das für Auswirkungen hat, wie stark Ton und Lichteffekte zum Ende der Performance hin asynchron laufen werden, je nach Tagesform und Temperatur des Controllers.

Ich war der Meinung, das ließe sich per Software leicht kalibrieren.
Udo meint, nein das bringt nichts für die Genauigkeit der Taktfrequenz.

Als alternatives Board mit demselben Atmega328 Controller, aber besserer Frequenzkonstanz, gäbe es noch das DUEMILANOVE Board. Das ist zwar von der Konstruktion her so alt, dass es als Arduino-Original nicht mehr lieferbar ist. Aber die Chinesen bauen und vertreiben es immer noch. Suche bei eBay mal nach "SainSmart Duemilanove Board", da finde ich einen Versender in den Niederlanden.

[quote author=Udo Klein link=topic=247987.msg1773791#msg1773791 date=1403290911]
Die Kalibrierungstheorie wird bei Resonatoren nicht funktionieren. Einen Resonator auf 500 ppm genau zu bekommen ist mehr als sportlich und funktioniert nicht. Das ist genauso wie der sinnlose Versuch auf 10% Widerständen die 10% zu suchen die auf 1% genau sind. Das Problem ist immer das gleiche: ungenaue Bauteile halten die Genauigkeit nicht, auch dann nicht wenn man sie ausmisst.[/quote]

OK, dann soll er sich halt das DUEMILANOVE Board mit Schwingquarz holen.
Das sollte dann viel genauer als mit 500 ppm Abweichung laufen, auch wenn die Temperatur +/-10 Grad schwankt.

Es gibt auch Versionen (nicht unbedingt direkte Klone) die Quarze verwenden.

z.B. der Freaduino:
http://www.komputer.de/zen/index.php?main_page=product_info&cPath=21&products_id=190

Der Seeduino:
http://www.exp-tech.de/Mainboards/Seeeduino-V3-Atmega-328P.html

Oder der Olimexino:
http://www.exp-tech.de/Mainboards/Olimexino-328-Arduino-Like-Development-Board.html