# roPlug: A configurable scroll wheel prototype

**URL:** <https://community.frame.work/t/roplug-a-configurable-scroll-wheel-prototype/10266>\
**Category:** Expansion Card\
**Created:** [November 1, 2021, 2:32am UTC](https://community.frame.work/t/roplug-a-configurable-scroll-wheel-prototype/10266 "2021-11-01T02:32:47Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![mrwm](https://avatars.discourse-cdn.com/v4/letter/m/9e8a1a/32.png) [@mrwm](https://community.frame.work/u/mrwm)\
**Post date:** [November 1, 2021, 2:32am UTC](https://community.frame.work/t/roplug-a-configurable-scroll-wheel-prototype/10266/1 "2021-11-01T02:32:47Z")

</div>

It’s here!

The [schematics have been finished](https://github.com/mrwm/roPlug/tree/usbSideMount) kinda, The PCB has been made (see photos below), and the chassis has been 3D printed. Just note that this is an early prototype version of a scroll wheel expansion card (roPlug V0.0.1a) ~~, and requires a USB-C to USB-A adapter to work~~. **Update: fixed the circuitry and now works without problems!** 😃

[![](https://us1.discourse-cdn.com/flex001/uploads/framework3/original/3X/4/6/46958725cef62a613c5920ed9d6ccf66ee116355.jpeg "roPlug Demonstration") ](https://www.youtube.com/watch?v=2FCxMRbzfaM)

 ![roPlug and USB-A expansion card](https://us1.discourse-cdn.com/flex001/uploads/framework3/original/2X/3/31bc61fe01306c08b379b39c06c5606ab9531844.jpeg)  
 ![roPlug and USB-A expansion card side view](https://us1.discourse-cdn.com/flex001/uploads/framework3/original/2X/1/11e8498181403979f8130a0a0b73a2d87700d894.jpeg)  
 ![roPlug front and back](https://us1.discourse-cdn.com/flex001/uploads/framework3/original/2X/6/6a907f7094a3d3da943aa0bdd58d7be526c3bf9a.jpeg)  
 ![roPlug front and back again](https://us1.discourse-cdn.com/flex001/uploads/framework3/original/2X/8/89dfa7162206b5a8484c3d98b8ad3261af0745ca.jpeg)  
 ![front of roPlug PCB](https://us1.discourse-cdn.com/flex001/uploads/framework3/original/2X/e/eaadd500264eb99fe5eb3f6183b2ebf919946730.jpeg)  
 ![back of roPlug PCB](https://us1.discourse-cdn.com/flex001/uploads/framework3/original/2X/e/e62aa017d06445c48ddc054005cd9813a2666273.jpeg)  
 ![roPlug with rotary encoder on top of USB-A expansion card](https://us1.discourse-cdn.com/flex001/uploads/framework3/original/2X/8/8f732bb8d7bcc92db254ccef4c435d42fd129f49.jpeg)

## What’s this?

RoPlug is an enthusiast-made, highly configurable expansion card that is powered by an ATMega32U4. This means that this card is essentially a configurable mini arduino fitted into the form of a framework expansion card! Although it’s possible to do arduino tasks, like blinking an LED, or buzzing a speaker, the main focus of this card would be it’s ability to run [the QMK framework](https://qmk.fm/) with a rotary encoder (aka rotating knob)!

~~As mentioned above, this is a prototype, and does not work as expected 100%; so as a result, I’m selling this with the cost of BOM materials at a loss.~~ **This now works 100% after the fix, but I’m still selling this at a loss, but I’m open to other options.**

## How do I get one?

### Kits:

- Assembled PCB: **$25** each +shipping
- Assembled PCB with encoder soldered: **$26** each +shipping
- PCB only (no components): **only 1 available** : **$20** +shipping

### Add-ons:

- encoder: **$2.5**
  - Comes with 3D printed knob
  - Choice of soldering or no soldering to the board
  - Not selling individually

- 3D Printed chassis: **$4**
  - Comes with a spare chassis per board purchased. eg: 1 board : 2 chassis, 2 boards : 4 chassis, and so on…
  - The size is double height: the same height as the TALL SNACK by @XenoCow

- 3D chassis STL + blender file: **$8**
  - I only have black at the moment.

- Pre-flash QMK config with your choice of keyboard function: **$0 free**
  - Default configuration is at Volume up / Volume down
  - A list of QMK functions [can be found here](https://docs.qmk.fm/#/keycodes)
  - examples include: Cut/Paste; VolumeUp/VolumeDown; MoveCursorLeft/MoveCursorRight; and so on…

## Order form:

- [Order here](https://docs.google.com/forms/d/e/1FAIpQLSc366rWefzLpRA_Hh3Y34hYg2Li6bB7CSH0miFsWcTFS8zwGA/viewform?usp=sf_link)

The form will close once stock has been depleted, and I will send out a PayPal invoice afterwards.

---

<div class="post-metadata">

**Author:** ![mrwm](https://avatars.discourse-cdn.com/v4/letter/m/9e8a1a/32.png) [@mrwm](https://community.frame.work/u/mrwm)\
**Post date:** [November 1, 2021, 2:33am UTC](https://community.frame.work/t/roplug-a-configurable-scroll-wheel-prototype/10266/2 "2021-11-01T02:33:08Z")

</div>

# Q&A:

## How do I take the board out of the chassis?

To take the board out of the chassis, grab the framework torx screwdriver, and press down on the tab at the side of the chassis:

 ![Side view of roPlug and framework screwdriver](https://us1.discourse-cdn.com/flex001/uploads/framework3/original/2X/3/37dd0fb802414c4d2e57dcbe254452f42512dd43.jpeg)

Then pull down the cover tab, and pull out the roPlug board

 ![pulling the cover off of roPlug chassis](https://us1.discourse-cdn.com/flex001/uploads/framework3/original/2X/b/b0edb2f94603aa61ef99a93ebb56102af08b19dd.jpeg)  
 ![pulling roPlug board out of the chassis](https://us1.discourse-cdn.com/flex001/uploads/framework3/original/2X/b/bf6fbbae59a217d35a256ccedfd4dc4b2e8f8a8b.jpeg)

To put the board back into the chassis, just slide the board back into the chassis. Then slide the cover into place, making sure that the tabs snap into place.

## How do I use it?

### Setup QMK

Depending on your operating system, [take a dive through this wonderfully written instruction on setting up QMK on your computer](https://docs.qmk.fm/#/newbs_getting_started). The link should get you setup and ready to run QMK on roPlug; however, I recommend reading through other sections to get familiar with QMK.

Once you have set up your QMK environment on your computer, head over [to the roPlug QMK configuration and download the files](https://github.com/mrwm/qmk_firmware/tree/mrwm). Alternatively, you can download the zip file [using this link here](https://github.com/mrwm/qmk_firmware/archive/refs/heads/mrwm.zip).

### Prepare roPlug

To flash your custom configuration, take out the board from the chassis, and grab a paperclip or wire:

 ![roPlug and wires](https://us1.discourse-cdn.com/flex001/uploads/framework3/original/2X/1/178123825d95b001b5af6596e4429880811611e8.jpeg)

Then set roPlug to bootloader mode by plugging it into your computer, then connecting the **square** reset port to the **round ground** port diagonal:

 ![roPlug RESET wired](https://us1.discourse-cdn.com/flex001/uploads/framework3/original/2X/a/a09f4c9a97ec8128aa4b1f2ede505ab37215ba22.jpeg)

Once roPlug is in bootloader mode, it will then wait for QMK to load and flash the custom key map created in the configuration. Once QMK finishes flashing roPlug, you can place the board back into the chassis, and start using it like a champ!

## Links & resources

- [QMK Arduino Framework](https://qmk.fm/)
- [roPlug schematics](https://github.com/mrwm/roPlug/tree/usbSideMount)
- [roPlug QMK configuration](https://github.com/mrwm/qmk_firmware/tree/mrwm)

---

<div class="post-metadata">

**Author:** ![ExplodingWaffle](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/explodingwaffle/32/6616_2.png) [@ExplodingWaffle](https://community.frame.work/u/ExplodingWaffle)\
**Post date:** [November 1, 2021, 9:22pm UTC](https://community.frame.work/t/roplug-a-configurable-scroll-wheel-prototype/10266/3 "2021-11-01T21:22:54Z")

</div>

why do you need the usb A adapter? does it physically fit?  
i noticed on the schematic you have two 22 ohm resistors on CC and VCONN- this is wrong, you should have one 5.1k resistor on CC. might explain it

---

<div class="post-metadata">

**Author:** ![mrwm](https://avatars.discourse-cdn.com/v4/letter/m/9e8a1a/32.png) [@mrwm](https://community.frame.work/u/mrwm)\
**Post date:** [November 1, 2021, 11:32pm UTC](https://community.frame.work/t/roplug-a-configurable-scroll-wheel-prototype/10266/4 "2021-11-01T23:32:52Z")

</div>

The USB-A adapter fixes and works out the bad circuitry I made on the USB-C connection, and yeah, I goofed up with the 22ohm resistors.

---

<div class="post-metadata">

**Author:** ![mrwm](https://avatars.discourse-cdn.com/v4/letter/m/9e8a1a/32.png) [@mrwm](https://community.frame.work/u/mrwm)\
**Post date:** [November 3, 2021, 12:50am UTC](https://community.frame.work/t/roplug-a-configurable-scroll-wheel-prototype/10266/5 "2021-11-03T00:50:05Z")

</div>

Correct me if I’m wrong, should both resistors be changed to 5.1k like in the first screenshot, or should CC be connected to VBUS with the 5.1k resistor in the second screenshot?

 ![](https://us1.discourse-cdn.com/flex001/uploads/framework3/original/2X/2/250df74bfd5171eeb01cd5758965abc562bd14cf.png)  
 ![](https://us1.discourse-cdn.com/flex001/uploads/framework3/original/2X/e/e63354a5c2145335e527b8892785c329da160d45.png)

I’m trying to wrap my head around this, but I think I might be further confusing myself.

edit: [This blog](https://www.reclaimerlabs.com/blog/2017/1/12/usb-c-for-engineers-part-2) and [this reference](https://microchipdeveloper.com/usb:tc-pins) both say to have pull down resistors on CC and VCONN… so I guess it’s just a case of swapping the resistors?

---

<div class="post-metadata">

**Author:** ![ExplodingWaffle](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/explodingwaffle/32/6616_2.png) [@ExplodingWaffle](https://community.frame.work/u/ExplodingWaffle)\
**Post date:** [November 3, 2021, 8:00pm UTC](https://community.frame.work/t/roplug-a-configurable-scroll-wheel-prototype/10266/6 "2021-11-03T20:00:17Z")

</div>

5.1k pulldown on CC only- ya see:

 ![image](https://us1.discourse-cdn.com/flex001/uploads/framework3/original/2X/8/88d849663932b5d7083945d557b2c8f944f814a5.png)  
the way usb C detects orientation is by detecting which pin has voltage on it. Rp and Rd form a voltage divider. you can see how if your sink is a receptacle, you need two resistors because the CC wire is actually used to detect if the _cable_ is flipped or not.  
but if there’s no cable- you can only have one resistor, for one voltage divider. if you had two the host wouldnt be able to tell the orientation.  
 ![image](https://us1.discourse-cdn.com/flex001/uploads/framework3/original/2X/6/6ca1f19a3454106354be5b20cc83a8542e1462a9.png)

---

<div class="post-metadata">

**Author:** ![mrwm](https://avatars.discourse-cdn.com/v4/letter/m/9e8a1a/32.png) [@mrwm](https://community.frame.work/u/mrwm)\
**Post date:** [November 3, 2021, 11:31pm UTC](https://community.frame.work/t/roplug-a-configurable-scroll-wheel-prototype/10266/7 "2021-11-03T23:31:32Z")

</div>

It worked! Taking out the 22 resistor on VCONN and replacing the CC resistor with 5.1k now works without the USB-C to USB-A connector. Once I replace all the resistors on other boards, I’ll update the post, and post a demonstrational video of my expansion card in action.

---

<div class="post-metadata">

**Author:** ![mrwm](https://avatars.discourse-cdn.com/v4/letter/m/9e8a1a/32.png) [@mrwm](https://community.frame.work/u/mrwm)\
**Post date:** [November 4, 2021, 2:53am UTC](https://community.frame.work/t/roplug-a-configurable-scroll-wheel-prototype/10266/8 "2021-11-04T02:53:04Z")

</div>

Here’s the video of one of the many things roPlug can do:

[![](https://us1.discourse-cdn.com/flex001/uploads/framework3/original/3X/4/6/46958725cef62a613c5920ed9d6ccf66ee116355.jpeg "roPlug Demonstration") ](https://www.youtube.com/watch?v=2FCxMRbzfaM)

The cards in the video has one as _move-mouse-cursor-up/down_ and _move-mouse-cursor-left/right_. Essentially enabling an etch-a-sketch-like mouse cursor for the framework laptop.

It is also possible to change it to scroll wheel up/down, left/right, copy/paste, undo/redo… and a lot more!

---

<div class="post-metadata">

**Author:** ![Jacob\_Padgett](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/jacob_padgett/32/1553_2.png) [@Jacob\_Padgett](https://community.frame.work/u/Jacob_Padgett)\
**Post date:** [November 10, 2021, 1:37am UTC](https://community.frame.work/t/roplug-a-configurable-scroll-wheel-prototype/10266/9 "2021-11-10T01:37:03Z")

</div>

Got mine, working so far, pretty sweet.

---

<div class="post-metadata">

**Author:** ![Jacob\_Padgett](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/jacob_padgett/32/1553_2.png) [@Jacob\_Padgett](https://community.frame.work/u/Jacob_Padgett)\
**Post date:** [November 21, 2021, 7:49am UTC](https://community.frame.work/t/roplug-a-configurable-scroll-wheel-prototype/10266/10 "2021-11-21T07:49:59Z")

</div>

@mrwm How’s [this](https://www.digikey.com/en/products/detail/panasonic-electronic-components/EVQ-VVD00203B/3873473) look? It’s not as thin as you need it to be (2.2mm not including wheel), but it is thinner than what’s in use now, right?

Edit: just noticed that it’s only 3 pulses per revolution. Not too great.

---

<div class="post-metadata">

**Author:** ![mrwm](https://avatars.discourse-cdn.com/v4/letter/m/9e8a1a/32.png) [@mrwm](https://community.frame.work/u/mrwm)\
**Post date:** [November 21, 2021, 8:30am UTC](https://community.frame.work/t/roplug-a-configurable-scroll-wheel-prototype/10266/11 "2021-11-21T08:30:50Z")

</div>

It looked promising to the point where I had [the EVQ-VVD00203B noted down in the github README awhile back](https://github.com/mrwm/roPlug/tree/usbSideMount); however, I didn’t use it due to it’s low-resolution per pulse.

It would definitely be great if it had at least 6 pulses per revolution, like the current encoders that I’m currently using. Also, the encoder doesn’t fit the footprint that the mechanical keyboard community used, which meant people can’t easily source alternative parts that are compatible to this card.

---

<div class="post-metadata">

**Author:** ![ExplodingWaffle](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/explodingwaffle/32/6616_2.png) [@ExplodingWaffle](https://community.frame.work/u/ExplodingWaffle)\
**Post date:** [November 21, 2021, 3:21pm UTC](https://community.frame.work/t/roplug-a-configurable-scroll-wheel-prototype/10266/12 "2021-11-21T15:21:53Z")

</div>

One way I think you could do a quadrature encoder in a really thin space would be kind of like [this thing from polulu](https://www.pololu.com/product/3081)- sot-23 hall sensors (they detect magnets) on one side of the pcb, 90 degrees apart, and a magnet wheel on the other side. The resolution depends on the number of magnets in the wheel, [as shown by this guy quite nicely.](https://ukmars.org/2020/09/improving-the-pololu-magnetic-encoder-more-magnets/)

---

<div class="post-metadata">

**Author:** ![mrwm](https://avatars.discourse-cdn.com/v4/letter/m/9e8a1a/32.png) [@mrwm](https://community.frame.work/u/mrwm)\
**Post date:** [November 21, 2021, 9:22pm UTC](https://community.frame.work/t/roplug-a-configurable-scroll-wheel-prototype/10266/13 "2021-11-21T21:22:56Z")

</div>

Magnets…

> [@\[Solved, Magnets\] Strange electrical behavior?](http://community.frame.work/t/solved-magnets-strange-electrical-behavior/6922):
>
> I have little desk space, so I frequently set my Framework laptop directly on top of my work machine, a 15" 2019 MacBook Pro. I have already applied the double-sided tape, and ensured that the keyboard cable is mounted properly. Intermittently, the keyboard disconnects (the lights go dark), the OS (Fedora) immediately hibernates without warning. The keyboard remains dark. I press the power switch, and nothing happens. I shake the laptop. The keyboard springs back to life, I press the power bu…

I don’t think it would be a viable alternative if it will only cause problems later on, but the idea is great though!

---

<div class="post-metadata">

**Author:** ![James\_Blackwell](https://avatars.discourse-cdn.com/v4/letter/j/c0e974/32.png) [@James\_Blackwell](https://community.frame.work/u/James_Blackwell)\
**Post date:** [October 29, 2023, 8:26am UTC](https://community.frame.work/t/roplug-a-configurable-scroll-wheel-prototype/10266/14 "2023-10-29T08:26:20Z")

</div>

This looks really cool. Do you plan on making any more? If so I’d be interested in getting one

---

<div class="post-metadata">

**Author:** ![mrwm](https://avatars.discourse-cdn.com/v4/letter/m/9e8a1a/32.png) [@mrwm](https://community.frame.work/u/mrwm)\
**Post date:** [October 29, 2023, 5:49pm UTC](https://community.frame.work/t/roplug-a-configurable-scroll-wheel-prototype/10266/15 "2023-10-29T17:49:10Z")

</div>

I still have 3 assembled PCB’s available. I’ll temporarily open up the google form for orders.

In stock:

- 3 Assembled PCB’s
- 2 rotary encoders
- 1 PCB without parts

This means that 2 of the 3 assembled PCB’s will have the rotary encoders available.

---

<div class="post-metadata">

**Author:** ![James\_Blackwell](https://avatars.discourse-cdn.com/v4/letter/j/c0e974/32.png) [@James\_Blackwell](https://community.frame.work/u/James_Blackwell)\
**Post date:** [February 11, 2024, 9:54am UTC](https://community.frame.work/t/roplug-a-configurable-scroll-wheel-prototype/10266/16 "2024-02-11T09:54:41Z")

</div>

Ill take one if they are still avaliable

---

<div class="post-metadata">

**Author:** ![mrwm](https://avatars.discourse-cdn.com/v4/letter/m/9e8a1a/32.png) [@mrwm](https://community.frame.work/u/mrwm)\
**Post date:** [February 11, 2024, 11:25pm UTC](https://community.frame.work/t/roplug-a-configurable-scroll-wheel-prototype/10266/17 "2024-02-11T23:25:58Z")

</div>

I opened the form again, but I only have 1 assembled board + rotary encoder left.

---

<div class="post-metadata">

**Author:** ![James\_Blackwell](https://avatars.discourse-cdn.com/v4/letter/j/c0e974/32.png) [@James\_Blackwell](https://community.frame.work/u/James_Blackwell)\
**Post date:** [February 13, 2024, 9:37am UTC](https://community.frame.work/t/roplug-a-configurable-scroll-wheel-prototype/10266/18 "2024-02-13T09:37:05Z")

</div>

Form submitted

---

<div class="post-metadata">

**Author:** ![mrwm](https://avatars.discourse-cdn.com/v4/letter/m/9e8a1a/32.png) [@mrwm](https://community.frame.work/u/mrwm)\
**Post date:** [February 28, 2024, 7:45am UTC](https://community.frame.work/t/roplug-a-configurable-scroll-wheel-prototype/10266/19 "2024-02-28T07:45:37Z")

</div>

Form closed. Not going to do another run until I save up more money for another project like this.

I still need to wrap up a couple places like cleaning up my QMK github repo for this board, and updating the configs to the new QMK requirements, but I’ll get around to do a small write-up on this project. It’s been over three years since, so I need to dig those photos and old stats. Unfortunately, I might have some that slipped through the cracks.

This has been a fun, but expensive project that I did to learn about kicad, manufacturing, setting up QMK, and all the other fun stuff.

Hopefully I’ll get around to redo the board with the recommended board layout + more breakout pins for the chip on the board, but who knows? Maybe there’ll be more people interested.

Cheers and see you guys around the forum! 🤟

---

<div class="post-metadata">

**Author:** ![mrwm](https://avatars.discourse-cdn.com/v4/letter/m/9e8a1a/32.png) [@mrwm](https://community.frame.work/u/mrwm)\
**Post date:** [March 2, 2024, 5:37am UTC](https://community.frame.work/t/roplug-a-configurable-scroll-wheel-prototype/10266/20 "2024-03-02T05:37:59Z")

</div>

The QMK configs for the roPlug can be found here:

> **[GitHub - mrwm/mrwm\_mk: QMK repository for QMK devices by mrwm](https://github.com/mrwm/mrwm_mk)**
>
> QMK repository for QMK devices by mrwm

I dont think it’s the prettiest, and I might have some of the configs wrong, but it works 😃

* * *

Also, the write-up for the project can be found here:

[http://community.frame.work/t/roplug-what-i-learned-from-making-an-expansion-card/](http://community.frame.work/t/roplug-what-i-learned-from-making-an-expansion-card/)

[Next page](https://community.frame.work/t/roplug-a-configurable-scroll-wheel-prototype/10266.md?page=2)
