{"version":3,"sources":["components/images/W1/1.png","components/images/W1/2.png","components/images/W1/3.png","components/images/W1/4.png","components/images/W2/ballCAD.PNG","components/images/W2/balljoint.png","components/images/W2/balljoint2.png","components/images/W2/balljointcs.png","components/images/W2/ballproduct.png","components/images/W2/chessCAD.png","components/images/W2/chesspiece.png","components/images/W2/chessproduct.png","components/images/W2/kerftest.png","components/images/W2/powertest.png","components/images/W2/vinylmod.png","components/images/W2/vinylsticker.jpg","components/images/W3/1.png","components/images/W3/2.png","components/images/W3/3.png","components/images/W3/4.png","components/images/W3/5.png","components/images/W3/6.png","components/images/W3/7.gif","components/images/W3/8.png","components/images/W3/9.png","components/images/W4/1.png","components/images/W4/2.png","components/images/W4/3.png","components/images/W4/4.png","components/images/W4/5.png","components/images/W4/6.png","components/images/W4/7.png","components/images/W4/8.gif","components/images/W4/8.png","components/images/W4/9.png","components/images/W4/10.png","components/images/W4/11.png","components/images/W4/12.png","components/images/W4/13.png","components/images/W4/14.png","components/images/W4/15.png","components/images/W4/16.png","components/images/W4/17.png","components/images/W5/1.jpg","components/images/W5/2.jpg","components/images/W5/3.jpg","components/images/W5/4.jpg","components/images/W5/5.jpg","components/images/W5/6.gif","components/images/W5/7.gif","components/images/W5/9.png","components/images/W6/1.png","components/images/W6/2.png","components/images/W6/3.png","components/images/W6/4.png","components/images/W6/5.png","components/images/W6/6.png","components/images/W6/7.mp4","components/images/W6/8.mp4","components/images/W6/9.mp4","components/images/W7/1.png","components/images/W7/2.png","components/images/W7/3.png","components/images/W8/1.png","components/images/W8/2.png","components/images/W8/3.png","components/images/W8/4.png","components/images/W8/5.png","components/images/W8/6.png","components/images/W8/7.png","components/images/W8/8.png","components/images/W8/9.mp4","components/images/W8/10.mp4","components/images/W9/1.png","components/images/W9/2.png","components/images/W9/3.png","components/images/W9/4.png","components/images/W9/5.mp4","components/images/W10/1.png","components/images/W10/2.png","components/images/W10/3.png","components/images/W10/4.mp4","components/images/W11/1.mp4","components/images/W11/1.png","components/images/W13/1.png","components/images/W13/2.png","components/images/W13/3.png","components/images/W13/4.mp4","components/images/W13/5.png","components/images/W14/1.png","components/images/W14/2.png","components/images/W14/3.png","components/images/W14/4.png","components/images/W14/5.png","components/images/W14/6.png","components/images/W14/7.png","components/images/W14/8.png","components/images/W14/9.png","components/images/W14/10.png","components/images/W14/11.mp4","components/images/W14/12.mp4","components/images/final/1.png","components/images/final/2.png","components/images/final/3.png","components/images/final/4.png","components/images/final/5.png","components/images/final/1.mp4","components/images/final/6.png","components/images/final/2.mp4","components/images/final/7.png","components/images/final/8.png","components/images/final/9.png","components/images/final/3.mp4","components/images/final/4.mp4","components/images/me.jpg","components/image.js","components/pages/W1.js","components/pages/W2.js","components/pages/W3.js","components/pages/W4.js","components/pages/W5.js","components/pages/W6.js","components/pages/W7.js","components/pages/W8.js","components/pages/W9.js","components/pages/W10.js","components/pages/W11.js","components/pages/W13.js","components/pages/W14.js","components/pages/final.js","components/pages/about.js","components/Navbarm.js","App.js","index.js"],"names":["module","exports","W1image","W1_1","W1_2","W1_3","W1_4","W2image","W2_1","W2_2","W2_3","W2_4","W2_5","W2_6","W2_7","W2_8","W2_9","W2_10","W2_11","W2_12","W3image","W3_1","W3_2","W3_3","W3_4","W3_5","W3_6","W3_7","W3_8","W3_9","W4image","W4_1","W4_2","W4_3","W4_4","W4_5","W4_6","W4_7","W4_8","W4_9","W4_10","W4_11","W4_12","W4_13","W4_14","W4_15","W4_16","W4_17","W4_18","W5image","W5_1","W5_2","W5_3","W5_4","W5_5","W5_6","W5_7","W5_8","W6image","W6_1","W6_2","W6_3","W6_4","W6_5","W6_6","W6_7","W6_8","W6_9","W7image","W7_1","W7_2","W7_3","W8image","W8_1","W8_2","W8_3","W8_4","W8_5","W8_6","W8_7","W8_8","W8_9","W8_10","W9image","W9_1","W9_2","W9_3","W9_4","W9_5","W10image","W10_1","W10_2","W10_3","W10_4","W11image","W11_1","W11_2","W13image","W13_1","W13_2","W13_3","W13_4","W13_5","W14image","W14_1","W14_2","W14_3","W14_4","W14_5","W14_6","W14_7","W14_8","W14_9","W14_10","W14_11","W14_12","finalimg","final_1","final_2","final_3","final_4","final_5","final_6","final_7","final_8","final_9","final_10","final_11","final_12","final_13","W1","Fragment","className","style","fontWeight","src","width","height","W2","id","W3","class","W4","W5","W6","autoplay","loop","muted","type","W7","W8","W9","W10","W11","W13","W14","marginLeft","transform","Final","controls","About","me","href","Navbarm","state","Navbar","sticky","navbarStyles","collapseOnSelect","expand","bg","variant","Brand","navbarWordStyles","Toggle","aria-controls","Collapse","Nav","Link","navbarElementStyles","NavDropdown","alignRight","title","navbarItemStyles","to","Item","Component","backgroundColor","paddingTop","paddingBottom","paddingLeft","color","fontFamily","fontSize","paddingRight","App","exact","path","render","props","component","final","about","window","location","ReactDOM","document","getElementById"],"mappings":"4FAAAA,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,qC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,wC,gBCA3CD,EAAOC,QAAU,IAA0B,yC,gBCA3CD,EAAOC,QAAU,IAA0B,yC,gBCA3CD,EAAOC,QAAU,IAA0B,sC,gBCA3CD,EAAOC,QAAU,IAA0B,wC,gBCA3CD,EAAOC,QAAU,IAA0B,0C,gBCA3CD,EAAOC,QAAU,IAA0B,sC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,sC,gBCA3CD,EAAOC,QAAU,IAA0B,0C,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,gC,gBCA3CD,EAAOC,QAAU,IAA0B,gC,gBCA3CD,EAAOC,QAAU,IAA0B,gC,gBCA3CD,EAAOC,QAAU,IAA0B,gC,gBCA3CD,EAAOC,QAAU,IAA0B,gC,gBCA3CD,EAAOC,QAAU,IAA0B,gC,gBCA3CD,EAAOC,QAAU,IAA0B,gC,gBCA3CD,EAAOC,QAAU,IAA0B,gC,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,cCA3CD,EAAOC,QAAU,8lZ,gBCAjBD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,gC,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B,gBCA3CD,EAAOC,QAAU,IAA0B,+B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","file":"static/js/main.9845f82c.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/1.fef21a55.png\";","module.exports = __webpack_public_path__ + \"static/media/2.30f282b6.png\";","module.exports = __webpack_public_path__ + \"static/media/3.d133069f.png\";","module.exports = __webpack_public_path__ + \"static/media/4.080a013f.png\";","module.exports = __webpack_public_path__ + \"static/media/ballCAD.45d59c73.PNG\";","module.exports = __webpack_public_path__ + \"static/media/balljoint.6516ff13.png\";","module.exports = __webpack_public_path__ + \"static/media/balljoint2.fe92f4d1.png\";","module.exports = __webpack_public_path__ + \"static/media/balljointcs.e620b3fb.png\";","module.exports = __webpack_public_path__ + \"static/media/ballproduct.3e78c8df.png\";","module.exports = __webpack_public_path__ + \"static/media/chessCAD.6843c755.png\";","module.exports = __webpack_public_path__ + \"static/media/chesspiece.cd32b34d.png\";","module.exports = __webpack_public_path__ + \"static/media/chessproduct.a18cd29a.png\";","module.exports = __webpack_public_path__ + \"static/media/kerftest.d58f47ea.png\";","module.exports = __webpack_public_path__ + \"static/media/powertest.77e23c74.png\";","module.exports = __webpack_public_path__ + \"static/media/vinylmod.62b9d35c.png\";","module.exports = __webpack_public_path__ + \"static/media/vinylsticker.37126ae3.jpg\";","module.exports = __webpack_public_path__ + \"static/media/1.c1160ed6.png\";","module.exports = __webpack_public_path__ + \"static/media/2.469af832.png\";","module.exports = __webpack_public_path__ + \"static/media/3.99f7a929.png\";","module.exports = __webpack_public_path__ + \"static/media/4.260c5c29.png\";","module.exports = __webpack_public_path__ + \"static/media/5.72ab76ad.png\";","module.exports = __webpack_public_path__ + \"static/media/6.1136ec05.png\";","module.exports = __webpack_public_path__ + \"static/media/7.2bffba47.gif\";","module.exports = __webpack_public_path__ + \"static/media/8.960aac60.png\";","module.exports = __webpack_public_path__ + \"static/media/9.1048c4b5.png\";","module.exports = __webpack_public_path__ + \"static/media/1.8ff0f5ee.png\";","module.exports = __webpack_public_path__ + \"static/media/2.f7c54f64.png\";","module.exports = __webpack_public_path__ + \"static/media/3.d746b537.png\";","module.exports = __webpack_public_path__ + \"static/media/4.8739ed35.png\";","module.exports = __webpack_public_path__ + \"static/media/5.b059dcc1.png\";","module.exports = __webpack_public_path__ + \"static/media/6.aaf60d84.png\";","module.exports = __webpack_public_path__ + \"static/media/7.33f91a83.png\";","module.exports = __webpack_public_path__ + \"static/media/8.8783611e.gif\";","module.exports = __webpack_public_path__ + \"static/media/8.71be1fee.png\";","module.exports = __webpack_public_path__ + \"static/media/9.26aed000.png\";","module.exports = __webpack_public_path__ + \"static/media/10.728c553a.png\";","module.exports = __webpack_public_path__ + \"static/media/11.96ce1661.png\";","module.exports = __webpack_public_path__ + \"static/media/12.68b09e55.png\";","module.exports = __webpack_public_path__ + \"static/media/13.194c46cb.png\";","module.exports = __webpack_public_path__ + \"static/media/14.75c0c6cc.png\";","module.exports = __webpack_public_path__ + \"static/media/15.84d7f0c8.png\";","module.exports = __webpack_public_path__ + \"static/media/16.de51018b.png\";","module.exports = __webpack_public_path__ + \"static/media/17.0d45e7b3.png\";","module.exports = __webpack_public_path__ + \"static/media/1.452f0ce0.jpg\";","module.exports = __webpack_public_path__ + \"static/media/2.d74c9386.jpg\";","module.exports = __webpack_public_path__ + \"static/media/3.82344d90.jpg\";","module.exports = __webpack_public_path__ + \"static/media/4.2bc902b2.jpg\";","module.exports = __webpack_public_path__ + \"static/media/5.0e49d102.jpg\";","module.exports = __webpack_public_path__ + \"static/media/6.f66ea85d.gif\";","module.exports = __webpack_public_path__ + \"static/media/7.c81a7ea5.gif\";","module.exports = __webpack_public_path__ + \"static/media/9.91e92365.png\";","module.exports = __webpack_public_path__ + \"static/media/1.f478cc1f.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/3.c53066dc.png\";","module.exports = __webpack_public_path__ + \"static/media/4.165d2d03.png\";","module.exports = __webpack_public_path__ + \"static/media/5.24e40692.png\";","module.exports = __webpack_public_path__ + \"static/media/6.431192d5.png\";","module.exports = __webpack_public_path__ + \"static/media/7.867ed64c.mp4\";","module.exports = __webpack_public_path__ + \"static/media/8.6785acea.mp4\";","module.exports = __webpack_public_path__ + \"static/media/9.5be23d52.mp4\";","module.exports = __webpack_public_path__ + \"static/media/1.7615d6a3.png\";","module.exports = __webpack_public_path__ + \"static/media/2.021076e4.png\";","module.exports = __webpack_public_path__ + \"static/media/3.54d576a9.png\";","module.exports = __webpack_public_path__ + \"static/media/1.19c2715f.png\";","module.exports = __webpack_public_path__ + \"static/media/2.7c968ef0.png\";","module.exports = __webpack_public_path__ + \"static/media/3.d056f0d6.png\";","module.exports = __webpack_public_path__ + \"static/media/4.c0184f8f.png\";","module.exports = __webpack_public_path__ + \"static/media/5.50416d90.png\";","module.exports = __webpack_public_path__ + \"static/media/6.51590656.png\";","module.exports = __webpack_public_path__ + \"static/media/7.05c9038d.png\";","module.exports = __webpack_public_path__ + \"static/media/8.559fe586.png\";","module.exports = __webpack_public_path__ + \"static/media/9.df34b5ce.mp4\";","module.exports = __webpack_public_path__ + \"static/media/10.8495ec2f.mp4\";","module.exports = __webpack_public_path__ + \"static/media/1.280c05e3.png\";","module.exports = __webpack_public_path__ + \"static/media/2.67b70926.png\";","module.exports = __webpack_public_path__ + \"static/media/3.d3521c9e.png\";","module.exports = __webpack_public_path__ + \"static/media/4.e9804967.png\";","module.exports = __webpack_public_path__ + \"static/media/5.5b6d82cc.mp4\";","module.exports = __webpack_public_path__ + \"static/media/1.22456689.png\";","module.exports = __webpack_public_path__ + \"static/media/2.db6b1f06.png\";","module.exports = __webpack_public_path__ + \"static/media/3.09396806.png\";","module.exports = __webpack_public_path__ + \"static/media/4.92cd9b50.mp4\";","module.exports = __webpack_public_path__ + \"static/media/1.088f1871.mp4\";","module.exports = __webpack_public_path__ + \"static/media/1.e423c2bb.png\";","module.exports = __webpack_public_path__ + \"static/media/1.86cbe9f5.png\";","module.exports = __webpack_public_path__ + \"static/media/2.63b56942.png\";","module.exports = __webpack_public_path__ + \"static/media/3.bb9fed20.png\";","module.exports = __webpack_public_path__ + \"static/media/4.80fb7e49.mp4\";","module.exports = __webpack_public_path__ + \"static/media/5.6e73a0bf.png\";","module.exports = __webpack_public_path__ + \"static/media/1.64336103.png\";","module.exports = __webpack_public_path__ + \"static/media/2.51250020.png\";","module.exports = __webpack_public_path__ + \"static/media/3.965a379f.png\";","module.exports = __webpack_public_path__ + \"static/media/4.38c71543.png\";","module.exports = __webpack_public_path__ + \"static/media/5.91b4051c.png\";","module.exports = __webpack_public_path__ + \"static/media/6.9c940417.png\";","module.exports = __webpack_public_path__ + \"static/media/7.340ae925.png\";","module.exports = __webpack_public_path__ + \"static/media/8.3bea1efa.png\";","module.exports = __webpack_public_path__ + \"static/media/9.54dd0188.png\";","module.exports = __webpack_public_path__ + \"static/media/10.23ac285a.png\";","module.exports = __webpack_public_path__ + \"static/media/11.07414eef.mp4\";","module.exports = __webpack_public_path__ + \"static/media/12.44d7854a.mp4\";","module.exports = __webpack_public_path__ + \"static/media/1.be135782.png\";","module.exports = __webpack_public_path__ + \"static/media/2.87350f7e.png\";","module.exports = __webpack_public_path__ + \"static/media/3.959e1993.png\";","module.exports = __webpack_public_path__ + \"static/media/4.5ec248a9.png\";","module.exports = __webpack_public_path__ + \"static/media/5.d5dc1069.png\";","module.exports = __webpack_public_path__ + \"static/media/1.286a4ed0.mp4\";","module.exports = __webpack_public_path__ + \"static/media/6.927c2ec7.png\";","module.exports = __webpack_public_path__ + \"static/media/2.5f5de10a.mp4\";","module.exports = __webpack_public_path__ + \"static/media/7.72ecc7b1.png\";","module.exports = __webpack_public_path__ + \"static/media/8.668abd6d.png\";","module.exports = __webpack_public_path__ + \"static/media/9.67919abd.png\";","module.exports = __webpack_public_path__ + \"static/media/3.ffee6807.mp4\";","module.exports = __webpack_public_path__ + \"static/media/4.6e8293d1.mp4\";","module.exports = __webpack_public_path__ + \"static/media/me.051598f1.jpg\";","import React, { Component } from 'react';\r\nimport W1_1 from './images/W1/1.png'\r\nimport W1_2 from './images/W1/2.png'\r\nimport W1_3 from './images/W1/3.png'\r\nimport W1_4 from './images/W1/4.png'\r\nimport W2_1 from './images/W2/ballCAD.PNG'\r\nimport W2_2 from './images/W2/balljoint.png'\r\nimport W2_3 from './images/W2/balljoint2.png'\r\nimport W2_4 from './images/W2/balljointcs.png'\r\nimport W2_5 from './images/W2/ballproduct.png'\r\nimport W2_6 from './images/W2/chessCAD.png'\r\nimport W2_7 from './images/W2/chesspiece.png'\r\nimport W2_8 from './images/W2/chessproduct.png'\r\nimport W2_9 from './images/W2/kerftest.png'\r\nimport W2_10 from './images/W2/powertest.png'\r\nimport W2_11 from './images/W2/vinylmod.png'\r\nimport W2_12 from './images/W2/vinylsticker.jpg'\r\nimport W3_1 from './images/W3/1.png'\r\nimport W3_2 from './images/W3/2.png'\r\nimport W3_3 from './images/W3/3.png'\r\nimport W3_4 from './images/W3/4.png'\r\nimport W3_5 from './images/W3/5.png'\r\nimport W3_6 from './images/W3/6.png'\r\nimport W3_7 from './images/W3/7.gif'\r\nimport W3_8 from './images/W3/8.png'\r\nimport W3_9 from './images/W3/9.png'\r\n//lmao\r\nimport W4_1 from './images/W4/1.png'\r\nimport W4_2 from './images/W4/2.png'\r\nimport W4_3 from './images/W4/3.png'\r\nimport W4_4 from './images/W4/4.png'\r\nimport W4_5 from './images/W4/5.png'\r\nimport W4_6 from './images/W4/6.png'\r\nimport W4_7 from './images/W4/7.png'\r\nimport W4_8 from './images/W4/8.gif'\r\nimport W4_9 from './images/W4/8.png'\r\nimport W4_10 from './images/W4/9.png'\r\nimport W4_11 from './images/W4/10.png'\r\nimport W4_12 from './images/W4/11.png'\r\nimport W4_13 from './images/W4/12.png'\r\nimport W4_14 from './images/W4/13.png'\r\nimport W4_15 from './images/W4/14.png'\r\nimport W4_16 from './images/W4/15.png'\r\nimport W4_17 from './images/W4/16.png'\r\nimport W4_18 from './images/W4/17.png'\r\n//\r\nimport W5_1 from './images/W5/1.jpg'\r\nimport W5_2 from './images/W5/2.jpg'\r\nimport W5_3 from './images/W5/3.jpg'\r\nimport W5_4 from './images/W5/4.jpg'\r\nimport W5_5 from './images/W5/5.jpg'\r\nimport W5_6 from './images/W5/6.gif'\r\nimport W5_7 from './images/W5/7.gif'\r\nimport W5_8 from './images/W5/9.png'\r\n//\r\nimport W6_1 from './images/W6/1.png'\r\nimport W6_2 from './images/W6/2.png'\r\nimport W6_3 from './images/W6/3.png'\r\nimport W6_4 from './images/W6/4.png'\r\nimport W6_5 from './images/W6/5.png'\r\nimport W6_6 from './images/W6/6.png'\r\nimport W6_7 from './images/W6/7.mp4'\r\nimport W6_8 from './images/W6/8.mp4'\r\nimport W6_9 from './images/W6/9.mp4'\r\n//\r\nimport W7_1 from './images/W7/1.png'\r\nimport W7_2 from './images/W7/2.png'\r\nimport W7_3 from './images/W7/3.png'\r\n//\r\nimport W8_1 from './images/W8/1.png'\r\nimport W8_2 from './images/W8/2.png'\r\nimport W8_3 from './images/W8/3.png'\r\nimport W8_4 from './images/W8/4.png'\r\nimport W8_5 from './images/W8/5.png'\r\nimport W8_6 from './images/W8/6.png'\r\nimport W8_7 from './images/W8/7.png'\r\nimport W8_8 from './images/W8/8.png'\r\nimport W8_9 from './images/W8/9.mp4'\r\nimport W8_10 from './images/W8/10.mp4'\r\n//\r\nimport W9_1 from './images/W9/1.png'\r\nimport W9_2 from './images/W9/2.png'\r\nimport W9_3 from './images/W9/3.png'\r\nimport W9_4 from './images/W9/4.png'\r\nimport W9_5 from './images/W9/5.mp4'\r\n//\r\nimport W10_1 from './images/W10/1.png'\r\nimport W10_2 from './images/W10/2.png'\r\nimport W10_3 from './images/W10/3.png'\r\nimport W10_4 from './images/W10/4.mp4'\r\n//\r\nimport W11_1 from './images/W11/1.mp4'\r\nimport W11_2 from './images/W11/1.png'\r\n\r\n//\r\nimport W13_1 from './images/W13/1.png'\r\nimport W13_2 from './images/W13/2.png'\r\nimport W13_3 from './images/W13/3.png'\r\nimport W13_4 from './images/W13/4.mp4'\r\nimport W13_5 from './images/W13/5.png'\r\n\r\n//\r\nimport W14_1 from './images/W14/1.png'\r\nimport W14_2 from './images/W14/2.png'\r\nimport W14_3 from './images/W14/3.png'\r\nimport W14_4 from './images/W14/4.png'\r\nimport W14_5 from './images/W14/5.png'\r\nimport W14_6 from './images/W14/6.png'\r\nimport W14_7 from './images/W14/7.png'\r\nimport W14_8 from './images/W14/8.png'\r\nimport W14_9 from './images/W14/9.png'\r\nimport W14_10 from './images/W14/10.png'\r\nimport W14_11 from './images/W14/11.mp4'\r\nimport W14_12 from './images/W14/12.mp4'\r\n//\r\nimport final_1 from './images/final/1.png'\r\nimport final_2 from './images/final/2.png'\r\nimport final_3 from './images/final/3.png'\r\nimport final_4 from './images/final/4.png'\r\nimport final_5 from './images/final/5.png'\r\nimport final_6 from './images/final/1.mp4'\r\nimport final_7 from './images/final/6.png'\r\nimport final_8 from './images/final/2.mp4'\r\nimport final_9 from './images/final/7.png'\r\nimport final_10 from './images/final/8.png'\r\nimport final_11 from './images/final/9.png'\r\nimport final_12 from './images/final/3.mp4'\r\nimport final_13 from './images/final/4.mp4'\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst W1image = [W1_1,W1_2,W1_3,W1_4]\r\nconst W2image = [W2_1,W2_2,W2_3,W2_4,W2_5,W2_6,W2_7,W2_8,W2_9,W2_10,W2_11,W2_12]\r\nconst W3image = [W3_1,W3_2,W3_3,W3_4,W3_5,W3_6,W3_7,W3_8,W3_9]\r\nconst W4image = [W4_1,W4_2,W4_3,W4_4,W4_5,W4_6,W4_7,W4_8,W4_9,W4_10,W4_11,W4_12,W4_13,W4_14,W4_15,W4_16,W4_17,W4_18]\r\nconst W5image = [W5_1,W5_2,W5_3,W5_4,W5_5,W5_6,W5_7,W5_8]\r\nconst W6image = [W6_1,W6_2,W6_3,W6_4,W6_5,W6_6,W6_7,W6_8,W6_9]\r\nconst W7image = [W7_1,W7_2,W7_3]\r\nconst W8image = [W8_1,W8_2,W8_3,W8_4,W8_5,W8_6,W8_7,W8_8,W8_9,W8_10]\r\nconst W9image = [W9_1,W9_2,W9_3,W9_4,W9_5]\r\nconst W10image = [W10_1,W10_2,W10_3,W10_4]\r\nconst W11image = [W11_1,W11_2]\r\nconst W13image = [W13_1,W13_2,W13_3,W13_4,W13_5]\r\nconst W14image = [W14_1,W14_2,W14_3,W14_4,W14_5,W14_6,W14_7,W14_8,W14_9,W14_10,W14_11,W14_12]\r\nconst finalimg = [final_1,final_2,final_3,final_4,final_5,final_6,final_7,final_8,final_9,final_10,final_11,final_12,final_13]\r\n\r\nexport {W1image,W2image,W3image,W4image,W5image,W6image,W7image,W8image,W9image,W10image,W11image,W13image,W14image,finalimg}","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport {W1image }from '../image.js'\r\n\r\nfunction W1() {\r\n return (\r\n \r\n

\r\n Week 1: Computer Aided Design

\r\n
\r\n

CAD:

\r\n

I have some previous CAD experience on Onshape, however they were all simple gemoetric stuff, for example.

\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n\r\n

But I'd like to challenge myself, by CADing something curve-y and circular. So I chose to CAD a fan.

\r\n

The inner blades were created by filling a 3D fit spline and a sketch curve on the cylinder.

\r\n\r\n
\r\n \r\n
\r\n

The side of the fan was created by bridging curves between the bottom and top circles.

\r\n

The top of the fan were extruded conic sections.

\r\n\r\n
\r\n \r\n \r\n
\r\n

This was surprisingly successful!

\r\n \r\n
\r\n \r\n );\r\n}\r\n\r\nexport default W1;","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport {W2image} from '../image.js'\r\n\r\nfunction W2() {\r\n return (\r\n\r\n

Week 2: Computer Controlled Cutting

\r\n
\r\n

Laser cutting:

\r\n

For my first attempt in designing a press fit kit, I wanted to make some sort of ball joint out of cardboard. So I first CADed a ball joint.

\r\n
\r\n \r\n \r\n \r\n
\r\n

So then I would take cross sections of the design and cut out rectangles in order to make the cardboard cutouts that would create such ball joint.

\r\n
\r\n \r\n \r\n
\r\n

But before I start printing, there are several tests that had to first be done. A test for the optimal settings for laser cutting cardboard and a kerf test since the cardboard\r\n pieces need to be pretty well fitted.

\r\n
\r\n \r\n \r\n
\r\n

The tests showed that the laser cutter should be ran at 100% power and 10% speed, and the optimal size for slots are 4mm, considering kerf.

\r\n
\r\n

So here is the final product, plus a paper cutout I used to test out the design.

\r\n
\r\n \r\n
\r\n

However, functionality wise, this did not function as expected, due to the two main issues - the thickness and rigidness of the cardboard. \r\n I think that doing cross sections of a CADed model introduced a very optimistic point of view for desining press fit kits in general, since I lost the sense of scaling and how it would look in real life.

\r\n
\r\n

Using the time I have left, I tried to make somthing more...artistic. (Like a pawn in chess)

\r\n
\r\n \r\n \r\n \r\n
\r\n

So the main lesson from this is that I learnt that I am not that artistic and stuff comes out pretty differently than what I usually imagine/CAD.

\r\n\r\n
\r\n

Vinyl Cutting:

\r\n

Yay! For vinyl cutting (which thankfully does not require that much art ability), we learnt how to use mods to process an image.

\r\n
\r\n \r\n
\r\n

And for the results...

\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n);\r\n}\r\n\r\nexport default W2;","import React, { Component } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport {W3image} from '../image.js'\r\n\r\nfunction W3(){\r\n return ( \r\n

\r\n Week 3: Electronics Production

\r\n
\r\n

Milling:

\r\n

Now we have access to a mill! So first thing I had to do was test the boundaries and characterize the mill and it's limits.

\r\n

So we did a test print using a 1/64 inch end mill, and turns out it worked out pretty well

\r\n
\r\n \r\n
\r\n

The removing stopped at around 0.015 (1/64 is 0.0156), while the other was fine up till 0.001, however I don't think the copper itself adheres well to the bottom plate.

\r\n
\r\n

I firstly used mods to generate the outline and paths for the mill to mill the traces

\r\n
\r\n \r\n \r\n
\r\n

However, I made two mistakes. First time I took the wrong png file, and on the second try I adjusted the origin of the mill too far away from \r\n where I was cutting the piece, and since the piece is not totally flat, the cut did not go through all the copper.

\r\n \r\n
\r\n \r\n \r\n
\r\n

Then I redid it and soldered all the parts on. I used solder paste and the technique of using the solder as an adhesive. However the last strip of copper burnt off, possibly because I had the iron it for too long.

\r\n
\r\n\r\n \r\n
\r\n

I guess fourth time's the charm.

\r\n
\r\n \r\n
\r\n
\r\n

Now I had to install the firmware into the microprocessor, which involved installing the software and a driver.\r\n In order to program our board, I need another programmer to flash our board. After that I blew all the fuses.

\r\n
\r\n \r\n
\r\n

To test if my programmer works, I used it to flash another unfinished programmer.

\r\n
\r\n \r\n
\r\n

It works!

\r\n\r\n\r\n
\r\n );\r\n};\r\n\r\nexport default W3;","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport {W4image} from '../image.js'\r\n\r\nfunction W4() {\r\n return (\r\n

\r\n Week 4: 3D printing and scanning

\r\n
\r\n

3D print testing

\r\n

As always, we must first test the limits and specs of the 3D printer.

\r\n

So a couple test prints were done. Including tests for wall thickness and supports.

\r\n
\r\n \r\n \r\n

Featuring Xiqing

\r\n
\r\n
\r\n

Here are the results:

\r\n
\r\n \r\n

Clearance

\r\n \r\n

Free overhang

\r\n \r\n

Anchored overhang

\r\n \r\n

Anisotropy

\r\n \r\n

Wall thickness

\r\n \r\n

Unsupported Angle

\r\n

\r\n
\r\n\r\n\r\n
\r\n

Printing a sphericon

\r\n

As for my project, I wanted to print a sphericon. It is known to be a 'roller' meaning it brings all points of\r\n it's surface to contact with the floor while rolling.

\r\n

It is first made by combining two rotated bicones.

\r\n
\r\n \r\n
\r\n

Then taking out some parts to make it look fancier.

\r\n
\r\n \r\n
\r\n

This is the final product.

\r\n
\r\n \r\n \r\n
\r\n

However there are some parts that are printed on the board with supports. And these supports could not be fully removed, so it wasn't \r\n as smooth as expected.

\r\n
\r\n \r\n
\r\n\r\n

It does roll quite smoothly though!

\r\n
\r\n \r\n
\r\n
\r\n

Scanning tape

\r\n

For 3D scanning, I used the 3D systems SENSE2 scanner - and we are scanning tape!

\r\n
\r\n \r\n
\r\n

The process was slightly tedious, since I had to slowly and steadily go around the object. ( Which was also surprising inconvenient since the table was rectangular)

\r\n
\r\n \r\n
\r\n

Here's the result! Apparently it also scanned the little piece I used to fix the tape in place. But with some repairing it gives a pretty good 3D representation!

\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n\r\n);\r\n}\r\n\r\nexport default W4;","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport {W5image} from '../image.js'\r\n\r\nfunction W5() {\r\n return (\r\n

\r\n Week 5: Electronics design

\r\n
\r\n

Designing

\r\n

It's the week where we make a board for a microprocessor!

\r\n
\r\n \r\n \r\n
\r\n

First thing's first, we need to design the circuits and the board. So I\r\n had to learn Eagle.

\r\n

First we get parts that correspond to parts on the board, then connect them correctly on the schematic.\r\n Then we can use that to create the board.

\r\n
\r\n \r\n \r\n
\r\n

The issue here is that the traces were actually stuck to each other. It turns out the design rules is slightly off to the png mods.\r\n So I just used the otherMill, since it takes in a .brd file instead of a png.

\r\n
\r\n \r\n \r\n
\r\n

Now we solder parts!

\r\n
\r\n
\r\n \r\n \r\n\r\n
\r\n

With a little handy dandy coding and help from my friend's unfinished (still has older bridge) ICP.\r\n I was able to power and code my attiny44.

\r\n\r\n \r\n\r\n\r\n \r\n
\r\n\r\n\r\n);\r\n}\r\n\r\nexport default W5;","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport {W6image} from '../image.js'\r\n\r\nfunction W6() {\r\n return (\r\n\r\n\r\n\r\n

\r\n W6: Computer Controlled machining

\r\n
\r\n

CADing

\r\n

I decided to use this week to make a design for my final project - a controlled labyrinth

\r\n

So since there are two axis of freedom for the maze, I had to create some mechanism for it to rotate. As you can see the outer square would be connected two stands such that it can rotate in one axis, while the inner square would be connected to the outer square in another axis, such that the inner square can rotate in essentially both axes!

\r\n\r\n
\r\n \r\n
\r\n\r\n

After designing, I had to draw out the pieces of the design.

\r\n
\r\n \r\n
\r\n\r\n

Then with a some help from Anthony, we designed the toolpaths on MasterCAM. And then we are ready to print!

\r\n
\r\n

CAMing

\r\n

The architecture wood shop had the onsrud machine which is VERY fast for a router.

\r\n \r\n
\r\n \r\n
\r\n

It even switches tools automatically!

\r\n
\r\n \r\n
\r\n

As you can see OSB is not the best material, the wood board itself was kind of curved initially, but this shouldn't be a huge issue,\r\n since my parts are relatively big. One thing worth noting is that since the wood is kept on the table by a vacuum, we did not cut all the way through the wood, since then the vacuum would be lost and the parts would not stay to the table. So in order to maintain the parts on the board, we did not drill all the way through, leaving a thin layer of wood called the 'onion skin' that we can break off later.The resulting parts were then broken off the onion skin and it's time to file everything down!

\r\n
\r\n \r\n \r\n
\r\n
\r\n

Then we had to glue the parts! Since these parts are relatively large, we had to come up with some special ways to clamp them down.

\r\n

So for the big outer square, we used right angle clamps to fix the corners so the square doesnt tilt and maintains a right angle, however, this fixes the anlge, but doesn't actually provide any force to fix the wood parts. So we then tied a belt around the whole square, and then tightened the belt to apply force to all sides at once without using 4 intersecting clamps.

\r\n
\r\n \r\n
\r\n

For the base, we used pipe clamps to tighten the supports on the sides. But then I realized that these stands were not very perpendicular, so later I also placed the outer box in the middle so that the supports were clamped against the inner box which is sufficiently perpendicular. In hope to get them as close to perpendicular as possible.

\r\n\r\n
\r\n \r\n
\r\n {/* changed to screwing later */}\r\n
\r\n

And here's the final product! Since I did not have the axles yet, I used some pencils to demonstrate it's functionality.

\r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n );\r\n}\r\n\r\nexport default W6;","\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport {W5image,W7image} from '../image.js'\r\n\r\nfunction W7() {\r\n return (

\r\n W7: Embedded Programming

\r\n
\r\n

Program the board

\r\n

Recall from week 5, we made a board with a button and a light. So now we need to make it do something

\r\n

During programming, we need two things, a programmer and a way to power the board while it is getting programmed. Luckily, my friend's programmer's solder bridge was not desoldered yet, so I was able to use that to power my board.

\r\n
\r\n \r\n
\r\n

The first step was to look up the attiny44 arduino pinout. Since I am using arduino to program the board, this is necessary since the pin names on the datasheet for the AT44 is not the same as the pin number used in arduino to program them.

\r\n\r\n
\r\n \r\n
\r\n

Recall that the button is a PULLUP, so by initiating the button pin as an input and the LED pin as an output. We can code the logic between these two buttons such that this code sets the LED pin to high when the button is LOW. Since the button pulls the voltage to low.

\r\n
\r\n \r\n
\r\n

So before programming, there is some setup to be done. We must first download the board (attiny) libraries, by getting the link to it online, and adding to the places arduino searches for board libraries. After doing so, we canset it in board manager.

\r\n

Pick ATTINY44 as the board and tinyUSB as the programmer, also pick the clock to the internal 1 MHz clock.

\r\n
\r\n \r\n
\r\n

In the end I was able to power and code my attiny44.

\r\n
\r\n \r\n
\r\n
\r\n\r\n );\r\n}\r\n\r\nexport default W7;","\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport {W2image,W8image} from '../image.js'\r\n\r\nfunction W8() {\r\n return (\r\n

\r\n W8: Molding and Casting

\r\n
\r\n

Molding

\r\n

Soooo after my failed attempt on a chess piece from laser cutting week. I aimed to redeem myself by casting a chess piece instead.

\r\n \r\n
\r\n \r\n
\r\n

So my second attempt is to mold and cast a chess piece. First step was to CAD a positive of the chess piece to make the mold. Since I had the CAD from previous weeks, this wasn't too hard. Then put this model into SolidWorks and design some toolpaths, (in which case 2D adaptive clearing wasn't actually half bad) then we can mill this guy from wax!

\r\n
\r\n \r\n \r\n
\r\n

Here's some milling live action! So the first pass made the rough shape of the pawn, and we did a second more detailed pass to get the pawn as round and smooth as possible! This was all done during the design of toolpaths, where the second pass was designed with a smaller shifting distance

\r\n
\r\n \r\n \r\n
\r\n
\r\n

Now it's time to make the mold!

\r\n

I made a the mold with OOMOO, a silicone mold rubber solution. (It's quite a mess) What I had to do was take one part of solution A (so they call it), and one part of solution B and combining them, while mixing them as much as possible. To get an accurate amount of OOMOO, I first measured the volume of the chess mold mold by pouring water into the mold and marking the amount. Then I filled the amount with half solution A and half solution B. So to not waste/lack an OOMOO, since the pawn was pretty close to the top of the mold.

\r\n
\r\n \r\n \r\n
\r\n

Repeat this process twice, get two halves of the mold and we are ready to cast!

\r\n
\r\n \r\n
\r\n
\r\n

Casting

\r\n

I decided to use hydro-stone, which is obviously the best material for a chess piece, who would want a rubber pawn? Hydrostone is a powder, that when mixed with water forms a stone like solid overtime. What surprised me was that the ratio between hydrostone and water was very skewed. It was like 9 part powder to 1 part water. So the solution is ectremely saturated, and a slight offset woulc make a uge difference in the consistency of the mixture and probably the final product.

\r\n

In order to keep the two molds together, I clamped the two halves of the molds together. However there was no way to guarantee that they were perfectly inline. If I wanted to, a good idea would be to create some linkage between the two molds, for example a hole in one and a part that sticks out in the order. BUT this would require me to make two different molds for the chess pieces, which in my opinion is an extreme waste of time for something not that accurate. I then cut a hole in the top in order to pour the stone solution in from the hole. Then it was only a matter of time.

\r\n
\r\n \r\n
\r\n

The final product had a little stub, and it was slightly off centered (since I eyeballed the clamping of the two halves).\r\n But the stub was easily removed and here is the (far superior) chess piece!

\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n\r\n\r\n
);\r\n};\r\n\r\nexport default W8;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport {W9image} from '../image.js'\r\n\r\nfunction W9() {\r\n return (\r\n

\r\n W9: Input Devices

\r\n
\r\n

Accelerometer

\r\n

For part of my final project, I have to read from an accelerometer to control the labirinth. So I'll try to make this work.

\r\n

The first challenge to this is milling the accelerometer. It has extremely small pads, smaller than what the 1/64 inch end mill could mill, so the pads on the accelerometer were actually less than 1/64 inch apart.\r\n Thankfully Neil actually had a design that had smaller traces, but still worked just as well. The design made copper connections on the board that are smaller than the pads on the accelerometer, so effectively the pads on the accelerometer were bigger than the traces on the board, which is a very smart solution. \r\n

\r\n \r\n
\r\n \r\n
\r\n
\r\n

The next challenge is to solder these small pads on the board. I used a technique called reflow. Which involves putting solder paste on the pads, putting the part on the paste and heating the whole thing up and the solder paste would naturally bind to the closest copper trace.\r\n Hoping that there are no shorts underneath. This strategy works surprisingly well, even though it did take multiple tries to get right, since it is very easy to have too much solder paste and create a short. Another thing however, is that it is very to easy to overheat the accelerometer in the process, which did happen once.

\r\n

I also then made an FabFTDI, but it only transmits in 4800 baud since it uses an AT45 which is not enough for the accelerometer. But I could\r\n use it to power the board while I program it. But in the end I still have to use an actual FTDI to get the data.

\r\n
\r\n \r\n \r\n

FabFTDI

\r\n
\r\n \r\n \r\n

FTDI cable

\r\n
\r\n
\r\n\r\n

Using the \"make -f \"makefile\"\" command to first make the hex file. Then using make -f \"makefile\" program-usbtiny, I loaded the porgram into the board.\r\n (which under the hood is avrdude \"-p t45 -P usb -c avrisp2 -U flash:w:$(PROJECT).c.hex\")\r\n

\r\n
\r\n \r\n
\r\n
\r\n

Then we just open the python file that parses the data. (Which is basically bytes that represented \"1\", \"2\",\"3\",\"4\", then 3 2byte numbers. Each represented x y z, and range from -255 to 255, with the first byte descibing if the number is negative or not, and the second byte being a value from 0 to 255. Along with a basic low pass filter.\r\n By using a running average.

\r\n

So what we need to do is write code that continuously takes in data, until the starting frame is matched (so a continuous triplet of 1 2 3), then we can read the next 6 datapoints reliably to get the acceleration in the X,Y and Z axis by doing some basic algebra.

\r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\nexport default W9;","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport {W10image} from '../image.js'\r\n\r\nfunction W10() {\r\n return (\r\n

\r\n W10: Output Devices

\r\n
\r\n

Servo Motor

\r\n\r\n

First step is to make the board for the motor driver. However I did not check what regulator the lab had,\r\n so I milled a board for the LM2940, only to realize we only had ZLDO1117s. So that was an unfortunate waste of time.

\r\n
\r\n \r\n

LM2940

\r\n \r\n

ZLDO1117

\r\n
\r\n

So after uploading the code on the board (neil's). We first connect the board to an actual power source, since the USBport\r\n does not give enough power to power the servo. (Beware since reversing polarity might fry the regulator, which I almost did). What was interesting though is that I tested out multiple servos, and they all took different amount of current(duh), but some were actually able to reach max torque just by computer connection! If the pulse width modulation is coded effectively and correctly, it could actually use the current more effectively.\r\n

\r\n
\r\n \r\n
\r\n

Also the servo takes in VCC, GND and signal. The signal is a PWM meaning the pulse controls the angle the servo goes to, which is slightly less of a mess compared to steppers and DC motors.\r\n My code also uses software PWM, but there is also hardware PWM in attinys, which allows concurrent processing since the PWM is maintained through the hardware of the servo. \r\n

\r\n
\r\n

And it workss!

\r\n
\r\n \r\n
\r\n\r\n\r\n
\r\n );\r\n}\r\nexport default W10;","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport {W11image} from '../image.js'\r\n\r\nfunction W11() {\r\n return (\r\n

\r\n W11: Networking and Communications

\r\n
\r\n

Accelerometer to servo

\r\n\r\n

So after creating the servo controller and and Accelerometer reading chip, I had to combine these two. My first intuitive idea \r\n was to have these two directly talk to each other through UART. So I created a little wired mechanism to give me accesss to ground and a pin on the motor controller to connect it to the accelerometer.

\r\n

However, possibly because I don't know how to code efficiently in C using\r\n bit shifts, the calculations/code required take slightly too much memory to be embedded on a chip, it is also extremely frustrating to debug since you never know what's going on between the two boards.

\r\n\r\n \r\n

So instead, I am going to make a python script that does all the math and reads in accelerometer and writes to the servo in one UART line. This allows me to print out the incoming data and outgoing data, to facilitate debugging and allows me to do all the math on my computer, which is significantly faster and less memory consuming than putting the task on one particular board.

\r\n
\r\n \r\n
\r\n
\r\n

Accerlerometer to python to servo

\r\n

The accelerometer to python part was done in input week, however the python to servo part was not.

\r\n

As I was doing this I have learnt about the Arduino IDE and libraries. I learnt that the AT44 is not compatible with the servo library for some reason, possibly because the AT44 uses an 8 bit, while the servo library is designed for 16 bit timers. So my solution was to hard code PWM in arduino, effectively making software PWM.

\r\n

\r\n Then I also learnt that the typical serial library in arduino is also not compatible with the At44. So after a lot of searching, I have learnt that I can use the softwareserial library. So by doing the mapping and math, specifically mapping the acceleration measured into an angle, then to a PWM pulse length. I was able to make the python script send out the length of the PWM. So the servo controller can do a minimum amount of math. Below is the software PWM code in arduino, with smoothing.

\r\n\r\n \r\n `{`void turn(int pulse,int old){`}
\r\n {`int diff = 0;`}
\r\n {`for (int i =0;i<5;i++){`}
\r\n {`diff = int(old+i/5*(pulse-old));`}
\r\n {`digitalWrite(A7, HIGH); // sets the digital pin 13 on`}
\r\n {`delayMicroseconds(diff); // waits for a second`}
\r\n {`digitalWrite(A7,LOW); `}
\r\n {`delayMicroseconds(20000-diff);`}
\r\n {`}`}
\r\n {`}`}\r\n `
\r\n

One issue I ran into was the timing, since the servo can only response/read at such a speed, since it takes time for the servos to spin. The accelerometer spits out\r\n information at 9600baud rate, so this was extremely fast compared to the spin time of the servo. So I changed the rate at which the PYTHON script sends info to the servo, while continuously reading information from the Accerlerometer,\r\n this allows a continuous stream of information for the low pass filter, so I would maintain a steady and accurate measurements while not having the servo spazz out and delay due to amount of information it is receiving.\r\n

\r\n\r\n
\r\n \r\n
\r\n

PS this is an old video before the servo was smoothed out.

\r\n
\r\n );}\r\n export default W11;\r\n \r\n\r\n \r\n\r\n\r\n\r\n\r\n\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport {W13image} from '../image.js'\r\n\r\nfunction W13() {\r\n return (\r\n

\r\n W13: Interfaces and Application Programming

\r\n
\r\n

\r\n Since I have some experience in Unity before, I decided to do a simulation of what I hope to achieve in Unity. Since Unity has an in built physics engine, all I would need to do is make a plane and a ball, and send data to Unity that could allow it to constantly update the tilt of the plane.\r\n

\r\n\r\n

Serial

\r\n

My first intuitive thought was use some sort of serial functionality in Unity to directly get data from the accelerometer, since that is the most straightfoward solution.

\r\n

The main way to use Serial in Unity is by using the .NET framework and using System.IO.Ports, and after reading the data from the accelerometer I would have to parse it in Unity, and do the math to convert it to an angle.

\r\n\r\n

However, there is a same issue - the raw accelerometer sends info too rapidly for unity to respond. As a result it misses a bunch of data and is really laggy, unclear why.

\r\n

So instead I decided to learn and try something new - Sockets.

\r\n
\r\n

Sockets

\r\n

So I first tried to make a simple socket server and client work in pure python.

\r\n

Normally one would have to do post and get requests to talk to servers, and those take a significant amount of time toget around. However, sockets are able to open a continuous stream of communication that goes both ways. And this is how most games/chatrooms are able to do near instantaneous responses.

\r\n

What the server code is doing is opening a listener on localhost that would print out any messages that gets sent to them. And the client is simply another python script that sends 'foo' to a socket at a specific address every 0.1 seconds. And the result is the server constantly printing 'foo'.

\r\n
\r\n \r\n

Server

\r\n \r\n

Client

\r\n
\r\n

After this worked, since I already had a python script that parsed the accelerometer data, all I needed to do was instead of sending serial data to the motoy, I had the python script do more math to convert accelerometer data into an angle (specifically it was the inverse sine of the ratio between acceleration measured in that axis over the max acceleration (which is 255 AKA 1g)). I had my accelerometer script send angles to a socket instead of PWM times through Serial.

\r\n

Using System.Net and System.Net.Sockets, I was able to create a socket server on UNity.

\r\n
\r\n \r\n

Server

\r\n
\r\n

Now what we need to do is start a tcp server stream to continuously update the angle of the virtual board. So next step is actually make the plane and controls in UNity, which was not hard since I am familiar with UNity, but it involves setting the gameobject transform into the correct quaternion. Finally add a ball, put a tennis ball texture and let Unity physics take care of the rest!

\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n );\r\n}\r\n\r\nexport default W13;","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport {W14image} from '../image.js'\r\n\r\nfunction W14() {\r\n return (\r\n

\r\n W14: Wildcard Week: Inflatables

\r\n
\r\n

It's wildcard week and me and my friend Kevin chose to do Inflatables, since it would teach us a very useful skill - sewing.

\r\n

Our original plan is to attempt to make a pokemon called Corsola. Since we thought of making something that is big and decorative, possibly something to hang somewhere in our room, so we first thought of making a tentacle like structure, but in the end we resorted to something on the cute side.

\r\n
\r\n \r\n \r\n
\r\n

For planning, we first made a quick cylinder to test out the dynamics of inflatables. After seeing how a simple cylinder inflates, we made a rough sketch of the 2D map of Corsola, which would consist of basically cones and ellipses like sheets that would create a obloid like shape. After planning, we also cut a quick paper mesh and taped that together to create a rough prototype to see if the idea of an obloid

\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n

Next step was to learn how to use the sewing machine! So the machine actually uses two threads and criss crosses them to imitate 'sewing', there was a lot of set up that included hooking up the thread in the correct way such that nothing tangled. But after everything is set up. All we had to do is step on the pedal and the fabric automatically moves and the machine sews! All we need to do is guide the fabric to the correct position!

\r\n
\r\n \r\n \r\n
\r\n \r\n

The process was kind of rough due to HUGE fabric we were using, but it was fine since precision really doesn't matter on such a big scale, and since the traces are getting flipped inside out, the sewing job does not need to be particularly nice too.

\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n

Finally we created our big obloid, we also had a hole on top so that the ball doesn't just burst when it's filled with air! This took a surprising amount of time, so unfortunately we only had time to put one cone (tentacle thingy) on! However, learning sewing was very fun and a very practical skill to have!

\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n );\r\n }\r\n\r\nexport default W14;","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport {finalimg} from '../image.js'\r\nimport {W6image} from '../image.js'\r\nimport {W9image} from '../image.js'\r\nimport {W10image} from '../image.js'\r\nimport {W11image} from '../image.js'\r\n\r\n\r\n\r\n\r\n\r\nfunction Final() {\r\n return (\r\n

\r\n Final: Electronic Labyrinth

\r\n
\r\n

Ideation

\r\n

Everything is more entertaining when it's big! For example, toy/remote control cars are fun and all, but it seems like the bigger they are, the more fun it provides, toys like plushies or even rubix cubes, I'll be down to have a huge version of. But there is one issue - when these toys get out of scale, it's sometimes hard to play with them - how would you spin a huge rubix cube?

\r\n
\r\n \r\n
\r\n

A difficult part of making huge games/toys is the actuating. And there's one particular toy that I'd like to see a big version of - the labyrinth.

\r\n
\r\n \r\n
\r\n
\r\n\r\n

The frame

\r\n \r\n

So since there are two axis of freedom for the maze, I had to create some mechanism for it to rotate. As you can see the outer square would be connected two stands such that it can rotate in one axis, while the inner square would be connected to the outer square in another axis, such that the inner square can rotate in essentially both axes!

\r\n\r\n
\r\n \r\n
\r\n\r\n

After designing, I had to draw out the pieces of the design.

\r\n
\r\n \r\n
\r\n\r\n

Then with a some help from Anthony, we designed the toolpaths on MasterCAM. And then we are ready to print!

\r\n
\r\n

The architecture wood shop had the onsrud machine which is VERY fast for a router.

\r\n \r\n
\r\n \r\n
\r\n

It even switches tools automatically!

\r\n
\r\n \r\n
\r\n

As you can see OSB is not the best material, the wood board itself was kind of curved initially, but this shouldn't be a huge issue,\r\n since my parts are relatively big. One thing worth noting is that since the wood is kept on the table by a vacuum, we did not cut all the way through the wood, since then the vacuum would be lost and the parts would not stay to the table. So in order to maintain the parts on the board, we did not drill all the way through, leaving a thin layer of wood called the 'onion skin' that we can break off later.The resulting parts were then broken off the onion skin and it's time to file everything down!

\r\n
\r\n \r\n \r\n
\r\n
\r\n

Then we had to glue the parts! Since these parts are relatively large, we had to come up with some special ways to clamp them down.

\r\n

So for the big outer square, we used right angle clamps to fix the corners so the square doesnt tilt and maintains a right angle, however, this fixes the anlge, but doesn't actually provide any force to fix the wood parts. So we then tied a belt around the whole square, and then tightened the belt to apply force to all sides at once without using 4 intersecting clamps.

\r\n
\r\n \r\n
\r\n

For the base, we used pipe clamps to tighten the supports on the sides. But then I realized that these stands were not very perpendicular, so later I also placed the outer box in the middle so that the supports were clamped against the inner box which is sufficiently perpendicular. In hope to get them as close to perpendicular as possible.

\r\n\r\n
\r\n \r\n
\r\n
\r\n

And here's the final product! Since I did not have the axles yet, I used some pencils to demonstrate it's functionality.

\r\n
\r\n \r\n
\r\n

Later on though, I changed the design slightly. Since the glue that were holding the stands were no where strong enough to actually keep them perpendicular. I made them into blocks instead and did the classic trick of screwing the stand to the block, and the block to the base.

\r\n
\r\n \r\n
\r\n

I also made axles to rotate the squares, since they had quite big holes, I had to 3D-print the custom axles, to match the length and size of the labyrinth.

\r\n
\r\n \r\n \r\n\r\n
\r\n

Improvements

\r\n

So there were a couple issues with my design, I realized since the wood was relatively heavy, weight distribution actually became extremely important and played a huge role in distributing the torque on the servo.

\r\n

And another issue was the material choice - wood was actually extremely heavy for something this big, I could've easily used something lighter like acrylic or cardboard that would've made my life easier. So in the end I replaced the inner square with a cardboard square instead.

\r\n
\r\n

Input - Accelerometer

\r\n \r\n

The first challenge to this is milling the accelerometer. It has extremely small pads, smaller than what the 1/64 inch end mill could mill, so the pads on the accelerometer were actually less than 1/64 inch apart.\r\n Thankfully Neil actually had a design that had smaller traces, but still worked just as well. The design made copper connections on the board that are smaller than the pads on the accelerometer, so effectively the pads on the accelerometer were bigger than the traces on the board, which is a very smart solution. \r\n

\r\n \r\n
\r\n \r\n
\r\n
\r\n

The next challenge is to solder these small pads on the board. I used a technique called reflow. Which involves putting solder paste on the pads, putting the part on the paste and heating the whole thing up and the solder paste would naturally bind to the closest copper trace.\r\n Hoping that there are no shorts underneath. This strategy works surprisingly well, even though it did take multiple tries to get right, since it is very easy to have too much solder paste and create a short. Another thing however, is that it is very to easy to overheat the accelerometer in the process, which did happen once.

\r\n

I also then made an FabFTDI, but it only transmits in 4800 baud since it uses an AT45 which is not enough for the accelerometer. But I could\r\n use it to power the board while I program it. But in the end I still have to use an actual FTDI to get the data. (Later on though I made the better FabFTDI with the ATmega.

\r\n
\r\n \r\n \r\n

FabFTDI

\r\n
\r\n \r\n \r\n

FTDI cable

\r\n
\r\n
\r\n\r\n

Using the \"make -f \"makefile\"\" command to first make the hex file. Then using make -f \"makefile\" program-usbtiny, I loaded the porgram into the board.\r\n (which under the hood is avrdude \"-p t45 -P usb -c avrisp2 -U flash:w:$(PROJECT).c.hex\")\r\n

\r\n
\r\n \r\n
\r\n
\r\n

Then we just open the python file that parses the data. (Which is basically bytes that represented \"1\", \"2\",\"3\",\"4\", then 3 2byte numbers. Each represented x y z, and range from -255 to 255, with the first byte descibing if the number is negative or not, and the second byte being a value from 0 to 255. Along with a basic low pass filter.\r\n By using a running average.

\r\n

So what we need to do is write code that continuously takes in data, until the starting frame is matched (so a continuous triplet of 1 2 3), then we can read the next 6 datapoints reliably to get the acceleration in the X,Y and Z axis by doing some basic algebra.

\r\n
\r\n \r\n
\r\n
\r\n\r\n

Output - Servo Motor

\r\n

First step is to make the board for the motor driver. However I did not check what regulator the lab had,\r\n so I milled a board for the LM2940, only to realize we only had ZLDO1117s. So that was an unfortunate waste of time.

\r\n
\r\n \r\n

LM2940

\r\n \r\n

ZLDO1117

\r\n
\r\n

So after uploading the code on the board (neil's). We first connect the board to an actual power source, since the USBport\r\n does not give enough power to power the servo. (Beware since reversing polarity might fry the regulator, which I almost did). What was interesting though is that I tested out multiple servos, and they all took different amount of current(duh), but some were actually able to reach max torque just by computer connection! If the pulse width modulation is coded effectively and correctly, it could actually use the current more effectively.\r\n

\r\n
\r\n \r\n
\r\n

Also the servo takes in VCC, GND and signal. The signal is a PWM meaning the pulse controls the angle the servo goes to, which is slightly less of a mess compared to steppers and DC motors.\r\n My code also uses software PWM, but there is also hardware PWM in attinys, which allows concurrent processing since the PWM is maintained through the hardware of the servo. \r\n

\r\n
\r\n

And it workss!

\r\n
\r\n \r\n
\r\n
\r\n

Communication - UART

\r\n \r\n

Accelerometer to servo

\r\n\r\n

So after creating the servo controller and and Accelerometer reading chip, I had to combine these two. My first intuitive idea \r\n was to have these two directly talk to each other through UART. So I created a little wired mechanism to give me accesss to ground and a pin on the motor controller to connect it to the accelerometer.

\r\n

However, possibly because I don't know how to code efficiently in C using\r\n bit shifts, the calculations/code required take slightly too much memory to be embedded on a chip, it is also extremely frustrating to debug since you never know what's going on between the two boards.

\r\n\r\n \r\n

So instead, I am going to make a python script that does all the math and reads in accelerometer and writes to the servo in one UART line. This allows me to print out the incoming data and outgoing data, to facilitate debugging and allows me to do all the math on my computer, which is significantly faster and less memory consuming than putting the task on one particular board.

\r\n
\r\n \r\n
\r\n
\r\n

Accerlerometer to python to servo

\r\n

The accelerometer to python part was done in input week, however the python to servo part was not.

\r\n

As I was doing this I have learnt about the Arduino IDE and libraries. I learnt that the AT44 is not compatible with the servo library for some reason, possibly because the AT44 uses an 8 bit, while the servo library is designed for 16 bit timers. So my solution was to hard code PWM in arduino, effectively making software PWM.

\r\n

\r\n Then I also learnt that the typical serial library in arduino is also not compatible with the At44. So after a lot of searching, I have learnt that I can use the softwareserial library. So by doing the mapping and math, specifically mapping the acceleration measured into an angle, then to a PWM pulse length. I was able to make the python script send out the length of the PWM. So the servo controller can do a minimum amount of math. Below is the software PWM code in arduino, with smoothing.

\r\n\r\n \r\n `{`void turn(int pulse,int old){`}
\r\n {`int diff = 0;`}
\r\n {`for (int i =0;i<5;i++){`}
\r\n {`diff = int(old+i/5*(pulse-old));`}
\r\n {`digitalWrite(A7, HIGH); // sets the digital pin 13 on`}
\r\n {`delayMicroseconds(diff); // waits for a second`}
\r\n {`digitalWrite(A7,LOW); `}
\r\n {`delayMicroseconds(20000-diff);`}
\r\n {`}`}
\r\n {`}`}\r\n `
\r\n

One issue I ran into was the timing, since the servo can only response/read at such a speed, since it takes time for the servos to spin. The accelerometer spits out\r\n information at 9600baud rate, so this was extremely fast compared to the spin time of the servo. So I changed the rate at which the PYTHON script sends info to the servo, while continuously reading information from the Accerlerometer,\r\n this allows a continuous stream of information for the low pass filter, so I would maintain a steady and accurate measurements while not having the servo spazz out and delay due to amount of information it is receiving.\r\n

\r\n\r\n
\r\n \r\n
\r\n

PS this is an old video before the servo was smoothed out.

\r\n
\r\n

Intergration

\r\n

Now all mechanisms are ready, it's time to intergrate them. First thing to do is optimize the data being sent from PYTHON to the accelerometer. So since the PWM range goes from 300ms (0 degrees) to 2000ms (180 degrees), in order to minimum calculations on the motor driver, the python script first sends a period before any data point, and then 4 digits that encode the PWM length.

\r\n\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n

Now here's the mistake, I assumed that everything would be fine as long as I do the same thing for the other motor. However, since I was determined to control both motors from one motor control. Here's when stuff went south.

\r\n

So first on the data side, I chose to be as efficient as possible but still send the right information. So I scaled the PWM to a number between 0 and 99 and sent the data in the form of '.XX,YY' With the period prefacing the X pwm and comma prefacing the Y pwm. This could then be scaled back into a PWM on the motor side. However...

\r\n
\r\n \r\n
\r\n

It does not work! I assumed that it was an issue of power since I was powering two motors through my computer. So I tried lowering the torque by centering the square (which surprising allowed it to tilt a little more) and lubricating the axles, but all in vain.

\r\n
\r\n \r\n
\r\n

So I lived at EDS, using their power source and oscilloscope to debug this thing. So apprently it wasn't a power/torque issue. My most likely guess is that it is an issue of delays.

\r\n

My first guess is that it is an issue since I am operating two motors one after another, this big delay was enough to interfere with me reading the data (even though I have symbols that prefaces the data). I tried using hardware PWM so that I can concurrently control the motor and receive input, but apparently, softwareserial is not compatible with hardware PWM.

\r\n

\r\n I realized that most drivers out there are not compatible with anything, and I guess knowing how to code everything from scratch is probably the best move. Given Serial and Servo libraries aren't compatible with At44, and Softwareserial isn't compatible with hardware PWM.\r\n

\r\n\r\n

So I decided to settle for a one axis game - instead I'll make a tiltable pachinko machine!

\r\n
\r\n

Pachinko!

\r\n

A pachinko machine is almost like pinball, but you just let the ball drop and hope it lands on a slot that has a reward.

\r\n
\r\n \r\n
\r\n\r\n

So here's my final project and some vids of it in action!

\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n\r\n\r\n\r\n\r\n
);}\r\n\r\nexport default Final;","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport me from '../images/me.jpg'\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nfunction About() {\r\n return (\r\n
\r\n \r\n
\r\n

Hi! Im Jeremy Ma! A international sophomore in MIT majoing in 6-9 [Computation and Cognition]hehe). I've gotten pretty into dance in my years in MIT.

\r\n

I'm interested in how we perceive specifically the overlaps between computation and human percpetion.

\r\n

I also do a good amount of making for fun (less so now), here's some examples.

\r\n\r\n
);\r\n}\r\nexport default About;","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Component } from 'react';\r\nimport {Navbar,Nav,NavDropdown} from 'react-bootstrap';\r\nimport { LinkContainer } from \"react-router-bootstrap\";\r\n\r\n\r\nclass Navbarm extends Component {\r\n \r\n state = { }\r\n\r\n render() { \r\n return ( \r\n \r\n How to make\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n}\r\nconst navbarStyles = {backgroundColor: 'rgba(255, 255, 255, 0.85)',\r\n paddingTop: '10px',\r\n paddingBottom: '10px',\r\n paddingLeft: '40px',\r\n color:'black',\r\n }\r\n\r\nconst navbarWordStyles = {color:'black', fontWeight: 'bold',fontFamily: '\\'Caveat\\', cursive', fontSize:'35px',}\r\nconst navbarElementStyles = {color:'black', fontFamily: '\\'Caveat\\', cursive', fontSize:'30px',paddingLeft:'20px',paddingRight:'20px'}\r\nconst navbarItemStyles = {color:'black', fontFamily: '\\'Montserrat\\', sans-serif', fontSize:'20px',paddingLeft:'20px',paddingRight:'20px'}\r\n\r\n\r\n \r\nexport default Navbarm;","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport {HashRouter as Router,Switch,Route,Link} from \"react-router-dom\";\n// import { Component } from 'react';\nimport W1 from './components/pages/W1'\nimport W2 from './components/pages/W2'\nimport W3 from './components/pages/W3'\nimport W4 from './components/pages/W4'\nimport W5 from './components/pages/W5'\nimport W6 from './components/pages/W6'\nimport W7 from './components/pages/W7'\nimport W8 from './components/pages/W8'\nimport W9 from './components/pages/W9'\nimport W10 from './components/pages/W10'\nimport W11 from './components/pages/W11'\nimport W13 from './components/pages/W13'\nimport W14 from './components/pages/W14'\nimport final from './components/pages/final'\nimport about from './components/pages/about'\n\n\n\n\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport './App.css';\nimport Navbarm from './components/Navbarm';\n\n\nfunction App() {\n return (\n \n \n \n \n
\n (

Fun fact: I wanted to use this opportunity to learn how to use React, so this static website is made using React :) Enjoy

)}/>\n \n \n\n \n \n \n \n \n \n \n \n \n \n \n { \n window.location.href = 'http://fab.cba.mit.edu/classes/863.19/EECS/people/Machine%20Week/index.html'; \n return null;\n }}/>\n \n \n\n
\n
\n \n \n );\n}\n\nexport default App;\n","import React from 'react';\r\nimport ReactDOM from 'react-dom'\r\nimport App from './App'\r\n\r\nReactDOM.render(,document.getElementById('root'));\r\n"],"sourceRoot":""}