Hilfe beim MPU6050 Gyro-Sensor als Schalter für Lampe

Hey Leute!
Ich bin Produktdesign-Student in Weimar und beschäftige mich gerade mit einem Gestaltungskonzept einer Lampe.
Diese Lampe soll mittels des MPU6050 geschaltet werden. Die Nutzung der Lampe geschtaltet sich wie folgt: Wenn man die Lampe nutzt kann man sie in verschiedene Richtungen neigen, um verschiedene Farben zu aktivieren. Beispielweise Links->Blau, Rechts->Gelb, etc.
Die Programmierung dafür habe schon hinbekommen.
Ich komme also zum Problem. Und zwar soll die Lampe, wenn man sie um 180 Grad auf den Kopf dreht sich ausschalten, bzw am liebsten in einen gedimmten Modus, schalten. Sie wird auf dem Kopf an ein Magnetkabel gehängt und so geladen. Dabei soll die Lampe nur ganz schwach gedimmt Leuchten.
Das zu programmieren gelingt mir nicht. Ich würde eigentlich gerne mittels einer If: Bedingung die anderen Leuchtbefehle ausschalten, solange die Lampe auf dem Kopf ist und sobald die Lampe wieder richtig herum ist in den normalen Kipp-Betrieb umschalten. Ich würde gerne ein Schaltbild von meinem ADAFruit GEMMA M0 angefügen, darf aber keine Datei hochladen ( ich bin neu hier)
Hier einmal mein Code:

#include<Wire.h>
int16_t GyX, GyY, GyZ;
#include <Adafruit_NeoPixel.h>
Adafruit_NeoPixel RING = Adafruit_NeoPixel(12, 1, NEO_GRB + NEO_KHZ800); // 12: Anzahl LEDs, 1: DataPinNr

void setup() {
Wire.begin();
Wire.beginTransmission(0x68);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
Serial.begin(9600);

RING.begin();
RING.show();
}

void loop() {
Wire.beginTransmission(0x68);
Wire.write(0x3B);
Wire.endTransmission(false);
Wire.requestFrom(0x68, 14, true);

GyY = Wire.read() << 8 | Wire.read();

GyX = Wire.read() << 8 | Wire.read();

GyY = GyY / 100;
GyX = GyX / 100;

Serial.print(" Y "); Serial.print(GyY);
Serial.print(" X "); Serial.print(GyX);

Serial.println();
//GELB LEUCHTEN

if (GyY > 95 && GyX < 130)
for (int i = 0; i < 12; i++ ) RING.setPixelColor(i, 255, 150, 0);

//BLAU LEUCHTEN
if (GyY <-95&& GyX > -130 )
for (int i = 0; i < 12; i++ ) RING.setPixelColor(i, 0, 150, 255);

//ROT LEUCHTEN
if (GyX >95 && GyX < 130)
for (int i = 0; i < 12; i++ ) RING.setPixelColor(i, 255, 40, 0);

//Standby
if (GyX < -95 && GyX > -130)
for (int i = 0; i < 12; i++ ) RING.setPixelColor(i, 0, 0, 0);

// AUSSCHALTEN (GEDIMMTER ZUSTAND

if (GyY > 160 )
for (int i = 0; i < 12; i++ ) RING.setPixelColor(i, 0, 0, 10);

RING.show();

delay(50);

Wie ihr sehen könnt ist eine Ausschalt-Bedingung schon hinzugefügt, jedoch bewegt sich der Bereich des Gyro-Sensor ab ca 90 Grad wieder zurück zu Null, weshalb die Lampe natürlich wieder anschaltet, und das würde ich gerne verhindern!

Ich wäre MEGA froh, meine Projekt-Patnerinnen natürlich auch, wenn jemand mir dabei helfen könnte. Ich habe schon viel rumprobiert und habe leider keine Lösung gefunden.
Schöne Grüße!
Michel

Früher gab es mal Quecksilberschalter als Lageerkennung. Sicher gibt es heute sowas auch ohne das böse Metall (z.B. mit einer Metallkugel oder so). Evtl. könnte man auch das magnetische Feld der Magnetleiste per Reedkontakt auswerten, um diese Position zu ermitteln.

Gruß Tommy

Die Quecksilber-Schalter kenn ich, habe aber keine Alternative gefunden. Was genau meinst du mit das magnetische Feld der Magnetleiste per Reedkontakt auslesen? Ist damit der Gyro-Sensor gemeint? Ich bin wirklich ein ziemlicher Anfänger :slight_smile:

Google findet bei bei mir für "quecksilberschalter alternative" 2860 Ergebnisse. Bei Dir nicht? AUch Quecksilberschalter selbst werden noch angeboten.
Was verstehst Du unter Deinem "Magnetkabel".

Gruß Tommy

Was ich meinte, war, dass ich nichts gefunden habe, dass ich mit meinem Gemma M0 verbinden kann und mit jemand deswegen den MPU6050 empfohlen hat. Das Magnetkabel ist ein magnetisches Usb-C Kabel, was den später zu integrierenden Akku laden soll (Laderegler DEBO POWER3). Ich kann mir nur vorstellen, dass wenn Mensch etwas mehr von Codierung versteht als ich Anfänger, es durchaus möglich wäre die Schaltung hinzubekommen :slight_smile:

Also ist es kein Dauermagnet, an den die Lampe mit Eisen angehänt wird, sondern ein Ladekabel mit magnetischen Wechselfeldern. Damit fällt der Reedschalter aus und es bleibt nur der Lage-/Kippsensor. Mit dem MPU6050 habe ich noch nicht gearbeitet, kann dazu also nichts sagen.

Gruß Tommy

Ok trotzdem Danke!

Cooles Geschichtchen...

Na, das Ding gibts ja zu kaufen und ada ist immer für eine Beispielanwendung gut :wink:

Nu zu Deinem Problem...

Das versteh ich noch nicht ganz.
Du erfasst doch nur 2 Achsen.
Ich nehme jetzt mal ne IKEA Jansjö
Wenn Du die im Kreis / im Kreuz bewegst, dann bekommst Du Position X und Y.
Wenn die auf den Kopf gestellt werden soll, brauchst aber noch Z.
Hast Du auch deklariert.
wertest nur nicht aus.

Oder hab ich nen Denkfehler?

Es kann so einfach sein! Ich hatte Z anfangs deklariert und als ich Probleme mit dem Auslesen hatte es der Übersichtlichkeit halber entfernt und nun schlicht verdusselt es wieder einzusetzen... ich danke sehr für die Hilfe es funktioniert jetzt natürlich tadellos....
ich sollte wirklich Anfang mehr // zu benutzen... DANKE :wink:
Schöne Grüße und Abend noch!
Michel

JA!
Nur ne Bitte noch.
Ich brauch keine Herzchen, aber ein Klick auf "Lösung" ist für die Nachwelt hilfreich. :wink:

Und. Wenn Ihr mit Eurer ProjektArbeit durch seid und die Bewertung erfolgt ist, vielleicht ein kurzer Reply. (Wenn das erst nach 4 Monaten ist, kurz vorher mal den Mod fragen, ob der den Thread nochmal aufmacht)

Gerne :slight_smile:

1 Like

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.