Machineee is an open source project developing an ecosystem of tools for communities to design, manufacture, and distribute high-quality interactive systems built with electronics and software.
The immediate development goals for Machineee are (1) to reduce the messiness of working with DIY electronics and (2) ease the burden of re-assembling them and (3) improve the packaging of necessary information, digital content, and access to physical components needed to re-create projects. These are the goals that led to the platform architecture outlined below.
Machineee tools are made to be used to help people do two activities:
Users that want to find and replicate projects that others have made.
Developers that want to create and share new projects.
Users that want to find and replicate projects made by others use a smartphone or tablet to browse projects and can select a project they want to build. Once they select a project, the app will provide links to all the needed parts to assemble a project, generate step-by-step assembly instructions, and automatically deploy the software needed for a system. These users don't have to know any technical information about electronics or programming to benefit from it. The only requirement for these users is to download the app, (optionally) create an account, and (optionally) purchase Machineee hardware.
Developers can create and share projects using the smartphone or tablet app, the command-line interface (CLI), and the Machineee hardware itself.
In addition to addressing these shortcomings of existing development boards, the hardware was designed to meet some additional goals. Generally, the hardware was designed to provide a common, programmable "hardware backbone" for products that is both great for developer productivity and simple enough for non-developers to use purely to replicate (or distribute) projects. I think it's worth highlighting the point that most development boards are difficult even for developers to use. They're virtually impossible for non-developers to use with few, if any, exceptions. This doesn't have to be the case. Machineee seeks to address this shortcoming for non-developers because it focuses the hardware on end-use, which is where it should ultimately be used, anyway. Developers aren't not end-users! Blending the roles of developers and non-developers transforms both users and developers, it doesn't combine them.
It provides networking, connecting to electronics, project-level programming templates and automation, interactive electronics assembly and monitoring, operating system.
The hardware was design to address a number of issues with development boards that make them difficult to use.
Difficulty in setup for developers
The assumption that wires are need to develop custom hardware. Our hardware platform seeks to eliminate the need for wires, except for the rare occasion. The precision needed to place wires, and the multiplicity of wires make projects that have many of them difficult to rebuild and very difficult to distribute and scale.
The physical usage limitations of traditional hardware: it should be easy to physically distribute the system or parts of the system in physical space; the system should be easy to embed in objects.
The focus of developers shouldn't be disproportionately on code or abstractions that are far-removed from the actual ideas and systems being implemented or explored. The tools are biased towards hands-on exploration and experimentation rather than constructing layers of abstraction that indirectly correlate to the system being built.
Programmable hardware targets or elements shouldn't require tethering to a computer or otherwise tether the developer to any particular piece of hardware that will limit their freedom to move around in physical space.
Editor is a graphical domain-specific language designed for smartphones and tablets that makes configuring collections of hardware simple and easy. Editor was designed over several iterations in tandem with the hardware so they could complement one another throughout both development and deployment for use.
Editor is still under development. Here are some screenshots from a prototype. This is at least two big revisions behind the latest version.
In order to further facilitate the creation of device models and use of interactive self-assembly procedures, the editor was made as a graphical domain-specific language with several capabilities that accelerate designing interactive systems:
Creating new components from scratch. For example, you could create a component for a new IR rangefinder, unique servo type, or a custom sensor developed to conduct research.
Selecting components from a library of existing components. Editor will provide interactive guidance and automation through the completion of the process of interfacing with selected components and controlling them.
Browsing a library of existing projects that can be replicated.
Interactive automation and guidance to connect all components into systems. This process is not technical. It's comperable to following along with LEGO instructions. For example, you might be connecting a servo to one Machineee board, and connecting a IR rangefinder to another Machineee board.
Defining logical communication paths between Machineee boards and connected components. For example, you might create a path between the Machineee boards in the previous point, so you can then set up control so the IR rangefinder data controls the servo's rotation.
(saves/sync work done on mobile with project on GitHub/Dashboard)
Editor can be run on any number of devices and used together to provide different views onto your project and different sets of tools for editing.
Command Line Interface
To generate instructions to connect an IR rangefinder and servo to the Raspberry Pi 3, users would execute the following command:
builder connect --model raspberry-pi-3 --model machineee/generic-servo --model ir-rangefinder --model ir-rangefinder
Online Dashboard & Community
The Machineee dashboard is an online gallery of projects that can be built with Machineee hardware.
Dashboard is built to work really well with GitHub repositories. It integrates with GitHub, used as a distribituion, versioning, and hosting; alongside Octopart, CircuitMaker, Gitter.
This project was motivated by (1) the creative and problem solving potential present in DIY communities, (2) the view that DIY methods of production represent latent manufacturing potential, (3) the recognition that DIY ecosystems can provide an alternative to traditional "distribution" channels by leveraging DIY re-assembly and personalization by users, provided the re-assembly process is sufficiently efficient and maximally automated, (4) dissatisfaction with the high degree of friction experienced when re-creating DIY projects found elsewhere online in a way that is practically useful. When taken together, these will enhance (or perhaps unlock) the value of DIY project content so it can be as useful as consumer-level products.
In the spirit of interactive self-assembly, I decided to release Builder as an open source project. Anyone can contribute to the project.
Builder is specially tailored to projects hosted on GitHub. For users to get the maximum benefit of Builder, they should use it with all GitHub projects that they want to share with the idea that others will replicate the design. Once another user checks out the repository, they can use the generated results to assemble the project. Then, they can modify the project, use Builder to update the instructions and push the changes to their own repository. The effect is that sharing electronics and software projects is a better experience and the productivity of users is accelerated.
Support for Collaboration
To make Builder as useful for collaborative work, I defined a standard file format for defining components.
technology, innovation, community, diy