Schnelle Sensorablesungen

Ich entwickle einen Datenlogger für den Einsatz in weiterführenden Schulen wie ( http://www.pasco.com ). Der Hauptunterschied besteht darin, dass meins hauptsächlich mit einem iPad verwendet werden soll. Ich habe eine Verbindung zwischen einem Mikrocontroller und einem iPad in Betrieb, aber ich habe eine Frage zur Kommunikation zwischen Sensoren und dem „Hub“, der es ermöglicht, bis zu 3 Sensoren mit dem iPad zu verbinden.

Auf Prototypenebene besteht mein Hub aus einem Atmega328 (Arduino) und die Sensoren sind einfach direkt mit den A/D-Wandler-Pins verbunden.

Da dieses System jedoch eine Vielzahl von Sensoren unterstützen soll, ist diese Lösung nicht generisch genug (dh wenn ein Abstandssensor angeschlossen werden sollte, würde dies auf dem Anlog-Pin nicht funktionieren, da dies die Differenz zwischen 2 Zeitstempeln wäre). Ich denke also daran, in jedem Sensor einen Mikrocontroller hinzuzufügen und diesen Mikrocontroller mit dem Mikrocontroller des Hubs kommunizieren zu lassen, der dann die Daten an das iPad überträgt.

Welche Protokolle sollten verwendet werden, um zwischen diesen Mikrocontrollern zu kommunizieren? Und ist überhaupt der Weg zu gehen?

  1. Die Länge des Kabels beträgt maximal 2 m.
  2. Die maximale Anzahl von Drähten beträgt 4 und sollte +5 und GND zum Sensor enthalten.
  3. Die Messwerte sollten in manchen Fällen schnelle 20Hz oder besser noch mehr sein.
  4. Es sollte möglich sein, eine Art Identifikation an den Hub mitzusenden, damit der Hub weiß, welche Art von Sensoren angeschlossen sind.

Hier können Sie sich ein Video des Prototyps ansehen .

Antworten (2)

Für mehrere Sensoren, eine Auswahl an analogen und digitalen, wäre eine einfache Lösung die Verwendung eines Arduino Mega mit einem daran befestigten „ Mega Sensor Shield “ ( unten auf der Seite ) ($ 11-12). DfRobot bietet ein Mega Sensor Shield mit XBee-Anschluss an Bord ($18-20) an, das noch nützlicher sein könnte:

Mega Sensor Shield mit xBee-Anschluss

Diese Kombination ermöglicht den Anschluss verschiedener Sensoren, da jeder der 54 digitalen und 16 analogen IOs des Arduino Mega auf separate 3-Pin-Stiftleisten, bestehend aus Signal, Masse und Vcc (5 Volt), herausgeführt werden. Somit würden Sensoren, die Strom benötigen, diesen auch vom Sensor Shield erhalten.

Da die Arduino-Boards selbst je nach Board-Spezifikation nicht mehr als 200 bis 500 mA pro Board liefern können, verfügt das Sensor Shield auch über einen Anschluss, um Strom von einer Steckdose aufzunehmen. Der Arduino wird dann vom Schild abgeschaltet, ebenso wie alle Sensoren.

Der Grund für die Empfehlung des XBee-Anschlusses ist, dass die Einbindung von Ferndatenprotokollierung über ein Bluetooth- oder WiFi-XBee-Modul einfach wird. Dies ist besonders wertvoll in einer Umgebung, in der lange Kabel vom Standort des Sensors/Loggers zu einem Computer zur Datenvisualisierung oder Langzeitspeicherung das Risiko einer Beschädigung bergen.

Sensorabschirmungen sind auch mit integriertem SD-Kartenmodul oder dafür vorgesehenen Anschlüssen erhältlich. Dies kann wiederum nützlich sein, wenn der Datenlogger große Datenmengen lokal speichern muss.

20 Hz ist nicht besonders schnell - 20 kHz sollten unter normalen Bedingungen erreichbar sein.

Offensichtliche Optionen sind:

  • Generische Serie
  • I2C
  • Dallas 1-Wire (eigentlich ein Draht + Masse)
  • USB

Die ersten beiden sind auf den meisten Mikrocontrollern verfügbar. I2C wurde nicht wirklich zum Herunterfahren von Drähten entwickelt, funktioniert aber trotzdem recht gut. Sie können mehrere Geräte mit verschiedenen Techniken auf einer Linie platzieren. Einige Sensoren (z. B. Temperatur) sind mit eingebauter I2C-Schnittstelle erhältlich. Sie ist für die Abfrage durch das Master-Gerät ausgelegt, das auch die Taktrate für die Übertragung wählt.

Serial UART ist am einfachsten zu verwenden und zu debuggen.

1-Wire ist proprietär und schwieriger selbst zu implementieren, macht die Verkabelung aber trivial. Es ist langsamer als I2C.

USB verfügt über die gesamte automatische Erkennung und einfache Anbindung an einen PC, erfordert jedoch spezielle Hardware auf dem Mikrocontroller und ist im Allgemeinen viel anspruchsvoller. Es ist auch mit Abstand das schnellste.

Danke. Wie schnell wäre es möglich, die Daten von 3 Sensoren über I2C zu erhalten?
Ich würde erwarten, dass eine Busgeschwindigkeit von 100 kHz gut funktioniert. Wie viele Messwerte das bedeutet, hängt vom Protokoll ab, aber es werden viele Tausend pro Sekunde sein.
Ich habe versucht, es mit einem I2C-Netzwerk mit zwei Arduinos einzurichten, die gut funktionieren. Aber da es eine Vielzahl von Sensoren gibt, wie könnte ich Daten von den 3 Ports am Hub anfordern? Sie müssten eine ID haben, von der ich Daten anfordern kann, und diese müssten eindeutig sein. Ich sehe nicht, wie es möglich wäre, I2C wirklich zu verwenden.
Wenn jede Verbindung vom Hub Punkt-zu-Punkt wäre, könnten alle Slave-Geräte dieselbe I2C-ID haben. (D. h. drei separate Busse, von denen jeder nur zwei Geräte hat. Das Master-Gerät müsste seine Busimplementierung in Software für einige der Ports durchführen.)