Vicky’s Status Report for March 29

This week:

  1. Machine fabrication: discussed and decided with team on the specific sizing of each wood panel (12 in total, include external front,back,top,bottom,right,left panels, internal vertical divider board, 2 horizontal level boards, 2 small vertical interval boards, internal back panel). Laser cut and assembled box (seen in team status report). Made 4 wire spirals to hold items to dispense.
  2. Dispense works: Rpi to Arduino I2C communication: wrote arduino code and wrote modifications to the React App in frontend “CandyDispensingScreen.tsx” and added I2C backend “server.js” in standard mode code directory for serial communication of the candy 4-types selection signal (rpi -> arduino) and dispense status signal (arduino -> rpi). Setup I2C dependencies on rpi.
  3. Screen attachment: 2 revisions of 3D print file for the screen holder. Modified holder’s middle gap(10mm->6.4mm) and print infill density (60%->80%) to allow secure attachment to machine. Reduced holder’s middle thickness (10mm -> 5mm) to fit screen into the cut-out opening on front panel.
  4. External speaker: Tested 3.5mm audio jacks on both rpi board and touchscreen, audio jack works on rpi but does not work on touchscreen, might be a touchscreen audio configuration issue (to be examined after interim demo).  Achieved successful and stable sound output by using bluetooth speaker paired with rpi. The gameplay’s audio output is not outputing like other general sound test examples and will be debugged further by Min Ji.
  5. Kiosk display: Used chromium zoom for successful full display of game screen.

Next week:

  1. Interim demo: prepare demo talk and record backup demo video before Monday.
  2. Webpage: fix database upload and rpi local download, (supabase -> google sheet upload) figure out how user can delete/clear chosen local rpi storage.
  3. Box upgrade: add lighting
  4. User engagement upgrade: add sound output and dynamic graphics (“congratulations! …”) at the end of game. Add dispense status message screen.

Min Ji’s Status Report for March 29

This week:

  1. Hardware Fabrication & Setup
    I spent significant time laser cutting and assembling key components of our vending machine. I laser cut structural parts and began researching how to enable kiosk mode on the Raspberry Pi, alongside digging into the persistent issues with text-to-speech narration. The following day, I laser cut the main board for the project and spent the evening at TechSpark, taking advantage of tools and space to focus on precision fabrication. I also laser cut the SweeTrivia letters and front panel, and glued the candy dispensing wire into place on the motor using hot glue to keep things neat and secure.
  2. Audio Output & Narration Integration
    After struggling to resolve the TTS issue using other tools, I successfully connected the Raspberry Pi’s audio output to an external speaker. However, the audio narration works on my local laptop, not in the rpi, so I am planning to move back to espeak-ng from the browser-based web API.  I restored narration using espeak-ng, which offered much more reliable performance. This works on my local, so I will have to test this out on Sunday(3/30) if this works with the rpi as well.
  3. Candy Selection Logic & User Feedback
    I focused on refining the candy selection interface and ensuring it functioned properly with the point system. Previously, the screen displayed incorrect options, especially when the user reached 50 points, and the game automatically ended. I fixed the logic so that no matter how many points the user gets, it shows the exit/continue option only if 10 seconds have passed. Additionally, I implemented a candy dispense eligibility logic so that users are only able to select candies that are priced within the user’s budget. Affordable candies are shown, and added new feedback mechanisms: if the user has zero points, they’re redirected to the home screen once they decide to exit since there is no need for candy dispension, and if they try to purchase something they can’t afford, a warning saying “Not enough points!” appears instead of failing silently. These enhancements improve both usability and gameplay clarity

<Video of standard code gameplay: 3.29 Standard Mode Gameplay>

I think I am on schedule, but I will have to keep testing the audio using the external speakers and changing back to espeak-ng.

In the upcoming week(3/30-4/5), I am planning to continue developing both the functionality and user experience of the vending machine system by accomplishing the following:

  • test the Raspberry Pi audio narration using espeak-ng to ensure consistent and clear voice output across different stages of the game.
  • prepare for our in-class demo by ensuring the core features—including candy selection, narration, and screen transitions—are working smoothly together.

Since narration is a key component of user engagement and accessibility, I want to verify that the system behaves reliably during full gameplay runs, including transitions between questions and responses to user input.

After the demo on April 2nd, I plan to implement a more sophisticated points-based shopping system. Instead of a one-at-a-time candy selection, this upgrade will allow users to select multiple candies as long as their total selections of candies stay within their point budget. This feature will more closely resemble real-world shopping behavior and enhance gameplay flexibility.

Following that, I also intend to finalize the UI/UX elements and refine them based on peer feedback and demo observations. Improvements may include clearer visual cues, responsive buttons, and improved text readability. Additionally, I am also looking into randomizing the trivia questions each time the game is played to improve replayability and make the experience more dynamic for users who return to the machine more than once.

Team Status Report for March 29

  1. 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? (written by Vicky)

=> Our most significant risk this week:

  1. Audio output: Getting the speaker on the rpi touchscreen to play the game’s audio narration. There seems to be an audio signal transmission problem from the rpi to the screen and the built-in speakers are not able to output sound. We managed this risk by using an external bluetooth speaker which worked well and the size of the speaker was suitable to be enclosed in the machine box behind the screen. 
  2. Kiosk display: Initially we configured the rpi to boot up in kiosk mode by making a run_kiosk.sh file and modifying the wayfire.ini inside .config. However this will only work with a deployed website, not with our current React app. We managed this by using command line kiosk mode inside chromium and the view had the same effect. 
  3. Mechanical assembly: We encountered some laser cutting challenges. 
    1. The purchased wood material size is slightly narrower than the initial design. We managed this by modifying the box height (see question 2).  
    2. Attaching the screen to the box: initially we wanted to make one 3D printed slider that covers the entire length of the cut-out screen space on the front panel. This did not work because there is not enough space to tilt the holder and install the screen. We managed this by changing the design to make two screen corner holders with narrow bottom gaps that tightly sit on the front panel. 
    3. Error margins that made the cut result deviate slightly from the design file. This may be caused by: the vibration of the laser cutter working table caused the material to move and the laser trace inaccurately. This was managed by using maximum laser power to minimize the number of total cut rounds. (One round of cut was still unrealistic because of the ¼ inch thickness)

2. Were any changes made to the existing design of the system (requirements, block diagram, system spec, etc)? Why was this change necessary, what costs does the change incur, and how will these costs be mitigated going forward? (written by Fei)

=>There were a couple of changes made to the existing design, including switching the SweetTrivia letters from etching to 3D, redesigning the shape of the screen holder, and reducing the CAD box height from 11.8 inches to 11 inches. These modifications were necessary to enhance aesthetics and improve functionality. Initially, we designed the screen holder to be the same length as the screen to not only support it but also hide the gap between the screen and the hole cut for it. However, after discussion, we realized that due to the inflexibility of the 3D printing material, fitting the screen might become difficult if the holder was the exact same length. As a result, we prioritized functionality over aesthetics and adjusted the design accordingly. Similarly, the box height was originally set to 11.8 inches to match the dimension of our wood board, but during laser cutting, we found it impossible to achieve that level of precision, so we adjusted it to 11 inches, slightly reducing the height without sacrificing too much space. These changes incurred costs related to design revisions and potential material waste. To mitigate these costs, we carefully reviewed every print file before sending it to the laser cutter and ensured the first prototype worked before printing the remaining parts.

3. Provide an updated schedule if changes have occurred. This is also the place to put some photos of your progress or to brag about a component you got working. (written by Min Ji)

=> no big changes in the schedule. Our group is planning to develop parts beyond our MVP after the demo. Attached are some pictures of the vending machine box.

Fei’s Status Report for Mar 29

I worked on creating the CAD file using onshape and the physical build of the vending machine. We successfully built the vending machine by laser cutting the wood board and creating the first prototype of our final product. Additionally, I enhanced the playability of the challenge mode by introducing velocity changes to the bird after some time has passed. I am currently on schedule with the project plan. For next week, besides the interim demo, I plan to work on our website deployment and focus on debugging to ensure it matches our MVP. And if possible, continue refining the vending machine prototype by adding some decorative elements.

Vicky’s Status Report for March 22

This week:

  1. Gameplay: I fixed the local npm run issue on my end by modifying the vite.config file and my local npm vite setting. I continued working together with Min Ji on the standard mode testing on touch screen. I also updated the code base on rpi, and tested the challenged mode gameplay together with Fei.
  2. Web page: I updated the homescreen of the question custimization website, modified the input question and answer format, make sure it can be real-time transformed into a csv file ready for cloud upload / local download. I created a supabase project and linked the url and passkey it to the webpage react code. There is an row-level security issue that is blocking the page from writing to the database. I plan to resolve this by making an .env file with passkey authentication, connect the react app to a google sheet for read, and make authenticated user writes to it.
      
  3. Kiosk display: I set up the rpi system kiosk mode for general chromium websites view by making a runkiosk.sh script that makes rpi open chromium and go to a specific website, and editing rpi’s Wayfire initialisation file to make sure the script is opened once the rpi boots up. However this is not ideal to our current project position due to the website not deployed yet. I will swtich to single command-line browser kiosk mode for future gameplay views till we have a deployed site.
  4. Servo control: I finished writing the arduino program for the control of 4 motors and a test program where the motor to be turned (1-4) is entered in command line and the motor turns 360 degrees for a single dispense cycle. The servo motors’ setting was 0-180 degrees on both sides so making a 360-degree turn need to be done sequentially twice. Video
  5. Mechanical box design: I have discussed with Min Ji on the CAD design of the physical machine body. We have decided to not use screws but to use box joints to interlock the MDF boards since we now are using a thicker wood. We also clarified the inside compartment arrangement and how they will be connected to the outer panels.

Our progress is still behind in terms of integration. We plan to work on assembling the machine next week along with software further cleanup and debugging. For next week I am going to:

  1. Make the laser cut CAD files for the six outside panels and two compartment panels inside.
  2. Make the arduino work together with the rpi item selection signal and dispense.
  3. Glue the servo motors to wire spirals, make secure wire connection long enought to allow item refills.
  4. Work together with team on machine assembly.

Fei’s Status Report for Mar 22

This week, I completed the code for our challenge mode, including bird movement, gravity, generating the pipes and gaps, collision detection, and score tracking. I also ensured that everything worked smoothly when uploading to the rpi without displaying errors. In addition, I spent time refining the mechanics to make the gameplay feel smooth and responsive. After meeting with the TA to test play the game, I received helpful feedback on how to better engage users and made several adjustments, such as improving font readability and refining various UI elements. I am currently on schedule with the project plan. In the next week, I plan to physically build the vending machine by laser cutting the wood board and creating the first prototype of our final product before Wednesday. If time allows, I will also begin working on our website deployment.

Min Ji’s Status Report for March 22

This week, I mostly continued working from where I left last week.

3/17:

  • Improved candy dispensing screen flow on the touchscreen interface
  • Added functionality for the “go back” button in all screens
  • Adjusted the overall UI/UX to closely match the provided Figma design specifications.
  • Work time: approximately 2.5 hrs

3/20:

  • Troubleshoot audio narration problems
    • Note: due to unresolved technical issues, I temporarily disabled audio narration to ensure reliable touchscreen testing. I am planning to add that back once I figure out the issue. I am assuming it’s because I did not connect the touchscreen HDMI with the Rpi micro HDMI. I now have the cable, so I will try testing that out next week.
  • Work time: approximately 6.5 hrs

3/21:

  • Purchased wood boards from Techspark with Vicky and discussed initial designs for the physical construction of our trivia kiosk.
  • Had a meeting with David and received valuable advice about environment variables and setting permissions correctly for kiosk mode.
  • Work time: approximately 2 hrs

My progress for this week is mostly on schedule. While encountering audio narration issues set back my initial timeline slightly, I managed to remain productive by pivoting my focus toward essential touchscreen UI/UX tasks without the audio narration function and physical design preparations. To prevent future delays, I ordered the HDMI converter promptly, and next week’s tests should resolve the audio issue, allowing me to get back on track.

For the upcoming week (3/23–3/29), I plan to achieve the following:

  • Conduct thorough testing using the newly received micro HDMI-HDMI cable to resolve and verify audio narration functionality on our touchscreen interface.
  • Start on the physical building of the machine, now that each component of the vending machine has reached a decent level for the demo.
  • Write the initial code for the Rpi to send a 4-digit signal upon candy selection(we have four candy selection slots), enabling communication between software and physical components so that Vicky can continue from there for candy dispensing.
  • Deploy our project website, enabling integration into kiosk mode for better UI/UX design.

I have an exam on Wednesday, so I will be working mostly after the exam this upcoming week, but I will make sure that I achieve my plans.

Team Status Report for March 22

 

  1. 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? (written by Vicky)
    => As our project moves forward, here are some possible risks:

    1. The challenge mode game on touch screen is experiencing some latency in the touch response. This does not affect the gameplay significantly but improving the response time will make it more user friendly and help players gain points more easily. This will be done by modifying the current program.
    2. We have decided to use ¼ inch thick MDF board to build the machine body and ⅛ inch thick board for the inside compartments. The advantage of using thicker walls is the interconnection between perpendicular sides will be fixed together more securely as a bigger touching cross sectional area has higher friction. The disadvantage is this will make the final product slightly heavier. This is a light trade-off.
    3. For the refill of items, our current solution is to fix the servo motors to the spirals (in which the items are filled), and fix the arduino board at the bottom of the machine. With a long connection line made secure, the user can take out the spirals like a tray and refill there.
    4. Our current planned view of the gameplay was done by implementing kiosk mode on the rpi system. This seems to be difficult during system development when we need to access code files when running the web page. We plan to switch to chrome browser kiosk only so it’s both easier to exit kiosk mode and make other rpi file edits.

  2. Were any changes made to the existing design of the system (requirements, block diagram, system spec, etc)? Why was this change necessary, what costs does the change incur, and how will these costs be mitigated going forward? (written by Fei)
    => Yes, a change was made to the existing design plan. We initially planned to use wood purchased from Amazon to build the vending machine and use wood glue and nails to hold the structure . However, after the ethics lecture and the discussion around E5, we found their method was more stable. Thus, we decided to purchase the wood directly from TechSpark which fits our needs better with its larger dimension.This change does incur additional costs, as the Amazon purchase had already been made. However, these costs are justified by the reduced risk of structural failure which minimizes the chance of rework. Moving forward, we will pay more attention to make sure the construction method is a good choice early on to avoid last-minute adjustments and additional expenses.

  3. Provide an updated schedule if changes have occurred. This is also the place to put some photos of your progress or to brag about a component you got working. (written by Min Ji)

=> This week, our group successfully purchased wood from Techspark to construct our trivia kiosk and discussed detailed plans for assembly. Min Ji improved the touchscreen UI/UX, aligning it closely with our Figma design, and temporarily disabled audio narration for reliable testing. Vicky completed Arduino code tests for candy dispensing functionality, confirming the reliability of our motorized dispensing mechanism. Fei resolved some minor bugs within the challenge mode gameplay, ensuring smoother user interaction and reliability for the upcoming demonstration.

For the upcoming week(3/23-3/29),  we will prioritize the following tasks, with smaller numbers indicating higher priority:

  1. Physical Assembly of Kiosk Structure(All)
    Vicky will create laser-cut CAD files based on our recent design discussion and will assemble the machine. The aim is to finish assembly ideally before Wednesday. Min Ji and Fei will focus on helping assemble the structure by Wednesday(3/26).
  2. Motor and Dispensing Hardware Integration.
    Vicky will create spiral helixes using wires and attach them securely to the motors. Long wires will initially be used to allow easy refilling of candy.
  3. Integration of Raspberry Pi & Arduino (Min Ji + Vicky)
    Min Ji will test and finalize the Rpi functionality to send a 4-digit GPIO signal upon candy selection, confirming that signals are reliably received. Vicky will then adapt the existing Arduino dispensing code to trigger the candy motors based on Raspberry Pi signals.
  4. Kiosk Mode and Audio Narration Testing (Min Ji + Vicky)
    Min Ji will use the micro HDMI-HDMI converter to resolve the audio narration issue and thoroughly test kiosk mode interactions. Vicky and Min Ji will collaborate to confirm environment settings and permissions are optimized for the kiosk deployment.
  5. Website Deployment (Optional, Lower Priority)
    We will maintain our current UI as is for the interim demo, but we plan to deploy our existing website for testing the kiosk mode if sufficient time remains. This task is a lower priority, considering our current UI is functional and presentable for the demo.

Notes:

  • Tasks 1 and 2 are critical and must be finished early in the week (by Wednesday 3/26) to allow ample time for debugging and refinement in the latter half of the week.
  • Integration tasks(Task 3) and focusing on debugging any bugs seen in the gameplay follow immediately afterward. Our main goal for the interim demo is to have a clearly working gameplay.
  • Kiosk mode(Task 4) and website deployment(Task 5) are also critical but slightly lower priority than full assembly and hardware integration, so we scheduled it to be after initial assembly completion.

Vicky’s Status Report for March 15

This week:

  • I finished the arduino control code for the arduino mega,  it takes input signals from 4 GPIO pins from the rpi4 that each carries information on which candy to dispense, type 1,2,3, or 4, and the aduino controls 4 rotational servo motors, if the input signal says type 1, then that corresponding servo motor rotates for 360 degrees and stops. the arduino sends a one bit output from another GPIO pin that indicates the rotation is complete.

  • ssh’d into the rpi4, pulled from git and tested the standard mode program on the rpi touchscreen with Min Ji. Test video availble in team report.
  • Created the starter react code for the web page under the “webpage_code” directory in our git repo and modified the interface for the game’s visual theme, modified vite.config.ts for it to automatically pop up on touchscreen,  modified TransitionLayout.tsx for our ux flow.
  • Merged the wepage repo and the standard mode code repo and fixed the local npm run issue for both gameplay and webpage.

Our progress is behind in terms of integration. We plan to work on software integration next week together with the physical build. For next week I am going to

  • Fix the audio narration web-run stuck issue on rpi screen together with Min Ji, and go through testing for the addition of candy selection and other screens.
  • Work on laser cutting and connecting the wood boards for the machine body together with team.
  • Assemble hardware connection of voltage down converter, motors, arduino, rpi, and screen.
  • Integrate cloud database user csv upload with supabase on webpage.

Fei’s Status Report for Mar 15

Over the past week, I focused on developing a working version of Challenge Mode. This involved implementing the gameplay and scoring system, designing four gaps between pillars where players input answers, and adding game loss logic for incorrect answers or collisions with pillars. While the core functionality is working, I am slightly behind schedule. To catch up, I plan to dedicate the entire day tomorrow to finalizing the implementation. Next week, I aim to complete the upload to the Raspberry Pi and begin the physical assembly of the box.