Olivia’s Status Report for 4/27

This week, I added more basic functionalities to the GUI to improve usability such as buttons for going to previous pages or to the main menu, closing the adjustment or calibration process, and bug fixes for new pages. I also integrated the focus detection and stretch reminder features into the GUI so that these trackers can be activated and periodically remind users to stretch or take a break. I used multithreading for these features so that the process can be started and run outside of the main tkinter thread to periodically check the user and do computations on their landmark positions. I was able to implement notification features using tkinter’s messagebox library that will pop up on the user’s screen after a set time has passed where they have been looking at their screen or sitting for too long .

I was also able to do more tests of the adjustment algorithm using the new motor for height adjustment, and found that the intervals and delays used will need to be tweaked since the new motor’s max speed is much lower than the previous motor’s.

I am a bit behind on schedule since I am still testing the algorithm will the fully integrated system, and plan to continue working on fine tuning the process and well as refining the GUI for usability next week.

Team Status Report for 4/27

This week, we were able to integrate the new, higher torque motor with the stand and rest of the system. The new motor has sufficient torque to turn the screw of the platform jack and adjust the height of the stand. We are currently working on doing more tests with the fully integrated system as well as creating a new mount for the motor to attach the motor to the platform jack.

What are the most significant risks that could jeopardize the success of the project? How are these risks being managed? What contingency plans are ready?

Risks:

Currently, the most significant risks we are facing are the is mounting the new motor to the stand. Since the new motor is noticeably heavier than the previous one, we need to be certain that the motor mount will be able to support the weight of the motor. We also have to adjust and tune the speeds and steps we use to increase the height of the stand since there will be variations in speed when going up versus down.

Changes:

Due to the new stepper motor having different dimensions than the previous one, we had to start a new 3D print for a motor mount with these new dimensions. This cost about 60 dollars and was necessary since it is the most feasible solution to ensuring the motor is constantly in contact with the screw even when the screw’s height changes.

No changes were made to our schedule.

Unit Tests and Overall System Tests:

Unit tests we have conducted consist of testing the functionality of the linear actuator subsystem, motor control, and height and angle adjustment computations. We have conducted overall system tests of a full adjustment process – both height and angle adjustment – as well as calibration. We conducted these tests over 9 trials with the screen at starting angles and height. We found that the adjustment process took an average of 33.56 seconds, and the calibration process took an average of 6.7 seconds. The height adjustment had an error margin of about 0.95 inches, and the angle adjustment had an error margin of about 2.44 degrees.

Olivia’s Status Report for 4/20

This week I added the Manual Adjustment page to the GUI which will allow users to adjust both angle and height of the stand using button clicks that send serial commands to the Arduino similar to the system used for automatic adjustment.

I also created a focus tracking program using OpenCV that tracks the direction in which a user is looking to determine whether they are looking at their screen. This program keeps track of variations of both horizontal and vertical distances between key facial landmarks to periodically check the user’s head position, and if they have been consistently looking forward at the screen for 20 minutes, not including small breaks or movements, then they will receive a notification in the GUI reminding them to take a break to prevent eye strain. I also wrote a similar, simpler program that periodically detects whether a face is detected in frame which will be used to send notifications via GUI when a user should get up to stretch after long periods of sitting in front of their screen.

I was also able to begin testing the automated adjustment process using the linear actuators on our stand and adjusting the height of the stand manually. I tested the angle adjustment by opening my laptop to several different angles, undergoing calibration, running the angle adjustment code in the integrated subsystem, and tuning the time needed between feedback checks in OpenCV/Python. I found that 250 ms is the smallest delay that can be used between checking landmark distances before the angle adjustment becomes noticeably inaccurate.

I am currently on track, and next week, I plan to integrate the focus tracking aspects to the GUI. After we are able to supply enough torque for the platform jack’s screw rotation, I will more thoroughly test the height adjustment with the automated system.

New Tools and Knowledge:

Over the course of this project, I learned how to use OpenCV and other computer vision tools such as trained models for object classification and detection. To learn about these topics, I used many online tutorials, videos, and the OpenCV documentation to learn the basics of CV programs, and I wrote a bunch of smaller test programs to test out and learn about new features and how I could use them in our project.

Olivia’s Status Report for 4/6

This week I continued working on the GUI and added additional pages and features. I added a new page that allows a user to choose whether to calibrate their stand for the first time or to adjust the stand based on prior calibration data. This way, users can skip the calibration after they’ve gone through the process once. I was able to integrate the height and angle adjustment program with the Arduino via serial connection, and we are able to automate the motor and linear actuator movement.

I have done some testing with the height and angle adjustment to make sure that the algorithm we use is able to determine the correct height and angle for a user when starting from different heights and angles. I will continue testing this when we integrate the software with the stand in order to tune and make some adjustments to the time between feedback checks and speed at which we turn the motors in order to reach the ideal height and angle within our desired time limit.

I am currently on schedule. Next week I plan to add more pages to the GUI to display posture tracking data as well as implement eye tracking to the software in order to send users notifications when they have been focusing on their screen for long periods of time.

Olivia’s Status Report for 3/30

This week I wrote the Python code that would carry out the height and angle determination of our system. The process will first need a calibration stage in which the user’s landmark data will be captured when their laptop is at the ideal height. Then, any time the user uses the device again, this data will be used as reference for determining whether to increase or decrease the height and/or angle of the laptop. The program uses an iterative process of incrementally increasing or decreasing the angle of the laptop until the vertical distance between landmarks is approximately the same as the reference distance from calibration, and then switching to adjusting the height of the laptop until the y-coordinate of the landmark at the center of the face is within threshold of the position determined at calibration. This method proved to be pretty accurate even when starting at different heights and angles.

I am also working on a method that uses position of key landmarks on the frame’s coordinate system in order to determine the height and angle adjustments that will be needed. In this method, we wouldn’t need a calibration stage for the user which may be more convenient and faster, but it seems to be less accurate in my testing.

I am currently on schedule and will continue working on this software next week and am planning to have this height and angle adjustment code integrated with the Arduino firmware in order to move the motor and linear actuators according to which adjustment is needed.

Team Status Report for 3/30

This week, we met to work on integrating the mechanical aspects of our project with our software. We worked on putting together the mount that will be attached to the stand to hold the motor and tested the motor code with the Arduino and the motor which proved to be successful. We are continuing to work on integrating the OpenCV programs and height adjustment process with the firmware for the interim demo.

Currently, the most significant risks we are facing with our project is the mechanical design and making sure that the modifications we made to the screw of the jack will allow the platform to raise smoothly and not break. Additionally, the mount we created to hold the motor will need to be sturdy and securely attached to the beams of the jack to allow the motor to be joined with the screw in order to automate the height adjustment process. To mitigate these risks, we have thought of modifications that may need to be made to our CAD designs in the case that there are issues with the stability and size of the mount.

Due to the incompatibility of the Arduino Uno Rev4 with the L293D motor driver that we had previously purchased, we made a change to the design of the system by switching the Arduino with an older version, the R3. This is a component that we already had on hand, so no additional charges are incurred.

Olivia’s Status Report for 3/23

This week I continued working on our automatic height and angle adjustment software. After discussing with the team, we decided to do a multiple iterations of height and angle adjustment to incrementally reach the correct position rather than calculate the exact height and angle needed for adjustment. The method I am considering is to use both the vertical distance between landmarks and the y-coordinate of the facial landmark in the middle of the user’s face to determine whether the screen is positioned at the correct height and angle. Using these two measurements, we can switch between incrementing height or angle by an interval and checking these measurements until we reach an acceptable threshold of vertical landmark distance and position of the face on the screen.

I also worked on creating the GUI for our system and added the front page with buttons to choose between opening a window to use the adjustment functionality or to view the posture tracking data. When a user clicks the adjustment button, the calibration and height determination program will run.

I am currently on schedule and am aiming to finish the iterative adjustment cycle and have it coded and tested by next week.

Olivia’s Status Report for 3/16

This week, I worked on a function that get the real life distance a laptop would need to rise based on the distance in pixels. To do this, I’m using the camera calibration as described in the OpenCV documentation to find the focal length of my camera and used these in my calculations assuming the distance from the screen is constant.

I also integrated the calibration setup for gathering facial landmarks with the current landmark distance calculation, so that we are using the calibration data points to calculate the reference difference and compare them to current landmarks. I’m able to detect if the camera is at a height lower than the one determined at calibration, higher, or within threshold.

However, when neither the height or pitch of the laptop are known, it is difficult to determine whether the correct course of action for the system will be to raise the height of the stand or to angle to the laptop using the linear actuators since either a change in height or change in angle can produce similar results in vertical landmark difference. In order to solve this issue, I’m working on using a few vectors between landmarks to measure the skew of certain sections of a user’s face to be able to decide if the camera is at an angle or at a height difference.

I am currently on schedule, and next week I will continue working on this height vs. angle determination. I also hope to begin creating a starter GUI to display basic functionalities such as calibration and setup.

Team Status Report for 3/9

Currently, the most significant risk to the success of the project is the mechanical side (mainly including the platform jack). We have already made proof of concepts for the posture tracking and facial landmark tracking which will be used for motor control. However, what remains a question is whether the actual stand will hold up to the stress from the computer on top, whether the motor will be forceful enough, whether the stand will stay level, how much friction there is in the platform jack screw, how big and heavy the whole stand will be after our modifications to add a battery/arduino compartment and the linear actuator compartment. 

The way this risk is currently being managed is by ordering the stand as soon as possible to begin testing. The stand will be ordered at the start of this week. Additionally, Sebastian has done a lot of research on different stands by reading customer reviews to select the best one. The contingency plan is to simply buy progressively more expensive platform jacks which (according to reviews) are more stable and are machined with greater precision so they have less friction. 

The only change we made to the existing design is to modify an off-the-shelf platform jack instead of making one from scratch. This change was necessary because creating a new platform jack was outside the scope of our experience. The only cost is the price of the stand, the design time of the stand has gone down because now Mary only has to design the compartments above and below the stand. 

Part A (written by Sebastian)

Our product has an immense global impact because poor posture is a problem affecting almost all industrialized countries where consumer electronics are common. The most widely used consumer electronics are mobile phones and PCs, both of which promote poor posture. This contributes to the global health crisis where people in wealthy nations are becoming unhealthy. As a result, they require more and more expensive medications and treatments, which causes inflation, which lowers the quality of life even more for most people. So, as a result of poor posture, a vicious cycle is created. While this statement is a bit of a stretch, I believe that using technology to collectively improve our posture will considerably improve the general health of ourselves. Now SmartStand will hopefully only make a small dent in the general posture health of the public, but it is a first, and important step.

Part B (written by Olivia):  

Our project was created with the target audience being students and people who may work remotely. Since these groups of people often have to work from public places and many different areas, they may not be able to have the most comfortable working environment. This is why we decided to include the height adjustment functionality of a laptop stand, in order to help such individuals improve their productivity and reduce pain from using their laptop for extended periods of time. Additionally, since these groups are often commuting and traveling, we are constantly considering the portability and convenience of our product, which is why we decided to make SmartStand battery powered, compatible with bluetooth, and compactly designed.

Part C (written by Mary Rose):

Seeing as our product is not very large, or particularly hard to produce, it is difficult to determine if it would have any effect on natural resources, or non-human living organisms. In addition, our device is intended to be used indoors, so it will not have much interaction with the environment. However, as one of the main goals of our device is centered around improving human health (helping people to fix their posture), it can be said that our device would have a positive effect on some living organisms (humans).

Olivia’s Status Report for 3/9

This week, I have been working on the Design Review, specifically the Abstract, Introduction, Test, Verification, and Validation, and Project Management sections.

I also wrote a script that will gather all the landmark coordinates of a single frame and write that information to a text file. After our meeting last week, we decided to include 2 calibrations stages: one for gathering reference landmarks and one for gathering posture information. I plan to use this script to achieve the former by saving the user’s facial landmark data from the calibration stage to reference for future use when adjusting the stand’s height automatically.

I am currently on schedule and plan to integrate these distance calculations and reference checks with motor movement in the upcoming weeks.