{"id":12762,"date":"2021-04-09T13:55:04","date_gmt":"2021-04-09T17:55:04","guid":{"rendered":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/?p=12762"},"modified":"2021-04-09T14:00:09","modified_gmt":"2021-04-09T18:00:09","slug":"washing-machine-signaler","status":"publish","type":"post","link":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/washing-machine-signaler\/","title":{"rendered":"Washing Machine Signaler"},"content":{"rendered":"<h2>Overview<\/h2>\n<p>This device tells you when your washing machine is done from two floors away!<\/p>\n<p><a href=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/gif.mov\">Short video<\/a><\/p>\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-12762-1\" width=\"620\" height=\"1102\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/physcomp.m4v?_=1\" \/><a href=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/physcomp.m4v\">https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/physcomp.m4v<\/a><\/video><\/div>\n<p>&nbsp;<\/p>\n<h5>Image for scale<\/h5>\n<div id=\"attachment_12782\" style=\"width: 2570px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-12782\" loading=\"lazy\" class=\"wp-image-12782 size-full\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9819-scaled.jpg\" alt=\"\" width=\"2560\" height=\"1920\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9819-scaled.jpg 2560w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9819-300x225.jpg 300w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9819-1024x768.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9819-768x576.jpg 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9819-1536x1152.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9819-2048x1536.jpg 2048w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9819-973x730.jpg 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9819-508x381.jpg 508w\" sizes=\"(max-width: 2560px) 100vw, 2560px\" \/><p id=\"caption-attachment-12782\" class=\"wp-caption-text\">Overall image next to a 9v battery to show scale<\/p><\/div>\n<h5>Featured details<\/h5>\n<div id=\"attachment_12784\" style=\"width: 2570px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-12784\" loading=\"lazy\" class=\"size-full wp-image-12784\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/UX-scaled.jpg\" alt=\"\" width=\"2560\" height=\"1920\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/UX-scaled.jpg 2560w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/UX-300x225.jpg 300w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/UX-1024x768.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/UX-768x576.jpg 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/UX-1536x1152.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/UX-2048x1536.jpg 2048w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/UX-973x730.jpg 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/UX-508x381.jpg 508w\" sizes=\"(max-width: 2560px) 100vw, 2560px\" \/><p id=\"caption-attachment-12784\" class=\"wp-caption-text\">The user interface on the receiving box with panel mounting for the button and LEDs<\/p><\/div>\n<div id=\"attachment_12785\" style=\"width: 2570px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-12785\" loading=\"lazy\" class=\"size-full wp-image-12785\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/plug_in-scaled.jpg\" alt=\"\" width=\"2560\" height=\"1920\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/plug_in-scaled.jpg 2560w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/plug_in-300x225.jpg 300w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/plug_in-1024x768.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/plug_in-768x576.jpg 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/plug_in-1536x1152.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/plug_in-2048x1536.jpg 2048w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/plug_in-973x730.jpg 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/plug_in-508x381.jpg 508w\" sizes=\"(max-width: 2560px) 100vw, 2560px\" \/><p id=\"caption-attachment-12785\" class=\"wp-caption-text\">The cut outs in the boxes allow for easy power plug in without opening them<\/p><\/div>\n<h5>How the device works<\/h5>\n<div id=\"attachment_12773\" style=\"width: 2570px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-12773\" loading=\"lazy\" class=\"size-full wp-image-12773\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/reset-scaled.jpg\" alt=\"\" width=\"2560\" height=\"1920\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/reset-scaled.jpg 2560w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/reset-300x225.jpg 300w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/reset-1024x768.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/reset-768x576.jpg 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/reset-1536x1152.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/reset-2048x1536.jpg 2048w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/reset-973x730.jpg 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/reset-508x381.jpg 508w\" sizes=\"(max-width: 2560px) 100vw, 2560px\" \/><p id=\"caption-attachment-12773\" class=\"wp-caption-text\">The button resets the cycle and both lights turn on to indicate the resetting<\/p><\/div>\n<div id=\"attachment_12781\" style=\"width: 1930px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-12781\" loading=\"lazy\" class=\"wp-image-12781 size-full\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/washing_machine-scaled.jpg\" alt=\"\" width=\"1920\" height=\"2560\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/washing_machine-scaled.jpg 1920w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/washing_machine-225x300.jpg 225w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/washing_machine-768x1024.jpg 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/washing_machine-1152x1536.jpg 1152w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/washing_machine-1536x2048.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/washing_machine-973x1297.jpg 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/washing_machine-508x677.jpg 508w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><p id=\"caption-attachment-12781\" class=\"wp-caption-text\">The transmitting box is placed on the washing machine (magnets on the bottom keep it in place) to detect motion<\/p><\/div>\n<div id=\"attachment_12776\" style=\"width: 2570px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-12776\" loading=\"lazy\" class=\"size-full wp-image-12776\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/washing_done-scaled.jpg\" alt=\"\" width=\"2560\" height=\"1920\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/washing_done-scaled.jpg 2560w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/washing_done-300x225.jpg 300w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/washing_done-1024x768.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/washing_done-768x576.jpg 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/washing_done-1536x1152.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/washing_done-2048x1536.jpg 2048w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/washing_done-973x730.jpg 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/washing_done-508x381.jpg 508w\" sizes=\"(max-width: 2560px) 100vw, 2560px\" \/><p id=\"caption-attachment-12776\" class=\"wp-caption-text\">The green light turns on when the washing machine is done moving<\/p><\/div>\n<h2>Process Images and Review<\/h2>\n<p>Below is my original sketch ideation for the project. It is much simpler than what I ended up with, specifically in terms of the user interface. In early ideation, I had vague ideas of what I would want to include in the UX, but I did not formally decide until I was actively working on the prototype.<\/p>\n<div id=\"attachment_12879\" style=\"width: 1734px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-12879\" loading=\"lazy\" class=\"size-full wp-image-12879\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Screen-Shot-2021-04-08-at-8.42.27-PM.jpg\" alt=\"\" width=\"1724\" height=\"820\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Screen-Shot-2021-04-08-at-8.42.27-PM.jpg 1724w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Screen-Shot-2021-04-08-at-8.42.27-PM-300x143.jpg 300w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Screen-Shot-2021-04-08-at-8.42.27-PM-1024x487.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Screen-Shot-2021-04-08-at-8.42.27-PM-768x365.jpg 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Screen-Shot-2021-04-08-at-8.42.27-PM-1536x731.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Screen-Shot-2021-04-08-at-8.42.27-PM-973x463.jpg 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Screen-Shot-2021-04-08-at-8.42.27-PM-508x242.jpg 508w\" sizes=\"(max-width: 1724px) 100vw, 1724px\" \/><p id=\"caption-attachment-12879\" class=\"wp-caption-text\">Early ideation sketching<\/p><\/div>\n<p>I had a few decision points along my process that affected the outcome of my project. One idea that I tried to implement was including a yellow LED that would be an intermediate state between fully on and fully off. The idea was that the device could provide the user with more information about the washing cycle than just on or off. After lots of trial and error, I did not end up implementing this feature because I was not able to get it working in the code.<\/p>\n<p>Another key point in my project was analyzing the signal from the accelerometer. My original idea was to look at the absolute value of all three axes, to be able to detect any motion in any direction. This proved challenging because I was using the squared function incorrectly in C and was getting very large and meaningless values out of it. After getting help from my instructor, Robert Zacharias, I realized that I did not need to use all three axes, and could get accurate motion detection while only analyzing the x axis data. This simplified my code and math a lot and led me to\u00a0 implement a new method for motion detection: every 1 second, the min and max of the x value is recorded, and if the difference between them is greater than some threshold, then the machine is determined to be moving. Using this method greatly helped me because it created a way for me to tune the sensitivity of the motion detection.<\/p>\n<div id=\"attachment_12880\" style=\"width: 1930px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-12880\" loading=\"lazy\" class=\"wp-image-12880 size-full\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9748-scaled-e1617929549584.jpg\" alt=\"\" width=\"1920\" height=\"1574\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9748-scaled-e1617929549584.jpg 1920w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9748-scaled-e1617929549584-300x246.jpg 300w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9748-scaled-e1617929549584-1024x839.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9748-scaled-e1617929549584-768x630.jpg 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9748-scaled-e1617929549584-1536x1259.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9748-scaled-e1617929549584-973x798.jpg 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9748-scaled-e1617929549584-508x416.jpg 508w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><p id=\"caption-attachment-12880\" class=\"wp-caption-text\">Looking at the serial plotter to see how the x, y, z values changed and determine which single axis would be best for my application<\/p><\/div>\n<div id=\"attachment_12882\" style=\"width: 1930px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-12882\" loading=\"lazy\" class=\"size-full wp-image-12882\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/process-scaled.jpg\" alt=\"\" width=\"1920\" height=\"2560\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/process-scaled.jpg 1920w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/process-225x300.jpg 225w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/process-768x1024.jpg 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/process-1152x1536.jpg 1152w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/process-1536x2048.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/process-973x1297.jpg 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/process-508x677.jpg 508w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><p id=\"caption-attachment-12882\" class=\"wp-caption-text\">Using the serial monitor to look at accelerometer values and absolute value before changing method<\/p><\/div>\n<div id=\"attachment_13040\" style=\"width: 1930px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-13040\" loading=\"lazy\" class=\"size-full wp-image-13040\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9738-scaled.jpg\" alt=\"\" width=\"1920\" height=\"2560\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9738-scaled.jpg 1920w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9738-225x300.jpg 225w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9738-768x1024.jpg 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9738-1152x1536.jpg 1152w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9738-1536x2048.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9738-973x1297.jpg 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/IMG_9738-508x677.jpg 508w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><p id=\"caption-attachment-13040\" class=\"wp-caption-text\">Testing my original radio modules<\/p><\/div>\n<h2>Discussion<\/h2>\n<p>During the in class critique, I got a lot of valuable feedback from my peers. Two points of feedback that I want to highlight are the following:<\/p>\n<ol>\n<li>&#8220;<span style=\"font-weight: 400\">It might not be too complicated to make this smaller, more compact. Still, for user interface purposes, the size makes sense since you have the arcade button and the large font-sized labels.&#8221;<\/span><\/li>\n<li>&#8220;<span style=\"font-weight: 400\">Really good use of a new component and I like how you integrated two arduinos together.&#8221;<\/span><\/li>\n<\/ol>\n<p>I really appreciate the comment on how to improve the project. I agree that the boxes themselves could be made smaller because there was plenty of empty space inside both the transmitter and receiver. However, I also agree that on the receiving end, the size of the box is useful for creating the effective user interface. If I were to create a second iteration of the project I would likely make the transmitting box much smaller so it could be transported to the washing machine more easily and sit more inconspicuously on top. Another change I would make would be to add a buzzer indicator in addition to the green light to better get the attention of the user. Despite these ideas for improvement, I am not planning to create a second iteration. My current design works as intended, and it would be too difficult to fabricate given the limited access to MakerSpaces on campus at the moment. I am very satisfied with how the project turned out and I even exceeded my original vision in terms of aesthetics. My final project includes panel mounting for the button and LEDs which is something I had not planned for originally. Overall, I am glad I pushed myself to create something that is both functional and aesthetically pleasing.<\/p>\n<p>It&#8217;s also great to hear positive comments! It was a challenge to incorporate the radio modules because they were something I had never used before, but I now have a new skill and experience with a multi arduino project. I did make some mistakes along the way such as frying my original radio modules. I was able to get new radio modules (which I did not fry!) and they had a good enough range to be picked up from the basement to the second floor of my building.<\/p>\n<p>One unexpected challenge during my project was due to having two arduinos and two different sets of code. As I was adding new complexity to my project, I found that I forgot exactly what data I was sending through the radio, and which end (transmitting or receiving) was actually analyzing the data.\u00a0 In the future I plan on making my code cleaner as I go and trying to write more pseudo code before jumping straight in.<\/p>\n<h2>Technical Information<\/h2>\n<h5>Functional Block Diagram<\/h5>\n<p><img loading=\"lazy\" class=\"aligncenter size-full wp-image-12790\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Project-2-Block.jpg\" alt=\"\" width=\"837\" height=\"655\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Project-2-Block.jpg 837w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Project-2-Block-300x235.jpg 300w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Project-2-Block-768x601.jpg 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Project-2-Block-508x398.jpg 508w\" sizes=\"(max-width: 837px) 100vw, 837px\" \/><\/p>\n<h5>Schematics<\/h5>\n<p><img loading=\"lazy\" class=\"aligncenter size-full wp-image-12793\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Screen-Shot-2021-04-06-at-9.37.26-PM.png\" alt=\"\" width=\"1122\" height=\"922\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Screen-Shot-2021-04-06-at-9.37.26-PM.png 1122w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Screen-Shot-2021-04-06-at-9.37.26-PM-300x247.png 300w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Screen-Shot-2021-04-06-at-9.37.26-PM-1024x841.png 1024w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Screen-Shot-2021-04-06-at-9.37.26-PM-768x631.png 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Screen-Shot-2021-04-06-at-9.37.26-PM-973x800.png 973w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Screen-Shot-2021-04-06-at-9.37.26-PM-508x417.png 508w\" sizes=\"(max-width: 1122px) 100vw, 1122px\" \/><\/p>\n<p><img loading=\"lazy\" class=\"aligncenter size-full wp-image-12794\" src=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Screen-Shot-2021-04-06-at-9.44.13-PM.png\" alt=\"\" width=\"876\" height=\"772\" srcset=\"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Screen-Shot-2021-04-06-at-9.44.13-PM.png 876w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Screen-Shot-2021-04-06-at-9.44.13-PM-300x264.png 300w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Screen-Shot-2021-04-06-at-9.44.13-PM-768x677.png 768w, https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-content\/uploads\/2021\/04\/Screen-Shot-2021-04-06-at-9.44.13-PM-508x448.png 508w\" sizes=\"(max-width: 876px) 100vw, 876px\" \/><\/p>\n<h5>Code<\/h5>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\">\/* Washing Machine Project Transmitting File\r\n   By Daniela Castleberg\r\n   Last Updated: 04\/09\/2021\r\n\r\n   This project helps notify someone when their laundry\r\n   is done from two floors away! This file is only for the \r\n   transmitting arduino, you will need both files for \r\n   the project to work in it's entirety.\r\n\r\n   Necessary components for this file:\r\n   1 arduino uno\r\n   1 accelerometer\r\n   1 radio NRF24L01 modules\r\n\r\n   Pin mapping:\r\n   Arduino pin | type   | description\r\n   ------------|--------|-------------\r\n\r\n   TRANSMITTING ARDUINO\r\n   A0            input    accelerometer x\r\n   A1            input    accelerometer y\r\n   A2            input    accelerometer z\r\n\r\n   RADIO MAPPING \r\n   radio pin    Arduino Uno pin\r\n   VCC          3.3V\r\n   GND          GND\r\n   CE           7\r\n   CSN          8\r\n   MOSI         11\r\n   MISO         12\r\n   SCK          13\r\n\r\n   radio code modified from code by: Robert Zacharias, Alton Olson, Vicky Zhou, Seema Kamath\r\n*\/\r\n\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\/\/        LIBRARIES        \/\/\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n#include &lt;SPI.h&gt;\r\n#include &lt;nRF24L01.h&gt;\r\n#include &lt;RF24.h&gt;\r\n\r\n\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\/\/ ACCELEROMETER VARIABLES \/\/\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\nconst int XPIN = A0;\r\nconst int YPIN = A1;\r\nconst int ZPIN = A2;\r\n\r\nunsigned long startTime = 0;\r\nint maxTime = 1000; \/\/ time period over 1 second\r\nbool timerIsRunning = false;\r\nbool machineIsMoving = false;\r\n\r\n\/\/ min and max values of accelerometer\r\nint minX = 500; \/\/ need to start high so a smaller value will get updated\r\nint maxX = 0;\r\nint rangeX = 5; \/\/ this sets the sensitivity of the motion detection\r\n\r\n\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\/\/ TIMER VARIABLES FOR STOPPING \/\/\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\nbool machinePreviouslyMoving = true; \/\/ make sure we don't continually start the timer during prolonged periods of no motion\r\nunsigned long timer = 0;\r\nunsigned long cycleStopTime = 180000; \/\/ amount of time to wait between no motion detected and signal being sent (3min)\r\n\r\n\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\/\/      RADIO VARIABLES    \/\/\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\nconst int RADIO_CE = 7;\r\nconst int RADIO_CSN = 8;\r\nint transmit = 5; \/\/ initialize as anything other than 0 or 1\r\n\/\/ 0 means no motion and 1 means there is motion\r\n\r\nRF24 radio(RADIO_CE, RADIO_CSN);\r\nconst byte address[6] = \"00001\";\r\n\r\n\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\/\/          SET UP         \/\/\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\nvoid setup() {\r\n  \/\/ set up radio\r\n  radio.begin();\r\n  radio.openWritingPipe(address);\r\n  radio.setPALevel(RF24_PA_HIGH);\r\n  radio.stopListening();\r\n\r\n  \/\/ set up accelerometer pins\r\n  pinMode(XPIN, INPUT);\r\n  pinMode(YPIN, INPUT);\r\n  pinMode(ZPIN, INPUT);\r\n\r\n  Serial.begin(9600);\r\n}\r\n\r\n\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\/\/           LOOP          \/\/\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\nvoid loop() {\r\n\r\n  \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n  \/\/ READ CURRENT ACCEL DATA \/\/\r\n  \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n  int x = analogRead(XPIN);\r\n  int y = analogRead(YPIN);\r\n  int z = analogRead(ZPIN);\r\n\r\n\r\n  \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n  \/\/ IF THE MACHINE ISNT MOVING, BEGIN TIMING FOR SHUT DOWN\/\/\r\n  \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n  if (machineIsMoving == false &amp;&amp; machinePreviouslyMoving == true) {\r\n    machinePreviouslyMoving = false;\r\n    timer = millis();  \/\/ if no motion is detected, start the timer\r\n  }\r\n  else if (machineIsMoving == false &amp;&amp; machinePreviouslyMoving == false) {\r\n    ; \/\/ do nothing\r\n  }\r\n  else {\r\n    timer = 0;  \/\/ if machine is moving reset timer to 0\r\n    machinePreviouslyMoving = true;\r\n    transmit = 1;\r\n  }\r\n\r\n\r\n  \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n  \/\/ DETERMINE IF THE MACHINE IS MOVING \/\/\r\n  \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n  \/\/ if timer is not running, start the timer\r\n  if (timerIsRunning == false) {\r\n    startTime = millis();\r\n    timerIsRunning = true;\r\n    machineIsMoving = false;\r\n  }\r\n\r\n  \/\/ if timer is running, start taking accelerometer values\r\n  if (timerIsRunning) {\r\n    accelerometerMath(x);\r\n  }\r\n\r\n  \/\/ if timer &gt;= 1sec reset timer, analyze values, reset values\r\n  if (millis() - startTime &gt;= maxTime) {\r\n    startTime = millis();\r\n    if (maxX - minX &gt;= rangeX) {\r\n      machineIsMoving = true;\r\n    }\r\n    else {\r\n      machineIsMoving = false;\r\n    }\r\n    minX = 500;\r\n    maxX = 0;\r\n  }\r\n\r\n\r\n  \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n  \/\/            TRANSMIT DATA           \/\/\r\n  \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\r\n  \/\/ set transmit variable based on whether the machine is moving or not\r\n  if (machineIsMoving) {\r\n    transmit = 1; \/\/ machine moving\r\n  }\r\n  else {\r\n    if (millis() - timer &gt;= cycleStopTime &amp;&amp; timer != 0) { \/\/ check if it's been longer than the timeout\r\n      transmit = 0; \/\/ machine not moving\r\n    }\r\n  }\r\n\r\n  int reading[1] = {  \/\/ place transmitting value into an array for radio\r\n    transmit\r\n  };\r\n\r\n\r\n  radio.write(&amp;reading, sizeof(reading)); \/\/ send data through radio\r\n  delay(10);\r\n}\r\n\r\n\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\/\/              FUNCTIONS             \/\/\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\/\/ function to update min and max readings from accelerometer\r\nvoid accelerometerMath(int currReading) {\r\n  if (currReading &lt; minX) {\r\n    minX = currReading;\r\n  }\r\n  else if (currReading &gt; maxX) {\r\n    maxX = currReading;\r\n  }\r\n}<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\">\/* Washing Machine Project Receiving File\r\n   By Daniela Castleberg\r\n   Last Updated: 04\/09\/2021\r\n\r\n   This project helps notify someone when their laundry\r\n   is done from two floors away! This file is only for the\r\n   recieving arduino, you will need both files for\r\n   the project to work in it's entirety.\r\n\r\n   Necessary components for this file:\r\n   1 arduino uno\r\n   1 radio NRF24L01 module\r\n   1 arcade button\r\n   2 LEDs (different colors)\r\n\r\n   Pin mapping:\r\n   Arduino pin | type   | description\r\n   ------------|--------|-------------\r\n\r\n   RECEIVING ARDUINO\r\n   6             input    Reset button\r\n   5             output   green LED\r\n   3             output   red LED\r\n\r\n   RADIO MAPPING FOR BOTH ARDUINOS\r\n   radio pin    Arduino Uno pin\r\n   VCC          3.3V\r\n   GND          GND\r\n   CE           7\r\n   CSN          8\r\n   MOSI         11\r\n   MISO         12\r\n   SCK          13\r\n\r\n   radio code modified from code by: Robert Zacharias, Alton Olson, Vicky Zhou, Seema Kamath\r\n*\/\r\n\r\n\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\/\/        LIBRARIES        \/\/\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n#include &lt;SPI.h&gt;\r\n#include &lt;nRF24L01.h&gt;\r\n#include &lt;RF24.h&gt;\r\n\r\n\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\/\/           LEDs          \/\/\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\nconst int RED = 3;\r\nconst int GREEN = 5;\r\n\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\/\/        TIMER VARIABLES       \/\/\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\nint readVal = 0;\r\nbool newCycle = true;\r\nbool resetButtonState;\r\nbool cyclePreviouslyReset = false;\r\nunsigned long resetTimer = 0;\r\nunsigned long resetTimeout = 3000;\r\n\r\n\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\/\/      RADIO VARIABLES    \/\/\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\nconst int RADIO_CE_PIN = 7;\r\nconst int RADIO_CSN_PIN = 8;\r\nconst int BUTTON = 6;\r\n\r\nRF24 radio(RADIO_CE_PIN, RADIO_CSN_PIN);\r\nconst byte address[6] = \"00001\";\r\n\r\n\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\/\/          SET UP         \/\/\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\nvoid setup() {\r\n  Serial.begin(9600);\r\n\r\n  radio.begin();\r\n  radio.openReadingPipe(0, address);\r\n  radio.setPALevel(RF24_PA_HIGH);\r\n  radio.startListening();\r\n\r\n  pinMode(BUTTON, INPUT_PULLUP);\r\n  pinMode(GREEN, OUTPUT);\r\n  pinMode(RED, OUTPUT);\r\n\r\n}\r\n\r\n\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\/\/           LOOP          \/\/\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\nvoid loop() {\r\n\r\n  \/\/ read reset button value\r\n  int resetButton = digitalRead(BUTTON);\r\n\r\n\r\n  \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n  \/\/    RECEIVE RADIO DATA   \/\/\r\n  \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n  if (radio.available()) {\r\n    int readVal;\r\n    radio.read(&amp;readVal, sizeof(readVal));\r\n    Serial.println(readVal); \/\/ print out what the radio is receiving\r\n\r\n    if (readVal == 0 &amp;&amp; newCycle) { \/\/ washing cycle done loop\r\n\r\n      Serial.println(\"Washing Done!\"); \/\/ print for debugging\r\n\r\n      digitalWrite(GREEN, HIGH); \/\/ Green LED on to signal washing done\r\n      digitalWrite(RED, LOW);\r\n\r\n      delay(500);\r\n\r\n      newCycle = false; \/\/ no longer a new cycle because it finished\r\n    }\r\n\r\n    else if (readVal == 1 &amp;&amp; newCycle) { \/\/ washing in progress loop\r\n\r\n      Serial.println(\"Washing In Progress\");\r\n\r\n      digitalWrite(GREEN, LOW);\r\n      digitalWrite(RED, HIGH); \/\/ washing in progress\r\n    }\r\n  }\r\n\r\n  \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n  \/\/       RESET BUTTON      \/\/\r\n  \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\r\n  \/\/ debouncing to eliminate noise\r\n  if (resetButton == LOW) {\r\n    delay(3);\r\n    resetButtonState = LOW;\r\n  }\r\n  else {\r\n    resetButtonState = HIGH;\r\n  }\r\n\r\n  \/\/ resetting the cycle\r\n  if (resetButtonState == LOW &amp;&amp; cyclePreviouslyReset == false) {\r\n\r\n    Serial.println(\"Cycle was reset\"); \/\/ Serial print for debugging\r\n\r\n    cyclePreviouslyReset = true; \/\/ loop guard to prevent resetting again immediately\r\n    resetTimer = millis(); \/\/ start the reset timer\r\n\r\n    digitalWrite(GREEN, HIGH); \/\/ turn on both LEDs\r\n    digitalWrite(RED, HIGH);\r\n    delay(500);\r\n  }\r\n\r\n  \/\/ wait before you can restart the cycle again\r\n  if (millis() - resetTimer &gt;= resetTimeout &amp;&amp; cyclePreviouslyReset) {\r\n\r\n    cyclePreviouslyReset = false;\r\n    newCycle = true; \/\/ reset the new cycle boolean\r\n\r\n    digitalWrite(GREEN, LOW); \/\/ turn off LEDs\r\n    digitalWrite(RED, LOW);\r\n  }\r\n\r\n}<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Overview This device tells you when your washing machine is done from two floors away! Short video &nbsp; Image for scale Featured details How the device works Process&#8230;<\/p>\n","protected":false},"author":178,"featured_media":12766,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[89],"tags":[],"_links":{"self":[{"href":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-json\/wp\/v2\/posts\/12762"}],"collection":[{"href":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-json\/wp\/v2\/users\/178"}],"replies":[{"embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-json\/wp\/v2\/comments?post=12762"}],"version-history":[{"count":32,"href":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-json\/wp\/v2\/posts\/12762\/revisions"}],"predecessor-version":[{"id":13046,"href":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-json\/wp\/v2\/posts\/12762\/revisions\/13046"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-json\/wp\/v2\/media\/12766"}],"wp:attachment":[{"href":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-json\/wp\/v2\/media?parent=12762"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-json\/wp\/v2\/categories?post=12762"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/60-223\/s2021\/work\/wp-json\/wp\/v2\/tags?post=12762"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}