Dimmen mit Kompass

Hallo Arduino Gemeinde

Versuche gerade eine Beleuchtung über ein absolut Orientierungssensor zu dimmen und ecke grad an.

Der Sensor (bno055) liefert mir ein Wert zwischen 0 und 360. Wenn man mehr als eine Umdrehung macht fängt er wieder bei 0 an, bzw. bei 360 wenn man in die andere Richtung dreht und da liegt das Problem.

Habe das mal folgendermaßen gelöst:

int diff = 0;

if(mySensor.gyro.x < -1 && last > mySensor.euler.x){
  diff = mySensor.euler.x - last;
}
else if(mySensor.gyro.x >  1 && last < mySensor.euler.x){
  diff = mySensor.euler.x - last;
}

last = mySensor.euler.x;
dimm += diff*2;
dimm = constrain(dimm, 0, 255);

Der Gyro stellt fest in welche Richtung gedreht wird und blendet mit dem < bzw. > den “überlauf” aus. Allerdings stört mich an der Lösung das ich das für alle Lagen einzeln machen muss.

Es sollte doch möglich sein das “rechnerisch” ohne den Gyrosensor zu lösen?

Wäre sehr froh über hilfreichen Input.

Grüsse Kim

Hi

Ich verstehe Dich nicht recht - der Wert des Sensor ist 0...359.
Wenn Du über die 359 hinweg drehst, bist Du wieder bei Null bzw. oberhalb.

Wenn Du unterhalb Null bist, kommst Du wieder auf +360 (also minus des aktuellen Wert).

Wo ist Dein Problem?

MfG

Danke für das Interesse…

Es sollte am Schluss ein Würfel geben mit dem man verschiedene Dekoleuchten ansteuern kann. Daher sollte, wenn der Würfel umgedreht wird, der aktuelle Dimmwert der Beleuchtung übernommen werden die oben ist. Wenn man ihn nun um die eigene Achse dreht soll dann der Wert hinzugezählt bzw.abgezogen werden.

Hoffe das ist vertändlicher :wink:

Timmy0o0Jones:
Hoffe das ist vertändlicher :wink:

Ja, zumindest hoffe ich, mit meiner Vermutung richtig zu liegen, dass es um eine Art Dimm-Fernbedienung geht. Wenn ich Dich richtig verstanden habe, hast Du bislang nur einen Kompass. Weißt Du schon, wie Du die Neigung feststellen willst?

Gruß

Gregor

Da liegst du genau richtig. Beim bno055 handelt es sich um ein 9 axies absolut Orientierungsensor der durch Sensorfusion immer den richtigen "Compasswert" ausgibt egal in welcher Lage er sich befindet. Das vereinfacht das ganze natürlich enorm.

Das Dimmen wir deaktiviert wenn die lineare Beschleunigung über einem gewissen Wert liegt. Dadurch wird verhindert das es wild umher dimmt wenn der Würfel verschoben/bewegt wird. Die Lage ermittle ich über den Pitch und Rollwinkel. Das funktioniert auch super.

Es sollten später auch noch paar Funktionen dazukommen wie alles aus bei schütteln oder ähnliches. Damit warte ich aber noch bis ich die restlichen teile für den Prototyp zusammen hab. Das ganze wird dann über MQTT an IO Broker angebunden.