I’m a Product Engineer, Game Developer, 3D/CG Artist/Animator with degrees from Cornell and Brown University in electrical engineering. I have industry experience with both software and hardware design and development, characterization, applications, full pipeline development, and team management. I currently lead a team of 30+ developers and creatives at Beyond Studios.
Below is a timeline and running log of achievements and significant life events—which outline my interests in 3D/CG, game development, robotics, medical device design and applications, neuroscience, particle and astrophysics, community service, fine and performing arts, athletics and fitness, extreme sports, nature, philosophy, psychology and more.
Leadership
STEM + Youth Mentorship
Community Service
Engineering
3D Art
Performing Arts
Classical Arts
Musical Arts
Adventure
Travel
Hands On
Creative
Team Lead: E.C.E.
Intel-Cornell Cup Robotics
Directed more than 60 graduate/undergraduate engineers to implement robotic solutions using Intel Technology to serve as examples for collegiate teams who compete annually with novel solutions using the same tech. Winners get research funding from Intel.
Coordinated over 60 Undergraduate and Master’s Cornell Engineers to host a national, annual college-level embedded design competition, sponsored by Intel. Built and documented embedded design examples to empower student teams to overcome difficult engineering problems on their way to inventing embedded technology for the competition.
Project Contributions: Directed the assembly of electrical systems for a virtual reality roller coaster based on a small-scale model. Also directed continued improvements to R2D2 and C3PO replicas and 4-wheeled Modular Robots (Modbots). Oversaw design and documentation of power systems, motor selection and control, sensor selection, signal processing and localization, applications of FPGA’s, and development on various microcontrollers including the Intel Edison and Arduino.
Relevant Achievements and Recognitions:
Project highlighted by a keynote speaker at Maker-Con 2014 alongside Intel CEO, Brian Krzanich.
Project lab selected to aid the Higher Education Alliance’s response to the White House OSTP’s call for innovation in the STEM fields.
Project has been highlighted at Disney World annually, and at NASA’s Kennedy Space Center in 2015.
LabGloves brings the functionality of a high end digital multimeter to anyone’s fingertips for an affordable price. LabGloves was conceptualized as a way to simplify an individual's in lab experience by providing the measurements a Digital Multimeter would at the user’s fingertips, but it grew into more. Our group made an effort to take advantage of the Atmel 1284P Microcontroller’s versatility to make an affordable device with functionality found in high end MultiMeters with a slick user interface for intuitive mode control.
All the functionality of LabGloves is made possible through the Atmel 1284P microcontroller and peripheral circuits. Essentially the wearer only needs to select a mode and touch their fingertips to a circuit to gather autoranging readings. This makes it easy to get readings in spaces that a multimeter would be hard to handle, such as behind a wall, in tight spaces, or anytime it proves difficult to hold two hands to a component for analysis.
Figure 1. LabGlove User Interface Module
Figure 2,3. Wired Probes on the LabGlove & LabGlove with the forearm module attached
LabGloves Concept
Hands are one of the most highly utilized parts of the human body and especially the fingers which interact with the external environment the most. This thought kindled our group's thought process to design a wearable device that will take an advantage of using the fingers for making electrical measurements.
It is important in the future development to realize the entire design of the LabGloves in a form thatcan fit over the flat surface of the hand. We talk more about this future planned design in the 'Future Work' section.
High Level Design
LabGloves is comprised of analog signal processing circuits that convert every reading into 5V logic level signals for pins on the Atmega 1284p MCU. The MCU then calculates readings and displays them on our LCD display, which is also mounted on the glove. The user can also change reading modes with a capacitive touch button, as indicated by the user interface displayed on the screen.
Figure 4. High-Level Design Block Diagram
Rationale and Inspiration:
Our goal while brainstorming this project was to create something that could be useful to many people in every-day applications. We finally arrived on the idea of LabGloves based on the observation that people often find tasks more convenient when everything they need is at their fingertips. This allows people to avoid carrying tools around, and makes it so they can use their own hands to manipulate their work in an intuitive way. With this in mind, we were sitting in ECE 4760 lab (directed by Dr. Bruce Land at Cornell University) using a probe when we finally found our inspiration to design a wearable multimeter.
We found that this was a project unique from work done by previous groups in ECE 4760, and after a search of the US Patents and Trademark Office website it appears this is something that has yet to be attempted elsewhere as well. Particularly, we found that voltmeters, frequency measurements, and similar meters have been developed on microcontrollers—such as the PIC variant, or on the Atmega 644 in previous ECE 4760 labs—but that fully functional, autoranging multimeters seem only to exist as commercially developed products, such as the one pictured in Figure 5 -
Figure 5. Commercial Multimeter
Naturally, our goal was to design and build an autoranging multimeter with as many measurement modes as possible given a month long timespan for development. The outcome was a wearable device that can perform Voltage, Temperature, Resistance, Capacitance, and Frequency readings (and subsequently Pulse Width and Duty Cycle measurements), and that can perform connectivity, diode, and transistor testing. This is significantly more functionality than past projects and labs from ECE 4760 or found in online searches. Moreover, because we successfully implemented autoranging beyond that done in the past in 4760, we feel that our project is very successful considering our initial goals.
Background Mathematics:
As our digital multimeter (and all digital multimeters) actually only measure voltage, we had to use several algorithms to extrapolate all readings from voltages. Refer to Table I below.
Resistance
Capacitance
Frequency
T is determined by the timer1 capturing positive edge from source.
Pulse Width
Determined by capturing negative edge of signal from source.
Duty Cycle
Temperature
Table 1. Equations Used in the Calculations
Logical Structure:
Lab gloves boots to a splash screen where the user can then select a mode. Once a mode is chosen our MCU changes port configurations to select peripheral circuitry that is appropriate for each mode and makes the applicable calculations for measurements, such as what resistances to select on a MUX for proper ranging.
Hardware Tradeoffs:
We decided to use an analog DEMUX to autorange resistance and capacitance for this project, and our voltage input runs through it, so we will have to use relays of some sort if we want to work in higher powered systems in the future because the CD4051BCN 8:1 analog DEMUX has voltage limits of around 15V and current limits of up to 1 amp. For this reason, we decided to have a separate high voltage sensing mode in which we send voltages higher than 5V through a 1/10 divider to a different ADC pin on the MCU than for LV modes.
Existing Products:
Much like our project, modern digital multimeters actually only measure voltage. Current is measured as the voltage across a shunt and resistance is measured by measuring the voltage across the resistance with a constant current flowing through the resistance.
How a digital voltmeter works internally depends on the manufacturer. The early meters used a dual-slope integrating digital conversion technique that was reasonably accurate and good at suppressing noise. It is slow however, about ten readings per second or less. With modern digital signal processing, over-sampling 1-bit delta-sigma converters can perform with better accuracy, and usually more rapidly.
A side benefit to digital signal processing is the ability to measure time intervals, and hence frequency of an AC signal, or the time to charge a capacitor with a constant current to a specific voltage, and hence measure capacitance. Virtually all digital meters, and some analog meters, feature a "beeper" to allow continuity (low resistance, open or closed circuit) measurements without viewing the meter. Some "multimeters" now even include low-bandwidth waveform display and recording functions, much like an oscilloscope.
LabGloves has the advantage of timers on its MCU so it can measure all of these things, and its placement on the user’s fingertips allows for operation that is unique from any multimeter on the market. With continued improvement in read outs, we are confident that our project has great potential to make an impact to multimeter users everywhere.
Integrated Design
Capacitance measurement:
The approach we used was similar to that used on the ECE 4760 Labs listing from Fall 2014, which is what we will base this section of the project description on. The idea is to measure the time it takes for a RC circuit to charge a capacitor to a given level. If R3=R4 in the schematic below then the level will be v(t1/2)=Vcc/2. Specifically, we used the internal analog comparator as shown in the following diagram to trigger a timer1 event. In our case, we connected a trimpot in place of R4 to fine tune the capacitance meter for accuracy. Since R2 will be known, we can get C because the voltage on the capacitor, v(t)=Vcc(1-exp(-t/τ)) with τ=(R2)*C. We used an analog DEMUX to select different values for R2 (1k 20k and 100k) to autorange the capacitance readings.
The resistor going to PortB2 should be around 100 ohms to limit current. R2 must be chosen such that the capacitor charging time is not too short or too long, so that must be considered when implementing autoranging. If the charge time is too short you will lose measurement accuracy. It if is too long, the timer will overflow.
Figure 6. Simplified Circuit for Capacitance Measurement (Credit Bruce Land)
Our program executes in the following order:
Set PortB3 to an input.
Drive PortB2 to zero by making it an output and wait long enough to discharge the capacitor through 100 ohms. Clearly, to discharge to zero volts with 1% accuracy, R2>100*(100ohms).
Convert PortB2 to an input and start a timer. The capacitor will start to charge toward Vcc.
Detect when the voltage at PortB2 is greater than the voltage at PortB3. That is, you will have to record when the comparator changes state using the timer1 input capture function, which is set up to be triggered by the comparator. Using input capture gives better timing accuracy and more dynamic range.
Switch to a smaller resistance on the analog DEMUX if your timer overflows, or if you read an unusually small charge time (such that your resolution is not enough for good accuracy) switch to a larger resistance.
Repeat
If you are using an AVR Microcontroller, something the 4760 lab page mentions is that if you decide to print floating point numbers to the LCD you need to follow the directions in Using sprintf function for float numbers in AVR-GCC the AVRstudio directions are at the bottom of the page, but NOTE that one library is left out. The correct summary is:
Open the Project>Project Configuration dialog box, then go to the custom options , then select linker options, and then add the
-Wl,-u,vfprintf -lprintf_flt -lm and -Wl,-u,vfscanf -lscanf_flt -lm switches.
Low Voltage (<= 5V), High Voltage (5V< v < 20V), Resistance, and Frequency:
Again, for voltage, resistance and frequency measurements we referenced work done in a 4760 lab from Fall 2012, which can be found on the course page. Something to first note are that the 1k resistor and diodes protect the analog input (A0) from over/under voltage. See Figure 3 below.
Figure 7. Circuit for Resistance, Voltage, and Frequency Measurements
Low Voltage measurements were taken by setting up the internal ADC to take measurements from A.0 on the MCU. We set Vref to Vcc, and found that there were good accuracy measurements above 100mV. However, one could autorange voltage better by changing Vref internally for smaller, more accurate measurements. High voltage measurements were taken using a voltage divider that divides any input voltage by 10.
We have 5 decade resistors (Green Box in Figure3) from 100 Ohms to 1 Mega Ohm (shown in Figure3) connected to an analog DEMUX. We turn them on (one at a time) to autorange and measure resistance. The tristate i/o pins make it very easy to connect a resistor to ground (output-low), Vcc (output-high), or disconnect (input-no pullup). We are measuring the voltage that results from division with a known resistance value coming from the DEMUX, so if we denote one of the five resistors as R, and the resistor-under-test connected to the probe as Rt (Blue Box in Figure3), then Rt = R/(Vcc/Vin - 1). The sensitivity of the resistance measurement decreases as Vin increases, suggesting that we should keep Rt<
B2 is the input to the internal comparator, which we also use for capacitance measurements, but we use it here for frequency measurements. B3 is the reference pin for the comparator, which is divided to Vcc/2. Similar to making capacitance measurements, we set up the timer1 interrupt to trigger at the positive clock edge, and set a timer that counts on a 0.5us timescale as the prescalar for timer1 is set to divide the crystal frequency by 8 in our code. We autorange frequency by changing the timer 1 prescalar.
Additionally, we also detect the pulse width of an input signal by interrupting on each positive and negative edge on the comparator connected to timer1 and keeping track of the timing for both positive and negative edges. We are therefore able to calculate the duty cycle of an incoming wave using , where T is the period of the incoming signal.
The probe input goes to the ADC and internal comparator. This example from the ECE 4760 course page (ADCtestGCC644.c, uart.c, uart.h, project zip) shows how to set up the A/D converter to read a trimpot.
This example (also from the course page) shows how to get higher ADC accuracy by putting the MCU to sleep during the conversion to cut down digital noise. Note that some special timing code has to be added to make the UART work correctly when you put the MCU to sleep.
Something Important the 4760 lab we referenced mentioned is that you may want to check the V-reference impedance and the capacitance (if any) placed from Aref to ground on your board. On the Mega644 board it is 30 kohm with a 20 nF capacitor placed from Aref to ground. This implies the time-constant to CHANGE Vref is 3e4 x 20e-9 = 60e-5 or 600 microseconds! This means that to get 8-bit accuracy after you change Vref, you must wait 1/256 = exp(-t/600) or t~3 mSec before doing another conversion! The calculation is similar for any board after inspecting the datasheet.
Transistor Testing:
The test sequence for a transistor works like this in our code:
Set D2 High and read D1 and D3. If D1 is High, BE junction conducts, otherwise not. If D3 is High, BC junction conducts, otherwise not.
Set D1 High and read D2. If D2 is High, EB junction conducts, otherwise not.
Set D3 High and read D2. If D2 is High, CB junction conducts, otherwise not.
Figure 8. Transistor Testing Circuit
Now, if only the BE and BC junctions conduct, the transistor is of NPN type and is working fine. And, if only the EB and CB junctions conduct, the transistor is still normal but the transistor type is PNP. All other cases indicate the transistor is no good (such as EB and BE both conduct, or BC and CB are both not conducting, etc.).
Diode Testing:
This is also taken care of at the low voltage probes. This essentially checks to see if the diode approximately drops 0.7V (as per standard designs) through ADC0 on our MCU. If 5V is passing to the ADC, we know the diode has broken down and basically become a short, otherwise, if there is no voltage on the ADC, we know that either nothing is connected or the diode is connected in reverse bias, which we display on our LCD.
Temperature Testing:
For Temperature Sensing we used the LM35 Precision Centigrade Temperature Sensor. A quick look at its datasheet reveals that the LM35 has a range of 2 ֩C to 150 ֩C when no load on the output. The voltage change with respect to temperature is basically linear, so we simply multiplied the incoming voltage detected by ADC7 with a scalar.
Connectivity Testing:
Connectivity testing was done by connecting an LED from pin D.0 to the cathode probe. When in this mode we set D.0 high, so when something is connected across the probes, current flows from D.0 through the LED and to ground, illuminating the LED.
Everything was carefully soldered onto a two level, through hole PCB configuration, which we then mounted on an arm strap which holds the MCU. Connections are then soldered from there to the LCD display, touch button, and testing circuits on the gloves.
LCD Display:
The LCD display used in the setup is a 16x4 dot matrix display – EA DOG-M 163W-A series LCD. More information about the display can be found here in the datasheet. We had to write our own library functions for interfacing with the code. The header and C files for the LCD are attached at the end in the appendices section.
The backlight for this LCD comes as a separate module- we got the EA LED55x31-B backlight module from DigiKey and interfaced it with the LCD module package by soldering the back light LED pins. The LCD was interfaced using +5V 4 Bit interface connected on the PORT pins C0-C3 and control pins on the C5-C7.
Detailed connections of the LCD can be found here in the overall schematic.
Programmer:
We used an AVRISP MK II programmer provided by Prof. Bruce R Land. The ISP programming frequency was set to 4 MHz for higher writing speeds. Fuse bits and JTAG connections were checked as per ECE 4760 Lab 1 instructions. We did experience some glitches while programming the MCU when it would automatically reset itself while programming. Resetting the system helped us to overcome this problem.
Figure 9.Test Circuit Used for Debugging
The Overall Multimeter Schematic can be found here!
ISR (TIMER0_COMPA_vect) compare vector interrupt is used for scheduling the tasks. The main function ensures that the functions are timed based on the value of ‘T’ loaded into the ‘time’ and when it goes down to 0 the ISR triggers executing the functions in the main ( ).
ISR (TIMER1_CAPT_vect) – The ISR capture vector interrupt is to capture the value of ICR variable for making the frequency and capacitance measurements. It is linked internally with the analog comparator which executes the ISR when the comparator triggers. This ISR also consists of a logic that switches the ‘positive edge detect trigger’ to the ‘negative edge detect’ for calculating the Pulse Width and Duty Cycle without affecting the ‘time_capture’ variable used in capacitance measurements.
Key Detect Function & Debounce State Machine – The capacitive touch breakout board is interfaced on the PIND.0 of the MCU. The output pin of the board goes HIGH when pressed and is otherwise LOW. Thus, by detecting the state of the PIND.0 we detect the switch press and pass it through the debounce state machine for avoiding the bouncing of the switch. We are using a time constant of 50 ms to check the debounce, since the average fastest human response is > 100 ms.
Set and Reset PIN Logic – In different modes of the DMM we are setting the PINS of the MCU to a logic level not required by other modes. Thus, it is required to set the PORT PINS based on the system_state and reset it back once the mode is changed. This logic takes care that the PINS are restored back in the state they were by default so that the other modes are not affected. This gives us the flexibility of setting the port PINS the way we want in any given mode without bothering about the other modes.
Main ( ) Function – This is where the program enters at the beginning. It runs the initialize ( ) at the beginning to initialize the LCD, timers, PORT PINS and DDR for all the PORTS. After that the main ( ) simply acts as a scheduler to schedule the tasks at a given rate fixed initially. The main ( ) executes in a while (1) loop and runs continuously until the system is shut down by the user.
Initialization Function – As described earlier the initialize ( ) takes care to set all the PINS and TIMERS along with setting up the ADC and initializing the LCD display, setting up the global interrupts. It sets up different flags and system_state in a way that they are used throughout the execution of the program. This function gets called at the beginning of the main ( ).
Specifications
Specifications - (Includes Technical and Product Specifications) We need to include the actual expected specs and how much did we get them in the performance. Make a comparative and statistical study of it.
A. Technical Specifications -
Specification
Speed
Accuracy
Safety Considerations
Low Voltage (<5V)
This is limited by the rate at which we are able to change Vref: the time-constant to CHANGE Vref is or 600 microseconds.
Actual
Measured
100mV
100mV
500mV
510mV
1.00V
1.02V
1.75V
1.77V
2.51V
2.57V
3.63V
3.69V
4.86V
4.93V
We implemented a High Voltage alert for when the voltage approaches 5V, and we were sure to keep the low voltage probe separate from the high voltage probe.
High Voltage (5V+)
This is also limited by the ADC.
Actual
Measured
2.77V
2.77V
5.35V
5.35V
7.04V
7.13V
10.00V
10.20V
12.81V
12.99V
14.19V
14.44V
19.60V
19.89V
We used a voltage divider on this line to ensure the MCU never received anything close to 5V.
Frequency
You get to the limits of the timer at 45KHz+, and you have overflow below 30Hz.
Actual
Measured
99Hz
99Hz
10KHz
10KHz
45KHz
45KHz
Resistance
Again, this is mainly limited by the speed of the ADC input, and also by the time it takes to find the proper resistance for autoranging (this is usually done on a couple of iterations after the ADC is complete, on the order of us).
Actual
Measured
100 Ohm
104.2 Ohm
1.00M
1.00M
50 Ohm
50 Ohm
10.0K
10.0K
75
76.7
51K
53K
100K
101K
Capacitance
Like Frequency, this is limited by the 16 bit timer in the Timer1 Capture Register. This can be helped by simulating a 32 bit timer with an overflow count, and it can be helped by autoranging.
Actual
Measured
180pf
200pf
1uf
1.02uf
10uf
9.72uf
5uf
5.07uf
17.3nf
16.7nf
Table 2. Technical Specifications for the LabGloves
We set our goals high for this project, aiming to have an accurate autoranging multimeter capable of many of the functions of commercial devices all at your fingertips, and we feel we certainly attained our goals considering our generally low error in measurements, the fact that we provide 11 unique and intuitive measurement modes, and because the final design was certainly wearable—and looks pretty cool once you strap it on!
We reused code from our previous labs in 4760, including the capacitance measurement lab and the tutorials from the 4760 Digital Multimeter lab held in Fall 2012; we also got a kickstart on the libraries for our LCD display from a tutorial on the Electronics Assembly website (the device’s manufacturer). However, all other code implemented in this design was written for the first time by our group specifically for this project.
Standards
Furthermore, our design adheres to the IEE Code of Ethics Chapter on Dielectrics and Electrical Insulation, as we wanted to maximize safety for the wearer of LabGloves.
Intellectual Property Considerations
Our Software was written entirely by our group with the exception of a portion of the code used for our LCD libraries written by Electronic Assembly, Inc, and the bones of our programs relating to Resistance, Capacitance, and Voltage measurements, which were laid out by Bruce Land for Cornell ECE 4760.
Furthermore, our physical design, to our best knowledge, is entirely unique and has not been produced before or protected by patent, trademark or copyright. We have given proper acknowledgement to all third parties who helped us to develop our design project.
A comprehensive list of ethics that we followed while designing our device can be found on the IEEE website.
Legal Considerations
To our knowledge, our device does not violate any legal regulations. However, as a disclaimer, users should be advised that our device is not foolproof, and the user must familiarize themselves with its limits, as indicated in the user interface, and the ranges laid out above in the specifications section.
Future Work
Miniaturize using a custom PCB – We would like to design and fabricate a custom printed circuit board (PCB) which can literally fit the size of an average human hand. This will consist of a combination of the circuit components, a Lithium Polymer battery and a flexible LCD display. We even might consider making use of flexible printed circuits so that it gives the user freedom of flexing the hands without worrying about the rigidity of the setup. This will make the device “wearable” in its true sense. We plan to use surface mounted device (SMD) components for all the existing counterparts on the circuit.
We did an extensive patent search on the existing "Glove" based wearable technology using USPTO website and here are the results we obtained
Acknowledgements
We would sincerely like to acknowledge Prof. Bruce R Land for his overall project guidance and timely smart suggestions which helped us to complete the final project in the provided time frame with required finesse.