Acknowledgments |
|
xxii | |
|
|
1 | (8) |
|
The Possibilities Are Endless |
|
|
2 | (2) |
|
|
4 | (1) |
|
|
4 | (1) |
|
|
5 | (3) |
|
|
6 | (1) |
|
|
7 | (1) |
|
|
7 | (1) |
|
|
8 | (1) |
|
|
8 | (1) |
|
2 Exploring The Arduino Board And The IDE |
|
|
9 | (14) |
|
|
9 | (5) |
|
Taking a Look Around the IDE |
|
|
14 | (2) |
|
|
14 | (2) |
|
|
16 | (1) |
|
|
16 | (1) |
|
Creating Your First Sketch in the IDE |
|
|
16 | (1) |
|
|
17 | (1) |
|
|
18 | (1) |
|
|
18 | (1) |
|
|
18 | (2) |
|
|
20 | (1) |
|
Uploading and Running Your Sketch |
|
|
20 | (1) |
|
|
21 | (1) |
|
|
21 | (2) |
|
|
23 | (1) |
|
|
24 | (1) |
|
|
24 | (1) |
|
|
24 | (1) |
|
|
25 | (1) |
|
|
25 | (1) |
|
|
25 | (8) |
|
|
25 | (4) |
|
|
29 | (2) |
|
The Solderless Breadboard |
|
|
31 | (2) |
|
Project #1 Creating a Blinking LED Wave |
|
|
33 | (2) |
|
|
33 | (1) |
|
|
33 | (1) |
|
|
33 | (1) |
|
|
34 | (1) |
|
|
35 | (1) |
|
|
35 | (1) |
|
Project #2 Repeating with for Loops |
|
|
36 | (1) |
|
Varying LED Brightness with Pulse-Width Modulation |
|
|
37 | (1) |
|
Project #3 Demonstrating PWM |
|
|
38 | (1) |
|
|
39 | |
|
|
39 | (1) |
|
|
40 | (1) |
|
|
41 | (1) |
|
|
41 | (2) |
|
|
43 | (2) |
|
|
45 | (38) |
|
|
46 | (4) |
|
|
46 | (2) |
|
|
48 | (1) |
|
|
49 | (1) |
|
|
50 | (3) |
|
Measuring the Capacity of a Capacitor |
|
|
51 | (1) |
|
|
51 | (1) |
|
|
51 | (2) |
|
|
53 | (2) |
|
Project #4 Demonstrating a Digital Input |
|
|
55 | (7) |
|
|
55 | (1) |
|
|
55 | (1) |
|
|
55 | (4) |
|
|
59 | (1) |
|
|
60 | (1) |
|
Modifying Your Sketch: Making More Decisions with if-else |
|
|
61 | (1) |
|
|
62 | (2) |
|
|
62 | (1) |
|
Making Two or More Comparisons |
|
|
63 | (1) |
|
Project #5 Controlling Traffic |
|
|
64 | (5) |
|
|
64 | (1) |
|
|
64 | (1) |
|
|
64 | (1) |
|
|
65 | (1) |
|
|
66 | (2) |
|
|
68 | (1) |
|
Analog vs. Digital Signals |
|
|
69 | (1) |
|
Project #6 Creating a Single-Cell Battery Tester |
|
|
70 | (3) |
|
|
70 | (1) |
|
|
70 | (1) |
|
|
71 | (1) |
|
|
71 | (1) |
|
|
72 | (1) |
|
Doing Arithmetic with an Arduino |
|
|
73 | (1) |
|
|
73 | (1) |
|
Comparison Operators for Calculations |
|
|
73 | (1) |
|
Improving Analog Measurement Precision with a Reference Voltage |
|
|
73 | (2) |
|
Using an External Reference Voltage |
|
|
74 | (1) |
|
Using the Internal Reference Voltage |
|
|
75 | (1) |
|
|
75 | (2) |
|
|
77 | (1) |
|
|
77 | (1) |
|
Project #7 Trying Out a Piezo Buzzer |
|
|
78 | (1) |
|
Project #8 Creating a Quick-Read Thermometer |
|
|
79 | (3) |
|
|
80 | (1) |
|
|
80 | (1) |
|
|
80 | (1) |
|
|
81 | (1) |
|
|
82 | (1) |
|
|
83 | (16) |
|
Project #9 Creating a Function to Repeat an Action |
|
|
84 | (1) |
|
Project #10 Creating a Function to Set the Number of Blinks |
|
|
85 | (1) |
|
Creating a Function to Return a Value |
|
|
86 | (1) |
|
Project #11 Creating a Quick-Read Thermometer That Blinks the Temperature |
|
|
86 | (3) |
|
|
87 | (1) |
|
|
87 | (1) |
|
|
88 | (1) |
|
Displaying Data from the Arduino in the Serial Monitor |
|
|
89 | (2) |
|
|
89 | (2) |
|
Project #12 Displaying the Temperature in the Serial Monitor |
|
|
91 | (2) |
|
Debugging with the Serial Monitor |
|
|
92 | (1) |
|
Making Decisions with while Statements |
|
|
93 | (1) |
|
|
93 | (1) |
|
|
93 | (1) |
|
Sending Data from the Serial Monitor to the Arduino |
|
|
93 | (1) |
|
Project #13: Multiplying a Number by Two |
|
|
94 | (1) |
|
|
95 | (1) |
|
Project #14 Using long Variables |
|
|
95 | (2) |
|
|
97 | (2) |
|
6 Numbers, Variables, And Arithmetic |
|
|
99 | (26) |
|
Generating Random Numbers |
|
|
100 | (1) |
|
Using Ambient Current to Generate a Random Number |
|
|
100 | (1) |
|
Project #15 Creating an Electronic Die |
|
|
101 | (3) |
|
|
101 | (1) |
|
|
102 | (1) |
|
|
102 | (2) |
|
|
104 | (1) |
|
|
104 | (2) |
|
|
104 | (1) |
|
|
105 | (1) |
|
Increasing Digital Outputs with Shift Registers |
|
|
106 | (1) |
|
Project #16 Creating an LED Binary Number Display |
|
|
107 | (3) |
|
|
107 | (1) |
|
|
107 | (2) |
|
|
109 | (1) |
|
Project #17 Making a Binary Quiz Game |
|
|
110 | (2) |
|
|
110 | (1) |
|
|
110 | (2) |
|
|
112 | (2) |
|
|
113 | (1) |
|
Referring to Values in an Array |
|
|
113 | (1) |
|
Writing to and Reading from Arrays |
|
|
113 | (1) |
|
Seven-Segment LED Displays |
|
|
114 | (3) |
|
|
115 | (2) |
|
Project #18 Creating a Single-Digit Display |
|
|
117 | (2) |
|
|
117 | (1) |
|
|
117 | (1) |
|
|
117 | (2) |
|
Modifying the Sketch: Displaying Double Digits |
|
|
119 | (1) |
|
Project #19 Controlling Two Seven-Segment LED Display Modules |
|
|
119 | (3) |
|
|
119 | (1) |
|
|
119 | (1) |
|
|
120 | (2) |
|
Project #20 Creating a Digital Thermometer |
|
|
122 | (1) |
|
|
122 | (1) |
|
|
122 | (1) |
|
|
123 | (2) |
|
|
125 | (28) |
|
|
126 | (2) |
|
|
128 | (1) |
|
Project #21 Creating a Custom Shield |
|
|
129 | (4) |
|
|
129 | (1) |
|
|
129 | (1) |
|
The Layout of the ProtoShield Board |
|
|
130 | (1) |
|
|
130 | (1) |
|
|
131 | (2) |
|
|
133 | (1) |
|
Expanding Sketches with Libraries |
|
|
133 | (4) |
|
Downloading an Arduino Library as a ZIP File |
|
|
134 | (2) |
|
Importing an Arduino Library with Library Manager |
|
|
136 | (1) |
|
|
137 | (3) |
|
Connecting the Card Module |
|
|
138 | (1) |
|
|
139 | (1) |
|
Project #22 Writing Data to the Memory Card |
|
|
140 | (2) |
|
|
140 | (2) |
|
Project #23 Creating a Temperature-Logging Device |
|
|
142 | (2) |
|
|
42 | (100) |
|
|
142 | (2) |
|
Timing Applications with millis() and micros)) |
|
|
144 | (2) |
|
Project #24 Creating a Stopwatch |
|
|
146 | (1) |
|
|
146 | (1) |
|
|
147 | (1) |
|
|
147 | (1) |
|
|
148 | (2) |
|
|
150 | (1) |
|
|
150 | (1) |
|
Activating or Deactivating Interrupts |
|
|
150 | (1) |
|
Project #25 Using Interrupts |
|
|
151 | (1) |
|
|
151 | (1) |
|
|
152 | (1) |
|
8 Led Numeric Displays And Matrices |
|
|
153 | (14) |
|
|
154 | (4) |
|
|
155 | (3) |
|
Project #26 Digital Stopwatch |
|
|
158 | (2) |
|
Project #27 Using LED Matrix Modules |
|
|
160 | (6) |
|
|
161 | (3) |
|
|
164 | (2) |
|
|
166 | (1) |
|
9 Liquid Crystal Displays |
|
|
167 | (18) |
|
|
167 | (5) |
|
Using a Character LCD in a Sketch |
|
|
169 | (1) |
|
|
170 | (1) |
|
Displaying Variables or Numbers |
|
|
171 | (1) |
|
Project #28 Defining Custom Characters |
|
|
172 | (1) |
|
|
173 | (3) |
|
Connecting the Graphic LCD |
|
|
174 | (1) |
|
|
174 | (1) |
|
|
174 | (2) |
|
Project #29 Seeing the Text Functions in Action |
|
|
176 | (1) |
|
|
176 | (1) |
|
|
177 | (1) |
|
Creating More Complex Display Effects with Graphic Functions |
|
|
177 | (2) |
|
Project #30 Seeing the Graphic Functions in Action |
|
|
179 | (2) |
|
|
179 | (2) |
|
Project #31 Creating a Temperature History Monitor |
|
|
181 | (3) |
|
|
181 | (1) |
|
|
181 | (1) |
|
|
182 | (2) |
|
|
184 | (1) |
|
|
184 | (1) |
|
|
184 | (1) |
|
10 Creating Your Own Arduino Libraries |
|
|
185 | (18) |
|
Creating Your First Arduino Library |
|
|
186 | (4) |
|
Anatomy of an Arduino Library |
|
|
187 | (1) |
|
|
187 | (1) |
|
|
188 | (1) |
|
|
189 | (1) |
|
Installing Your New Arduino Library |
|
|
190 | (5) |
|
Creating a ZIP File Using Windows 7 and Later |
|
|
190 | (2) |
|
Creating a ZIP File Using Mac OS X or Later |
|
|
192 | (1) |
|
Installing Your New Library |
|
|
193 | (2) |
|
Creating a Library That Accepts Values to Perform a Function |
|
|
195 | (2) |
|
Creating a Library That Processes and Displays Sensor Values |
|
|
197 | (5) |
|
|
202 | (1) |
|
|
203 | (8) |
|
|
203 | (3) |
|
|
204 | (1) |
|
Programming for the Keypad |
|
|
205 | (1) |
|
|
206 | (1) |
|
Making Decisions with switch case |
|
|
206 | (1) |
|
Project #32 Creating a Keypad-Controlled Lock |
|
|
207 | (3) |
|
|
207 | (2) |
|
|
209 | (1) |
|
|
209 | (1) |
|
|
210 | (1) |
|
12 Accepting User Input With Touchscreens |
|
|
211 | (12) |
|
|
211 | (2) |
|
Connecting the Touchscreen |
|
|
212 | (1) |
|
Project #33 Addressing Areas on the Touchscreen |
|
|
213 | (2) |
|
|
213 | (1) |
|
|
213 | (1) |
|
|
214 | (1) |
|
|
215 | (1) |
|
Project #34 Creating a Two-Zone On/Off Touch Switch |
|
|
215 | (3) |
|
|
216 | (1) |
|
|
217 | (1) |
|
|
218 | (1) |
|
|
218 | (1) |
|
Project #35 Creating a Three-Zone Touch Switch |
|
|
218 | (3) |
|
|
219 | (1) |
|
|
219 | (2) |
|
|
221 | (1) |
|
|
221 | (2) |
|
13 Meet The Arduino Family |
|
|
223 | (18) |
|
Project #36 Creating Your Own Breadboard Arduino |
|
|
224 | (9) |
|
|
224 | (3) |
|
|
227 | (3) |
|
|
230 | (3) |
|
The Many Arduino and Alternative Boards |
|
|
233 | (7) |
|
|
235 | (1) |
|
|
235 | (1) |
|
|
236 | (1) |
|
|
236 | (1) |
|
|
237 | (1) |
|
|
237 | (1) |
|
The Freetronics EtherMega |
|
|
238 | (1) |
|
|
238 | (2) |
|
|
240 | (1) |
|
|
241 | (36) |
|
Making Small Motions with Servos |
|
|
241 | (3) |
|
|
242 | (1) |
|
|
243 | (1) |
|
|
243 | (1) |
|
Project #37 Building an Analog Thermometer |
|
|
244 | (3) |
|
|
244 | (1) |
|
|
245 | (1) |
|
|
245 | (2) |
|
|
247 | (1) |
|
|
247 | (1) |
|
The TIP 120 Darlington Transistor |
|
|
247 | (1) |
|
Project #38 Controlling the Motor |
|
|
248 | (3) |
|
|
248 | (1) |
|
|
249 | (1) |
|
|
250 | (1) |
|
Using Small Stepper Motors |
|
|
251 | (3) |
|
Project #39 Building and Controlling a Robot Vehicle |
|
|
254 | (8) |
|
|
255 | (1) |
|
|
256 | (1) |
|
Connecting the Motor Shield |
|
|
257 | (1) |
|
|
258 | (4) |
|
Connecting Extra Hardware to the Robot |
|
|
262 | (1) |
|
|
262 | (1) |
|
Project #40 Detecting Robot Vehicle Collisions with a Microswitch |
|
|
262 | (1) |
|
|
263 | (1) |
|
|
264 | (2) |
|
Infrared Distance Sensors |
|
|
266 | (1) |
|
|
266 | (1) |
|
Testing the IR Distance Sensor |
|
|
267 | (2) |
|
Project #41 Detecting Robot Vehicle Collisions with an IR Distance Sensor |
|
|
269 | (2) |
|
|
269 | (2) |
|
Modifying the Sketch: Adding More Sensors |
|
|
271 | (1) |
|
Ultrasonic Distance Sensors |
|
|
271 | (2) |
|
Connecting the Ultrasonic Sensor |
|
|
272 | (1) |
|
Testing the Ultrasonic Sensor |
|
|
272 | (1) |
|
Project #42 Detecting Collisions with an Ultrasonic Distance Sensor |
|
|
273 | (2) |
|
|
273 | (2) |
|
|
275 | (2) |
|
15 Using Gps With Your Arduino |
|
|
277 | (14) |
|
|
278 | (2) |
|
|
280 | (1) |
|
Project #43 Creating a Simple GPS Receiver |
|
|
281 | (3) |
|
|
282 | (1) |
|
|
282 | (1) |
|
|
283 | (1) |
|
Project #44 Creating an Accurate GPS-Based Clock |
|
|
284 | (2) |
|
|
284 | (1) |
|
|
284 | (2) |
|
Project #45 Recording the Position of a Moving Object over Time |
|
|
286 | (4) |
|
|
286 | (1) |
|
|
286 | (3) |
|
|
289 | (1) |
|
|
290 | (1) |
|
|
291 | (24) |
|
Using Low-Cost Wireless Modules |
|
|
291 | (2) |
|
Project #46 Creating a Wireless Remote Control |
|
|
293 | (5) |
|
The Transmitter Circuit Hardware |
|
|
293 | (1) |
|
The Transmitter Schematic |
|
|
293 | (1) |
|
The Receiver Circuit Hardware |
|
|
294 | (1) |
|
|
294 | (2) |
|
|
296 | (1) |
|
|
297 | (1) |
|
Using LoRa Wireless Data Modules for Greater Range and Faster Speed |
|
|
298 | (1) |
|
Project #47 Remote Control over LoRa Wireless |
|
|
299 | (5) |
|
The Transmitter Circuit Hardware |
|
|
299 | (1) |
|
The Transmitter Schematic |
|
|
299 | (2) |
|
The Receiver Circuit Hardware |
|
|
301 | (1) |
|
|
301 | (1) |
|
|
302 | (1) |
|
|
303 | (1) |
|
Project #48 Remote Control over LoRa Wireless with Confirmation |
|
|
304 | (5) |
|
The Transmitter Circuit Hardware |
|
|
304 | (1) |
|
The Transmitter Schematic |
|
|
305 | (1) |
|
|
306 | (1) |
|
|
307 | (2) |
|
Project #49 Sending Remote Sensor Data Using LoRa Wireless |
|
|
309 | (5) |
|
The Transmitter Circuit Hardware |
|
|
309 | (1) |
|
The Receiver Circuit Hardware |
|
|
309 | (1) |
|
|
309 | (1) |
|
|
310 | (2) |
|
|
312 | (2) |
|
|
314 | (1) |
|
17 Infrared Remote Control |
|
|
315 | (10) |
|
|
315 | (1) |
|
|
316 | (2) |
|
|
316 | (1) |
|
|
316 | (1) |
|
|
317 | (1) |
|
|
317 | (1) |
|
Project #50 Creating an IR Remote Control Arduino |
|
|
318 | (3) |
|
|
319 | (1) |
|
|
319 | (1) |
|
|
320 | (1) |
|
|
321 | (1) |
|
Project #51 Creating an IR Remote Control Robot Vehicle |
|
|
321 | (3) |
|
|
321 | (1) |
|
|
321 | (3) |
|
|
324 | (1) |
|
|
325 | (12) |
|
|
326 | (1) |
|
|
327 | (1) |
|
|
327 | (1) |
|
|
327 | (1) |
|
|
327 | (1) |
|
Displaying the RFID Tag ID Number |
|
|
328 | (1) |
|
Project #52 Creating a Simple RFID Control System |
|
|
328 | (3) |
|
|
329 | (1) |
|
|
330 | (1) |
|
Storing Data in the Arduino's Built-in EEPROM |
|
|
331 | (2) |
|
Reading and Writing to the EEPROM |
|
|
332 | (1) |
|
Project #53 Creating an RFID Control with "Last Action" Memory |
|
|
333 | (3) |
|
|
333 | (3) |
|
|
336 | (1) |
|
|
336 | (1) |
|
|
337 | (14) |
|
|
338 | (1) |
|
Project #54 Using an External EEPROM |
|
|
339 | (4) |
|
|
340 | (1) |
|
|
340 | (1) |
|
|
341 | (1) |
|
|
342 | (1) |
|
Project #55 Using a Port Expander IC |
|
|
343 | (3) |
|
|
343 | (1) |
|
|
343 | (2) |
|
|
345 | (1) |
|
|
346 | (2) |
|
|
346 | (1) |
|
|
346 | (1) |
|
Sending Data to an SPI Device |
|
|
347 | (1) |
|
Project #56 Using a Digital Rheostat |
|
|
348 | (2) |
|
|
348 | (1) |
|
|
348 | (1) |
|
|
349 | (1) |
|
|
350 | (1) |
|
|
351 | (16) |
|
Connecting the RTC Module |
|
|
352 | (1) |
|
Project #57 Adding and Displaying Time and Date with an RTC |
|
|
352 | (4) |
|
|
352 | (1) |
|
|
353 | (2) |
|
Understanding and Running the Sketch |
|
|
355 | (1) |
|
Project #58 Creating a Simple Digital Clock |
|
|
356 | (4) |
|
|
356 | (1) |
|
|
357 | (2) |
|
Understanding and Running the Sketch |
|
|
359 | (1) |
|
Project #59 Creating an RFID Time-Clock System |
|
|
360 | (5) |
|
|
360 | (1) |
|
|
361 | (3) |
|
|
364 | (1) |
|
|
365 | (2) |
|
|
367 | (14) |
|
|
367 | (2) |
|
Project #60 Building a Remote Monitoring Station |
|
|
369 | (4) |
|
|
369 | (1) |
|
|
369 | (3) |
|
|
372 | (1) |
|
|
372 | (1) |
|
Project #61 Creating an Arduino Tweeter |
|
|
373 | (2) |
|
|
373 | (1) |
|
|
373 | (2) |
|
Controlling Your Arduino from the Web |
|
|
375 | (1) |
|
Project #62 Setting Up a Remote Control for Your Arduino |
|
|
375 | (4) |
|
|
376 | (1) |
|
|
377 | (1) |
|
Controlling Your Arduino Remotely |
|
|
377 | (2) |
|
|
379 | (2) |
|
22 Cellular Communications |
|
|
381 | (14) |
|
|
382 | (3) |
|
Hardware Configuration and Testing |
|
|
383 | (2) |
|
Project #63 Building an Arduino Dialer |
|
|
385 | (3) |
|
|
386 | (1) |
|
|
386 | (1) |
|
|
387 | (1) |
|
|
387 | (1) |
|
Project #64 Building an Arduino Texter |
|
|
388 | (2) |
|
|
388 | (1) |
|
|
389 | (1) |
|
Project #65 Setting Up an SMS Remote Control |
|
|
390 | (3) |
|
|
390 | (1) |
|
|
390 | (1) |
|
|
391 | (2) |
|
|
393 | (1) |
|
|
393 | (2) |
Index |
|
395 | |