In this project, you will work with two other students to develop a system with "embedded" and "mobile" components. The goal of the project is to create a Pebble smartwatch application that is able to get data from and send control information to a remote sensor and display driven by an Arduino microcontroller.
Please note: This document may change over time as the requirements are refined and more details are provided to you. Please ask a member of the instruction staff if you have a question about anything described here.
The system shall consist of three major components, described as follows:
- Sensor and Display: You will use a Gravitech 7-Segment Shield attached to an Arduino microcontroller. This component includes a temperature sensor, a seven-segment display (like a digital clock), and an RGB light. You may start with this Arduino program which reads the temperature and writes to the serial port once a second.
- Middleware: The Arduino shall be connected via USB to a Linux or Mac machine, which will run a C or C++ program that handles all communication between the sensor and the user interface.
- User interface: The user interface will be a Pebble smartwatch application, which communicates with the middleware over the Internet via an Android or iOS phone.
Note that because of firewall restrictions on the SEAS network, if you are running your middleware component on a Linux machine in the lab, you must use port 3001 for your server, and it can only be accessed by devices on one of the Penn networks. Please be sure to discuss this with a member of the teaching staff if you are unsure.
Your system must fulfill all of the following requirements:
- The user should be able to see the most recent sensor reading.
- The user should be able to see the average, low, and high sensor reading for the past 24 hours.
- The user should be able to decide whether to see temperature readings (and statistics) either in Fahrenheit or Celsius. Additionally, the user should be able to change the 7-segment display on the sensor to show the temperature either in Fahrenheit or Celsius.
- The user should be able to put the sensor into a "stand-by" mode in which it is not reporting temperature readings. When the sensor is in "stand-by" mode, the user should also be able to tell it to resume reporting the readings.
- If the user interface cannot connect to the middleware, an appropriate message should be shown to the user.
- If the middleware cannot get a reading from the sensor, an appropriate message should be shown to the user.
Note that you have complete freedom in how you implement these features in the user interface, i.e. what the user needs to do in order to see the data or send a command, and how it gets displayed.
In addition to the functional requirements listed above, your group must come up with three other (non-trivial) features to include in your system. At least one feature must involve sending a control message from the user interface to the display; at least one other feature must involve the processing and/or display of the data that is sent from the sensor to the user interface. Please discuss your additional features with the instructor or a TA before proceeding.
You may assume that all components are "dedicated" to each other, e.g. that your middleware component will never need to serve a different user interface, and that your user interface will never need to connect to a different server, so it is okay to hardcode addresses, etc. as needed.
It is important that you make steady, continuous progress towards your final system. There are various milestones that your group should meet, as described below.Milestone #1: Pebble Tutorial (Apr 3)
During today's lab session, your group should complete the Pebble tutorial and ensure that you can get a round-trip message sent from the watch to your server and then back. This will not be graded, but you need to at least get the infrastructure in place so that you can get data sent between the components.
Milestone #2: Prototype (Apr 17)
During today's lab session, your group will have a brief (5-10 minute) meeting with the members of the instruction staff. By this point, you should have much of the basic functionality completed, including showing the current temperature on the watch and sending some control signal from the watch to the Arduino.
During this meeting, be prepared to discuss issues such as:
- where does data processing (e.g., calculating the average temperature) occur?
- what is the structure of your communication protocols between the different components?
- what sorts of error-handling have you included in your code?
- what are the additional features that you plan on implementing?
Milestone #3: Final Presentation (Apr 30)
On the last day of class, your group will present your system to members of the instruction staff and discuss your implementation decisions. At this point, the entire system should be working and you should have all features implemented. If not, you may present the project after Apr 30, but with a late penalty to be decided by the instructor.
All deliverables are due by Friday, May 2, 5:00pm EDT.
Your final deliverables should consist of the following:
Submit all Arduino, C, and Pebble source code in three separate tar/zip files. If you use third-party libraries (which have been approved by the instructor!), only submit those in compiled form. Please be sure that all of your code is well-commented so it is easy for the grader to find where different features are implemented. Remember: happy graders give higher grades!
This document should explain how your system "works". Please include brief explanations of each of the following:
- what is the structure of the messages that are sent from the user interface to the middleware? give examples
- what is the structure of the messages that are sent from the middleware to the user interface? give examples
- what is the structure of the messages that are sent from the middleware to the sensor/display? give examples
- what is the structure of the messages that are sent from the sensor/display to the middleware? give examples
- how did you keep track of the average temperature? describe your algorithm and indicate which part of your code implements this feature
- what are the three additional features that you implemented? indicate which parts of your code implement these features
This document explains how someone would use your smartwatch application. Do not assume that it is "intuitive"!
Return all hardware
You must return the Arduino board, temperature sensor shield, USB cable, and Pebble smartwatch (sorry!) before you can receive a grade for this assignment.
You should be working with the other two members of your group project team, obviously. However, you may not discuss or share solutions with students in any other groups, nor should you be receiving any help from outside sources, including students not taking this course or online resources. If you find help online or use third-party code as part of your solution, you must cite it. If you want to use a third-party library, you must get permission from the instructor. Failure to do either of these will be considered academic dishonesty, and your team will receive a grade of 0 on this project. Which would be really, really bad.
If you run into problems, please ask a member of the teaching staff for help before trying to find solutions online!
All deliverables should be submitted in Canvas by the due date (Friday, May 2, 5:00pm). Late submissions will be subject to a penalty determined by the instructor.
Updated: Sat Mar 29 2013, 4:33pm