Intro: The Engineering Crash Course (for Makers)
In the summer of 2015, I was formally introduced to the world of electrical engineering with an opportunity to intern for a small engineering company, Digilent Inc. As one of the only people in my friend group with a creative based education background (I graduated with a degree in Apparel Merchandising), I had grown up listening to my friends discuss their science and math academic backgrounds for years. This experience, and a confidence in pushing my academic boundaries, led me to believe that this new internship opportunity would help me transcend the common “fashion student stereotypes”. So I set out to overcome my apprehensiveness and quickly left a well-known and cherished comfort zone behind.
At the culmination of my first week, it is embarrassing to admit that I felt thoroughly defeated. After looking through countless Digilent Instructables, reading most of the online Learn Modules, and browsing blog posts, I had no idea where to start as an engineer when I already felt so behind. A year later, I still recall my first few weeks and how this influx of information presented an enormous obstacle as I tried to harness what information was relevant to the projects I desired to make.
Thus, following a fervent search to harness the engineering universe, the idea for this Instructable was born. In this Instructable I will layout the concepts I found to be most important for people (like me) wanting to become involved in engineering without a formal educational background. In the following steps I will provide a brief overview of the concepts, equipment, and references one might find helpful when beginning their adventure into the world of engineering (with a maker/creative background). In the spirit of helping creative minds conquer the seemingly immense technological realm, I present The Engineering Crash Course (for Makers).
Step 1: Common Concepts (You Will Want to Know)
As a maker you are most likely interested in the construction of a project, but as many have discovered over the years, it’s the technical and theoretical concepts that can make or break an awesome idea. While working at an electrical engineering company, I have found the four following concepts to be the most essential when incorporating electronics into a project.
Circuits: The common concept that rules electrical engineering projects and brings your electronic project to life.
When beginning to try my hand at electronics projects, I noticed that circuit references were everywhere. As one of the main fundamentals of electrical engineering, circuits have the ability to power your project or cause endless problems without proper precaution. On the Learn website, the overarching concept of circuits is presented using an analogy that compares the flow of electrons through a project (i.e. what power your motors, etc.) to water flowing through pipes. In essence, electrons provide energy to your project by moving through a controlled network (or pipeline) that requires monitoring in order to function without complications.
These closed loop “pipelines” are what drive electrons through your project and enable functionality. Controlling how these electrons move will give you greater design capabilities, such as allowing you to turn your project’s power on/off or switching the direction of a motor. These elements can be controlled with the use of resistors, or by introducing a break in the circuit. Resistors are regularly used to change the levels of resistance within a circuit by providing an obstacle that current must pass through. Engineers also control circuits by introducing a break, whereby current cannot make its complete journey from the positive terminal to the negative terminal of the power source. In projects, this is usually accomplished with the addition of an interaction device like a switch or a button.
As many of you may have noticed when starting your adventure into electronics, circuits can become confusing very quickly. Even with the provision of diagrams, you may need further explanation before understanding the circuit. To help you understand some of the basic circuits you may run across, I have included a hand drawn diagram in Image 1 that is labeled to explain each design element. For further information on circuits you can also comment beneath the confusing project’s Instructable, as I have done many times before when looking for help, or check out these resources (1, 2, 3, 4, 5).
Coding: The backbone of your project and electronic equipment communication.
Since the fundamentals of coding should be covered across multiple Instructables (like the one found here), I am instead choosing to cover the basics of coding in regards to embedded processing devices (i.e. microcontrollers). While browsing Instructables I have noticed that many of the basic electronic projects use microcontrollers, such as the uC32 and the WF32, due to their simplicity and cost efficiency. Microcontrollers are also supported by countless online projects that provide inspiration for makers at all levels of the technical knowledge spectrum. They provide a method of making amazing projects without requiring the user to understand advanced coding processes, unlike FPGA boards. To explain the difference between FPGAs and microcontrollers, a co-worker provided this analogy:
With an FPGA you are programming the layout of a city. The roads that wind between the buildings help direct cars and lead them towards whatever function they are told to attend. These roads can be redirected by reprogramming the FPGA, and therefore provide a great advantage to individuals who understand the city blueprints (or necessary knowledge to reprogram). Microcontrollers are different in that they are predefined by the manufacturer (or city architect) and instead of reprogramming the entire city, the maker can reprogram the traffic lights. This often makes projects more manageable as creative individuals without a large technical background only need to tell the cars where they want them to go.
Thankfully, most makers will not have to worry about coding if their project mimics another project found in the vast online database of microcontroller creations. Most makers are very generous and post their example code, which can be easily edited following a few coding basics. An example of a basic project code is provided as Image 2 (above) and the original code can be found in Step 3 of this Monster Box Instructable. Commentary in the margins of Image 2 explains how to read some of the common elements found in provided project codes.
When beginning a code, the basic coding elements you may run across include: a library reference, variable definitions, a setup function, a loop function, and user-defined functions. Each code you run across may present each of these elements differently than the provided example, so it is important to ask the author questions if the coding components don’t make sense. Below you can read about what each of these functions contribute to a basic project code.
A Library Reference: Indicates what materials may be required for running the code. In the example code, the library reference specifies the use of a servo, whose function is explained in the following code elements.
Variable Definitions: This list defines how each action performed by the code will be referenced (i.e. what each action will be called). The example code in Image 2 provides in depth explanations of each action in the green annotations on the right.
Setup Function: The setup function explains what happens when power is first connected to your project. This function is what starts your project moving and precedes the loop function, only happening once while the project is powered. It will repeat each time you power your project, but never repeat following the loop function.
Loop Function: If your project requires a repeating action, the loop function will define what is repeated. How the repetition is performed will be listed in the user-defined functions (coming up next). The provided example code uses a loop function to repeat servo movements over a specified time period.
User-Defined Functions: These define the actions taking place during the loop function, such as what happens when certain phrases are listed. In the example code the user-defined functions state what happens when openMouth and closedMouth functions are referenced (i.e. the servo moves a specified amount of degrees to change the box lid angle).
By using these coding elements, you can edit a provided project code with any board the system recognizes. To learn more about what boards are recognized by each software system, please read on to Step 3 in this Instructable.
Soldering: A way to connect your electrical communication components so that circuits can be completed.
Depending on the type of project you are attempting to make, soldering can be a useful skill to understand and use. Many projects may only require the use of jumper wires, such as the Monster Box example project, but there are some projects that require greater connective power. In these circumstances, soldering is used to connect project components that necessitate conductive properties. Unlike alternative bonding mechanisms, solder can be reheated and is conducive to minor corrections if mistakes are made. The general process is fairly inexpensive, making it ideal for makers who are working on personal projects, and it is well documented online (check out a popular soldering Instructable here). You will need to invest in some startup materials when beginning to solder, like the basic soldering setup in Image 3, so it is important to review online documentation to find out what your project might require (such as this Instructable describing the different types of soldering tips you might use).
Measurement Fundamentals (current vs. voltage): Essential in keeping your project alive and you out of harm's way.
While working on projects you may run across problems as your project fails to work as expected. In these scenarios it may be helpful to know a little about measurement fundaments, especially current and voltage and how these are applied in electronics. In engineering, voltage is referred to as the measurement of energy differences, which an electric charge experiences as it moves between points on a circuit. Current, on the other hand, refers to the rate at which this charge moves (find more information here and here).
When starting your journey into electronics, measuring and understanding current and voltage readings can help you avoid potentially hazardous situations with your microcontroller or FPGA board (explained in Step 2). Each component you work with will have specific current limitations that you need to meet to make your component work. The same goes for the opposite outcome as every component has a limitation in what amount of current causes it to cease working (or die completely). Current and voltage measurements between circuit components will therefore explain the flow of electrons and whether this flow is more than your board can handle.
You can make an attempt to overcome these potential issues by doing thorough research on how current and voltage work (see the links above), by strictly following another maker’s Instructable, and/or by using a Multimeter to measure your current and voltage. When using a Multimeter, you can measure current and voltage by testing the path of less resistance or by breaking your circuits following the methods listed (in better detail than I can explain personally) here and here.
Now that you have read through a basic introduction of electrical engineering concepts, in the next step I will review some of the materials you might run across when browsing technology-based projects.
Step 2: Choosing the Right Equipment
In this step I will cover how to choose the right equipment for your project, however I present the following disclaimer for all makers out there.
DISCLAIMER: Mixing and matching products can be useful for any project, so please do not feel like this list is a rule for project construction. Many products have multiple purposes and it is up to the maker to decide what functions are most important for their project, and what devices they feel most comfortable using.
As mentioned in Step 1 of this Instructable, microcontrollers are probably the most well-loved product used by the maker community. They are simple to use and the resources available to makers are seemingly endless. For more experienced makers, there are other product categories I would like to cover, so that every beginner understands their future project building potential.
Field Programmable Gate Arrays (FPGAs): Devices that are more flexible (programming wise) than microcontrollers and offer increased performance capabilities.
As previously mentioned in Step 1 of this Instructable, FPGAs are built to provide enormous project capabilities and have the ability to be completely reprogrammed. When reviewing FPGAs online, they are commonly differentiated by their features, which include concepts like: logic cells, memory capabilities, DSP slices, transceiver speeds, and I/O pins. A brief explanation of these features is listed below to help you understand what product pages are discussing.
Logic Cells: A type of cell that can be reprogrammed for a specific purpose. Knowing how many cells are available can give you a gauge of how complicated you can make your project using the pieces available (i.e. owning greater numbers of Legos will let you build a bigger project, where number of Legos owned influences your building possibilities).
Memory: Refers to the amount of processes your project can handle at one time.
DSP Slices: Designed specifically for data processing. Similar to logic cells but specialized for signal processing. These components provide quick calculations (i.e. analog to digital conversions, etc.).
Transceiver Speeds: Set up to help communication move quickly either between devices or within the board itself. However, transceivers are more commonly used to facilitate board communication with exterior devices.
I/O Pins: Channels for any type of communication purpose, aiding communication to and from the board.
These features inform the engineer of board possibilities in regards to programmability. After speaking with another co-worker, blessed in the area of understanding FPGAs, we came up with an analogy to better explain the concept of an FPGA board.
When thinking about an FPGA board, you might picture the human body. Overall it has an enormous amount of possibility, whereby each part has a function that can be broken down until it resembles a very small yet functioning cell. These cells are similar to logic cells, which can be programmed for specific purposes and work together to accomplish a common goal. For every given activity you do during the day, you body may require the use of multiple cells that work together (like how throwing a football uses muscles in your arm, fingers, and coordination with your brain to result in a desirable response). However, during this activity you will most likely never need every single cell, and these remaining cells will remain inactive until programmed for another activity.
While this analogy certainly does not cover every aspect of an FPGA board, it does shed some light on how engineers can use this equipment to accomplish more complicated projects. In an attempt to construct useful boards for engineering activities, manufacturers try to combine logical components to make each board’s cells as general purpose as possible. This provides each board with the ability to be reprogrammed to assist with a wide variety of activities. Without further engineering education, it is difficult to explain the possibilities FPGA boards can provide. But with the resources available online (find some helpful ones here: 1, 2, 3, 4, 5), even people like me can begin to understand how to use FPGAs for smaller projects (like these ones here: 1, 2, 3).
Pmod (Peripheral Module): A small I/O device that offers additional capabilities to programmable logic (ex. FPGAs) and embedded control (ex. Microcontroller) boards.
Unlike FPGAs, Pmods can be an inexperienced maker’s best friend due to the additional functionality they provide to your board. Since Pmods communicate with boards using a specified protocol (i.e. SPI, I2C, UART, or GPIO) and pinout (i.e. the means by which your Pmod connects to your board), they are more commonly used with embedded processing boards by makers. Without a programming background, Pmods are easy to use (and write code for) in conjunction with a microcontroller provided they match up with the defined signal communication (ex. the PmodJSTK and WF32 in this Instructable both communicate using SPI).
Using a Pmod can provide unique project functions in conjunction with your microcontroller board. Some of these project modifications include: adding an OLED screen (Instructable 1), using slide switches (Instructable 2), measuring object distances (Instructable 3), gauging acceleration and driving DC motors (Instructable 4). With the addition of relatively inexpensive project components you are able to code greater functionality into your project, making your project much more unique with simple alterations from past projects found online (refer to coding section).
Reading how to use each Pmod is also relatively simple for non-engineers thanks to the online reference manuals that provide labeled diagrams. These diagrams will show new users what each part of the Pmod is used for; presenting a thorough overview of the possibilities each Pmod can contribute to your project.
Microcontrollers: A simple device used by most makers with programming capabilities that are easy to learn.
Although much of this was explained in Step 1, makers commonly use microcontrollers due to their simplicity, inexpensiveness, and easy-to-use interface. These devices are usually fit with a USB port that enables computer connection, allowing the maker to easily program the device using software like MPIDE. Each microcontroller board is defined by the actual microcontroller that, in most instances, is located somewhere in the center of the board. This microcontroller is what makers can program using MPIDE, and the surrounding parts are what provide additional board functionality.
On most boards, the users can expect to see various connectors and other features that enhance board functionality. The common connectors that may be present are the: PWM, power, analog, digital, I/O, SPI, and/or I2C connectors. These are outlined below to provide greater detail about how each feature functions on the microcontroller.
PWM: (Pulse Width Modulation) Concerns variable voltages and can be used for dimming LEDs, and controlling the use of sound of motors in a project. For more detailed information you can check out this tutorial.
Power: These connectors generally supply power to your board and therefore bring your project to life. Power can be provided using a variety of sources on your microcontroller, such as between the USB connector and your computer, where you can test programs and quickly and modify what needs corrections. You can also hook up power by using a power source like a battery pack with jumper wires, or by connecting alternative power supplies using the applicable connector (i.e. barrel connector).
Analog/Digital: Refer to the signals your board can understand. Analog signals are different from digital signals in that they vary continually across time, whereas digital signals vary between different “levels” over time. Check out this tutorial for a quick overview of each signal with visual examples.
I/O: Input/Output pins help your board send or receive signals to/from other devices. These pins only communicate using either the input or output function (they can not be used simultaneously), but can be reversed similar to city freeways that switch direction halfway through the day to assist traffic flow.
SPI/I2C: Areas on the board that refer to SPI or I2C functions are referencing communication protocols. The important thing to remember here is that if you are trying to make two (or more) devices communicate, they need to be able to speak the same language (i.e. both understand SPI).
Other features that may be found on your microcontroller are various interactive devices, like push buttons, reset buttons, and LEDs. These enable the user to program different project capabilities (i.e. push buttons) and revert to earlier steps in your program (i.e. reset button). Different headers can also add functionality with the ability to add devices like Pmods.
Starting with a project idea and knowing what you want to create will significantly influence which product is the right choice for your project. If you feel at all uncertain about which board is right for you, try looking at other Instructables to figure out how other makers combined the materials they chose to use. This will help you see what may (or may not) be important for your own creation, and hopefully guide you towards a successful end result. For more help on any of the topics listed above you can check out the reference pages, available on most websites, to learn more about the specific product features.
Once you know what equipment you would like to use, the next step is figuring out how to set up your equipment. In the next step, I will cover how choosing the right software for your board can improve your project success.
Step 3: Setting Up the Equipment
Software: Essential for programming your boards and aiding communication between project components.
After choosing your project hardware, you will need to find a way to help the components communicate. This is where your choice of software makes a big difference for a project that is mildly infuriating vs. downright catastrophic. The best software for beginning engineers will be preprogrammed to communicate with your board, preventing future difficulties that are problematic to overcome without a substantial knowledge base. Even with a large engineering knowledge base you probably wouldn’t want to begin a project with this obstacle on your horizon.
In the following section I will therefore breakdown which software is most important (or useful) to whichever board(s) you choose to use in your project. While there are many opinions out there on the best software for the job, these are my opinions based on prior positive experiences.
MPIDE: A free development environment that is commonly used with PIC32-based microcontrollers and runs on most operating systems (i.e. Windows, Mac, and Linux).
The MPIDE software is probably the most common programming option you will run across when browsing Instructables. It is a free software that is compatible with a variety of operating systems, and works with both chipKIT and Arduino microcontroller boards. MPIDE is also relatively simple to install, with tons of helpful tutorials (like this one) guiding new makers through downloading the software and writing or updating their first sketch (i.e. MPIDE for “code”).
Before downloading the software, it is important to figure out whether it is compatible with your board. The list in Image 1 outlines a few of the popular boards that can be used with the MPIDE software. Other boards can be added as well, but this considers that the user has a background in board development.
While there are more effective software options for programming your board, MPIDE does present a good option for those of you just beginning your journey into electronics. Its price and online support materials are helpful for teaching individuals new to electronics how to code microcontrollers, while providing the necessary tools to boost confidence before moving on to more sophisticated programming options.
LabVIEW: A graphical programming platform that uses visual tools like virtual instruments and block diagrams to help makers program their devices.
LabVIEW is a wonderful tool for makers with little prior coding experience as its environment is set up to simplify the programming requirements of your project construction. Unlike MPIDE, LabVIEW uses virtual instruments, created by the user, supported by front panel and block diagram windows. In the front panel window, the maker is able to drag visual components (such as push buttons) into their program design. LabVIEW then automatically adds these controls or indicators into the block diagram code that your board will understand (if set up correctly using LINX). The popular boards used with LabVIEW currently include most microcontrollers, the Raspberry Pi 2 (or Raspberry Pi 3), and the BeagleBone Black. For individuals new to coding, this software and its numerous online tutorial resources (found here: 1, 2, 3), help you work through common problems while teaching you the basics of turning your once ordinary projects into functioning, technological breakthroughs.
Another highlight for LabVIEW users is that troubleshooting can be accomplished using the highlight execution function. Highlight execution is a way for makers to understand their block diagram and shows users where their data is flowing in their program. With this tool you can solve logic issues and thus create a project that actually fulfills the desired result.
WaveForms 2015: A software solution that helps makers troubleshoot their projects using oscilloscopes, logic analyzers, and function generators.
A final software option that is valuable for troubleshooting projects is WaveForms, which can help makers understand important project elements like voltage and current. With WaveForms the user can attach an oscilloscope (like the Analog Discovery 2) to measure voltages and avoid potential issues with the measurement fundamentals referenced in Step 1 of this Instructable. As another free software option, WaveForms is ideal for measuring analog and digital signals used in project creations. And if you intend to create a wearable or biomedical innovation using signals (such as this complex ECG machine project), it is a great project resource.
In order to choose the right software option for your project, it is essential that you research what others have done before you. Usually other makers will provide the necessary code and instructions on how to use it with their software of choice. But it is equally important to understand what each software option can help you accomplish, so that (hopefully) your project outcome is achieved without too many setbacks.
Step 4: A Useful Engineering Terminology Reference
Even after reading through the earlier steps you may still have questions about certain engineering concepts. This Instructable was written as a basic introduction to concepts you may run across when beginning your journey into technology-based projects. To cover anything that was not mentioned earlier, I have provided the following list of terms you may not know about (but maybe want to learn more about later). If you have any other terms you think are important and need reference in this Instructable, please send me a message in the comments below and I will happily add them. Good luck on your projects and I look forward to seeing what you make!
Breadboard: A convenient device used for connecting electrical components and building circuits between devices, often without the need for soldering. The Instructable here does a good job of explaining the layout of a breadboard in their Step 1: The Basics.
Debouncing:An attempt to minimize problems with changing the state of a circuit (i.e. turning a switch on or off), which physically vibrates your device.
Debugging:A way to run through code to find and correct errors, as well as observe variables within a code to use as reference for understanding why your code “broke” (or failed to work as expected).
Digital Multimeter:Measures circuits (ex. voltage, current, resistance, and other parameters) by using probes that connect the instrument and circuit, enabling communication. Useful for checking circuit parameters and helps the maker avoid devastating project mistakes. The tutorial here discusses the basics of Digital Multimeters.
Oscilloscope: A graphing instrument that displays electric signals as they vary over time. These are useful when timing frequencies, measuring voltages, and generally understanding circuits and signals. You can find out more about the usefulness of oscilloscopes here.
Virtual Instrument: A setup that includes a computer or workstation that is equipped with software that replicates traditional instrumentation (ex. oscilloscope, waveform generator, etc.). It is generally less expensive than purchasing each instrument separately and provides greater modification advantages than traditional instruments. Learn more about virtual instrumentation here.