Electronics > Projects, Designs, and Technical Stuff

APDS9960 Pro - making better gesture recognition module for Arduino and others

(1/4) > >>

I am working on a new gesture recognition module for Arduino. My module provides two advantages over existing generic modules:
1) It measures speed and angle of hand motion (not limited to 45°!) very reliably, watch my two-minute-long video and see for yourself.
2) It has separate output pins for all gestures - single module easily can replace few mechanical buttons (only i2c in mini version).
3) USB Type-C port for direct PC connection - can used as HID device for computer games / music creation / no programming

UPDATE (November 18, 2023)
Starting to release an algorithm

UPDATE (August 9, 2023)
- Project is postponed. I am out of money for prototyping, maybe next time
- No luck with money prize from HICOOL either. Shortly after my pitch deck I discovered that my project has "failed" status.

UPDATE (June 20, 2023)
- Added 3.3v/5v GPIO and breadboard compatibility
- Entered 2023 HICOOL Global Startup Competition (plus two other modules)

UPDATE (June 18, 2023)
A good progress on compatibility with Arduino. Added USB-C connector. Bought cheapest foldable photo studio box (little box with LED strips) and rotating stand. Tight on money already. I have almost everything ready for payment processing and shipment. Just need to do few more iterations to make product good enough for shipping.

Started to work on PCB design, here is preliminary pin arrangement:

UPDATE (July 11, 2023)
Correct pinout will be available in first message.

Basic mode pinout.
By default,  module will work in BASIC mode. This mode provides 12 separate outputs (10 gesture events + proximity event + fast motion event). It is especially convenient for novice Arduino users: choose pins for gestures you like and connect them to Arduino inputs.

A1 - Up
A2 - Down
A3 - Left
A4 - Right
A5 - Up-left (45°)
A6 - Up-right (45°)
A7 - Down-left (45°)
A8 - Down-right (45°)

B1 - 5v
B2 - Ground
B3 - Proximity detected
B4 - Fast motion detected
B5 - I2C_SDA
B6 - I2C_SCL
B7 - Clockwise rotation
B8 - Counter-clockwise rotation

Advanced mode pinout.
Module can be configured to work in ADVANCED mode, with different pin arrangement:

A1 - Up
A2 - Down
A3 - Left
A4 - Right
A5 - Clockwise rotation
A6 - Counter-clockwise rotation
A7 - Motion speed (bit 0)
A8 - Motion speed (bit 1)

B1 - 5v
B2 - Ground
B3 - Proximity (bit 0)
B4 - Proximity (bit 1)
B5 - I2C_SDA
B6 - I2C_SCL
B7 - TX
B8 - RX

In advanced mode,  45° gesture events are indicated by simultaneous activation of Up/Down/Left/Right pin pairs:
A1 & A3 - Up-left (45°)
A1 & A4 - Up-right (45°)
A2 & A3 - Down-left (45°)
A2 & A4 - Down-right (45°)

Idea is to make it usable even with simple GPIO logic using Arduino/Raspberry PI without using any libraries.
I would like to hear any suggestions, especially if you are planning on using such module.

It's hard to understand the meaning of the various GPIOs and serial buses unless you tell us about the actual sensors you intend to use. ;) 
Two general recommendations:

(a) Don't overdo it an try to be all things to everyone. You end up with a complex board, taking many I/Os, and it is unlikely that many users will want the exact same complement of sensors. Modular is better, I'd say, especially when serving a relatively small niche.

(b) Not sure the various dedicated gesture GPIOs are needed. This will be connected to a microcontroller, right? My preference would be to use SPI (or maybe I²C) only, and minimize the number of hardware connections and pins required.

Sensors are apds9960+vl53l0x+additional color sensor. Idea is to make long range proximity effects possible when user approaches sensor from 2 meters (vl53l0x), an invite for gesture interactions and standard proximity stuff. GPIO outputs are for those who need simplistic outputs, like mechanical buttons. Thank for your comments, I am actually start thinking about covering advanved pins with some plastic cap to make it more friendly for beginners, just plug gpios to Arduino, no need to configure , no need for libraries. Plus advanced mode through i2c.

Working on PCB layout of gesture processing module. Below is current layout with pins description.

Currently I use four 2.54mm pitched single row 8-pin headers for user connections and
four 1.27mm pitched 2x2 headers for inter-pcb connection between processing board and sensor board.
I am trying to keep module small, around 30x30x10mm. Rotational fingertip gesture is usually below 30mm in diameter. Also, it is possible to put several modules in a row or matrix.

Next steps:
- need to find a room for USB type C connector and linear regulator
- need to add level shifters for 5v compatible outputs
- start routing of sensor board. It will be three different sensors (apds9960+vl53l0x+...) or four sensors (3 x APDS9960 + single vl53l0x)
- order small batch of modules and try start to sell them
- start work on more detailed usage examples


[0] Message Index

[#] Next page

There was an error while thanking
Go to full version
Powered by SMFPacks Advanced Attachments Uploader Mod