Ich habe den GY-521-Sensor auf Arduino ausprobiert, indem ich die Anleitung von ( http://playground.arduino.cc/Main/MPU-6050 ) verwendet habe. Es hat gut funktioniert. Kann mir bitte jemand erklären, wie ich ein weiteres GY-521-Modul hinzufügen kann? Ich plane, insgesamt vier davon mit meinem Arduino Uno zu verbinden. Wie definiere ich die zusätzlichen Sensormodule im Programm?
Der Sensor-Breakout GY-521 ist ein I2C-Slave-Gerät. Solange Sie die zusätzlichen Sensoren als I2C-Slaves mit unterschiedlichen Slave-Adressen erhalten (oder konfigurieren) können, werden sie auf die gleiche Weise wie der erste gesteuert, außer dass für jeden der Sensoren eine separate Kommunikationsinitiierung erfolgt und dann die Daten gelesen werden von jedem Sensor über seine I2C-Adresse zurück.
Leider unterstützt der MPU-6050 , der Motion Processing Unit IC im GY-521, nur zwei I2C-Slave-Adressen, so dass Sie bestenfalls Breakout-Boards finden (oder modifizieren) können, um diese beiden Adressen zu unterstützen (durch die Logikpegel an Pin AD0 / Pin 9 des IC angelegt). Wenn Sie tatsächlich mehr als 2 Geräte gleichzeitig benötigen, schauen Sie sich andere ähnliche Geräte und die entsprechenden Breakout-Boards an.
Bei der physischen Verkabelung werden alle Module parallel an denselben Pins angeschlossen, die Sie bereits zur Steuerung des ersten Moduls verwendet haben, auch als I2C- Bus bekannt . Dies würde nur funktionieren, wenn nur eines der Module seine Pull-up-Widerstände aktiviert hat. Auf dem Schaltplan des Moduls sind diese Pull-up-Widerstände mit R4 und R5 mit jeweils 4,7 Kiloohm gekennzeichnet.
Auf der GY-521-Platine, die in dem in der Frage angegebenen Link gezeigt wird, scheinen die Pull-up-Widerstände jeweils 2,2 k zu betragen, wie unten zu sehen ist:
Die tatsächliche Platine, die Sie haben, müsste untersucht werden, um zu überprüfen, welche spezifischen kleinen SMD-Teile die Pull-up-Widerstände darauf sind: Nicht allzu schwierig, da sie mit den SDA- und SCL-Header-Pin-Pads verbunden sind.
Auf allen außer einer der Sensorplatinen müssten Sie diese beiden Widerstände vorsichtig entlöten, ohne mit anderen Teilen oder anderen Lötstellen auf der Platine herumzuspielen. Wenn Sie nicht daran gewöhnt sind, mit SMD-Bauteilen zu arbeiten, ist es möglicherweise besser, zuerst mit einigen Schrottplatinen zu üben, die von zum Tode verurteilten Druckern oder anderer Hardware geborgen wurden.
Es ist ein bisschen viel, jemanden zu bitten, den Code für Sie zu schreiben, aber es gibt mehrere Arduino-Tutorials zur Kommunikation mit mehreren I2C-Geräten, die sich einen Bus teilen. Suchen Sie auf derselben Website, auf der Sie den Leitfaden für dieses Modul gefunden haben.
Da Sie vier dieser i2c-Module benötigen, die nur zwei Adressen unterstützen (basierend auf dem AD0-Pin), haben Sie vier Möglichkeiten.
Die erste besteht darin, mehrere i2c-Busse auf Ihrem Arduino zu verwenden. Es gibt verschiedene Software-i2c-Implementierungen für Arduinos. Dies sind Software- (oder Bitbang-) i2c-Code. Sie erhöhen den Overhead, sollten aber für die meisten Projekte in Ordnung sein. Diese nehmen weitere zwei Stifte ein.
Die zweite verwendet einen i2c-Switch/Multiplexer/Bus/Puffer-Chip. Diese Chips schalten entweder physisch zwischen zwei (oder mehr) Bussen um oder verwenden Puffer oder andere Methoden, um mehreren Bussen auf einer Seite zu ermöglichen, auf einem einzigen Bus auf der anderen Seite zu kommunizieren. Einige verwenden einen zusätzlichen Eingang zum Umschalten, andere sind selbst i2c-Geräte (Sie senden eine i2c-Nachricht, um das Umschalten durchzuführen).
Der dritte und der vierte sind etwas anders und erfordern ein paar freie Pins und hängen vom verwendeten i2c-Chip ab. Nicht alle i2c-Chips verhalten sich gleich. Die dritte hängt von der Geschwindigkeit ab, die zum Neustart nach einem Stromausfall erforderlich ist, oder davon, ob die Kalibrierung eine Weile dauert. Dies würde das Abschalten der Stromversorgung zu einem der Module bedeuten. Jeder kleine Signaltransistor oder Mosfet würde dafür funktionieren. Da der mpu-6050 ein empfohlenes Einschaltverfahren hat (VDD dann VLogic), ist dies möglicherweise nicht das beste.
Die letzte Option, die ad0-Pins auf den vier Modulen können mit vier freien gpio auf dem Arduino verbunden werden, und dann können Sie die ad0 so umschalten, dass jeweils nur eines der i2c-Geräte die eindeutige Adresse hat. Drei hätten die gleiche 0x68-Adresse (AD0 Low), der vierte hätte 0x69 (AD0 High), den Sensor lesen, dann umschalten, so dass der dritte die 0x69-Adresse hat, lesen, Spülschaum wiederholen. Dadurch wird Ihrem Projekt nur ein wenig Code hinzugefügt, ohne dass zusätzliche Teile erforderlich sind. Dies funktioniert möglicherweise nicht, wenn Sie es zu schnell tun oder wenn das IC es nicht mag, dass der AD0-Pin nach dem Einschalten umgeschaltet wird, aber es ist der billigste und einfachste Weg.
Ich glaube nicht, dass Sie 4 identische I2C-Geräte hinzufügen können, da ihre Busgeräte-IDs gleich sein werden. Warum brauchen Sie 4 Beschleunigungsmesser - einer gibt Ihnen alle Bewegungsachsen?
Robert
Anindo Ghosh
Robert
Anindo Ghosh
Robert
Robert
Robert
Rob Starling
Anindo Ghosh