Mikrocontroller mit Drehgeber und Bluetooth-Funktionen [geschlossen]

Ich suche nach Ratschlägen zu einem Drehgeber (was ich verwenden/wie ich ihn herstellen soll), mit dem ich über Bluetooth eine Verbindung herstellen kann. Ich schreibe eine App, die dem Benutzer auf dem Bildschirm in Echtzeit die Anzahl der Umdrehungen anzeigen muss, während er sie dreht. Außerdem muss der Mikrocontroller die Umdrehungen pro Tag aufzeichnen, damit ich die Umdrehungen verfolgen kann, wenn ihr Computer schläft.

Kriterien:

  1. Muss alleine stehen
  2. Muss Bluetooth-kompatibel mit einem PC, Mac, Android und iPhone sein.
  3. Muss in der Lage sein, bis zu 7 Tage Daten zu speichern (dies wäre eine sehr kleine Datenmenge, nur die Anzahl der Rotationen pro Tag und der Zeitstempel).
  4. Klein und günstig muss es sein.

Ich dachte an einen Mikrocontroller mit nur einem Drehgeber und Bluetooth-Funktionen.

Ich habe Mikrocontroller wie den Arduino gesehen und denke, sie wären gut für den Anfang, aber ich suchte nach etwas, das tatsächlich in einem Endprodukt verwendet werden könnte.

Verwenden Sie ein Bluetooth-Modul wie dieses: sparkfun.com/products/10559 Es erscheint als normaler serieller Anschluss für den PC und als normaler UART für den Mikrocontroller. Dann brauchen Sie nur noch einen Mikrocontroller, der einen Drehgeber (2 digitale Eingänge) dekodieren und über UART (zwei zusätzliche Pins) und ein paar Bytes EEPROM zum Speichern von Umdrehungen kommunizieren kann.
Was ist der Unterschied zwischen einem Arduino und „etwas, das tatsächlich in einem Endprodukt verwendet werden könnte“?
Der Eindruck, den ich bekomme, ist, dass ein Arduino ein Lernwerkzeug ist, nicht etwas, das Sie in einem echten Produkt sehen würden, das Sie kaufen würden, wie ein Fitbit.
Ich sehe, dass der von Ihnen erwähnte WRL-10559 mit Bluetooth v2.0 kompatibel ist. Weißt du, welche Version von Bluetooth es verwendet? Danke
Nein, es ist nur ein zufälliger Treffer in einer zufälligen Suchmaschine. Suchen Sie nach „Bluetooth Module Breakout“ und Sie finden mehrere Module zu unterschiedlichen Preisen.
Es gibt sehr kleine Arduinos und noch kleinere Klone. Auch eine einmal auf Arduino entwickelte Software lässt sich leicht auf einen eigenständigen ATtiny oder ATmega portieren. Der Vorteil besteht eindeutig darin, dass Sie die Hardware/PCB/Löten/... nicht entwerfen müssen, bis Sie ein funktionierendes Produkt haben.

Antworten (4)

Dafür sollte jedes kleine Mikro plus ein günstiges BT-Modul geeignet sein.

Zum Beispiel könnte ein PIC 12 oder 16F mit so etwas wie diesem BT-Modul (ich habe eine oberflächenmontierte Version davon erfolgreich in einem kürzlich erschienenen Prototypen verwendet ) und dem Encoder sehr schnell für Proof-of-Concept-Zwecke zusammengeworfen werden. Auf der PC-Seite wäre Java am besten, damit Sie auf Android, Mac, Linux usw. portieren können.

Spielt es eine Rolle, mit welcher Sprache der Mikrocontroller programmiert ist? Ich wollte das Programm schreiben, das die Daten in C# für Windows, Objective C für Mac und Java für Android liest. Danke
Ich würde mich für eine portable Sprache wie C++ entscheiden. Unsicher über Vor-/Nachteile für Java. Der Vorteil der Verwendung einer portablen Sprache (wie C++) besteht darin, dass Sie nur einen einzigen Quellbaum schreiben (und pflegen) müssen. Alle Plattformen unterstützen C++ (Win, Mac, Linux, AVR, PIC, ...)
Sprechen Sie über die Verwendung von C++ für den Mikrocontroller? Danke
Tut mir leid, wenn das eine dumme Frage ist, aber ich habe noch nie einen Mikrocontroller programmiert. Danke
C ist die Sprache der Wahl für kleine Mikros (oder Assembler) Einige der größeren Mikros haben C++-Compiler zur Verfügung, aber nicht so etwas wie den oben erwähnten PIC12/16/18. @jippie sprach über C++ für Ihre PC-seitigen Sachen.
Um ehrlich zu sein, kenne ich den Unterschied zwischen C und C++ nicht wirklich. Ich weiß, dass C# für Mikrocontroller meistens nicht in Frage kommt , und ich weiß, dass ich einige C++-Sachen für Arduino verwende. Ob Arduino volles C++ beherrscht, weiß ich nicht. Auch Quelldateien für meine ATtinys haben eine .cppErweiterung, und ich bin mir bewusst, dass ich auch für diese einige C++-Spezifika verwende, aber ehrlich gesagt würde ich den formalen Unterschied zwischen den beiden nicht kennen. C++ für PC/Linux/Mac ist meiner Meinung nach definitiv in Ordnung, da es sehr portabel ist (und es macht mir nichts aus, Sachen zu kompilieren).
Die Vorteile von Java sind, dass es sehr leicht zu transportieren ist - es deckt sicherlich 3 der 4 oben genannten Plattformen ab (beim iPhone bin ich mir nicht sicher, da ich nie etwas dafür entwickelt habe). C++ ist auch eine ähnliche Wahl, aber die Android-Plattform basiert auf Java ( Interessanterweise ist das zugrunde liegende native Android-Zeug C++, glaube ich, aber das ist eher für den "Hardcore"-Android-Programmierer)

TI verkauft eine komplette Bluetooth + Mikrocontroller-Lösung (CC256x + MSP430 oder Stellaris). Schauen Sie sich ihre Bewertungsplattformen an . Die EZ430-Lösung ist sehr schön und sollte für Sie funktionieren, da sie kompakt ist und Sie einen Drehgeber anschließen können.

Wenn ich ein Demoprogramm auf dem Arduino schreiben würde, wissen Sie, ob ich es auf den CC256x + MSP430 oder Stellaris portieren könnte? Danke
In gewisser Weise ja. Beide werden mit C programmiert, aber der CC256x+MSP430 hat eine bestimmte Vorgehensweise, um die Daten senden zu können. Arduino-Code ist nicht direkt in MSP430/Stellaris-Code übersetzbar.

wie hoch ist die drehzahl? Für wie viele Rotationen pro Tag entwerfen Sie?

Möglicherweise können Sie nur mit dem Bluetooth-Chip davonkommen und für seinen Mikrocontroller schreiben, um Ihren Encoder zu beobachten. Der (alte) BC4 hat Optionen, wo Sie Ihren Code für einen "virtuellen" Chip schreiben können, der darin läuft. Das würde Sie auf einen einzigen Chip bringen, um alles zu erledigen.

Der traditionelle Weg, dies zu tun, besteht darin, eines der leicht verfügbaren Bluetooth-Module zu verwenden, die sich als serielle Bluetooth-Ports ausgeben, und dann ein kleines Mikro zu verwenden, um mit ihren "echten" seriellen Ports zu kommunizieren. Andere haben bereits mit Beispielmodulen geantwortet. Stellen Sie sicher, dass Sie ein Modul verwenden, mit dem Ihr Mikro gerade sprechen kann, andernfalls müssen Sie möglicherweise ein niedrigeres Protokoll wie H4, BCSP oder ähnliches implementieren, um es zu verwenden. (und wenn Sie diesen Weg gehen, probieren Sie Matthias Ringwalds exzellenten btstack aus; ich habe dies erfolgreich reduziert, um in einen LPC2100 zu passen und mit Mobiltelefonen zu sprechen.

Das Hauptmerkmal, nach dem Sie wahrscheinlich in einem Mikrocontroller suchen sollten, sind Hochgeschwindigkeitseingänge. Ihr Encoder ist völlig nutzlos, wenn Ihr Mikrocontroller nicht mithalten kann und alles wie Rauschen aussieht (vorausgesetzt, Sie verwenden einen Quadratur-Encoder). Aus dem gleichen Grund sollten Sie auch etwas über Rauschfilter-Encoder recherchieren.

Wenn Sie jedoch einen Prototyp erstellen möchten (ohne die Geschwindigkeit der Eingänge überprüft zu haben), gehen Sie zum Arduino, da die meiste Arbeit bereits für Sie erledigt ist, und besorgen Sie sich einfach ein Bluetooth-Schild. Sie können jederzeit versuchen, Ihre eigenen Arduinos herzustellen (sie sind schließlich Open Source) und Sie können den Preis von etwa 3 US-Dollar pro Board erzielen.

Wenn Sie nicht die Arduino-Route gehen, müssen Sie ein Bluetooth-Modul auswählen und prüfen, welche Schnittstellenoptionen verfügbar sind.

[Bearbeiten] Aus den Kommentaren geht hervor, dass ich es gewohnt bin, Encoder mit höherer Auflösung zu verwenden, als viele allgemeine Anwendungen erfordern, daher habe ich möglicherweise die Notwendigkeit von Hochgeschwindigkeitseingängen überbewertet. So oder so, Sie sollten sich zumindest die Frage stellen, welche Auflösung Sie benötigen und ob Ihre Eingänge Impulse verlieren.

Sie würden Schwierigkeiten haben, einen Mikrocontroller zu finden, der nicht schnell genug Eingänge hat. Eine mit mindestens zwei bidirektionalen Flankenunterbrechungen (wobei idealerweise beide Flanken gleichzeitig aktiviert werden können) vereinfacht jedoch die Software, obwohl dies nicht erforderlich ist.
@ChrisStratton Sollte das nicht von der Auflösung des Encoders abhängen? Ich komme von der SPS-Seite der Tracks und wir verwenden normalerweise Encoder mit sehr hoher Auflösung, sodass Sie tatsächlich sicherstellen müssen, dass Sie die vorgesehenen Hochgeschwindigkeitseingänge verwenden, oder Sie verlieren Zählwerte. Es ist auch empfindlich gegenüber der Scanzeit, wenn Sie keine Interrupts oder parallele Verarbeitung verwenden, um Übergänge zwischen Scans zu finden.
Die Eingänge eines Prozessors sind in der Regel viel schneller als die eines verpackten Moduls, insbesondere wenn es über Multiplexing oder generische Filterung verfügt. Oder arbeiten Sie häufig mit Encodern mit MHz-Ausgaberaten?
Sie brauchen nicht wirklich Hochgeschwindigkeitseingänge; alles mit Timer-Ereigniszählern oder Interrupt-on-Change-Pins würde funktionieren (wobei die bessere Lösung die erstere ist). Wenn er unglaublich hohe Rotationsraten zählt, braucht er vielleicht ein besseres Mikro, aber so ziemlich alles sollte in der Lage sein, diesen Teil des Designs zu bewältigen.
Ich bin an MHz-Encoder gewöhnt, hauptsächlich in industriellen Servobewegungsanwendungen. Es ist üblich, Millionen von Impulsen pro Umdrehung zu haben.
Ich brauche es nur, um jede Umdrehung und die Zeit zwischen den Umdrehungen zu zählen. Es wird von Hand gedreht, also sollte Geschwindigkeit kein Problem sein. Danke