4 ms·
Given how ubiquitous the capacitive touch senors have become I'm surprised no one has put together an open source option. I've gone down something of a rabbit h
by robertely 6y ago
Given how ubiquitous the capacitive touch senors have become I'm surprised no one has put together an open source option. I've gone down something of a rabbit hole searching and haven't found any prior work.
The closest I have seen is the Snowpad[1] but it's been discontinued by the maker and they pulled down the source as well.
I'd try duplicating it but it used the Microchip MTCH6301 and it's been marked `Not recommended for use in new designs.` I'm hunting for an easy to use alternative if anyone knows one. I may still take a stab at the MTCH6301 just because of how easy it looks to use.
[1][https://www.kitronyx.com/snowpad.html https://www.kitronyx.com/snowpad.html]
- solarkraft 6y agoWhat does "Open Source" mean in this context? Isn't the goal "just" to have an understandable interface? Also: Can you recommend some reading material as an introduction to using a capacitive digitizer? I am planning to use one in an upcoming project (either one from a tablet glass replacement or a stand alone one) and really have no idea what to look out for yet in terms of communication with my Linux board (bonus: Something about DIYing one because I need a special format, but I guess that's especially hard because it's supposed to go on to a screen).
- robertely 6y agoHaving a tidy interface is certainly a primary goal but there are others. - Control over the size/shape of the sensor pad. - Control over communication (i2c/spi/usb) - Ability to explore gesture behaviors and expose simplified interfaces to the OS. - Control over click feel/behaviors by customizing snap switch style, mount, and locations. - Control over the touch surface finish. (Did you know you can laser cut glass screen protectors? Why are none of these touch pads glass outside of macbooks?) - Open documentation on all of the above. As for reading material I can't recommend anything as a summery (see my last bullet). Manufacture design guidelines are probably where you should start. Case in point: MTCH6301: https://www.microchip.com/wwwproducts/en/MTCH6301 https://www.microchip.com/wwwproducts/en/MTCH6301 Microchip Sensor design guide: http://ww1.microchip.com/downloads/en/DeviceDoc/FAQs%20-%20Sensor%20Design%20Guidelines.pdf http://ww1.microchip.com/downloads/en/DeviceDoc/FAQs%20-%20S...
- seltzered_ 6y agoIt's not just the sensor. I'd warn people trying to DIY from scratch to make sure you really think of the full gestalt of a touch / gesture experience which spans: - Mechanics (a good surface, sensing) - Robustly designed state machines to track states even before your finger lands. - Math (to deal with finger acceleration, stabilization) - Feedback! Mechanical clicking, piezo, weight actuation, etc. I cringe when I see projects lacking feedback. As a teaser here's my messy breakdown of the macbook trackpad states, based on things done back around 2008/2009 (http://blog.sendapatch.se/2009/november/multitouch-on-unibody-macbooks.html http://blog.sendapatch.se/2009/november/multitouch-on-unibod...): enum RawTouchStateOneValues { TOUCH_STARTED_STATE = 1, // initial touch started state - i.e. first frame of a touch. warning on this state: StateTwoValues seem invalid here TOUCH_HOVERING_STATE = 2, // multi-frame: typically occurs when a touch is about to land. TOUCH_LANDED_ON_PAD_STATE = 3, // usually single-frame, but can occur multiple times if a touch hovers and returns (from state 6,2,1) - you can also go here from state 6, which means a hanging touch can 'return' TOUCH_ON_PAD_STATE = 4, // typical duration of a touch - moving around on pad TOUCH_LEAVING_PAD_STATE = 5, // usually single-frame - TOUCH_LEFT_NOW_HOVERING_STATE = 6, // multi-frame: occurs when a touch occurred but then left pad (state 5), and is now hovering TOUCH_ENDED_STATE = 7 // single-frame: touch finally ends }; enum RawTouchStateTwoValues { TOUCH_DETECTED_ALTSTATE = 0, //state only seems to occur on initial touch (stateOne's TOUCH_STARTED_STATE), which I filter out TOUCH_RESTING = 1, TOUCH_NON_RESTING = 2, TOUCH_NON_RESTING_AGAIN = 3, TOUCH_THIRD_TOUCH = 4, TOUCH_EDGE_REGION = 5, //only observed on magic trackpad - seems to occur when starting at the edge. TOUCH_SIXTH_TOUCH = 6, TOUCH_GROWING_FROM_EDGE = 7, //both cases 12 and 7 seem be used for palm-rejection scenarios TOUCH_EIGHTH_TOUCH = 8, TOUCH_NINTH_TOUCH = 9, TOUCH_TENTH_TOUCH = 10, TOUCH_ELEVENTH_TOUCH = 11, TOUCH_COMING_FROM_EDGE = 12 //both cases 12 and 7 seem be used for palm-rejection scenarios //other states observed but unknown - 4 (seems to consistently occur when I have three fingers down. // likely occurs in certain pad regions) // };