+353-1-416-8900REST OF WORLD
+44-20-3973-8888REST OF WORLD
1-917-300-0470EAST COAST U.S
1-800-526-8630U.S. (TOLL FREE)

Exploring Arduino. Tools and Techniques for Engineering Wizardry. Edition No. 2

  • Book

  • 512 Pages
  • December 2019
  • John Wiley and Sons Ltd
  • ID: 5842281
The bestselling beginner Arduino guide, updated with new projects!

Exploring Arduino makes electrical engineering and embedded software accessible. Learn step by step everything you need to know about electrical engineering, programming, and human-computer interaction through a series of increasingly complex projects. Arduino guru Jeremy Blum walks you through each build, providing code snippets and schematics that will remain useful for future projects. Projects are accompanied by downloadable source code, tips and tricks, and video tutorials to help you master Arduino. You'll gain the skills you need to develop your own microcontroller projects!

This new 2nd edition has been updated to cover the rapidly-expanding Arduino ecosystem, and includes new full-color graphics for easier reference. Servo motors and stepper motors are covered in richer detail, and you'll find more excerpts about technical details behind the topics covered in the book. Wireless connectivity and the Internet-of-Things are now more prominently featured in the advanced projects to reflect Arduino's growing capabilities. You'll learn how Arduino compares to its competition, and how to determine which board is right for your project. If you're ready to start creating, this book is your ultimate guide! - Get up to date on the evolving Arduino hardware, software, and capabilities - Build projects that interface with other devices - wirelessly! - Learn the basics of electrical engineering and programming - Access downloadable materials and source code for every project

Whether you're a first-timer just starting out in electronics, or a pro looking to mock-up more complex builds, Arduino is a fantastic tool for building a variety of devices. This book offers a comprehensive tour of the hardware itself, plus in-depth introduction to the various peripherals, tools, and techniques used to turn your little Arduino device into something useful, artistic, and educational. Exploring Arduino is your roadmap to adventure - start your journey today!

Table of Contents

Introduction xxv

Part I Arduino Engineering Basics 1

1 Getting Started and Understanding the Arduino Landscape 3

Exploring the Arduino Ecosystem 4

Arduino Functionality 5

The Microcontroller 7

Programming Interfaces 8

Input/Output: GPIO, ADCs, and Communication Busses 9

Power 9

Arduino Boards 11

Creating Your First Program 15

Downloading and Installing the Arduino IDE 16

Running the IDE and Connecting to the Arduino 17

Breaking Down Your First Program 18

Summary 21

2 Digital Inputs, Outputs, and Pulse-Width Modulation 23

Digital Outputs 24

Wiring Up an LED and Using Breadboards 24

Working with Breadboards 24

Wiring LEDs 25

Programming Digital Outputs 29

Using For Loops 30

Pulse-Width Modulation with analogWrite() 31

Reading Digital Inputs 35

Reading Digital Inputs with Pull-Down Resistors 35

Working with “Bouncy” Buttons 38

Building a Controllable RGB LED Nightlight 42

Summary 46

3 Interfacing with Analog Sensors 47

Understanding Analog and Digital Signals 48

Comparing Analog and Digital Signals 48

Converting an Analog Signal to Digital 49

Reading Analog Sensors with the Arduino: analogRead() 51

Reading a Potentiometer 51

Using Analog Sensors 56

Using Variable Resistors to Make Your Own Analog Sensors 60

Using Resistive Voltage Dividers 61

Using Analog Inputs to Control Analog Outputs 64

Summary 66

Part II Interfacing with Your Environment 67

4 Using Transistors and Driving DC Motors 69

Driving DC Motors 70

Handling High-Current Inductive Loads 71

Using Transistors as Switches 72

Using Protection Diodes73

Using a Secondary Power Source 74

Wiring the Motor 74

Controlling Motor Speed with PWM 76

Using an H-Bridge to Control DC Motor Direction 78

Building an H-Bridge Circuit 80

Operating an H-Bridge Circuit 82

Building a Roving Robot 86

Choosing the Robot Parts 87

Selecting a Motor and Gearbox 87

Powering Your Robot 87

Constructing the Robot 89

Writing the Robot Software 92

Bringing It Together 96

Summary 97

5 Driving Stepper and Servo Motors 99

Driving Servo Motors 100

Understanding the Difference between Continuous Rotation and Standard Servos 100

Understanding Servo Control 101

Controlling a Servo 104

Building a Sweeping Distance Sensor 105

Understanding and Driving Stepper Motors 109

How Bipolar Stepper Motors Work 111

Making Your Stepper Move 113

Building a “One-Minute Chronograph” 117

Wiring and Building the Chronograph 117

Programming the Chronograph 119

Summary 124

6 Making Sounds and Music 125

Understanding How Speakers Work 126

The Properties of Sound 126

How a Speaker Produces Sound 128

Using tone() to Make Sounds 129

Including a Definition File 129

Wiring the Speaker 130

Making Sound Sequences 133

Using Arrays 133

Making Note and Duration Arrays 134

Completing the Program 134

Understanding the Limitations of the tone() Function 136

Building a Micro Piano 136

Summary 139

7 USB Serial Communication 141

Understanding the Arduino’s Serial Communication Capabilities 142

Arduino Boards with an Internal or External FTDI or Silicon Labs USB-to-Serial Converter 143

Arduino Boards with a Secondary USB-Capable ATmega MCU Emulating a Serial Converter 146

Arduino Boards with a Single USB-Capable MCU 147

Arduino Boards with USB-Host Capabilities 147

Listening to the Arduino 148

Using print Statements 148

Using Special Characters 150

Changing Data Type Representations 152

Talking to the Arduino 152

Configuring the Arduino IDE’s Serial Monitor to Send Command Strings 152

Reading Incoming Data from a Computer or Other Serial Device 153

Telling the Arduino to Echo Incoming Data 153

Understanding the Differences between Chars and Ints 154

Sending Single Characters to Control an LED 156

Sending Lists of Values to Control an RGB LED 158

Talking to a Desktop App 161

Installing Processing 162

Controlling a Processing Sketch from Your Arduino 163

Sending Data from Processing to Your Arduino 166

Summary 169

8 Emulating USB Devices 171

Emulating a Keyboard 173

Typing Data into the Computer 173

Commanding Your Computer to Do Your Bidding 177

Emulating a Mouse 178

Summary 182

9 Shift Registers 183

Understanding Shift Registers 184

Sending Parallel and Serial Data 185

Working with the 74HC595 Shift Register 186

Understanding the Shift Register pin Functions 186

Understanding How the Shift Register Works 187

Shifting Serial Data from the Arduino 189

Converting Between Binary and Decimal Formats 192

Controlling Light Animations with a Shift Register 192

Building a “Light Rider” 192

Responding to Inputs with an LED Bar Graph 194

Summary 197

Part III Communication Interfaces 199

10 The I2C Bus 201

History of the I2C Bus 202

I2C Hardware Design 203

Communication Scheme and ID Numbers 203

Hardware Requirements and Pull-Up Resistors 206

Communicating with an I2C Temperature Probe 208

Setting Up the Hardware208

Referencing the Datasheet 210

Writing the Software 212

Combining Shift Registers, Serial Communication, and I2C Communications 214

Building the Hardware for a Temperature Monitoring System 214

Modifying the Embedded Program 215

Writing the Processing Sketch 218

Summary 221

11 The SPI Bus and Third-Party Libraries 223

Overview of the SPI Bus 224

SPI Hardware and Communication Design 225

Hardware Configuration 225

Communication Scheme 227

Comparing SPI to I2C and UART 227

Communicating with an SPI Accelerometer 228

What is an Accelerometer? 229

Gathering Information from the Datasheet 231

Setting Up the Hardware233

Writing the Software 235

Installing the Adafruit Sensor Libraries 236

Leveraging the Library 237

Creating an Audiovisual Instrument Using a 3-Axis Accelerometer 241

Setting Up the Hardware242

Modifying the Software 242

Summary 246

12 Interfacing with Liquid Crystal Displays 247

Setting Up the LCD 248

Using the LiquidCrystal Library to Write to the LCD 251

Adding Text to the Display 252

Creating Special Characters and Animations 254

Building a Personal Thermostat 258

Setting Up the Hardware 258

Displaying Data on the LCD 261

Adjusting the Set Point with a Button 264

Adding an Audible Warning and a Fan 265

Bringing It All Together: The Complete Program 266

Taking This Project to the Next Level 270

Summary 271

Part IV Digging Deeper and Combining Functions 273

13 Interrupts and Other Special Functions 275

Using Hardware Interrupts 276

Knowing the Tradeoffs Between Polling and Interrupting 277

Ease of Implementation (Software) 277

Ease of Implementation (Hardware) 277

Multitasking 278

Acquisition Accuracy 278

Understanding the Arduino Hardware Interrupt Capabilities 278

Building and Testing a Hardware-Debounced Button Interrupt Circuit 279

Creating a Hardware-Debouncing Circuit 280

Assembling the Complete Test Circuit 284

Writing the Software 285

Using Timer Interrupts 288

Understanding Timer Interrupts 288

Getting the Library 289

Executing Two Tasks Simultaneously(ish) 289

Building an Interrupt-Driven Sound Machine 290

Sound Machine Hardware 291

Sound Machine Software 291

Summary 294

14 Data Logging with SD Cards 295

Getting Ready for Data Logging 296

Formatting Data with CSV Files 297

Preparing an SD Card for Data Logging 297

Formatting Your SD Card Using a Windows PC 298

Formatting Your SD Card Using Mac OS 300

Formatting Your SD Card Using Linux 302

Interfacing the Arduino with an SD Card 304

SD Card Shields 304

SD Card SPI Interface 307

Writing to an SD Card 307

Reading from an SD Card 312

Real-Time Clocks 317

Understanding Real-Time Clocks 317

Communicating with a Real-Time Clock 317

Using the RTC Arduino Third-Party Library 318

Using a Real-Time Clock 319

Installing the RTC and SD Card Modules 319

Updating the Software 320

Building an Entrance Logger 327

Logger Hardware 328

Logger Software 329

Data Analysis 334

Summary 335

Part V Going Wireless 337

15 Wireless RF Communications 339

The Electromagnetic Spectrum 340

The Spectrum 342

How Your RF Link Will Send and Receive Data 343

Receiving Key Presses with the RF Link 346

Connecting Your Receiver 346

Programming Your Receiver 347

Making a Wireless Doorbell 351

Wiring the Receiver 351

Programming the Receiver 351

The Start of Your Smart Home - Controlling a Lamp 354

Your Home’s AC Power 356

How a Relay Works 356

Programming the Relay Control 358

Hooking up Your Lamp and Relay to the Arduino 360

Summary 361

16 Bluetooth Connectivity 363

Demystifying Bluetooth 364

Bluetooth Standards and Versions 364

Bluetooth Profiles and BTLE GATT Services 365

Communication between Your Arduino and Your Phone 366

Reading a Sensor over BTLE 366

Adding Support for Third-Party Boards to the Arduino IDE 367

Installing the BTLE Module Library 369

Programming the Feather Board 369

Connecting Your Smartphone to Your BTLE Transmitter 377

Sending Commands from Your Phone over BTLE 379

Parsing Command Strings 380

Commanding Your BTLE Device with Natural Language 384

Controlling an AC Lamp with Bluetooth 389

How Your Phone “Pairs” to BTLE Devices 389

Writing the Proximity Control Software 390

Pairing Your Phone 394

Pairing an Android Phone 394

Pairing an iPhone 395

Make Your Lamp React to Your Presence 396

Summary 397

17 Wi-Fi and the Cloud 399

The Web, the Arduino, and You 400

Networking Lingo 401

The Internet vs. the World Wide Web vs. the Cloud 401

IP Address 401

Network Address Translation 402

MAC Address 402

HTML 402

HTTP and HTTPS 402

GET/POST 403

DHCP 403

DNS 403

Clients and Servers 403

Your Wi-Fi-Enabled Arduino 404

Controlling Your Arduino from the Web 404

Setting Up the I/O Control Hardware 404

Preparing the Arduino IDE for Use with the Feather Board.406

Ensuring the Wi-Fi Library is Matched to the Wi-Fi Module’s Firmware 407

Checking the WINC1500’s Firmware Version 408

Updating the WINC1500’s Firmware 408

Writing an Arduino Server Sketch 408

Connecting to the Network and Retrieving an IP Address via DHCP 409

Writing the Code for a Bare-Minimum Web Server 412

Controlling Your Arduino from Inside and Outside Your Local Network 423

Controlling Your Arduino over the Local Network 423

Using Port Forwarding to Control Your Arduino from Anywhere 425

Interfacing with Web APIs 427

Using a Weather API428

Creating an Account with the API Service Provider 429

Understanding How APIs are Structured 430

JSON-Formatted Data and Your Arduino 430

Fetching and Parsing Weather Data 431

Getting the Local Temperature from the Web on Your Arduino 433

Completing the Live Temperature Display 440

Wiring up the LED Readout Display 440

Driving the Display with Temperature Data 443

Summary 449

Appendix A: Deciphering Datasheets and Schematics 451

Index 461

Authors

Jeremy Blum