{"id":15834,"date":"2022-05-06T16:31:19","date_gmt":"2022-05-06T20:31:19","guid":{"rendered":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/?p=15834"},"modified":"2022-05-06T16:44:56","modified_gmt":"2022-05-06T20:44:56","slug":"cash-dispenser-by-team-cumulonimbus-final-documentation","status":"publish","type":"post","link":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/cash-dispenser-by-team-cumulonimbus-final-documentation\/","title":{"rendered":"Cash Dispenser by Team Cumulonimbus: Final Documentation"},"content":{"rendered":"<p>This class teaches students how to design and fabricate mechanisms that utilize Arduino\/small electrical components. This project was intended to allow students to interview a client with a disability and then with their help find an opportunity to improve their day-to-day life with a product. You can see how our interview went <a href=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/interview-with-allie\/\">here.<\/a><\/p>\n<h2><em>What We Built:<\/em><\/h2>\n<p><span style=\"font-weight: 400\">Our project is designed to allow our client Allie to type a price into a keypad and then have the amount of money they need to be dispensed to them as well as the amount of change left over displayed. This cash dispenser can be attached to our client\u2019s wheelchair. There is also a reload mechanism that allows our client to reload the machine with money. Our specific device was designed to dispense $10 and $20 bills.\u00a0<\/span><\/p>\n<div id=\"attachment_15954\" style=\"width: 1510px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-15954\" loading=\"lazy\" class=\"wp-image-15954 size-full\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/featured.png\" alt=\"\" width=\"1500\" height=\"1000\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/featured.png 1500w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/featured-300x200.png 300w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/featured-1024x683.png 1024w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/featured-768x512.png 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/featured-973x649.png 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/featured-508x339.png 508w\" sizes=\"(max-width: 1500px) 100vw, 1500px\" \/><p id=\"caption-attachment-15954\" class=\"wp-caption-text\">A general view of our machine. It is a pink box with two sets of money rollers inside. Each roller compose of two tubes covered and connected by a black fabric with two motors attached to the right side.<\/p><\/div>\n<div id=\"attachment_15952\" style=\"width: 1510px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-15952\" loading=\"lazy\" class=\"wp-image-15952 size-full\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-IR.jpg\" alt=\"\" width=\"1500\" height=\"1000\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-IR.jpg 1500w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-IR-300x200.jpg 300w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-IR-1024x683.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-IR-768x512.jpg 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-IR-973x649.jpg 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-IR-508x339.jpg 508w\" sizes=\"(max-width: 1500px) 100vw, 1500px\" \/><p id=\"caption-attachment-15952\" class=\"wp-caption-text\">Infrared Sensors are depicted on the left and Infrared Detectors are shown on the right. These pair of sensors get blocked by the bills dispensed by the module and once the bill stops blocking the infrared light, the Arduino adds one to the amount of bill dispensed.<\/p><\/div>\n<div id=\"attachment_15953\" style=\"width: 1510px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-15953\" loading=\"lazy\" class=\"size-full wp-image-15953\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-keypad-LCD.jpg\" alt=\"\" width=\"1500\" height=\"1000\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-keypad-LCD.jpg 1500w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-keypad-LCD-300x200.jpg 300w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-keypad-LCD-1024x683.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-keypad-LCD-768x512.jpg 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-keypad-LCD-973x649.jpg 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-keypad-LCD-508x339.jpg 508w\" sizes=\"(max-width: 1500px) 100vw, 1500px\" \/><p id=\"caption-attachment-15953\" class=\"wp-caption-text\">An LCD display is shown to the left with \u201cprice: $\u201d printed on it, a keypad installed in a pink box is shown to the right with the numbers 0 to 9, a star key, and a pound sign arranged onto it in a 3 by 4 matrix. When a key is pressed on the keypad, the display shows the updated number and when done, the user presses the pound sign to enter the price needed to be dispensed. The star key is used to delete unwanted numbers.<\/p><\/div>\n<div id=\"attachment_15951\" style=\"width: 2570px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-15951\" loading=\"lazy\" class=\"wp-image-15951 size-full\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-reload-button-3-scaled.jpg\" alt=\"\" width=\"2560\" height=\"1707\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-reload-button-3-scaled.jpg 2560w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-reload-button-3-300x200.jpg 300w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-reload-button-3-1024x683.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-reload-button-3-768x512.jpg 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-reload-button-3-1536x1024.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-reload-button-3-2048x1365.jpg 2048w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-reload-button-3-973x649.jpg 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-reload-button-3-508x339.jpg 508w\" sizes=\"(max-width: 2560px) 100vw, 2560px\" \/><p id=\"caption-attachment-15951\" class=\"wp-caption-text\">A red push button is placed to the right of the money roller. When this button is pressed, both yellow motors attached to the rollers will begin driving (the top one drives faster than the bottom to ensure the fabric doesn\u2019t create slack between the rollers) to reload the money.<\/p><\/div>\n<div id=\"attachment_15950\" style=\"width: 2570px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-15950\" loading=\"lazy\" class=\"size-full wp-image-15950\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-money-roller-1-scaled.jpg\" alt=\"\" width=\"2560\" height=\"1707\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-money-roller-1-scaled.jpg 2560w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-money-roller-1-300x200.jpg 300w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-money-roller-1-1024x683.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-money-roller-1-768x512.jpg 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-money-roller-1-1536x1024.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-money-roller-1-2048x1365.jpg 2048w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-money-roller-1-973x649.jpg 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/detail-money-roller-1-508x339.jpg 508w\" sizes=\"(max-width: 2560px) 100vw, 2560px\" \/><p id=\"caption-attachment-15950\" class=\"wp-caption-text\">A bill is shown being dispensed by the money roller module. The module is made with two tubes and a black fabric that wraps around both of them. Bills are stored between the rolled-up fabric and motors are driven to dispense and reload the bills.<\/p><\/div>\n<div style=\"width: 620px;\" class=\"wp-video\"><!--[if lt IE 9]><script>document.createElement('video');<\/script><![endif]-->\n<video class=\"wp-video-shortcode\" id=\"video-15834-1\" width=\"620\" height=\"1102\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/IMG_1510.MOV.mp4?_=1\" \/><a href=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/IMG_1510.MOV.mp4\">https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/IMG_1510.MOV.mp4<\/a><\/video><\/div>\n<p><span style=\"font-weight: 400\">A video that demonstrates the entire process of dispensing money from the view of the user.<\/span><\/p>\n<div style=\"width: 620px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-15834-2\" width=\"620\" height=\"1102\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/IMG_1519.MOV.mp4?_=2\" \/><a href=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/IMG_1519.MOV.mp4\">https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/IMG_1519.MOV.mp4<\/a><\/video><\/div>\n<p><span style=\"font-weight: 400\">A video that demonstrates the entire process of dispensing money from the view of the shop clerks.<\/span><\/p>\n<h3>Narrative Sketch:<\/h3>\n<p><span style=\"font-weight: 400\">When Allie goes out shopping and is about to pay for her groceries, she would turn to the Money Dispenser sitting on her desk on top of the wheelchair. She types in the price of the item using the keypad and the motors run and dispense the correct number of 10- and 20-dollar bills. The display screen reads the change Allie would get back. <\/span><span style=\"font-weight: 400\">When Allie gets home, she and her helper would unlock the cabinet in the front, and then press the red button which says reload 10s and reload the 20s to reload the machine for purchases in the future.<\/span><\/p>\n<h2><em>How we got here:<\/em><\/h2>\n<h3>Prototype:<\/h3>\n<p><span style=\"font-weight: 400\">This prototype was designed to help answer the question: how to most effectively dispense only one bill at a time?<\/span><\/p>\n<p><span style=\"font-weight: 400\">Our first prototype was based on how a printer dispenses paper and utilized multiple roller mechanisms that would dispense a bill from a stack. Basically a spring would push up a stack of bills to a certain height and then a rolling cylinder with grippy material would push the bill forward. We then moved on to our second prototype which is the design that we ended up using with two rollers and fabric pulled between them. This design is essentially a piece of fabric taped to two roller and as its winded, bills are inserted between the folds of the fabric. The fabric is then unwound to dispense the bills. <\/span><\/p>\n<div id=\"attachment_15973\" style=\"width: 428px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-15973\" loading=\"lazy\" class=\"wp-image-15973\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.15.55-PM.png\" alt=\"\" width=\"418\" height=\"594\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.15.55-PM.png 760w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.15.55-PM-211x300.png 211w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.15.55-PM-721x1024.png 721w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.15.55-PM-508x722.png 508w\" sizes=\"(max-width: 418px) 100vw, 418px\" \/><p id=\"caption-attachment-15973\" class=\"wp-caption-text\">Our original bill-dispensing prototype<\/p><\/div>\n<p>&nbsp;<\/p>\n<div id=\"attachment_15982\" style=\"width: 464px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-15982\" loading=\"lazy\" class=\" wp-image-15982\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.33.49-PM.png\" alt=\"\" width=\"454\" height=\"613\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.33.49-PM.png 806w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.33.49-PM-222x300.png 222w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.33.49-PM-759x1024.png 759w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.33.49-PM-768x1037.png 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.33.49-PM-508x686.png 508w\" sizes=\"(max-width: 454px) 100vw, 454px\" \/><p id=\"caption-attachment-15982\" class=\"wp-caption-text\">The first prototype required us to make a spring which we did by wrapping wire around a clamp.<\/p><\/div>\n<p>&nbsp;<\/p>\n<div id=\"attachment_15977\" style=\"width: 492px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-15977\" loading=\"lazy\" class=\" wp-image-15977\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.28.44-PM.png\" alt=\"\" width=\"482\" height=\"326\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.28.44-PM.png 1896w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.28.44-PM-300x203.png 300w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.28.44-PM-1024x692.png 1024w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.28.44-PM-768x519.png 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.28.44-PM-1536x1039.png 1536w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.28.44-PM-973x658.png 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.28.44-PM-508x343.png 508w\" sizes=\"(max-width: 482px) 100vw, 482px\" \/><p id=\"caption-attachment-15977\" class=\"wp-caption-text\">First rolling mechanism with only two motors and one set of rollers.<\/p><\/div>\n<p>&nbsp;<\/p>\n<div style=\"width: 620px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-15834-3\" width=\"620\" height=\"349\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Prototype-1.mp4?_=3\" \/><a href=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Prototype-1.mp4\">https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Prototype-1.mp4<\/a><\/video><\/div>\n<p>Our first prototype of the bill dispensing mechanism was not able to consistently roll out a single bill at a time.<\/p>\n<p>&nbsp;<\/p>\n<div id=\"attachment_15974\" style=\"width: 446px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-15974\" loading=\"lazy\" class=\"wp-image-15974\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.18.17-PM.png\" alt=\"\" width=\"436\" height=\"329\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.18.17-PM.png 1432w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.18.17-PM-300x226.png 300w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.18.17-PM-1024x772.png 1024w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.18.17-PM-768x579.png 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.18.17-PM-973x734.png 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.18.17-PM-508x383.png 508w\" sizes=\"(max-width: 436px) 100vw, 436px\" \/><p id=\"caption-attachment-15974\" class=\"wp-caption-text\">Prototype of the new bill dispensing mechanism without fabric attached<\/p><\/div>\n<div class=\"mceTemp\"><\/div>\n<div id=\"attachment_15986\" style=\"width: 1620px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-15986\" loading=\"lazy\" class=\"wp-image-15986 size-full\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.41.28-PM.png\" alt=\"\" width=\"1610\" height=\"904\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.41.28-PM.png 1610w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.41.28-PM-300x168.png 300w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.41.28-PM-1024x575.png 1024w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.41.28-PM-768x431.png 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.41.28-PM-1536x862.png 1536w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.41.28-PM-973x546.png 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.41.28-PM-508x285.png 508w\" sizes=\"(max-width: 1610px) 100vw, 1610px\" \/><p id=\"caption-attachment-15986\" class=\"wp-caption-text\">Testing the new bill-dispensing mechanism<\/p><\/div>\n<p>&nbsp;<\/p>\n<div id=\"attachment_15985\" style=\"width: 816px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-15985\" loading=\"lazy\" class=\"size-full wp-image-15985\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.39.41-PM.png\" alt=\"\" width=\"806\" height=\"1078\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.39.41-PM.png 806w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.39.41-PM-224x300.png 224w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.39.41-PM-766x1024.png 766w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.39.41-PM-768x1027.png 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Screen-Shot-2022-05-06-at-3.39.41-PM-508x679.png 508w\" sizes=\"(max-width: 806px) 100vw, 806px\" \/><p id=\"caption-attachment-15985\" class=\"wp-caption-text\">Assembling our prototype for our final design<\/p><\/div>\n<p><span style=\"font-weight: 400\">Most of our prototyping process was spent figuring out if it was possible for us to create a money dispenser, specifically one that would only dispense one bill at a time. We first modeled our mechanism after a printer that utilized a set of rollers that would only allow one bill to pass through at a time. However, we found that this mechanism required high precision tolerance between the rollers which was difficult for us to consistently achieve. We then switched to our final mechanism which instead of storing the bills in a stack where they could stick together, layered the bills separately inside a roll of fabric.<\/span><\/p>\n<p><span style=\"font-weight: 400\">We received feedback that our original mechanism was flawed because we did not have a way to detect if the correct number of bills had been dispensed, which we solved by integrating IR sensors into the design. However, we weren&#8217;t able to react to the feedback to make the mechanism smaller due to how much testing that would require and the time limit we were under. The biggest (good) surprise we encountered was how smoothly our second mechanism worked after having so much difficulty with tweaking the first one. <\/span><\/p>\n<h3>Process:<\/h3>\n<div id=\"attachment_15907\" style=\"width: 1930px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-15907\" loading=\"lazy\" class=\"size-full wp-image-15907\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/process-Image-2-constructing-the-money-rollers-scaled.jpg\" alt=\"a photograph of a table with various parts for constructing the bill rollers. There are a couple of toilet paper tubes, rectangular pieces of acrylic with two holes in each, a hot glue gun, and a couple clear acrylic rings. \" width=\"1920\" height=\"2560\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/process-Image-2-constructing-the-money-rollers-scaled.jpg 1920w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/process-Image-2-constructing-the-money-rollers-225x300.jpg 225w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/process-Image-2-constructing-the-money-rollers-768x1024.jpg 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/process-Image-2-constructing-the-money-rollers-1152x1536.jpg 1152w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/process-Image-2-constructing-the-money-rollers-1536x2048.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/process-Image-2-constructing-the-money-rollers-973x1297.jpg 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/process-Image-2-constructing-the-money-rollers-508x677.jpg 508w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><p id=\"caption-attachment-15907\" class=\"wp-caption-text\">Constructing the bill rollers using laser-cut and 3D-printed parts<\/p><\/div>\n<div id=\"attachment_15906\" style=\"width: 2570px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-15906\" loading=\"lazy\" class=\"size-full wp-image-15906\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/process-image-6-our-final-roller-mechanism-scaled.jpg\" alt=\"Two fully-constructed bill rollers. These rollers are made from toilet paper tubes wrapped with black nylon fabric, and have gray 3D-printed connectors on the end to pair with the toy gear box motors.\" width=\"2560\" height=\"1920\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/process-image-6-our-final-roller-mechanism-scaled.jpg 2560w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/process-image-6-our-final-roller-mechanism-300x225.jpg 300w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/process-image-6-our-final-roller-mechanism-1024x768.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/process-image-6-our-final-roller-mechanism-768x576.jpg 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/process-image-6-our-final-roller-mechanism-1536x1152.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/process-image-6-our-final-roller-mechanism-2048x1536.jpg 2048w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/process-image-6-our-final-roller-mechanism-973x730.jpg 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/process-image-6-our-final-roller-mechanism-508x381.jpg 508w\" sizes=\"(max-width: 2560px) 100vw, 2560px\" \/><p id=\"caption-attachment-15906\" class=\"wp-caption-text\">Fully constructed bill rollers using standardized 3D-printed and laser-cut parts.<\/p><\/div>\n<div id=\"attachment_15919\" style=\"width: 2570px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-15919\" loading=\"lazy\" class=\"size-full wp-image-15919\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Process-Image-3-pin-mapping-for-the-keypad-scaled.jpg\" alt=\"a white board table with a grid partially filled in with numbers corresponding to keys on a keypad. There is also a laptop attached to a microcontroller and keypad where I am tapping keys to make sure the right number is appearing on the computer.\" width=\"2560\" height=\"1920\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Process-Image-3-pin-mapping-for-the-keypad-scaled.jpg 2560w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Process-Image-3-pin-mapping-for-the-keypad-300x225.jpg 300w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Process-Image-3-pin-mapping-for-the-keypad-1024x768.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Process-Image-3-pin-mapping-for-the-keypad-768x576.jpg 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Process-Image-3-pin-mapping-for-the-keypad-1536x1152.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Process-Image-3-pin-mapping-for-the-keypad-2048x1536.jpg 2048w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Process-Image-3-pin-mapping-for-the-keypad-973x730.jpg 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Process-Image-3-pin-mapping-for-the-keypad-508x381.jpg 508w\" sizes=\"(max-width: 2560px) 100vw, 2560px\" \/><p id=\"caption-attachment-15919\" class=\"wp-caption-text\">Figuring out the row and column pin-mapping for the keypad.<\/p><\/div>\n<div id=\"attachment_15997\" style=\"width: 679px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-15997\" loading=\"lazy\" class=\"size-full wp-image-15997\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/ir.jpg\" alt=\"\" width=\"669\" height=\"893\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/ir.jpg 669w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/ir-225x300.jpg 225w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/ir-508x678.jpg 508w\" sizes=\"(max-width: 669px) 100vw, 669px\" \/><p id=\"caption-attachment-15997\" class=\"wp-caption-text\">Wiring the IR receiver and transducer on a breadboard for initial readings<\/p><\/div>\n<p>&nbsp;<\/p>\n<div id=\"attachment_15934\" style=\"width: 2570px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-15934\" loading=\"lazy\" class=\"size-full wp-image-15934\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/testing-hardware-scaled.jpg\" alt=\"This image includes our hardware testing set-up. There is a long piece of cardboard with many electrical components and wires such as motors, a keypad, a microcontroller, and IR sensors.\" width=\"2560\" height=\"2225\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/testing-hardware-scaled.jpg 2560w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/testing-hardware-300x261.jpg 300w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/testing-hardware-1024x890.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/testing-hardware-768x667.jpg 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/testing-hardware-1536x1335.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/testing-hardware-2048x1780.jpg 2048w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/testing-hardware-973x846.jpg 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/testing-hardware-508x441.jpg 508w\" sizes=\"(max-width: 2560px) 100vw, 2560px\" \/><p id=\"caption-attachment-15934\" class=\"wp-caption-text\">Integrating multiple pieces of hardware into a circuit with the Arduino Mega.<\/p><\/div>\n<div id=\"attachment_15929\" style=\"width: 2454px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-15929\" loading=\"lazy\" class=\"size-full wp-image-15929\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/IMG_0307-1-scaled.jpg\" alt=\"A view of the back panel of our box. The LCD display has a hole cut out for it on the upper left side, there is a hole for the keypad wires on the lower left side, and there is an opening for the power cord on the lower right side.\" width=\"2444\" height=\"2560\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/IMG_0307-1-scaled.jpg 2444w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/IMG_0307-1-286x300.jpg 286w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/IMG_0307-1-977x1024.jpg 977w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/IMG_0307-1-768x805.jpg 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/IMG_0307-1-1466x1536.jpg 1466w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/IMG_0307-1-1955x2048.jpg 1955w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/IMG_0307-1-973x1019.jpg 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/IMG_0307-1-508x532.jpg 508w\" sizes=\"(max-width: 2444px) 100vw, 2444px\" \/><p id=\"caption-attachment-15929\" class=\"wp-caption-text\">Constructing the back panel of the box<\/p><\/div>\n<p><span style=\"font-weight: 400\">The biggest change in our design moving forward from our prototype presentation was switching our bill dispensing mechanism to a simpler two-roller setup. We found a mechanism online that used two rollers driven by motors to reload and dispense bills from a spool of fabric. This mechanism gave us more control over how many bills were released at once. It was also more appropriate for Allie\u2019s needs since she told us that she gets about 60 dollars each week in the form of 3 twenty-dollar bills, so she didn&#8217;t necessarily need a device that could fit a large stack of bills.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">We also had to make a decision about how our device could track the number of dispensed bills from each compartment. Initially, we planned to time how long it would take to dispense a single bill, but that would require the bills to be evenly spaced out when loaded into the rollers. Instead, we chose to use an IR transmitter and receiver that detects a decrease in the IR signal as a bill exits the money rollers. Similarly, we had to find a method to determine when a given compartment was out of bills. At first we planned to use an RGB color sensor to detect a color change when a roller reached a white piece of tape at the end of the fabric. However, we ended up using an IR sensor so that we would only have to work with one signal value rather than the three values that an RGB sensor outputs.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Our biggest breakthrough was figuring out how to prevent fabric slack from bunching up between the two rollers when running the motors. We found the best way to maintain good tension in the fabric roll was to drive the bottom roller faster than the top roller while dispensing and drive the top roller faster while reloading. This allowed us to smoothly and consistently dispense\/reload bills.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">One mistake we made was waiting too long to start arranging our pieces of hardware into the outer shell of the box. We spent a lot of time fine-tuning the IR sensor thresholds outside the final cash box. This took up a lot of time, and we had to redo the IR signal thresholds in our code anyway because the box provided a much darker environment. If we had put our entire device into the box earlier on, we would have still been able to fine-tune the performance of our hardware and would have had more time for wire management inside the final form.<\/span><\/p>\n<h3>Gantt Chart Schedule:<\/h3>\n<div id=\"attachment_15998\" style=\"width: 1708px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-15998\" loading=\"lazy\" class=\"size-full wp-image-15998\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/gantt.jpg\" alt=\"\" width=\"1698\" height=\"586\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/gantt.jpg 1698w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/gantt-300x104.jpg 300w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/gantt-1024x353.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/gantt-768x265.jpg 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/gantt-1536x530.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/gantt-973x336.jpg 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/gantt-508x175.jpg 508w\" sizes=\"(max-width: 1698px) 100vw, 1698px\" \/><p id=\"caption-attachment-15998\" class=\"wp-caption-text\">Gantt chart timeline from prototype critique until final presentation.<\/p><\/div>\n<p><span style=\"font-weight: 400\">Our team followed the sequence of tasks on the Gantt chart pretty closely. However, we underestimated how long it would take us to complete certain tasks. There ended up being a lot more hardware than initially expected, so the process of wiring, writing code, and introducing each component into the circuit took longer than expected. Rather than finishing the \u201cimplementing circuit\u201d phase by 4\/24, we didn\u2019t finish integrating all the electronics and the roller mechanisms until 4\/29. This only gave us 3 days to put all of our hardware into the outer box. <\/span><\/p>\n<h2><em>Conclusions and Lessons Learned:<\/em><\/h2>\n<p><span style=\"font-weight: 400\">This project has been a difficult but rewarding experience. We have run into a lot of problems during every stage of the process, including revamping the entire mechanism after the prototype review, but we were able to put together the mechanism in the end. The box itself during the final review still had a lot of room for improvement. As pointed out by comments such as \u201cthe fabrication is flimsy with a less-than-ideal UI\u201d, \u201ca bit big\u201d, and \u201c[Allie] can\u2019t see what comes out\u201d, the fabrication was a last-minute process and had flaws such as its size and fragility. We also planned on making a locked cabinet in the front but couldn\u2019t get around to installing it. Additionally, the box orients itself away from Allie which prevents her from seeing the money being dispensed. A great solution that our critic brought up was adding a \u201cswivel\u201d to the bottom of the device so that it can \u201cturn towards Allie\u201d first, then when Allie makes sure it is the right amount, she can turn the machine towards the shop staff. Moreover, the problem of size was also discussed heavily in the critique. One critic suggested using \u201cbill recognition\u201d and some forms of servo motor that directs the money out or back into the loop so that we can use one module for all kinds of bills instead of two modules for two types of bills. This will not only increase the utility of the machine but also downsize it to a reasonable and usable form. Another critic pointed out is the messy \u201cinner components\u201d that should be organized which might reduce the size of the box further. However, despite the shortcomings, our project still got some praise for tackling such a difficult problem, dealing with single sheets of paper. Some critics said that the \u201cmotor system works well\u201d and contains \u201cclever paper handling\u201d which we are happy to see.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Working with Allie has been a phenomenal experience as she was extremely helpful during our creation process. Allie shared us some hobbies with us and even some of the posters she made in her free time. We were able to learn to incorporate ergonomic designs into the project that caters to Allie\u2019s specific needs, and through that, we learned more about disability beyond the project as we realized that disability is not just simply a medical definition but also a social problem. Some items and facilities are simply not designed for those with different needs and people are handicapped by the products and that is an external problem instead of an internal one. In the future, we will ask more questions working with people with disabilities and have more meetings with them to get a better sense of the user\u2019s experience.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Working on Zoom certainly brought up some difficulties during the interview as Allie had some issues with her microphone, but overall, we as a team were able to get together in person for the most part and work in the Physical Computing lab together without any issues.<\/span><\/p>\n<div id=\"attachment_16001\" style=\"width: 2570px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-16001\" loading=\"lazy\" class=\"size-full wp-image-16001\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/DSC_3209-scaled.jpg\" alt=\"\" width=\"2560\" height=\"1711\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/DSC_3209-scaled.jpg 2560w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/DSC_3209-300x201.jpg 300w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/DSC_3209-1024x684.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/DSC_3209-768x513.jpg 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/DSC_3209-1536x1027.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/DSC_3209-2048x1369.jpg 2048w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/DSC_3209-973x650.jpg 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/DSC_3209-508x340.jpg 508w\" sizes=\"(max-width: 2560px) 100vw, 2560px\" \/><p id=\"caption-attachment-16001\" class=\"wp-caption-text\">Photo with Allie at the final critique.<\/p><\/div>\n<h2><em>Technical Details:<\/em><\/h2>\n<div id=\"attachment_15938\" style=\"width: 1502px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/electrical-schematic-Page-2.drawio-2.svg\"><img aria-describedby=\"caption-attachment-15938\" loading=\"lazy\" class=\"wp-image-15938 size-full\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/electrical-schematic-Page-2.drawio-2.svg\" alt=\"\" width=\"1492\" height=\"942\" \/><\/a><p id=\"caption-attachment-15938\" class=\"wp-caption-text\">Cash dispenser electrical schematic<\/p><\/div>\n<h3><\/h3>\n<div id=\"attachment_15937\" style=\"width: 1217px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/electrical-schematic-block-diagram.drawio-2.svg\"><img aria-describedby=\"caption-attachment-15937\" loading=\"lazy\" class=\"wp-image-15937 size-full\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/electrical-schematic-block-diagram.drawio-2.svg\" alt=\"\" width=\"1207\" height=\"598\" \/><\/a><p id=\"caption-attachment-15937\" class=\"wp-caption-text\">Cash dispenser block diagram<\/p><\/div>\n<h3>Code:<\/h3>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\">\/* Money Box Code - Andy Jiang, Cassie Rausch, Lynn Rushkin\r\n *  \r\n * How it works:\r\n *  Use the keypad to enter the price you would like to pay:\r\n      '#' = enter (E)\r\n      '*' = delete (D)\r\n      type in your price as dollars and cents (i.e. 1600 --&gt; $16.00, 4567 --&gt; $45.67)\r\n      if you mess up a digit then click '*' to delete the last digit\r\n      press # when you have your price entered\r\n   The code calculates how many 10 and 20 dollar bills need to be dispensed. As the device dispenses the bills, \"dispensing...\" will show up on LCD display. The IR transducer\/receiver pair on the $10 and $20 compartments will detect how many bills have been dispensed and once the correct amount has been paid the motors of the compartments will stop running. The change amount is calculated based on how much was paid and the entered price. This amount will pop up on the LCD display. If one bill compartment is empty(detected by IR sensor)then the number of bills needed will be recalculated and dispensed from the compartment that still has bills. \r\n\r\n   Sources:\r\n   1. Keypad code from Terrance Ou's \"Math Buddy\" code (https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/math-buddy\/)\r\n   2. LCD display code from https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/tutorials\/I2C-lcd\r\n\r\n  \/\/----------------pin mapping ----------------------\r\n  Pin mapping:\r\n    Arduino Mega pin | type   | description\r\n    -----------------|--------|-------------\r\n    A1                 input     IR receiver \r\n                                 (detect dispensed $20 bills)\r\n    A2                 input     IR receiver \r\n                                 (detect dispensed $10 bills)\r\n    A4                 input     IR sensor \r\n                                 (detects empty $10 bill compartment) \r\n    A5                 input     IR sensor \r\n                                 (detects empty $20 bill compartment) \r\n    2                  output    toy gear box motor 1 \r\n                                 (top roller of $10 bill compartment)\r\n    3                  output    toy gear box motor 1 \r\n                                 (top roller of $10 bill compartment)\u00a0\r\n    5                  output    toy gear box motor 2 \r\n                                 (bottom roller of $10 bill compartment)\r\n    6                  output    toy gear box motor 2 \r\n                                 (bottom roller of $10 bill compartment)\r\n    9                  output    toy gear box motor 3 \r\n                                 (top roller of $20 bill compartment)\r\n    10                 output    toy gear box motor 3 \r\n                                 (top roller of $20 bill compartment)\r\n    11                 output    toy gear box motor 4 \r\n                                 (bottom roller of $20 bill compartment)\r\n    12                 output    toy gear box motor 4 \r\n                                 (bottom roller of $20 bill compartment)\r\n    25                 input     button 1 (for reloading $20 bills) \r\n    27                 input     button 2(for reloading $10 bills)\r\n    39                 input     keypad (COL 2)\r\n    41                 input     keypad (ROW 4)\r\n    43                 input     keypad (COL 3)\r\n    45                 input     keypad (ROW 1)\r\n    47                 input     keypad (COL 1)\r\n    49                 input     keypad (ROW 2)\r\n    51                 input     keypad (ROW 3)\r\n    SDA                          LCD display\r\n    SCL                          LCD diaplay\r\n\r\n   Note: toy gear box motors are connected to Arduino Mega through a dual motor driver\r\n*\/\r\n\r\n\/\/--------------initialize LCD----------------------\r\n#include &lt;Wire.h&gt;\r\n#include &lt;LiquidCrystal_I2C.h&gt;\r\nLiquidCrystal_I2C screen(0x27, 16, 2);\r\n\r\n\/\/---------------------initialize keypad---------------------\r\n#include &lt;Keypad.h&gt;\r\nconst byte ROWS = 4; \/\/ four rows\r\nconst byte COLS = 3; \/\/ three columns\r\n\r\nchar keys[ROWS][COLS] = {\r\n  {'1', '2', '3'},\r\n  {'4', '5', '6'},\r\n  {'7', '8', '9'},\r\n  {'D', '0', 'E'}\r\n};\r\n\r\n\r\nbyte rowPins[ROWS] = {45, 49, 51, 41}; \/\/ connect to the row pinouts of the keypad\r\nbyte colPins[COLS] = {47, 39, 43};    \/\/ connect to the column pinouts of the keypad\r\n\r\n\r\nKeypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );\r\n\r\n\/\/----------- initialize motors ----------------------------------\r\n\/\/pins for 20s top\r\nint motorControlPin1 = 12;\r\nint motorControlPin2 = 11;\r\n\r\n\/\/pins for 20s bottom\r\nint motorControlPin3 = 2;\r\nint motorControlPin4 = 3;\r\n\r\n\/\/pins for 10s top\r\nint motorControlPin5 = 5;\r\nint motorControlPin6 = 6;\r\n\r\n\/\/pins for 10s bottom\r\nint motorControlPin7 = 9;\r\nint motorControlPin8 = 10;\r\n\r\n\/\/---------------initialize IR receivers for bill detection ------------------\r\nconst int IRPin_20s = A1;\r\nconst int IRPin_10s = A2;\r\nunsigned long LastIRTime;\r\n\r\nint IRVal_20s; \/\/reading of the sensor (0 to 1023)\r\nbool currentIR_20s = 0; \/\/is the IR sensor covered currently? (1 = yes, 0 = no)\r\nbool prevIR_20s = 0; \/\/was the IR sensor covered previously? (1 = yes, 0 = no)\r\n\r\nint IRVal_10s;\r\nbool currentIR_10s = 0;\r\nbool prevIR_10s = 0;\r\n\r\nint dispensedTwenties = 0; \/\/counts how many bills have been dispensed from 20s compartment\r\nint dispensedTens = 0;\r\n\r\n\/\/-------------initialize IR sensor variables for empty compartment detection -------\r\nconst int tenIR_empty = A4;\r\nconst int twenIR_empty = A5;\r\nint tenIR, twenIR;\r\nbool EmptyModule_20s = 0; \/\/is the $20 compartment empty? (1 = yes, 0 = no)\r\nbool EmptyModule_10s = 0;\r\n\r\n\/\/ -----------initialize reload buttons ------------------------\r\nconst int tens_button = 27;\r\nconst int twens_button = 25;\r\n\r\nint twens_buttonVal; \/\/on or off values of the button reading\r\nint tens_buttonVal;\r\n\r\n\/\/----------- initialize bill calculating variables --------------\r\nchar key; \/\/keypad reading\r\nString price = \"\";\r\nfloat finalPrice = 0;\r\nint billsTwenties = 0; \/\/number of $20 bills we need to dispense\r\nint billsTens = 0; \/\/number of $10 bills we need to dispense\r\nfloat change = 0;\r\n\r\n\/\/ -----------calibrate these values -----------------------------\r\n\r\n\/\/motor speed dispense\r\nconst int twenTopSpeed_dispense = 100;\r\nconst int twenBotSpeed_dispense = 140;\r\n\r\nconst int tenTopSpeed_dispense = 100;\r\nconst int tenBotSpeed_dispense = 140;\r\n\r\n\/\/motor speed reloading\r\nconst int twenTopSpeed_reload = 150;\r\nconst int twenBotSpeed_reload = 80;\r\n\r\nconst int tenTopSpeed_reload = 150;\r\nconst int tenBotSpeed_reload = 60;\r\n\r\n\/*IR bill dispense threshold - any IR reading below these values means\r\na bill is passing *\/\r\nconst int twenBills_threshold = 50;\r\nconst int tenBills_threshold = 60;\r\n\r\n\/*IR empty module threshold - any IR reading above these values means \r\nthe bill compartment has been emptied.*\/\r\nconst int empty_threshold20s = 200;\r\nconst int empty_threshold10s = 180;\r\n\r\n\/\/------------setup and main loop---------------------------------\r\n\r\nvoid setup() {\r\n  Serial.begin(9600);\r\n\r\n  \/\/ setup LCD\r\n  screen.init();\r\n  screen.backlight();\r\n  screen.home();\r\n\r\n  pinMode(motorControlPin1, OUTPUT);\r\n  pinMode(motorControlPin2, OUTPUT);\r\n\r\n  pinMode(motorControlPin3, OUTPUT);\r\n  pinMode(motorControlPin4, OUTPUT);\r\n\r\n  pinMode(motorControlPin5, OUTPUT);\r\n  pinMode(motorControlPin6, OUTPUT);\r\n\r\n  pinMode(motorControlPin7, OUTPUT);\r\n  pinMode(motorControlPin8, OUTPUT);\r\n\r\n  pinMode(tenIR_empty, INPUT);\r\n  pinMode(twenIR_empty, INPUT);\r\n  pinMode(IRPin_20s, INPUT);\r\n  pinMode(IRPin_10s, INPUT);\r\n  pinMode(twens_button, INPUT);\r\n  pinMode(tens_button, INPUT);\r\n}\r\n\r\nvoid loop() {\r\n  enteredPrice();\r\n  if (key == 'E') {\r\n    delay(1000);\r\n    calculateBills();\r\n    dispenseBills();\r\n    stop10s_motor();\r\n    stop20s_motor();\r\n    delay(1000);\r\n    calculateChange();\r\n    resetVariables();\r\n  }\r\n \r\n  checkReload();\r\n}\r\n\r\n\/\/------------functions -------------------------------------\r\nvoid clearLastInput() {\r\n  int lastIdx = price.length() - 1;\r\n  screen.setCursor(lastIdx + 8, 0);\r\n  screen.print(\" \");\r\n}\r\n\r\nvoid enteredPrice() { \/\/displays the price typed into the keypad on LCD\r\n  screen.home();\r\n  screen.print(\"price: $\");\r\n  key = keypad.getKey();\r\n  if (key != NO_KEY\r\n      &amp;&amp; key != 'D' &amp;&amp; key != 'E'\r\n      &amp;&amp; price.length() &lt; 20) {\r\n    price += key;\r\n    screen.setCursor(8, 0);\r\n    screen.print(price);\r\n  }\r\n  if (key == 'D') {\r\n    clearLastInput();\r\n    price.remove(price.length() - 1); \/\/removes the last digit from the price string\r\n  }\r\n\r\n  else if (key == 'E') {\r\n    finalPrice = price.toFloat() \/ 100;\r\n    screen.setCursor(8, 0);\r\n    screen.print(finalPrice);\r\n    price = \"\";\r\n  }\r\n}\r\n\r\nvoid calculateBills() { \/\/calculates the number of 10 and 20 dollar bills to ideally dispense\r\n  billsTwenties = finalPrice \/ 20; \/\/integer divide to get how many twenties we need to dispense\r\n  float remainder = finalPrice - 20 * billsTwenties;\r\n  if (remainder &gt; 10) {\r\n    billsTwenties += 1;\r\n  }\r\n  else if (remainder &gt; 0 ) {\r\n    billsTens = 1;\r\n  }\r\n\r\n  \/*Serial.print(\"bills twenties:\");\r\n  Serial.println(billsTwenties);\r\n  Serial.print(\"bills Tens:\");\r\n  Serial.println(billsTens);*\/\r\n}\r\n\r\nvoid run20s_motor() { \/\/drives the top and bottom motors of the $20 compartment to dispense\r\n  \/\/do an initial acceleration (at highest speed) to overcome internal gear resistance, \r\n  \/\/and then drive the motors at a reasonable speed\r\n  \r\n  if (digitalRead(motorControlPin1) == 0 &amp;&amp; digitalRead(motorControlPin4) == 0) {\r\n    analogWrite(motorControlPin1, 255);\r\n    analogWrite(motorControlPin4, 255);\r\n    delay(300);\r\n  }\r\n\r\n  analogWrite(motorControlPin1, twenTopSpeed_dispense);\r\n  analogWrite(motorControlPin2, 0);\r\n\r\n  analogWrite(motorControlPin3, 0);\r\n  analogWrite(motorControlPin4, twenBotSpeed_dispense);\r\n\r\n}\r\nvoid stop20s_motor() {\r\n  analogWrite(motorControlPin1, 0);\r\n  analogWrite(motorControlPin2, 0);\r\n\r\n  analogWrite(motorControlPin3, 0);\r\n  analogWrite(motorControlPin4, 0);\r\n}\r\nvoid run10s_motor() {\r\n  if (digitalRead(motorControlPin6) == 0 &amp;&amp; digitalRead(motorControlPin8) == 0) {\r\n    analogWrite(motorControlPin6, 255);\r\n    analogWrite(motorControlPin8, 255);\r\n    delay(300);\r\n  }\r\n  analogWrite(motorControlPin5, 0);\r\n  analogWrite(motorControlPin6, tenTopSpeed_dispense);\r\n\r\n  analogWrite(motorControlPin7, 0);\r\n  analogWrite(motorControlPin8, tenBotSpeed_dispense);\r\n\r\n}\r\n\r\nvoid stop10s_motor() {\r\n  analogWrite(motorControlPin5, 0);\r\n  analogWrite(motorControlPin6, 0);\r\n\r\n  analogWrite(motorControlPin7, 0);\r\n  analogWrite(motorControlPin8, 0);\r\n}\r\n\r\nvoid checkIR() { \/\/updates boolean values of whether a bill is passing\r\n  \/\/check IR readings in $20 compartment\r\n  IRVal_20s = analogRead(IRPin_20s);\r\n  if (IRVal_20s &lt; twenBills_threshold) {\r\n    currentIR_20s = 1;\r\n  }\r\n  else {\r\n    currentIR_20s = 0;\r\n  }\r\n\r\n  \/\/check IR in $10 compartment\r\n  IRVal_10s = analogRead(IRPin_10s);\r\n  if (IRVal_10s &lt; tenBills_threshold) {\r\n    currentIR_10s = 1;\r\n  }\r\n  else {\r\n    currentIR_10s = 0;\r\n  }\r\n}\r\n\r\nvoid count_billsdispensed() { \/*uses the change in currentIR_10s value from 1 --&gt; 0 \r\n  to determine that a bill has passed*\/\r\n  if (millis() - LastIRTime &gt;= 400) {\r\n    LastIRTime = millis();\r\n    checkIR();\r\n    if (currentIR_20s == 0 &amp;&amp; prevIR_20s == 1) {\r\n      dispensedTwenties += 1;\r\n    }\r\n    prevIR_20s = currentIR_20s;\r\n    if (currentIR_10s == 0 &amp;&amp; prevIR_10s == 1) {\r\n      dispensedTens += 1;\r\n    }\r\n    prevIR_10s = currentIR_10s;\r\n    \/*\r\n      Serial.print(\"dispensed tens: \");\r\n      Serial.println(dispensedTens);\r\n    *\/\r\n  }\r\n}\r\n\r\nvoid moduleStatus() { \/\/check if either bill compartment has been emptied\r\n  tenIR = analogRead(tenIR_empty);\r\n  twenIR = analogRead(twenIR_empty);\r\n  \/\/Serial.println(tenIR); \/\/ push the most recent value to the computer\r\n  if (tenIR &gt;= empty_threshold10s) {\r\n    EmptyModule_10s = 1;\r\n  }\r\n  if (twenIR &gt;= empty_threshold20s) {\r\n    EmptyModule_20s = 1;\r\n  }\r\n}\r\n\r\nvoid dispenseBills() {\r\n  screen.clear();\r\n  screen.home();\r\n  screen.print(\"dispensing...\");\r\n  \r\n  \/\/the following while loop will continue to run as long as there are bills needed to be dispensed to pay the entered price and at least one bill compartment hasn't been emptied\r\n  while ((billsTwenties &gt; dispensedTwenties or billsTens &gt; dispensedTens) &amp;&amp; (EmptyModule_20s == 0 or EmptyModule_10s == 0)) {\r\n    if (billsTwenties &gt; dispensedTwenties and EmptyModule_20s == 0) {\r\n      run20s_motor();\r\n    }\r\n    if (billsTwenties &gt; dispensedTwenties and EmptyModule_20s == 1) {\r\n      stop20s_motor();\r\n      billsTens += 2 * (billsTwenties - dispensedTwenties);\r\n      billsTwenties = dispensedTwenties;\r\n    }\r\n    if (billsTwenties == dispensedTwenties) {\r\n      stop20s_motor();\r\n    }\r\n    if (billsTens &gt; dispensedTens and EmptyModule_10s == 0) {\r\n      run10s_motor();\r\n    }\r\n    if (billsTens &gt; dispensedTens and EmptyModule_10s == 1) {\r\n      stop10s_motor();\r\n      billsTwenties += ((billsTens - dispensedTens) \/ 2) + 1 ;\r\n      billsTens = dispensedTens;\r\n    }\r\n    if (billsTens == dispensedTens) {\r\n      stop10s_motor();\r\n    }\r\n    \/\/check whether the 10s or 20s modules are empty\r\n    moduleStatus();\r\n\r\n    \/\/check how many 10s and 20s have been dispensed\r\n    count_billsdispensed();\r\n  }\r\n}\r\n\r\nvoid calculateChange() {\r\n  change = (dispensedTwenties * 20 + dispensedTens * 10) - finalPrice;\r\n  screen.clear();\r\n  screen.setCursor(0, 0);\r\n  screen.print(\"change: $\");\r\n  screen.setCursor(9, 0);\r\n  screen.print(change);\r\n  delay(3000);\r\n  screen.clear();\r\n}\r\n\r\nvoid checkReload() { \/\/checks if buttons are being pressed. If so, then motors of the bill compartment that correspond to the button will be driven in the opposite direction to reload money into the rollers. \r\n  twens_buttonVal = digitalRead(twens_button);\r\n  tens_buttonVal = digitalRead(tens_button);\r\n  if (twens_buttonVal == 1) {\r\n    if (digitalRead(motorControlPin2) == 0 &amp;&amp; digitalRead(motorControlPin3) == 0) {\r\n      analogWrite(motorControlPin2, 255);\r\n      analogWrite(motorControlPin3, 255);\r\n      delay(300);\r\n    }\r\n\r\n    analogWrite(motorControlPin1, 0);\r\n    analogWrite(motorControlPin2, twenTopSpeed_reload);\r\n\r\n    analogWrite(motorControlPin3, twenBotSpeed_reload);\r\n    analogWrite(motorControlPin4, 0);\r\n\r\n  }\r\n\r\n  if (twens_buttonVal == 0) {\r\n    stop20s_motor();\r\n  }\r\n\r\n  if (tens_buttonVal == 1) {\r\n    \/\/10\r\n    if (digitalRead(motorControlPin5) == 0 &amp;&amp; digitalRead(motorControlPin7) == 0) {\r\n      analogWrite(motorControlPin5, 255);\r\n      analogWrite(motorControlPin7, 200);\r\n      delay(300);\r\n    }\r\n\r\n    analogWrite(motorControlPin5, tenTopSpeed_reload);\r\n    analogWrite(motorControlPin6, 0);\r\n\r\n    analogWrite(motorControlPin7, tenBotSpeed_reload);\r\n    analogWrite(motorControlPin8, 0);\r\n  }\r\n  \r\n  if (tens_buttonVal == 0) {\r\n    stop10s_motor();\r\n  }\r\n}\r\n\r\nvoid resetVariables() {\r\n  key;\r\n  price = \"\";\r\n  finalPrice = 0;\r\n  billsTwenties = 0;\r\n  billsTens = 0;\r\n  change = 0;\r\n  dispensedTwenties = 0; \/\/counts how many bills have been dispensed from 20s compartment\r\n  dispensedTens = 0;\r\n  EmptyModule_20s = 0;\r\n  EmptyModule_10s = 0;\r\n}<\/pre>\n<h3>Design Files<\/h3>\n<p><a href=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Money-box-case-zip.zip\">Money box case zip<\/a><\/p>\n<p><a href=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Money-dispenser-zip.zip\">Money dispenser zip<\/a><\/p>\n<p><a href=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-content\/uploads\/2022\/05\/Keypad-box.zip\">Keypad box<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This class teaches students how to design and fabricate mechanisms that utilize Arduino\/small electrical components. This project was intended to allow students to interview a client with a&#8230;<\/p>\n","protected":false},"author":217,"featured_media":15954,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[100],"tags":[],"_links":{"self":[{"href":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-json\/wp\/v2\/posts\/15834"}],"collection":[{"href":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-json\/wp\/v2\/users\/217"}],"replies":[{"embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-json\/wp\/v2\/comments?post=15834"}],"version-history":[{"count":25,"href":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-json\/wp\/v2\/posts\/15834\/revisions"}],"predecessor-version":[{"id":16007,"href":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-json\/wp\/v2\/posts\/15834\/revisions\/16007"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-json\/wp\/v2\/media\/15954"}],"wp:attachment":[{"href":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-json\/wp\/v2\/media?parent=15834"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-json\/wp\/v2\/categories?post=15834"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2022\/work\/wp-json\/wp\/v2\/tags?post=15834"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}