ENG 06 Summer 2018 Final Project
Up to now in ENG6, we have focused on teaching you the “how” of programming. In the team project you will be taking your own ideas and bringing them to fruition through your knowledge of computer programming. Software development is rarely a one-person effort, so the project will be team-based. Teams can be formed with members of any section. You can form your own team of three. No other team size will be allowed. Only if strictly needed, the TAs may form smaller teams or add members to teams. Beyond the core part of the final project, we ask you to implement a number of special features, called Reach elements, so as to make your project different from your classmates.
You will be able to choose between two different implementations.
Project 1: Electronic Data Acquisition and Processing using Matlab.
In this project you will be using an Arduino Uno microprocessor to acquire analog signals from a sensor. You have the freedom to choose the variable to be measured, however, a few possibilities are:
- T emperature using a thermistor
- Light using a photocell
- Acceleration using a gyroscope
- Magnetic field using a Magnetometer
- A sensor measuring more than one of the above variables!
Please keep in mind that since this is not a hardware electronics class, your grade will be based mostly on the originality of the Graphical User Interface (GUI) implementation, data processing and presentation. It will be your responsibility to acquire the microprocessor and associated electronics (sensors, resistors, etc.). However, today an Arduino (for example) can be acquired for less than $17 and the cost of the sensing electronics is a few dollars as well.
Core Requirements: All projects should have a graphical user interface with the following capabilities:
- A frame with a graph displaying the sensed signal in quasi real time. If you wish you can display more than one signal at a time.
- Abuttontorecordasignaloverapredeterminedtimeinterval.
- Abuttontodisplaytherecordedsignaleitheronaseparateframeorontheoneused
for real time display.
- An indicator on the control panel, coupled to an LED in the data acquisition board,
that are ON while the data is being sampled.
- Clearly indicate in your code and your video where these elements are
implemented. In your YouTube video, please point out how you implemented some features (especially in the Core and the Special Features) inside your code. What functions did you use? Did you use any data structures such as
structs etc.? What was challenging about implementing a certain feature and why?
Special Features: A significant component of the project grade will depend on the special features your group decides to implement. The main goal of this portion of the project is for you to show your data processing skills. You can choose the special features you decide to implement, however, a few examples are:
- Signal noise removal based on taking the average of a predetermined number of data sets followed by the display of the raw and averaged data on the GUI panel.
- Finding and displaying signal statistics such as mean, standard deviation, peak amplitude of a signal, etc.
- Horizontal and/or vertical cursors controlled by sliders that indicate the x or y coordinate of the cursor. Even better, more than one cursors to show the x or y- coordinate difference between the two. This can be used, for example, to indicate the width of a pulse signal or a 10-90 raise time.
- Signal reversal, slow or fast motion, signal arithmetic (addition, subtraction) between multiple signals.
- Your own ideas….!
Appendix: Useful information in case you have selected an Arduino.
In order to be able to send and receive analog and digital data to the Arduino it is necessary to install the MATLAB support package for Arduino.
Instructions for the installation can be found on:
https://www.mathworks.com/help/supportpkg/arduinoio/ug/intro.htm
You can check if the support package was installed correctly if you enter:
>>help writeDigitalPin --- help for arduino/writeDigitalPin ---
Write digital pin value to Arduino hardware. Syntax: writeDigitalPin(a,pin,value) Description:
Writes specified value to the specified pin on the Arduino hardware.
Example: a = arduino();
writeDigitalPin(a,’D13′,1);
Input Arguments:
a – Arduino hardware
pin – Digital pin number on the Arduino hardware (character
vector or string) value - Digital value (0, 1) or (true, false) to write to the
specified pin (double).
See also readDigitalPin, writePWMVoltage, writePWMDutyCycle
A few examples on basic connections to the Arduino can be found on:
https://www.mathworks.com/help/supportpkg/arduinoio/ug/getting-started-with-matlab- support-package-for-arduino-hardware.html
Instructions to find the Arduino port can be found on:
https://www.mathworks.com/help/supportpkg/arduinoio/ug/find-arduino-port-on- windows-mac-and-linux.html
The following link provides a straightforward way on how to improve the accuracy of Arduino signals measured as a function of time. https://www.mathworks.com/videos/log-temperature-data-from-arduino-into-matlab- 1489428648919.html
Project 2: Dice Game
Project Description: Implement a MATLAB computer program of dice game of your team’s choice. For example, possible candidates are Farkle (Links to an external site.). Or Left Center Right (Links to an external site). An example of a computer dice game implementation is Yahtzee (Links to an external site). (it is clear what is expected of the players, however with respect to the visual and auditory aspects, it is not a good example). The dice game must involve one or two players. A player should be able to make strategic decisions to win the game. The program should roll the dice upon request, make apply the rules and score the game. Each team makes decisions what programming elements will engage the users. Special attention should be paid to:
1. Clarity on how to play the game.
2. How the persons should interact with the program
3. The visual, auditory cues and special effects (e.g. animations, a sound clip when the dice
are rolled).
The implementation of a dice game should be two players using the same keyboard or mouse to play their turn. All projects should have following elements:
1. A graphical user interface’
2. An animation’
3. A sound effect’
4. Make use of user-defined OOP class in at least one programming element.
5. Clearly indicate in your code and your video where these elements are implemented.
In your YouTube video, please point out how you implemented some features (especially in the Core and the Reach) inside your code. What functions did you use? Did you use any data structures such as structs etc? What was challenging about implementing a certain feature and why?
Appendix
• MATLAB supporting files – zipped directory Resources:
- Controlling Random Number Generation (Links to an external site.).
- Play Audio (Links to an external site.)
- MathSoft Guide (Links to an external site.)
Collaboration Policy: Once teams are formed you are only allowed to talk and collaborate with members within your team. Team members are expected to equally participate, and collaboratively work towards the completion of the project. Other than contacting the teaching assistants for clarification, you may not seek the assistance of other persons to complete your team’s project. (Of course, general discussions about how to implement GUI, OOP and other programming constructs could be discussed with other students, but your team must be totally responsible for the implementation of code used in your project).
Grading Criteria: The projects are open ended. As long as your program can perform the assigned tasks, there will be no correct or incorrect approaches. Certainly there will be more acceptable and attractive solutions, and that will be judged in comparison with competing solutions submitted by your classmates. The final project will be graded in five parts:
- Project proposal: Each team submits a 2-3 page via Canvas a project proposal describing the project, a general description of how you will implement the main components of your and a clear description of the Reach/Special features that your team proposes. Essentially, the scope of the project should be challenging enough to merit full credit and doable within the timeline. An Appendix should contain a breakdown of programming tasks, and who will be responsible for what, along with a timeline that will meet the submission deadline (suggest you make use of a Gannt chart (Links to an external site.).The expectation is that each team member must take responsibility for a specific aspect of the project and grading for each member will be adjusted according to how the project tasks were delegated and who was responsible for what aspects of the project. The more specific you can be in defining the programming tasks, what functions should exist, and what each function should accomplish, the better.
- Core: Complete the basic project as outlined in the project specification.
- Reach/Special Features: Implement the project extensions described in your proposal. Your completion of the Core and the difficulty of your proposal will be taken into account during the
grading process.
4. Youtube Video Requirements: Youtube has several examples of ENG6 videos (search
ENG6). The format of the video is entirely up to your team as long as the following criteria are met:
1. Maximum length of the video is 10 minutes
2. Each team member must be seen in the video to present their work and contributions
3. A clear and easy to follow demonstration that shows the correct functionality of your
program (show you program actually working in the video – not screen shots of before
and after.)
4. Explain how to use the data acquisition GUI, or how to play the game, in either a brief
PDF document or in the Youtube video.
5. Use visual aides to help explain your steps (whiteboard, markers, poster, etc.). The
video does not have to be fancy, just effective in relaying the most important information.
5. Team Evaluations: Each member must provide a brief personal summary of her/his involvement and contributions. Each team member is required to submit evaluations of your and your teammates’ contribution, one for each of Core and Reach. For example, if your team has members A, B, C, your evaluation can be similar to the following for a single member. An example is shown below.
A: Team Member A was in charge of writing the code to execute to simulate a dice roll when a button was clicked. For the Reach, A was in charge of adding 5 different sound effects that could play when the user opens up a new game. Team Members B, C agree that A performed these tasks for the project.
Project Deadlines:
Deadline #1: Tuesday, August 28. 5:00 pm: A team member must submit your team names to a Google Docs Form. We will post a Canvas announcement once the form is ready for submissions. Only one team member should do this!
Deadline #2: Friday. August 31, 5:00 pm: Submit proposal.
Deadline #3: Thursday, September 13, 10:00 pm: Each team will submit all relevant coding files, a link to Youtube video and team evaluation materials. Each team will submit a zip file of all the code, the zip file will have all .m files, all .img files and any other files that are needed for the game to run. The zip file should also contain a .pdf file of the code, as well as a PDF of the team evaluation document. The link of the Youtube should be acsessible to all those who use the link. All code files must contain the following statement:
Collaboration Policy: Once teams are formed you are only allowed to talk and collaborate with members within your team. Team members are expected to equally participate, and collaboratively work towards the completion of the project. Other than contacting the teaching assistants for clarification, you may not seek the assistance of other persons to complete your team’s project. (Of course, general discussions about how to implement GUI, OOP and other programming constructs could be discussed with other students, but your team must be totally responsible for the implementation of code used in your project).
Grading Criteria: The projects are open ended. As long as your program can perform the assigned tasks, there will be no correct or incorrect approaches. Certainly there will be more acceptable and attractive solutions, and that will be judged in comparison with competing solutions submitted by your classmates. The final project will be graded in five parts:
1. Project proposal: Each team submits a 2-3 page via Canvas a project proposal describing the project they have selected, a general description of how you will implement the main components of your project and a clear description of the Reach features that your team proposes. Essentially, the scope of the project should be challenging enough to merit full credit and doable within the timeline. An Appendix should contain a breakdown of programming tasks, and who will be responsible for what, along with a timeline that will meet the submission deadline (suggest you make use of a Gannt chart (Links to an external site.) .. The expectation is that each team member must take responsibility for a specific aspect of
the project and grading for each member will be adjusted according to how the project tasks were delegated and who was responsible for what aspects of the project. The more specific you can be in defining the programming tasks, what functions should exist, and what each function should accomplish, the better. For the data acquisition project using Arduino it is not allowed to have a team member working solely on the electronic implementation, i.e. all team members must have MATLAB coding responsibilities.
- Core: Complete the basic project as outlined in the project specification.
- Special Features: Implement the project extensions described in your proposal. Your completion of the Core and the difficulty of your proposal will be taken into account during the
grading process.
4. Youtube Video Requirements: Youtube has several examples of ENG6 videos (search
ENG6). The format of the video is entirely up to your team as long as the following criteria are met:
1. Maximum length of the video is 10 minutes
2. Each team member must be seen in the video to present their work and contributions
3. A clear and easy to follow demonstration that shows the correct functionality of your
program (show your program actually working in the video – not screen shots of before
and after.)
4. Use visual aides to help explain your steps (whiteboard, markers, poster, etc.). The
video does not have to be fancy, just effective in relaying the most important information.
5. Team Evaluations: Each member must provide a brief personal summary of her/his involvement and contributions. Each team member is required to submit evaluations of your and your teammates’ contribution, one for each of Core and Reach. For example, if your team has members A, B, C, your evaluation can be similar to the following for a single member. An example is shown below.
Team Member A: was in charge of writing the code to execute the equalizer filters. For the Reach, A was in charge of adding 2 different analysis plots that could show power spectral density plot and frequency content of audio file. Team Members B, C agree that A performed these tasks for the project.