Kyle Zelnio Computer Engineer at Iowa State University

My Portfolio

My name is Kyle Zelnio, and I am a Computer Engineer at Iowa State University. I am planning to continue developing websites and user interfaces through many different medias wherever the world needs me.

Projects

From Mars rovers to MIPS processors, These are my projects that I enjoyed during my time at Iowa State University.

See More

Senior Design

Senior Design is a class that all CprE students take in preparation for real world projects. For my project I work in a team of five and we design a Stroboscope for Mechanical Engineering labs.

See More

Work Experience

Technical work experience and internships. The skills that I have learned and the projects that I have completed outside of school.

See More

Featured Projects

Mars Rover

CyBot Mars Rover

  • The Task

Your team has been asked to develop an interplanetary rover using the VORTEX platform. Both NASA and the European Space Agency have heard about your work with this platform and have assigned your team the job of designing the rover.

Check it out
Processor

MIPS Processor

  • Assembly Level Programming

During this project my partner and I implement a 5-stage pipelined MIPS processor. The architecture supported 6 MIPS standard instructions: ADD, ADDI, LW, SW, BEQ, J.

Check it out
CySwapper

CySwapper

  • Android / Web Application

Our team of four set out to create a item trading platform that was integrated with the dorms on campus for swapping useful items that not everyone can get easily.

Check it out

Mars Rover - The Task

grid

Photo by Sarah Coffey

Your team has been asked to develop an interplanetary rover using the VORTEX platform. Both NASA and the European Space Agency have heard about your work with this platform and have assigned your team the job of designing the rover. Delegating this task will allow these agencies to focus on developing a launch vehicle.

The primary task of the rover is retrieval; other international teams are busy working on a package that will collect rock samples and perform analysis. The VORTEX platform will be landing in Martian terrain that is unknown to you. The only knowledge of the terrain you will have is that which
the VORTEX transmits to you.

We were given a robot and a task to navigate a maze remotely with what sensors were on the bot already.

The Rover needs to respond quickly to the bump and cliff sensors. Because of this, the VORTEX cannot wait for a response from the Mission Control on how to respond. Therefore, your program should have some preprogrammed response to the bump sensor. Not responding to a bump sensor being pressed will result in loss of points. The lack of response will be indicated by the VORTEX continuing to drive forward while still in contact with the object. Some latency is acceptable, but after about a second the energy loss resulting from this error could be detrimental to the mission, so points will be taken off from this project part for each incident.

The maze

The maze was a grid of one meter by one meter tiles that is surrounded by white tape. One tile was removed as a hazard to not fall into and there were PVC poles that are randomly placed around the grid that you have to avoid bumping into. As a win condition, there were four smaller poles in the corners of a tile and a black circle placed on the ground that we had to land on to be marked for “retrieval”. Upon retrieval, we were able to play a song and a little victory dance to show we were done to the observer.

The Sensors

  • Left and Right Bump Sensors
  • Left, Right, Front Left, Front Right Cliff Sensors
  • Left, Right, Front Left, Front Right Light Sensors
  • Sweeping IR and Sonar Sensors

The Interface

radar

GUI Built in Visual Studio

This was a group project, included in my group was David Bis and Layton Nelson. We decided to create a windows application that would display a radar plot that showed us the poles as lines in front of the robot.

David worked on adapting our existing lab code to send the needed data from the sensors in the right format so that our GUI would read it correctly. Layton created the plot code and worked with David to get the lines to appear in their correct locations. I worked on the application itself, the buttons layout and the sensors all had their own API that Layton, David, and I created to transmit and receive correctly with the Robot code.

This implementation surprisingly worked pretty well and because we were able to demo this project early, we did not have a time limit on how long it took us to find the retrieval zone.

MIPS Processor - Pipelined

Branching Path

The Branch Prediction Path

Creating this pipelined MIPS processor was no easy task and involved many hours testing each individual piece against all 6 instructions.

These instructions were also designed to implement hazard detection and branch prediction to avoid data corruption and increase processor speed.

This 5-stage processor supported the same instructions as a single-cycle processor from a previous project (ADD, ADDI, LW, SW, BEQ, J), however with the added benefits of branch prediction and hazard detection.

The Instructions

  • ADD - Stored the result in a register after adding to registers together
  • ADDI - Stores the result of a the register plus the immediate value (constant)
  • LW - A word is loaded into a register from the specified address
  • SW - A word is stored into a register from the specified address
  • BEQ - This branches the program if two registers are equal
  • J - Jumps to the calculated address in the program

Many labs led up to being able to create this processor that was programmed into a FPGA using a program called Quartus by Altera.

Starting from the beginning we learned how to create registers and multiplexers using NAND gates.

Eventually, we started writing code in Verilog to create ALUs to process addition and subtraction.

Branch Testing

Running the branch prediction

In this lab, you were assigned a partner and my partner was Parker O. my role in this project was to organize each stage in the processor and create new block designs for each step.

Parker was tasked to code the ALU and accompanying blocks that required Verilog, as he was more comfortable on that side.

Once we believed that we had each part in it's respective places, we took turns connecting each block before we needed to test.


We both learned a lot, from branch prediction and how that helps performance, to how important hazard detection is to avoiding memory corruption.

These skills were acquired because of the linear design of the class allowing us to look back on previous design functionality.

CySwapper - Android / Web Application

Block Diagram

CySwapper Block Diagram

During my time in Web Development class my partners and I decided on a project that would involve a phone app that would allow students to connect to each other by sharing items in the dorms.

The idea was loosely based on a Craigslist like app where students could offer their microwave or Xbox to another student in the dorm and have the legitimacy backed by the House Advisors.

The application was mainly focused from the Android view where the students would be the majority of the time and where the items were listed.

Users were able to upload a photo and an item description to their specific dorm and the other students could view and request that item.

We created a backend website that users could log into using their Google account for the house advisors to administer the items posted on the app.

Dorm List

CySwapper Android UI

The Users

  • Administrators
  • House Advisors
  • ISU Students

The Actions

  • Post, Borrow, Share Items
  • View Available/Borrowed/Own items
  • View each item's specific info
  • Google Sign-on allowed students to use their Iowa State account
  • Web admin functions allows house advisors to remove inappropriate items
Web UI

CySwapper Web UI

I was mainly in charge of the Web UI front end and worked a lot on the backend of our server that was solely written in Go

Go provided us with a dead simple way of creating a REST Api to allow the android client to easily make JSON requests where the server would take this information and request a change to our MySQL database.

The rest of our team included Layton Nelson, Meghna Chandrasekaran, and Kristina Robinson.

Layton setup the REST Api in Go, Meghna designed the Android interface, and Kristina implemented the database structure. However, we all jumped around and gave knowledge where we could as this was one of our first big coding projects.

Senior Design

The EE 448 lab currently uses a LED Stroboscope from Monarch Instruments that retails for over $469. The CprE department has to replace an entire units over the Summer and pay for repairs on others, costs totaling over $800. This is a bi-yearly expense that is not needed. The department tried explaining the hand held device is expensive and needs to be treated with care but it does no good.

Old Stroboscope

EE 448's current Stroboscope by Monarch Instrument

Matt Post our advisor proposed a project that will use an analog circuit to detect light reflections from a pulsing LED array driven by a micro controller which will count the ticks and translate into an RPM reading.

The device needs to be able to measure shaft speed of a rotating motor up to 8000 rpm's. It needs to be robust enough to handle use from at least 10 sections of ME students over the course of 2-3 weeks. It will have a GUI that can be used on a lab computer.

New Stroboscope

Testing new hardware

In order to make a stroboscope we first had to think about how we were going to get LEDs to flash.

There were three ways we thought we could do this: a Tiva board, an Arduino board, and an AC circuit.

Then we realized in any case we would have some circuit to put together. We thought that choosing between a modular design and a fully connected and soldered circuit would be a few good alternatives.

We also needed to decide how to case the stroboscope, whether it would be mounted or handheld. Finally, we needed to choose between including a physical knob to adjust the speed on the stroboscope or only allowing interaction with the device to happen through the GUI.


On the hardware side, we have been a little stunted because of waiting for parts, however, we do have a simplified version of a stroboscope working using a bench power supply and some extra parts from ETG to create a mock-up design that could prove our idea in practice while we waited on research and parts to come in from shipping.

With this setup we had an arduino with the default Blink library loaded into it which signaled a MOSFET that was being powered from the bench power supply that was lighting up our extra LED array that we salvaged from a magnetic work light.

From testing these lights the bench power supply showed us that we will need at most 2 amps at 5 volts from whichever power supply we end up choosing.

We are working towards a simple PCB design that will allow quick connectors and replaceable parts to be printed then we have to work towards a enclosure that mounts onto the existing motor structure in the Lab.


On the software side, we have started to implement the GUI using Python. In order to create the GUI using Python, we are using Tkinter, which is a Python binding to the Tk GUI toolkit. We have done some testing while trying to implement the GUI; however, the GUI is not yet connected to the functions of the Tiva board that we are programming.

In addition to the GUI, we have also started to work on the PWM signal that we need to send to the Tiva board to allow the LEDs to flash. There is no way of testing thing unless we have all the right configurations completed. We have worked on putting together the the files necessary for the set up and plan to move forward from there.

Work experience

The last few places I have had employment are listed below, for a more detailed report of my work I have attached my resume below.

Solution Center - Customer Success Analyst

(Fall 2016 – Current) Iowa State University, Ames
  • Troubleshoot a myriad of computer problems experienced by faculty, staff, and students
  • Mentor peers one on one to find internal issues and increase customer service quality
  • Lead a team of 15 students in an agile development environment
  • Handle logistics for thousands of VOIP Cisco Phones throughout campus
  • Worked with security team to handle sensitive personal information for students and faculty
  • Wrote trainings and technical documentation to help teammates provide a quicker solution
  • Coordinate solutions for customers across several different teams throughout campus
  • Document new issues that are encountered and improve the internal wiki that stores solutions to problems
  • Train new employees how to solve common problems and how to provide excellent customer service

Sears Manufacturing Co. - Web Developer

(Summer 2018) Davenport, Iowa
  • Developed internal websites which managed human resource’s sensitive employee data
  • Deployed emergency attendance web-app to safely keep count of all employees at location
  • Removed single points of failure by virtualizing old hardware servers
  • Identified networking bottlenecks for shop floor printers and thin clients

Computer Revolutions - Computer Repair

(Summer 2016, 2017, 2018) Bettendorf, IA
  • Diagnosed and repaired computers that had viruses and hardware issues
  • Helped customers in their homes, provided detailed explanations of my work, and answered questions
  • Designed custom computer builds depending on the needs of the client
  • Provided good customer service and documentation throughout the diagnosis and repair process

Download my resume here, last updated 9-24-2018 [PDF]

General Education Reflection

Throughout my career at Iowa State I have taken several classes that weren't directly related to Computer Engineering and had more of a specific focus.

Each class that I took gave me insight on how I might take my career into different fields about the world. However where my main influence came from the work experience throughout my four years.

My work experience showed me how mundane working from a desk can be when you are shoved into a corner typing all day. What really interests me is when my project involves moving around and developing for different departments of the same company.

Throughout my Summer at Sears, I was able to design websites for HR and go around the shop floor testing these websites and troubleshooting on spot with the long term employees.

Being able to move around and see how the company works from the inside kept me on my feet and gave me a new challenge that I faced head on each day.


What my general education actually taught me is how to view a problem from a non-engineering viewpoint. For instance, in my first year I took a Human Development and Life Sciences course.

This class showed me how each person may view a problem much different compared to me depending on their life experiences which you have to accept and it doesn't hurt to take a step back sometimes and view the world from someone else's shoes.

I also took a Russian folk lore class that went through the different folk tales and stories and how they developed overtime and morphed into what they are today.

This is surprisingly similar to how technology in my field of study moves throughout time and is passed down from generation to generation.


Almost every class that I took that wasn't directly related to Computer Engineering has taught me to look past the face value of the problem and understand the original goal.

These classes taught me good ethics behind working with other people working past each other differences to improve the world one computer at a time.

Cumulative Reflection

There was so much to learn in four years at Iowa State, but I think my education here will provide me with adequate experience to move directly into the working world.

Each group project that I have worked on for Computer Engineering has focused on Ethics and the design process with a more professional tone being focused in Senior Design as we are actually working with a real client.

From the weekly meeting with our TA in our CySwapper project it showed us how each design decision can effect the whole project and that it is really easy to go unnoticed without an outside view.

Every group that I was in found this especially difficult because we always became close friends by the end of the first week, but didn't stop us from understanding how to solve problems within our own team management.


Parks Library was a huge resource for me in my four years at Iowa State because of the time I spent there working for ITS. Working for ITS allowed me to meet people that have similar interests in Computer Engineering.

These connections formed study groups and shared outside knowledge from classes we haven't had the chance to take yet, but still gave each other great insight into what home project we should look into before moving on to the next semester.

Coover, the main Computer Engineering building, sheltered me for many late nights pumping out programs for Computer Science, compiling processors on FPGAs, or even remotely controlling programmable roombas.

Every lab I and every other Computer Engineering student has had was held in Coover and the best engineering memories come from inside this building.


My first two and a half years I was in a group called Made to Innovate, specifically CyNest, where we were trying to design an autonomous quadcopter that could swap batteries on the fly.

This class gave me my first look into how the professional projects are managed from proposals to bills of material to design reviews.

Without CyNest and the massive amount of good connections made in that class I don't think I would feel as prepared for the industry, this feeling is continually backed-up by the curriculum in Senior Design.


From creating servers to host Android REST Apis to developing circuits by hand for clients that were assigned us as developers I think that you can never stop learning at Iowa State University.

I cannot recall a dull moment from any semester where I wasn't excited for the next lab or was trying to work ahead in my material at home because I needed to help out my friends with the homework.

If I had to re-do my whole experience here at Iowa State I don't think I could find a single thing to change.

Ethics Discussion

Ethics have changed quite a bit over the century from the first medical practices to what data we can or cannot save from smart phones. It is an ever-changing set of rules defining how an individual follows a code of conduct in certain situations. IEEE is a professional organization that strives to improve and further technology across the world. They have a Code of Ethics that defines how their members should act in certain situations by striving to keep the highest ethical and professional conduct.

The purpose of having a code of ethics, whether you are apart of IEEE or not, is to keep your moralities in check and make the right decision when faced with challenging situations. For instance, one of the most popular moral problems the “Trolley problem” involves a runaway trolley going down a track where you are standing at the lever that can change the direction of the track. Further down the track there are 5 people tied up and unable to move. If you do nothing the trolley will kill 4 people, but if you were to switch the lever the trolley would divert killing only one person. This problem has been studied extensively for years and there are many different versions of it. There is no right answer to this problem, but a code of ethics (with good morals) can persuade people into an option that would keep the least amount of people from getting hurt or possibly an option that would keep people more beneficial to society from death. Whichever choice you choose, that is a part of your ethics and defines who you are as a person in more ways than just theoretical problems.

Imagine that you work in a company that produces life saving medical equipment. The company just released a product that you worked on. Later after release, you discover a flaw in the device that can potentially harm or kill the user. However, the failure rate is only about 1 in 100,000. How does one decide what to do with this information or how to handle the safety of the users? There are a lot of ways that can play into what to decide when faced with a problem like this. I try to look at the number of users, the safety of the user, the privacy of the user, the future of the user, and the future of the product. These factors may not apply to every situation, but it does cover the majority. Now, If the device is only rarely used, would never see 100,000 users, it wouldn’t be as severe of an issue than say a device that is used by over one million people every year. Now, let’s say you bring this issue to a higher up and they shoot it down and say, “don’t worry about it”. From this point, there are plenty of options you can go with. Some may choose to follow orders, keeping the image of the business safe and staying in line. Others may want to keep the users of their product safe and decide to escalate even higher up the chain of command because the issue may be discovered by someone outside the company causing a huge legal battle with your name attached to it. During the class discussion of this problem, my partner and I thought that this would be acceptable to escalate this issue with someone high up as the CEO of the company and see what they have to say about it, and if they did not want to fix it we would go ahead and try and develop a fix for the device and present it to the company. However, my classmates shared that they would rather talk to a lawyer or the companies legal team about this issue and release a public announcement revealing this issue and letting users decide if they wanted to use the product or not themselves. These two solutions take two different approaches to the issue. One, takes the matters into your own hands and allows you to be in the most control of the outcome. On the other hand, the users are forced to make the decision themselves leaving their outcome up to them. As a class, we never came to a consensus of the best option that is the most ethical. There is never a perfect solution to any problem everyone’s ideas are different and as time goes on the morals and ethics of the world’s population will continue to change.

Virtue ethics emphasize virtues of character and mind. For the previous problem that we discussed in class. Some virtues that I would consider trying to attack this problem would be: Fidelity, Charity, and Responsibility. Fidelity is how faithful you are to yourself, your employer, the public, your clients, and your profession. This one is the most important when it comes to the medical field. A medical device can affect anyone at any time. Forgetting about the issue and dismissing it as “it won’t happen to you”, shows lack of fidelity. Everyone should show loyalty and support to everyone regardless of how you know them, who they work for, or how they ended up in your path. Fidelity shows loyalty and support to anyone and everyone. Charity is the compassion and mercy for your fellow man or woman. The act of helping others without being asked upon is the charity you can give to anyone. In this situation, people who use the device have no idea if they will get hurt or not and shouldn’t have to worry about it. Your charity is getting the information out to the right person to fix it or getting people the knowledge about the issue. “Responsibility is the accountability, trustworthiness, dependability, reliability, and recognizing a personal and moral obligation to act for the good of others.” There is no better way to put it. Being responsible for what you may have done or created is on you. Without acting and forgetting about the issue at hand could potentially harm other people and cause damage to yourself, the company, and the trust of that field. Other virtues are still important in different ways; however, I believe that these are the most important to this specific issue. One virtue I believe should be included in the “Virtue of Ethics” is Privacy. Privacy is a basic human right and it should be everyone’s goal to protect that for themselves and their neighbor.

Throughout the world and through time, different issues will arise that cause a dilemma in ethics. Having a code of ethics is something to keep in mind when making decisions that may affect other people. IEEE’s code of ethics is a very common and good way of determining a good way of improving the quality of life and technology throughout the world. This commitment is a choice everyone can take, regardless of profession, or community. How you decide to live your life is up to you, but it is our responsibility to help others out and strive to keep conflicts professional and ethical.