{"componentChunkName":"component---src-templates-blog-post-js","path":"/put-to-light/","result":{"data":{"site":{"siteMetadata":{"title":"Justin is a Maker","author":"Justin Smith"}},"mdx":{"id":"a3f7e8fa-53ac-5164-b4ed-ec9fb1efa7e6","frontmatter":{"title":"A.C. Moore Put to Light","date":"July 10, 2018","externalLink":null,"teaser":"A custom-built Put to Light system for A.C. Moore's warehouses to increase order processing speed and accuracy."},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"A.C. Moore Put to Light\",\n  \"date\": \"2018-07-10T00:00:00-0500\",\n  \"teaser\": \"A custom-built Put to Light system for A.C. Moore's warehouses to increase order processing speed and accuracy.\",\n  \"featuredImage\": \"ptl-walls.jpg\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Retailers have their work cut out for them if they\\u2019re going to keep up with Amazon. The scale and speed at which they operate has completely transformed consumer expectations\\u2013two-day shipping has become the de facto standard for delivered goods. A.C. Moore, a major arts and crafts retailer for the eastern part of the United States, realized that they would have a major problem on their hands if they didn\\u2019t adapt to meet that shipping speed. There\\u2019s only so much control that they have over an order when it leaves their warehouse, but they can control how quickly they process orders inside their operation.\"), mdx(\"p\", null, \"One of the pieces of their order fulfillment puzzle was a strategy called \\u201CPut to Light.\\u201D Whenever an order comes into their warehouse it is split into three major phases\\u2013picking, sorting, and packing. During the picking phase, items are retrieved from the warehouse floor and sent along conveyors in a series of \\u201Cpick waves.\\u201D When a pick wave is ready to be sorted, it gets diverted to a put wall. That\\u2019s where I come in! A.C. Moore knew that they wanted put walls, but they weren\\u2019t happy with the existing options, and they wanted one that would integrate perfectly with their custom-built warehouse management system. They asked if I could build them nine custom put walls, and before I knew it, I was knee deep in warehouse logistics!\"), mdx(\"div\", {\n    \"className\": \"image-container large-image\"\n  }, \"\\n  \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1200px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/64d95373b0eb3bf4163bfb0cb4075088/89513/ptl-walls.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"66.33333333333333%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAQBAgMF/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhADEAAAAVZbsc83I//EABwQAAIABwAAAAAAAAAAAAAAAAABAgMQERIhMf/aAAgBAQABBQJy9wqw6PmKP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABYQAAMAAAAAAAAAAAAAAAAAABAgMf/aAAgBAQAGPwIRP//EABkQAAMBAQEAAAAAAAAAAAAAAAABESExYf/aAAgBAQABPyGERz0bprPEJXVQt6Jo7Yf/2gAMAwEAAgADAAAAEOjf/8QAFREBAQAAAAAAAAAAAAAAAAAAEBH/2gAIAQMBAT8Qh//EABYRAQEBAAAAAAAAAAAAAAAAABEAAf/aAAgBAgEBPxBwm//EABsQAQEAAgMBAAAAAAAAAAAAAAERACExQVHw/9oACAEBAAE/ENWKrttDnBRUfa4dUXu40CjXhlAIUlnGDtdvUz//2Q==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"The completed put walls\",\n    \"title\": \"The completed put walls\",\n    \"src\": \"/static/64d95373b0eb3bf4163bfb0cb4075088/e5166/ptl-walls.jpg\",\n    \"srcSet\": [\"/static/64d95373b0eb3bf4163bfb0cb4075088/f93b5/ptl-walls.jpg 300w\", \"/static/64d95373b0eb3bf4163bfb0cb4075088/b4294/ptl-walls.jpg 600w\", \"/static/64d95373b0eb3bf4163bfb0cb4075088/e5166/ptl-walls.jpg 1200w\", \"/static/64d95373b0eb3bf4163bfb0cb4075088/d9c39/ptl-walls.jpg 1800w\", \"/static/64d95373b0eb3bf4163bfb0cb4075088/df51d/ptl-walls.jpg 2400w\", \"/static/64d95373b0eb3bf4163bfb0cb4075088/89513/ptl-walls.jpg 4288w\"],\n    \"sizes\": \"(max-width: 1200px) 100vw, 1200px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n  \", mdx(\"a\", {\n    parentName: \"div\",\n    \"className\": \"image-caption\"\n  }, \"The completed put walls\")), mdx(\"p\", null, \"At its core a put wall is a fairly simple technology. We needed to be able to light up a specific location under a bin on a shelf where an item would be placed, and then listen for a button click to confirm that the picker put the item in the bin. While simple from a hardware perspective, there is a lot that needs to happen on the software side of things, and it gets increasingly complex as you try to scale it. Whatever solution I came up with needed to be able to communicate to the endpoints of their warehouse management system (WMS). It also needed to be able to do it for roughly 500 bins at a time, with absolutely no errors, as fast as it possibly could.\"), mdx(\"div\", {\n    className: \"paragraph-with-picture\"\n  }, mdx(\"p\", null, \"I decided to use a Raspberry Pi for the brain of each put wall. We needed to be able to perform some pretty complex handshakes with the WMS that would have been an absolute nightmare to attempt on an Arduino. While the Pi was better-suited for the networking side, it does not ship with the kind of inputs and outputs that we needed. Each put wall needed to listen to 52 buttons and run approximately six thousand WS2812B LEDs.\", mdx(\"br\", null), mdx(\"br\", null), \"The first thing to account for were the buttons. We needed twice as many inputs as were available on the Pi, which meant that I\\u2019d have to find an external way to expand the I/O capabilities. I sourced an excellent stackable HAT from ModMyPi that gave us access to two MCP23017 port expander chips. By stacking two of these HATs on the Pi we could move all of the inputs from the buttons off of the main GPIO pins. That left enough room for us to drive the extremely long LED strips and account for all the buttons.\"), mdx(\"div\", {\n    \"className\": \"image-container small-image\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1200px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/c7c17638e588ddb37456820b250c05dc/9568a/gpio-config.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"133.33333333333331%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAMEAgH/xAAWAQEBAQAAAAAAAAAAAAAAAAACAwH/2gAMAwEAAhADEAAAAV7xAKVDRyUp4VwhNX//xAAbEAABBAMAAAAAAAAAAAAAAAABAAIRIQMSMv/aAAgBAQABBQLYElzYeLyAQKVrI2tFIBPLuF//xAAYEQEBAAMAAAAAAAAAAAAAAAAAARESQf/aAAgBAwEBPwHixlvX/8QAFxEAAwEAAAAAAAAAAAAAAAAAAAEREP/aAAgBAgEBPwGCyH//xAAbEAACAgMBAAAAAAAAAAAAAAAAASExEBEggf/aAAgBAQAGPwIsobhCIa9N4lrj/8QAGxABAAMAAwEAAAAAAAAAAAAAAQARITFBUWH/2gAIAQEAAT8hULeeiVVGJS+kw3wPfsFkkV6AYZr5JariwGrKuAjGZzP/2gAMAwEAAgADAAAAELvqfP/EABcRAQEBAQAAAAAAAAAAAAAAAAEAETH/2gAIAQMBAT8QMQ5At1kR/8QAGBEBAQADAAAAAAAAAAAAAAAAAAEhMXH/2gAIAQIBAT8Q6VhNLD//xAAeEAEAAwACAgMAAAAAAAAAAAABABEhMUFRcYGh8f/aAAgBAQABPxCp0OWle4sLuFeXiOtFKfbE4jhu2uk998ZxHR2m7cLiHKgBb+QElhSdwBBVWtY0RoFsADr5hi1teY6nC6zkrqs//9k=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"The MCP23017 HAT with everything plugged in\",\n    \"title\": \"The MCP23017 HAT with everything plugged in\",\n    \"src\": \"/static/c7c17638e588ddb37456820b250c05dc/e5166/gpio-config.jpg\",\n    \"srcSet\": [\"/static/c7c17638e588ddb37456820b250c05dc/f93b5/gpio-config.jpg 300w\", \"/static/c7c17638e588ddb37456820b250c05dc/b4294/gpio-config.jpg 600w\", \"/static/c7c17638e588ddb37456820b250c05dc/e5166/gpio-config.jpg 1200w\", \"/static/c7c17638e588ddb37456820b250c05dc/d9c39/gpio-config.jpg 1800w\", \"/static/c7c17638e588ddb37456820b250c05dc/df51d/gpio-config.jpg 2400w\", \"/static/c7c17638e588ddb37456820b250c05dc/9568a/gpio-config.jpg 3024w\"],\n    \"sizes\": \"(max-width: 1200px) 100vw, 1200px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n    \", mdx(\"a\", {\n    parentName: \"div\",\n    \"className\": \"image-caption\"\n  }, \"The MCP23017 HAT with everything plugged in\"), \"\\n  \")), mdx(\"p\", null, \"The LEDs were split into two long zig-zag strips\\u2013one for the putting side on the front, and one for the packing side on the back. The general idea is that when an item is scanned, the bin that it goes in will light up blue on the front of the wall. When a picker places the item in that bin, they hit the button, and then the system checks if anything else needs to go into the bin to complete the order. If the order is ready to ship, then the LEDs on the other side of the wall light up green to let the shipping department know that the bin is ready to be pulled from the wall and packed for shipping. At 3,000 pixels long we were definitely stretching the boundaries of what our Neopixels were capable of. We were, however, able to get great performance out of them thanks to a beefy power supply that was introduced at multiple parts of the circuit and no need for animation along the strips. Ultimately each wall would only have 30 or 40 LEDs turned on at a time in most cases, so we were able to run both strips from two pins on the Pi. We wanted to go with a full RGB LED rather than a solid-colored strip in order to communicate different phases of a pick wave. For instance, if a picker realized that something was wrong after they confirmed an item\\u2019s placement, they could flag the location for a QA check from the tablet computer attached to the wall. This would then light up the front and back of the location with orange lights to let both sides know not to proceed with that bin.\"), mdx(\"p\", null, \"After I squared away the physical production side of mounting all the buttons and running all the LEDs, we needed to determine the most efficient way for the Pi to communicate with the WMS. I decided to build a custom API that communicated with the WMS via a MQTT server. MQTT has been around since 1999, but has become increasingly popular because of its usefulness in IoT projects. As its core, MQTT is a super lightweight pub/sub communicator that lets you rapidly send or receive small bits of information. This was perfect for our use case\\u2013the wall would subscribe to lighting messages coming from the WMS, and then publish button presses back to the WMS. In addition to the speed of MQTT, you can also set a quality of service. This means that you can say if you want a message to continue trying to send until it receives a confirmation that the message was received. Having the system be able to confirm a message like that was a huge help in making sure that there were zero errors during processing.\"), mdx(\"p\", null, \"We had the luxury of setting up a brand new warehouse for A.C. Moore in Chicago at the start of this project, so we began by only running three of the nine put walls on the new system to make sure that everything worked. There was a fair amount of wear and tear on the shelves since everyone is the warehouse is moving so quickly, but I designed the system to be as modular as possible and to be simple enough for any of the warehouse managers to repair. After a few tweaks to the physical design of the system, we rolled out the other six walls right before Black Friday, where they ran for almost two days solid. Since then A.C. Moore has also installed five of the walls in their main warehouses in Berlin, New Jersey.\"), mdx(\"p\", null, \"The whole process can be a lot to wrap your head around if you aren\\u2019t familiar with warehouse logistics. Check out the video below to see what a full pick wave looked like when I was testing it with an A.C. Moore employee.\"), mdx(\"video\", {\n    src: \"/41af92184c63a761f93160b0ff68ccf8/blitsy-pick-wave.mp4\",\n    controls: true,\n    muted: true,\n    autoPlay: true,\n    loop: true\n  }), mdx(\"br\", null), mdx(\"br\", null));\n}\n;\nMDXContent.isMDXComponent = true;"}},"pageContext":{"slug":"/put-to-light/","previous":{"id":"e5215f13-dd0a-5d95-b2de-4ba79ce12851","fields":{"slug":"/solar-calculator/"},"frontmatter":{"title":"Solar Calculator"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Solar Calculator\",\n  \"date\": \"2017-06-30T00:00:00-0500\",\n  \"teaser\": \"Using a Raspberry Pi to let homeowners see exactly how much solar potential their house has.\",\n  \"featuredImage\": \"solar.jpg\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"The first thing we did when I was hired to start the creative technology practice at Fjord Chicago was sit down and establish a few goals. The foremost goal of the entire practice was to get ideas off of a screen and into the real world. When we got a request to revamp the solar installation experience for a major energy provider, we knew that it would be a great opportunity to blend physical and digital experiences to wow their customers.\"), mdx(\"p\", null, \"Our client was located in a state that people thought couldn\\u2019t generate enough solar power for it to be worth the effort, but the area actually had a lot of potential for photovoltaic generation. The bulk of the project involved mapping out the entire solar interconnect process and making recommendations about where they could improve their services to be more human-centered, but we also had the opportunity to do extensive research on how their current customers were thinking about solar. We found that customers were often using complicated solar calculators as their first touchpoint in their journey to solar installation, and the current experience left much to be desired.\"), mdx(\"div\", {\n    \"className\": \"image-container large-image\"\n  }, \"\\n  \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1000px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/6b43bcebe9ba2729b93b457079ffec5d/a2510/solar-2.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"70.66666666666667%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAOABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAQCAwX/xAAUAQEAAAAAAAAAAAAAAAAAAAAC/9oADAMBAAIQAxAAAAGaGuuFUNhX/8QAGhAAAwEAAwAAAAAAAAAAAAAAAQIDABITIv/aAAgBAQABBQKp65q5LcN5OMEWm//EABURAQEAAAAAAAAAAAAAAAAAABBB/9oACAEDAQE/Aaf/xAAWEQADAAAAAAAAAAAAAAAAAAABEDH/2gAIAQIBAT8BEX//xAAaEAABBQEAAAAAAAAAAAAAAAABAAIQESIh/9oACAEBAAY/As8QBjQsK2x//8QAGxAAAwACAwAAAAAAAAAAAAAAAAERIVExQWH/2gAIAQEAAT8hXFNFCcDrmh5kw+eOdIuE+mQ//9oADAMBAAIAAwAAABC8D//EABcRAAMBAAAAAAAAAAAAAAAAAAABESH/2gAIAQMBAT8QacQw/8QAFhEBAQEAAAAAAAAAAAAAAAAAAQAR/9oACAECAQE/EEC22//EABoQAQADAQEBAAAAAAAAAAAAAAEAESFBMfH/2gAIAQEAAT8QdgJmKpZQ/kl1XyaKuDA3R9mPe6z0smvZ/9k=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"The finished prototype\",\n    \"title\": \"The finished prototype\",\n    \"src\": \"/static/6b43bcebe9ba2729b93b457079ffec5d/a2510/solar-2.jpg\",\n    \"srcSet\": [\"/static/6b43bcebe9ba2729b93b457079ffec5d/f93b5/solar-2.jpg 300w\", \"/static/6b43bcebe9ba2729b93b457079ffec5d/b4294/solar-2.jpg 600w\", \"/static/6b43bcebe9ba2729b93b457079ffec5d/a2510/solar-2.jpg 1000w\"],\n    \"sizes\": \"(max-width: 1000px) 100vw, 1000px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n  \", mdx(\"a\", {\n    parentName: \"div\",\n    \"className\": \"image-caption\"\n  }, \"The finished prototype\")), mdx(\"p\", null, \"If you go to an online solar calculator right now, you\\u2019ll be asked for all sorts of information like your current monthly energy usage in kilowatt hours, the pitch of your roof, the average duration of sunlight on your property, and all sorts of other questions that the average consumer won\\u2019t readily know. In addition to that, calculations can vary wildly based on who is doing the math. We found that some very popular calculators were overly optimistic, while others tried to push the customer to purchase more equipment than they could actually use. With all of the data that this energy provider had about their customers, we knew that we had a chance to make this process a lot more user-friendly.\"), mdx(\"p\", null, \"We wanted our calculator to be a useful tool for getting accurate information about what a solar installation could do for a residential customer, but we also wanted to use it to get folks excited about the solar potential of their home. We came up with the idea of taking the calculator out of the digital space and into the physical world. What better way to excite people than to actually show them a panel at work?\"), mdx(\"p\", null, \"The prototype needed to be able to collect energy data from an actual panel, then feed that data back into a computer to analyze the data. The first step in that process was to actually get our hands on a few panels and see how they functioned.\"), mdx(\"div\", {\n    className: \"paragraph-with-picture\"\n  }, mdx(\"p\", null, \"We decided to go with an iPad-sized six watt panel from Voltaic. The panel was designed for rugged use, and came with a connector that we could easily modify to feed into our prototype. We learned our first lesson by testing how long the panel took to charge the USB battery pack that came with the panel. I was on my bike that day, so I decided to strap the unit to my backpack and see if we could charge the battery at all on my ride home.\"), mdx(\"div\", {\n    \"className\": \"image-container small-image\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"500px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/7d2e56d559627aa4343e81aebff17e8c/41099/solar-backpack-1.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"133.33333333333331%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAQCAwUG/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/9oADAMBAAIQAxAAAAF3GtUzehMMoSvgkgD/xAAeEAACAQQDAQAAAAAAAAAAAAABAgMABBEhEBIiMv/aAAgBAQABBQK5lUAPuLyk+TLna3DIs7djWKHyOP/EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQMBAT8BH//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQIBAT8BH//EAB4QAAEDBAMAAAAAAAAAAAAAAAEAAiEQESIxIGFx/9oACAEBAAY/ArDe1kI6WJdbxEuO6BrTCjl//8QAHBAAAgMAAwEAAAAAAAAAAAAAAAERITEQQYFx/9oACAEBAAE/IVtzvSDXovsMkqVtCEtBL8MZggLm6cKiNPTXnH//2gAMAwEAAgADAAAAEAzFz//EABcRAQEBAQAAAAAAAAAAAAAAAAEQESH/2gAIAQMBAT8Q1ORdn//EABgRAAMBAQAAAAAAAAAAAAAAAAABIRAR/9oACAECAQE/EI6US5n/xAAfEAEAAwACAgMBAAAAAAAAAAABABEhMVFBYXGhscH/2gAIAQEAAT8QQbZoRRvMC5SqmPtHl9ILY75iSVXLoK+fX7Dqujmg61ldE4Lxe0eoVZxSpzLXtYAC3RBd/j+JjPSWz//Z')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"The Voltaic strapped to my bag\",\n    \"title\": \"The Voltaic strapped to my bag\",\n    \"src\": \"/static/7d2e56d559627aa4343e81aebff17e8c/41099/solar-backpack-1.jpg\",\n    \"srcSet\": [\"/static/7d2e56d559627aa4343e81aebff17e8c/f93b5/solar-backpack-1.jpg 300w\", \"/static/7d2e56d559627aa4343e81aebff17e8c/41099/solar-backpack-1.jpg 500w\"],\n    \"sizes\": \"(max-width: 500px) 100vw, 500px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n    \", mdx(\"a\", {\n    parentName: \"div\",\n    \"className\": \"image-caption\"\n  }, \"The Voltaic strapped to my bag\"), \"\\n  \")), mdx(\"div\", {\n    className: \"paragraph-with-picture\"\n  }, mdx(\"p\", null, \"I got home and saw zero charge. I left the panel out in the backyard for two more hours, but still barely got any charge on the battery. The key lesson there was that solar can be extremely slow. We would need to visualize the data in real-time in order to keep a customer engaged.\"), mdx(\"div\", {\n    \"className\": \"image-container small-image\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1000px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/c3463889d1484f8180554ef63d705f69/a2510/voltaic-test.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"75%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAMEAv/EABcBAAMBAAAAAAAAAAAAAAAAAAABAgP/2gAMAwEAAhADEAAAAYWbqzqYaD//xAAbEAACAgMBAAAAAAAAAAAAAAABAgADERIhIv/aAAgBAQABBQJnyU9Q1iJVxVUBhrP/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAWEQADAAAAAAAAAAAAAAAAAAABEBH/2gAIAQIBAT8BoX//xAAaEAACAgMAAAAAAAAAAAAAAAAAIQExAhEi/9oACAEBAAY/AljoYpOmSrLP/8QAGxABAAMAAwEAAAAAAAAAAAAAAQARITFRYUH/2gAIAQEAAT8hLBtzGXzj1EPATArwdQVQ/HkuGNLn/9oADAMBAAIAAwAAABC8H//EABYRAQEBAAAAAAAAAAAAAAAAAAERAP/aAAgBAwEBPxAG3Q3/xAAWEQEBAQAAAAAAAAAAAAAAAAABABH/2gAIAQIBAT8QcMhb/8QAHRABAQACAQUAAAAAAAAAAAAAAREAITFBUWFx4f/aAAgBAQABPxCRIKiuvEwiKS0aTqZUp2g+4PJwSunvLHwLCceMUUCS2zP/2Q==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Testing the panel from Voltaic\",\n    \"title\": \"Testing the panel from Voltaic\",\n    \"src\": \"/static/c3463889d1484f8180554ef63d705f69/a2510/voltaic-test.jpg\",\n    \"srcSet\": [\"/static/c3463889d1484f8180554ef63d705f69/f93b5/voltaic-test.jpg 300w\", \"/static/c3463889d1484f8180554ef63d705f69/b4294/voltaic-test.jpg 600w\", \"/static/c3463889d1484f8180554ef63d705f69/a2510/voltaic-test.jpg 1000w\"],\n    \"sizes\": \"(max-width: 1000px) 100vw, 1000px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n    \", mdx(\"a\", {\n    parentName: \"div\",\n    \"className\": \"image-caption\"\n  }, \"Testing the panel from Voltaic\"), \"\\n  \")), mdx(\"p\", null, \"I decided to use a Raspberry Pi as the brain for the unit due to its size, cost, and availability. The cable that ran from the solar panel was converted to discharge into a voltage sensor, which was then sent to a database on the Pi. That voltage data was great to see coming through, but we were still missing a part of the puzzle\\u2013we needed to know what the sun was doing while we were getting those particular voltage readings. To account for that, I added a TSL2591 luminosity sensor to the project. This sensor lets us measure the amount of visible and infrared light, which helps us get a feel for the external conditions that the prototype was being tested in. After a rough assembly of all of these parts, I went out on a nice summer day to field test the components.\"), mdx(\"div\", {\n    \"className\": \"image-container large-image\"\n  }, \"\\n  \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1000px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/20568ea1b9fbe8d9bb471c7ce2473ab3/a2510/field-testing-1.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"75%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIDBP/EABUBAQEAAAAAAAAAAAAAAAAAAAID/9oADAMBAAIQAxAAAAGTreVImwK//8QAGRAAAgMBAAAAAAAAAAAAAAAAAQIAAxET/9oACAEBAAEFAg4wMHblKa8grVWyf//EABURAQEAAAAAAAAAAAAAAAAAAAAS/9oACAEDAQE/AYS//8QAFREBAQAAAAAAAAAAAAAAAAAAABL/2gAIAQIBAT8BtT//xAAcEAABAwUAAAAAAAAAAAAAAAAAAhEhARAxQZH/2gAIAQEABj8ClPRlUkwOPu3/xAAbEAACAwEBAQAAAAAAAAAAAAABEQAhMYFBsf/aAAgBAQABPyFTYTYX5NquLyEng9gAF2bTyJEHqFjP/9oADAMBAAIAAwAAABB/3//EABYRAQEBAAAAAAAAAAAAAAAAAAABEf/aAAgBAwEBPxCUy//EABYRAQEBAAAAAAAAAAAAAAAAAAEAEf/aAAgBAgEBPxBA5bv/xAAeEAACAwABBQAAAAAAAAAAAAABEQAhQTFRYXGxwf/aAAgBAQABPxA+x1IntMhoCKEgoB7PENYta4+RngAUNbhPYNDC5wT18wBG6W9p/9k=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Field testing the sensors\",\n    \"title\": \"Field testing the sensors\",\n    \"src\": \"/static/20568ea1b9fbe8d9bb471c7ce2473ab3/a2510/field-testing-1.jpg\",\n    \"srcSet\": [\"/static/20568ea1b9fbe8d9bb471c7ce2473ab3/f93b5/field-testing-1.jpg 300w\", \"/static/20568ea1b9fbe8d9bb471c7ce2473ab3/b4294/field-testing-1.jpg 600w\", \"/static/20568ea1b9fbe8d9bb471c7ce2473ab3/a2510/field-testing-1.jpg 1000w\"],\n    \"sizes\": \"(max-width: 1000px) 100vw, 1000px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n  \", mdx(\"a\", {\n    parentName: \"div\",\n    \"className\": \"image-caption\"\n  }, \"Field testing the sensors\")), mdx(\"p\", null, \"The field test went well, and I was able to verify that the voltage being sent to the database was accurate with a multimeter. The next step in our process was to start collecting enough data to explore. I took the prototype home and set it outside for two days to start collecting data. The first day I leaned the panel up against a window on the front of my house, which allowed it to get a good stretch of direct sunlight. When noon hit, I realized that I would need to move the unit to simulate a roof-based panel since the sun was now moving over the house. It wasn\\u2019t an ideal testing environment, but I went ahead and moved the panel to the backyard for the afternoon.\"), mdx(\"div\", {\n    \"className\": \"image-container large-image\"\n  }, \"\\n  \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1000px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/c41c580c0fce2b453752b943d0e80308/a2510/house-test-1.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"75%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIDAQT/xAAWAQEBAQAAAAAAAAAAAAAAAAACAAH/2gAMAwEAAhADEAAAAU2NcSHMR//EABoQAQEAAwEBAAAAAAAAAAAAAAECABESAxP/2gAIAQEAAQUCmugNVrPK+M+qlND/AP/EABURAQEAAAAAAAAAAAAAAAAAABAR/9oACAEDAQE/Aaf/xAAVEQEBAAAAAAAAAAAAAAAAAAAAEf/aAAgBAgEBPwFX/8QAGhAAAgIDAAAAAAAAAAAAAAAAABEBIQIQQf/aAAgBAQAGPwJjnJ6RMl9s/8QAGRABAAMBAQAAAAAAAAAAAAAAAQARITFR/9oACAEBAAE/Ib59WXGjM9RjgqOvZT1FPk0S2H//2gAMAwEAAgADAAAAEPPf/8QAFhEBAQEAAAAAAAAAAAAAAAAAAREA/9oACAEDAQE/EJEuu//EABURAQEAAAAAAAAAAAAAAAAAAAAR/9oACAECAQE/EKp//8QAHxABAQACAQQDAAAAAAAAAAAAAREAMSFBUWFxkcHh/9oACAEBAAE/EHRWtX0YlVdaInzltFrbX7zcPyHYF3LlQiegO+JPG8vBLyHu/mf/2Q==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Testing the unit on the front of my house\",\n    \"title\": \"Testing the unit on the front of my house\",\n    \"src\": \"/static/c41c580c0fce2b453752b943d0e80308/a2510/house-test-1.jpg\",\n    \"srcSet\": [\"/static/c41c580c0fce2b453752b943d0e80308/f93b5/house-test-1.jpg 300w\", \"/static/c41c580c0fce2b453752b943d0e80308/b4294/house-test-1.jpg 600w\", \"/static/c41c580c0fce2b453752b943d0e80308/a2510/house-test-1.jpg 1000w\"],\n    \"sizes\": \"(max-width: 1000px) 100vw, 1000px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n  \", mdx(\"a\", {\n    parentName: \"div\",\n    \"className\": \"image-caption\"\n  }, \"Testing the unit on the front of my house\")), mdx(\"p\", null, \"The second day of testing was a little more complicated, but it helped us prove a valuable data point. We had a nice sunny morning that quickly turned into an overcast drizzly day. I was a little bummed as I didn\\u2019t think we would get good readings, but the data proved me wrong. It doesn\\u2019t matter to the panel if it\\u2019s actually clear and sunny outside\\u2013it\\u2019s looking for infrared light, and there\\u2019s still plenty of that on a cloudy day. We were able to show that the panel continued production throughout the rain, which helped us push the point about solar viability in the state that the power company was located in.\"), mdx(\"div\", {\n    \"className\": \"image-container large-image\"\n  }, \"\\n  \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1000px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/2eda81af1755fd724fa318a0f79ebff3/a2510/house-test-2.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"55.99999999999999%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIDBP/EABUBAQEAAAAAAAAAAAAAAAAAAAEC/9oADAMBAAIQAxAAAAF5UWXGKSf/xAAaEAACAwEBAAAAAAAAAAAAAAACAwABIhES/9oACAEBAAEFAliPhw1U7F3huhn/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAZEAACAwEAAAAAAAAAAAAAAAAAAQIQIRH/2gAIAQEABj8CjmsVRF2v/8QAHhAAAgEDBQAAAAAAAAAAAAAAAAERITGBUWFxscH/2gAIAQEAAT8hYc5XHG5NohEOcjMC7NU18LWP/9oADAMBAAIAAwAAABAAH//EABcRAAMBAAAAAAAAAAAAAAAAAAABESH/2gAIAQMBAT8QS0p//8QAFhEBAQEAAAAAAAAAAAAAAAAAABFB/9oACAECAQE/EMR//8QAGxABAAIDAQEAAAAAAAAAAAAAAQARITFBYaH/2gAIAQEAAT8QEqS8hcgibhhK4o7+wfKPopACODnLePG4GyUAeE//2Q==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Testing the unit in the drizzle\",\n    \"title\": \"Testing the unit in the drizzle\",\n    \"src\": \"/static/2eda81af1755fd724fa318a0f79ebff3/a2510/house-test-2.jpg\",\n    \"srcSet\": [\"/static/2eda81af1755fd724fa318a0f79ebff3/f93b5/house-test-2.jpg 300w\", \"/static/2eda81af1755fd724fa318a0f79ebff3/b4294/house-test-2.jpg 600w\", \"/static/2eda81af1755fd724fa318a0f79ebff3/a2510/house-test-2.jpg 1000w\"],\n    \"sizes\": \"(max-width: 1000px) 100vw, 1000px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n  \", mdx(\"a\", {\n    parentName: \"div\",\n    \"className\": \"image-caption\"\n  }, \"Testing the unit in the drizzle\")), mdx(\"p\", null, \"Now that we had data, we could start designing the interface that the customer would use to see their data. We knew that the productized unit wouldn\\u2019t ship with a display on it, but I went ahead and added a Raspberry Pi touchscreen for the sake of the demo. This screen needed to show how the panel was performing, what our luminosity readings were, and how all of that stacked up against the customer\\u2019s usage data.\"), mdx(\"div\", {\n    className: \"paragraph-with-picture\"\n  }, mdx(\"p\", null, \"The first version of the data dashboard was the bare minimum to make sure that we were getting our readings in. None of the data was normalized, the timestamps were still unformatted, and we didn't have usage data yet.\"), mdx(\"div\", {\n    \"className\": \"image-container small-image\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1000px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/5c380da6ff90df978a61cc1fa4ed09cd/a2510/dash-1.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"56.333333333333336%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAMCBAX/xAAVAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAABuySuXGECf//EAB4QAAAEBwAAAAAAAAAAAAAAAAABAwQCERITISMy/9oACAEBAAEFAm87KnOQ3PStEdBD/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAHBAAAQMFAAAAAAAAAAAAAAAAAAECERAyUXGh/9oACAEBAAY/AmwLOC/o0dqn/8QAHhABAAEDBQEAAAAAAAAAAAAAAQAhMUERUWFxobH/2gAIAQEAAT8hdME57mGCqC7e0Q0Hf7Lwylk//9oADAMBAAIAAwAAABAL3//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABYRAQEBAAAAAAAAAAAAAAAAABEQIf/aAAgBAgEBPxBcn//EABsQAQACAwEBAAAAAAAAAAAAAAEAESExUXHR/9oACAEBAAE/EKHVG30jc9CFaMblg4bgEIH0h+sNHIkXs//Z')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"The rough draft of the dashboard\",\n    \"title\": \"The rough draft of the dashboard\",\n    \"src\": \"/static/5c380da6ff90df978a61cc1fa4ed09cd/a2510/dash-1.jpg\",\n    \"srcSet\": [\"/static/5c380da6ff90df978a61cc1fa4ed09cd/f93b5/dash-1.jpg 300w\", \"/static/5c380da6ff90df978a61cc1fa4ed09cd/b4294/dash-1.jpg 600w\", \"/static/5c380da6ff90df978a61cc1fa4ed09cd/a2510/dash-1.jpg 1000w\"],\n    \"sizes\": \"(max-width: 1000px) 100vw, 1000px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n    \", mdx(\"a\", {\n    parentName: \"div\",\n    \"className\": \"image-caption\"\n  }, \"The rough draft of the dashboard\"), \"\\n  \")), mdx(\"p\", null, \"The full dashboard evolved into something much easier to interact with. The first screen shows the averaged voltage every minute in orange, and the total power generated in red. The second screen shows our luminosity readings from the day\\u2013this particular screen is showing the rainy day readings. If you cross reference the luminosity readings with the power readings, you\\u2019ll see that our power didn\\u2019t dip when we bumped into cloudy conditions.\"), mdx(\"p\", null, \"The last screen shows what happens when we take that generation data and extrapolate it out to a full installation size. I figured out how many of our test panels that we could fit on my roof, then multiplied our power generation numbers to reflect that. In addition to that upsizing, I ran a model that calculated how the performance of the panel would change based on average sunlight duration throughout the rest of the year. That data was then graphed against a real customer\\u2019s monthly usage data that we were getting from the power company\\u2019s API. The solar prediction is shown in orange, and the monthly usage is shown in red.\"), mdx(\"p\", null, \"Lastly, you\\u2019ll notice that we added some explainers on the bottom of the screen to help people contextualize this information. The majority of the calculators we researched spit out info in terms that the average customer wouldn\\u2019t be familiar with or care about, so we wanted to make sure to make our information relatable.\"), mdx(\"div\", {\n    \"className\": \"image-container large-image\"\n  }, \"\\n  \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1000px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/0079fc525ecac2f3f34bb80be2b76760/a2510/energy-screenshot.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"57.00000000000001%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAQBAgMF/8QAFAEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAAB6q70DU0E/8QAFhABAQEAAAAAAAAAAAAAAAAAAhAB/9oACAEBAAEFAkDCAsv/xAAVEQEBAAAAAAAAAAAAAAAAAAAQEf/aAAgBAwEBPwGn/8QAFREBAQAAAAAAAAAAAAAAAAAAEBH/2gAIAQIBAT8Bh//EABwQAAEDBQAAAAAAAAAAAAAAAAIAAZERICEzkv/aAAgBAQAGPwLADC1jyquDRZ//xAAdEAACAQQDAAAAAAAAAAAAAAAAAREhMVFhcYHw/9oACAEBAAE/IUHV9BrHvwIMnstEIVj/2gAMAwEAAgADAAAAEDcP/8QAFxEBAAMAAAAAAAAAAAAAAAAAARARQf/aAAgBAwEBPxArhH//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/EB//xAAcEAEBAQACAwEAAAAAAAAAAAABEQAhMUFhcdH/2gAIAQEAAT8QcyAsfyypSHus4LFGB19OsCr5zJJuMHW//9k=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Energy generation screen\",\n    \"title\": \"Energy generation screen\",\n    \"src\": \"/static/0079fc525ecac2f3f34bb80be2b76760/a2510/energy-screenshot.jpg\",\n    \"srcSet\": [\"/static/0079fc525ecac2f3f34bb80be2b76760/f93b5/energy-screenshot.jpg 300w\", \"/static/0079fc525ecac2f3f34bb80be2b76760/b4294/energy-screenshot.jpg 600w\", \"/static/0079fc525ecac2f3f34bb80be2b76760/a2510/energy-screenshot.jpg 1000w\"],\n    \"sizes\": \"(max-width: 1000px) 100vw, 1000px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n  \", mdx(\"a\", {\n    parentName: \"div\",\n    \"className\": \"image-caption\"\n  }, \"Energy generation screen\")), mdx(\"br\", null), mdx(\"div\", {\n    \"className\": \"image-container large-image\"\n  }, \"\\n  \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1000px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/ba643779a68683be9a03832ec428c60c/a2510/luminosity-screenshot.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"57.00000000000001%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAECBAX/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAAB6s6FCLK//8QAGRABAAIDAAAAAAAAAAAAAAAAAgERABIg/9oACAEBAAEFAqG1GMgBcf/EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EAB4QAAAEBwAAAAAAAAAAAAAAAAABAhESEyAzYZGi/9oACAEBAAY/Amlci2lsEHgLVH//xAAbEAEBAAEFAAAAAAAAAAAAAAABABEhMWFxof/aAAgBAQABPyFHRPMWZW7MF66lgja//9oADAMBAAIAAwAAABA8D//EABYRAQEBAAAAAAAAAAAAAAAAAAEQYf/aAAgBAwEBPxAcn//EABURAQEAAAAAAAAAAAAAAAAAABAR/9oACAECAQE/EIf/xAAcEAEAAwADAQEAAAAAAAAAAAABABEhMUFRcbH/2gAIAQEAAT8QzBXWFfnEWKjRQue88gVeGQ59ICr3GpKmaHE//9k=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Luminosity measurement screen\",\n    \"title\": \"Luminosity measurement screen\",\n    \"src\": \"/static/ba643779a68683be9a03832ec428c60c/a2510/luminosity-screenshot.jpg\",\n    \"srcSet\": [\"/static/ba643779a68683be9a03832ec428c60c/f93b5/luminosity-screenshot.jpg 300w\", \"/static/ba643779a68683be9a03832ec428c60c/b4294/luminosity-screenshot.jpg 600w\", \"/static/ba643779a68683be9a03832ec428c60c/a2510/luminosity-screenshot.jpg 1000w\"],\n    \"sizes\": \"(max-width: 1000px) 100vw, 1000px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n  \", mdx(\"a\", {\n    parentName: \"div\",\n    \"className\": \"image-caption\"\n  }, \"Luminosity measurement screen\")), mdx(\"br\", null), mdx(\"div\", {\n    \"className\": \"image-container large-image\"\n  }, \"\\n  \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1000px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/9ba81fcf8abfc17376a0c15235242fd3/a2510/usage-screenshot.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"57.00000000000001%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAECBAX/xAAUAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAHSVpCEhP/EABgQAQEBAQEAAAAAAAAAAAAAAAECABIg/9oACAEBAAEFArJwDuIfH//EABURAQEAAAAAAAAAAAAAAAAAABAR/9oACAEDAQE/Aaf/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAdEAAABQUAAAAAAAAAAAAAAAAAAQIDkREgMjOS/9oACAEBAAY/AqE2XI1pgYJiz//EABoQAQEAAgMAAAAAAAAAAAAAAAEAETFRcZH/2gAIAQEAAT8hEvaQ7i3nGDC+CSwRq//aAAwDAQACAAMAAAAQeA//xAAWEQEBAQAAAAAAAAAAAAAAAAAREDH/2gAIAQMBAT8QwE//xAAVEQEBAAAAAAAAAAAAAAAAAAAQEf/aAAgBAgEBPxCH/8QAHBABAAMAAgMAAAAAAAAAAAAAAQARITFBkaHB/9oACAEBAAE/ELCszl8ZAgHTW71ERWg1vkBV7jUlTNCf/9k=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Usage and solar potential screen\",\n    \"title\": \"Usage and solar potential screen\",\n    \"src\": \"/static/9ba81fcf8abfc17376a0c15235242fd3/a2510/usage-screenshot.jpg\",\n    \"srcSet\": [\"/static/9ba81fcf8abfc17376a0c15235242fd3/f93b5/usage-screenshot.jpg 300w\", \"/static/9ba81fcf8abfc17376a0c15235242fd3/b4294/usage-screenshot.jpg 600w\", \"/static/9ba81fcf8abfc17376a0c15235242fd3/a2510/usage-screenshot.jpg 1000w\"],\n    \"sizes\": \"(max-width: 1000px) 100vw, 1000px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n  \", mdx(\"a\", {\n    parentName: \"div\",\n    \"className\": \"image-caption\"\n  }, \"Usage and solar potential screen\")), mdx(\"br\", null), mdx(\"p\", null, \"The client absolutely loved the finished product, and it\\u2019s been one of our most active showcase pieces at the Chicago studio. The upper leadership connected with the product because it was something tangible that they could walk around and show people, and it clearly communicated some key findings from our research. That excitement is what keeps me excited about the work as we continue to see how we can get digital tools off of a screen and into the real world.\"), mdx(\"div\", {\n    \"className\": \"image-container large-image\"\n  }, \"\\n  \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1000px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/2c1ad5b7ab41b2020f859483aa5efc9f/a2510/solar-3.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"66.66666666666666%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIFAwT/xAAVAQEBAAAAAAAAAAAAAAAAAAACAf/aAAwDAQACEAMQAAABxZeguSUw3//EABwQAAEDBQAAAAAAAAAAAAAAAAIAASEDEBESE//aAAgBAQABBQIYKqAsPO20YX//xAAVEQEBAAAAAAAAAAAAAAAAAAAAEv/aAAgBAwEBPwGUv//EABYRAQEBAAAAAAAAAAAAAAAAAAABEv/aAAgBAgEBPwG1p//EABwQAAEDBQAAAAAAAAAAAAAAAAECEBEAEiExcf/aAAgBAQAGPwJNx3jlGFAl4gBv/8QAGhABAAMBAQEAAAAAAAAAAAAAAQARITFBYf/aAAgBAQABPyG1ML68hytpx2KXkS8iMvsJSf/aAAwDAQACAAMAAAAQZA//xAAXEQEAAwAAAAAAAAAAAAAAAAAAESFB/9oACAEDAQE/ELag/8QAFxEBAQEBAAAAAAAAAAAAAAAAAQARMf/aAAgBAgEBPxAh5bv/xAAYEAEBAQEBAAAAAAAAAAAAAAABESEAUf/aAAgBAQABPxDOMITj66dSPoDVWOC8gVKt4CoMwpZznnARi8QM7//Z')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"The finished prototype\",\n    \"title\": \"The finished prototype\",\n    \"src\": \"/static/2c1ad5b7ab41b2020f859483aa5efc9f/a2510/solar-3.jpg\",\n    \"srcSet\": [\"/static/2c1ad5b7ab41b2020f859483aa5efc9f/f93b5/solar-3.jpg 300w\", \"/static/2c1ad5b7ab41b2020f859483aa5efc9f/b4294/solar-3.jpg 600w\", \"/static/2c1ad5b7ab41b2020f859483aa5efc9f/a2510/solar-3.jpg 1000w\"],\n    \"sizes\": \"(max-width: 1000px) 100vw, 1000px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n  \", mdx(\"a\", {\n    parentName: \"div\",\n    \"className\": \"image-caption\"\n  }, \"The finished prototype\")), mdx(\"br\", null));\n}\n;\nMDXContent.isMDXComponent = true;"},"next":{"id":"8ee157c3-0ef9-5ea4-9ccd-3533004a2b1c","fields":{"slug":"/sojourn-fare/"},"frontmatter":{"title":"Sojourn Fare"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Sojourn Fare\",\n  \"date\": \"2018-09-02T00:00:00-0500\",\n  \"teaser\": \"Growing gourmet mushrooms can be hard, but it gets easier when you have a data-heavy AgTech startup doing it for you.\",\n  \"featuredImage\": \"sojourn.jpg\",\n  \"externalLink\": \"http://sojournfare.com\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Sojourn Fare was an AgTech startup that I co-founded in 2016. The company produced IoT environmental control units that helped make mushroom cultivation approachable and reliable. While growing most mushrooms isn\\u2019t very hard on its own, there are lots of things that can go wrong during the growth cycle that will completely ruin a crop. Those bumps in the road are why Roman Titus, my co-founder, came to seek out my help. Roman had a batch of Pleurotus ostreatus, more commonly known as oyster mushrooms, growing in his apartment. He lost an entire container of oysters to trichoderma mold after leaving on some last-minute travel for a few days, and had a hunch that technology may be able to help prevent that from happening again. We set out to create a more user-friendly system that did a lot of the hard work of mushroom cultivation for you.\"), mdx(\"div\", {\n    \"className\": \"image-container large-image\"\n  }, \"\\n  \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1080px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/26c92316fc042649d76b0cbcfe9b1cc0/47311/sojourn-2.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"47.66666666666667%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAKABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAQBAwX/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAABbvyWEZJD/8QAGxABAAICAwAAAAAAAAAAAAAAAQISAAMEITH/2gAIAQEAAQUCK4nbtiPGWslrt9//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAeEAABAwQDAAAAAAAAAAAAAAAAAQIRAxIxcUJhkv/aAAgBAQAGPwKxG+Tj0Q5ySZKmhNH/xAAcEAEBAQADAAMAAAAAAAAAAAABEQAhMUFhgZH/2gAIAQEAAT8hVVI99j7zopXmbijfiY0iOX3IorBP3DT/2gAMAwEAAgADAAAAEMQf/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFREBAQAAAAAAAAAAAAAAAAAAARD/2gAIAQIBAT8QZ//EAB8QAQEAAQIHAAAAAAAAAAAAAAERACExUWFxgZGh0f/aAAgBAQABPxAKkux5Bp2uDIyy3aa35jLZxBTyi+8PDlEEXFRxqWx4MJVBU6vVz//Z')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Pleurotus ostreatus growing in one of the first prototype units\",\n    \"title\": \"Pleurotus ostreatus growing in one of the first prototype units\",\n    \"src\": \"/static/26c92316fc042649d76b0cbcfe9b1cc0/47311/sojourn-2.jpg\",\n    \"srcSet\": [\"/static/26c92316fc042649d76b0cbcfe9b1cc0/f93b5/sojourn-2.jpg 300w\", \"/static/26c92316fc042649d76b0cbcfe9b1cc0/b4294/sojourn-2.jpg 600w\", \"/static/26c92316fc042649d76b0cbcfe9b1cc0/47311/sojourn-2.jpg 1080w\"],\n    \"sizes\": \"(max-width: 1080px) 100vw, 1080px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n  \", mdx(\"a\", {\n    parentName: \"div\",\n    \"className\": \"image-caption\"\n  }, \"Pleurotus ostreatus growing in one of the first prototype units\")), mdx(\"p\", null, \"Our initial prototypes consisted of an Arduino-controlled timing system that ran a roughly scheduled series of environmental modifiers to maintain the right conditions for mushroom growth. This was a good start, and it did meet the requirements of keeping the crop alive without having someone tending to it every day, but there was a lot of room for improvement. Roman had a lot of ideas about the physical design of the unit, and I had a lot that I wanted to do with the software and hardware side, so we both set off to make a more complete prototype.\"), mdx(\"div\", {\n    className: \"paragraph-with-picture\"\n  }, mdx(\"p\", null, \"We had been relying on an Arduino Mega to run the environmental modifiers, which included heaters, fans, lights, and humidifiers. That would have been fine If we wanted to keep running everything on a basic schedule, but I knew that we could incorporate sensors into the mix to have more relevant data to work with. Keeping things on a schedule was just replicating the traditional methods of mushroom farming\\u2013we could make it better! Another big blind spot was being able to see what the unit was actually doing. We had a lot of data being printed out via the serial port on the Arduino telling us what was on or off, but there wasn\\u2019t a good way to see the readings, and we definitely weren\\u2019t storing the data for long-term analytics. I decided to scrap the old code and move everything over to a Raspberry Pi, which had been around for four years at that point, but was really starting to pick up steam in 2016.\"), mdx(\"div\", {\n    \"className\": \"image-container small-image\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1200px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/59b118b39f74bdf1523652258dd544d0/533dc/sojourn-original.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"100%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAQCAQP/xAAWAQEBAQAAAAAAAAAAAAAAAAABAAL/2gAMAwEAAhADEAAAAat49EhUGg4ZQb//xAAZEAEBAQEBAQAAAAAAAAAAAAABAgARAyH/2gAIAQEAAQUC8pMzLqnjNm6b441Li03/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/AR//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/AR//xAAcEAACAAcAAAAAAAAAAAAAAAAAEQEQICExQVH/2gAIAQEABj8CxEW+OSHZjo//xAAbEAEAAwEAAwAAAAAAAAAAAAABABEhMUFxgf/aAAgBAQABPyFZTcBrx9RZLktEXpBu+Td8Slj9EeQWXkOocn//2gAMAwEAAgADAAAAEH//ALz/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/EB//xAAVEQEBAAAAAAAAAAAAAAAAAAARIP/aAAgBAgEBPxBj/8QAGhABAAMBAQEAAAAAAAAAAAAAAQARITFBYf/aAAgBAQABPxBqggn0PrzjC9UtADxR8gi7URCKIaLB2jxZdoiauO624cBi8lHwOFT/2Q==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"One of the first iterations of the grow chamber\",\n    \"title\": \"One of the first iterations of the grow chamber\",\n    \"src\": \"/static/59b118b39f74bdf1523652258dd544d0/e5166/sojourn-original.jpg\",\n    \"srcSet\": [\"/static/59b118b39f74bdf1523652258dd544d0/f93b5/sojourn-original.jpg 300w\", \"/static/59b118b39f74bdf1523652258dd544d0/b4294/sojourn-original.jpg 600w\", \"/static/59b118b39f74bdf1523652258dd544d0/e5166/sojourn-original.jpg 1200w\", \"/static/59b118b39f74bdf1523652258dd544d0/d9c39/sojourn-original.jpg 1800w\", \"/static/59b118b39f74bdf1523652258dd544d0/df51d/sojourn-original.jpg 2400w\", \"/static/59b118b39f74bdf1523652258dd544d0/533dc/sojourn-original.jpg 4911w\"],\n    \"sizes\": \"(max-width: 1200px) 100vw, 1200px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n    \", mdx(\"a\", {\n    parentName: \"div\",\n    \"className\": \"image-caption\"\n  }, \"One of the first iterations of the grow chamber\"), \"\\n  \")), mdx(\"p\", null, \"The use of the Pi opened up a lot of doors for us. Now we didn\\u2019t just have something that could turn the modifiers on or off\\u2013we had a whole server that we could run on the unit. After replicating the basic functionality of the timers that we had running with the Arduino, I moved on to integrating sensors into the system. I built an application that ran on Node, Express, and Mongo, and was able to respond in real-time to sensors that measured the carbon dioxide, relative humidity, and temperature inside the unit. I had also been hearing a lot of people praise a new JavaScript framework called React over the previous months\\u2013I had done a little work with Angular before the notorious 2.0 split, so I wanted to try out React while everything settled down in the Angular community. I decided to use that to build a super simple front-end that would show the current readings for the unit, and we never turned back from using React. It gave us the same flexibility in componentization that we had on the physical side of the unit, and ended up being perfect for us.\"), mdx(\"div\", {\n    className: \"paragraph-with-picture\"\n  }, mdx(\"p\", null, \"That initial unit worked well enough for us to regularly produce decent yields of oyster mushrooms with very few issues. We were harvesting a little under a pound a week per substrate block, which was acceptable. At this point we were targeting two main groups\\u2013restaurants interested in hyperlocal produce, and mushroom enthusiasts looking to grow their own at home. We started building this unit at a local makerspace, and were connected to Google Chicago\\u2019s head chef through a mutual friend. They loved the idea of growing food on-site, and encouraged us to build a unit for their cafeteria. Roman facilitated the grow, and we ended up being able to deliver a few pounds of fresh mushrooms to the Google chefs every week.\"), mdx(\"div\", {\n    \"className\": \"image-container small-image\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1080px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/9bcd9e0aa6489538c1424cf4e094341d/47311/sojourn-prototype.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"100%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAQDAgX/xAAVAQEBAAAAAAAAAAAAAAAAAAACAf/aAAwDAQACEAMQAAAB8rTXYKFwsqmCpgx//8QAGRABAAMBAQAAAAAAAAAAAAAAAQACEQMQ/9oACAEBAAEFAhgDLZvPC3R5lWwy1ma+f//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQMBAT8BH//EABURAQEAAAAAAAAAAAAAAAAAABAB/9oACAECAQE/ASH/xAAbEAACAgMBAAAAAAAAAAAAAAAAAREiAiAhQf/aAAgBAQAGPwLg5Z6WwgoidP/EAB4QAQACAQQDAAAAAAAAAAAAAAEAESExQVFhEHGB/9oACAEBAAE/IT5X3LlQ1Z28Rmq/EKqw76xI5PUVsGZiRqc67eP/2gAMAwEAAgADAAAAEJvXP//EABgRAAIDAAAAAAAAAAAAAAAAAAABEBEx/9oACAEDAQE/ELeDHH//xAAYEQACAwAAAAAAAAAAAAAAAAABEQAQMf/aAAgBAgEBPxBBMQZb/8QAHhAAAgICAgMAAAAAAAAAAAAAAREAITFBUZGh0eH/2gAIAQEAAT8QFsBxOilQUQE7vrqLQEAYBeYXAMwlcUu+4MhuhbLzwtQxJnkD7iBMVMxICOGJoT//2Q==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"The prototype unit at Google\",\n    \"title\": \"The prototype unit at Google\",\n    \"src\": \"/static/9bcd9e0aa6489538c1424cf4e094341d/47311/sojourn-prototype.jpg\",\n    \"srcSet\": [\"/static/9bcd9e0aa6489538c1424cf4e094341d/f93b5/sojourn-prototype.jpg 300w\", \"/static/9bcd9e0aa6489538c1424cf4e094341d/b4294/sojourn-prototype.jpg 600w\", \"/static/9bcd9e0aa6489538c1424cf4e094341d/47311/sojourn-prototype.jpg 1080w\"],\n    \"sizes\": \"(max-width: 1080px) 100vw, 1080px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n    \", mdx(\"a\", {\n    parentName: \"div\",\n    \"className\": \"image-caption\"\n  }, \"The prototype unit at Google\"), \"\\n  \")), mdx(\"p\", null, \"We had a little bit of momentum from the Google project, and we had a lot of chefs and restaurants saying that they were interested in the product. One of our contacts at Google mentioned that they had a large refrigerator that they would be willing to donate to us, which we happily took. The size constraints of the first unit limited us to two substrate blocks per growth cycle, which was not enough to justify purchasing the unit for most restaurants. We retrofitted the refrigerator to be able to maintain the environment just like the smaller units, but now we had the potential to produce almost 200 pounds of mushrooms per week. This got us excited about the potential for other businesses like farms to be able to add mushroom production to the services and goods that they offered.\"), mdx(\"p\", null, \"While working with Google was a great clout builder and an extremely fun experience, we quickly realized that the restaurant-focused mushroom business wasn\\u2019t going to do us any favors. Smallhold, our major competitor, was already doing an excellent job producing bespoke mushroom-growing chambers for small restaurants in Brooklyn. It was incredibly fun to work on those one-off projects, but they weren\\u2019t paying the bills, and Roman and I were still trying to bootstrap the startup. At this point, Roman and I decided to split our focus on what we thought would be the most likely to have some success\\u2013he focused on making a consumer version of the kit that could fit on a kitchen counter, and I focused on building something that could be used in classrooms.\"), mdx(\"p\", null, \"Roman\\u2019s consumer-focused venture had a decent strategy that seemed worth pursuing. Consumer\\u2019s attitudes around mushrooms were evolving. There was a massive opportunity in the medicinal market for mushrooms like reishis or lion\\u2019s manes, and foodies were quickly realizing that there were other kinds of mushrooms besides the white button style that were ubiquitously available. He took the same technology setup that I used for the rest of the products and built a beautiful iteration called the Model A.\"), mdx(\"div\", {\n    \"className\": \"image-container large-image\"\n  }, \"\\n  \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"786px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/79ffff620d4594c6cbdd988e0d7ec1e3/28be2/sojourn-model-a.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"61.33333333333334%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAMABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAMEBf/EABUBAQEAAAAAAAAAAAAAAAAAAAEC/9oADAMBAAIQAxAAAAGlmc+bpIxP/8QAGRAAAwEBAQAAAAAAAAAAAAAAAAECEhAR/9oACAEBAAEFAtSJ+Sqknm2f/8QAFREBAQAAAAAAAAAAAAAAAAAAABH/2gAIAQMBAT8BiP/EABURAQEAAAAAAAAAAAAAAAAAAAAR/9oACAECAQE/Aar/xAAZEAACAwEAAAAAAAAAAAAAAAAAARAhMUH/2gAIAQEABj8CFSww5P8A/8QAHBAAAwEAAgMAAAAAAAAAAAAAAREhADFBYYGR/9oACAEBAAE/IQBQCHkjIFJ1LY+sfarxm+hkGL5v/9oADAMBAAIAAwAAABCLL//EABURAQEAAAAAAAAAAAAAAAAAAAEA/9oACAEDAQE/EASL/8QAFREBAQAAAAAAAAAAAAAAAAAAABH/2gAIAQIBAT8Qpb//xAAcEAEAAwEBAAMAAAAAAAAAAAABABEhQTFhgZH/2gAIAQEAAT8QO3ESgbTryd300LddszkqU7N1Vhns3sz6Ut/saG0+viKxXeuZ/9k=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Sojourn Model A\",\n    \"title\": \"Sojourn Model A\",\n    \"src\": \"/static/79ffff620d4594c6cbdd988e0d7ec1e3/28be2/sojourn-model-a.jpg\",\n    \"srcSet\": [\"/static/79ffff620d4594c6cbdd988e0d7ec1e3/f93b5/sojourn-model-a.jpg 300w\", \"/static/79ffff620d4594c6cbdd988e0d7ec1e3/b4294/sojourn-model-a.jpg 600w\", \"/static/79ffff620d4594c6cbdd988e0d7ec1e3/28be2/sojourn-model-a.jpg 786w\"],\n    \"sizes\": \"(max-width: 786px) 100vw, 786px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n  \", mdx(\"a\", {\n    parentName: \"div\",\n    \"className\": \"image-caption\"\n  }, \"Sojourn Model A\")), mdx(\"p\", null, \"While Roman was shopping the consumer level product around, I took on the responsibility of developing something that we could use to work with educators. We had a lot of organic interest from teachers, but we knew that the high price point of individual units wouldn\\u2019t be viable for most schools. I worked with a series of schools that already had an agricultural component to them in order to figure out what an educational product would look like. After a lot of market research and convincing, we ended up getting connected to ComEd, the power company for Illinois. ComEd was hosting an event called the Solar Spotlight, and this year they wanted a food-focused product that the students could build. The gist of the event was that ComEd would invite students from underprivileged parts of Chicago to come work with them over two weekends to learn about STEM and solar power. They loved our idea, and were incredibly interested in getting students excited about growing their own food. They asked us if we could make a kit version that high schoolers could assemble, and if we could integrate solar power into the unit.\"), mdx(\"div\", {\n    className: \"paragraph-with-picture\"\n  }, mdx(\"p\", null, \"I set out to determine what aspects of the unit we could actually power via solar, and Roman took to redesigning the unit with a focus on bringing down the cost and making it accessible to high school students. We ended up modifying a small storage bin to serve as the main compartment for the unit. All of the modifiers, sensors, and other components were consolidated to one central 3D-printed mount that lived on the back of the enclosure. The amount of solar power that we could generate with the nine watt, six volt panel that we sourced wasn\\u2019t enough to run everything, but it was enough to power the Raspberry Pi that controlled all of the moving parts.\"), mdx(\"div\", {\n    \"className\": \"image-container small-image\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"500px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/34e1104edf026a5e3314b244d83b8e59/41099/builders-kit.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"63.33333333333333%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAUCAwb/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAABobpmhnyJH//EAB0QAAEDBQEAAAAAAAAAAAAAAAIBAwQAERITFDL/2gAIAQEAAQUCighnzNWL1GJdrrqiOVf/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAbEAEBAAEFAAAAAAAAAAAAAAABAFEQEjEyQf/aAAgBAQAGPwJEG6zpux5m4L//xAAYEAEBAQEBAAAAAAAAAAAAAAABEQAhMf/aAAgBAQABPyHjYB7rROkM8GYkHGe4uV66Mabj/9oADAMBAAIAAwAAABAAP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABYRAAMAAAAAAAAAAAAAAAAAABARQf/aAAgBAgEBPxBwf//EABwQAQACAgMBAAAAAAAAAAAAAAEAESFBUWFxkf/aAAgBAQABPxBFYA1C813HAVduWF7yR4MZ0rr1xBly5AHRUceS6BW3kt+z/9k=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"The Builder's Kit\",\n    \"title\": \"The Builder's Kit\",\n    \"src\": \"/static/34e1104edf026a5e3314b244d83b8e59/41099/builders-kit.jpg\",\n    \"srcSet\": [\"/static/34e1104edf026a5e3314b244d83b8e59/f93b5/builders-kit.jpg 300w\", \"/static/34e1104edf026a5e3314b244d83b8e59/41099/builders-kit.jpg 500w\"],\n    \"sizes\": \"(max-width: 500px) 100vw, 500px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n    \", mdx(\"a\", {\n    parentName: \"div\",\n    \"className\": \"image-caption\"\n  }, \"The Builder's Kit\"), \"\\n  \")), mdx(\"p\", null, \"We hosted two events with ComEd\\u2013one for Black History Month, and one for the National Hispanic Heritage Month. Each event consisted of groups between sixty and seventy students assembling and testing their mushroom growing unit in small groups over the span of four hours. The work was challenging, but ComEd provided employee mentors to sit with each group to make sure that they could successfully complete their kit. Students were informed at the end of the day that the units they built would be delivered back to the schools for use in their science classes over the next semester. Roman and I had been working on sample curriculum to teach experimental design using the kits\\u2013we wanted to make sure that the educators who would be receiving these kits had a clear path forward on how to integrate them into their lesson plans without a ton of extra work.\"), mdx(\"div\", {\n    \"className\": \"gatsby-resp-iframe-wrapper\",\n    \"style\": {\n      \"paddingBottom\": \"56.09243697478992%\",\n      \"position\": \"relative\",\n      \"height\": \"0\",\n      \"overflow\": \"hidden\",\n      \"marginBottom\": \"1.0725rem\"\n    }\n  }, \" \", mdx(\"div\", {\n    parentName: \"div\",\n    \"style\": {\n      \"padding\": \"56.25% 0 0 0\",\n      \"position\": \"relative\"\n    }\n  }, \" \", mdx(\"iframe\", {\n    parentName: \"div\",\n    \"src\": \"https://abc7chicago.com/video/embed/?pid=5143962\",\n    \"frameBorder\": \"0\",\n    \"allowFullScreen\": true,\n    \"style\": {\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\",\n      \"width\": \"100%\",\n      \"height\": \"100%\"\n    }\n  }), \" \"), \" \"), mdx(\"br\", null), mdx(\"p\", null, \"The Solar Spotlight events were extremely successful, but unfortunately financial circumstances led to us having to shutter the company in the spring of 2019. Roman had always been paying the bills with a mix of freelance and working on the startup, and I had been doing the same after I left my full-time role at Fjord in the summer of 2018. Roman made the tough decision to move back to Ohio, and I decided that I would try to tackle our final Solar Spotlight event the following September on my own. That outcome is obviously not what either of us wanted, but I wouldn\\u2019t trade the experience for anything. While Sojourn wasn\\u2019t the first startup that I worked on, it was the one that got me hooked. The things that I learned and ideas that I explored there drastically changed my practice as a developer, and I would not be writing the same kind of code or approaching problems in the same way without having worked on those products.  \"));\n}\n;\nMDXContent.isMDXComponent = true;"}}},"staticQueryHashes":["3128451518"]}