Chapter 1. The Basics

The Arduino microcontroller (Figure 1-1) is like a little command center that is awaiting your orders. With a few lines of code, you can make your Arduino turn a light on or off, read a sensor value and display it on your computer screen, or even use it to build a homemade circuit to repair a broken kitchen appliance. Because of the versatility of the Arduino and the massive support available from the online community of Arduino users, it has attracted a new breed of electronics hobbyists who have never before touched a microcontroller, let alone programmed one.

An Arduino Duemilanove microcontroller

Figure 1.1. An Arduino Duemilanove microcontroller

The basic idea of the Arduino is to create an atmosphere where anyone who is interested can participate and contribute with little upfront cost. A basic Arduino board can be found online for around $20, and all of the software needed to program the Arduino is open-source (free to use and modify). You need only a computer and a standard USB cable. In addition to being inexpensive, the creators of Arduino came up with an easy-to-learn programming language (derived from C++) that incorporates various complex programming functions into simple commands that are much easier for a beginner to learn.

This book integrates some basic robot-building techniques with the simplicity of the Arduino to create bots that you can modify and improve with a clear understanding of your work. This book is not intended to simply "show" you how to build a bot, but rather to educate the beginning robot builder and hopefully inspire creativity so that you can design, build, and modify your own robots.

One unavoidable obstacle that most people encounter when building a robot is cost. Obviously we can spend thousands of dollars adding top-of-the-line parts and expensive commercial products, but most hobby builders have neither the time nor the money to build such a robot. With that in mind, this book takes every opportunity to show you how to build a part from scratch—or as inexpensively as possible to get the job done. If any of these methods seem too involved, do not worry because there are substitute parts listed for you to purchase.

Please understand that each project in this book requires multiple tries before working—some of them even take weeks of "debugging." I can tell you from experience that when you are persistent, you will eventually solve your problem—and this will make the experience that much more rewarding. Figuring out why a robot is not working often requires a lot of troubleshooting. Troubleshooting requires understanding each step in the process from start to finish, and inspecting each step for errors. The more you tinker with something, the better you will understand it.

Lastly, do not be discouraged if some of the information in this book appears to be over your head. We try to assume that you are new to robotics and programming, and we focus on providing a practical working knowledge of the parts and code used in each project, rather than loading you down with electronics theory and complicated instructions. It is best to take a positive "I can do it" attitude before you start—this will be your greatest tool.

To better understand what is happening inside an Arduino, we should first discuss electricity and other basics in general (i.e., electronics and circuits). Although levels found in your Arduino (+5 DCV) are relatively harmless, if you don't know how electricity works you won't know at what point it becomes dangerous. As it turns out, the projects covered in this book do not use electrical levels high enough to conduct through your body, but electricity should still be handled with caution.

Electricity

Electricity is nothing more than harnessed heat. This heat can be used to do a variety of different things like lighting up a lightbulb, spinning a motor, or simply heating a room. If electricity can transfer through an object easily, it is called a "conductor" (like copper wire). Every conductor has an internal resistance to the electricity that keeps it from transferring 100% of the power. Even a copper wire has some resistance that slows the flow of electricity, thereby generating heat. Conductors also have a maximum amount of power that they can transfer before "overheating" (if the conductor is a copper wire, that means melting). With regard to electricity, total power can also be referred to as total heat. This is why you might see a lightbulb or microwave that has its heat rating in watts. A watt is not only a measurement of heat, but of electrical power.

Some electrical devices (like the Arduino) consume little electricity therefore producing little heat, so no attention is given to heat dissipation. Other devices are made specifically to transfer large amounts of electricity (like a motor-controller) and must use metal heat-sinks or fans to aid in removing heat from the device. In either case, it is helpful to be able to determine the amount of heat that an electrical device produces so we know how to properly handle it.

Electrical Analogy

Electricity is not usually seen (except maybe in a lightning storm), so it is difficult to understand what is happening inside of a wire when you turn on a lamp or kitchen appliance. For ease of illustration, consider an electrical system to be a tank of water with an outlet pipe at the bottom (see Figure 1-2).

An analogous electrical system

Figure 1.2. An analogous electrical system

The four images illustrate how resistance and pressure affect the water output from the tank. A higher resistance yields less water output, whereas a higher pressure yields more water output. You can also see that as the resistance is lowered, much more water is allowed to exit the tank, even with a lower pressure.

The more water that is in the tank, the faster (higher pressure) it pushes the water through the outlet pipe. If there were no outlet pipe, the tank of water would simply be a reservoir. The fact that there is an outlet pipe at the bottom of the tank enables water to exit, but only at a rate determined by the size of the pipe. The size of the outlet pipe determines the resistance to the water leaving the tank—so increasing or decreasing the size of the outlet pipe inversely increases or decreases the resistance to the water leaving the tank (i.e., smaller pipe = more resistance = less water exiting the tank).

Both the level (or pressure) of the water and the resistance (or size of the outlet pipe) can be measured, and using these measurements, you can calculate the amount of water exiting the tank at a given point in time. The difference in the water analogy and electricity flow is that the electricity must complete its path back to the source before it can be used.

Electrical Basics

Notice that a higher water pressure yields a higher water output (keeping resistance the same). The same is true with the electrical equivalent of pressure, called "voltage" (V), which represents the potential energy that can be found in an electrical system. A higher system voltage has more energy to drive the components in the system. The amount of "resistance"(R) found in a system impedes (slow) the flow of electricity, just as the resistance caused by the outlet pipe slows the flow of water from the tank. This means that as the resistance increases, the voltage (pressure) must also increase to maintain the same amount of output power. The amount of electrical charge (in coulombs) that is passed through an electrical system each second is called the "amperage" (I) or "current," and can be calculated using the voltage, resistance, and Ohm's law. A "watt" (P) is a measure of electrical power that is calculated by multiplying the voltage times the amperage. In this chapter, we further discuss voltage, resistance, and amperage. First, let's look at the relationship among them, Ohm's law.

According to Wikipedia (Source: http://en.wikipedia.org/wiki/Ohm's_law), Ohm's law states that the current through a conductor between two points is directly proportional to the potential difference or voltage across the two points, and inversely proportional to the resistance between them.

There is a simple relationship among voltage, resistance, and amperage (current) that can be calculated mathematically. Given any two of the variables and Ohm's law, you can calculate the third. A watt is a measure of electrical power—it is related to Ohm's law because it can also be calculated using the same variables. See the formulas in Figure 1-3 where V = voltage, R = resistance, I = amperage, and P = watts.

Note

The pie chart in Figure 3-1 is used courtesy of www.electronics-tutorials.ws. If you are interested in learning more about electronics, you should definitely visit this website —it has some helpful illustrations and descriptions.

The different views of Ohm's law include the following:

  • V = I * R

  • I = V / R

  • R = V / I

Use the following formulas to calculate total power:

  • P = V * I

  • P = I 2 * R

Ohm's law to calculate power

Figure 1.3. Ohm's law to calculate power

There are several other terms that you might come across when working on an electrical system; we discuss a few here. As you might know, an electrical system usually has a "power" wire and a "common" wire to complete the circuit. Depending on what you are reading, these two sides can be called different things. To help avoid the confusion that I experienced when I was learning, Table 1-1 provides a quick comparison of the various names for the positive and negative ends of an electrical system.

Table 1.1. Common Names That Refer to the Positive and Negative Ends of an Electrical System

Voltage Bias

Polarized Terminal

Electrical Current Flow

Schematic Label

Common Name

Positive

Anode

Source

VCC

Power

Negative

Cathode

Sink

VSS

Ground (GND)

We discussed Ohm's law and the common measurements that are used to describe the various properties of electrical current flow. Table 1-2 provides a list of standard electrical units and their symbols. These are used in every subsequent chapter of this book, so it is a good idea to get familiar with them.

Table 1.2. Common Electrical Measurement Terms with Their Symbols

Measurement

Unit

Symbol

Voltage (energy)

Volt

V or E

Amperage (current)

Ampere (amp)

I or A

Resistance

Ohm

R or Ω

Power (electrical heat)

Watt

P or W

Capacitance

Farad

F

Frequency

Hertz

Hz

Let's now talk more about the different parts of an electrical system.

Circuits

The starting point of the electricity in a system is called the "source" and usually refers to the positive battery lead or power supply. The electricity flows from the source, through the system, and to the sink, which is usually the negative battery terminal or ground wire (GND). For electricity to flow, the circuit must be "closed," which means that the electrical current can get back to its starting point.

The term "ground" comes from the practice of connecting the return path of an AC circuit, directly into the ground outside using a copper rod. You might notice that most electrical meters also have a ground rod nearby that is clamped to a wire leading into the fuse-box. This ground wire gives the returning electrical current a path to exit the system. Even though the DC equivalent of GND is the negative battery terminal, we still call it GND.

Note

the actual electron-flow of electrical current travels from negative to positive, but unless you are a physicist, that is not relevant here. For learning purposes, we assume the conventional electron-flow theory, which suggests that electrical current flows from Positive (+) ----> Negative (−) in a system.

An electrical system is called a "circuit," and can be simple like a string of Christmas lights plugged into a power outlet or very intricate like the motherboard in your PC. Now consider that in a circuit, the electricity flows only if something is there to complete the circuit, called a "load" (see Figure 1-6). In general, the load in a circuit is the device you intend to provide with electricity. This can be a lightbulb, electric motor, heater coil, loud speaker, computer CPU, or any other device that the circuit is intended to power.

There are three general types of circuits: open-circuit, closed-circuit, and short-circuit. Basically, an open-circuit is one that is turned off, a closed-circuit is one that is turned on, and a short-circuit is one that needs repair (unless you used a fuse). This is because a short-circuit implies that the electricity has found a path that bypasses the load and connects the positive battery terminal to the negative battery terminal. This is always bad and usually results in sparks and a cloud of smoke, with the occasional loud popping sound.

In Figure 1-4, the lightbulb is the load in this circuit and the switch on the left determines whether the circuit is open or closed. The image on the left shows an open-circuit with no electricity flowing through the load, whereas the image on the right shows a closed-circuit supplying power to the load.

Open- and closed-circuits

Figure 1.4. Open- and closed-circuits

Measuring Electricity

Without a way to measure electrical signals, we would be flying blind—luckily, there is a device called a "multi-meter" that is inexpensive and can easily measure voltage, resistance, and small levels of current.

Multi-Meters

There are different types of multi-meters that have varying features, but all we need is a basic meter that can measure voltage levels up to about 50DCV.

A typical multi-meter can measure the voltage level of a signal and the resistance of a component or load. Because you can calculate the amperage given the voltage and resistance, this is really all you need to do basic circuit testing. Although the full-featured digital multi-meter in Figure 1-5 (left) is priced around $50, you can usually find a simple analog multi-meter (right) that measures both voltage and resistance for under $10. Both meters will do basic testing and although the digital meter is nicer, I actually like to keep a cheap analog meter around to measure resistance, because you can see the intensity of the signal by how fast the needle moves to its value.

The Extech MN16a digital multi-meter (left) measures AC and DC voltages, resistance, continuity, diode test, capacitance, frequency, temperature, and up to 10 amps of current. An inexpensive analog multi-meter purchased at my local hardware store (right) measures DC and AC voltages, resistance (1k ohm), and up to 150mA (0.15A) of current. Either work to diagnose an Arduino and most other circuits—but you definitely need one.

Figure 1.5. The Extech MN16a digital multi-meter (left) measures AC and DC voltages, resistance, continuity, diode test, capacitance, frequency, temperature, and up to 10 amps of current. An inexpensive analog multi-meter purchased at my local hardware store (right) measures DC and AC voltages, resistance (1k ohm), and up to 150mA (0.15A) of current. Either work to diagnose an Arduino and most other circuits—but you definitely need one.

The standard multi-meter has two insulated test-probes that plug into its base, and are used to contact the electrical device being tested. If you test the voltage of a circuit or battery, you should place the red probe (connected to the multi-meter "V, Ω, A" port) on the positive battery supply, and the black probe (connected to the multi-meter "COM" port) on the negative battery supply or GND.

Measuring Voltage

Voltage is measured as either Alternating Current (AC), which is the type found in your home electrical outlets, or Direct Current (DC), which is found in batteries. Your multi-meter needs to be set accordingly to read the correct voltage type. Some multi-meters also have a range that you need to set before testing a voltage. The analog multi-meter in Figure 1-5 (right) is set to 10DCV, effectively setting the needle range from 0-10VDC.

Trying to read a voltage that is much higher than the selected range can result in a blown fuse, so you should always use a voltage range that is higher than the voltage you test. If you are unsure what voltage level you are testing, select the highest range setting (300VDC on this multi-meter) to get a better idea. The digital multi-meter in Figure 1-7 (left) has DC and AC voltage settings, but the range is automatically detected and the exact voltage number appears on the screen—just be sure not to exceed the maximum voltage ratings stated in the multi-meter owner's manual.

The voltage level of an electrical signal also determines whether or not it is capable of using your body as a conductor. The exact voltage level that passes through the human body is probably different depending on the size of the person (moisture levels, thickness of skin, etc.), but I can verify that accidentally touching a 120v AC wall outlet (phase wire) while standing on the ground produces quite a muscle convulsion, even if wearing rubber-soled shoes.

Warning

Voltage levels above 40v can be harmful to humans or pets. Always remember to disconnect the power source when working on your circuits and use insulated tools (with rubber grips) to test circuits. You don't want to end up in a hospital bed!

Measuring Amperage

Most multi-meters have a feature to measure small amounts of amperage (250mA or less) of either AC or DC. The digital multi-meter in Figure 1-5 (left) can measure up to 10 amps of current for a few seconds at a time whereas the less featured meter can measure up to 150mA of current only. To measure large amounts of current (over 10A), you either need a current-sensor, ammeter, or voltage clamp, depending on the application.

This unit of measure depends on the operating voltage and resistance of the circuit. As the operating voltage decreases (batteries discharge) or the resistance fluctuates, the amperage draw also changes. On a large robot that is constantly moving, the amperage draw changes every time the robot drives over a rock or up a slight incline. This is because DC motors consume more amperage when presented with more resistance. An LED flashlight on the other hand, consumes a steady amount of current (about 20-100mA per LED) until the batteries run dead.

You might have noticed that batteries are rated in Amp/Hours (AH) to reflect the amount of electrical current they can supply and for how long. This loosely means that a battery rated for 6v and 12AH can supply a 6v lamp with 1 ampere of current for 12 hours or the same 6v lamp with 12 amperes for 1 hour. You might also notice that smaller batteries (like the common AA) are rated in milliamp/hours (mAH). Thus a 2200mAH battery has a rating equal to 2.2AH.

Measuring Capacitance

Capacitance is the measure of electrical charge that can be stored in a device, measured in Farads—but 1 Farad is a huge amount of capacitance, so you will notice that most of the projects use capacitors with values in the microfarad (uF) range. A capacitor is an electrical device that can hold (store) electrical charge and supply it to other components in the circuit as needed. Though it might sound like a battery, a capacitor can be completely drained and recharged multiple times each second—the amount of capacitance determines how fast the capacitor can be drained and recharged.

Some multi-meters can measure the amount of capacitance that is present between two points in a circuit (or the value of a capacitor), like the Extech MN16a in Figure 1-5. Most multi-meters do not measure capacitance, because it is not usually of great importance in most circuits. Being able to test capacitance can be helpful when trying to achieve specific values or testing a capacitor, but generally you will not need this feature on your multi-meter.

Warning

Larger capacitors can hold a significant charge for long periods of time, and touching the leads of a charged capacitor can cause electrical shock. Capacitors found in CRT computer monitors or televisions, motor-start capacitors, and even the small capacitors found in disposable cameras can provide a shock that leave your arm tingling for several minutes and even burn your skin. It is a good idea to "short" the leads of a capacitor together with an insulated screwdriver to discharge any stored current before attempting to handle it.

Measuring Resistance

Resistance is measured in ohms and tells us how well a conductor transfers electricity. Current flow and resistance are inversely related. As resistance increases, current flow decreases. Thus, a conductor with lower resistance transfers more electricity than one with higher resistance. Every conductor has some resistance—some materials have such a high resistance to current flow, they are called "insulators" meaning that they will not transfer electricity. When electricity is resisted while passing through a conductor, it turns into heat; for this reason, we use conductors with the lowest resistance possible to avoid generating heat.

A resistor is an electrical device that has a known resistance value in ohms and is used to limit the amount of current that can flow through it (see Figure 1-6).

Three resistors: ¼ watt surface mount resistor (left), ⅛ watt through-hole resistor (center), and ¼ watt through-hole resistor (right)

Figure 1.6. Three resistors: ¼ watt surface mount resistor (left), ⅛ watt through-hole resistor (center), and ¼ watt through-hole resistor (right)

Notice that the ¼ watt surface mount resistor (left) is much smaller than the equivalent ¼ watt through-hole resistor (right), even though it dissipates the same amount of power. I typically use ⅛ watt through-hole resistors as they are small but still easy to work with.

You can use a resistor in-line with a component to limit the amount of electrical current delivered to the device, in order to ensure it stays within a safe operating range.

The number on the chip resistor designates its resistance value in ohms, while the color-coded stripes on the through-hole resistors designate their resistance value. If you want to manually check the resistance of a component, use your multi-meter on the Ohm (Ω) setting – polarity does not matter, unless you measure the resistance of a diode or transistor.

I use a neat web page that enables you to enter the colors of each band on a resistor, and it tells you the resistance value in ohms (see Figure 1-7). It is helpful for quick reference while prototyping or identifying a loose resistor's value. Visit http://www.dannyg.com/examples/res2/resistor.htm.

This screen-shot shows the web application designed by Danny Goodman. I have this web page bookmarked in my web browser and use it often to check unfamiliar resistor color codes.

Figure 1.7. This screen-shot shows the web application designed by Danny Goodman. I have this web page bookmarked in my web browser and use it often to check unfamiliar resistor color codes.

Calculating Resistor Power Using Ohm's Law

Remember that any time resistance is present in a circuit, heat will be generated, so it is always a good idea to calculate how much heat will be passed through a resistor (depending on the load) in order to select a resistor with a sufficient power rating. Resistors are not only rated in ohms, but also by how much power they can dissipate (get rid of) without failing. Common power ratings are ⅛ watt, ¼ watt, ½ watt, and so on, where larger watt values are typically larger resistors unless using surface mount components (see Figure 1-5).

To calculate the power dissipated in a resistor, you need to know the circuit voltage and the resistor value in ohms. First, we need to use Ohm's law to determine the current that will pass through the resistor. Then we can use the resistance and amperage to calculate the total heat that can be dissipated by the resistor in watts.

For example, if we have a 1000 ohm resistor (1kilo-Ohm) and a 12v power supply, how much amperage will be allowed to pass through the resistor? And what should the minimum power rating be for the resistor?

First we calculate the amperage through the resistor using Ohm's law:

  • V = I * R

  • I = V / R

  • I = 12v / 1000 ohm

  • I = 0.012 amps or 12 milliamps

Now we use the amperage to calculate the total power (heat):

  • P = I 2 * R

  • P = (0.012 amps * 0.012 amps) * 1000 ohms

  • P = 0.144 watts

The total power is calculated as 0.144 watts, which means we should use a resistor with a power rating greater than .144w. Because common resistor values are usually ⅛w (0.125w), ¼w (0.25w), ½w (0.5w), and so on, we should use a resistor with a power rating of at least ¼w (a common size) and still safely dissipate 0.144w of power. Using a ½w resistor will not hurt anything if you can fit the larger size into the circuit-it will simply transfer heat more easily than a ¼w resistor with the same resistance value.

Now you should be able to figure out if your resistors have an appropriate power rating for your application. Let's talk about the different types of load components.

Oscilloscope

Although the multi-meter is great for measuring the voltage, resistance, and amperage, it is sometimes helpful to be able to see exactly what is going on in an electrical signal. There is another device that is designed to analyze electrical signals, called an "oscilloscope." The oscilloscope can detect repeated patterns or oscillations in an electrical signal, and display the wave-form of the signal on the screen of the device. It is effectively a microscope for electrical signals. These machines have been expensive ($500-$5000) until recently—some hobby grade oscilloscopes have entered the market for under $100.

The open-source DSO Nano (see Figure 1-8) digital oscilloscope built by Seeedstudio.com and also sold (in the United States) through Sparkfun.com (part #TOL-10244). I have had this oscilloscope for about a year and use it frequently because it is easy to use and about the size/weight of a cell-phone, all for about $89. It contains a rechargeable lithium battery and can be charged through a mini USB cable. It also has a memory card slot available for storing readings to view later on a PC.

The DSO Nano from SeeedStudio.com (and sold through Sparkfun.com) is an excellent choice for an inexpensive ($89), but full-featured, digital pocket oscilloscope.

Figure 1.8. The DSO Nano from SeeedStudio.com (and sold through Sparkfun.com) is an excellent choice for an inexpensive ($89), but full-featured, digital pocket oscilloscope.

Although an oscilloscope is an invaluable tool to have when diagnosing electronic signals, it is not necessary to have for the projects in this book. You can get by with readings from a simple multi-meter. There are also other budget oscilloscope options available, including a DIY kit from Sparkfun.com for around $60 (part #KIT-09484).

Loads

The "load" in a circuit refers to a device in the circuit that uses the electricity. There are many different examples of a load from a DC motor to an LED or a heater coil, and each will create a different reaction in the circuit. For instance, a heater coil (found in a hair dryer or space heater) is simply a coiled resistive wire made from a metal that can become glowing red when it is hot, but it does not melt. Whereas an electric motor uses electricity to energize an electro-magnetic field around a coil of wire, causing the motor shaft to physically move. There are two types of loads on which we focus: inductive and resistive.

Inductive Loads

If you apply power to a device and it creates moving energy, it is likely an inductive load-this includes motors, relays, and solenoids. Inductive loads create an electro-magnetic field when energized and usually take some time to deenergize after the power is disconnected. When the power is disconnected using a switch, the magnetic field collapses and dumps the remaining current back to the power terminals. This phenomenon is called Back-EMF (Electro-Motive Force) and it can damage the switching components in a circuit if they are not protected by rectifying diodes.

Resistive Loads

A resistive load uses electrical current to produce light or some other form of heat, rather than mechanical movement. This includes LEDs, heater elements, lightbulb filaments, welding machines, soldering irons, and many others. Resistive loads use a constant amount of electricity because their load is not affected by external influence.

Electrical Connections

When building an electrical circuit, you should determine the desired operating voltage before selecting components with which to build the circuit. Although lowering AC voltage levels requires the use of a transformer, specific DC voltage levels can be achieved by using different wiring methods to connect several individual battery packs. There are two different types of electrical connections: series and parallel.

Series Connections

To arrange a circuit in "series" means to place the devices in-line with or through one another. We often use a series connection with batteries to achieve a higher voltage. To demonstrate this circuit, we use two 6v 10-Ah batteries with the positive (+) terminal of the first battery connected to the negative (−) terminal of the second. The only open terminals now are the negative (−) terminal of the first and the positive (+) terminal of the second, which will produce a difference of 12v.

When two batteries are arranged in a series circuit (see Figure 1-9), the voltage is doubled but the Amp/Hour capacity stays the same. Thus the two 6v 10AH batteries work together to produce a single 12v 10AH battery pack. This technique can be helpful to reach specific voltage levels.

Two batteries arranged in a series circuit produce twice the voltage but the same Amp/Hour capacity.

Figure 1.9. Two batteries arranged in a series circuit produce twice the voltage but the same Amp/Hour capacity.

Parallel Connections

To arrange a circuit in "parallel" means to place all common terminals together. This means that all the positive terminals are connected together and all the negative terminals are connected together. If we place the two 6v 10AH batteries from the previous example into a parallel circuit (see Figure 1-10), the voltage will stay the same but the Amp/Hour capacity will double resulting in a single 6v 20AH battery pack.

Two batteries arranged in a parallel circuit produce the same voltage but with twice the Amp/Hour capacity.

Figure 1.10. Two batteries arranged in a parallel circuit produce the same voltage but with twice the Amp/Hour capacity.

Series and Parallel Connection

It is also perfectly acceptable to arrange several battery packs in both series and parallel at the same time, in order to achieve a specific voltage and Amp/Hour rating (see Figure 1-11). Notice that there are two sets of 6V, 10AH batteries arranged in series to produce 12V, and then the two series packs are arranged in parallel to produce the same voltage, but with 20AH capacity.

By making two sets of series connections and placing them in parallel, you can create a 12v battery pack with 20AH of current capacity using four 6v 10AH battery packs.

Figure 1.11. By making two sets of series connections and placing them in parallel, you can create a 12v battery pack with 20AH of current capacity using four 6v 10AH battery packs.

When building a battery pack, it is important to use batteries of the same voltage and AH capacity to build larger cells. This means that you should not pair a 12v battery with a 6v battery to achieve 18v. Instead use three 6v batteries with the same capacity to achieve 18v and avoid uneven charging/discharging.

Electronics

The field of electronics deals with controlling the flow of electrical current through a circuit, specifically using the electronic switch. Prior to the invention of the electronic switch, electrical circuits were turned on and off using mechanical switches, which requires mechanical motion (i.e., your hand moving the switch up or down) to connect or disconnect the circuit. Although mechanical switches are perfectly acceptable and even preferred for some applications, they are limited to how fast they can be switched due to the physical motion that must occur during the switching process. Even an electro-mechanical switch (called a relay) does not qualify as an electronic device, because it uses electricity to generate a mechanical motion used to activate the switch.

The electronic switch forgoes the mechanical switching action by using an electrical reaction within the device, thus there are no moving parts. Without a physical movement, these devices can be switched extremely fast and with much greater reliability. The substances that these switches are made from conduct electricity only under certain circumstances—usually a specific voltage or current level must be present at the input and output of the device to open or close it. When the device is turned on, it conducts electricity with a specified amount of resistance. When the device is turned off, it does not conduct electricity and instead acts as an insulator. This type of electronic component is called a "semi-conductor" because it can become a conductor or insulator depending on the electrical conditions.

Semi-Conductors

The use of semi-conductors in place of mechanical switches is what makes a circuit "electronic," because they enable electrical signals to be switched at extremely high speeds, which is not possible with mechanical circuits. There are many different semi-conductors, and we discuss a few important types that are used in most of our circuits.

  • Diode: Like a one-way valve for electrical current, this device enables only electrical current to pass through it in one direction-extremely useful by itself, but also the basis for all solid state electronics.

  • Light Emitting Diode (LED): This type of diode emits a small amount of light when electrical current passes through it.

  • Light Dependent Resistor (LDR): This type of semi-conductor has a changing resistance, depending on the amount of light present.

  • Bipolar Junction Transistor (BJT: This is a current-driven electronic switch used for its fast switching properties.

  • Metal-Oxide Semiconductor Field-Effect Transistor (moset): This is a voltage-driven electronic switch used for its fast switching properties, low resistance, and capability to be operated in a parallel circuit. These are the basis for most power amplifier circuits.

These devices all have multiple layers of positively and negatively charged silicon attached to a chip with conductive metal leads exposed for soldering into the circuit. Some transistors and mosfets have built-in diodes to protect them from reverse voltages and Back-EMF, so it is always a good idea to review the datasheet of the part you are using.

Datasheets

Each device should have its own datasheet that can be obtained from the manufacturer-usually by downloading from its website. The datasheet has all of the important electrical information about the device. The upper limits, usually called "Absolute Maximum Ratings," show you at what point the device will fail (see Figure 1-12). The lower limits (if applicable) tell you at what level the device will no longer respond to inputs-these usually will not hurt the device, it just won't work.

Here you can see the first page of a sample datasheet from Fairchild Semiconductor for the popular 2n2222 NPN transistor switch. First it shows the available packages and pin-configurations, and then a brief listing of the absolute maximum ratings.

Figure 1.12. Here you can see the first page of a sample datasheet from Fairchild Semiconductor for the popular 2n2222 NPN transistor switch. First it shows the available packages and pin-configurations, and then a brief listing of the absolute maximum ratings.

There is also a section called "Electrical Characteristics" that tells you at what level the device operates properly. This usually shows the exact voltage or current level that will turn the device on or off. These ratings are helpful in determining what other component values (i.e., resistors and capacitors) should be selected or whether the device will work for the intended purpose.

The datasheet usually tells you far more than you know what to do with, ending with graphs and package dimensions. Some datasheets even have circuit layout recommendations and suggest ways to interface the component with a micro-controller. For popular or commonly used component parts, you can also check the manufacturer's website for additional documents that further describe how to use the component-these are called "application notes," and can be insightful.

Integrated Circuits

Some semi-conductors include multiple components housed on the same chip, which are called Integrated Circuits (IC). An Integrated Circuit can contain thousands of transistors, diodes, resistors, and logic gates on a tiny chip (see Figure 1-13). These components are available in the larger "through-hole" packages and newer versions are being made on super-small "surface mount" chips.

Here you can see an 8-pin Dual Inline Package (DIP) IC (left), and a 16-pin DIP IC (right). The Arduino's Atmega168/328 is a 28-pin DIP IC (14 pins on each side).

Figure 1.13. Here you can see an 8-pin Dual Inline Package (DIP) IC (left), and a 16-pin DIP IC (right). The Arduino's Atmega168/328 is a 28-pin DIP IC (14 pins on each side).

Packages

We use different types of semi-conductors in various packages. The component package refers to the physical shape, size, and pin-configuration in which it is available. Different packages allow for various heat dissipation depending on the semi-conductor. If you are going for high power, larger cases usually dissipate heat better. For low power circuits, it is usually desirable to be as compact as possible, so smaller package sizes might be of interest. The most common packages that we use are the TO-92 and the T0-220 (see Figure 1-14), which house anything from temperature sensors to transistors to diodes.

The smaller TO-92 IC package (left) is used for low-power voltage regulators, signal transistors, and sensor ICs. The larger TO-220 package (right) is used for higher power voltage regulators, power Mosfet switches, and high-power diodes.

Figure 1.14. The smaller TO-92 IC package (left) is used for low-power voltage regulators, signal transistors, and sensor ICs. The larger TO-220 package (right) is used for higher power voltage regulators, power Mosfet switches, and high-power diodes.

The TO-92 is a smaller package that is usually used for low-power transistor switches and sensors. The TO-220 packaged is commonly used for high-powered applications and is the basis for most power Mosfet transistors, capable of handling close to 75 amperes before the metal leads on the chip will fail. The TO-220 package also has a built-in metal tab used to help dissipate more heat from the package, and allowing a heat sink to be attached if needed.

Through-Hole Components

Throughout this book, we look for the easiest way to build and modify our projects. Usually that means using parts that can be replaced easily if needed and also using parts that are large enough for a beginner to feel comfortable soldering into place.

With respect to semi-conductor components, the term "through-hole" refers to any component whose leads are fed through holes drilled in the PCB and soldered to a copper "pad" on the bottom of the board. These parts are typically large enough to easily solder to a PCB, even for a beginner. Many through-hole components have pins that are much longer than needed, so it is recommended to solder the component in place and finish by snipping the excess from the bottom of each pin to avoid any short-circuits on the under-side of the PCB.

IC Sockets

An "IC socket" is a plastic base that has metal contacts, which are intended to be soldered to the PCB (see Figure 1-15). The IC is then inserted into the socket after soldering is complete, alleviating the risk of overheating the IC during the soldering process. This is also helpful if something were to go wrong in the circuit, which causes the IC to fail. It is easily replaced without the need for additional soldering. We use IC sockets anytime we are able to for these reasons.

An IC socket used to solder onto a PCB, in order to place the actual IC into once the circuit is built. These sockets are usually less than $1 each, so I try to use them whenever possible.

Figure 1.15. An IC socket used to solder onto a PCB, in order to place the actual IC into once the circuit is built. These sockets are usually less than $1 each, so I try to use them whenever possible.

Surface-Mount Components (SMT or SMD)

With the technological leaps that manufacturers have made in recent years, smaller has become better. This has led to decreasing the size of components and ICs so that they can create smaller devices that do the same thing as their larger counterparts.

Although these devices are internally the same, their lead pins are much smaller and might be a bit frustrating for a beginner when trying to solder them to a PCB (see Figure 1-7 (left) for a surface-mount resistor). The main difference between these and through-hole components is that they are soldered to the top of the PCB and no holes need to be drilled in the PCB. They also typically sit close to the PCB and require little room to mount them, making them desirable for space-saving applications.

Some surface mount parts have exposed terminals that are able to be soldered by normal means, but, others have their terminals exposed only on the underside of the chip, which requires that they are soldered in an surface mount reflow oven. Although a make-shift reflow oven can be emulated using a toaster-oven, we attempt to stay away from surface mount parts in the circuits we build in this book to avoid the added difficulty present with SMD parts.

Note

In Chapter 8, I could not find a through-hole part that was needed to complete the project, so I had to use a surface-mount chip. I looked for the biggest one available so it would be easy to solder, and it was easier than I expected.

With a few electronics terms and definitions out of the way, we should move on to some Arduino-specific topics.

Arduino Primer

The Arduino is a programmable, AVR-based micro-controller with a robust set of features, 20 I/O pins, and it is inexpensive at around $30 for an assembled board. The basic Arduino connects to your computer using a standard USB cable, which provides both a serial connection to your PC and the 5v power supply needed to operate (no batteries required when using USB cable).

The Arduino team even developed a program to run on your computer (available for Windows, Mac, and Linux) that is used to compile your code and easily upload it to the Arduino board. The Arduino board has a USB adapter chip (FTDI) that enables your computer to recognize it as a serial device once plugged in. The most current drivers and software needed for programming can be downloaded at the www.arduino.cc website free of charge. Check out the "Getting Started" section of the Arduino home page to see step-by-step instructions for installing the Arduino software to your specific operating system:

http://arduino.cc/en/Guide/HomePage

The Arduino software is referred to as an Integrated Development Environment (IDE). This is the programming software that is used to upload code to the Arduino micro-controller. The IDE contains a text-editor and compiler that translates the simplified Arduino programming language (that we write) into a more complicated binary hex file that can be uploaded directly to the micro-controller.

The Arduino language is a variant of the C++ programming language, but uses built-in libraries to simplify complicated coding tasks to make it easier for beginners to pick up. If you have no prior programming experience, you will benefit greatly from the Arduino reference pages. These pages show each Arduino command and how to use it with an example snippet of code. You can either visit the Arduino website to view these pages, or check the Arduino IDE under "Help > Reference":

http://www.arduino.cc/en/Reference/HomePage

Because the Arduino language is an open source project, it is constantly being improved and updated. New versions of the Arduino IDE are released often, so it is best to update your system with the newest release available. Most of the projects in this book use the IDE 0019–0021, which can be downloaded at the Arduino homepage.

Arduino Variants

The Arduino comes in many different shapes and sizes, but there are only two models that use completely different chips: the Standard and the Mega. The Standard is the basic Arduino and refers to the Atmega8/168/328 chip, whereas the Mega is a different Arduino board with more I/O pins and uses the beefier Atmega1280 chip. Because the Arduino design is open source, anyone can design a new version of the Arduino board and distribute it as he pleases. For this reason, several other manufacturers have created Arduino "clones" that operate as the standard Arduino, but are made by a third party or offered as a kit to build yourself.

There are also Arduino boards that do not have an onboard USB converter, so you must use a special USB (FTDI) programming cable to program them (see Figure 1-18—left). The FTDI programming cable is about $20 from Sparkfun.com (part #DEV-09718). The upside to using the FTDI chip on a separate programming cable instead of the Arduino board itself is that you can then easily make your own Arduino-type boards, using only an Atmega328 chip, 16mHz resonator, and a few other easy-to-find components. If you add a few header pins, you can even program your homemade Arduino boards in-circuit (see Figure 1-16).

After buying the FTDI programming cable from Sparkfun.com, I went on an unintended but inspired building spree and made about 15 different Arduino clones that had different pin configurations, screw-terminals, R/C headers, powered Servo plugs, and even a few stackable Arduino extension boards. Although none of my homemade boards had onboard USB functionality, several had a 6-pin FTDI programming header to enable in-circuit programming. This way, I had to purchase only $8 in parts to build each board. If you enjoy prototyping, this is the cost-effective way to go.

You might notice in Figure 1-16, that the homemade Arduino board has very few parts. This is because there are only three absolutely necessary parts to make a homemade Arduino board work: the Atmega168 chip, 16MHz resonator, and +5v voltage regulator. The capacitors, power LED, header pins, and reset button are not required, but recommended for reliability and easy integration into a project.

Three different types of Arduino boards

Figure 1.16. Three different types of Arduino boards

Note that a homemade variation on the left uses the same Atmega168 chip as the Standard Arduino but is programmed using an FTDI programming cable; the center board is a Standard Arduino Duemilanove; and the last board on the right is an Arduino Mega.

Standard Arduino

The standard Arduino was originally based on the Atmel Atmega8 chip, a 28-pin microcontroller with 20 total available Inputs/Outputs (I/O). Of the 20 controllable pins, 6 are used as Analog inputs, 6 can be used as PWM outputs, and there are 2 external interrupts available for use. The standard Arduino runs at 16mHz and has three adjustable timers to allow for changing the PWM frequencies (discussed later in this chapter).

There are two other variations that are pin-compatible with this chip, the Atmgea168 and the Atmega328 each containing more onboard memory than the previous. The newer versions of the standard Arduino come with the newer Atmega328 chips instead of the older Atmega8/168 chips. If you have an older model Arduino and would like to upgrade to the newer chip with more memory, you can purchase a new Atmega328 chip for around $5.50 and simply plug it into your existing Arduino (these chips are pin-compatible and physically the same). This should be an issue only if you have a sketch that uses more memory than the Atmega8 has available-a problem for more advanced users and larger projects.

One of the key advantages to this chip is that it is available in a through-hole package IC that can be removed from the Arduino board and is easily mounted on a breadboard or soldered onto perforated prototyping board to make a standalone Arduino clone for permanent use in a project. The through-hole Atmega328 chip is perfect for prototyping, paired with a 28-DIP IC socket.

Note

If you somehow destroy a pin on your Arduino, it can most likely be remedied by replacing the Atmega168/328 chip with a new one-they are about $5.50 each and you can buy them with the Arduino bootloader preinstalled from Sparkfun.com (part #DEV-09217). I have had this happen several times and am still using my first Arduino board!

Arduino Mega

The Arduino Mega is the other model that uses a beefier Atmega1280 chip, which is like a standard Arduino on steroids, featuring 70 total I/O pins (see Figure 1-16—right). Of these there are 16 Analog inputs, 12PWM outputs, and 6 external interrupts available. The same software is used for all Arduino models and each command in the Arduino language works on each device.

This model is available only with the Atmega1280 surface mounted to the board and cannot be removed, thus limiting its versatility compared to the standard Arduino. The initial cost of this board was around $75 but several companies have introduced Arduino Mega clones that can be found for around $45. If you can afford an extra Arduino, it is nice to have around when more I/O pins are needed without changing any hardware.

Clones

Although there are only two models that use different base processing chips, there is an endless number of Arduino clones circulating around the Internet for you to build or buy in many cases. An Arduino clone, is not an officially supported Arduino board, but instead each clone board might have its own specific pin setup, size, and intended purpose. All that is required to be compatible with the Arduino, is that it uses the Arduino IDE software to upload the Arduino code.

There are even clones that stray away from the standard hardware specifications, but are still supported by the Arduino IDE, like the Arduino Pro Mini that operates at 3.3v and 8MHz instead of 5v and 16MHz as the standard. You can use any of the Arduino clones with the Arduino IDE software, but you must select the correct board from the Tools menu.

In short, it does not matter what Arduino you buy to get started with this book-as long as it mentions Arduino, it should work just fine. We specifically use the standard Arduino for several projects, an Arduino mega for one project, an Ardupilot (GPS enabled Arduino) for one chapter, and several homemade Arduino clones. Now let's look at the Arduino IDE to get a better understanding of how it works.

Arduino IDE

Assuming you have already followed the instruction to download and install the Arduino IDE, you now need to open the program. The first time you open the Arduino IDE on your computer, it might ask you where you would like to place your "sketchbook" (if using Windows or Linux). If using a Mac, your sketchbook should be automatically created at user/documents/Arduino. Your sketchbook is the folder that the IDE will store all of the sketches that you create within the IDE. After you select your sketchbook folder, all of its contents will appear in the File > Sketchbook menu.

Upon opening the IDE, you will notice a blank white screen ready for you to enter code, and a blue colored toolbar at the top of the screen that provides shortcut buttons to common commands within the IDE (see Figure 1-17). Table 1-3 provides a description of each one.

The IDE has a toolbar at the top that contains shortcuts for common tasks. You can hover your mouse cursor over each button when using the IDE to see a description.

Figure 1.17. The IDE has a toolbar at the top that contains shortcuts for common tasks. You can hover your mouse cursor over each button when using the IDE to see a description.

Table 1.3. Arduino IDE Toolbar Buttons

Arduino IDE Toolbar Buttons

Compile: This button is used to check the "syntax" or correctness of your code. If you have anything labeled incorrectly or any variables that were not defined, you will see an error code in red letters at the bottom of the IDE screen. If, however, your code is correct, you will see the message "Done Compiling" along with the size of your sketch in kilo-bytes. This is the button you press to check your code for errors.

Arduino IDE Toolbar Buttons

Stop: If you are running a program that is communicating with your computer, pressing this button will stop the program.

Arduino IDE Toolbar Buttons

New: This button clears the screen and enables you to begin working on a blank page.

Arduino IDE Toolbar Buttons

Open: This button lets you open an existing sketch from file. You will use this when you need to open a file that you have downloaded or have previously worked on.

Arduino IDE Toolbar Buttons

Save: Select this button to save your current work.

Arduino IDE Toolbar Buttons

Upload: This is the magic button, which enables you to upload your code to the Arduino. The IDE compiles your code before it tries to upload it to the board, but I always press the Compile button before uploading. You might get an error message if you have the wrong board selected from the Tools > Board menu.

Arduino IDE Toolbar Buttons

Serial Monitor: The serial monitor is a tool for debugging (figuring out what is wrong). The Arduino language includes a command to print values that are gathered from the Arduino during the loop function, and print them onto your computer screen so you can see them. This feature can be extremely helpful if you are not getting the result you anticipated, because it can show you exactly what is going on. We use this feature extensively to test the code before installing into a project.

The Sketch

The sketch is nothing more than a set of instructions for the Arduino to carry out. Sketches created using the Arduino IDE are saved as .pde files. To create a sketch, you need to make the three main parts: Variable declaration, the Setup function, and the main Loop function.

Variable Declaration

Variable declaration is a fancy term that means you need to type the names of each input or output that you want to use in your sketch. You can rename an Arduino input/output pin number with any name (i.e., led_pin, led, my_led, led2, pot_pin, motor_pin, etc.) and you can refer to the pin by that name throughout the sketch rather than the pin number. You can also declare a variable for a simple value (not attached to an I/O pin) and use that name to refer to the value of that variable. Thus, when you want to use the value of the variable later in the sketch, it is easy to recall. These variables can be declared as several different types, but the most common that we use is an integer (int). In the Arduino language, an integer variable can contain a value ranging from −32,768 to 32,767. Other variable types are used in later examples (i.e., float, long, unsigned int, char, byte, etc.) and are explained when used.

Following is an example variable declaration:

int my_led = 13;

Instead of sending commands to the pin number of the Arduino (i.e., 13), we rename pin 13 to be "my_led." Anytime we want to use pin 13, we call my_led instead. This is helpful when you have many references to my_led throughout the sketch. If you decide to change the pin number that my_led is attached to (i.e., to pin 4), you change this once in the variable declaration and then all references to my_led lead to pin 4—this is meant for easier coding.

The Setup Function

This function runs once, each time the Arduino is powered on. This is usually where we determine which of the variables declared are inputs or outputs using the pinMode() command.

Example setup() function:

void setup() {
  pinMode(my_led, OUTPUT);
}

We just used the setup() function to declare my_led as an output (OUTPUT needs to be all CAPS in the code). You can do other things in the setup() function like turn on the Arduinos Serial port, but that is all for now.

The Loop Function

This function is where the main code is placed and will run over and over again continuously until the Arduino is powered off. This is where we tell the Arduino what to do in the sketch. Each time the sketch reaches the end of the loop function, it will return the beginning of the loop.

In this example, the loop function simply blinks the LED on and off by using the delay(ms) function. Changing the first delay(1000) effects how long the LED stays on, whereas changing the second delay(1000) effects how long the LED stays off.

The following is an example loop() function:

void loop() {
                                 // beginning of loop, do the following things:
  digitalWrite(my_led, HIGH);    // turn LED On
  delay(1000);                   // wait 1 second
  digitalWrite(my_led, LOW);     // turn LED Off
  delay(1000);                   // wait 1 second
                                 // end loop, go back to beginning of loop
}

If you combine these sections of code together, you will have a complete sketch. Your Arduino should have an LED built in to digital pin 13, so this sketch renames that pin my_led. The LED will be turned on for 1,000 milliseconds (1 second) and then turned off for 1,000 milliseconds, indefinitely until you unplug it. I encourage you to change the delay() times in the Listing 1-1 and upload to see what you find.

Example 1.1. Blink example

//Code 1.1 – Blink example
// Blink the LED on pin 13

int my_led = 13;                 // declare the variable my_led

void setup() {
  pinMode(my_led, OUTPUT);       // use the pinMode() command to set my_led as an OUTPUT
}

void loop() {
  digitalWrite(my_led, HIGH);    // set my_led HIGH (turn it On)
  delay(1000);                   // do nothing for 1 second (1000mS)
  digitalWrite(my_led, LOW);     // set my_led LOW (turn it Off)
delay(1000);                     // do nothing again for 1 second
}
                                 // return to beginning of loop

// end code

You can copy this code example into your Arduino IDE screen and press the Compile button (see Figure 1-18). With your Arduino plugged in to the USB port, you should be able to press the Upload button to send the code to the Arduino. If you type the code manually, you do not have to add the comments because they will not be compiled into code. This code does not require any input after it is uploaded-but you can change the delay() time and reupload to see the difference.

Note

You will notice that in many sketches, there are comments throughout that are denoted by adding two backslashes (//) and then some text. Any text added after the two backslashes will not be converted into code and will are for reference purposes only: // This is a comment; it will not be processed as code.

Screen of the Arduino IDE program with the Blink example sketch in Listing 1-1

Figure 1.18. Screen of the Arduino IDE program with the Blink example sketch in Listing 1-1

Signals

There are several types of signals that the Arduino can both read and write, but they can be distinguished into two main groups: digital and analog. A digital signal is either +5v or 0v but an analog signal can be any linear voltage between 0v and +5v. You can also read and write digital pulse signals and Serial commands using the Arduino and various included functions.

Digital Signals

The Arduino Uno/Diecimila/Duemilanove has 14 digital input/output pins labeled D0-D13. Each digital pin on the Arduino can be configured as either an INPUT or an OUTPUT by using the pinMode() command in the setup() function. A digital signal on the Arduino can be only in two states: HIGH or LOW. This is true whether the digital signal is an input or an output. When a pin is at 5v it is considered HIGH, and when it is at 0v or GND, it is considered LOW.

Digital Inputs

Digital inputs are useful if you want to determine when a button has been pressed (i.e., a bump sensor), whether a switch is on or off, or if you want to read a pulse from a sensor to determine its hidden value. To determine whether an input is HIGH or LOW, you use the digitalRead(pin) command. Sometimes a digital input signal might not always have a full 5v available, so the threshold to drive an input pin HIGH is around 3v, and anything below this threshold is considered to be LOW.

R/C receivers used for hobby airplanes/boats/cars output "servo signals," which are pulses of electricity that are driven HIGH for a short but specific length of time before going back to LOW. The duration of the pulse specifies the position of the R/C transmitter control sticks. If you try to check this type of signal with your voltage-meter, you won't see the needle move. That's because the pulse is too short to register on the meter, but any digital input on the Arduino can read a pulse length like a servo signal using the pulseIn() command.

We can read information from a digital input, not only by whether it is HIGH or LOW, but by how long it is HIGH or LOW. The Arduino is good at precisely measuring the length of short electrical pulses, down to about 10 microseconds! This means that quite a bit of information can be encoded into a digital input in the form of a pulse or Serial command.

Digital Outputs

A digital output is equally simple, yet can be used to do complicated tasks. If you have an Arduino, you have seen the Hello World! sketch, which simply blinks the LED on pin D13 that is built in to the board—this is the most simple use of a digital output. Each pin on the Arduino is capable of supplying or sourcing about 40mA of current at 5v.

Often the current supplied by an Arduino pin is not sufficient to power anything more than an LED, so a level-shifter or amplifier can be used to increase the voltage and current that is switched ON and OFF by the Arduino to a more usable level for controlling motors, lights, or relays. Digital pins are also the basis for serial data transfer, which can send multiple commands through a single digital output (Listing 1-2).

Example 1.2. Setting up a digital input and output in the same sketch

// Code Example: Input and Output
// This code will set up a digital input on Arduino pin 2 and a digital output on
Setting up a digital input and output in the same sketch
Arduino pin 13. // If the input is HIGH the output LED will be LOW int switch_pin = 2; // this tells the Arduino that we want to name digital
Setting up a digital input and output in the same sketch
pin 2 "switch_pin"
int switch_value;      // we need a variable to store the value of switch_pin, so we make
Setting up a digital input and output in the same sketch
"switch_value" int my_led = 13; // tell Arduino to name digital pin 13 = "my_led" void setup(){ pinMode(switch_pin, INPUT); // let Arduino know to use switch_pin
Setting up a digital input and output in the same sketch
(pin 2) as an Input pinMode(my_led, OUTPUT); // let Arduino know to use my_led
Setting up a digital input and output in the same sketch
(pin 13) as an Output } void loop(){ switch_value = digitalRead(switch_pin); // read switch_pin and record the value
Setting up a digital input and output in the same sketch
to switch_value if (switch_value == HIGH){ // if that value "is equal to (==)"
Setting up a digital input and output in the same sketch
HIGH... digitalWrite(my_led, LOW); // ... then turn the LED off } else { // otherwise... digitalWrite(my_led, HIGH); // ...turn the LED on. } } // end code

This code example makes use of a simple if statement to test the value of the switch_pin. You can use a jumper wire connected to pin 2 of the Arduino (switch_pin)—connect the other end of the jumper wire to either GND or +5v to see the LED change values. If the input value is HIGH, the Arduino sets the my_led pin LOW (Off). If the input value is LOW, the Arduino sets the my_led pin HIGH (On). To learn more about if/else statements with examples, see the Arduino Reference pages at http://arduino.cc/en/Reference/Else.

Special Case: External Interrupts

When using the digitalRead() command for an input pin on the Arduino, you receive only the value that is available at the exact moment when the command is called. However, the Arduino has the capability to determine when the state of a pin changes, without using the digitalRead() command. This is called an interrupt. An interrupt is an input method that notifies you when the state of particular pin changes, without you checking. The standard Arduino has two external interrupts on digital pins 2 and 3. Whereas the Arduino Mega has six external interrupts on digital pins 2, 3, 21, 20, 19, and 18.

The interrupt must be initiated once in the setup and must use a special function called an Interrupt Service Routine (ISR) that is run each time the interrupt is triggered (see Code 1.3). The interrupts can be set to trigger when a pin changes from LOW to HIGH (RISING), from HIGH to LOW (FALLING), or simply any time the pin CHANGES states in either direction.

To better illustrate this process, imagine that you are mowing the grass in your backyard before lunch. You know that lunch will be ready shortly and you don't want to miss it, but you also don't want to stop your lawn mower every 5 minutes to go inside and check the food. Instead, you ask the cook to come outside and tell you when lunch is ready. This way, you can continue mowing the grass without worrying about missing lunch.

You are interrupted when lunch is ready (the pin changes states), and after you are done eating (the Interrupt Service Routine), you can return to mowing the grass (the main loop).

This is helpful because regularly checking the state of a pin that does not regularly change states can slow down the other functions in the main loop. The interrupt will simply STOP the main loop for only as long as it takes to run through the ISR, and then immediately return to the exact place in the loop where it left off. You can use an interrupt pin to monitor a bump-sensor on a robot that needs to stop the motors as soon as it is pressed, or use an interrupt pin to capture pulses from an R/C receiver without pausing the rest of the program.

Listing 1-3 requires the use of a Hobby R/C radio system. The R/C receiver can be powered using the Arduinos +5v and GND, whereas the R/C signal should be connected to Arduino pin 2. If you do not yet have an R/C receiver, you can test this example later.

Example 1.3. Using an interrupt pin to capture an R/C pulse length

// Code Example – Using an Interrupt pin to capture an R/C pulse length
// Connect signal from R/C receiver into Arduino digital pin 2
// Turn On R/C transmitter ed when using the Arduinos two external interrupts is that
// If valid signal is received, you should see the LED on pin 13 turn On.
// If no valid signal is received, you will see the LED turned Off.

int my_led = 13;

volatile long servo_startPulse;
volatile unsigned int pulse_val;
int servo_val;

void setup() {
  Serial.begin(9600);
  pinMode(servo_val, INPUT);

  attachInterrupt(0, rc_begin, RISING);     // initiate the interrupt for a rising signal
}

// set up the rising interrupt
void rc_begin() {
  servo_startPulse = micros();
  detachInterrupt(0);  // turn Off the rising interrupt
  attachInterrupt(0, rc_end, FALLING); // turn On the falling interrupt
}

// set up the falling interrupt
void rc_end() {
  pulse_val = micros() - servo_startPulse;
  detachInterrupt(0);  // turn Off the falling interrupt
  attachInterrupt(0, rc_begin, RISING); // turn On the rising interrupt
      }

void loop() {
  servo_val = pulse_val; // record the value that the Interrupt Service Routine calculated
if (servo_val > 600 && servo_val < 2400){
      digitalWrite(my_led, HIGH);   // if the value is within R/C range, turn the LED On
    Serial.println(servo_val);
}
else {
      digitalWrite(my_led, LOW);  // If the value is not within R/C range, turn the LED Off.
}
     }

This Arduino code looks for any valid R/C servo pulse signal from an R/C receiver plugged into Arduino digital pin 2, which is where the Arduino "external interrupt 0″ is located. If a valid pulse is detected (must be between 600uS and 2400uS in length), the LED on digital pin 13 will turn on. If no pulse is detected, the LED will stay Off.

Because Listing 1-3 uses an interrupt, it captures only the R/C pulses when they are available instead of checking for a pulse each loop cycle (polling). Some projects require many different tasks to be carried out each loop cycle (reading sensors, commanding motors, sending serial data, etc.), and using interrupts can save valuable processing time by only interrupting the main loop when something changes at the interrupt pin.

The only problem I have encountered when using the Arduinos two external interrupts is that they are available only on digital pins 2 and 3 of the Arduino, which conflicts with the use of digital pin 3 as a PWM output.

Analog Signals

We have established that a digital I/O signal must either be LOW (0v) or HIGH (5v). Analog voltages can be anywhere in between (2v, 3.4v, 4.6v, etc.) and the Arduino has six special inputs that can read the value of such voltages. These six 10-bit Analog inputs (with digital to analog converters) can determine the exact value of an analog voltage.

Analog Inputs

The input is looking for a voltage level between 0-5vdc and will scale that voltage into a 10-bit value, or from 0-1023. This means that if you apply 0v to the input you will see an analog value of 0; apply 5v and you will see an analog value of 1023; and anything in-between will be proportional to the input.

To read an analog pin, you must use the analogRead() command with the analog pin (0-5) that you would like to read. One interesting note about Analog inputs on the Arduino is that they do not have to be declared as variables or as inputs in the setup. By using the analogRead() command, the Arduino automatically knows that you are trying to read one of the A0-A5 pins instead of a digital pin.

A potentiometer (variable resistor) acts as a voltage divider and can be useful for outputting a low-current analog voltage that can be read by the Arduino using an analog input (see Figure 1-19). Listing 1-4 provides an example of how to read a potentiometer value.

This typical turn-style potentiometer has three terminals. The outer two terminals should be connected to GND and +5v respectively (orientation does not matter), whereas the center terminal should connect to an analog Input pin on the Arduino.

Figure 1.19. This typical turn-style potentiometer has three terminals. The outer two terminals should be connected to GND and +5v respectively (orientation does not matter), whereas the center terminal should connect to an analog Input pin on the Arduino.

Example 1.4. How to read an Analog input

// Code Example – Analog Input
// Read potentiometer from analog pin 0
// And display 10-bit value (0-1023) on the serial monitor
// After uploading, open serial monitor from Arduino IDE at 9600bps.

int pot_val;    // use variable "pot_val" to store the value of the potentiometer

void setup(){
    Serial.begin(9600);  // start Arduino serial communication at 9600 bps
}

void loop(){
    pot_value = analogRead(0);  // use analogRead on analog pin 0
    Serial.println(pot_val);    // use the Serial.print() command to send the value to the
How to read an Analog input
monitor } // end code

Copy the previous code into the IDE and upload to your Arduino. This sketch enables the Serial port on the Arduino pins 0 and 1 using the Serial.begin() command-you will be able to open the Serial monitor from the IDE and view the converted analog values from the potentiometer as it is adjusted.

Analog Outputs (PWM)

This is not technically an analog output, but it is the digital equivalent to an analog voltage available at an output pin. This feature is called Pulse Width Modulation and is an efficient way of delivering a voltage level that is somewhere between the Source and GND.

In electronics, you hear the term PWM used quite frequently because it is an important and usable feature in a micro-controller. The term stands for Pulse Width Modulation and is the digital equivalent to an Analog voltage you find with a potentiometer. The Arduino has six of these outputs on digital pins 3, 5, 6, 9, 10, and 11. The Arduino can easily change the duty-cycle or output at any time in the sketch, by using the analogWrite() command.

To use the analogWrite(PWM_pin, speed) command, you must write to a PWM pin (pins 3, 5, 6, 9, 10, 11). The PWM duty-cycle ranges from 0 to 255, so you do not want to write any value above or below that to the pin. I usually add a filter to make sure that no speed value above 255 or below 0 is written to a PWM pin, because this can cause erratic and unwanted behavior (see Listing 1-5).

Example 1.5. How to command a PWM output

// Code Example – Analog Input – PWM Output
// Read potentiometer from analog pin 0
// PWM output on pin 3 will be proportional to potentiometer input (check with voltage meter).

int pot_val;     // use variable "pot_val" to store the value of the potentiometer
int pwm_pin = 3; // name pin Arduino PWM 3 = "pwm_pin"

void setup(){
    pinMode(pwm_pin, OUTPUT);
}

void loop(){

    pot_value = analogRead(0);  // read potentiometer value on analog pin 0

    pwm_value = pot_value / 4;  // pot_value max = 1023 / 4 = 255

    if (pwm_value > 255){       // filter to make sure pwm_value does not exceed 255
        pwm_value = 255;
    }
    if (pwm_value < 0){         // filter to make sure pwm_value does not go below 0
        pwm_value = 0;
    }

    analogWrite(pwm_pin, pwm_value);  // write pwm_value to pwm_pin
}
// end code

This code reads the potentiometer as in Listing 1-4, but now it also commands a proportional PWM output signal to Arduino digital pin 3. You can check the output of pin 3 with a voltage meter-it should read from 0v-5v depending on the position of the potentiometer.

If you have a 330ohm resistor and an LED laying around, you can connect the resistor in series with either LED lead (just make sure the LED polarity is correct) to Arduino pin 3 and GND to see the LED fade from 0% to 100% brightness using a digital PWM signal. We cannot use the LED on pin 13 for this example, because it does not have PWM capability.

Duty-Cycle

In a 1kHz PWM signal, there are 1,000 On/Off cycles each second that are 1 millisecond long each. During each of these 1mS cycles, the signal can be HIGH part of the time and LOW the rest of the time. A 0% duty cycle indicates that the signal is LOW the entire 1mS, whereas a 100% duty-cycle is HIGH the entire 1mS. A 70% duty-cycle is HIGH for 700 microseconds and LOW for the remaining 300 uS, for each of the 1,000 cycles per second-thus the overall effect of the signal is 70% of the total available.

The duty-cycle of a PWM output on the Arduino is determined using the analogWrite(pin, duty-cycle) command. The duty cycle can range from 0-255 and can be changed at any time during the program-it is important to keep the duty-cycle value from exceeding 255 or going below 0, because this will cause unwanted effects on the PWM pin.

Most motor speed controllers vary the duty cycle (keeping the frequency constant) of the PWM signal that controls the motor power switches in order to vary the speed of the motor. This is the preferred way to control the speed of a motor, because relatively no heat is wasted in the switching process.

Frequency

Frequency is rated in Hertz (Hz), and reflects the number of (switching) cycles per second. A switching cycle is a short period of time when the output line goes from completely HIGH to completely LOW. PWM signals typically have a set frequency and varying duty-cycle, but you can change the Arduino PWM frequencies from 30Hz up to 62kHz (that's 62,000Hz) by adding a single line of code for each set of PWM pins.

At 30Hz, the output line is switched only from HIGH to LOW 30 times per second, which will have visible effects on a resistive load like an LED making it appear to pulse on and off. Using a 30Hz frequency works just fine for an inductive load like a DC motor that takes more time to deenergize than allowed between switching cycles, resulting in a seemingly smooth operation.

The higher the frequency, the less visible the switching effects are on the operation of the load, but too high a frequency and the switching devices start generating excess heat. This is because as the frequency increases, the length of the switching-cycle is decreased (see Table 1-4), and if the switching cycle is too short, the output does not have enough time to switch completely from HIGH to LOW before going back to HIGH. The switch instead stays somewhere in between on and off, in a cross-conduction state (also called "shoot-through") that will generate heat.

It is simple to determine the total length of each duty-cycle by dividing the time by the frequency. Because the frequency determines the number of duty-cycles during a 1-second interval, simply divide 1 second (or 1,000 milliseconds) by the PWM frequency to determine the length of each switching cycle.

For quick reference, here are some common time/speed conversions:

  • 1000 milliseconds = 1 second

  • 1000 microseconds (uS) = 1 millisecond (mS)

  • 1,000,000 microseconds (uS) = 1 second

  • 1000 hertz (Hz) = 1 kilohertz (1 kHz)

Table 1-4 shows all of the available frequencies for the Arduino PWM pins and which pins each frequency is available on.

Table 1.4. PWM Frequency Versus Cycle-Time Chart

PWM Frequency in Hertz

Time per Switching Cycle

Arduino PWM Pins

30Hz

32 milliseconds

9 & 10, 11 & 3

61Hz

16 milliseconds

5 & 6

122Hz

8 milliseconds

9 & 10, 11 & 3

244Hz

4 milliseconds

5 & 6, 11 & 3,

488Hz

2 milliseconds

9 & 10, 11 & 3

976Hz (1kHz)

1 millisecond (1,000 uS)

5 & 6, 11 & 3,

3,906Hz (4kHz)

256 microseconds

9 & 10, 11 & 3

7,812Hz (8kHz)

128 microseconds

5 & 6

31,250Hz (32kHz)

32 microseconds

9 & 10, 11 & 3

62,500Hz (62kHz)

16 microseconds

5 & 6

For more information on changing the system timers to operate at different PWM frequencies, visit the Arduino playground website:

http://www.arduino.cc/playground/Main/TimerPWMCheatsheet

Homemade PWM Example

To simulate frequency and duty-cycle using manual timing (for learning and experimenting purposes), combine the Listings 1-1 (Blink) and 1-4 (Potentiometer) to enable you to change the frequency and duty-cycle of a pseudo-PWM output on pin 13 (the built-in LED). All you need is a potentiometer connected to Analog pin 0 of your Arduino.

Using manual timing and the built-in LED on Arduino pin 13, we can simulate a PWM signal at different frequencies and with different duty-cycles from 0% to 100%, as shown in Listing 1-6.

Example 1.6. Pseudo-PWM example

//Code Example – Pseudo-PWM example (home-made Pulse Width Modulation code)
// Blink the LED on pin 13 with varying duty-cycle
// Duty-cycle is determined by potentiometer value read from Analog pin 0
// Change frequency of PWM by lowering of variable "cycle_val" to the following
Pseudo-PWM example
millisecond values: // 10 milliseconds = 100 Hz frequency (fast switching) // 16 milliseconds = 60 Hz (normal lighting frequency) // 33 milliseconds = 30 Hz (medium switching) // 100 milliseconds = 10 Hz (slow switching) // 1000 milliseconds = 1 Hz (extremely slow switching) - unusable, but try it anyways. int my_led = 13; // declare the variable my_led
int pot_val;       // use variable "pot_val" to store the value of the potentiometer
int adj_val;       // use this variable to adjust the pot_val into a variable frequency value
int cycle_val = 33;  // Use this value to manually adjust the frequency of the pseudo-PWM
Pseudo-PWM example
signal void setup() { pinMode(my_led, OUTPUT); // use the pinMode() command to set my_led as an OUTPUT } void loop() { pot_val = analogRead(0); // read potentiometer value from A0 (returns a value from 0 - 1023) adj_val = map(pot_val, 0, 1023, 0, cycle_val); // map 0 - 1023 analog input from
Pseudo-PWM example
0 - cycle_val digitalWrite(my_led, HIGH); // set my_led HIGH (turn it On) delay(adj_val); // stay turned on for this amount of time digitalWrite(my_led, LOW); // set my_led LOW (turn it Off) delay(cycle_val - adj_val); // stay turned off for this amount of time } // end code

Listing 1-6 shows how to adjust the duty-cycle for an LED that is blinking at 60Hz (16 switching cycles each second). This example sketch is for educational purposes only. Because the value of cycle_val also dictates how many steps are in the LEDs fading range, you will lose duty-cycle resolution as you increase frequency. I chose 60Hz to demonstrate a frequency that is about the same as the lightbulbs in your home. At this switching speed, your human eye cannot easily detect the pulsing and the LED appears to be solidly emitting light proportional to the duty-cycle.

If you want to manually increase the frequency of the pseudo-PWM signal in the previous sketch, you can change the cycle_val variable to something a bit higher (lower frequency). – To change the frequency from 60Hz to 30Hz, you need to change the cycle time by changing the variable cycle_val from 16 milliseconds to 33 milliseconds. You can still operate the potentiometer to achieve the same duty-cycles, but the results will be noticeably less smooth. As the PWM frequency falls below 60Hz, you can see a pulsing sensation in the LED at any duty-cycle (except 100%).

Now that we have discussed several of the basic Arduino functions, let's discuss the basics of circuit building.

Building Circuits

It is one thing to be able to program the Arduino and test an electrical circuit, but what happens if you can't find the exact circuit that you need? It might be easiest for you to build the circuit yourself. First you need to know how to read electrical blueprints, called schematics. An electrical schematic shows a universal symbol for each electronic component (along with a name and value) and a depiction of how it connects to the other components in the circuit.

Circuit Design

Circuit designing can be done on a notepad or piece of paper, but replicating handmade circuits can be time-consuming and tedious. If you care to invest a small amount of time in your project, you can use an open-source or freeware program to create both a schematic and circuit-board design (PCB) for your circuit. I now prefer to do all of my circuit designing on the computer-even if I am not planning on etching a PCB from the design, I at least like to make a schematic for the circuit.

There are several good computer programs that can be used to design circuits. For beginners, I recommend the open-source program called Fritzing, which makes use of a nicely illustrated parts library to give the user a visual feel for how the circuit will look, as well as a proper schematic for each project. There is even an Arduino board available in the parts library for you to use in your schematics-I used this program to generate several of the smaller schematics and illustration examples.

Download Fritzing at: http://fritzing.org/

For the more serious user, Eagle CAD is an excellent circuit design program that can be used as freeware or paid versions, and has extensive parts libraries and professional design tools. This program is also used in several chapters to open and print PCB design files from your computer.

Download Eagle Cad at: http://www.cadsoft.de/

Eagle Cad enables you to create reliable, compact, and professional-looking PCBs that are tailored to fit your exact needs. You will spend a bit more time on the preparation of the circuit, but you will then be able to reproduce as many copies as you like easily-a tedious task using the simpler point-to-point wiring method. Don't be afraid of all the buttons available in the program. If you scan the mouse over a button, it will tell you what it does. Think of Eagle as a really geeky paint program.

This program is a printed circuit board (PCB) editor and has a freeware version available for hobby use (with board size restrictions). It enables you to open, edit, and print both Schematics and PC Board files with up to two layers and a 3.2″×4.0″ silkscreen area. Don't be fooled by the restricted size; it is more than large enough to build any of the circuits used in this book and plenty of others. If you did, however, want to build your own PC motherboard or something similar, you might need to buy the professional license for an unlimited PC board size.

We further discuss using design software to create circuits in Chapter 6. For now we focus on some different types of components and their function. Although there are many component parts available, there are only a handful of parts that are used in the projects throughout this book. Let's look at some pictures, electrical symbols, and descriptions of each.

Schematics

A schematic is a graphical representation of a circuit that uses a standard symbol for each electrical device with a number to represent its value. It can be helpful to ensure proper polarity and orientation of each device as it is placed into the circuit for soldering. A schematic can also stay the same, even if the values or packages of the devices used in the circuit change. See Table 1-5 for some common electrical components and symbols found in a schematic.

Table 1.5. Common Component Symbols That You Might Encounter When Reading a Schematic

Component

Schematic Symbol

Description

Common Component Symbols That You Might Encounter When Reading a Schematic
Common Component Symbols That You Might Encounter When Reading a Schematic

VCC: The common symbol for a battery power supply. A battery is a portable type of power supply that uses cells to store electrical charge. Cells can be arranged in different orders to produce specific voltage levels. Here is a 9v battery, typically used in a remote control or smoke detector.

Common Component Symbols That You Might Encounter When Reading a Schematic
Common Component Symbols That You Might Encounter When Reading a Schematic

Switch: A simple switch used to open or close a circuit. This type of switch, called a "momentary button switch" closes the circuit when the button is pushed. Upon releasing the button, the circuit will be opened again. These buttons are commonly used in electronic circuits for low-power applications.

Common Component Symbols That You Might Encounter When Reading a Schematic
Common Component Symbols That You Might Encounter When Reading a Schematic

Diode: The symbol for a diode, the back side of the triangle (left side) is called the "anode" or positive end, and the striped end (right side) is called the "cathode" or negative end. The diode acts as a one-way valve – there are many different types of diodes, and they also used to construct logic-gates, transistors, and nearly every other type of semi-conductor made. Get used to this symbol, as you see it often.

Common Component Symbols That You Might Encounter When Reading a Schematic
Common Component Symbols That You Might Encounter When Reading a Schematic

Light Emitting Diode (LED): LEDs are commonly used in electronics circuits as indicator lights because they are inexpensive, consume little current, last a long time, and are very bright for their size. I have a bag of various colored LEDs on my workbench, because it is inevitable that I will use at least one in each project.

Common Component Symbols That You Might Encounter When Reading a Schematic
Common Component Symbols That You Might Encounter When Reading a Schematic

Resistor: A resistor is a wire component with a specific resistance, used to resist the flow of current through a circuit or to a device in the circuit. Resistors are not polarized, meaning that current can flow in either direction and it does not matter what orientation they are installed.

Common Component Symbols That You Might Encounter When Reading a Schematic
Common Component Symbols That You Might Encounter When Reading a Schematic

Variable resistor (potentiometer): This is what you typically think of as a volume knob. A variable resistor uses a wiper mechanism to slide a contactor across a plane of linear variable resistance.

Typically, there are three pins on a potentiometer and the outer two are connected to +5v and GND (in either order), whereas the center tab is the variable analog voltage output of the potentiometer-the center tab should be connected to the input of the Arduino, or other control circuitry.

Common Component Symbols That You Might Encounter When Reading a Schematic
Common Component Symbols That You Might Encounter When Reading a Schematic

Transistor switch NPN: A transistor is the simplest type of digital switch. There are several different variations of transistors, but we use only BJT and Mosfet types. Pictured is a 2n3904 NPN bipolar junction transistor commonly used in electronic circuits as a switch for current levels up to about 200mA.

The BJT is commonly used as a high-frequency, low-power electronic switch that is easily controlled using an Arduino. The N-type transistor is considered a low-side switch that is often used in conjunction with P-type transistors.

Common Component Symbols That You Might Encounter When Reading a Schematic
Common Component Symbols That You Might Encounter When Reading a Schematic

Transistor switch PNP: The PNP transistor is similar to the NPN type, but it can be used only as a high-side switch. Pictured is the 2n3906 PNP transistor, which is also capable of switching loads up to 200mA and designed to complement the 2n3904 NPN type.

By combining PNP and NPN transistors together, you can create an amplifying circuit or signal buffer (see Chapter 3 for more information).

Common Component Symbols That You Might Encounter When Reading a Schematic
Common Component Symbols That You Might Encounter When Reading a Schematic

Capacitor: A capacitor is a device that can hold a specific amount of electrical charge, used to supply current to the rest of the circuit or absorb voltage spikes for signal smoothing. This electroclytic capacitor is rated at 100uF and 25v. You should always select a capacitor with a voltage rating that is at least 10v higher than the system operating voltage. Exceeding the voltage limit results in an exploding capacitor!

Some capacitors are polarized and have a designated GND terminal (denoted by a stripe or shorter lead pin), whereas others are non-polarized and can be placed in either direction.

Common Component Symbols That You Might Encounter When Reading a Schematic
Common Component Symbols That You Might Encounter When Reading a Schematic

Ceramic resonator: This ceramic resonator takes the place of a crystal and two capacitors, because it has two capacitors built-in. You simply connect the center pin to GND and the outer pins to the Xtal1 and Xtal2 pins of the Atmega168 chip (in either order). This device provides a base for all of the timing functions on the Arduino—think of it as a digital metronome.

Common Component Symbols That You Might Encounter When Reading a Schematic
Common Component Symbols That You Might Encounter When Reading a Schematic

Motor: This symbol usually indicates a standard two-wire DC motor. This DC motor with gear-box attached is a small hobby type motor that can be used in a robotic project. There are typically two wires used to operate this type of motor, where reversing the polarity to the wires will reverse the direction of the motor output shaft.

Common Component Symbols That You Might Encounter When Reading a Schematic
Common Component Symbols That You Might Encounter When Reading a Schematic

Voltage regulator: The LM7805 linear voltage regulator chip is useful to convert any DC voltage input from 6v–25v into a regulated output supply of +5v. It can supply only around 1 ampere of current, so you don't want to use this to power DC motors on a robot—but it works extremely well for prototyping on a breadboard or to power the Atmega168 in a homemade Arduino circuit.

 
Common Component Symbols That You Might Encounter When Reading a Schematic

GROUND (GND): This symbol universally signifies the GND signal in a circuit. Every circuit has a GND signal, because it is the return path that completes the circuit-all of the GND signals in a circuit should be connected together, and lead back to the negative terminal of the power supply.

In Figure 1-20, we use some of the symbols from Table 1-5 for a simple circuit schematic with a battery (VCC1), switch (S1), current limiting resistor (R1), and an LED light (LED1). In the schematic you can see the symbols for each component connected with black lines, denoting an electrical connection. To see what the schematic looks like when connected, see Figure 1-21.

This schematic shows the circuit symbols for four different components in a simple circuit.

Figure 1.20. This schematic shows the circuit symbols for four different components in a simple circuit.

The previous schematic is intended to show the electrical connections of the hardware components shown in Figure 1-21. If everything is connected as shown in the schematic, the circuit will work as intended. This enables users to assemble circuits without regard for their physical size or appearance.

This image shows an illustration of the circuit from the schematic in Figure 1-22. You can see the battery pack (VCC1), the switch (S1), the current limiting resistor (R1), and the red LED light (LED1). Upon pushing the button, the circuit is closed and the LED turns on. Releasing the button turns the LED off.

Figure 1.21. This image shows an illustration of the circuit from the schematic in Figure 1-22. You can see the battery pack (VCC1), the switch (S1), the current limiting resistor (R1), and the red LED light (LED1). Upon pushing the button, the circuit is closed and the LED turns on. Releasing the button turns the LED off.

Prototyping

Prototyping describes the art of building a design or concept in a raw form that is not intended to be perfect, but rather to test the feasibility of an idea. Even if you are comfortable enough with your math calculations to be able to determine the approximate weight and speed of your bot, you won't actually know how it works until you build it and try it out. This is where the prototype comes in handy.

You can build a temporary frame with whatever you feel comfortable building with (wood, PVC, metal, etc.). As long as it is sturdy enough to temporarily mount the motors and batteries to, you should be able to get a good idea of the actual speed and handling of the bot, and adjust the drive gearing, battery capacity, or system voltage accordingly.

Prototyping not only refers to installing motors and gears, but also to designing, building, and testing electronic circuits as well. We also discuss some handy tools available that make testing and building circuits much easier.

Breadboard

A breadboard is a plastic experiment board that can be purchased at most electronics supply shops for under $20 (see Figure 1-22). It is a valuable tool to the electronics experimenter because you can add or remove components for testing by simply placing them into the plastic grid with no soldering required. Breadboards cannot carry large amounts of current so they should not be used for high-powered projects, but I recommend using a breadboard to test any circuit you build before creating a permanent model.

This is a typical Breadboard found at Sparkfun.com (part #PRT-00112) or any electronics supply house.

Figure 1.22. This is a typical Breadboard found at Sparkfun.com (part #PRT-00112) or any electronics supply house.

Perforated Prototyping Board (Perf-Board)

After you get your circuit working on a breadboard, you will be ready to make a hard-copy to use as a prototype. This can be done fairly easily with perf-board and a soldering iron. Perf-board is a predrilled PCB (printed circuit board) with 0.1-inch hole spacing for easy integration with most through-hole components (See Figure 1-23). Each hole in the perf-board has its own copper pad for you to solder to, and each pad is separated from the next (except with special designs). This method requires the use of point-to-point wire connections, which can be tedious if the circuit is large in which case etching your own PCB might be a better solution (again, see Chapter 6). Perf-board can, however, be an excellent platform for the beginner circuit builder to test a variety of prototypes without having to design and etch a proper PCB.

A standard piece of perforated prototyping board with an individual copper pad for each through hole. You can build complete circuits on this type of board using component parts, copper wire, and electrical solder. This type of board typically costs under $5.00 each, so they are useful for prototypes.

Figure 1.23. A standard piece of perforated prototyping board with an individual copper pad for each through hole. You can build complete circuits on this type of board using component parts, copper wire, and electrical solder. This type of board typically costs under $5.00 each, so they are useful for prototypes.

Printed Circuit Boards

After verifying that a circuit works as intended on your perf-board prototype, you might want to make 10 copies of the circuit board to sell or use in other projects. To hand-wire 10 of these boards is not only tedious, but the wire used in point-to-point soldering projects can break or snag, compromising reliability.

To avoid the tedious process of hand-wiring every circuit board that you attempt to build, you can alternatively make what is called a "printed circuit board" or PCB for short. A PCB can be handmade or made on a computer, but it involves creating a circuit design on a piece of copper coated fiberglass board called "copper clad," and dissolving the copper left around the design (see Figure 1-24). All of the wires on a PCB are contained in the copper traces that are created from the circuit design.

With a copper circuit etched onto the board, you can solder component parts directly to the copper—this is called a circuit board. The Arduino is printed on a piece of two-sided copper clad board and coated with a blue epoxy to protect the copper traces from short circuit. Using easy-to-find materials, you can make your own printed circuit boards at home in just a few hours (See Chapter 6).

The printed circuit board shown is one of my first few homemade motor-controllers designed on the computer. Using a total of 28 Mosfet switches to drive two DC motors, this is the original board used on the (200lb) Lawnbot in Chapter 10.

Figure 1.24. The printed circuit board shown is one of my first few homemade motor-controllers designed on the computer. Using a total of 28 Mosfet switches to drive two DC motors, this is the original board used on the (200lb) Lawnbot in Chapter 10.

Before completing an electronic circuit, you need to solder each component to the PCB.

Soldering

Electrical soldering generally refers to the fusing of an electronic component to a PCB with the use of an iron and an electrical solder, which provides a secure connection to the PCB. The idea is to get both the component lead and the copper PCB pad hot enough that the solder will melt when it touches them. As tempting as it is, you shouldn't heat the solder wire with the soldering iron, because it will fuse only to the component lead and copper pad if they are hot as well.

There are many different types of solder available, but for electrical connections you should use a rosin-core electrical solder as shown in Figure 1-25. By using a thinner diameter solder wire, it does not require extremely high heat to fuse to the copper pad and component leads.

This is a roll of rosin-core electrical solder used for circuit construction.

Figure 1.25. This is a roll of rosin-core electrical solder used for circuit construction.

It is best to let the iron heat up completely before attempting to solder. Soldering can be frustrating when the iron is not hot enough and the solder will not melt! You want only enough solder on the copper pad to completely fill any gaps around the component lead, but you don't want to use too much solder, because it will bubble out and possibly touch another component lead or copper trace.

You can get a soldering iron for under $10 at most hardware stores or Radio Shack. Though these work for most projects, they take awhile to heat up (around 10 minutes) and are difficult to solder in tight spots because they typically have a large tip.

An adjustable temperature soldering iron with multiple heating elements heats up in around 1 minute and typically has smaller available tips for soldering on small projects or tight spaces (see Figure 1-26). I highly recommend getting one of these if you can afford it: they are typically from $50-$150.

I had been using cheap soldering irons for years, and then my wife decided to buy me a "nice" soldering iron. The Hakko 936 is probably not the nicest available, but it is immeasurably better than the $7-$10 soldering irons that I had been wasting my time with before. It heats up in a matter of minutes and can get much hotter than a typical iron, making soldering a breeze.

Figure 1.26. I had been using cheap soldering irons for years, and then my wife decided to buy me a "nice" soldering iron. The Hakko 936 is probably not the nicest available, but it is immeasurably better than the $7-$10 soldering irons that I had been wasting my time with before. It heats up in a matter of minutes and can get much hotter than a typical iron, making soldering a breeze.

Soldering can take some time to get used to, so I recommend buying some perforated prototyping board and using it to practice on before attempting to build your own PCBs. You can also buy electronic kits from various suppliers that come with all needed parts, PCB, and instructions-they only require that you have a soldering iron and an hour or two of assembly time. I bought several kits when I was learning to solder, and they provided both an entertaining project and valuable hands-on learning experience.

Soldering Shortcuts

When soldering perf-board, we sometimes have a clear path on the copper-side of the board from one electrical lead to another. To make soldering easier and to keep the circuit free from cluttered wires, we can use some soldering shortcuts to simplify the connections (see Figure 1-31).

  • Option 1—Pooling solder: You will notice that if you heat adjacent (but separated) copper pads and apply solder, the solder will tend toward both pads while avoiding the gap between them. This is because the solder cannot stick to the fiberglass PCB without any copper coating. If you add "too much" solder to these two pads, you will notice that the molten solder will try to jump the gap over to the other pool of molten solder on the other pad. If you are careful, you can let the solder solidify between the two pads creating a simple solder connection. This can be a helpful method of creating a jumper-wire between two or three adjacent pads. This is not, however, an acceptable method for high-power connections because the solder is not capable of transferring large amounts of current.

  • Option 2—Wire traces: You can alternatively use a piece of solid bare copper wire (16-20awg), placed directly on the copper pads that you would like to connect (see A, B, and D in Figure 1-27). If the connection will span several pads, it is desirable to apply a small amount of solder to each pad that the wire touches to ensure that it will not move after the circuit is complete. You can also bend the wire around other components to make a curved or angled line. This method yields results similar to a homemade PCB trace. Because each wire is connected directly from one lead to another, there can be no crossing wires from other components on the underside of the PCB. This method is acceptable for higher-current applications, though an appropriate wire gauge should be used for the amount of current to be transferred.

How to create traces using copper wire

Figure 1.27. How to create traces using copper wire

Trace A is a bare wire with no insulation, but is soldered only at each end. Trace B is bare wire, but is soldered at each copper pad, making it far more secure than trace A. Trace C is does not even have a wire-it is just solder that is pooled across all six pads. Trace D is a wire that has its insulation in tact, but soldered only at each end. Trace C is difficult to accomplish across more than two or three pads and is not acceptable for hacceptable for high-power applications.

Building a Robot

The actual hands-on building of the robot is my favorite part of the process. This is where you get to express your creativity by designing and building whatever you can imagine. This process usually starts with a few pieces of metal or wood and some nuts, bolts, screws, glue, tape, and whatever else you can find to make your bot come to life.

First you need to decide what you want your robot to do and set an objective (even if it is simply wandering around). You can build an autonomous robot that uses sensors for guidance or a radio-controlled bot that uses your inputs for control. If you have never built a robot before, you should probably start small. Several of the chapters in this book use hobby-type servo motors to drive the robot, which are easily interfaced directly to the Arduino without needing a motor-controller. By incorporating fewer parts in a project, it is easier and quicker to assemble and modify if needed.

Whatever you do, don't try to be perfect the first time around. It is better to have a decent idea and a prototype than to have only a bunch of really good ideas. As good as an idea might sound in your head, you won't know if it actually works until you try it. Several of the bots in this book went through MULTIPLE frames before finding one that worked and that I liked. If your bot does not work as expected on the first try, take notes and try it again; this is how great robots are built.

Make, test, tinker, break, remake-tis' the cycle of design.

Hardware

Having the right tools available can make the building process much easier, but not everyone has a fully stocked workbench. Because nice tools are expensive, you will probably want to buy tools as you find that you need them. This way you don't have tools you will never use.

Basic Building Tools

Although many of the power tools are mostly optional, the following are a few basic tools that I would recommend getting before you get started. You can go as far as you want with this, but these items should make your list (see Figure 1-28):

  • Hammer

  • Crescent-wrench

  • Pliers (standard and needle-nose)

  • Wire-strippers and crimpers

  • Vice-grip pliers

  • Screwdrivers—Phillips-head and flat-head

  • Measuring tape

My basic tool kit: multi use 6-in-1 screwdriver (top-center), 25-foot tape-measure (top-right), (from left to right) hammer, crescent wrench, lines-man pliers, needle-nose pliers, wire strippers, wire-crimpers, wire-snippers, and vice-grip pliers.

Figure 1.28. My basic tool kit: multi use 6-in-1 screwdriver (top-center), 25-foot tape-measure (top-right), (from left to right) hammer, crescent wrench, lines-man pliers, needle-nose pliers, wire strippers, wire-crimpers, wire-snippers, and vice-grip pliers.

After you have a basic tool set, you can begin to acquire more advanced tools as you need them (or as you can afford). You will also likely need the following items to build every project in this book-you don't have to own each tool as long as you have access to them.

  • A computer: Although not typically found on your workbench, you need a computer to run the Arduino software and upload code. Your computer does not have to be the latest and greatest to run the Arduino IDE, pretty much any computer with a USB port will do. Both the Arduino software and Eagle Cad can be used on Windows, Linux, or Mac.

  • Voltage-meter (multi-meter): This does not have to be expensive, typically the cheapest one you can find will measure AC/DC voltage, resistance, and around 250mA of DC current. I prefer an Analog meter so I can see every movement of the needle and how it is reacting to the signal I am testing-my digital meter jumps straight to the reading, which makes reading precise values easy, but changing voltages more difficult.

  • Electric drill: If you don't already have one, you need to get one. You can get an electric drill for under $20 at just about any hardware store. If you want to spring for something nice, pick up an 18v cordless drill kit for about $75. It is also helpful to have a drill press if you plan to etch your own PCBs. A drill press can usually be purchased for around $60. You also need some drill bits if you are planning on using metal.

  • Saw: You will likely need multiple saws, but their type depends on how much work you want to do. The cheapest saw you can get away with using to cut metal is a hacksaw, but cutting through thick metal pieces takes some patience. A reciprocating saw (sometimes called a saber-saw or saws-all) is a good choice for cutting just about anything from metal to wood to PVC. A jigsaw works if you already own one. Although they are slightly less versatile for robotics projects, there are times when a jigsaw will be handy.

  • Soldering-iron: If you plan to make any of the circuits in this book, you need one. Remember to keep the tip clean with a wet sponge or wire brush periodically while soldering. You can use a $7 iron from Radio-Shack, but I highly recommend an adjustable temperature controlled model if you plan on soldering often. They heat up much quicker and get much hotter, but can cost from $50-$150.

  • Welder: This is not required, but it can be helpful with the larger projects. A standard 110-volt wire feed type works well. Always remember to wear a welding mask to avoid damaging your eyes, and never look directly at the welding arc!

Materials

We will be working with several different materials in this book including wood, metal, plastics, and fiberglass. It is always a good idea to wear protective eyewear and gloves when cutting any of these materials. You can work with whatever you feel comfortable using, though I personally prefer metal.

  • Wood: Wood is the easiest and cheapest material that is also strong enough to support the weight of a large robot. As tempting as it is to use a few 2×4s from the lumberyard for the frame of a robot, they have a tendency to warp and split, which makes the idea less appealing for a project that we put a lot of time into. It can, however, be useful for prototyping.

  • Plastics: I like to use acrylic Plexiglas sheets in place of glass for transparent applications and small robot bases because it is easy to drill and tap and can be cut with a jigsaw. PVC (pipe) can be useful for projects where lightweight strength is needed. Plexiglas, PVC, and most other plastic can be formed or shaped using a heat gun.

  • Metal: It is hard to beat metal for building a robot frame. It is extremely strong, durable, and can be joined by either welding or using bolts/nuts. Cutting is a bit more difficult, requiring either a hacksaw (and some elbow grease) or a reciprocating saw with a fine-tooth metal blade. Once built, a metal frame will last for years and will not warp or change shape. Most hardware stores sell 48-inch long sections of assorted angle-iron and metal rods from $5-$25 depending on size and thickness.

  • Fiberglass: Fiberglass is an outstanding material for creating specific shapes that would be nearly impossible to make from metal or wood. It is also extremely strong and rigid once set, as well as waterproof. The process involves laying a fiberglass cloth and then applying a two-part resin on top of the cloth. It only takes about 1 hour to harden, but it does make some strong fumes. A 1-gallon can of fiberglass resin is around $25 from most hardware stores (this lasts a long time) and the special fiberglass-cloth (sometimes called "mat") is around $5 for 8 sq. ft.

Work Area

Ideally we have unlimited space to work in, but usually your space is dependent on your living arrangements. When I lived in an apartment, I had parts of projects laying around everywhere and used my back porch as a metal-working station, much to the dismay of my neighbors. Now that I have a house, I try to keep all of my projects confined to the garage and do most of my cutting/grinding/noise-making outside where there is good airflow.

There are several things that you should consider when selecting where to build your projects. These considerations are often overlooked, but are important to your safety and those around you.

  • Testing space: Things don't always go according to plan, so it is a good idea to have plenty of room whenever you are testing an active robot that can pose a physical threat to others. Several of the robots in this book are large enough to seriously injure people and pets if it were to lose control. Do not test large robots inside or near people!

  • Ventilation: Breathing in contaminants can be harmful to your lungs and brain. Breathing in sawdust might simply be uncomfortable, but breathing acid etchant fumes or solder smoke might prove to be a health hazard. Always work in a well-ventilated area or outside. If you are soldering, etching, welding, or working with fiberglass, it might be a good idea to use a respirator mask to protect your lungs and a fan to extract the dangerous fumes from your work area.

  • Safety: Always mind your bots. It is a good habit to disconnect a power wire from the bot anytime that it is not used to prevent accidental startup and possible danger. Don't underestimate the capability of your bots to wreak havoc and destruction (even if that is its purpose) on unsuspecting items nearby.

  • Children: If you have a work space that children can access, make sure you keep your soldering iron out of reach and unplugged, keep any blades or sharp objects out of reach, keep small components away from those who might mistake them for a new type of candy, and make sure any robots capable of harming a small person are disabled beyond turning Off the kill-switch (i.e., disconnect the battery supply). Several of the projects in this book use motors intended to carry a person. These motors are strong enough to do physical harm to people if the robot were to get out of control. For this reason, I suggest that you keep people and pets at least 20 feet away from your moving bots (unless thoroughly tested), for their own safety.

Summary

To recap this chapter, we first discussed the basics of electricity including an electrical flow analogy, electrical properties, circuits, and types of connections. After talking about electricity, we moved into electronics and discussed semi-conductors, data sheets, integrated circuits, and IC packages.

Then a small introduction to the Arduino micro-controller including the Arduino IDE, two main Arduino variants (Standard and Mega), the components of a sketch, and finally the different types of common signals available on the Arduino.

With a brief discussion about electronics circuit design and some of the different types of schematic symbols used for various electronic components, we went over the basic tools you need for the projects in this book and the materials that are used.

In the next chapter, we discuss how to interface the Arduino with a variety of different devices.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset