---
product_id: 95765450
title: "Rotary Encoder Module"
brand: "taiss"
price: "€ 20.00"
currency: EUR
in_stock: true
reviews_count: 10
category: "Taiss"
url: https://www.desertcart.at/products/95765450-rotary-encoder-module
store_origin: AT
region: Austria
---

# 5V working voltage 20 pulses per rotation Aluminium alloy knob cap Rotary Encoder Module

**Brand:** taiss
**Price:** € 20.00
**Availability:** ✅ In Stock

## Summary

> 🔧 Turn up your projects with precision and style!

## Quick Answers

- **What is this?** Rotary Encoder Module by taiss
- **How much does it cost?** € 20.00 with free shipping
- **Is it available?** Yes, in stock and ready to ship
- **Where can I buy it?** [www.desertcart.at](https://www.desertcart.at/products/95765450-rotary-encoder-module)

## Best For

- taiss enthusiasts

## Why This Product

- Trusted taiss brand quality
- Free international shipping included
- Worldwide delivery with tracking
- 15-day hassle-free returns

## Key Features

- • **Reset with a Click:** Built-in push button lets you instantly zero your count for flawless resets.
- • **Durable Aluminium Knobs:** Sleek, sturdy 15×16.5 mm aluminium caps built to last and impress.
- • **Precision Pulse Control:** Track rotation with 20 pulses per turn for ultra-accurate input.
- • **Noise-Filtering Friendly:** Optimized for clean signals even over long wiring runs with proper debounce code.
- • **Universal 5V Compatibility:** Seamlessly integrates with Arduino and similar 5V microcontrollers.

## Overview

The Taiss KY-040 Rotary Encoder Module set includes 5 high-quality encoders with durable aluminium alloy knobs (15mm diameter, 16.5mm height). Operating at 5V, each encoder outputs 20 pulses per rotation and features an integrated push button for resetting counts. Ideal for Arduino and similar microcontroller projects, these modules support precise rotational input with noise-filtering potential when paired with debounce code, making them a top choice for professional-grade DIY electronics and prototyping.

## Description

Taiss / 5Pcs KY-040 Rotary Encoder Module with 15×16.5 mm with Knobs Cap: desertcart.com: Industrial & Scientific

Review: Works great, but super noisy. - They work great, ... as long as the noise is filtered out. I needed to run the signal on wire over 45 feet. This destroyed any ability to simply read DT -- it was just bouncing all over. I tried putting in a 0.1uF cap and tried pull up resistors. Neither was able to filter out the noise. So I wrote some code that seems to be working great. This should run on Arduino and similar devices. Keep in mind that this approach does NOT use interrupts, so it is possible that turns could possibly be missed if your MCU gets busy on other things (though unlikely, unless you're running very long processes). uint16_t debounceDuration = 100; uint8_t clkVal = 0; uint8_t dtVal = 0; uint8_t dtValPrev = 0; uint32_t dtValLows = 0; uint32_t dtValHighs = 0; uint32_t millisR = 0; bool activePeriod = false; bool dir = false; uint8_t clkPin = A0; uint8_t. dkPin = A1; uint32_t currentMillis = 0; void setup() { pinMode(clkPin, INPUT_PULLUP); pinMode(dkPin, INPUT_PULLUP); } void loop() { currentMillis = millis(); clkVal = pinReadFast(clkPin); if (clkVal == LOW && !activePeriod && currentMillis - millisR > debounceDuration) { // happens one time once CLK goes low. millisR = currentMillis; activePeriod = true; dtValLows = 0; dtValHighs = 0; } if (activePeriod) { dtValPrev = dtVal; dtVal = pinReadFast(dkPin); if (currentMillis - millisR  debounceDuration && activePeriod) { // finished active period. fired once dir = (dtValHighs > dtValLows); activePeriod = false; Serial.print("dir: "); Serial.println(dir); } }
Review: Switch bounce solved - I had a big problem with switch bounce when connecting clk, data, and switch to my Arduino Uno R4 Wifi, using the KY040 code from MediaFire. That program kept firing off a reset (switch depress) even when I was only rotating the dial. I also noticed that the switch was missing the 10KOhm pull-up resistor for the switch line, so I popped one off another switch and soldered that in. Bounce gone completely, and I can count up or down to my heart's content without a reset. Very nice, other than needing to buy a bunch of 10K 0805 chip resistors. Note that the program was supposed to provide pull-ups from the board, but that apparently did not happen properly. I note that two of the pins were analog optional pins, so perhaps that caused an issue. In any case, the switches appear to work well once modified.

## Features

- Working voltage: 5V; One round number of pulse: 20
- The Material of Knob Cap: aluminium alloy；The Specification of Knob Cap: diameter: 15mm/ 0.59in; height: 16.5mm/ 0.65in
- The rotary encoder can count the number of pulse output during rotation in the positive direction and reverse direction through the rotation and this rotation counts are not limited
- With the key on the rotary encoder, you can reset to the initial state, that is, counting from 0
- Package content: 5pcs x Rotary Encoder Module + 5pcs black Knob .

## Technical Specifications

| Specification | Value |
|---------------|-------|
| ASIN | B07F26CT6B |
| Best Sellers Rank | #101,213 in Industrial & Scientific ( See Top 100 in Industrial & Scientific ) #18 in Switch Encoders |
| Date First Available | June 26, 2018 |
| Is Discontinued By Manufacturer | No |
| Item Weight | 1.76 ounces |
| Item model number | KY-040 |
| Manufacturer | Taiss |
| Package Dimensions | 4.49 x 3.46 x 1.42 inches |

## Images

![Rotary Encoder Module - Image 1](https://m.media-amazon.com/images/I/71w01-F75EL.jpg)

## Customer Reviews

### ⭐⭐⭐⭐⭐ Works great, but super noisy.
*by D***N on June 25, 2021*

They work great, ... as long as the noise is filtered out. I needed to run the signal on wire over 45 feet. This destroyed any ability to simply read DT -- it was just bouncing all over. I tried putting in a 0.1uF cap and tried pull up resistors. Neither was able to filter out the noise. So I wrote some code that seems to be working great. This should run on Arduino and similar devices. Keep in mind that this approach does NOT use interrupts, so it is possible that turns could possibly be missed if your MCU gets busy on other things (though unlikely, unless you're running very long processes). uint16_t debounceDuration = 100; uint8_t clkVal = 0; uint8_t dtVal = 0; uint8_t dtValPrev = 0; uint32_t dtValLows = 0; uint32_t dtValHighs = 0; uint32_t millisR = 0; bool activePeriod = false; bool dir = false; uint8_t clkPin = A0; uint8_t. dkPin = A1; uint32_t currentMillis = 0; void setup() { pinMode(clkPin, INPUT_PULLUP); pinMode(dkPin, INPUT_PULLUP); } void loop() { currentMillis = millis(); clkVal = pinReadFast(clkPin); if (clkVal == LOW && !activePeriod && currentMillis - millisR > debounceDuration) { // happens one time once CLK goes low. millisR = currentMillis; activePeriod = true; dtValLows = 0; dtValHighs = 0; } if (activePeriod) { dtValPrev = dtVal; dtVal = pinReadFast(dkPin); if (currentMillis - millisR < 1) { if (dtVal == HIGH) dtValHighs++; else dtValLows++; } } if (currentMillis - millisR > debounceDuration && activePeriod) { // finished active period. fired once dir = (dtValHighs > dtValLows); activePeriod = false; Serial.print("dir: "); Serial.println(dir); } }

### ⭐⭐⭐⭐⭐ Switch bounce solved
*by K***. on May 20, 2024*

I had a big problem with switch bounce when connecting clk, data, and switch to my Arduino Uno R4 Wifi, using the KY040 code from MediaFire. That program kept firing off a reset (switch depress) even when I was only rotating the dial. I also noticed that the switch was missing the 10KOhm pull-up resistor for the switch line, so I popped one off another switch and soldered that in. Bounce gone completely, and I can count up or down to my heart's content without a reset. Very nice, other than needing to buy a bunch of 10K 0805 chip resistors. Note that the program was supposed to provide pull-ups from the board, but that apparently did not happen properly. I note that two of the pins were analog optional pins, so perhaps that caused an issue. In any case, the switches appear to work well once modified.

### ⭐⭐⭐⭐ Wish It Would Have Added Built-In Capacitors
*by B***N on December 30, 2023*

This took me awhile to get working properly because my Arduino code was incorrect. It needs 0.1uF capacitors from the CLK and DT outputs to GND, and I wish these were built in. It's missing a resistor on the switch part, which I'm not using. The parts I ordered have 15 PPR. Here is my Arduino code if this is helpful for anyone... const int i_A = 3; const int i_B = 2; int encoderPos = 0; bool encAValPrev = LOW; void setup() { Serial.begin(9600); pinMode(i_A, INPUT); pinMode(i_B, INPUT); } void loop() { bool encAVal = digitalRead(i_A); if ((encAValPrev == HIGH) && (encAVal == LOW)) { if (digitalRead(i_B) == LOW) { encoderPos--; Serial.println(String(encoderPos) + " Counter-Clockwise"); } else { encoderPos++; Serial.println(String(encoderPos) + " Clockwise"); } } encAValPrev = encAVal; }

## Frequently Bought Together

- Taiss / 5Pcs KY-040 Rotary Encoder Module with 15×16.5 mm with Knobs Cap
- Hosyond 5 Pcs 0.96 Inch OLED I2C IIC Display Module 12864 128x64 Pixel SSD1306 Mini Self-Luminous OLED Screen Board Compatible with Arduino Raspberry Pi(Blue and Yellow)
- ELEGOO 120pcs Multicolored Dupont Wire 40pin Male to Female, 40pin Male to Male, 40pin Female to Female Breadboard Jumper Ribbon Cables Kit Compatible with Arduino Projects

---

## Why Shop on Desertcart?

- 🛒 **Trusted by 1.3+ Million Shoppers** — Serving international shoppers since 2016
- 🌍 **Shop Globally** — Access 737+ million products across 21 categories
- 💰 **No Hidden Fees** — All customs, duties, and taxes included in the price
- 🔄 **15-Day Free Returns** — Hassle-free returns (30 days for PRO members)
- 🔒 **Secure Payments** — Trusted payment options with buyer protection
- ⭐ **TrustPilot Rated 4.5/5** — Based on 8,000+ happy customer reviews

**Shop now:** [https://www.desertcart.at/products/95765450-rotary-encoder-module](https://www.desertcart.at/products/95765450-rotary-encoder-module)

---

*Product available on Desertcart Austria*
*Store origin: AT*
*Last updated: 2026-05-04*