diff --git a/ampel-firmware/led_effects.cpp b/ampel-firmware/led_effects.cpp
index 061b6f869b2c57494dfdbdbe3495b8a90736ef05..45b8c0b7ecbcecc5a91225e1ce7d055eb6da8ba4 100644
--- a/ampel-firmware/led_effects.cpp
+++ b/ampel-firmware/led_effects.cpp
@@ -168,17 +168,18 @@ namespace led_effects {
     }
   }
 
-  void showRainbowWheel(uint16_t duration_ms, uint16_t hue_increment) {
+  void showRainbowWheel(uint16_t duration_ms) {
     if (config::night_mode) {
       return;
     }
     static uint16_t wheel_offset = 0;
+    static uint16_t sine_offset = 0;
     unsigned long t0 = millis();
     pixels.setBrightness(config::max_brightness);
     while (millis() - t0 < duration_ms) {
       for (int i = 0; i < NUMPIXELS; i++) {
         pixels.setPixelColor(i, pixels.ColorHSV(i * 65535 / NUMPIXELS + wheel_offset));
-        wheel_offset += hue_increment;
+        wheel_offset += (pixels.sine8(sine_offset++ / 50) - 127) / 2;
       }
       pixels.show();
       delay(10);
diff --git a/ampel-firmware/led_effects.h b/ampel-firmware/led_effects.h
index 96367ef5f2909d38377e2441f91d4e2e1abe2198..a910d307f7c6294db889e704f745c3777136d19b 100644
--- a/ampel-firmware/led_effects.h
+++ b/ampel-firmware/led_effects.h
@@ -29,7 +29,7 @@ namespace led_effects {
   int countdownToZero();
   void showWaitingLED(uint32_t color);
   void showKITTWheel(uint32_t color, uint16_t duration_s = 2);
-  void showRainbowWheel(uint16_t duration_ms = 1000, uint16_t hue_increment = 50);
+  void showRainbowWheel(uint16_t duration_ms = 1000);
   void displayCO2color(uint16_t co2);
 }
 #endif