Building this website was a way for me to both learn HTML/CSS and provide an alternative to the standard one-page resume. This project will be in progress indefinitely as I play around with CSS and add more to my resume. I built this website from scratch using HTML/CSS. Having now worked with React Native, I am open to using ReactJS for future iterations and use their built-in libraries to make the site more interactive.
Allergen Alert was developed in Fall 2020 as a semester-long group project for CS 506: Software Engineering. The application allows a user to set a predetermined diet by selecting from a list of preset categories or manually entering ingredients. Whenever a user scans a valid UPC code or searches for a food by name, the ingredients in that food are checked against the user's restrictions to determine whether or not that food is safe. If the food is not safe, it will tell the user which category and ingredient caused the determination. The food can then be added to a grocery list, a list of favorite foods, or a list of flagged foods (supposedly acceptable foods that may have elicited a bad reaction). If the user flags a number of foods, the application will give them a recommendation of common ingredients to potentially restrict.
The application was developed using .NET Entity Framework Core (C#) for the backend services and React Native for the mobile application UI. Search results were done through an API by Edamam for their database containing UPC codes, food names, ingredients, and photos for hundreds of thousands of foods.
Having gone into this course knowing virtually nothing about full-stack development, my initial role was testing. I achieved 96% code coverage in the backend with an overall coverage of 80% for both frontend and backend. As I grew more comfortable with the frameworks and languages involved, I was able to develop some screens in the frontend and some services in the backend.
What I learned:
This is a basic Universal Windows Platform applicaion to add, update, and delete basic customer information. I used this program to gain some exposure to the frameworks and tools I will be using to develop software for Les Moise. The REST Api was created using Entity Framework Core and is connected to an Azure SQL Database. The Api itself is hosted on Azure's Api Management platform.
What I learned:
Software Development
This is an extension of the customer software I built earlier. I included the ability to attach stringing work orders to individual customers. This project is still in development, but some of the features implemented appear below.
What's left to do:
This is a project that I worked on as a final project in BME 462: Medical Instrumentation. The goal was to build a circuit that could interface with a 3D-printed prosthetic hand using analog, circuits, a microcontroller, and a push-pull solenoid. The analog filter amplifies and filters myographic signals from the forearm through skin electrodes. A digital rheostat allows for an adjustable gain on the instrumentation amplifier, an amplifier necessary to prevent the loading effect caused by the high impedance of the skin's surface. This adjustability proved necessary since the Q value of the active bandpass filter was low, putting the maximum gain of that amplifier much lower than the theoretical value. The level shifter at the end attenuates the gain but raises the signal to an AC ground of 1.65V so that it can be read by the microcontroller.
On the digital side of things, the microcontroller determines whether or not to push or pull on the solenoid (open or close the prosthetic hand). The analog voltage was sampled at 1000 Hz and passed through a 24th order DFII SOS IIR Butterworth filter to remove the 60 Hz powerline noise within the passband of the analog circuit. The signal is then rectified and averaged among 1000 past values. If this average is determined to be higher than a threshold voltage, it sends a current through the solenoid, generating an EMF that pulls the piston in, closing the prosthetic hand.
Unfortunately, we were unable to interface with an actual prosthetic hand. There would have needed to be some gear system to provide extended displacement that the solenoid did not provide.
#include "mbed.h" #include <stdlib.h> #include "coeff.h" #define N 1000 #define thresh 0.51 float v[12][3]; // the intermediate values used in the SOS filter Serial pc(USBTX, USBRX); SPI spi(D11, D12, D13); //MOSI(D11, Nucleo) => SDI(4132-103, chip) , miso(D12, Nucleo) => SDO(4132, Nucleo), //sclk(D13, Nucleo) => sclk(4132-103) DigitalOut cs(D7); // CS(D7, Nucleo) => CS(4132-103, CS) AnalogIn input(A5); DigitalOut output(D2); Ticker sampler; void write_rheostat(unsigned char res); void process_input(); double buffer[N]; double sum; int curi; int main() { sum = 0; curi = 0; write_rheostat(0x04); // 387 Ohm sampler.attach(&process_input, 1.0/N); } void process_input() { sampler.attach(&process_input, 1.0/N); // reset sampler so it achieves sampling rate of 1/N double raw = input; int i; double filtered; for (i = 0; i < B_SECTIONS; i++) // Attenuate 60Hz noise with DFII SOS filter { v[i][0] = raw - B[i][4]*v[i][1] - B[i][5]*v[i][2]; filtered = B[i][0]*v[i][0] + B[i][1]*v[i][1] + B[i][2]*v[i][2]; v[i][2] = v[i][1]; v[i][1] = v[i][0]; raw = filtered; } // Add value to buffer and average sum -= buffer[curi]; filtered = 0.5 + abs(filtered - 0.5); buffer[curi] = filtered; sum += filtered; if (curi == 0 || curi == N/2) // Check average at intervals of 0.5 seconds { if (sum/N >= thresh) { output = 1; } else { output = 0; } } curi = (curi + 1) % N; // Increment ocinter } void write_rheostat(unsigned char res) { //Chip must be deselected (aka set high) cs = 1; spi.format(8,0); // Setup the spi for 8 bit data, high steady state clock, spi.frequency(10000000); //set SCLK to 10MHz //Before reading or writing the chip must set the chip select low cs = 0; //This is where we TALK to the device and tell it what you want. pc.printf("Writing to SPI\n"); // Write to wiper 00 spi.write(0x00); // Set resistance spi.write(res); //spi.write(0x45); // 5.5k //spi.write(0x5F); // 7.5k //spi.write(0xFF); // 10k // Set chip select to high to stop writing cs = 1; }
I have attached a research proposal done for a core technical writing class for my engineering undergraduate degree. I propose research into using blockchain technology to secure a distributed sensor network. My motivation for pursuing this topic is that I wanted to explore an area that combined hardware and software. I have had an interest in IoT devices since I purchased one of my own to interface with various sensors and make connections using Wi-Fi and Bluetooth. I am particularly interested in the use of smart IoT devices in healthcare applications as a potential career path, an area with a need for secure data transfer. Furthermore, blockchain technology has been a popular topic because of its application in cryptocurrencies. However, I believe that blockchain has value in other applications, including IoT.
Independent Study
This semester (Spring, 2022), I will be working with an optogenetics lab on campus to increase the throughput of their research experiments. I will be making modifications to the optoPlate-96 so that it can be moved by an automated workstation.
Microcontrollers
I have been playing around with a Meadow F7 by Wilderness Labs. The board is programmed in C# and allows access to all of Microsoft's .NET Standard libraries. Recently, I have been learning how to interface with sensors, small motors, and TFT displays. I am currently learning how to use the WiFi and BLE capabilities of the board. I will be sharing my progress with this board on my projects page.
I have also purchased an Arduino board which I will be using to familiarize myself with the platform and build some small projects. These projects will also be uploaded to my website and I will hopefully get that code published on my GitHub account.