Adeept Ultimate Kit For Arduino UNO
Adeept Ultimate Kit For Arduino UNO
ADXL345 Acceleration
2 1
Sensor
4 IR Receiver HX1838 1
5 Remote Controller 1
7 Relay 1
8 Stepper Motor 1
ULN2003-based Stepper
9 1
Motor Driver
12 Active Buzzer 1
13 Passive Buzzer 1
15 Servo 1
Analog Temperature
16 2
Sensor(Thermistor)
19 DC Motor 1
21 LCD1602 1
22 Dot-matrix Display 1
23 7-segment Display 1
25 NE555 Timer 1
26 74HC595 2
27 Light Sensor(Photoresistor) 2
28 Tilt Switch 2
29 Switch 2
30 RGB LED 1
31 Red LED 8
32 Green LED 4
33 Yellow LED 4
34 Blue LED 4
35 Resistor(220) 16
36 Resistor(1K) 10
37 Resistor(10K) 10
38 Potentiometer(10K) 2
39 Capacitor(104) 5
40 Capacitor(10uF) 4
41 Button(Large) 4
42 Button(Small) 8
43 Button Cap(Red) 1
44 Button Cap(White) 1
45 Button Cap(Blue) 2
46 NPN Transistor(8050) 2
47 PNP Transistor(8550) 2
48 1N4148 Diode 2
49 1N4001 Diode 2
50 Battery Holder 1
51 Breadboard 1
52 USB Cable 1
55 Header(40 pin) 1
About Arduino..........................................................................................................................- 1 -
About Processing................................................................................................................... - 2 -
Lesson 27 Photoresistor...................................................................................................- 96 -
What is Arduino?
ARDUINO BOARD
Arduino senses the environment by receiving inputs from many sensors, and
affects its surroundings by controlling lights, motors, and other actuators.
ARDUINO SOFTWARE
You can tell your Arduino what to do by writing code in the Arduino
programming language and using the Arduino development environment.
Before the development of Arduino program, the first thing you have to do is to
install Arduino IDE software. The software provides you with the basic
development environment that is required for developing Arduino program.
You need the following URL to download Arduino IDE:
http://www.arduino.cc/en/Main/Software
For different operating system platforms, the way of using Arduino IDE is
different. Please refer to the following links:
Windows Userhttp://www.arduino.cc/en/Guide/Windows
Mac OS X Userhttp://www.arduino.cc/en/Guide/MacOSX
Linux Userhttp://playground.arduino.cc/Learning/Linux
For more detailed information about Arduino IDE, please refer to the following
link:
http://www.arduino.cc/en/Guide/HomePage
-1-
About Processing
What is Processing?
PROCESSING SOFTWARE
Download Processing:
https://www.processing.org/download/
For more detailed information about Processing IDE, please refer to the
following link:
https://www.processing.org/reference/environment/
-2-
Lesson 1 Blinking LED
Overview
In this tutorial, we will start the journey of learning Arduino UNO. To begin,
let's learn how to make an LED blink.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * 220 Resistor
- 1 * LED
- 1 * Breadboard
- 2 * Jumper Wires
Principle
In this lesson, we will program the Arduino's GPIO output high level (+5V) and
low level (0V), and then make the LED which is connected to the Arduinos
GPIO flicker with a certain frequency.
1. What is the LED?
In general, the drive current for LED is 5-20mA. Therefore, in reality it usually
needs an extra resistor for current limitation so as to protect the LED.
-3-
2. What is resistor?
The main function of the resistor is to limit currents. In the circuit, the
character R represents resistor, and the unit of resistor is ohm().
There are two methods for connecting LED to pins of an Arduino board:
R = U / I = 5V / (5~20mA) = 250~1k
The experiment is made based on method use pin D8 of the Arduino board
to control an LED. When D8 is programmed to output high level, the LED will
be turned on. Next, delay for some time. Then D8 is programmed to output
low level to turn the LED off. Repeat the above process and you can get a
blinking LED then.
3. Key functions:
-4-
setup()
The setup() function is called when a sketch starts. Use it to initialize variables,
pin modes, start using libraries, etc. The setup function will only run once,
after each powerup or reset of the Arduino board.
loop()
After creating a setup() function, which initializes and sets the initial values,
the loop() function does precisely what its name suggests, and loops
consecutively, allowing your program to change and respond. Use it to actively
control the Arduino board.
pinMode()
digitalWrite()
If the pin has been configured as an OUTPUT with pinMode(), its voltage will be
set to the corresponding value: 5V (or 3.3V on 3.3V boards) for HIGH, 0V
(ground) for LOW.
delay()
Pauses the program for the amount of time (in miliseconds) specified as
parameter. (There are 1000 milliseconds in a second.)
Procedures
-5-
Step 2: Program
/***********************************************************
File name: 01_blinkingLed.ino
Description: Lit LED, let LED blinks.
Website: www.adeept.com
E-mail: [email protected]
Author: Tom
Date: 2015/05/02
***********************************************************/
int ledPin=8; //definition digital 8 pin as pin to control the LED
void setup()
{
pinMode(ledPin,OUTPUT); //Set the digital 8 port mode, OUTPUT:
Output mode
}
void loop()
{
digitalWrite(ledPin,HIGH); //HIGH is set to about 5V PIN8
delay(1000); //Set the delay time, 1000 = 1S
digitalWrite(ledPin,LOW); //LOW is set to about 5V PIN8
delay(1000); //Set the delay time, 1000 = 1S
}
-6-
Step 3: Compile the program and upload to Arduino UNO board
Now you can see the LED blinking.
-7-
Lesson 2 Active Buzzer
Overview
In this lesson, we will learn how to program the Arduino to make an active
buzzer beep.
Components
- 1 * Arduino UNO
- 1 * USB cable
- 1 * Active buzzer
- 1 * 1 k Resistor
- 1 * NPN Transistor (S8050)
- 1 * Breadboard
- Several jumper wires
Principle
Place the pins of the buzzer face up, and then you can see the two types of
buzzer are different - the buzzer with a green circuit board onside is a passive
one.
In this lesson, the buzzer we used is active buzzer. Active buzzers will sound as
long as they are powered. We can program to make the Arduino output
alternating high and low levels to make the buzzer beep.
-8-
A slightly larger current is needed to make a buzzer beep. However, the output
current of Arduino GPIO is too low, so we need a transistor to help.
Figure 1 Figure 2
Figure 1: Set the Arduino GPIO as a high level. Then the transistor S8050 will
conduct, and the buzzer will make sounds. Set the GPIO as low, the transistor
S8050 will be de-energized, and the buzzer will stop beeping.
Figure 2: Set the Arduino GPIO as low level. The transistor S8550 will be
energized and the buzzer will beep. Set the GPIO as a high, and the transistor
S8550 will be de-energized, and the buzzer beeping will stop.
-9-
Procedures
2. Program
3. Compile the program and upload to Arduino UNO board
Now, you can hear the buzzer beeping.
- 10 -
Summary
After learning this lesson, you can master the basic principle of the buzzer and
transistor. Also you've learned how to program the Arduino and then control the
buzzer. Now you can use what you've learned in this lesson to make some interesting
things!
- 11 -
Lesson 3 Controlling an LED by a Button
Overview
In this lesson, we will learn how to detect the state of a button, and then toggle
the state of the LED based on the state of the button.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * Button
- 1 * LED
- 1 * 10k Resistor
- 1 * 220 Resistor
- 1 * Breadboard
- Several jumper wires
Principle
1. Button
Buttons are a common component used to control electronic devices. They are
usually used as switches to connect or disconnect circuits. Although buttons
come in a variety of sizes and shapes, the one used in this experiment will be
a 12mm button as shown below.
The button we used is a normally open type one. The two contacts of a button
are in the off state under the normal conditions; only when the button is
pressed they are closed.
- 12 -
The button jitter must happen in the process of using. The jitter waveform is
as the flowing picture:
Each time you press the button, the Arduino will regard you have pressed the
button many times due to the jitter of the button. You should deal with the
jitter of buttons before using. You can eliminate the jitter through software
programming. Besides, you can use a capacitor to solve the issue. Take the
software method for example. First, detect whether the level of button
interface is low level or high level. If it is low level, 5~10ms delay is needed.
Then detect whether the level of button interface is low or high. If the signal is
low, you can infer that the button is pressed once. You can also use a 0.1uF
capacitor to avoid the jitter of buttons. The schematic diagram is as shown
below:
2. Interrupt
- 13 -
3. Key functions:
Generally, an ISR should be as short and fast as possible. If your sketch uses
multiple ISRs, only one can run at a time, other interrupts will be ignored
(turned off) until the current one is finished. as delay() and millis() both rely on
interrupts, they will not work while an ISR is running. delayMicroseconds(),
which does not rely on interrupts, will work as expected.
Syntax:
attachInterrupt(pin, ISR, mode)
Parameters:
pin: the pin number
ISR: the ISR will be called when the interrupt occurs; this function must take
no parameters and return nothing. This function is sometimes referred to as
an interrupt service routine.
mode: defines when the interrupt should be triggered. Four constants are
predefined as valid values:
-LOW to trigger the interrupt whenever the pin is low,
-CHANGE to trigger the interrupt whenever the pin changes value
-RISING to trigger when the pin goes from low to high,
-FALLING for when the pin goes from high to low.
digitalRead()
Reads the value from a specified digital pin, either HIGH or LOW.
Syntax:
digitalRead(pin)
Parameters:
pin: the number of the digital pin you want to read (int)
Returns:
HIGH or LOW
delayMicroseconds(us)
Pauses the program for the amount of time (in microseconds) specified as
parameter. There are a thousand microseconds in a millisecond, and a million
- 14 -
microseconds in a second.
Currently, the largest value that will produce an accurate delay is 16383. This
could change in future Arduino releases. For delays longer than a few thousand
microseconds, you should use delay() instead.
Syntax:
delayMicroseconds(us)
Parameters:
us: the number of microseconds to pause (unsigned int)
Returns:
None
Procedures
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Now press the button, and you can see the state of the LED will be toggled
between ON and OFF.
- 15 -
Summary
Through this lesson, you should have learned how to use the Arduino UNO to
detect the status of an external button, and then toggle the state of LED on/off
relying on the state of the button detected before.
- 16 -
Lesson 4 Controlling a Relay
Overview
In this lesson, we will learn how to control a relay to break or connect a circuit.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * NPN Transistor (S8050)
- 1 * 1K Resistor
- 1 * 1N4001 Diode
- 1 * 220 Resistor
- 1 * Relay
- 1 * LED
- 1 * Breadboard
- Several jumper wires
Principle
When the coil is energized with direct current, a diode is often placed across
the coil to dissipate the energy from the collapsing magnetic field at
deactivation, which would otherwise generate a voltage spike dangerous to
- 17 -
semiconductor circuit components.
Procedures
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Now let's see what will happen: When the set of contacts are closed, the LED
lights up; when they are open, the LED goes out.
- 18 -
Summary
By this lesson, you should have learned the basic principle of relay. You can
also use the relay to do some creative applications. Just give it a try!
- 19 -
Lesson 5 Serial Port
Overview
In this lesson, we will program the Arduino UNO to achieve sending and
receiving data through the serial port. The Uno board receive data sent from a
PC, then controls an LED according to the received data, and at last returns the
state of the LED to Serial Monitor in Arduino IDE.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * LED
- 1 * 220 Resistor
- 1 * Breadboard
- Several jumper wires
Principle
1. Serial ports
Used for communication between the Arduino board and a computer or other
devices. All Arduino boards have at least one serial port (also known as a UART
or USART). It communicates on digital pins 0 (RX) and 1 (TX) as well as with
the computer via USB. Thus, if you use these functions, you cannot also use
pins 0 and 1 for digital input or output.
You can use the Arduino environment's built-in serial monitor to communicate
with an Arduino board. Click the serial monitor button in the toolbar and select
the same baud rate used in the call to begin().
To use these pins to communicate with your personal computer, you will need
an additional USB-to-serial adaptor, as they are not connected to the UNO's
USB-to-serial adaptor. To use them to communicate with an external TTL serial
device, connect the TX pin to your device's RX pin, the RX to your device's TX
pin, and the ground of your UNO to your device's ground. (Don't connect these
pins directly to an RS232 serial port; they operate at +/- 12V and can damage
your Arduino board.)
2. Key function
begin()
Sets the data rate in bits per second (baud) for serial data transmission. For
- 20 -
communicating with the computer, use one of these rates: 300, 1200, 2400,
4800, 9600, 14400, 19200, 28800, 38400, 57600, or 115200. You can,
however, specify other rates - for example, to communicate over pins 0 and 1
with a component that requires a particular baud rate.
Syntax:
Serial.begin(speed)
Parameters:
speed: in bits per second (baud) - long
Returns:
nothing
print()
Prints data to the serial port as human-readable ASCII text. This command can
take many forms. Numbers are printed using an ASCII character for each digit.
Floats are similarly printed as ASCII digits, defaulting to two decimal places.
Bytes are sent as a single character. Characters and strings are sent as is. For
example:
Serial.print(78) gives 78
Serial.print(1.23456) gives 1.23
Serial.print('N') gives N
Serial.print(Hello world.) gives Hello world.
An optional second parameter specifies the base (format) to use; permitted
values are BIN (binary, or base 2), OCT (octal, or base 8), DEC (decimal, or
base 10), HEX (hexadecimal, or base 16). For floating point numbers, this
parameter specifies the number of decimal places to use. For example:
Serial.print(78, BIN) gives 1001110
Serial.print(78, OCT) gives 116
Serial.print(78, DEC) gives 78
Serial.print(78, HEX) gives 4E
Serial.println(1.23456, 0) gives 1
Serial.println(1.23456, 2) gives 1.23
Serial.println(1.23456, 4) gives 1.2346
You can pass flash-memory based strings to Serial.print() by wrapping them
with F(). For example:
Serial.print(F(Hello World))
To send a single byte, use Serial.write().
Syntax:
Serial.print(val)
- 21 -
Serial.print(val, format)
Parameters:
val: the value to print - any data type format: specifies the number base (for
integral data types) or number of decimal places (for floating point types)
Returns
byte print() will return the number of bytes written, though reading that
number is optional
println()
Prints data to the serial port as human-readable ASCII text followed by a
carriage return character (ASCII 13, or 'r') and a newline character (ASCII 10,
or 'n'). This command takes the same forms as Serial.print().
Syntax:
Serial.println(val)
Serial.println(val, format)
Parameters:
val: the value to print - any data type
format: specifies the number base (for integral data types) or number of
decimal places (for floating point types)
Returns:
byte
println() will return the number of bytes written, though reading that number
is optional
read()
Reads incoming serial data. read() inherits from the Stream utility class.
Syntax:
Serial.read()
Parameters:
None
Returns:
the first byte of incoming serial data available (or -1 if no data is available) - int
Procedures
- 22 -
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Open IDE, click to open Serial Monitor, and then select the appropriate baud
rate according to the program.
Now, enter '1' or '0' in the textbox on the monitor, and the LED will be turned
on/off.
- 23 -
Summary
Through this lesson, we know that the computer can send data to Arduino
UNO via the serial port, and then control the state of an LED. Now try to make
more interesting things based on what you've got.
- 24 -
Lesson 6 LED Flowing Lights
Overview
In the first lesson, we have learned how to make an LED blink by programming
the Arduino. Today, we will use the Arduino to control 8 LEDs to make the LEDs
show the effect of flowing.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 8 * LED
- 8 * 220 Resistor
- 1 * Breadboard
- Several jumper wires
Principle
The principle of this experiment is very simple and is quite similar with that in
the first lesson.
Key function:
for statements
- 25 -
The initialization happens first and exactly once. Each time through the loop,
the condition is tested; if it's true, the statement block, and the increment is
executed, then the condition is tested again. When the condition becomes
false, the loop ends.
Procedures
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Now, you can see 8 LEDs light up in sequence from the green one on the right
side to others on the left, and next from the left to the right. The LEDs flash like
flowing water repeatedly in a circular way.
- 26 -
Summary
Through this simple but fun experiment, you should have learned more skills in
programming on Arduino. In addition, you can also modify the circuit and code
provided to achieve even more dazzling effects.
- 27 -
Lesson 7 LED Bar Graph Display
Overview
In this lesson, we will learn how to control an LED bar graph by programming
the Arduino.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * 10k Potentiometer
- 10 * 220 Resistor
- 1 * LED Bar Graph
- 1 * Breadboard
- Several jumper wires
Principle
The bar graph - a series of LEDs in a line, as you can see on an audio display,
is a common hardware display for analog sensors. It's made up of a series of
LEDs in a row, an analog input like a potentiometer, and a little code in
between. You can buy multi-LED bar graph displays fairly cheaply. This tutorial
demonstrates how to control a series of LEDs in a row, but can be applied to
any series of digital outputs.
This tutorial borrows from the For Loop and Arrays tutorial as well as the
Analog Input tutorial.
The sketch works like this: first read the input. Map the input to the output
range which is 0-10 in this case since ten LEDs are used. Then you set up a for loop
to iterate over the outputs. If the number in the array of the output is lower
than the mapped input minimum, it is turned on. If not, it's off.
- 28 -
The internal schematic diagram for the LED bar graph is as shown below:
Procedures
Step 2: Program
- 29 -
Step 3: Compile the program and upload to Arduino UNO board
Now, turn the knob of the potentiometer, and you will see the number of LEDs
in the LED bar graph changed.
- 30 -
Lesson 8 Breathing LED
Overview
In this lesson, we will learn how to program the Arduino to generate PWM
signals. And then we use the PWM square-wave signals to control an LED
gradually getting brighter and then slowly dimmer, much like human breath.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * LED
- 1 * 220 Resistor
- 1 * Breadboard
- Several jumper wires
Principle
Pulse Width Modulation, or PWM, is a technique for getting analog results with
digital means. Digital control is used to create a square wave, a signal switched
between on and off. This on-off pattern can simulate voltages in between full
on (5 Volts) and off (0 Volts) by changing the portion of the time the signal
spends on versus the time that the signal spends off. The duration of "on time"
is called the pulse width. To get varying analog values, you change, or
modulate, that pulse width. If you repeat this on-off pattern fast enough with
an LED for example, the result is as if the signal is a steady voltage between 0
and 5v controlling the brightness of the LED.
In the following figure, the green lines represent a regular time period. This
duration or period is the inverse of the PWM frequency. In other words, with
Arduino's PWM frequency at about 500Hz, the green lines would measure 2
milliseconds each. A call to analogWrite() is on a scale of 0 - 255, such that
analogWrite(255) requests a 100% duty cycle (always on), and
analogWrite(127) is a 50% duty cycle (on half the time) for example.
- 31 -
Key function:
analogWrite()
Writes an analog value (PWM wave) to a pin. Can be used to light an LED at
varying brightnesses or drive a motor at various speeds. After a call to
analogWrite(), the pin will generate a steady square wave of the specified duty
cycle until the next call to analogWrite() (or a call to digitalRead() or
digitalWrite() on the same pin). You do not need to call pinMode() to set the
pin as an output before calling analogWrite().
Syntax:
analogWrite(pin, value)
Parameters:
pin: the pin to write to.
value: the duty cycle: between 0 (always off) and 255 (always on).
Returns:
nothing
Procedures
- 32 -
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board.
Now, you should see the LED lights up and gets gradually brighter, and then
slowly turns dimmer. The process repeats circularly, and with the particular
rhythm it looks like animals' breath.
Summary
By learning this lesson, you should have mastered the basic principles of the PWM,
and get skilled at the PWM programming on the Arduino platform.
- 33 -
Lesson 9 Controlling an RGB LED by PWM
Overview
In this lesson, we will program the Arduino for RGB LED control, and make
RGB LED emits a various of colors of light.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * RGB LED
- 3* 220 Resistor
- 1 * Breadboard
- Several jumper wires
Principle
RGB LEDs consist of three LEDs: red, green and blue. These three colored
LEDs are capable of producing any color. Tri-color LEDs with red, green, and
blue emitters, in general using a four-wire connection with one common lead
(anode or cathode).
What we use in this experiment is a common anode RGB LED. The longest pin
is the common anode of the three LEDs. The pin is connected to the +5V pin of
the Arduino, and the rest pins are connected to pin D9, D10, and D11 of the
Arduino with a current limiting resistor between.
In this way, we can control the color of an RGB LED by 3-channel PWM signals.
- 34 -
Procedures
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Now, you can see the RGB LED flash red, green, blue, yellow, white and purple
light, and then go out. Each state lasts for 1s each time, and the LED flashes
colors repeatedly in such sequence.
- 35 -
Summary
By learning this lesson, you should have already grasped the principle and the
programming of RGB LED. Now you can use your imagination to achieve even
more cool ideas based on what you learned in this lesson.
- 36 -
Lesson 10 Playing Music
Overview
In this lesson, we will program the Arduino to control a passive buzzer, and
then make it play some music.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * NPN Transistor (8050)
- 1 * 1k Resistor
- 1 * Passive Buzzer
- 1 * LED
- 1 * 220 Resistor
- 1 * Breadboard
- Several jumper wires
Principle
As long as you send some square wave signals to a passive buzzer with
different frequencies, the buzzer will make different sounds accordingly.
Key function:
tone()
Generates a square wave of the specified frequency (and 50% duty cycle) on a
pin. A duration can be specified, otherwise the wave continues until a call to
noTone(). The pin can be connected to a piezo buzzer or other speaker to play
tones.
- 37 -
different pin, the call to tone() will have no effect. If the tone is playing on the
same pin, the call will set its frequency.
Use of the tone() function will interfere with PWM output on pins 3 and 11 (on
boards other than the Mega).
NOTE: if you want to play different pitches on multiple pins, you need to call
noTone() on one pin before calling tone() on the next pin.
Syntax:
tone(pin, frequency)
Parameters:
Returns:
nothing
noTone()
NOTE: if you want to play different pitches on multiple pins, you need to call
noTone() on one pin before calling tone() on the next pin.
Syntax:
noTone(pin)
Parameters:
Returns:
nothing
Procedures
- 38 -
Step 1: Build the circuit
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Now, you can hear the passive buzzer play music, with the LED blinking.
- 39 -
Lesson 11 LCD1602 Display
Overview
In this lesson, we will learn how to use a character display device - LCD1602
on the Arduino platform. We first make the LCD1602 display a string "Hello
Geeks!" scrolling, and then "Adeept" and www.adeept.com statically.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * LCD1602
- 1 * 10k Potentiometer
- 1 * Breadboard
- Several jumper wires
Principle
LCD1602 is a kind of character LCD display. The LCD has a parallel interface,
meaning that the microcontroller has to manipulate several interface pins at
once to control the display. The interface consists of the following pins:
A register select (RS) pin that controls where in the LCD's memory you're
writing data to. You can select either the data register, which holds what goes
on the screen, or an instruction register, which is where the LCD's controller
looks for instructions on what to do next.
8 data pins (D0-D7). The state of these pins (high or low) is the bits that
you're writing to a register when you write, or the values when you read.
There are also a display contrast pin (Vo), power supply pins (+5V and Gnd)
and LED Backlight (Bklt+ and BKlt-) pins that you can use to power the LCD,
control the display contrast, and turn on or off the LED backlight respectively.
The process of controlling the display involves putting the data that form the
image of what you want to display into the data registers, then putting
instructions in the instruction register. The LiquidCrystal Library simplifies this
for you so you don't need to know the low-level instructions.
- 40 -
The Hitachi-compatible LCDs can be controlled in two modes: 4-bit or 8-bit.
The 4-bit mode requires seven I/O pins from the Arduino, while the 8-bit mode
requires 11 pins. For displaying text on the screen, you can do most everything
in 4-bit mode, so example shows how to control a 2x16 LCD in 4-bit mode.
begin()
Specifies the dimensions (width and height) of the display.
Syntax:
lcd.begin(cols, rows)
Parameters:
lcd: a variable of type LiquidCrystal
cols: the number of columns that the display has
rows: the number of rows that the display has
setCursor()
Position the LCD cursor; that is, set the location at which subsequent text
written to the LCD will be displayed.
Syntax:
lcd.setCursor(col, row)
Parameters:
lcd: a variable of type LiquidCrystal
col: the column at which to position the cursor (with 0 being the first column)
row: the row at which to position the cursor (with 0 being the first row)
scrollDisplayLeft()
Scrolls the contents of the display (text and cursor) one space to the left.
Syntax
lcd.scrollDisplayLeft()
Parameters:
lcd: a variable of type LiquidCrystal
Example
scrollDisplayLeft() and scrollDisplayRight()
See also
scrollDisplayRight()
- 41 -
print()
Prints text to the LCD.
Syntax:
lcd.print(data)
lcd.print(data, BASE)
Parameters:
lcd: a variable of type LiquidCrystal
data: the data to print (char, byte, int, long, or string)
BASE (optional): the base in which to print numbers: BIN for binary (base 2),
DEC for decimal (base 10), OCT for octal (base 8), HEX for hexadecimal (base
16).
Returns:
byte
print() will return the number of bytes written, though reading that number is
optional
clear()
Clears the LCD screen and positions the cursor in the upper-left corner.
Syntax:
lcd.clear()
Parameters:
lcd: a variable of type LiquidCrystal
Procedures
Step 2: Program
- 42 -
Step 3: Compile the program and upload to Arduino UNO board
Now, you can see the string "Hello Geeks!" shown on the LCD1602 scrolling,
and then the string "Adeept" and "www.adeept.com" displayed statically.
Summary
After learning the experiment, you should have already mastered the driver of the
LCD1602. Now you can make something more interesting based on this lesson
and the previous lessons learned.
- 43 -
Lesson 12 A Simple Voltmeter
Overview
In this lesson, we will make a simple voltmeter (0~5V) with Arduino UNO and
LCD1602. Then, we will measure the voltage of the potentiometer(when
adjusting the knob) with the simple voltmeter and display the voltage detected
on the LCD1602.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * LCD1602
- 2 * Potentiometer
- 1 * Breadboard
- Several jumper wires
Principle
The basic principle of this experiment: Convert the analog voltage collected
from Arduino to digital quantity by the ADC (analog-to-digital converter)
through programming, and then display the voltage on the LCD1602.
Connect the three wires from the potentiometer to your Arduino board. The
first goes to ground from one of the outer pins of the potentiometer. The
second goes from analog input 0 to the middle pin of the potentiometer. The
third goes from 5V to the other outer pin of the potentiometer.
By turning the shaft of the potentiometer, you change the resistance on either
side of the wiper which is connected to the center pin of the potentiometer.
This changes the voltage at the center pin. When the resistance between the
middle and the side one (connected to 5V) is close to zero (and the resistance
on the other side is close to 10k Ohm), the voltage at the middle pin is close to
5V. When the resistances are reversed, the voltage at the center pin changes
to about 0V, or ground. This voltage is the analog voltage that you're reading
as an input.
- 44 -
done in the opposite direction, it's 5 volts going to the pin and the input value
is 1023. In between, analogRead( ) returns a number between 0 and 1023
that is proportional to the amount of voltage being applied to the pin.
Key functions:
analogRead()
Reads the value from the specified analog pin. The Arduino board contains a 6
channel (8 channels on the Mini and Nano, 16 on the Mega), 10-bit analog to
digital converter. This means that it will map input voltages between 0 and 5
volts into integer values between 0 and 1023. This yields a resolution between
readings of: 5 volts / 1024 units or, 0.0049 volts (4.9 mV) per unit. The input
range and resolution can be changed using analogReference( ).
Syntax:
analogRead(pin)
Parameters:
pin: the number of the analog input pin to read from (0 to 5 on most boards,
0 to 7 on the Mini and Nano, 0 to 15 on the Mega)
Returns:
int (0 to 1023)
Procedures
- 45 -
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO.
Now, turn the shaft of the potentiometer, and you will see the voltage
displayed on the LCD1602 changed.
Summary
The working principle of the voltmeter is reading analog voltage which is input
to the ADC inside. Through this lesson, you should have mastered how to read
analog value and how to make a simple voltmeter with Arduino. Try to use the
voltmeter you made and feel the charm of making!
- 46 -
Lesson 13 7-segment Display
Overview
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * 220 Resistor
- 1 * 7-segment Display
- 1 * Breadboard
- Several jumper wires
Principle
The segment display can be divided into two types: common anode and
common cathode segment displays, by internal connections.
- 47 -
Each segment of a segment display is composed of an LED, so a resistor is
needed for protecting the LED.
A 7-segment display has seven segments for displaying a figure andone more
for displaying a decimal point. For example, if you want to display a number '1',
you should only light the segment b and c, as shown below.
Procedures
Step 2: Program
- 48 -
Step 3: Compile the program and upload to Arduino UNO board
Now, you should see the number 0~9 and characters A~F displayed in turn on
the segment display.
Summary
Through this lesson, you should have learned the principle and programming
of the segment display. You can use what you've learned in the previous
lessons to modify the code provided in this lesson to make cooler works.
- 49 -
Lesson 14 A Simple Counter
Overview
In this lesson, we will program the Arduino UNO to make a simple counter.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * 4-digit 7-segment Display
- 8 * 220 Resistor
- 2 * Button
- 1 * Breadboard
- Several jumper wires
Principle
The 4-digit segment display is a form of electronic display device for displaying
decimal numerals that is an alternative to the more complex dot
matrix displays.
4-digit segment displays are widely used in digital clocks, electronic meters,
basic calculators, and other electronic devices that display numerical
information.
- 50 -
The pin number is as follows:
Procedures
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Now, press one button of the two, and the value displayed on the 4-digit
7-segment display will be changed.
- 51 -
Summary
By learning this lesson, you'll find that it is so easy to make a simple counter.
Then, try your own ways to use this tool to impress makers!
- 52 -
Lesson 15 Controlling a Servo
Overview
In this lesson, we will introduce a new electronic device (Servo) to you, and tell
you how to control it with the Arduino UNO.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * Servo
- Several jumper wires
Principle
1. Servo motor
The servo motor has three wires: power, ground, and signal. The power wire is
typically red, and should be connected to the 5V pin on the Arduino board. The
ground wire is typically black or brown and should be connected to a ground
pin on the Arduino board. Usually the signal pin is yellow, orange or white, and
should be connected to a digital pin on the Arduino board. Note that the servo
motor draws a considerable amount of power, if you need to drive more than
one or two servos, you'll probably need to power them with an extra supply
(i.e. not the +5V pin on your Arduino). Be sure to connect the grounds of the
Arduino and external power supply together.
2. Servo library
attach()
Attach the Servo variable to a pin. Note that in Arduino 0016 and earlier, the
Servo library supports only servos on only two pins: 9 and 10.
Syntax:
servo.attach(pin)
- 53 -
servo.attach(pin, min, max)
Parameters:
Procedures
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Now, you should see the servo rotate from 0 to 180 degrees, and then do it in
the opposite direction.
- 54 -
Summary
After learning, you should have known that the Arduino provides a servo
library for you to control a servo. By using this library, you can easily control a
servo by programming. Just fully play your imagination and make some
interesting applications!
- 55 -
Lesson 16 Measuring Temperature by a
Thermistor
Overview
In this lesson, we will learn how to use a thermistor to collect the temperature
data by programming Arduino. The information what a thermistor collects is
displayed on the LCD1602.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * LCD1602
- 1 * 10k Potentiometer
- 1 * 10k Resistor
- 1 * Thermistor
- 1 * Breadboard
- Several jumper wires
Principle
B-parameter: 3470.
25 resistance: 10k.
: 2.718281828459
- 56 -
: the Kelvin temperature that you want to measure
After transforming the above equation, we can get the following formula:
Procedures
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Now, you can see the temperature collected by thermistor on the
LCD1602.
- 57 -
Summary
After this lesson, you may have learned to use a thermistor to measure the
temperature. Next, you can use it to make some interesting applications.
- 58 -
Lesson 17 IR Remote Controller
Overview
In this lesson, we will learn how to use an IR receiver to receive signals from a
remote controller.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * IR Receiver HX1838
- 1 * Remote Controller
- 1 * Breadboard
- Several jumper wires
Principle
The IR receiver HX1838 can receive signals from an infrared (IR) remote
controller. It has only three pins: signal, VCC and GND. So it is simple to
connect with an Arduino board.
- 59 -
Note:
Before using this library, you have to delete the RobotIRremote directory in
your Arduino IDE directory (check in IDE by File->Preferences, and see the
path in the Browse dialog box), and delete the RobotIRremote directory in the
system Documents folder. For example, if your computer is running on
Windows 7, you need to delete the RobotIRremote directory in
C: \Users\SJG\Documents\Arduino\libraries.
Otherwise, when you compile the program, errors will be prompted
Procedures
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Now, press a button on the remote controller, and you will see the button
number displayed on Serial Monitor.
- 60 -
- 61 -
Summary
Now you should have mastered the basic principle of the infrared remote
controlling. Try to apply the principle and make more creations!
- 62 -
Lesson 18 Temperature & Humidity Sensor
DHT-11
Overview
In this lesson, we will learn how to use DHT-11 to collect temperature and
humidity by programming Arduino.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * LCD1602
- 1 * 10k Potentiometer
- 1 * DHT-11 Temperature and Humidity Sensor
- 1 * Breadboard
- Several jumper wires
Principle
Item: DHT11
Temperature Accuracy: 2
- 63 -
+: VCC (3.3~5.5V)
-: GND (0V)
S: data pin
Procedures
Step 2: Program
/***********************************************************
Website: www.adeept.com
E-mail: [email protected]
Author: Tom
Date: 2015/05/02
***********************************************************/
#include <dht11.h>
#include <LiquidCrystal.h>
dht11 DHT11;
- 64 -
#define DHT11PIN 2
LiquidCrystal lcd(4, 6, 10, 11, 12, 13);// Define the connection LCD pin
void setup()
lcd.clear(); //Clears the LCD screen and positions the cursor in the upper-left corner
void loop()
lcd.print(" % "); // Print the unit of the centigrade temperature to the LCD.
lcd.print(" C "); // Print the unit of the centigrade temperature to the LCD.
delay(1000); // delay 1S
- 65 -
Summary
Through this lesson, you should be able to measure the rooms temperature
and humidity. Now try to make a simple smart home system based on this and
the previous lessons.
- 66 -
Lesson 19 Ultrasonic Distance Sensor
Overview
In this lesson, we will learn how to measure the distance by the ultrasonic
distance sensor.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * Ultrasonic Distance Sensor
- 1 * LCD1602
- 1 * 10k Potentiometer
- Several jumper wires
Principle
This recipe uses the popular Parallax PING ultrasonic distance sensor to
measure the distance to an object ranging from 2cm to around 3m.
microseconds / 29 / 2
- 67 -
Procedures
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Now, change the distance between the ultrasonic module and the obstacle,
and you will find the distance value displayed on the LCD1602 changed.
- 68 -
Lesson 20 3-axis AccelerometerADXL345
Overview
In this lesson, we will learn how to use ADXL345 to collect acceleration data by
programming Arduino UNO, and then display the data ADXL345 collects on the
LCD1602.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * LCD1602
- 1 * 10k Potentiometer
- 1 * ADXL345 Acceleration Sensor
- 1 * Breadboard
- Several jumper wires
Principle
1. ADXL345
The ADXL345 is a small, thin, ultralow power, 3-axis accelerometer with high
resolution (13-bit) measurement at up to 16 g. Digital output data is
formatted as 16-bit twos complement and is accessible through either a SPI
(3-wire or 4-wire) or I2C digital interface. The ADXL345 is well suited for
mobile device applications. It measures the static acceleration of gravity in
tilt-sensing applications, as well as dynamic acceleration resulting from motion
or shock. Its high resolution (3.9 mg/LSB) enables measurement of inclination
changes less than 1.0.
2. Wire Library
This library allows you to communicate with I2C/TWI devices. I2C/TWI pins
are A4 (SDA) and A5(SCL) on Arduino UNO R3 board.
3. Key functions:
Wire.begin()
Wire.begin(address)
- 69 -
Initiate the Wire library and join the I2C bus as a master or slave. This should
normally be called only once.
Parameters:
address: the 7-bit slave address (optional); if not specified, join the bus as a
master.
Returns:
None
Wire.beginTransmission(address)
Begin a transmission to the I2C slave device with the given address.
Subsequently, queue bytes for transmission with the write() function and
transmit them by calling endTransmission().
Parameters:
address: the 7-bit address of the device to transmit to
Returns:
None
Wire.write()
- 70 -
If true, endTransmission() sends a stop message after transmission, releasing
the I2C bus.
If false, endTransmission() sends a restart message after transmission. The
bus will not be released, which prevents another master device from
transmitting between messages. This allows one master device to send
multiple transmissions while in control.
The default value is true.
Syntax:
Wire.endTransmission()
Wire.endTransmission(stop)
Parameters:
stop: boolean. true will send a stop message, releasing the bus after
transmission. false will send a restart, keeping the connection active.
Returns:
byte, which indicates the status of the transmission:
-0: success
-1: data too long to fit in transmit buffer
-2: received NACK on transmit of address
-3: received NACK on transmit of data
-4: other error
Wire.requestFrom()
Used by the master to request bytes from a slave device. The bytes may then
be retrieved with the available() and read() functions.
As of Arduino 1.0.1, requestFrom() accepts a boolean argument changing its
behavior for compatibility with certain I2C devices.
If true, requestFrom() sends a stop message after the request, releasing the
I2C bus.
If false, requestFrom() sends a restart message after the request. The bus will
not be released, which prevents another master device from requesting
between messages. This allows one master device to send multiple requests
while in control.
The default value is true.
Syntax:
Wire.requestFrom(address, quantity)
Wire.requestFrom(address, quantity, stop)
Parameters:
address: the 7-bit address of the device to request bytes from
- 71 -
quantity: the number of bytes to request
stop: boolean. true will send a stop message after the request, releasing the
bus. false will continually send a restart after the request, keeping the
connection active.
Returns:
byte : the number of bytes returned from the slave device
Wire.available()
Returns the number of bytes available for retrieval with read(). This should be
called on a master device after a call to requestFrom() or on a slave inside the
onReceive() handler.
available() inherits from the Stream utility class.
Parameters:
None
Returns:
The number of bytes available for reading.
Wire.read()
Reads a byte that was transmitted from a slave device to a master after a call
to requestFrom() or was transmitted from a master to a slave. read() inherits
from the Stream utility class.
Syntax:
Wire.read()
Parameters:
none
Returns:
The next byte received
lcd.setCursor()
Position the LCD cursor; that is, set the location at which subsequent text
written to the LCD will be displayed.
Syntax:
lcd.setCursor(col, row)
Parameters:
lcd: a variable of type LiquidCrystal
col: the column at which to position the cursor (with 0 being the first column)
row: the row at which to position the cursor (with 0 being the first row)
Procedures
- 72 -
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Now, you can see the acceleration data collected by ADXL345 displayed on the
LCD1602.
Summary
- 73 -
After learning this lesson, you should have got the usage of the ADXL345. Next,
you can use it to make more interesting applications.
- 74 -
Lesson 21 4x4 Matrix Keypad
Overview
In this lesson, we will learn how to use a matrix keypad.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * 4x4 Matrix Keyboard
- 1 * Breadboard
- Several jumper wires
Principle
- 75 -
In this tutorial, we use the Keypad library. Before programming, please install
the library (for how to, see Lesson 17).
Procedures
Step 2: Program
- 76 -
- 77 -
- 78 -
Lesson 22 Controlling DC motor
Overview
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * L9110 DC Motor Driver
- 1 * DC Motor
- 4 * Button
- 4 * LED
- 4 * 220 Resistor
- 1 * Battery Holder
- 1 * Breadboard
- Several jumper wires
Principle
1. L9110
L9110 is a driver chip which is used to control and drive motor. The chip has
two TTL/CMOS compatible input terminals, and possesses the property of
anti-interference: it has high current driving capability, two output terminals
that can directly drive DC motor, each output port can provide 750~800mA
dynamic current, and its peak current can reach 1.5~2.0A; L9110 is widely
applied to various motor drives, such as toy cars, stepper motors, and power
switches and so on.
- 79 -
OA, OB: These are used to connect the DC motor.
DC motors were the first type widely used, since they could be powered from
existing direct-current lighting power distribution systems. A DC motor's
speed can be controlled over a wide range, using either a variable supply
voltage or by changing the strength of current in its field windings. Small DC
motors are used in tools, toys, and appliances. The universal motor can
operate on direct current but is a lightweight motor used for portable power
tools and appliances.
- 80 -
3. Key functions
The break keyword exits the switch statement, and is typically used at the end
of each case. Without a break statement, the switch statement will continue
executing the following expressions ( falling-through ) until a break, or the
end of the switch statement is reached.
Example:
switch (var) {
case 1:
//do something when var equals 1
break;
case 2:
//do something when var equals 2
break;
default:
// if nothing else matches, do the default
// default is optional
}
Syntax:
switch (var) {
case label:
// statements
break;
case label:
// statements
break;
default:
// statements
}
Parameters:
- 81 -
label: a value to compare the variable to
Procedures
Step 1: Build the circuit (Make sure that the circuit connection is correct before
powering on; otherwise it may cause the chips to burn.)
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Press the btn1 button to stop or run the DC motor; press btn2 to make it go
forward or reverse; press btn3 to accelerate the motor; press btn4 to
decelerate it. When any of the four buttons is pressed, the corresponding LED
will flash, prompting that the current button is pressed down.
- 82 -
Summary
Now you must have grasped the basic theory and programming of the DC
motor after all the study. You not only can make it go forward and reverse, but
also regulate its speed. Besides, you can do more awesome applications with
what you've learnt.
- 83 -
Lesson 23 PS2 Joystick
Overview
In this lesson, we will learn the usage of joy stick. We program the Arduino to
detect the state of PS2 joystick, and display the data on an LCD1602.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * LCD1602
- 1 * 10k Potentiometer
- 1 * PS2 JoyStick
- 1 * Breadboard
- Several jumper wires
Principle
Joysticks are often used to control video games, and usually have one or more
push-buttons whose state can also be read by the computer. A popular
variation of the joystick used on modern video game consoles is the analog
stick. Joysticks are also used for controlling machines such as cranes, trucks,
underwater unmanned vehicles, wheelchairs, surveillance cameras, and zero
turning radius lawn mowers. Miniature finger-operated joysticks have been
adopted as input devices for smaller electronic equipment such as mobile
phones.
- 84 -
Procedures
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Now, you can see the PS2 joystick state information displayed on the
LCD1602.
- 85 -
Lesson 24 Tilt Switch
Overview
In this lesson, we will learn how to use the tilt switch and change the state of
an LED by changing the angle of tilt switch.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * Tilt Switch
- 1 * LED
- 1 * 220 Resistor
- 1 * Breadboard
- Several jumper wires
Principle
The tilt switch is also called the ball switch. When the switch is tilted in the
appropriate direction, the contacts will be connected, tilting the switch the
opposite direction causes the metallic ball to move away from that set of
contacts, thus breaking that circuit.
Procedures
- 86 -
Step 2: Program
/***********************************************************
File name: 24_tiltSwitch.ino
Description: Tilt switches to control the LED light on or off
Website: www.adeept.com
E-mail: [email protected]
Author: Tom
Date: 2015/05/02
***********************************************************/
void setup()
{
pinMode(ledpin,OUTPUT); //Define small lights interface for the
//output interface
pinMode(tiltSwitchpin,INPUT_PULLUP);//define the tilt switch
//interface for input interface
}
void loop()
{
val=digitalRead(tiltSwitchpin);//Read the number seven level value is
//assigned to val
if(val==LOW) //Detect tilt switch is disconnected, the
//tilt switch when small lights go out
{ digitalWrite(ledpin,LOW);} //Output low, LED OFF
else //Detection of tilt switch is conduction,
//tilt the little lights up when the switch conduction
{ digitalWrite(ledpin,HIGH);} //Output high, LED ON
}
- 87 -
Summary
In this lesson, we have learned the principle and application of the tilt switch.
Tilt switch is a very simple electronic component, but simple device can often
make something interesting.
- 88 -
Lesson 25 Dot-matrix Display
Overview
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * 8*8 Dot-matrix
- 2 * 74HC595
- 1 * Breadboard
- Several jumper wires
Principle
1. Dot-matrix display
- 89 -
A 8*8 dot-matrix display consists of 64 LEDs, and each LED is placed at the
intersection of the lines and columns. When the corresponding row is set as
high level and the column is set as low level, then the LED will be lit.
A certain drive current is required for the dot-matrix display. In addition, more
pins are needed for connecting dot-matrix display with controller. Thus, to
save the Arduinos GPIO, driver IC 74HC595 is used in the experiment.
2. 74HC595
The 74HC595 is an 8-stage serial shift register with a storage register and
3-state outputs. The shift register and storage register have separate clocks.
Data is shifted on the positive-going transitions of the SH_CP input. The data in
each register is transferred to the storage register on a positive-going
transition of the ST_CP input. The shift register has a serial input (DS) and a
serial standard output ( Q7' ) for cascading. It is also provided with
asynchronous reset (active LOW) for all 8 shift register stages. The storage
register has 8 parallel 3-state bus driver outputs. Data in the storage register
appears at the output whenever the output enable input (OE) is LOW.
In this experiment, only 3 pins of Arduino are used for controlling a dot-matrix
display due to the existence of 74HC595.
Q7: Series data output pin, always connected to DS pin of the next 74HC595
OE: Output enable pin, effective at low level, connected to the ground directly
MR: Reset pin, effective at low level, directly connected to 5V high level in
practical applications
- 90 -
3. Key function:
shiftOut()
Shifts out a byte of data one bit at a time. Starts from either the most (i.e. the
leftmost) or least (rightmost) significant bit. Each bit is written in turn to a data
pin, after which a clock pin is pulsed (taken high, then low) to indicate that the
bit is available.
Syntax:
shiftOut(dataPin, clockPin, bitOrder, value)
Parameters:
dataPin: the pin on which to output each bit (int).
clockPin: the pin to toggle once the dataPin has been set to the correct value.
bitOrder: which order to shift out the bits; either MSBFIRST or LSBFIRST.
(Most Significant Bit First, or, Least Significant Bit First)
value: the data to shift out. (byte)
Returns:
None
Procedures
Step 1: Build the circuit (Make sure that the circuit connection is correct and
then power, otherwise it may cause the chips to burn.)
- 91 -
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Now, you can see a rolling Adeept should be displayed on the dot-matrix
display.
Summary
- 92 -
Lesson 26 Controlling Stepper Motor
Overview
In this lesson, we will learn how to control a stepper motor.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * Stepper Motor
- 1 * ULN2003 Driver Board
- Several jumper wires
Principle
1. stepper motors
Stepper motors, due to their unique design, can be controlled to a high degree
of accuracy without any feedback mechanisms. The shaft of a stepper,
mounted with a series of magnets, is controlled by a series of electromagnetic
coils that are charged positively and negatively in a specific sequence,
precisely moving it forward or backward in small "steps".
There are two types of steppers, Unipolars and Bipolars, and it is very
important to know which type you are working with. In this experiment, we
will use a unipolar stepper.
Arduino UNO R3 board cannot directly drive stepper motors. A driver circuit is
necessary, so we choose an ULN2003 driver board here as shown below. There
are four LEDs on the top. The white booth in the middle is connected to the
- 93 -
stepper motor. The bottom is four pins used to connect with Arduino digital
pins. When a pin is high, the corresponding LED will light up. The black jump
hat on the right is power source input end. The driving method for stepper
motor can be categorized as four-beat and eight-beat. In this experiment, we
take eight-beat for example, for it is simple. You can drive the motor as long as
you input HIGH to the four ports A, B, C and D in turn.
It is 360 degrees for the shaft to take a turn. In this experiment, we set that it
takes 512 steps to take a turn. So each step will be 360/512 = 0.7 degrees.
Procedures
- 94 -
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Now, the stepper motor can run fast in a clockwise circle, next the stepper
motor can run slow in a counterclockwise circle.
- 95 -
Lesson 27 Photoresistor
Overview
In this lesson, we will learn how to measure the light intensity by photoresistor
and make the measurement result displayed on the LCD1602.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * LCD1602
- 1 * Photoresistor
- 1 * 10k Resistor
- 1 * 10k Potentiometer
- 1 * Breadboard
- Several jumper wires
Principle
- 96 -
With the increase of the light intensity, the resistance of photoresistor will be
decreased. The voltage of GPIO port in the above figure will become high.
Procedures
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Now, when you try to block the light towards the photoresistor, you will find
that the value displayed on the LCD1602 will be reduced. Otherwise, when you
use a powerful light to irradiate the photoresistor, the value displayed on the
LCD1602 will be increased.
- 97 -
Summary
- 98 -
Lesson 28 Automatically Tracking Light
Source
Overview
In this lesson, we will make a light tracking system based on a servo and a
photoresistor.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * Servo
- 1 * Photoresistor
- 1 * 10k Resistor
- 1 * Breadboard
- Several jumper wires
Principle
In this experiment, we need to fasten the photoresistor with the horn of servo.
First, we control the servo with a photoresistor to rotate from 0 to 180 to
record the intensity of illumination, and then the photoresistor will stop at the
brightest position.
Procedures
- 99 -
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
- 100 -
Lesson 29 Frequency Meter
Overview
In this lesson, we will make a simple frequency meter with the Arduino UNO.
We will acquire the frequency of square wave which is generated by 555 timer,
and then send the result to serial monitor through USB port.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * NE555 Timer
- 1 * 10k Resistor
- 1 * 10k Potentiometer
- 2 * 104 Capacitor
- 1 * Breadboard
- Several jumper wires
Principle
1. NE555
The 555 integrated circuit is originally used as a timer, and that is why it is
called 555 timer or 555 time-based circuit. It is widely used in various
electronic products because of its reliability, convenience and low price. There
are dozens of components in the 555 integrated circuit, such as divider,
comparator, basic R-S trigger, discharge tube, and buffer. This is a complex
circuit and a hybrid composed of analog and digital circuits.
As shown in the above figure, the 555 integrated circuit is dual in-line with 8
pins package(DIP).
- 101 -
Pin 7, the DISCHARGE which has two states of suspension and ground
connection also decided by input, is the output of the internal discharge tube;
Pin 4 is the RESET that outputs low level when supplied low voltage level;
Pin 5 is the CONTROL VOLTAGE that can change the upper and lower level
trigger value;
Pin 8 (Vcc) is the power supply;
Pin 1(GND) is the ground.
The circuit can generate a square wave signal that the frequency is adjustable.
The frequency can be calculated by the formula:
1.44
Frequency
RA 2RB C
2. Key functions
pulseIn()
Reads a pulse (either HIGH or LOW) on a pin. For example, if value is HIGH,
pulseIn() waits for the pin to go HIGH, starts timing, then waits for the pin to
go LOW and stops timing. Returns the length of the pulse in microseconds.
Gives up and returns 0 if no pulse starts within a specified time out.
The timing of this function has been determined empirically and will probably
show errors in longer pulses. Works on pulses from 10 microseconds to 3
minutes in length.
Syntax:
pulseIn(pin, value)
pulseIn(pin, value, timeout)
Parameters:
pin: the number of the pin on which you want to read the pulse. (int)
value: type of pulse to read: either HIGH or LOW. (int)
timeout (optional): the number of microseconds to wait for the pulse to start;
- 102 -
default is one second (unsigned long)
Returns:
the length of the pulse (in microseconds) or 0 if no pulse started before the
timeout (unsigned long)
Procedures
Step 1: Build the circuit (Make sure that the circuit connection is correct before
powering on; otherwise it may cause the chips to burn.)
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Now, rotate the potentiometer knob, and the frequency value of square waves
printed on Serial Monitor will be changed.
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Now, rotate the potentiometer knob, and the frequency value of square waves
printed on Serial Monitor will be changed.
- 103 -
- 104 -
Summary
Afrer this lesson, you should have mastered the principle of timer and can
make a simple frequency meter by yourself. You can display the value of
square frequency to a LCD1602 by modifying the code we provided.
- 105 -
Lesson 30 Intrusion Detection based on the
PIR
Overview
In this lesson, we will learn how to use Passive Infrared (PIR) sensor to detect
the movement that happens nearby.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * PIR Movement Sensor
- 1 * 220 Resistor
- 1 * LED
- Several jumper wires
Principle
The sensor has pins marked OUT, -, and + (for Output, GVD, and +5V).
PIR sensors respond to heat and can be triggered by animals such as cats and
dogs, as well as by people and other heat sources. The output pin of a PIR
sensor will go HIGH when a motion is detected.
Procedures
- 106 -
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
The LED will be turned on when any motion is detected.
- 107 -
Lesson 31 Controlling a Relay by IR Remote
Controller
Overview
In this experiment, we will program the Arduino UNO to control a relay by
remote controller.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * IR Receiver HX1838
- 1 * Remote Controller
- 1 * NPN Transistor (S8050)
- 1 * 1k Resistor
- 1 * 220 Resistor
- 1 * 1N4001 Diode
- 1 * Relay
- 1 * LED
- 1 * Breadboard
- Several jumper wires
Principle
The remote IR receiver connected to the Arduino UNO is used to receive IR
signals from remote controller. If you press the different keys (key 0 or key 1)
on the remote controller, the relay state will be toggled on/off.
Procedures
- 108 -
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Now, press the button 0 on the remote controller, and the LED will be off.
Then press button 1, and the LED will be turned on. At the same time, you will
hear the sound of relay toggling.
- 109 -
Lesson 32 Controlling an RGB LED by IR
Remote Controller
Overview
In this lesson, we will use the remote IR receiver and the RGB to do an
experiment - control the RGB LED by the infrared remote controller.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * IR Receiver HX1838
- 1 * Remote Controller
- 1 * RGB LED
- 3* 220 Resistor
- 1 * Breadboard
- Several jumper wires
Principle
This experiment is to connect an RGB LED with a remote controller, and by
programming the Arduino board, realize controlling the LED by the remote
controller.
If you press a certain key except 0 on the remote controller, you will find the
color of an RGB LED changed. When you press the key marked with 0, the
RGB LED will be off.
Procedures
- 110 -
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Now press any key except 0 on the remote control and the color of the RGB
LED will change; press key 0, then the LED will be turned off.
- 111 -
Lesson 33 Controlling a Stepper Motor by
IR Remote Controller
Overview
In this lesson, we will learn how to control a stepper motor by a remote
controller.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * IR Receiver HX1838
- 1 * Remote Controller
- 1 * Stepper Motor
- 1 * ULN2003 Driver Board
- 1 * Breadboard
- Several jumper wires
Principle
If you press a certain key on the remote controller, the corresponding signal
will be sent to the Arduino UNO, and then the Arduino can tell the stepper
motor how many steps it needs to run in which direction. For example, when
you press the key +, the stepper motor will run clockwise; press the key -,
the motor will run counterclockwise; press the key 2, it will rotate two laps;
press the key 5, it will rotate five laps.
Procedures
- 112 -
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
- 113 -
Lesson 34 Controlling the Size of a Circle by
Potentiometer
Overview
In this lesson, we will collect the potentiometer data by programming the
Arduino UNO Board, and then send the data to the Processing through serial
communication to change the size of a circle.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * 10k Potentiometer
- 1 * Breadboard
- Several jumper wires
Principle
The experiment consists of two parts: first, acquire the data from Arduino;
second, process the data.
Arduino key function:
write()
Writes binary data to the serial port. This data is sent as a byte or series of
bytes; to send the characters representing the digits of a number use the
print() function instead.
Syntax:
Serial.write(val)
Serial.write(str)
Serial.write(buf, len)
Parameters:
- 114 -
Returns:
byte
write() will return the number of bytes written, though reading that number
is optional
Processing key function:
Name: size()
Description:
Defines the dimension of the display window in units of pixels. The size()
function must be the first line of code, or the first code inside setup(). Any
code that appears before the size() command may run more than once,
which can lead to confusing results.
The system variables width and height are set by the parameters passed to
this function. If size() is not used, the window will be given a default size of
100x100 pixels.
Syntax:
size(w, h)
size(w, h, renderer)
Parameters:
renderer
Returns:
void
Name: println()
Description:
The println() function writes to the console area, the black rectangle at the
bottom of the Processing environment. This function is often helpful for
looking at the data a program is producing. Each call to this function creates
- 115 -
a new line of output. More than one parameter can be passed into the
function by separating them with commas. Alternatively, individual elements
can be separated with quotes ("") and joined with the addition operator (+).
Before Processing 2.1, println() was used to write array data to the console.
Now, use printArray() to write array data to the console.
Note that the console is relatively slow. It works well for occasional messages,
but does not support high-speed, real-time output (such as at 60 frames per
second).
Syntax:
println()
println(what)
println(variables)
Parameters:
what Object, String, float, char, boolean, or byte: data to print to console
Returns:
void
Name: background()
Description:
The background() function sets the color used for the background of the
Processing window. The default background is light gray. This function is
typically used within draw() to clear the display window at the beginning of
each frame, but it can be used inside setup() to set the background on the
first frame of animation or if the backgound need only be set once.
An image can also be used as the background for a sketch, although the
image's width and height must match that of the sketch window. Images
used with background() will ignore the current tint() setting. To resize an
image to the size of the sketch window, use image.resize(width, height).
- 116 -
PGraphics object and createGraphics().
Syntax:
background(rgb)
background(rgb, alpha)
background(gray)
background(gray, alpha)
background(image)
Parameters:
Returns:
void
Name: fill()
Description:
Sets the color used to fill shapes. For example, if you run fill(204, 102, 0), all
subsequent shapes will be filled with orange. This color is either specified in
terms of the RGB or HSB color depending on the current colorMode(). (The
default color space is RGB, with each value in the range from 0 to 255.)
- 117 -
When using hexadecimal notation to specify a color, use "#" or "0x" before
the values (e.g., #CCFFAA or 0xFFCCFFAA). The # syntax uses six digits to
specify a color (just as colors are typically specified in HTML and CSS). When
using the hexadecimal notation starting with "0x", the hexadecimal value
must be specified with eight characters; the first two characters define the
alpha component, and the remainder define the red, green, and blue
components.
The value for the "gray" parameter must be less than or equal to the current
maximum value as specified by colorMode(). The default maximum value is
255.
Syntax:
fill(rgb)
fill(rgb, alpha)
fill(gray)
fill(gray, alpha)
Parameters:
Returns:
void
Name:ellipse()
Description:
- 118 -
Draws an ellipse (oval) to the screen. An ellipse with equal width and height is
a circle. By default, the first two parameters set the location, and the third
and fourth parameters set the shape's width and height. The origin may be
changed with the ellipseMode() function.
Syntax:
ellipse(a, b, c, d)
Parameters:
Returns:
Void
Note:
1. In this experiment, my Arduino UNO board is connected to my computer
port COM26. But it may differ in your case. So please adjust it according to
your actual situation.
2. If Processing prompts that you need to install the related function library,
please do it.
Procedures
- 119 -
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Step 4: Run the Processing software (Processing_Potentiometer.pde)
Now, turn the knob of the potentiometer, and you will see a blue circle size to
change on the computer.
- 120 -
- 121 -
- 122 -
Lesson 35 Controlling the 3D Model by PS2
Joystick
Overview
In this lesson, we will collect the state of a joystick by programming the
Arduino UNO Board, and then send the data to the Processing through the
serial communication.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * PS2 Joystick
- 1 * Breadboard
- Several jumper wires
Principle
The experiment consists of two parts: first, acquire the data from Arduino;
second, process the data.
Here use the Arduino UNO board to collect data of the joystick state, and
upload the data to the computer through the serial port. The data will be
processed by Processing and shown with 3D image.
Note:
1. In this experiment, my Arduino UNO board is connected to my computer
port COM26. But it may differ in your case. So please adjust it according to
your actual situation.
2. If the Processing does not run normally, you may need to install the related
function libraries.
Procedures
- 123 -
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Step 4: Run the Processing software (Processing_PS2Joystick.pde)
Move the joystick, and the 3D model will follow movement changes
accordingly on your computer.
- 124 -
- 125 -
Lesson 36 Snake Game
Overview
In this lesson, we will make a Snake Game based on the Processing, and play
the game with two buttons.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 2 * Button
- 1 * Breadboard
- Several jumper wires
Principle
The experiment consists of two parts: first, acquire the data from Arduino;
second, process the data.
1. When you press the right button, the snake will move to the right.
2. Press the left button, and the snake will move to the left.
Note:
1. You need to install the Sound library.
3. If the Processing does not run normally, you may need to install the related
function libraries.
Procedures
- 126 -
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Step 4: Run the Processing software (Snake_Game_Processing_Button.pde)
- 127 -
- 128 -
Lesson 37 Star Wars
Overview
In this lesson, we will make a star wars game based on the Processing and
play the game with a PS2 joystick and a button connected to the Arduino
UNO.
Components
- 1 * Arduino UNO
- 1 * USB Cable
- 1 * Button
- 1 * PS2 Joystick
- 1 * Breadboard
- Several jumper wires
Principle
The experiment consists of two parts: first, acquire the data from Arduino;
second, process the data.
1 When you press the button, the fighter aircraft will fire bullets
When you operating the PS2 Joystick, you can change the position of
movement of the fighter aircraft.
Note:
1. In this experiment, my Arduino UNO board is connected to my computer
port COM26. But it may differ in your case. So please adjust it according to
your actual situation.
2. If the Processing does not run normally, you may need to install the related
function libraries.
Procedures
- 129 -
Step 2: Program
Step 3: Compile the program and upload to Arduino UNO board
Step 4: Run the Processing software (Processing_PS2Joystick_Button.pde)
- 130 -
- 131 -
- 132 -