Forum: Mikrocontroller und Digitale Elektronik Mehrere Vibrationsmotoren ansteuern


von Fabian D. (hogosha)


Lesenswert?

Hallo zusammen!

Für mein aktuellen Projekt möchte ich 5 Vibrationsmotoren ansteuern und 
auch deren Intensität verändern können.

Das ganze soll aus der Spiele-Engine Unity3d heraus funktionieren, für 
die es ein Arduino plugin gibt.
Verschiedene Interaktionen im Spiel sollen dann die 5 Vibrationsmotoren 
unterschiedlich stark vibrieren lassen.

Ich habe einen arduino UNO und die Motoren hier und schonmal eine kleine 
Schaltung aufgebaut, mit der ich einen Motor per NPN Transistor und PWM 
steuern kann.

Als ich jedoch probiert habe Werte am Computer über den Seriellen 
Monitor einzugeben ist mir aufgefallen, dass da eine Verzögerung von 
knapp 2 Sekunden ist bis der Wert übernommen wird.

In meiner Vorstellung soll dort später aber eine witzig kleine Latenz 
sein.

Ist das mit einem Arduino überhaupt möglich? Ich habe schonmal gelesen, 
dass man einen arduino mit Assembler programmieren müsste, um schnellen 
Code auszuführen?

Ich würde mich über Hilfe freuen!

Schöne Grüße,

Fabian

von Peter II (Gast)


Lesenswert?

Fabian D. schrieb:
> Ist das mit einem Arduino überhaupt möglich?

ja, sollte kein Problem sein.

Dafür musst du aber erst mal rausfinden, wo genau die Verzögerung 
auftritt.

2Sekunden sind auch für einen Arduino eine Ewigkeit.

von chris (Gast)


Lesenswert?

Fabian D. schrieb:
> Als ich jedoch probiert habe Werte am Computer über den Seriellen
> Monitor einzugeben ist mir aufgefallen, dass da eine Verzögerung von
> knapp 2 Sekunden ist bis der Wert übernommen wird.


Lass mich raten: Du benutzt irgendwo in deinem Programm "delay"?
In fast allen Fällen liegt hier das Problem.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Fabian D. schrieb:
> Als ich jedoch probiert habe Werte am Computer über den Seriellen
> Monitor einzugeben ist mir aufgefallen, dass da eine Verzögerung von
> knapp 2 Sekunden ist bis der Wert übernommen wird.
Wo?

> In meiner Vorstellung soll dort später aber eine witzig kleine Latenz
> sein.
Lustig, deine Vorstellung...
(Lies in Zukunft die Sätze einfach nochmal durch und kontrolliere sie 
auf Sinn und Fehler)

> soll dort später aber eine witzig kleine Latenz sein.
Dann ermittle doch einfach, wo in der Signalkette diese Verzögerung 
passiert. Denn es ist eigenlich nut bei Quadcore-Boliden mit 3GHz 
üblich, dass auf einen Tastendruck oft erst mit wahrnehmbarer 
Verzögerung reagiert wird.
Miss auf der Seriellen Schnittstelle, wann die Daten übertragen werden 
und wie lange es dauert, bis der Motor angeschaltet wird. Evtl. ist 
nämlich nicht der uC für die Verzögerung verantwortlich, sondern der 
stromfressende Rechenbolide...

von Fabian D. (hogosha)


Lesenswert?

Vielen Dank erst einmal für die schnellen Antworten!
Ich gehe auf Fehlerjagd und Berichte dann.

von Fabian D. (hogosha)


Lesenswert?

Ich fürchte ich muss erstmal in neue Hardware investieren...

Ich hatte meinen Arduino damals bei einem Händler aus Deutschland 
bestellt und einige Zeit später festgestellt, dass es eine gefälschte 
Kopie ist..
Hat immer schon Probleme mit der Verbindung per USB gemacht und wird nun 
garnicht mehr erkannt.
Vielleicht ist das ja sogar auch Schuld an der "witzig kleinen" Latenz 
;)

Wenn ich mir jetzt sowieso etwas neues kaufe: Macht es Sinn einen 
anderen Microcontroller, oder zumindest einen anderen Arduino als den 
UNO zu kaufen?

von Mark B. (markbrandis)


Lesenswert?

Fabian D. schrieb:
> Wenn ich mir jetzt sowieso etwas neues kaufe: Macht es Sinn einen
> anderen Microcontroller, oder zumindest einen anderen Arduino als den
> UNO zu kaufen?

Für die Aufgabe "5 Ausgänge mit PWM ansteuern" sollte es allemal dicke 
reichen. Wir reden hier immerhin von einem 16 MHz Mikrocontroller.

Kauf Dir Originalhardware von einem vertrauenswürdigen Distributor. Also 
zum Beispiel einen originalen Arduino Uno (bzw. Genuino Uno). Dann hast 
Du auch keine Scherereien.

von Fabian D. (hogosha)


Lesenswert?

Der neue Arduino Uno ist da und läuft perfekt.
Habe nun herausgefunden, warum mein Programm so langsam war:
Ich habe Serial.parseInt() benutzt, die nach empfangen des letzten 
Zeichens noch länger wartet, ob nicht doch noch eine weitere Zahl kommt 
und hat somit mein Programm so langsam gemacht.

Dafür funktioniert aber alles und auch das Ansteuern aus Unity3D heraus 
um die PWM-Frequenzen zu manipulieren läuft perfekt ohne spürbare 
Latenz.

Vielen Dank an alle die geholfen haben!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.