Forum Rule: Always post complete source code & details to reproduce any issue!
Results 1 to 5 of 5

Thread: 1st generation iPod Click Wheel repurposing

  1. #1
    Junior Member
    Join Date
    May 2018

    1st generation iPod Click Wheel repurposing

    I was hoping someone has attempted a iPod 3rd generation scroll wheel repurposing (capacitive touch) and maybe willing to offer some help. (Not the later click wheel with the imbeded logic chip & dedicated protocol)
    Technically the one I'm using comes from a Sonos CR100 controller but I believe they are very similar hardware

    I'm building a teensy based custom keyboard with mouse scroll wheel to reside in the Sonos CR100 Case then control the unoffical-sonos-controller-for-linux on a PiZero with dedicated touch screen.

    1. Is there a nice example of a mouse scroll wheel implementation on Teensy?
    2. Has anyone repurposed a iPod 3rd generation scroll wheel repurposing (capacitive touch) (or similar) as a mouse scroll wheel via teensy? If so could you please provide any code or links.
    3. Any ideas or thought on this project are welcome.

    • Teensyduino
    • Linux
    • unoffical-sonos-controller-for-linux

    • Sonos CR100 - modified
    • Custom Internals to mount buttons & Pi
    • Teensy LC
    • PiZero Touch Screen

    Project Background:
    This project has being build as Sonos have choose to actively brick the hardware of users via the firmware upgrade process, leaving a need for a dedicated hardware controller. This projects has no real purpose than to offer an alternative to increasing the worlds E-Waste & just for the general amusement of the exercise.
    I hope it amuses you and highlights one of the pitfalls of manufacture initiated upgrades.
    • How is this different to any other company choosing to end support for ageing hardware? Well this is an almost mandatory upgrade (or downgrade) of peoples systems with functionality of the system being actively limited if the firmware falls behind the latest updates.
    • Is it possible to firewall against this? Technically yes, but whom should need to firewall their lawfully purchased hardware against malicious firmware updates from a manufacture.
    • Regrettably Sonos are unwilling to provide customers with the right to remain a given firmware (and make a valued decision when is the time to upgrade and perhaps sacrifice hardware that no longer is capable of performing the latest and greatest tricks)
    • Couldn't you just hack the original CR100 hardware? I would love to see it, I'm afraid that is beyond my skills, I hope someone has a crack at it one day!

    Last edited by Aussie3d; 05-30-2018 at 02:13 AM. Reason: Correction to Scroll wheel technology

  2. #2
    Junior Member
    Join Date
    May 2018

    Smile Touch Wheel Information

    Touch wheel photos for more information see images below.

    I'm still hoping someone can provide a bit of guidance on interfacing with this type of capacitive sensors.

    Looks like has 4 input terminals
    • 3 seem to go to the small arial seen running radially at 120 degree spacings
    • The forth seems to go to the top side presumably under the white plastic cover

    Possible reference links came up as a possibility to base this on.
    The other option maybe the native touchRead() function of the Teensy

    Click image for larger version. 

Name:	tM29kBg.jpg 
Views:	38 
Size:	20.7 KB 
ID:	13907Click image for larger version. 

Name:	Gmz0WmC.jpg 
Views:	45 
Size:	22.8 KB 
ID:	13908

  3. #3
    Senior Member
    Join Date
    Apr 2013
    Certainly the simple way to investigate this would be to ground the top cover contact and cap read the three wheel segments. Other option may be cap reading the white cover and then rotate through grounding each segment in turn and processing the three values to identify a finger. There was a lot of smarts behind the Ipod interface was fully replicating it would be project all of it's own.

    If you have not already worked with them, understanding encoders may be of use in how other more mechanical jog wheels work

  4. #4
    Junior Member
    Join Date
    May 2018
    Thanks for the reply, the ideas are appreciated

    I have previously used Rotary encoders but I'm stuck with the cap sensor for this project as I'm using exisiting hardware components.
    I'm fairly new to cap-sensing so its a learning exercise for me.

    My thought was also grounding the top plate and measuring the 3 antennas but my quick test (with the code below) are some what inconclusive, the touchRead() data looks to be around the mid 2000s and all channels jump to the 3000s once a finger is added to the mix, but the position of the finger around the disk doesn't have a readily noticeable effect on the individual output channels (at least not over the noise in the data).

    1. Could you please expand on the idea of testing each channel separately against the cover plate?
    2. Should I be using the CapacitiveSensor() over the The touchRead() - Intuitively the touchRead() input "feels" a little odd to me with only the single wire per channel, but presumably the resistors are in the chipset somewhere?
    3. Should I be putting resistors in the mix when using the touchRead()? From what I could gather this is only required with the CapacitiveSensor() method.

    Thought Bubbles:
    1. Grounding the hand may help - but doing this on a final setup could be impractical? (the back case of old iPods was a chromed finish and I'm wondering if this may have also been a case earth? more maybe just cosmetic)
    2. Perhaps some kind of averaging across groups TouchReads() may eliminate the noise and show a clearer pattern on the finger position? Not sure what effect this would have on reaction time for the sensor. (My idea was to get the change in states between successive reads and use this to assign a direction to the finger motion, and then use rate of change to assign speed.)

    int touchRead_pin1 = 16; 
    int data1;
    int touchRead_pin2 = 17; 
    int data2; 
    int touchRead_pin3 = 18; 
    int data3; 
    void setup() {
    void loop() {
      data1 = touchRead(touchRead_pin1); 
      data2 = touchRead(touchRead_pin2); 
      data3 = touchRead(touchRead_pin3); 
    DATA from serial monitor
    2435 2417 2375
    2437 2415 2384
    2439 2418 2378
    2438 2419 2376
    2440 2417 2376
    2437 2418 2376
    2436 2418 2378
    2436 2415 2385
    2436 2418 2374
    2440 2421 2376
    2438 2418 2382
    2446 2427 2386
    2454 2437 2391
    2480 2461 2407
    2524 2520 2472
    2567 2553 2525
    2924 2900 2815
    3090 3106 3058
    3129 3133 3082
    3146 3143 3105
    3146 3160 3083
    3143 3161 3118
    3154 3170 3114
    3159 3170 3120
    3161 3169 3124
    3151 3181 3130
    3151 3171 3131
    3152 3175 3138
    3163 3175 3130
    3157 3161 3116

  5. #5
    Junior Member
    Join Date
    Apr 2020
    Hi Aussie3d,

    I am late to the party but also working on a design to reuse the CR100 controller hardware. On the software side I'm using the SoCo library to connect to my zone players. This runs on a linux system, for now raspberry pi zero and a PiTFT display. I am also on the process of getting the scroll wheel to work. I think I know how Sonos did it and I have an IC on order that I think will do the trick.

    Anyway, if you have time I would love to hear about your experience and if you succeeded or not and how far you may have gotten. I am open to collaboration if you may be interested in revisiting the idea. You can send me a private message so as not to clutter this thread. I could not send you pictures via the PM which is why I posted here. I will still send you a PM in case this does not make it to you.

    I have successfully tested a new power board replacement.

    Click image for larger version. 

Name:	PowerBoardB.jpg 
Views:	2 
Size:	130.7 KB 
ID:	19629
    Click image for larger version. 

Name:	PowerBoard.jpg 
Views:	3 
Size:	116.2 KB 
ID:	19628

    I am also almost done with the CPU board replacement, I am close to sending it for fabrication and hope to start testing it soon.

    Click image for larger version. 

Name:	CPU.jpg 
Views:	5 
Size:	80.8 KB 
ID:	19626
    Click image for larger version. 

Name:	CPUB.jpg 
Views:	2 
Size:	86.0 KB 
ID:	19627

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts