Você está na página 1de 204

POP-BOT XT : The Arduino Compatible Mobile Robot kit 1

Arduino compatible robot kit


activity manual
(c) Innovative Experiment Co. ,Ltd.
www.inex.co.th
www.inexglobal.com
2 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Credits
POP-XT ; the robot controller board are trademarks of Innovative Experiment Co., Ltd.
POP-BOT XT, POP-BOT XT logo, INEX, and INEX logo are trademarks of Innovative Experiment
Co., Ltd.
AVR, Atmel, Atmel logo, AVR Studio are registered trademarks of Atmel Corporation.
WinAVR is trademark of SourceForge, Inc.
AVR-GCC is copyright of Free Software Foundation, Inc.
Arduino and Arduino Leonardo is an open source project supported by many. The Team
is composed of Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino, and David
Mellis. Nicholas Zambetti has contributed since the beginning. Yaniv Steiner and Giorgio
Olivero have been supporting the project and are working at using it with the Instant
Soup platform. The Arduino platform used to include the avr-gcc tool chain, uisp, and
the Procyon AVR-LIB by Pascal Stang. The Arduino language syntax is based on Wiring
by Hernando Barragan. The Arduino environment is based on Processing by Ben Fry and
Casey Reas. Thanks to all the people who are supporting arduino.
I
2
C is a registered trademark of NXP Semiconductors.
Microsoft, Windows are registered trademarks of the Microsoft Corporation.
Windows 2K, Windows XP, Windows Vista and Windows7 are registered trademarks of
the Microsoft Corporation.
Macintosh, MAC OSX are registered trademarks of the Apple computer.
All product and service names mentioned herein are the trademarks of their respective
owners.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 3
1 : POP-BOT XT robot kit introduction and part list...........................................................................5
2 : Building the POP-BOT XT mobile robot.......................................................................................17
3 : Arduino 1.0 installation.............................................................................................................25
4 : Arduino programming.............................................................................................................55
5 : POP-BOT XT program development by Arduino 1.0................................................................87
6 : POP-BOT XT controller board hardware experiment......................................................93
7 : POP-BOT XT library file...........................................................................................................109
8 : POP-BOT XT movement control ...............................................................................................139
9 : POP-BOT XT object avoidance by contact.........................................................................153
10 : POP-BOT XT line tracking mission.............................................................................................161
11 : POP-BOT XT touchless object avoiding.............................................................................183
12 : POP-BOT XT with Servo motor...........................................................................................191
Contents
4 POP-BOT XT : The Arduino Compatible Mobile Robot kit
POP-BOT XT : The Arduino Compatible Mobile Robot kit 5
Chapter 1
POP-BOT XT robot kit
introduction and part list
POP-BOT XT is an Arduino compatible, mobile robotic platform. It comes complete
with wheels, motors, sensors, software, documentation, etc. The POP-BOT XT controller
board is preloaded with the Arduino Leonardo bootloader. The Arduino 1.0 or higher
software is recommended.
For students and teachers; this kit comes with a comprehensive set of activities
and introducing sensors and microcontrollers using the well-popular Arduino platform. No
soldering is required so the kit is perfectly safe for the classroom. The POP-BOT XT robot kit
comes with 2 versions :
1. POP-BOT XT Lite kit. It includes the POP-XT control l er board that uses the
ATmega32U4 microcontroller and on-board color graphic LCD. It also includes simple sensors
(touch sensors and infrared reflector sensors), DC motor gearboxes and many mechanical
parts that allow you to make an autonomous robot suitable for learning of the C/C++
programming language. This version is most affordable for beginners in robotics.
2. POP-BOT XT Standard kit . It also includes all components that are in the Lite kit
with additional sensors and other extra part such as the Infrared ranger, 2 extra pieces of
the Infrared reflector sensor (total are 4 sets), a standard servo motor and extra quantities
of the mechanical part. With the standard kit version, it allows users to learn more about
robotics in education as well as competition.
1.1 Part list
1. POP-XT ; the Arduino Leonardo compatible robot controller board with the color
graphic LCD includes 4-AA battery holder
2. LED output board with JST cable (2 sets)
3. Switch/Touch sensor with JST cable (2 sets)
4. Infrared reflector board with JST cable (2 sets)*
5. GP2D120 Infrared distance sensor with JST cable**
6. 48:1 ratio 4.5 to 6Vdc motor gearbox with IDC cable (2 sets)
7. Standard servo motor (Operating voltage is 4.8 to 7.2Vdc)**
8. Circle wheel and Threaded rubber wheel set with 2mm. tapped-screw. (2 sets)
6 POP-BOT XT : The Arduino Compatible Mobile Robot kit
9. 80 x 60 cm. and 80 x 80 cm. Plastic Grid plate set (2 sets)
10. Circle base with idle ball wheels
11. Plastic joiner and Strip joiner set ***
12. Right-angled metal shaft set (4 pieces of each 1x 2, 2 x 2 and 2 x 5 holes)
13. Nuts and Screws set
14. Line tracking demo paper sheet
15. The standard USB-miniB cable for downloading and communication
16. CD-ROM contains software tools, source code and documentation
* Increase to 4 sets for Infrared reflector sensor for the Standard kit version
** Only available in the Standard kit version
*** There is 30 pieces of 3-type mix colored plastic joiner and 4 pieces of each 3/5/
12 holes of Strip joiner for Lite kit and 6 0 pieces of 3-type mix colored plastic joiner for
Standard kit
1.2 Microcontroller components information
1.2.1 The POP-XT controller board
POP-XT is a controller board using the Atmel AVR microcontroller ATmega32U4
(www.atmel .com). It is connected to the USB port directly for communication and
download the running code. It is easy to use and very convenient . POP-XT is a hardware
that is Arduino Leonardo compatible (www.arduino.cc). The board can be used with
Arduino1.0 development software. The POP-XT controller board is a complete, low-cost
development platform designed for those interested in learning and using Arduino in robotic
applications. Its compact size, convenient features, and low price make it an ideal tool
for the student and educator. Figure 1-1 shows the layout of POP-XT board and complete
schematic diagram of its is shown in the figure 1-2.
The summarized technical feature of the POP-XT board is as follows :
The main microcontroller is 8-bit microcontroller from ATmel; ATmega32U4. It
includes 10-bit A/D converter with 12-channel, 32KB of flash program memory, 1KB of
EEPROM, 2.5KB of RAM and 16MHz clock frequency.
25-I/O port and assign to 12 of 3-pin JST connectors for interfacing with sensors
and peripherals
Screw terminal block for battery connections. It supports +4.8 to +12Vdc and has
an on-board power switch.
+5Vdc switching regulator power supply circuit. Its regulates the supply voltage
for microcontroller devices and all sensor ports.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 7
128x160 pixels color graphic LCD stack board. includes KNOB, OK and RESET
button. This display board onlu supports line-art graphic, vector graphic, color background
and text (no support the image file).
8-Universal port support Analog input functions and Digital input/output function;
A0 to A7 (18 to 23, 4 and 6 digital pin)
I
2
C bus port; SDA (2) and SCL (3)
UART port; RxD (0) and TxD (1)
2-ch. DC motor driver with indicators. Supports motor voltage of 2.5 to 13.5Vdc.
3-Servo motor output; connect with the digital port 30 (SV1), 12 (SV2) and 13 (SV3).
Piezo speaker connections. It is connected with digital port 11.
LED power and Low battery indicator
Direct USB port connection for communication and upload the running code
ISP pad for upgrading and firmware recovery by using the external In-System
Programming (AVR-ISP mark II from Atmel is recommended)
Figure 1-1 The layout of POP-XT controller board
8 POP-BOT XT : The Arduino Compatible Mobile Robot kit
PE6
IC1
ATMega32U4
(TQFP44)
UVcc
D-
D+
UGnd
UCap
VBus
PB0
PB1
PB2
PB3
P
B
7
R
S
T
V
c
c
G
N
D
X
T
A
L
2
X
T
A
L
1
P
D
0
P
D
1
P
D
2
P
D
3
P
D
5
A
V
c
c
G
N
D
A
R
E
F
P
F
0
P
F
1
P
F
4
P
F
5
P
F
6
P
F
7
G
N
D
V
c
c
SCL 3 RXD 0 A7 6
SDA 2 TXD 1 4
CR1
16MHz
SW2
RESET
R3
4k7
ISP
C1
1F
+5V
A0 18
A1 19 A3 21 A5 23
A2 20 A4 22
R4
4k7
LED1
BLUE
+5V
+5V
+5V
R1
27
D-
D+
ID
GND
VUSB
K1
mini B-USB
USB port
+USB
K3
BATT
4.8-7.2V
+5V
PF7
PF6 PF4 PF0
PF5 PF1
PD0 PD2 PD7
PD1 PD3 PD4
G
A6
SP1
PIEZO
Speaker
SV1
SV2
13
+Vm
GND
SV3
IC2
TB6612FNG
A
1
A
1
P
G
P
G
A
2
A
2
B
2
B
2
P
G
P
G
B
1
B
1
R7
1k
R8
1k
A B
BDIR
BPWM 10
7
9
5 ADIR
APWM
DC. MOTOR
OUTPUT
+
V
m
P
W
M
A
+
V
m
+
V
m
P
W
M
B
B
I
N
2
B
I
N
1
G
N
D
S
T
B
V
c
c
A
I
N
1
A
I
N
2
+Vm +Vm
+-+-
PB5 PB6
PE6 PC6
R5
4k7
+5V
R6
4k7
+5V
+5V
Q1
KRC102
+Vm
SWITCH
ON
+Vm
IC3
KIA278R05
1 2
3
D1
MBRS340
IC4
NCP1450
- 5.0
2 1 5,6,7,8
4
1,2,3
Q3
FDS6680A
5
4
+5V
11
3
R2
27
C2
0.01F
C3
10F
16V
C4
0.1F
C5
0.1F
C6
100F
10V
C7
0.1F
C8
0.1F
Q2
KRC102
C9
0.1F
C10
470F
16V
C11
470F
16V
L1
10H
C12
0.1F
C13
220F
10V
11
10
9
8
7
6
5
4
3
2
1
44 43 4241 4039 38 3736 35 34
33
32
31
30
29
28
27
26
25
24
23
22 21 20 19 18 17 16 15 14 13 12
PE2
PC7
PC6
PB6
PB5
PB4
PD7
PD6
PD4
AVcc
GND
1 2 3 4 5 6 7 8 9 10 11 12
24 23 22 21 20 19 18 17 16 15 14 13
4
RST
17
15
16
14
31
8
xx Arduino Leonardo pin name
Pxx Atmel pin name
+
7
REF
23
22
21
20
19
18
3
1
P
E
2
1
3 5
1
1
1
0 9 8
1
4
30
12
6
16
14
3
2
0
RST
+
17
15
Port assignment is
compatible with
Arduino Leonardo
P
B
4
A
8
S
P
I
E
x
t
.
GND
GND
GND
+
12
GND
+Vm
30
GND
+Vm
N
/
C
G
N
D
C
S
V
c
c
V
c
c
C
L
K
M
I
S
O
D
/
C
/
R
S
T
G
N
D
L
E
D
A
L
E
D
K
G
N
D
N
/
C
1 2 3 4 5 6 7 8 9 10 11 12 13 14
SW3
RESET
+3.3V
R10
4.7k
D1
1N4148
+3.3V
+3.3V
R9
4.7
R11
4.7k
R13
4.7k
R12
4.7k
R14
4.7k
R16
4.7k
R15
4.7k
R17
4.7k
R18
4.7k
31 PE2
16 PB2
15 PB1
17 PB0
RST
GLCD
128x160 pixel
21-character
16-line
IC5
LM1117-3.3V
+5V +3.3V
C14
10F
16V
C15
0.1F
C16
10F
16V
R11
1k
VR1
KNOB
R11
1k
SW5
OK
+5V
8 PB4
C18
0.1F
C17
0.1F
Figure 1-2 The completely schematic diagram of POP-XT controller board
POP-BOT XT : The Arduino Compatible Mobile Robot kit 9
1.3.1 DC motor gearbox
This robot kit provides 48:1 ratio DC motor gearbox; model BO-2 with IDC connector
cable. Features include :
Operating voltage is +3 to +9Vdc
Current consumption 130mA @ +6Vdc and no load)
Average speed 170 to 250 round per minute (RPM) @ +6V and no load
Weight is 30 grams
Minimum torque is 0.5 kg.cm.
Attached with the plastic mounting with 5 of insert nuts
42 x 45 x 22.7 mm. (WxLxH) dimension
1.3.2 ZX-LED : the simple output board
This module use 8mm. diameter LED. It requires logic 1 or high for driving LED.
The schematic diagram is shown in trhge figure 1-3.
Q1
KRC102
(DTC114)
R1
(Default = 510)
LED1
+
S
Figure 1-3 The ZX-LED completely schematic diagram
10 POP-BOT XT : The Arduino Compatible Mobile Robot kit
1.3.3 Standard RC servo motor (available only in Standard kit)
The standard servo is ideal for robotics and basic movement projects. These servos
will allow a movement range of 0 to 180 degrees. The servo output gear shaft is a standard
Futaba configuration. Technical specifications are :
Operating voltage is 6Vdc max.
Speed 0 deg to 180 deg in 1.5 seconds on average.
Weight 45.0 grams/1.59oz
Torque 3.40 kg-cm/47oz-in
Size mm (L x W x H) 40.5x20.0x38.0
1.4 Sensor module features
1.4.1 Switch module/Touch sensor
DATA
R3
220
R2
10k
R1
510
LED1
S1
Switch
Indicator
Signal output
GND
+V
The switch input is used to detect collision at logic 0. Two sets along with the
connecting cable are provided.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 11
1.4.2 ZX-03 : Infrared reflector sensor
The heart of this sensor is TCRT5000 reflective object sensor. It is designed for close
proximity infrared (IR) detection. Theres an infrared diode behind its transparent blue window
and an infrared transistor behind its black window. When the infrared emitted by the diode
reflects off a surface and returns to the black window, it strikes the infrared transistors base,
causing it to conduct current. The more infrared incident on the transistors base, the more
current it conducts. When used as an analog sensor, the ZX-03 can detect shades of gray on
paper and distances over a short range if the light in the room remains constant.
10k
TCRT5000
510
+V
GND
OUT
Infrared Reflector
Signal connector
The suitable distance from sensor to line or floor is during 3 to 8 mm. The output
voltage is during 0.1 to 4.8V and digital value from10-bit A/D converter is 20 to 1,000. Thus,
ZX-03 will suitable to apply to line tracking sensor.
1.4.3 GP2D120 Infrared distance sensor (available only in Standard kit)
One of the special sensors in robotics is the GP2D120. It is an Infrared Distance
sensor. Some people call it the IR Ranger. With the GP2D120 module, it adds the distance
measuring and Obstacle detection using infrared light feature to your robot. POP-BOT XT
robot can avoid obstacles without having to make any physical contact.
Infrared LED transmitter Infrared Receiver
GND Vout Vcc
GP2D120
Features of the GP2D120 module
Uses Infrared light reflection to measure range
Can measure a range from 4 to 30cm.
4. 5 to 5 V power supply and 33mA electric current
The output voltage range is 0.4 to 2.4V when supplied by +5V
12 POP-BOT XT : The Arduino Compatible Mobile Robot kit
GP2D120 Infrared Ranger module has 3 terminals: Power input (Vcc), Ground (GND)
and Voltage output (Vout). To read the voltage values from the GP2D120, you must wait
till after the acknowledgement period which is around 32 to 52.9 ms.
The output voltage of GP2D120 is at a range of 30cm. and +5V power supply is
between 0.25 to 0.55V, with the mean being 0.4V. At the range of 4cm., the output voltage
will change at 2.25V 0.3V.
1.5 POP-BOT XT cable information
The POP-BOT XT mobile robot kit includes some signal cables for the interfacing
between the controller board, sensor module and the computer. They includes the JST3AA-
8 cables for interconnection to the sensor module and the standard USB-miniB cable for
interfacing with the computer.
1.5.1 JST3AA-8 cable
This is an INEX standard cable, 3-wires combined with 2mm. The JST connector is at
each end. 8 inches (20cm.) in length. Used for connecting between microcontroller board
and all the sensor modules in the POP-BOT robot kit. The wire assignment is shown in the
diagram below.
2mm. pitch
GND
S
+5V
2mm. pitch
GND
S/Data
+5V
1.5.2 Standard USB-miniB cable
This is used to connect between the computers USB port and the POP-XT controller
board. Its length is 1.5 metres approximation.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 13
1.6 Mechnical prt features
1.6.1 Circle wheel and Tire set
Includes 2 pairs of the suittable circle wheel for BO-2 DC motor gearbox and tread
rubber tire. Fix the wheel with gearbox shaft by 2mm. self-tapping screws

1.6.2 Plastic grid plate set
Includes each of the universal plastic grid palte 2 sizes; 80x60mm. and 80x80mm.
Each plate provides 3mm. diameter holes with 5mm. pitch.
1.6.3 Circle base
This base is injected from high quality ABS plastic. Diameter is 250mm. It has 2 free
ball wheels at both side. This base has many 3mm. holes for fixing the controller board,
sensors and more mechanical parts.
14 POP-BOT XT : The Arduino Compatible Mobile Robot kit
1.6.4 Plastic joiners
30 pieces (60 pieces in Standard kit version) of varied color joiners made from PVC
plastic. They can be connected together or by using screws and 3 mm nuts in installation.
There are 3 types; Right angle, Obtuse and Straight joiner.
1.6.5 Strip joiners
They are made from plastic. Each joiner has 3mm. hole 5mm. pitch. Each joiner
can connect for lenght expansion. They are 4 pieces of 3 sizes; 3, 5 and 12 holes type.
Total 12 pieces.
1.6.6 Box holder
It is injected plastic box for supporting the POP-XT controller board. It has some of
3mm. hole for fixing with any platform.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 15
1.6.7 Right-angle metal shaft
It is 7.5mm. width right-angle metal shaft. Each shaft has 3mm. hole for inserting the
screw to fix with another structures. The set includes 4 pieces of 1x2, 2x2 and 2x5 holes
metal shaft.

1.6.8 Screw and Nut set
Includes 2 of 2mm. self-tapping screws, 4 of 3x8mm. M3 screws, 30 of 3x10mm. M3
screws, 4 of 3x15 mm. M3 screws, 4 of 3x40mm. M3 screws, 10 of 3x8mm. flat-head screws
and 30 of 3mm. M3 nuts.

1.6.9 Metal spacer
They are metal parts for supporting the plate and sensor board. They are made
from nikle plating metal. Includes 6 of 32mm. metal hexagonal spacers. Each standoff has
3mm. thread through-hole.
1.6.10 Plastic spacer
They are some mechanical parts for supporting the plate and sensor board. This kit
includes 4 pieces set of plastic spacer (3mm., 10mm., 15mm. and 25mm.) 4 sets
16 POP-BOT XT : The Arduino Compatible Mobile Robot kit
POP-BOT XT : The Arduino Compatible Mobile Robot kit 17
The POP-BOT XT robot is a small autonomous robot controlled by ATmega32U4
microcontroller. Although it is built with minimum components and parts, the user will
many learning oppotunities. Learn how DC motor are controlled. Learn about how to
read data from various sensors both digital and analog types. Learn how to write
conditional statements for a given task. Learn how to interface with the Graphical Color
Display and much more
This chapter presents how to build the POP-BOT XT robot with the standard platform.
We will use this platform to learn and try out all the activities.
POP-BOT XT
Arduino Leonardo compatible robot
Movement with DC motor gearboxes and wheels.
Controlled by POP-XT controller board
Programmable via direct USB port
Support a variety of sensors such as
Infrared refelctor for line tacking,
Touch sensor for object avoiding,
Infrared ranger or Distance sensor
for touchless object avoiding.
Supports wired remote control which
includes the PlayStation controller and
the Wii Nunchuk controller.
Supports wireless serial data
communication module such as Xbee and Bluetooth.
Includes the 128x160 pixels color graphic LCD for monitoring and display status.
3 servo motor driver ports. Support small RC servo motor 4.8 to 6V.
Requires 4 of AA batteries. The Al cal ine, Evol ta and Rechargeabl e Ni-MH are
recommendded.
Chapter 2
Building the POP-BOT XT robot
18 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Strip joiner 3, 5 and 12 holes
(4 pieces each)
POP-XT controller board x1 Circle base x 1 Box holder x 1
Circle wheel and tire x 2 DC motor gearbox x 2 32mm. metal spacer x 4
2.1 Part list
Infared reflector x 2
Plastic joiners
Right angled
metal shaft 2x2 x 2
2mm. self-tapping screw x 2
Plastic spacer set Screw and Nut set
Switch input board
(Touch sensor) x 2
POP-BOT XT : The Arduino Compatible Mobile Robot kit 19
(1) Attach both the DC motor gearboxes with the Box holder by using 3 x 8mm. flat screws.
(2) Attach 2 of 33mm. metal spacers with the Box holder by 3 x 8mm. flat screws at the
following positions as shown in the pictures below.
(3) Insert the wheel with tire to DC motor gearboxs shaft and fix with 2mm. self-tapping
screws.

2.2 Building procedure
3x8mm. flat screws
3x8mm. flat screws
3x8mm.
flat screws
3x8mm. flat screws
3x8mm. flat screws
32mm. metal spacer
32mm.
metal spacer
2mm. self-tapping
screw x 2
Circle wheel and tire x 2
20 POP-BOT XT : The Arduino Compatible Mobile Robot kit
(4) Attach the gearbox structure as shown in step (3) with the circular base by using 3 x
8mm. flat screws at the following positions shown in the pictures below. See the wheels
position is the center of the base.
(5) Attace the ZX-03 sensor with 5-hole strip joiner by using 3 x 15mm. screws and 3mm.
nuts at the first hole of strip joiner. Make 2 sets for the left and right sensors of robot.
(6) Attach the strip joiner and ZX-03 from step (5) at front left side and right side by using
3 x 10mm. screws and 3mm. nuts.
5-hole strip joiner
screw fixing position
screw fixing position
ZX-03
ZX-03
POP-BOT XT : The Arduino Compatible Mobile Robot kit 21
(7) Attach 2 pieces of 5-hole strip joiner with the front side of the robot chasis following
the picture below by using 3 x 10mm. screws and 3mm. nuts also.
(8) Attach the ZX-01 switch/touch sensor with the right angle joiner by using 3 x 10mm.
screw and 3mm. nut. Next, insert an obtuse joiner at the end of the right angle joiner
following the picture below. Make 2 sets.
Obtuse joiner
3 x 10mm.
screw
Right angle
joiner
3mm. nut
22 POP-BOT XT : The Arduino Compatible Mobile Robot kit
(9) Connect the switch arms from step (8) to the end of both of the strip joiners.
(10) Place the POP-XT controller board into the box holder on the top of robot chasis.Turn
the sensor port side (red connectors) to the front as shown in the picture below.
Sensor port side
POP-BOT XT : The Arduino Compatible Mobile Robot kit 23
(11) Connect the motor cable to the Motor output. Check the polarity by turning the
wheel, if pole connection is correct - LED at motor output will be green and change to
red if turn back. If not, please change the connection to opposite.
(12) Connect the left ZX-03 cable to port A1/19, right ZX-03 cable to port A0/18, left switch
to A5/23 and right switch to A4/22.
Motor A - left wheel
right ZX-03 : A0/18
left ZX-03 : A1/19
left ZX-01 : A5/23
right ZX-01 : A4/22
Motor B - right wheel
Motor B cable (right side)
Motor A cable (left side)
24 POP-BOT XT : The Arduino Compatible Mobile Robot kit
(13) This is the POP-BOT XT that is ready to be programed and run.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 25
This chapter describes the details of the Arduino1.0 software used in POP-BOT XT
programming development. It is used for creating, compiling and uploading the code to
the POP-BOT XT robot. It also supports Windows XP or higher, MAC OS and Linux.
3.1 Software installation for Windows 7
3.1.1 Software and USB driver installation
The software that comes with the POP-BOT XT robot kit includes Arduino 1.0 software
that containing the driver and interfacing information of POP-XT controller with Arduino
IDE, a library file of the POP-BOT XT robot named popxt.h and some example codes. The
installation procedure is as follows.
(3.1.1.1) Insert the CD-ROM that comes with the POP-BOT XT kit into the CD-ROM
drive of your computer. Find and double-click the file arduino1.0.1release_setup120531.exe
(or any similar name). The Welcome window will appear, click on the Next button to install.
Next, the windows installer will ask where to install the program, click on the Next button to
continue.
Chapter 3
Arduino 1.0 installation
26 POP-BOT XT : The Arduino Compatible Mobile Robot kit
(3.1.1.2) The installer will ask for a name to be created at Start Menu, click on the
Next button. The installer will show the installation summary, click on the Install button to
begin installation. Installation will take some time, be patient ti allow the installation to
finish.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 27
(3.1.1.3) Next, the USB device drivers installer window will appear. It is the pre-driver
installer of the POP-XT controller board. Click on the Next button to continue.
(3.1.1.4) Click on the Install this driver software anyway box. The USB driver installation
will require you to click twice to continue. Make sure you click the Install this driver software
anyway box twice.
28 POP-BOT XT : The Arduino Compatible Mobile Robot kit
(3.1.1.5) The driver installation process takes place. Wait until the installation is
complete. It will appear that driver installation is complete and it will show the name of
the installed drivers at Arduino LLC. Click on the Finish button to finish the installation.
3.1.2 Upload testing
(3.1.2.1) Prepare the robot first. Open the batter holder cover and put 4 x AA
batteries. The alcaline or rechargeable 1800mAH type is recommended. After that, put
the POP-XT controller back into the robot chasis.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 29
(3.1.2.2) Turn on power. Wait for a few seconds and then plug in the USB-miniB
cable to the robot. The other end of the USB cable plug into the USB port of your computer.
This step is very important.
YOU MUST TURN ON THE POWER SUPPLY FIRST and WAIT A
FEW SECONDS before connecting the USB cable. It will not work if
these few steps are not done properly.

(3.1.2.3) After connecting the POP-XT controller board to the USB port, the system
will start to verify your hardware. After this is done, check the connection by going to My
Computer, click on the right mouse button select Properties. Enter to Control panel and
select Device Manager
30 POP-BOT XT : The Arduino Compatible Mobile Robot kit
(3.1.2.4) See the Ports listing, will find a list of Unicon & POP-XT (COMxx) by the
number of COM port could be changed on each computer. For eample is COM26
Remember this COM port number as its required for operation with Arduino1.0.
(3.1.2.5) Open the Arduino 1.0x software. The connection between the POP-XT
controller and computer via USB port still exist.
(3.1.2.6) Choose the example sketch file for upload testing. For example, choose
the Example_glcdFillCircle file from File > Example > POP-BOT XT > Example_glcdFillCircle
POP-BOT XT : The Arduino Compatible Mobile Robot kit 31
(3.1.2.7) Select the hardware by Tools > Board > POP-XT (Caterina).
(3.1.2.8) Select the COM port from Tools > Serial port > COMxxx . This example is
COM26.
(3.1.2.9) Upload the sketch file by clinking on the button or select menu File >
Upload
32 POP-BOT XT : The Arduino Compatible Mobile Robot kit
(3.1.2.10) Wait until the uploading finish. The status message; Done uploading is
appeared on the staus bar at the bottom of Arduino IDE window.
(3.1.2.11) After uploaded; the POP-XT controller board run immediately. The GLCD
screen displays the margenta solid rectangle.
(3.1.2.12) At the Device Manager window; the new hardware will be appeared. It
is Unicon Board & POP-XT (COMxx) . The number of COM port will be changed to COM27.
The next uploading requires the new port. User must check the port availibility before
uploading by using the Device Manager or check by menu Tools > Serial port of Arduino
IDE
Note : The USB driver installation of the POP-XT contoller board
will generate 2 COM ports that have number is consequently.
If user meet the uploading problem :
(1) Check the current COM port again or
(2) Remove the USB cable and plug again. Check the current
COM port before uploading from Device manager or menu Tools >
Serial port of Arduino IDE.
3.1.3 Troubleshooting if system cannot be find the driver for
POP-XT board when change of USB port connection
After installing the USB drivers completed, user should continue to use the same
USB port. In case of any change to the USB port; there maybe a need to install new drivers
which may be different from the above explained normal steps.
If the system can not find drivers for the hardware interface. Follow the steps below.
(3.1.3.1) Open the Device Manager by clicking the right mouse button at the My
Computer and choose Property. After that select the Device Manager. At the Device
Manager; found the device that has ! symbol in front. Click the right mouse button at that
device name and select to Update Driver
POP-BOT XT : The Arduino Compatible Mobile Robot kit 33
(3.1.3.2) The update driver window will appear. Choose the Browse my computer
for driver software option to locate the drivers manually.
(3.1.3.3) Set the driver location to C:\Arduino\drivers\Unicon POP-XT Driver. Click
on the Next button to update the driver.
34 POP-BOT XT : The Arduino Compatible Mobile Robot kit
(3.1.3.4) System will warn about the safety of the drivers are installed. Select Install
this driver software anyway to confirm the installation.
(3.1.3.4) Windows will take a while to install the drivers. After which the Device
Manager window will display the device name; Unicon Board & POP-XT (COMxx) with the
COM port number based on the registration of each computer.
The driver installtion requires many steps. Therefore, proper following of instructions
is required to reduce errors in this installation.
After the driver has been installed, the POP-BOT XT robot is ready for programming.
When updating or installing the drivers is complete. The user should check
the port number is always before upload programs to the POP-XT controller board.
The Arduino 1.0x IDE has the ability to find the port to connect the entire system is
automated. And the driver of the Arduino Leonardo (Caterina) that is used in the
POP-XT controller board create the virtual COM port to connect to the computer
to alternate between two port numbers in each RESET and upload a new sketch.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 35
3.2 Software installation for Windows XP
3.2.1 Software and USB driver installation
The software installation in Windows XP is also similar Windows 7.
(3.2.1.1) Insert the CD-ROM that comes with the POP-BOT XT kit into the CD-ROM drive
of your computer. Find and double-click the file arduino1.0.1release_setup120531.exe (or
any similar name). The Welcome window will appear, click on the Next button to install.
Next, the windows installer will ask where to install the program, click on the Next button to
continue.
36 POP-BOT XT : The Arduino Compatible Mobile Robot kit
(3.2.1.2) the installer will ask for a name to be created at Start Menu, click on the
Next button. The installer will show the installation summary, click on the Install button to
begin installation. Installation will take some time, be patient ti allow the installation to
finish.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 37
(3.2.1.3) Next, the USB device drivers installer window will appear. It is the pre-driver
installer of the POP-XT controller board. Click on the Next button to continue.
(3.2.1.4), The driver installation process takes place. Wait until the installation is
complete. It will appear that driver installation is complete and it will show the name of
the installed drivers at Arduino LLC. Click on the Finish button to finish the installation.
38 POP-BOT XT : The Arduino Compatible Mobile Robot kit
3.2.2 Upload testing and install the USB driver
Only the POP-BOT XT USB driver installation process is different in Windows XP. The
procedures are as follows :
(3.2.2.1) Prepare the robot first. Open the batter holder cover and put 4 x AA
batteries. After that, put the POP-XT controller back into the robot chasis.
(3.2.2.2) Turn on power. Wait for a few seconds and then plug in the USB port of
your computer.
(3.2.2.3) After plugging the cable into the robot; the computer detects new hardware
as a USB composite and ask for the location of the driver file to install. Click on the Install
from a list or specific location (Advanced) and click on the Next button to next step.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 39
(3.2.2.4) Choose the location as C:\Arduino\Drivers . Click on the Next button.
(3.2.2.5) The driver installation starts. Wait until the installation is completed. Click on
the Finish button.
(3.2.2.6) Check the COM port number of POP-XT that is created by the driver
installtion at Control Panel > System > Hardware > Device Manager > Ports > Unicon Board
& POP-XT (COM xx). An example would be COM179
40 POP-BOT XT : The Arduino Compatible Mobile Robot kit
The installation for the USB drivers for Windows XP
is not complete as yet. There is still another procedure
that has to be done. Please ensure you finish all
procedures follow this.
(3.2.2.7) Open the Arduino 1.0x software. The connection between the POP-XT
controller and computer via USB port still exist.
(3.2.2.8) Choose the example sketch file for upload testing. For example, choose
the Example_glcdRect file from File > Example > POP-BOT XT > Example_glcdRect
(3.2.2.9) Select the hardware by Tools > Board > POP-XT (Caterina).
POP-BOT XT : The Arduino Compatible Mobile Robot kit 41
(3.2.2.10) Select the COM port from Tools > Serial port > COMxxx . This example is
COM26.
(3.2.2.11) Upload the sketch file by clinking on the button or select menu File
> Upload
(3.2.2.12) Wait until the uploading finish. The status message; Done uploading is
appeared on the staus bar at the bottom of Arduino IDE window.
(3.2.2.13) After uploaded; the POP-XT controller board run immediately. The GLCD
screen displays the red rectangle shape. Now the first USB driver installation is completed.
(3.2.2.14) Next, the computer detects new hardware and ask for the location of the
driver file to install again. It is second round of USB driver installation. Click on the Install from
a list or specific location (Advanced) and click on the Next button to next step.
42 POP-BOT XT : The Arduino Compatible Mobile Robot kit
(3.2.2.15) Choose the location as C:\Arduino\Drivers . Click on the Next button.
(3.2.2.16) The driver installation starts. Wait until the installation is completed. Click
on the Finish button.
(3.2.2.17) Wait a second. The Found New Hardware Wizard is appeared again.
Click on the Install from a list or specific location (Advanced) and click on the Next button
to next step.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 43
(3.2.2.18) Choose the location as C:\Arduino\Drivers again. Click on the Next
button.
(3.2.2.19) The driver installation start. Wait until the installation is completed. Click
on the Finish button.
44 POP-BOT XT : The Arduino Compatible Mobile Robot kit
(3.2.2.20) At the Device Manager window; the new hardware will be appeared. It
is Unicon Board & POP-XT (COMxx) . The number of COM port will be changed to COM180.
The next uploading requires the new port. User must check the port availibility before
uploading by using the Device Manager or check by menu Tools > Serial port of Arduino
IDE.
The driver installtion requires many steps. Therefore, proper following of instructions
is required to reduce errors in this installation.
After the driver has been installed, the POP-BOT XT robot is ready for programming.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 45
3.2.3 USB driver installation for changing the USB port
After installing the USB drivers completed; user should continue to use the same
USB port. In case of any change to the USB port; there maybe a need to re-install new
drivers which may be different from the above explained normal steps.
The driver installation starts with USB composite device driver installation. After that,
install the POP-XT controller board driver. It is called Caterina in boot mode. This step requires
the OK switch pressing on the POP-XT controller board.
(3.2.3.1) After connect the POP-XT controller board to new USB port, the computer
detects new hardware and ask for the location of the driver file to install again. It is second
round of USB driver installation. Click on the Install from a list or specific location (Advanced)
and click on the Next button to next step.
(3.2.3.2) Also choose the location as C:\Arduino\Drivers . Click on the Next button.
46 POP-BOT XT : The Arduino Compatible Mobile Robot kit
(3.2.3.3) The driver installation starts. Wait until the installation is completed. Click on
the Finish button.
(3.2.3.4) With the USB cable still connected to the POP-XT board and the computer,
turn-off power of the POP-XT controller board. Then, press and hold at the OK switch near
the GLCD on the POP-XT controller board. Turn-on power and release the OK switch.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 47
(3.2.3.5) The Found New Hardware Wizard is appeared immediately. Click on the
Install from a list or specific location (Advanced) and click on the Next button to next step.
(3.2.3.6) Choose the location as C:\Arduino\Drivers . Click on the Next button.
48 POP-BOT XT : The Arduino Compatible Mobile Robot kit
(3.2.3.7) The driver installation starts. Wait until the installation is completed. Click on
the Finish button.
(3.2.3.8) Check the current COM port for interfacing at Control Panel > System >
Hardware > Device Manager. See the Ports listing, will find a list of Unicon & POP-XT (COMxx)
by the number of COM port could be changed on each computer. Remember this COM
port number as its required for operation with Arduino1.0.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 49
3.3 Arduino1.0 software installation for MAC OSX10.6
The installation of Arduino1.0 siftware for Macintosh computer is not complicated.
Since all files are contained in a ZIP file. The installation step is as follows :
(3.3.1) Copy the Arduino1.0.zip from CD-ROM or downloaded from www.inex.co.th
or www.uniconboard.com to Desktop.
(3.3.2) Extract this file by Open With > Archive Utility.
(3.3.3) The extracted file are the Arduino files. There is a software icon below.
(3.3.4) Open the Finder window. Drag the Arduino icon to Applications
50 POP-BOT XT : The Arduino Compatible Mobile Robot kit
(3.3.5) Double-click to open Arduino software. Select menu Tool s > Board > POP-XT
(3.3.6) Tunr on the POP-XTcontroller board. Wait a few seconds for initialization. Plug
the USB cable to board and computer.
(3.3.7) Select menu Tools > Serial Port > /dev/tty.usbmodemxxxx. (xxxx is number
of usbmodem)

If user can do follows all steps, it means the software installation is completed. The
POP-BOT XT also ready for operating with Macintosh computer and MAC OSX10.6.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 51
3.4 Arduino environment
After starting Arduino IDE, the main window will appear as shwon in the figure 3-1.
The Arduino includes the environments as follows.
Menu : Select the operation command
Toolbar : Includes all most command button
Tabs : Allows you to manage sketches with more than one file (each of
which appears in its own tab).
Text editor : Text editor area for creating the sketch.
Message area : Shows the program operation status such as compiling result.
Text area : The space demonstrates compiling information and Serial data
Terminal window if enable.
Figure 3-1 The Arduino1.0 environment
Tools bar
Menu
Message area
Serial Monitor
Click to open the
other window for
transmitting and
receiving the
serial data
between Aruino
hardware and
computer
Text Editor
Tab
52 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Serial Monitor This button is on the top right corner. Click this button to
open the serial communications and display information. Requires the Arduino hardware
must connect with the COM port always.
Serial Monitor is a important for displ aying the serial data on the
computer. Arduino has this command ; Serial.print to display data. For sending data from
computer to Arduino is very easy. Only type the data on the text box and click on the
Send button at the top right corner of Serial monitor window. For using Mcintosh computer
or Linux computer; the Arduinoi hardware will need be reset when the Serial monitor is
opened every time.
3.4.1 Menu bar
3.4.1.1 File
The Arduino calls the code as Sketch. This menu contains many commands like
open, save and close the sketch as follows :
New : Creates a new sketch, named is the current date format "sketch_
YYMMDDa".
Open : Open the exist sketch.
Sketchbook : Opne the latest sketch file
Example : Open the example sketch.
Save : Save the current sketch
POP-BOT XT : The Arduino Compatible Mobile Robot kit 53
Save as : Save the current sketch as another name.
Upload to I/O board : Uploads your code to the Arduino I/O board (POP-
XT). Make sure to save or verify your sketch before uploading it.
Page setup : Set up the page layout for the current sketch
Print : Print the current sketch code to the printer
Preference : Set some preference of Arduino environment
Quit : Exit the Arduino IDE
3.4.1.2 Edit
The Edit menu provides a series of commands for editing the Arduino files.
Undo : Reverses the last command or the last entry typed.
Redo : Reverses the action of the last Undo command. This option is only
available, if there has already been an Undo action.
Cut : Removes and copies selected text to the clipboard.
Copy : Copies selected text to the clipboard.
Paste : Inserts the contents of the clipboard at the location of the cursor,
and replaces any selected text.
Select All : Selects all of the text in the file which is currently open in the text
editor.
Find : Finds an occurance of a text string within the file open in the text
editor and gives the option to replace it with a different text.
Find Next : Finds the next occurance of a text string within the file open in
the text editor.
3.4.1.3 Sketch
This menu provides a series of commands for compile the code and manage library.
Verify/Compile : Verify and compiles the code
Stop : Stops current activity.
Add file : Opens a file navigator. Select a code files to add it to the sketches
"data" directory.
Import Library : Import the addition library.
Show Sketch folder : Opens the directory for the current sketch.
54 POP-BOT XT : The Arduino Compatible Mobile Robot kit
3.4.1.4 Tools
This menu provides commands about tools for developing the Arduino sketch and
setting up the Arduino hardware.
Auto Format : Attempts to format the code into a more human-readable
layout. Auto Format was previously called Beautify.
Archive Sketch : Compress the current sketch to the zip file.
Export Folder : Open the folder that contain the curretn sketch.
Board : Choose the Arduino hardware. For POP-BOT XT, choose POP-XT
Serial Port :Allows to select which serial port to use as default for uploading
code to the Arduino I/O Board or monitor data coming from it. The data coming from the
Arduino I/O Board is printed in character format in the text area region of the console.
3.4.1.5 Help
This menu contains many information in HTML format for supporting the Arduino user.
Getting Start : Opens the How to start Arduino.
Troubleshooting : Suggest the solution when meet the problem in Arduino.
Environment : Describe about Arduino environments
Reference : Opens the reference in the default Web browser. Includes
reference for the language, programming environment, libraries, and a language comparison.
Frequently Asked Question : See the popular question and answer
Visit www.arduino.cc : Opens the web browser to the Arduino homepage.
About Arduino : Opens a concise information panel about the software.
3.4.2 Tools bar
Verify/Compile : Checks your code for errors.
Upload to I/O Board : Uploads your code to the Arduino I/O board
(POP-168 module). Make sure to save or verify your sketch before uploading it.
New : Creates a new sketch.
Open : Presents a menu of all the sketches in your sketchbook.
Save : Saves your sketch.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 55
Chapter 4
Arduino programming
Programming for POP-XT boards and POP-BOT XT robots is done by using the Arduino
programming language (based on C++) with version 1.0 or higher, in which the language
of Arduino itself is developed from the open-source project framework for microcontrollers
called Wiring and the language of Arduino is grouped into two parts as follows:
1. Language structure, variables, and constants
2. Functions
Arduino language is based on the C/C++ languages so that when programming
for Arduino (including POP-XT controller board) one can use the functions and libraries
which already exist for the C language. This makes it convenient for those who do not
understand the intricacies of microcontrollers to write command programs for them.
This chapter will mainly describe the structure of Arduino. For a complete text written
about the function of the C programming language behind Arduino, see details in help
menu of Arduino IDE or their website; www. arduino.cc
4.1 Program structure of Arduino
An Arduino program is composed of two sections including
void setup ( )
and
void loop ( )
The function of setup () : when a program runs, it will make a statement for this
function only once to define a default value for operation.
The function of loop () is a procedure in the program that contains statements
which are repeated.
Normally, this procedure is performed to specify working modes of the various pins
in the serial communication bus, and so on. The loop contains the program code which is
executed, such as reading input val ues, processing, displ aying output etc. Any
configuration of default values, or components such as variables, need to be declared at
the beginning of the program before reaching the function part. In addition, you should
consider whether to use small letters or capital letters for variables, and name the functions
meaningfully.
56 POP-BOT XT : The Arduino Compatible Mobile Robot kit
4.1.1 setup () function description
This function is written at the beginning of a program and executes just once when
the program starts. It is used to declare variables, operating modes of various pins, or the
initialization of libraries, etc.
Example 4-1
int buttonPin = 3;
void setup()
{
beginSerial(9600);
pinMode(buttonPin, INPUT);
}
void loop()
{
if (digitalRead(buttonPin) == HIGH)
serialWrite('H');
else
serialWrite('L');
delay(1000);
}
While the standard C programming language is written on AVR GCC (a kind of C
programming language using the GCC compiler for the AVR microcontroller) will be coded
as follows.
int main(void)
{
init();
setup();
for (;;)
loop();
return ;
}
compliance with void setup()
compliance with void loop()
POP-BOT XT : The Arduino Compatible Mobile Robot kit 57
4.1.2 loop () function description
After coding the function of setup ( ), which has already defined the default values
and initial state of the program, the next part is the loop( ) function. The program will
repeatedly execute this function until otherwise instructed to do so. Inside this function,
there are user programs which read values from ports, perform compilations, and control
output through various pins in order to control the performance of board.
Example 4-2
int buttonPin = 3; // Declare pin 3 to buttonPin variable
void setup()
{
beginSerial(9600);
pinMode(buttonPin, INPUT);
}
// A loop which detects the pressing of a switch
// that declared with buttonPin variable.
void loop()
{
if (digitalRead(buttonPin) == HIGH)
serialWrite('H');
else
serialWrite('L');
delay(1000);
}
58 POP-BOT XT : The Arduino Compatible Mobile Robot kit
4.2 Operational control statements
4.2.1 If
Used to test for evaluating conditions during program operation, for example, if an
input value is greater than a certain value, what should be done in that case. The syntax
is shown as follows.
if (someVariable > 50)
{
// do something here
}
The program will check whether the value of someVariable is greater than 50 or
not. If so, what will have to do but if it is not, just skip to the function of this section.
The function of this command is to test certain conditions, which are written in
brackets. If the condition is true, follow an instruction in braces but if the condition is false,
leave out the function of this section.
The conditional test which is in brackets will have to use these comparison operators
as follows.
x == y (x equal to y)
x != y (x not equal to y)
x < y (x less than y)
x > y (x greater than y)
x <= y (x less than or equal to y)
x >= y (x greater than or equal to y)
Techniques for programming
In the comparison of variables, you should use the operator ==, e.g. if (x==10). Do
not use =, such as if (x=10), because a statement like this assigns a value of ten(10) to the
variable x.
Moreover, If statements can be applied to control intersection of the program and
the If...else statements can be used as well.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 59
4.2.2 Ifelse
Applied to test for determining conditions of the program operation and they are
better than normal if statements. The process is that if a condition is true, what to do but
if it is false, what to do so. For example, If a readable value of analog input is greater than
500, what to do but if the value is greater than or equal to 500, do another one else.
Writing statements as follows:
Example 4-3
if (pinFiveInput < 500)
{
// A statement for a kind of operation if a value of pinFiveInput
//is less than 500
}
else
{
// A statement for another type of operation if a value of pinFiveInput
// is greater than or equal to 500
}
After the ifelse statement, able to be followed by the if command. Therefore,
syntax becomes ifelse...if. This is the test of conditions. When it is true, meet the
demand as the following example.
Example 4-4
if (pinFiveInput < 500)
{
// The statement for run a function, since pinFivelnput is less than 500
}
else if (pinFiveInput >= 1000)
{
// The statement for run another function
// because pinFivelnput is greater than or equal to 1000
}
else
{
// The statement to set the next step in case that
// pinFiveInput is not less than 500 and greater than or equal to
// 1000 (that is there will be response of the statement in this
// subprogram when a variable has a value between 501 to 999
}
After the else statement, able to be followed by unlimited if statements (or capable
of putting the switch case statement instead of if...else...if statement for testing
a lot of conditions)
When the if...else...statement has been made, it is important to determine
that if the examination does not match with any condition, what to do by specifying at
the last else statement.
60 POP-BOT XT : The Arduino Compatible Mobile Robot kit
4.2.3 For ()
For () is used to instruct a statement in braces in order to repeat operation following
number of cycles required. This statement is very useful for any function that needs to
repeat and know the exact number of repetition round. It is often applied with Array
variables in collection of readable values from many analog input pins that have pin
numbers in sequence.
The syntax of For () command is divided into three parts as follows :
for (initialization; condition; increment)
{
//statement(s);
}
Beginning with initialization used to assign a default value of loop control
variables. In each work cycle, a condition is checked. If the condition is true, a statement
in braces is responded and a variable value is increased or decreased according to the
order in increment. Repeating the test until the condition is false.
Example 4-5
for (int i=1; i <= 8; i++)
{
// The statement for function by using a value of variable i and
// repeating the function until the value of variable i is
// greather than 8 ;
}
For statement of C language is more flexible than whose other computer languages
are. It can ignore some parts or all three parts of the for statement. However, semicolon is
still necessary.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 61
4.2.4 Switch-case
The statement is used to examine conditions in the determination of program
operation. If a tested variable matches with a condition, the run will follow the determined
process.
Syntax
switch (var)
{
case 1:
// The statement for operation when the variable value is equal to 1
break;
case 2:
// The statement for operation when the variable value is equal to 2
break;
default:
// If the value of variable is neither 1 nor 2, comply with this order.
}
Parameters
var - a variable which requires to test matching with which condition.
default - make a statement follow the end if it does not match with any condition,
break - a statement to stop running and it should be written appended cases. If
it is not written, the program will perform repeatedly according to a condition.
62 POP-BOT XT : The Arduino Compatible Mobile Robot kit
4.2.5 While
It is a kind of loop statements in order to follow the instruction written in braces
continually until a while() statement is false. A loop statement has to change a value of
a variable, such as to increasing variable value, or has external conditions, such as ability
to start and stop reading values from a sensor, respectively. Otherwise, the condition in
the braces of while () is always true, it causes the loop statement works endlessly.
Syntax
while(expression)
{
// statement(s);
}
Parameters
expression is a conditional test statement (true or false)
Example 4-6
var = 0;
while(var < 200)
{
// The statement for operation by repeating the operation in
// total of 200 rounds
var++;
}
POP-BOT XT : The Arduino Compatible Mobile Robot kit 63
4.3 Arithmetic Operators
There are 5 operators consisted of + (addition), - (substraction), * (multiplicaiton),
and % (modulo reduction, remainder from integer division).
4.3.1 Arithmetic Operators, addition, substraction,
multiplication, and division
They are used to calculate the sum, difference, the product, and quotient of binary
operators to give answers that include the same type as both binary operatands, such as
9/4, which shows the answer as 2 because both 9 and 4 are integer variables (int).
Moreover, arithmetic operators may cause overflow if a result is larger than storing
in that type of variables. If operands are different in types, a result will be as large as the
type of biggest variable (such as 9/4 =2 or 9/4.0 = 2.25).
Syntax
result = value1 + value2;
result = value1 - value2;
result = value1 * value2;
result = value1 / value2;
Parameters
value1 - the value of any variables or constant
value2 - the value of any variable or any constant
Example 4-7
y = y + 3;
x = x - 7;
i = j * 6;
r = r / 5;
Techniques for programming
You should :
Choose the size of variables that is large enough to store the most result value
of calculation.
Know that what value of variables will return the value back and how it back,
for example, (0 to 1) or (0 to -32768)
Use float variables in the calculation of fraction but the difference should be
concerned. For example, large variables can cause slow calculation.
Change types of temporary variables by cast operators, such as (int)myfloat,
while a program is running
64 POP-BOT XT : The Arduino Compatible Mobile Robot kit
4.3.2 Modulus operator : %
The operator is able to compute remainder of 2 integers but not to apply for floating-
point variables (float).
Syntax
result = value1 % value2;
Parameters
value1 - a variable of byte, char, int or long type
value2 - a variable of byte, char, int or long type
Result
Remainder from performing integer division is integer data.
Example 4-8
x = 7 % 5; // x now contains 2
x = 9 % 5; // x now contains 4
x = 5 % 5; // x now contains 0
x = 4 % 5; // x now contains 4
This modulus operator is applied for operation which demands events occurring
at regular intervals or causes the memory, which stores array variables, to roll over.
Example 4-9
// Examine the value of a detector for 10 times per a operating cycle
void loop()
{
i++;
if ((i % 10) == 0)
// Divide a value of i by 10 and then check
// if the remainder of division is 0 or not
{
x = analogRead(sensPin); // Read from the detector for 10 times
}
}
In this example, the % statement is used to assign the cycle of operation in which
the program repeats performing to read value till the result of modulo division of the i %
10 statement is equal to 0 and this occurs when i = 10 only.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 65
4.4 Comparison operators
Comparison operators go with the if () statement to test conditions or compare
variable values by writing expression inside the mark of ().
x == y (x equal to y)
x != y (x not equal to y)
x < y (x less than y)
x > y (x greater than y)
x <= y (x less than or equal to y)
x >= y (x greater than or equal to y)
4.5 Logical operators
Performed a for comparison of if () statements and there are 3 types; &&, ||, and !.
4.5.1 && (logic and)
Let a value is true when the comparison result of both sides is true.
Example 4-10
if (x > 0 && x < 5)
{
// ...
}
The value is true when x is greater than 0 and less than 5 (a value of 1 to 4).
4.5.2 && (logic or)
The value is true when the comparison result shows that one of variables is true or
both variables are true.
Example 4-11
if (x > 0 || y > 0)
{
// ...
}
It shows the result is true when the value of x or y is greater than 0.
4.5.3 ! (used to convert the result to be contrary)
The value is true when the comparison result is false.
Example 4-12
if (!x)
{
// ...
}
The result is true if x is false (such as x = 0, the result is true)
66 POP-BOT XT : The Arduino Compatible Mobile Robot kit
4.5.4 Caution
Be careful for programming. If you want to use logical operators, you have to write
the mark of &&. If you write a mark of &, Bitwise AND operators and variables will show
different results.
As well in application of logic or writing the sign of || (two vertical bars next to
each other), if write the sign of | (one vertical bar) this means Bitwise OR operators and
variables.
A bitwise NOT operator is different from a conversion operator (!) so you should
choose the right one to apply.
Example 4-13
if (a >= 10 && a <= 20){}
// The result of performance is true when the value of a is between 10
// to 20.
4.6 Bitwise operators
Level operators will bring bit of variables to process and they are useful to solve
problems of programming widely.
There are 6 level operators of C language (including Arduino) consisted of & (bitwise
AND), | (OR), ^ (Exclusive OR), ~ (NOT), << (shift bits to the left) and >> (shift bits to the
right)
4.6.1 Bitwise AND operators (&)
AND in bitwise statements of C programming language can be represented by
using the mark of & in and you must write between expressions or integer variables. The
work will take data of each bit of both variables to operate with AND logic. The rules are
as follows.
0 0 1 1 Operand1
0 1 0 1 Operand2

0 0 0 1 Returned result
If both inputs are 1, both outputs are 1. Other cases, outputs are 0 as the
following example. In checking, a pair of operators should be in the vertical.
In Arduino, int variables have the size of 16 bits so when using AND bitwise operators,
there is logical action in conjunction with all 16- bit data as the example in the following
program.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 67
Example 4-14
int a = 92; // equal to 0000000001011100 binary
int b = 101; // equal to 0000000001100101 binary
int c = a & b; // result is 0000000001000100 binary or 68 demical
In this example, all 16-bit data of variable a and b are performed by AND logic
and then the result of all 16 bits will be stored at variable c, which the value is 01000100 in
binary number or 68 in decimal number.
It is popular to use bitwise AND operators to select desired bit-data (maybe one bit
or many bits) from int variables in which this selection of some bits is called masking.
4.6.2 Bitwise OR operator ( l )
A bitwise OR statement of C language is able to be written by using one mark of |
by writing between expressions or integer variables. The process is to bring data of each
bit of both variables to operate with OR logic. The rules are as follows.
If any input or both are 1, so the output is 1. In case that both input are 0 so the
output is 0 as following example.
0 0 1 1 Operand1
0 1 0 1 Operand2

0 1 1 1 Returned result
Example 4-15
The program shows application of bitwise OR operators.
int a = 92; // equal to 0000000001011100 binary
int b = 101; // equal to 0000000001100101 binary
int c = a | b; // The result is 0000000001111101 binary or 125 decimal
Example 4-16
The program demonstrates application of bitwise AND and OR operators.
The example of a program, which uses bitwise AND and OR operators, are called
by programmers as Read-Modify-Write on a port. For 8-bit microcontroller, values of reading
or writing to the port have the size of 8 bits and show input at all 8 pins. Writing values
sending to a port is done only one time to cover all 8 bits.
The variable named PORTD is the value used instead of the status of digital pin
numbers 0, 1, 2, 3, 4, 5, 6, 7. If any bit has a value as 1, this makes that pin have logic value
as HIGH (dont forget to specify that port pin to work as output with pinMode command
( )) Therefore, if configuration of PORTD is determined = B00110001; this is to design pin 2, 3,
and 7 as HIGH. In this case, it doesnt need to change the status values of pin 0 and 1.
Normally, hardware of Arduino is used in the serial communication. If you convert a value,
this will affect to the serial communication.
68 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Algorithm for the program is as follows
Read a value from PORTD and then clean up the value at only the
controlled bit (using a bitwise AND operator).
Take the modified PORTD value from above to add with the bit from above
(OR operators).
Write the program as follows :
int i; // counter variable
int j;
void setup()
{
DDRD = DDRD | B11111100; // determine the direction of the
// port pin 2 to 7 with the value of
// 11111100
Serial.begin(9600);
}
void loop()
{
for (i=0; i<64; i++)
{
PORTD = PORTD & B00000011; // determine data to pin 2 to 7
j = (i << 2);
PORTD = PORTD | j;
Serial.println(PORTD, BIN);
// show the value of PORTD at the serial monitor window
delay(100);
}
}
POP-BOT XT : The Arduino Compatible Mobile Robot kit 69
4.6.3 Bitwise Exclusive OR statement (^)
It is a special operator which is not usually used in C/C ++ language. The exclusive
OR operator (or XOR) is written by using the symbol of ^ and this operator has operation
resembled to a bitwise OR operator but they are different when both inputs are 1, output
is 0. The demonstration of work is as follows.
0 0 1 1 Operand1
0 1 0 1 Operand2

0 1 1 0 Returned result
Or it is also said that bitwise XOR operators give the output as 0 when both inputs
are the same and give the output as 1 when both inputs are different.
Example 4-17
int x = 12; // Binary number is 1100
int y = 10; // Binary number is 1010
int z = x ^ y; // Result is 0110 as binary or 6 as decimal
Bitwise XOR operators are much used in value swap of some bits of int variables,
such as changing from 0 to be 1 or from 1 to 0.
When using bitwise XOR operators, if a bit of mask is 1 so this affects the swop of bit
value. Otherwise, if a value of mask is 1 the bit value remains the same. The following
example is a program shown the instruction that logic of the digital pin 5 is switched all the
time.
Example 4-18
void setup()
{
DDRD = DDRD | B00100000; // Assign pin 5 as output
}
void loop()
{
PORTD = PORTD ^ B00100000; // Invert logic at pin 5
delay(100);
}
70 POP-BOT XT : The Arduino Compatible Mobile Robot kit
4.6.4 Bitwise NOT operator (~)
Bitwise NOT will write by using symbol ~. This operator will be performed with only
one operand on the right by switching all bits to become opposite values, i.e. from 0 to
be 1 and from 1 to be 0 as the example.
0 1 Operand1

1 0 ~ Operand1
int a = 103; // binary: 0000000001100111
int b = ~a; // binary: 1111111110011000
When operated already, this makes the value of variable be as -104 (decimal) in
which the answer is negative because of the most important bit (the bit on the far left) of
an int variable. An int variable is the bit which notifies whether the number is positive or
negative. The value is 1, meant that this value is negative. A computer will store the
number value as both positive and negative according to 2s complement system.
Declaration of int variables, which has the same meaning as the signed int, should
be aware that the value of the variable may be negative.
4.6.5 Left shift (<<) and Right shift (>>)
In C/C++ programming language, there is an operator shifts bits to the left << and
shifts bits to the right >>. This operator will instruct to slide bits of operands written on the left to
the left or the right in accordance with the amount of bits stated on the right of the operator.
Syntax
variable << number_of_bits
variable >> number_of_bits
Parameter
variable - an integer variable which has the amount of bits less than or equal
to 32 bits (or a byte, int or long variable).
Example 4-19
int a = 5; //equal to 0000000000000101 binary
int b = a << 3; // the result is 0000000000101000 binary or 40
int c = b >> 3; // the result is 0000000000000101 binary or 5 decimal
Example 4-20
When instructing to slide variable x to the left following the amount of y bit (x <<
y), the bit data on the far left of x with the amount of y will be disappeared because it is
moved to the left hand.
int a = 5; //equal to 0000000000000101 binary
int b = a << 14; // the result is 0100000000000000 binary
POP-BOT XT : The Arduino Compatible Mobile Robot kit 71
Moving bits to the left will affect the value of the variable on the left of the operator
is multiplied by two and power the number of bits that shift to the left as follows.
When you instruct to slide variable x to the right with the amount of y bit (x >> y),
the difference depends on types of variables. If x is an int variable, the sum can appear
both positive and negative. Wherewith, the bit on the far left will be sign bit and if it is a
negative, the bit on the far left will be 1. After instructing to move a bit to the right, the
program will bring the value of sign bit to add up to the bit on the far left. This phenomenon
is called sign extension as the example below.
Example 4-21
int x = -16 // equal to 1111111111110000 binary
int y = x >> 3 // shift bits of x variable to the right for 3 times
// the result is 1111111111111110 binary
If you would like to slide the bit to the right and then put 0 at the bit on the far left
(which happens with a case that a variable is unsigned int), you can do by changing
types of temporary variables (typecast) in order to convert variable x to unsigned int
temporarily as the following example.
Example 4-22
int x = -16 // Equal to 1111111111110000 binary
int y = unsigned (x) >> 3 // Shift bits of x variable (not concerned
// about the sign) to the right for 3 times
// The result is 0001111111111110 binary
After being aware of the sign extension, you will use the operator to move bits to
the right for dividing the variable value by 2 and power any number. For example
Example 4-23
int x = 1000;
int y = x >> 3; // Divide the value of 1000 by 8, from 2
3
// The result is y = 125
72 POP-BOT XT : The Arduino Compatible Mobile Robot kit
4.7 Syntax of Arduino
4.7.1 ; (semicolon)
Used to end a statement
Example 4-24
int a = 13;
Forgetting to end a statement line in a semicolon will result in the complier error.
Wherewith, a complier may complain that it cannot find the semicolon or notify as other
mistakes. In case that a line which is noticed some mistakes but cannot be found any
mistake so you should check a previous line.
4.7.2 { } (Curly-braces)
Curly braces are a major part of C programming language and used to determine
operation in each period. An opening brace {must always be followed by a closing brace}
or it is said that parentheses must be balanced. In Arduino IDE software that is used for
programming will have an ability to check the balance of curly braces so users just click
at a parenthesis and its logical companion will be highlighted.
For beginning programmers and programmers coming to C language from BASIC
language might be confused with the application of brackets. In fact, curly braces can
be compared with the RETURN statement in subroutine (function) or replace the ENDIF
statement in comparison, and the NEXT statements in a FOR loop.
Because the use of the curly braces is so varied, it is good that you should type a
closing bracket immediately after typing the opening bracket. Next, press ENTER button in
between two braces to start a new line and write a desired statement. If you can follow
this suggestion, your braces will never become unbalanced.
Unbalanced braces can make mistakes while a programme is compiled. If a
programme is large, it is hard to track down any mistake. Location of each bracket
influences to the syntax of a program. Therefore, moving a brace one or two lines will
affect the meaning of a program.
The main use of curly braces
Functions
void myfunction(datatype argument)
{
statements(s)
}
POP-BOT XT : The Arduino Compatible Mobile Robot kit 73
Loops
while (boolean expression)
{
statement(s)
}
do
{
statement(s)
} while (boolean expression);
for (initialisation; termination condition; incrementing expr)
{
statement(s)
}
Conditional statements
if (boolean expression)
{
statement(s)
}
else if (boolean expression)
{
statement(s)
}
else
{
statement(s)
}
4.7.3 // (single line comment) and /** (multi-line comment)
Comments are part of a program and a programmer will write more information to
inform how the program operates. They are ignored by complier, and not exported to the
processor, so they are very useful to investigate the program later or inform colleagues or
others what this line is used for. There two kinds of comments in C lanague, including
(1) Single line comments write 2 slashes (//) in front of a line.
(2) Multi-line comments write a slash (/) paired with asterism to cover text of
comments, such as /*blabla*/.
74 POP-BOT XT : The Arduino Compatible Mobile Robot kit
4.7.4 # define
This statement is used a lot in determination of constants for a program. Defined
constants dont take up any memory space of microcontroller. When it is at the compile
time, the compiler will replace characters with the assigned value. Arduino will use the
same # define statement as C language does.
Syntax
#define constantName value (Note : the # is necessary)
Example 4-25
#define ledPin 3
// Determination to let variable ledPin equal to constant 3
There is no semicolon after the # define statement.
4.7.5 # include
It instructs to gather other files and our program file and then compile the program
later.
Syntax
#include <file>
#include file
Example 4-26
#include <stdio.h>
#include popxt.h
The first line will take file stdio.th to fuse with a developing program by searching
the file from a location where stores the file system of Arduino. Normally, it is a standard file
come up with Arduino.
The second line instructs to gather file popxt.h and a developing program by
looking for address of C language files. Generally, they are files users build.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 75
4.8 Variables
Variables are several characters determined in a program and used to store various
informative values, such as readable values from a sensor connected with analog port
pins of Arduino. There are many types of variables.
4.8.1 char : character type variable
The variable takes up 1 byte (8 bits) and it is provided for storing character values.
Characters in C language will be given inside single quotes, like this, A (for text, which
composed of many characters together, will be written in double quotes, such as ABD).
You can do arithmetic on characters, in case that you will apply ASCII values of the
characters, e.g. A+1 has the value of 66 because the ASCII code value of character A is
equal to 65.
Syntax
char sign = ' ';
Example 4-27
char var = 'x';
var is a name of a character variable you desired.
x is a desired value to assign to that variable and here is one letter.
4.8.2 byte : a variable of numeric type 8 bit or 1 byte
A byte variable is used to store a numeric value with the size of 8 bits and the value
can be between 0 to 255.
Example 4-28
byte b = B10010;
// Show the value of b in the form of a binary number
// (equal to 18 of a decimal number)
4.8.3 int : a variable of integer type
It is abbreviated from integer, which means an integer number. The int is a basic
variable for preserving numbers. One variable has the size of 2 bytes and stores a value
from -32,768 to 32,767, from -215 (minimum value) and 215-1 (maximum value). In storage of
negative numbers uses a technique called 2s complement and the maximum bit
sometimes called sign bit. If a value is 1, it is shown the value is negative.
Syntax
int var = val;
76 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Parameters
var - a name of a desired variable of int type.
val - a desired value to define to a variable.
Example 4-29
int ledPin = 13; // Assign variable ledPin to have a value = 13
When a variable is greater than a maximum capacity, the value will roll over to a
minimum capacity, however, when a value is less than a minimum capacity, the value
will roll over to a maximum capacity as the following example.
Example 4-30
int x
x = -32,768;
x = x - 1; // When you follow the instruction,
// the value of x will change -32,768 into 32,767.
x = 32,767;
x = x + 1; // When the statement is done,
// the value of x will change from 32,767 to -32,768
4.8.4 unsigned int : a variable of unsigned integer type
This type variable is similar to an int variable but will store only positive integers by
storing the value 0 to 65,535 (216-1).
Syntax
unsigned int var = val;
Parameters
var - the name of the desired int variable.
val - the desired value to assign to a variable.
Example 4-31
unsigned int ledPin = 13;
// Determine ledPin variable to have the value equal to 13 of unsigned type
When a variable has a maximum capacity, it will roll over back to a minimum
capacity later. Additionally, when a variable has a minimum capacity, it will roll over and
become a maximum capacity when there is value reduction again. As the example
Example 4-32
unsigned int x
x = 0;
x = x - 1; // After executed, the x value change from 0 to 65535.
x = x + 1; // After executed, the x value change from 65535 into 0
POP-BOT XT : The Arduino Compatible Mobile Robot kit 77
4.8.5 long : a variable of 32-bit integer type
The variable stores integer values and extends its capacity from an int variable. A
long variable uses a memory space of 32 bits (4 bytes) and is capable of storing values
from -2,147,483,648 through 2,147,483,647.
Syntax
long var = val;
Parameters
var - the long variable name.
val - the value that assign to the variable.
Example 4-33
long time; // Specify a time variable to be the long type
4.8.6 unsigned long : a variable of unsigned 32-bit integer type
A variable stores positive integers. One variable uses a memory space of 32 bits (4
bytes) and stores a value in range of 0 to 4,294,967,295 or 232-1.
Syntax
unsigned long var = val;
Parameter
var - the name of unsigned long variable.
val - the value that assign to the variable.
Example 4-34
unsigned long time; // Determine a time variable to be unsigned long type
4.8.7 float : float-point variable
Float is a variable for storing a value of decimal number values. It is popular to be
used to keep an analog signal value or a continuous value. Because this variable gives
values more precise than an int variable does, a float variable can store in a range of
4.4028235 x 1038 through -4.4028235 x 1038 and one variable will cover 32-bit memory space
(4 bytes).
In a mathematical calcul ation with the float variabl e wil l be sl ower than a
calculation of int variable so you should avoid calculating with float variables when doing
loop statement with the highest speed of a time function because it must be very precise.
Some programmers will convert decimal numbers to integer numbers before a calculation
for faster operation.
78 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Syntax
float var = val;
Parameters
var - the float variable name
val - the value that determine to the variable
Example 4-35
float myfloat;
float sensorCalbrate = 1.117;
Example 4-36
int x;
int y;
float z;
x = 1;
y = x / 2; // y is equal to 0 no storage of values of
// remainder from division
z = (float)x / 2.0; // z is equal to 0.5
When there is a usage of a float variable, numbers that are operated with this
float variable will be decimals as well. From the example is that number 2 calculated with
float variable x, so the number 2 is written as 2.0.
4.8.8 double : Double precision floating-point variable
Double has the size of 8 bytes and the highest stored value is 1.7976931348623157
x 10308 . In Arduino, there is limited capacity so it doesnt use this type of variables.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 79
4.8.9 string : variable of text type
String is a variable that stores text and it is usually array of a char variable in C
language.
Example 4-37 : Example of declaration of string variables
char Str1[15];
char Str2[8] = {'a','r','d','u','i','n','o'};
char Str3[8] = {'a','r','d','u','i','n','o','\0'};
char Str4[ ] = "arduino";
char Str5[8] = "arduino";
char Str6[15] = "arduino";
Str1 is a declaration of a string variable in which a default value is not defined.
Str2 announces a string variable along with defining a value of each character
for a text. If it is not completed following the announced number, a complier will add null
string until completing (from the example, 8 characters are declared but the text has only
7 characters so a complier fill one null string).
Str3 states a string variable together with determining a value to give a text
and close the end with a closing character which is\0.
Str4 declares a string variable together with a determining a variable value in
quotes. From the example, it doesnt assign the size of a variable, so a complier will assign
the size according to a number of letters.
Str5 proclaims a string variable along with specifying a variable value in a
quotation mark and the size of the variable, from the example, is 8 letters.
Str6 reveals a string variable and defines the size reserving for another text
that is longer than this.
4.8.9.1 Addition of characters which inform null termination
A string variable in C language specifies that the last character is an indicator of a
null string. The indicator is 0. In determination of size of variables (value in square brackets),
the size is equal to the amount of characters +1, as shown in the variable Str2 and Str3 in the
example 4-37. In the text of Arduino, there are 7 characters, declaration must specify as [8].
In announcement of a string variable, you should keep a space for storing a
character, which notifies the null termination. Otherwise, a complier will warn a mistake
happening. In the example, variable Str1 and Str6 can store messages with a maximum of
14 characters.
4.8.9.2 Single and double quotes
Normally, a string variable is determined inside quotes, such as ABC. For a char
variable, it is defined inside single quotation marks A.
80 POP-BOT XT : The Arduino Compatible Mobile Robot kit
4.8.10 Array variable
An array is a variable containing multiple variables which are stored in variables of
the same name.
Each variable is referred by an index number written inside square brackets. An
array variable of Arduino will be cited according to C language. It may look complicated
but if using an array variable directly, it is easy to understand.
Example 4-38 : Example of declaration of array
int myInts[6];
int myPins[] = {2, 4, 8, 3, 6};
int mySensVals[6] = {2, 4, -8, 3, 2};
char message[6] = hello;
A program developer is able to declare an array without determination of a
myInts variable.
Announcement of variable myPins is a declaration of an array variable without
specifying its size.
In declaration of an array, a program developer can announce and determine
a size of an array in the same time, as the example of declaration of variable mySensVals
to proclaim a size and specify values.
The last example is the declaration of a message variable, which is a char
variable, and there are 5 characters, including hello. However, determination of a variable
size will have to preserve a space for a character that informs null termination, so the
index value is specified as 6.
4.8.10.1 Usability of array variables
The usability of arrays can be done by typing a variable name together with
specifying an index value inside square brackets. An index value of an array variable
starts with value 0, so the value of a mySensVals variable is as follows.
mySensVals[0] == 2, mySensVals[1] == 4 ,
Determination of a value for an array variable can do as follows
mySensVals[0] = 10;
Calling a member value of an array value is done as this example
x = mySensVals[4];
POP-BOT XT : The Arduino Compatible Mobile Robot kit 81
4.8.10.2 Arrays and for loop instructions
Generally, application of an array variable is found in a for statement. An index
value of an array variable is given from using a value of a loop variable of the for statement
as the following example.
Example 4-39
int i;
for (i = 0; i < 5; i = i + 1)
{
Serial.println(myPins[i]); // Showing a member value of an array
// variable at a serial monitor window
}
The completed program example of application of array variables are available
in the example of KnightRider in the topic of Tutorials at the website www. arduino.cc.
4.9 Scope of variables
Variables in C language used in Arduino have a specification called scope. This is
different from BASIC language that all variables have the same status and the status is
called global.
4.9.1 Local and global variables
Global variables are variables all functions in a program knowed by declaring the
variables outside functions. Local variables are variables proclaimed inside braces of
functions and known only in functions.
When programs are larger and more complex, usage of local variables is very
useful because only functions can apply the variables. This helps to protect mistakes when
a function modifies variable values used by other functions.
Example 4-40
int gPWMval; // All functions can see this variable.
void setup()
{}
void loop()
{
int i; // Variable i will be seen and performed inside only
// a loop function.
float f; // Variable f will be seen and applied only inside a
// loop function.
}
82 POP-BOT XT : The Arduino Compatible Mobile Robot kit
4.9.2 Static variables
A static variable is a reserved word and used when declaring variables, which
have scope of use only inside functions. It is different from a local variable that a local
variable will be created and deleted every time to run functions. For a static variable,
when a function finishes, it is still appeared (not deleted). This is a preservation of a variable
value during function performs.
A declared variable as static will build and define a value at the first time to run a
function.
4.10 Constants
Constants are a group of characters or text preconfigured, so a complier of Arduino
will recognise these constants and it is not neccesary to notify or determine constants.
4.10.1 HIGH, LOW : used to assign logical values
In reading and writing values for digital port pins, two possible values are HIGH or
LOW.
HIGH is determination of values for digital pins and has voltage equal to +5V. If you
can read a value equal to +3V or greater, a microcontroller will read the value as LOW. A
constant of LOW is 0 or compared to logic as false.
LOW, which is configuration of digital pins, has voltage equal to 0V. If you can read
a value as +2V or less, a microcontroller will read the value as LOW and a constant of LOW
is 0 or compared to logic as false.
4.10.2 INPUT, OUTPUT : Determination of direction of digital
port pins
Digital port pins can serve for 2 types including being input and output:
When defined as INPUT means to assign that port pin as an input pin.
When specified as OUTPUT means to assign that port pin as an output pin.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 83
Assignment of integer constants to be in various number bases of
Arduino
An integer constant is a number you write in a program of Arduino directly, such
as 123, and normally, these numbers are decimal numbers. If you would like to specify
them into other number radix systems, you will have to use special marks to specify. For
example
Base Example
10 (decimal) 123
2 (binary) B1111011
8 (octal) 0173
16 (hexadecimal) 0x7B
Decimal is a decimal number used in daily life
Example : 101 = 101. It is from (1* 10
2
) + (0 * 10
1
) + (1 * 10
0
) = 100 + 0 + 1 = 101
Binary is a binary number in which a number in each position can be only 0 or 1.
Example : B101 = 5 in decimal. It is from (1 * 2
2
) + (0 * 2
1
) + (1 * 2
0
) = 4 + 0 + 1 = 5
Binary numbers can be used less than 8 bits (not greater than 1 byte) and
have values from 0 to (B0) 255 (B11111111).
Octal is an octal number and a number in each position has a value from 0 to 7
only.
Example : 0101 = 65 in decimal. It is from (1 * 8
2
) + (0 * 8
1
) + (1 * 8
0
) = 64 + 0 +1
= 65
Caution in configuration of constants is to not put 0 in the front, otherwise, a
compiler will translate a meaning incorrectly that a number value is octal.
Hexadecimal (Hex) is a hexadecimal number. A number in each position is worth
from 0 to 9 and character A is 10 and B is 11 until F which is equal to 15.
Example : 0x101 = 257 in decimal. It is from (1 * 16
2
) + (0 * 16
1
) + (1 * 16
0
) = 256 +
0 + 1 = 257
POP-Note
84 POP-BOT XT : The Arduino Compatible Mobile Robot kit
4.11 Other operators related to variables
4.11.1 cast : changing kinds of variables temporarily
Cast is an operator that instructs changing of a type of variables into another type
and controls calculation of a variable value to become a new kind.
Syntax
(type)variable
type is a type of any variables (such as int, float, long)
variable is any variable or constant
Example 4-41
int i;
float f;
f = 4.6;
i = (int) f;
In the change of a variable type from float into int, a remainder of an obtained
value will be cut out, so (int) 4.6 becomes 4.
4.11.2 sizeof : notifying the size of variables
Sizeof is used to identify the amount of byte of variables you are interested and it
can be both a normal variable and an array.
Syntax
written into two patterns as follows
sizeof(variable)
sizeof variable
Therefore; Variable is a normal variable or an array variable (int, float, long)
user would like to know the size.
Example 4-42
Sizeof operators are very useful in management with array variables (including
string variables).
The following example will type text out through a serial port, each character a
time.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 85
char myStr[] = this is a test;
int i;
void setup()
{
Serial.begin(9600);
}
void loop()
{
for (i = 0; i < sizeof(myStr) - 1; i++)
{
Serial.print(i, DEC);
Serial.print( = );
Serial.println(myStr[i], BYTE);
}
}
4.12 Reserved words of Arduino
A reserved word is a constant, a variable, and a function defined as a part of of C
language of Arduino. Dont take these words to denominate variables. They are shown as
follows :
# Constants
HIGH
LOW
INPUT
OUTPUT
SERIAL
DISPLAY
PI
HALF_PI
TWO_PI
LSBFIRST
MSBFIRST
CHANGE
FALLING
RISING
false
true
null
# Literal Constants
GLCD_RED
GLCD_GREEN
GLCD_BLUE
GLCD_YELLOW
GLCD_BLACK
GLCD_WHITE
GLCD_SKY
GLCD_MAGENTA
# Port Constants
DDRB
PINB
PORTB
DDRC
PINC
PORTC
DDRD
PIND
PORTD
# Names
popxt
# Datatypes
boolean
byte
char
class
default
do
double
int
long
private
protected
public
return
short
signed
static
switch
throw
try
unsigned
void
# Methods/Fucntions
sw_ok
sw_ok_press
analog
knob
glcd
glcdChar
glcdString
glcdMode
glcdGetMode
glcdFlip
glcdGetFlip
colorRGB
setTextColor
setTextBackgroundColor
setTextSize
getTextColor
getTextBackgroundColor
getTextSize
glcdFillScreen
glcdClear
glcdPixel
glcdRect
glcdFillRect
glcdLine
glcdCircle
86 POP-BOT XT : The Arduino Compatible Mobile Robot kit
glcdFillCircle
glcdArc
getdist
in
out
motor
motor_stop
fd
bk
fd2
bk2
tl
tr
sl
sr
servo
sound
beep
uart_set_baud
uart_get_baud
uart_putc
uart_puts
uart
uart_available
uart_getkey
uart1_set_baud
uart1_get_baud
uart1_putc
uart1_puts
uart1
uart1_available
uart1_getkey
uart1_flush
# Other
abs
acos
+=
+
[]
asin
=
atan
atan2
&
&=
|
|=
boolean
byte
case
ceil
char
char
class
,
//
?:
constrain
cos
{}

default
delay
delayMicroseconds
/
/**
.
else
==
exp
false
float
float
floor
for
<
<=
HALF_PI
if
++
!=
int
<<
<
<=
log
&&
!
||
^
^=
loop
max
millis
min
-
%
/*
*
new
null
()
PII
return
>>
;
Serial
Setup
sin
sq
sqrt
-=
switch
tan
this
true
TWO_PI
void
while
Serial
begin
read
print
write
println
available
digitalWrite
digitalRead
pinMode
analogRead
analogWrite
attachInterrupts
detachInterrupts
beginSerial
serialWrite
serialRead
serialAvailable
printString
printInteger
printByte
printHex
printOctal
printBinary
printNewline
pulseIn
shiftOut
POP-BOT XT : The Arduino Compatible Mobile Robot kit 87
The POP-BOT XT robots program development can be summarize in the diagram
shown in figure 5-1.
Chapter 5
POP-BOT XT program
development by Arduino1.0
Figure 5-1 Programming development diagram of POP-BOT XT robot kit by
using Arduino IDE
Create the sketch file
Make the C/C++ code on Arduino IDE
Compile
Upload the code
Upload the code via USB port
1. Turn on and wait a few second for
USB initialize. Then plug the USB-miniB
cable to POP-XT controller board.
2. Check the USB Serial port address.
3. Upload the code.
Run the code
After uplaod the code successfully, press
RESET switch on the POP-XT controller
board ; brain of the POP-BOT XT.
The POP-BOT XT run following the
uploaded code.
Installtion software tools
- Arduino 1.0 IDE :
C/C++ programming development tools.
Includes Text editor, Compiler and Upload the
code to microcontroller
- USB driver of the POP-XT controller board
USB port
88 POP-BOT XT : The Arduino Compatible Mobile Robot kit
5.1 Getting start POP-BOT XT with Arduino
Run the Arduino IDE by clickng on the Start > All Programs > Arduino1.0 > Arduino
The first launch of Arduino is shown the screen below.
5.1.1 POP-BOT XT hardware configuration with Arduino IDE
5.1.1.1 Select microcontroller chip
Select the menu Tools > Board > POP-XT
POP-BOT XT : The Arduino Compatible Mobile Robot kit 89
5.1.1.2 Select the COM port
Upl oading the sketch from Arduino IDE to POP-BOT X T requires serial port
communication. It can work with virtual COM port that created from USB driver installation.
Select menu Tools > Serial Port . You can select the target COM port.
5.1.2 Create the new sketch
(1) Create the new sketch file by selecting File > New . Next, type the following
code.
#include <popxt.h> // Include POP-XT library
void setup()
{
glcd(1,0,"Hello World"); // Display message on the GLCD screen
}
void loop()
{}
(2) Save to HelloWorld.ino
90 POP-BOT XT : The Arduino Compatible Mobile Robot kit
(3) Compile the code by selecting Sketch > Verify/Compile following the picture
below or click at the button.
(4) The status bar at the bottom of main screen will display the compilation status.
If compile no error, it reports Done compiling and the Text area will display message of
binary sketch size.
5.1.3 Uploading the code
(1)Turn on the POP-BOT XT . Wait a few second for USB initialize. Plug the USB-miniB
cable to connect the robot with computer.

USB-miniB cable
Connect with
computer's USB port
Computer
POP-BOT XT
2
2
0
F
1
0
0
F
TB6612
ATMega32U4
1
0
0
POP-BOT XT : The Arduino Compatible Mobile Robot kit 91
(2) Upload the sketch by clicking button or select menu File > Upload
(3) Wait until the uploading is successfully. The status bar at the bottom of main
screen will display message Done Uploading .Code will run immediately or press a RESET
switch again.
This example code is sending the message ; Hello World to display on line 1
column 0 of the GLCD screen of the POP-BOT XT
All this is preparation for the programming language C / C + + with Arduino for the
POP-BOT XT robot. The program development of this robot is very easy and comfort.
Because all steps are finish within a single window.
92 POP-BOT XT : The Arduino Compatible Mobile Robot kit
POP-BOT XT : The Arduino Compatible Mobile Robot kit 93
In this chapter we will learn about some activities for the POP-BOT XT controller
board. Its POP-XT board. They include 4 main activities as follow :
1. Color GLCD activities (5 activities)
2. Generating of sounds
3. Reading the OK switch and KNOB data from the GLCD-XT board of POP-XT
board
4. Controlling simple output devices.
The development program procudures in each activity also similar. Open the
Arduino IDE 1.0, create the code, compile and upload onto the POP-BOT XT. Lastly, test
the operation.
It's important to emphasize that every time you turn on the power
supply of POP-BOT XT, must wait for USB initialize first. It takes about 7 to 10
seconds after turning the power switch or by pressing the RESET circuit before they are
uploaded to POP-XT.
And may cause errors in connection. Or upload code to not work as it should be.
But it does not affect the circuit board damage. Only the operation may malfunction or
incorrect.
Chapter 6
POP-BOT XT controller board
hardware experiment
94 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Activity 1 : Display message on POP-BOT XT
controller
Activity 1-1 Hello World
(A1.1.1) Open the Arduino1.0. Type the Listing A1-1 and save as.
(A1.1.2) Turn on the robot. Connect USB cable between a robot and computer.
USB-miniB cable
Connect with
computer's USB port
Computer
POP-BOT XT
2
2
0
F
1
0
0
F
TB6612
ATMega32U4
1
0
0
(A1.1.3) Select the correct hardware; select menu Tools > Board > POP-XT following the
picture below.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 95
(A1.1.4) Choose the serial port at menu Tools > Serial Port
(A1.1.5) Compile and upload the code or sketch to POP-BOT XT controller board by clicking
on button or select menu File > Upload
At the color LCD screen shows Hello World message.
220 F
100 F
T
B
6
6
1
2
A
T
M
e
g
a
3
2
U
4
100
Hello World
#include <popxt.h> // Include the main library
void setup()
{
glcd(1,0,"Hello World"); // Show messsage on display
}
void loop()
{}
Code description
This code sends the message; Hello World to line 1 column 1 of POP-BOT XT display. It will
work only once because this code is located in the setup() function
Listing A1-1 : HelloWorld.ino; sketch file for displaying message on
the POP-BOT XT color display
96 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Activity 1-2 Multiple line display
The graphic color display of POP-BOT XT controller board resolution is 128 x 160
pixels. It can display 21 of the 5 x 7 dot characters 16 lines (maximum at standard size) User
possible to set the line and column display via glcd command of the popxt.h library file.
The glcd command also supports the special character for setting the display position.
This activity will be demonstrate this features.
(A1.2.1) Open the Arduino1.0. Type the Listing A1-2 and save as.
(A1.2.2) Turn-on the robot. Connect USB cable between a robot and computer.
#include <popxt.h> // Include the main library
int i,j;
void setup()
{
glcdFillScreen(GLCD_WHITE); // Change backgrounbd color to white
setTextColor(GLCD_BLACK); // Set text color to black
setTextBackgroundColor(GLCD_WHITE); // Set text background color to white
for (i=0;i<16;i++) // Set loop 16 times
{
glcd(i,i,"Row %d ",i); // Display message ROWxx on each line
}
}
void loop()
{}
Code description
This sketch add 3 functions of the glcd library as follows :
1. glcdFillScreen - fill the background color of screen
2. setTextColor - set the text color
3. setTextBackground - set the text background color
After setting the display; send the message; Row following the line number that get from
increasing of i variable. The column also increase follows i parameter. Therefore, at the first line
shows Row0 message on column 0 and line 0. After that at the second line shows messge ;
Row1 at line 1 column 1. It run continue until finish on Row 15 column 15 and stop.
Listing A1-2 : MultipleTextLine.ino; sketch file for displaying
mutiple messages on each line of the POP-BOT XT color display
POP-BOT XT : The Arduino Compatible Mobile Robot kit 97
(A1.2.3) Compile and upload the code or sketch to POP-BOT XT controller board by clicking
on button or select menu File > Upload
The color LCD screen will show the messages from Row 0 to 15 in that order.
220 F
100 F
T
B
6
6
1
2
A
T
M
e
g
a
3
2
U
4
100
Row00
Row01
RRRow02
RRRRow03
RRRRRow04
RRRRRRow05
RRRRRRRow06
RRRRRRRRow07
RRRRRRRRRow08
RRRRRRRRRRow09
RRRRRRRRRRRow010
RRRRRRRRRRRRow011
RRRRRRRRRRRRRow012
RRRRRRRRRRRRRRow013
RRRRRRRRRRRRRRRow014
RRRRRRRRRRRRRRRRow015
98 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Avtivity 1-3 Set size and display orientation
The default chararacter font size of POP-BOT XT display is the smallest. It is 6 x 10
dots (The real space is 5 x 7 dots). To adjust the font size to be bigger, it requiers the
setTextSize function of the popxt.h library file. The value assigned to a multiple of the
normal. For example :
setTextSize(2) refers double size of the font. It is 12 x 20 dots per character.
setTextSize(3) refers the 3 times of defualt size. It is 18 x 30 dots per character.
When the font size is bigger. Number of characters per line is decreased from 21
characters 16 lines. On the x2 size, tt will display 10 characters 8 lines.
In addition to change the font size. User coulde be change the orientation of the
display screen by using the function glcdMode (). The default is mode 0 (glcdMode (0)).
It is vertical orientation. For modes 1, 2 and 3 are applied, the display is orientated 90
degrees each. In mode 1 orientate 90 degrees, Mode 2 orientate 180 degrees and mode
3 orientate 270 degrees.
(A1.3.1) Open the Arduino1.0. Type the Listing A1-3 and save as.
#include <popxt.h>
int x,m;
void setup()
{
setTextColor(GLCD_RED); // Set text color to red
}
void loop()
{
for (x=1;x<6;x++)
{
setTextSize(x); // Set text size 2x
for(m=0;m<4;m++)
{
glcdClear(); // Clear screen
glcdMode(m); // Set display mode
glcd(0,0,"%dX",x); // Show text size
glcd(1,0,"M=%d",m); // Show mode number
sleep(500);
}
}
}
Listing A1-3 : SetText_FlipDisplay.ino; sketch file for testing font
size setting and orientation display
POP-BOT XT : The Arduino Compatible Mobile Robot kit 99
(A1.3.2) Turn-on the robot. Connect USB cable between a robot and computer.
(A1.3.3) Compile and upload the code or sketch to POP-BOTXT controller board by clicking
on button or select menu File > Upload
The graphic display of the POP-BOT XT controller board shows message of font size
and mode of orientation. Start with upper left, upper right, lower right and lower left corner.
Surrounding the display of the size are 1X, 2X, 3X, 4X and 5X each round will be show 4
orientation refer the M character message.
These are some example of the operation pictures.
M = 0 ; vertical M = 1 ; right orientate 90 degress
3X font size 4X font size

M = 2 ; orientate 180 degrees M = 3 ; orientate 270 degrees
The dispaly is inverted from Mode 0 5X font size
4X font size

100 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Activity 1-4 Line art display
The main function of the color graphic LCD screen of the POP-BOT XT is glcd. This
function contains many subfunction for display message and create the line art graphic.
It includes :
glcdRect (int x1, int y1, int width, int height, uint color) :
draw a rectangle.
glcdFillRect (int x1, int y1, int width, int height, uint color)
: fill rectangle color.
glcdLine (int x1, int y1, int x2, int y2, uint color) : draw the line.
glcdCircle (int x, int y, int radius, uint color) : draw a circle.
glcdFillCircle (int x, int y, int radius, uint color) : fill circle
color.
glcdClear (uint color) : clear the display.
The testing program is shown in Listing A1-4, and then upload it to test with POP-BOT
XT controller board. The result is following the picture below.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 101
#include <popxt.h> // Include the main library
int i,j;
void setup()
{}
void loop()
{
glcdClear; // Clear screen and set to black color
sleep(300);
for (i=0;i<160;i+=4)
{
glcdLine(0,0,128,i,GLCD_WHITE); // Draw the white line from 0,0 to 128,i
}
for (i=0;i<128;i+=4)
{
glcdLine(0,0,i,160,GLCD_RED); // Draw the red line from 0,0 to i,160
}
sleep(2000);
glcdRect(32,40,64,80,GLCD_BLUE); // Draw the blue rectangle
sleep(300);
glcdFillCircle(32,40,31,GLCD_GREEN); // Fill the green circle
glcdFillCircle(96,40,31,GLCD_YELLOW); // Fill the yellow circle
glcdFillCircle(32,120,31,GLCD_MAGENTA); // Fill the magenta circle
glcdFillCircle(96,120,31,GLCD_SKY); // Fill the blue sky circle
sleep(1000);
glcdCircle(64,40,31,GLCD_GREEN); // Draw the green circle
glcdCircle(32,80,31,GLCD_BLUE); // Draw the blue circle
glcdCircle(64,120,31,GLCD_YELLOW); // Draw the yellow circle
glcdCircle(96,80,31,GLCD_SKY); // Draw the blue sky circle
sleep(1000);
glcdFillRect(0,0,128,160,GLCD_YELLOW); // Fill the yellow rectangle
sleep(1000);
}
Listing A1-4 : SimpleGraphic.ino; sketch file for testing the glcd
function
102 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Activity 1-5 Draw a curve
Besides the circle and square, curve also is an essential ingredient in creating
graphics. The glcd function includes the curve drawing function. It is glcdArc (). It
requires many parameters for setting. See details in Chapter 7.
(A1.5.1) Open the Arduino1.0. Type the Listing A1-5 and save as.
(A1.5.2) Turn-on the robot. Connect USB cable between a robot and computer.
(A1.5.3) Compile and upload the code or sketch to POP-BOT XT controller board by clicking
on button or select menu File > Upload
#include <popxt.h>
int i;
// Smile face function
void face()
{
glcdFillCircle(64,70,50,GLCD_WHITE);
glcdArc(48,60,16,30,150,GLCD_RED);
glcdCircle(48,55,5,GLCD_BLUE);
glcdCircle(80,55,5,GLCD_BLUE);
glcdArc(80,60,16,30,150,GLCD_RED);
glcdFillCircle(64,70,7,GLCD_YELLOW);
glcdArc(64,80,30,220,320,GLCD_RED);
glcdArc(64,80,29,220,320,GLCD_RED);
}
void setup()
{}
void loop()
{
for(i=0;i<4;i++)
{
glcdClear();
glcdMode(i); // Flip display
face();
sleep(1000);
}
}
Listing A1-5 : SmileFace_ArcTest.ino; sketch for drawing the curve
POP-BOT XT : The Arduino Compatible Mobile Robot kit 103
(A1.5.4) Run this sketch on the POP-BOT XT.
The display shows an animated smiley face for a second, then rotate 90 degrees
and then back to the start page to run again and again.
104 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Activity 2 : Sound driving
POP-XT has the sound driving device. It is a piezo speaker. It response at 300 to 3kHz
frequency range. The popxt.h library also available the function for sound driving. They
are beep () and sound () functions
In the Listing A2-1 is an example of the beep () function to drives a beep signal.
In the Listing A2-2 is an example of using the sound () function for generating the
different frequency signal.
Testing both listing with same procedures. Open the Arduino1.0 to create a new
sketch. Type the code folloiwng the Listing A2-1 and A2-2. Compile and upload to POP-XT
(POP-BOT XT controller board).
#include <popxt.h> // Include the main library
void setup()
{}
void loop()
{
beep(); // Beep signal to speaker
sleep(1000);
}
Listing A2-1 : BeepTest.ino ; sketch for beep() function demonstration
#include <popxt.h> // Include the main library
void setup()
{}
void loop()
{
sound(500,500); // Generate 500Hz signal 0.5 second interval
sound(2500,500); // Generate 2500Hz signal 0.5 second interval
}
Listing A2-2 : SoundTest.ino ; sketch for sound() function demonstration
POP-BOT XT : The Arduino Compatible Mobile Robot kit 105
Activity 3 : Reading the OK switch and KNOB
In the control system must be configured with the switch in the circuit to work Also
on POP-XT board provides a user interface as well. It includes a OK button and KNOB
buttons for the menu selecting.
Create the new sketch and type Listing A3-1. Save as KnobSwitchTest.ino. Then
compile nad upload to POP-BOT XT Controller board. Run to try the operation.
The display show message as follows
Press OK (2X font size)
Press the OK switch to start.
The controller board beeps a sound at once and change display to
Knob value (2X font size)
XXXX (3X font size)
therefore : xxxx is 80 to 1023 values
Try to turn a KNOB button
The Knob value will be changed following the adjustment
Press the OK switch again.
The controller board drives a 500Hz signal 0.5 second. It will drive this signal
everytime when the OK switch is pressed.
106 POP-BOT XT : The Arduino Compatible Mobile Robot kit
#include <popxt.h> // Include the main library
void setup()
{
glcdClear; // Clear screen and sdt backgound to black
setTextSize(2); // Set text size is x2
glcd(1,0,"Press OK"); // Display the stat message
sw_ok_press(); // Check the OK switch pressing
beep(); // Drive the beep
glcdClear; // Clear screen and sdt backgound to black
}
void loop()
{
if (sw_ok()) // The OK switch is pressed ?
{
sound(500,500); // Drive 500Hz sound 0.5 second
// after the OK switch is pressed
}
glcd(1,0,"Knob value"); // Display the KNOB message on screen
setTextSize(3); // Change text size to x3
glcd(2,2,"%d ",knob()); // Display the KNOB value on screen
setTextSize(2); // Change trext size back to x2
}
Listing A3-1 : KnobSwitchTest.ino ; sketch file for testing the OK
and KNOB button operation.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 107
Activity 4 : Controlling simple output devices
In the popxt.h library file provides the function to send a logic 1 and 1 to output
port. It is out (int num, int _dat) function. This activity demonstrates the simple
outpuit device control. The simple deive is ZX-LED module.
The ZX-LED will on if the logic 1 is applied and off when the logic 0 is applied.
(A4.1) Connect 2 sets of ZX-LED to port 6/A7 and 4/A6.
ZX-LED
#include <popxt.h> // Include the main library
void setup()
{
setTextSize(2); // Set text size to 2x
glcd(1,1,"Press OK"); // Display start message
sw_ok_press(); // Check the OK switch pressing
}
void loop()
{
out(4,1); // Turn on LED at pin 4
out(6,0); // Turn off LED at pin 6
sleep(400);
out(4,0); // Turn off LED at pin 4
out(6,1); // Turn on LED at pin 6
sleep(400);
}
Listing 4-1 : LEDtest.ino ; sketch file for testing out() function to
controlling simple output devices
108 POP-BOT XT : The Arduino Compatible Mobile Robot kit
(A4.2) Turn-on the robot. Connect USB cable between a robot and computer.
(A4.3) Compile and upload the code or sketch to POP-BOT XT controller board by clicking
on button or select menu File > Upload
(A4.3) Run the sketch and observe the ZX-LED operation.
The display of POP-BOT XT controller board shows start message :
Press OK
Then, press the OK switch for starting the operation.
Both ZX-LED blinks alternating continuously.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 109
C/C++ program development with Arduino1.0 for POP-BOT XT is supported by the
popxt.h library file. With this library, user can create the control program for POP-BOT XT
easier and faster.
The sturcture of the popxt.h library file is shown below.
popxt.h library
-_-..-

-
.-.--
.-
.-.-,-
-,
.-.
.-.
.-..
.-.-

.
.
.
,.
..
,.,

.
.
.
,.
..
,.,
.-.-a-
..
-
--.--
--
-
---.

.
..
...




.--,-
.
,
,
,-a-
,
.--
.-.,---
,
,-
,-
.
,.--
,.-.,---
,.
,-
,.
,
,-
,
,
,-
,
Chapter 7
POP-BOT XT library file
110 POP-BOT XT : The Arduino Compatible Mobile Robot kit
7.1 Sub-library of the popxt.h library file
glcd contains the functions and statements of the display message, number
and line art graphic on the color graphic LCD of POP-BOT XT (not support the image file)
sleep contains the function and statements of delayed time
in_out contains the functions and statements of reading digital input port and
sending digital data to digital output port.
analog contains the functions and statements of reading analog input.
sound contains the functions and statements of sound generation.
motor contains the functions and statements of DC motor driving.
servo contains the functions and statements of servo motor control
serial contains the functions and statements of serial data communication via
USB and TxD/RxD of the POP-BOT XT controller board.
To run the instructions for POP-BOT XT program development; developers have to
include popbot.h mainly library file at the beginning of the C/C++ code with this command
:
#include <popxt.h>
to declare the compiler know all statements of the popxt.h library.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 111
7.2 Main function details of the popxt.h library
7.2.1 Color graphic LCD function
7.2.1.1 glcd
It is the function for display message on the color graphic LCD screen. The default
display is 21 characters, 16 lines with smallest font size.
Syntax
void glcd(unsigned char x, unsigned char y ,char *p,...)
Parameter
x is line number. Value is 0 to 15
y is character position. Value is 0 to 20
*p is the display message and special character or symbol for determine the
display as follows :
%c or %C - display one character
%d or %D - display integer from -32,768 to 32,767
%l or %L - display integer from -2,147,483,648 to 2,147,483,647
%f or %F - display floating point ( 3-digit maximum)
Example 7-1
glcd(2,0,"Hello World");
// Show message; Hello World at left end position of line 2
100 F
HelloRWorld
RRRRow03
RRRRRow04
RRRRRRow05
RRRRRRRow06
RRRRRRRRow07
Example 7-2
int x=20;
glcd(1,2,"Value = %d",x); // Display both charater and number same line
// Start from column 2 of line 1
100 F
Row00
RRValueR=R20
RRRow02
RRRRow03
RRRRRow04
RRRRRRow05
RRRRRRRow06
RRRRRRRRow07
112 POP-BOT XT : The Arduino Compatible Mobile Robot kit
7.2.1.2 colorRGB
It is color changing function in RGB (Red Blue Green) format to 16-bit data. It divides
5-bit for Red , 6-bit for Green and last 5-bit for Blue.
Syntax
unsigned int colorRGB(uint red,uint green,uint blue)
Parameter
red - Red value is between 0 to 31. If applied data is greater than 31, adjsut to 31
green - Green value is between 0 to 63. If applied data is greater than 63,
adjust to 63
blue - Blue value is between 0 to 31. If applied data is greater than 31, adjsut to 31
Example 7-3
#include <popxt.h>
int colors;
void setup()
{
int colors;
colors=colorRGB(31,0,0); // Determine 16-bit data of red to
// variable colors
glcdFillScreen(colors); // Set the background screen to red
}
void loop()
{}
220 F
100 F
T
B
6
6
1
2
A
T
M
e
g
a
3
2
U
4
100
Row00
RRValueR=R20
RRRow02
RRRRow03
RRRRRow04
RRRRRRow05
RRRRRRRow06
RRRRRRRRow07
RRRRRRRRRow08
RRRRRRRRRRow09
RRRRRRRRRRRow010
RRRRRRRRRRRRow011
RRRRRRRRRRRRRow012
RRRRRRRRRRRRRRow013
RRRRRRRRRRRRRRRow014
RRRRRRRRRRRRRRRRow015
POP-BOT XT : The Arduino Compatible Mobile Robot kit 113
7.2.1.3 color[ ]
It is array type variable. It is uesd for set the 8 basic colors. Developers can also use
color[] directly or use the color name.
Syntax
unsigned int color[]= { GLCD_RED,
GLCD_GREEN,
GLCD_BLUE,
GLCD_YELLOW,
GLCD_BLACK,
GLCD_WHITE,
GLCD_SKY,
GLCD_MAGENTA};
Parameter
GLCD_RED - Select red
GLCD_GREEN - Select grren
GLCD_BLUE - Select blue
GLCD_YELLOW - Select yellow
GLCD_BLACK - Select black
GLCD_WHITE - Select white
GLCD_SKY- Select sky blue color
GLCD_MAGENTA - Select magenta
Example 7-4
glcdFillScreen(color[5]) // Set background color to white
Example 7-5
glcdFillScreen(GLCD_BLUE) // Set background color to blue
114 POP-BOT XT : The Arduino Compatible Mobile Robot kit
7.2.1.4 setTextColor
This function is used to set the text color that diaply with glcd() function. The default
color is white.
Syntax
void setTextColor(unsigned int newColor)
Parameter
newColor - This is to set the target color. It is 16-bit data or variable data which is
defined from the variable color[]
Example 7-6
setTextColor(GLCD_YELLOW); // Set text color to yellow
7.2.1.5 setTextBackgroundColor
It is to set the text background color function. The default color is black. The text
background color is not screen background. Setting the scrren background color, need
to use the glcdFillScreen function.
Syntax
void setTextBackgroundColor(unsigned int newColor)
Parameter
newColor - This is to set the target color. It is 16-bit data or variable data which is
defined from the variable color[]
Example 7-7
setTextBackgroundColor(GLCD_GREEN);
// Set the text background color to green
220 F
100 F
A
T
M
e
g
a
3
2
U
4
RRValueR=R20
RRRow02
RRRRow03
RRRRRow04
RRRRRRow05
RRRRRRRow06
RRRRRRRRow07
RRRRRRRRRow08
RRRRRRRRRRow09
RRRRRRRRRRRow010
RRRRRRRRRRRRow011
RRRRRRRRRRRRRow012
RRRRRRRRRRRRRRow013
RRRRRRRRRRRRRRRow014
Hello World
POP-BOT XT : The Arduino Compatible Mobile Robot kit 115
7.2.1.6 glcdClear
It is clear screen function. The background color will be latest the text backgorund
color. If not defined before, the background color will be black
Syntax
void glcdClear()
Example 7-8
glcdClear(); // Clear all contents on the screen
7.2.1.7 glcdFillScreen
This will clear the scrren and change to the background color function. After
executing this function, all contents on scrren will be cleared and it will change to the
backgtround color to the target color.
Syntax
void glcdFillScreen(unsigned int color)
Parameter
color - The target color. It is 16-bit data or variable data which is defined from
the variable color[]
Example 7-9
glcdFillScreen(GLCD_BLUE);
// Clear screen and set background color to blue
[BLACK] [BLUE]
116 POP-BOT XT : The Arduino Compatible Mobile Robot kit
7.2.1.8 glcdMode
It is for setting the display orientation. There are 4 modes; 0 (0 degree), 1 (oritentate
right 90 degrees), 2 (orientate 180 degrees or invert) and 3 (orientate 270 degrees from
origin)
Syntax
glcdMode(unsigned int modeset)
Parameter
modeset - Orientation mode number. It is 0 to 3 for determine 0, 90, 180 and 270
degrees orientation. The default is 0 degree in vertical.

Example 7-10
#include <popxt.h>
void setup()
{
setTextSize(2); // 2X text sice
}
void loop()
{
glcdClear(); // Clear screen
glcdMode(0); // Set orientation display mode 0
glcd(0,0,POP-BOTXT); // Show message
sw_ok_press(); // Wait for OK pressing for changing
// the orientation diplay mode
glcdClear(); // After OK switch is pressed; clear screen
glcdMode(1); // Change orienatation display to mode 1
glcd(0,0,POP-BOTXT);
sw_ok_press();
glcdClear(); // After OK switch is pressed; clear screen
glcdMode(2); // Change orienatation display to mode 2
glcd(0,0,POP-BOTXT);
sw_ok_press();
glcdClear(); // After OK switch is pressed; clear screen
glcdMode(3); // Change orienatation display to mode 3
glcd(0,0,POP-BOTXT);
sw_ok_press();
}
POP-BOT XT : The Arduino Compatible Mobile Robot kit 117
7.2.1.9 setTextSize
This function is used to set the text size. The text size is 1x time by default. It requires
6 x 10 dots include character gap. With the default size, this display shows 21 characters
16 lines maximum in vertical.
Syntax
setTextSize(unsigned int newSize)
Parameter
newSize - times number of the default size. It is 1 to 16.
Example 7-11
#include <popxt.h>
void setup()
{
setTextSize(1); // Set text size to 1x
setTextColor(GLCD_GREEN); // Set text color to green
glcd(0,0,"Size1"); // Show message
setTextSize(2);
glcd(1,0,"Size2"); // Set text size to 2x
setTextSize(3);
glcd(2,0,"Size3"); // Set text size to 3x
setTextSize(4);
glcd(3,0,"Size4"); // Set text size to 4x
}
void loop()
{}
118 POP-BOT XT : The Arduino Compatible Mobile Robot kit
7.2.1.10 getTextColor
Get the current text color.
Syntax
unsigned int getTextColor()
Return value
textColor - It is 16-bit data. It refer colorRGB[] function
Example 7-12
unsigned int color;
color=getTextColor(); // Get the current color data to store in
// the color variable
7.2.1.11 getTextBackgroundColor
Get the current text background color.
Syntax
unsigned int getTextBackgroundColor()
Return value
textBackgroundColor - It is 16-bit data. It refer colorRGB[]function
Example 7-13
unsigned int color;
color=getTextBackgroundColor(); // Get and store the text color
// background to color variable
7.2.1.12 getTextSize
Get the currect text size.
Syntax
unsigned int getTextSize()
Return value
textSize - The size is times number from the default size. Range is 1 to 16.
Example 7-14
unsigned int textSize;
textSize=getTextSize(); // Store the current text size to textSize
// variable
POP-BOT XT : The Arduino Compatible Mobile Robot kit 119
7.2.1.13 glcdGetMode
Get the current orientation in display mode.
Syntax
unsigned int glcdGetMode()
Return value
mode - The orientation display mode number. It is 0 to 3. See details in glcdMode
function
Example 7-15
unsigned int Mode;
Mode=glcdGetMode(); // Get the current orientation display mode number
7.2.1.14 glcdPixel
This plots the dots on the coordinator of the display. It refers to 128 x 160 dots display.
Syntax
void glcdPixel(unsigned int x,unsigned int y,unsigned int color)
Parameter
x - Horizontal axis coordinator or x-axis. Value is 0 to 127.
y - Bertical axis coordinator or y-axis. Value is 0 to 159
color - The target color. It is 16-bit data or variable data which is defined from
the variable color[]
Example 7-16
#include <popxt.h>
int i;
void setup()
{
for (i=0;i<128;i+=4)
{
glcdPixel(i,80,GLCD_RED);
// Plot dot every 4 pixels on x-axis
// of center of the screen
}
for (i=0;i<160;i+=4)
{
glcdPixel(64,i,GLCD_RED);
// Plot dot every 4 pixels on y-axis
// of center of the screen
}
}
void loop()
{}
120 POP-BOT XT : The Arduino Compatible Mobile Robot kit
7.2.1.18 glcdRect
Draw the rectangular shape.
Syntax
void glcdRect(unsigned int x1,unsigned int y1,unsigned int
width,unsigned int height,unsigned int color)
Parameter
x1 - Start point of the rectangular shape on x-axis. Value is 0 to 127
y1 - Start point of the rectangular shape on y-axis. Value is 0 to 159
width - The width of rectangular shape. Value is 1 to 128
height - The height of rectangular shape. Value is 1 to 158
color - Line color. It is 16-bit data or variable data which is defined from the
variable color[]
Example 7-17
#include <popxt.h>
void setup()
{
glcdRect(32,40,64,80,GLCD_RED);
// Draw the red rectangle 64 x 80 pixels
}
void loop()
{}
POP-BOT XT : The Arduino Compatible Mobile Robot kit 121
7.2.1.19 glcdFillRect
This creates a filled rectangle. It is only fill color without an outline.
Syntax
void glcdFillRect(unsigned int x1, unsigned int y1, unsigned int
width, unsigned int height,unsigned int color)
Parameter
x1 - Start point of the rectangular shape on x-axis. Value is 0 to 127
y1 - Start point of the rectangular shape on y-axis. Value is 0 to 159
width - The width of rectangular shape. Value is 1 to 128
height - The height of rectangular shape. Value is 1 to 158
color - Fill color. It is 16-bit data or variable data which is defined from the variable
color[]
Example 7-18
#include <popxt.h>
void setup()
{
glcdFillRect(32,40,64,80,GLCD_RED);
// Create the solid red rectangle 64 x 80 pixels
}
void loop()
{}
122 POP-BOT XT : The Arduino Compatible Mobile Robot kit
7.2.1.20 glcdLine
Draw the straight line from point to point.
Syntax
void glcdLine(unsigned int x1, unsigned int y1, unsigned int x2,
unsigned int y2, unsigned int color)
Parameter
x1 - Start point on the x-axis. Value is 0 to 127.
y1 - Start point on the y-axis. Value is 0 ro 159
x2 - Destination point on the x-axis. Value is 0 to 127.
y2 - Destination point on the y-axis. Value is 0 ro 159
color - Line color. It is 16-bit data or variable data which is defined from the
variable color[]
Example 7-19
#include <popxt.h>
void setup()
{
glcdLine(0,0,127,159,GLCD_RED);
// Draw a red diagonal line from top left to bottom right
}
void loop()
{}
POP-BOT XT : The Arduino Compatible Mobile Robot kit 123
7.2.1.21 glcdCircle
Draw a circle function.
Syntax
void glcdCircle(unsgined int x, unsgined int y, unsgined int
radius,unsgined int color)
Parameter
x - Center of thge circle coordinator on x-axis. Value is 0 to 127
y - Center of thge circle coordinator on y-axis. Value is 0 to 159
radius - Radius value
color - Circumference color. It is 16-bit data or variable data which is defined
from the variable color[]
Example 7-20
#include <popxt.h>
void setup()
{
glcdCircle(32,120,31,GLCD_MAGENTA);
// Draw a magenta circle with 31 pixels radius
}
void loop()
{}
124 POP-BOT XT : The Arduino Compatible Mobile Robot kit
7.2.1.22 glcdFillCircle
Creates a filled circle without the circumference.
Syntax
void glcdFillCircle(unsigned int x, unsigned int y, unsigned int
radius, unsigned int color)
Parameter
x - Center of thge circle coordinator on x-axis. Value is 0 to 127
y - Center of thge circle coordinator on y-axis. Value is 0 to 159
radius - Radius value
color - Circle color. It is 16-bit data or variable data which is defined from the
variable color[]
Example 7-21
#include <popxt.h>
void setup()
{
glcdFillCircle(32,120,31,GLCD_MAGENTA);
// Create the solid magenta circle with radius 31 pixels
}
void loop()
{}
POP-BOT XT : The Arduino Compatible Mobile Robot kit 125
7.2.1.23 glcdArc
Draw the arc line function.
Syntax
void glcdArc(unsigned int x,unsigned int y, unsigned int r, int
start_angle, int end_angle, uint color)
Parameter
x - Center of thge circle coordinator on x-axis. Value is 0 to 127
y - Center of thge circle coordinator on y-axis. Value is 0 to 159
radius - Radius value of the arc
start_angle - Start angle of the arc
end_angle - Ending angle of the arc
color - Arc line color. It is 16-bit data or variable data which is defined from the
variable color[]
Example 7-22
#include <popxt.h>
void setup()
{
glcdArc(48,80,16,30,150,GLCD_RED);
glcdCircle(48,75,5,GLCD_BLUE);
glcdCircle(80,75,5,GLCD_BLUE);
glcdArc(80,80,16,30,150,GLCD_RED);
glcdFillCircle(64,90,7,GLCD_GREEN);
glcdArc(64,100,30,220,320,GLCD_RED);
}
void loop()
{}
126 POP-BOT XT : The Arduino Compatible Mobile Robot kit
7.2.2 Time function
7.2.2.1 sleep and delay
Delay time function in millisecond unit. Time value is an approximation.
Syntax
void sleep(unsigned int ms)
void delay(unsigned int ms)
Parameter
ms - Delay time in millisecond unit. Value is 0 to 65,535
Example 7-23
sleep(20); // Delay 20 milliseconds
delay(1000); // Delay 1 second
7.2.2.2 delay_us
Delay time function in microsecond unit. Time value is an approximation.
Syntax
void delay_us(unsigned int us)
Parameter
ms - Delay time in microsecond unit. Value is 0 to 65,535
Example 7-24
delay_us(100); // Delay 100 microseconds
POP-BOT XT : The Arduino Compatible Mobile Robot kit 127
7.2.3 Sound generation function
7.2.3.1 beep
This is a beep function. The beep signal is a 500Hz frequency sqaure wave signal.
Duration is 100 millisecond. This sginal is driven to the piezo speaker on the POP-BOT XT
controller board.
Syntax
void beep()
Example 7-25
beep(); // Drives the bepp signal at once.
7.2.3.2 sound
This is sound generation function. It allow developers to set the frequency and time
period.
Syntax
void sound(int freq,int time)
Parameter
freq - Frequnecy value in Hertz. Value is 0 to 32,787
time - Time period in millisecond. Value is 1 to 32,787
Example 7-26
sound(1200,500);
// Drives the signal 1200Hz 500ms to piezo speaker of the POP-BOT XT.
128 POP-BOT XT : The Arduino Compatible Mobile Robot kit
7.2.4 Input/Ouput port function
7.2.4.1 in
Reading the digital input port function.
Syntax
char in(x)
Parameter
x - Digial input port number
Return value
0 or 1
Example 7-27
char x; // Declare the x variable for storing the result
x = in(2); // Read data from the digital input port 2 to store in
// x variable
7.2.4.2 out
Out the digital value to the defined digital output port.
Syntax
out(char _bit,char _dat)
Parameter
_bit - Output pin port
Example 7-28
out(4,1); // Set port 4/A6 as output digital and out with data 1
out(6,0); // Set port 6/A7 as output digital and out with data 0
7.2.5 Sensor function
7.2.5.1 analog
Read the analog input port; A0 to A7
Syntax
unsigned int analog(unsigned char channel)
Parameter
channel - Analog input port. Value is 0 to 7. It is A0 to A7 port.
Return value
The converted digial data. It is 0 to 1023 from 10-bit analog to digital converter.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 129
7.2.5.2 knob
Read the KNOB button data of the POP-BOT XT controller board.
Syntax
unsigned int knob()
Return value
80 to 1023
Example 7-29
int val=0; // Declare variable to data storing
val=knob(); // Read data from the KNOB of POP-XT board to store to
// val variable
7.2.5.3 sw_ok()
Read status of the OK switch on the POP-BOT XT controller board (POP-XT board)
Syntax
unsigned char sw_ok()
Return value
1 (true) when the switch is pressed
0 (false) no press the switch
Note : Pressing the OK switch effects to KNOB value as 0 (zero)
Example 7-30
if(sw_ok())
{
beep(); // Beep after the OK switch is pressed
}
7.2.5.4 sw_ok_press()
Loop to check the OK switch pressing function
Example 7-31
........
sw_ok_press(); // Loop until the OK switch is pressed
......
130 POP-BOT XT : The Arduino Compatible Mobile Robot kit
7.2.6 DC motor control function
7.2.6.1 motor
Drive the DC motor function
Syntax
void motor(char _channel,int _power)
Parameter
_channel - DC motor output (1 or 2)
_power - Power value. It is -100 to 100
If set _power as positive value (1 to 100), motor moves forward
If set_power as negative value (-1 to -100), motor moves backward
If set as 0, motor stop but not recommended. Pl ease choose the
motor_stop function better.
Example 7-32
motor(1,60); // Drive motor A with 80% power
motor(1,-60); // Drive motor A backward with 80% power
Example 7-33
motor(2,100); // Drive motor B with 100% power
7.2.6.2 motor_stop
Stop motor driving function
Syntax
void motor_stop(char _channel)
Parameter
_channel - DC motor output (1, 2 and ALL)
Example 7-34
motor_stop(1); // Stop motor A
motor_stop(2); // Stop motor B
Example 7-35
motor_stop(ALL); // Stop all motor
POP-BOT XT : The Arduino Compatible Mobile Robot kit 131
7.2.6.3 fd
Move forward function. It is to move the robot forward.
Syntax
fd(unsigned int speed)
Parameter
speed - percentage of motor power (0 to 100%)
Example 7-36
fd(60); // Robot moves forward with 80% power
7.2.6.4 fd2
This full name of this function is forward2. It is a dependent function of the motor
control command for forward.
Syntax
fd2(unsigned int speed1, unsigned int speed2)
Parameter
speed1 - Speed of motor A (0 to 100%)
speed2 - Speed of motor B (0 to 100%)
Example 7-37
fd2(30,80); // Move the robot in circle shape.
// Because the speed of motor B is greater than motor A
7.2.6.5 bk
Move backward function. It is to move the robot backward.
Syntax
bk(unsigned int speed)
Parameter
speed - percentage of motor power (0 to 100%)
Example 7-38
bk(90); // Robot moves backward with 90% power
132 POP-BOT XT : The Arduino Compatible Mobile Robot kit
7.2.6.6 bk2
This full name of this function is backward2. It is a dependant function of the motor
control command for backward.
Syntax
bk2(unsigned int speed1 ,unsigned int speed2)
Parameter
speed1 - Speed of motor A (0 to 100%)
speed2 - Speed of motor B (0 to 100%)
Example 7-39
bk2(80,80); // Move backward both motor with same power
Both fd2() and bk2() functions help and adjust the motor speed for improving
the robot moving. Normally each motor speed is not equal 100%. It is some different. With
these function, user possible to adjust the different speed for each motor to adjust the
moving direction to more straight.
7.2.6.7 tl and tr
They are from turn left (tl) and turn right (tr). The turning method is stop one motor
and move another one. The tunring point is the stop wheel.
Syntax
tl(unsigned int speed) / tr(unsigned int speed)
Parameter
speed - Speed of motor (0 to 100%)
Example 7-40
tl(60); // Turn left with 80% power
tr(100); // Turn right with full speed
7.2.6.8 sl and sr
They are from spin left (sl) and spin right (sr). This function control each motor turn in
opposit direction. The turning point is the center of robot
Syntax
sl(unsigned int speed) / sr(unsigned int speed)
Parameter
speed - Speed of motor (0 to 100%)
Example 7-41
sl(70); // Root spin left with 70% power
sr(100); // Robot spin right with full speed
POP-BOT XT : The Arduino Compatible Mobile Robot kit 133
7.2.6.9 ao
It is to off all motor function.
Syntax
ao()
Example 7-42
void setup()
{
fd(100); // Robot moves forward with full speed
sleep(2000); // in 2 seconds
ao(); // Stop all motors
}
7.2.7 Servo motor library
There is one function. It is servo.
Syntax
void servo(unsigned char _ch, int _pos)
Parameter
_ch - Servo motor output (1 to 3)
_pos - Set the sevo motor shaft poistion (0 to 180 and -1)
If set to -1, disable selected servo motor output
134 POP-BOT XT : The Arduino Compatible Mobile Robot kit
7.2.8 Serial data communication library
It is library that contains function and statement for supporting the serial data
communication with UART of micontroller
7.2.8.1 Hardware interface
UART0
Connect the POP-BOT XT controller obard with USB port of the computer. It is same
port for uploading.
UART1
Connect the interface cable to RXD1 (port 2) and TXD1 (port 3)
7.2.8.2 uart
This is serial data sending function via UART0 port.
Syntax
void uart(char *p,...)
Parameter
*p - Type of data. Support the special character for setting display method.
Command Operation
%c or %C Display 1 character
%d or %D Display the decimal value -32,768 to +32,767
%l or %L Display the decimal value -2,147,483,648 to +2,147,483,647
%f or %F Display floating point 3 digits
\r Set the message left justify of the line
\n Display message on the new line
7.2.8.3 uart_set_baud
This is baud rate setting function for UART0.
Syntax
void uart_set_baud(unsigned int baud)
Parameter
baud - Baud rate of UART0 2400 to 115,200
Example 7-43
uart_set_baud(4800); // Set baud rate as 4,800 bit per second
7.2.8.4 uart_available
POP-BOT XT : The Arduino Compatible Mobile Robot kit 135
This is receiveing data testing function of UART0.
Syntax
unsigned char uart_available(void)
Return value
- 0 : no data received
- more than 0 : received character
Example 7-44
char x =uart_available();
// Check the recieving data of UART0.
// If x value is more than 0; it means UART0 get any data.
// Read it by using uart_getkey function in the order next immediately.
7.2.8.5 uart_getkey
This is data reading function from receivers buffer of UART0
Syntax
char uart_getkey(void)
Return value
- 0 : no data received
- data : received character in ASCII code
Example 7-45
#include <popxt.h> // Include library
void setup()
{
glcdClear(); // Clear screen
setTextSize(2); // Set text sixe 2x
glcdMode(1); // Selectr orientation display mode 1
}
void loop()
{
if(uart_available()) // Check incoming data
{
if(uart_getkey()=='a') // Is it a ?
{
glcd(1,0,"Key a Active!");
// Reply message after get the a key
sleep(1000); // Delay 1 second
}
else
{
glcdClear; // Clear screen
}
}
}
136 POP-BOT XT : The Arduino Compatible Mobile Robot kit
When run this program, Serial Monitor window od Arduno1.0 IDE is appeared.
Select the ending message with No line ending, baud rate is 115200 and uncheck at
Autoscroll box. Next, type a character and click on the Send button to send data from
your computer to the POP-XT board via USB port that is configured to run as a virtual COM
port over USB or USB Serial port
After POP-XT board get the a character, it shows message Key a Active!
on th color GLCD screen
POP-BOT XT : The Arduino Compatible Mobile Robot kit 137
7.2.8.6 uart1
This is serial data sending function via UART1 port. The default baud rate is 9,600 bit
per second.
Syntax
void uart1(char *p,...)
Parameter
*p - Type of data. Support the special character for setting display method. See
details in uart0 function.
7.2.8.7 uart1_set_baud
This is baud rate setting function for UART1.
Syntax
void uart1_set_baud(unsigned int baud)
Parameter
baud - Baud rate of UART1 2400 to 115,200
Example 7-46
uart1_set_baud(19200); // Set baud rate as 19,200 bit per second
7.2.8.8 uart1_available
This is receiving data testing function of UART1
Syntax
unsigned char uart1_available(void)
Return value
- 0 : no data received
- more than 0 : received character
7.2.8.9 uart1_getkey
This is data reading function from receivers buffer of UART1.
Syntax
char uart1_getkey(void)
Return value
- 0 : no data received
- data : received character in ASCII code
138 POP-BOT XT : The Arduino Compatible Mobile Robot kit
7.3 GP2D120 Infrared ranger library
In addition, the library file popxt.h that is the main library . The POP-BOT XT robots
also have a library for communicating with sensors and other special functions of the
robot that is not included in the main library popxt.h. Therefore developers must include
at the beginning of the code or sketch.
POP-BOT XT Standard kit provides a module GP2D120 infrared ranger. To working
with it, require a ligrary file gp2d120_lib.h.
To using this library, must include at the beginning of the program with this statement :
#include <gp2d120_lib.h>
About hardware inrerfacing, connect this sensor to any analog port of the POP-BOT
XT. They are A0 to A7.
7.3.1 getdist
Get distance value from GP2D120.
Syntax
unsigned int getdist(char adc_ch)
Parameter
adc_ch - Analog port that connect with GP2D120 (A0 to A7)
Return value
Distance in centimetre unit
Example 7-47
dist = getdist(3); // Read distance from GP1D120 at A3 port
POP-BOT XT : The Arduino Compatible Mobile Robot kit 139
The POP-BOT XT has 2 channels of DC motor drivers. You can control the speed
and direction of DC motor rotation with the software. Because DC motor is driven by PWM
(Pulse width modulation) signal. In this section describe how to drive DC motor with PWM
and how to generate PWM signal of POP-XT board with C/C++ programming and Arduino.
8.1 Basic operation of driving DC motor with PWM
By changing (modulating) the width of the pulse applied to the DC motor we can
increase or decrease the amount of power provided to the motor, thereby increasing or
decreasing the motor speed. Notice that, although the voltage has a fixed amplitude, it
has a variable duty cycle. That means the wider the pulse, the higher the speed.
Refer Figure 8 -1, the Vs supplies PWM signal to DC motor. The speed is dependent
on Ton time (ON time of motor). At this time, DC motor will receive the full voltage; Vm. If
Tons width is more, DC motor is received more voltage. It rotate in high speed. The ratio
of Ton time in percentage with period (T) is called Duty cycle. You can calculate this as
follows :
% duty cycle =
Toff Ton
Ton
100

................................................................(8.1)
PWM frequency =
T
1
Toff Ton
1

....................................................................(8.2)
Average DC motor voltage drop = Supply voltage x duty cycle (%) ............(8.3)
Chapter 8
POP-BOT XT movement control
M
Vs
Vm
Rs
Vm
t
Ton
Toff
T
Figure 8-1 : The PWM signal for driving DC motor
140 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Although the duty cycle is determine the motor speed. But DC motor can operate
at limit frequency. If the PWM frequrency is over the limit, DC motor will stop because its
operation reach to saturation point. The example PWM signal in figure 8-2 has 20 milliseconds
period and 50Hz frequency.
In Figure 8-2 (A) the PWM duty cycle is 20%. Motor will rotate with lowest speed
because the voltage drop is only 0.9V.When increase the duty cycle in Figure 8-2 (B) and
(C), voltage is applied to DC motor increase. Its speed is increase too.
In Figure 8-2 (D) the voltage is applied to DC motor full level because duty cycle is
100%. Thus, controlling the PWM duty cycle is a method of motor speed control.
4 8 12 16 20 24 28 32
t (ms)
Vm (V)
4.5
4 8 12 16 20 24 28 32
t (ms)
Vm (V)
4.5
4 8 12 16 20 24 28 32
t (ms)
Vm (V)
4.5
10ms
4 8 12 16 20 24 28 32
t (ms)
Vm (V)
4.5
18ms
20ms
Average voltage = 4.5 x 100% = 4.5V
(A)
(B)
(C
(D)
Average voltage = 4.5 x 90% = 4.05V
Duty cycle =
20
18
x100%
=
90%
Duty cycle =
20
20
x100%
=
100%
Duty cycle =
20
10
x100%
=
50%
Average voltage = 4.5 x 50% = 2.25V
Duty cycle =
20
4
x100%
=
20%
Average voltage = 4.5 x 20% = 0.9V
Figure 8-2 : Shows the relation between the different duty cycle
and voltage accross the DC motor.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 141
8.2 Arduino with PWM
Arduino has a special function to generate PWM signal and outs to any digital pins.
It is analogWrite(). User can adjust PWM duty cycle from 0 to 100% with value between
0 to 255.
At value = 0, no PWM signal is occured. Voltage output as 0V.
At value = 51, The PWM signal has positive pulse width 20% of period. The duty
cycle is equal to 20%.
At value = 127, The PWM signal has positive pulse width half of period. The duty
cycle is equal to 50%.
At value = 191, The PWM signal has positive pulse width 75% of period. The duty
cycle is equal to 75%.
At value = 255, The PWM signal has full positive pulse width. The duty cycle is
equal to 100%.
The figure 8-3 shows the PWM signal at any duty cycle.
Figure 8-3 : Shows the PWM signal at any duty cycle.
20%
50%
75%
0%
100%
142 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Output voltage of PWM signal is average value relate the duty cycle. You can
calcualte from this relation below :
Output_voltage = (on_time / off_time) x max_voltage
We can use the PWM signal from analogWrite() function to adjust the LED brightness
or amplify to drive the DC motor. The Arduinos pin that assigned to PWM output will out
the PWM continue until do the analogWrite() function in new period or excecute
digitalRead and digitalWrite funtion at same pin.
For Arduino Leonardo hardware (the POP-XT board is also compatible) has 5 analog
output pins; it includes pin 3, 5, 9, 10 and 11. However the POP-XT board assign pin 5, 9 and
10 to connect the motor control circuit both DC motor and servo motor. The pin 3 is assigned
to SDA pin for I2C bus and pin 11 is connected with piezo speaker.
The analogWrite function fornat is
analogWrite(pin,value);
Therefore; pin as The Arduino Leonardos port pin 3, 5, 9, 10 and 11
value as Duty cycle value 0 to 255.
8.3 DC motor function for POP-BOT XT
The programming language C / C + + to drive the motors of the robot POP-BOT XT
has been made easier with DC motor function in the popxt.h library file. Summary of all
functions are as follows :
motor(_channel,_power); Select the motor output and set speed.
motor_stop(_channel); Stop motor operation
fd(speed); Move forward
bk(speed); Move backward
tl(speed); Turn left
tr(speed); Turn right
sl(speed); Spin left
sr(speed); Spin right
ao(); Break all motors
POP-BOT XT : The Arduino Compatible Mobile Robot kit 143
8.3.1 motor
Drive the DC motor function
Syntax
void motor(char _channel,int _power)
Parameter
_channel - DC motor output (1 or 2)
_power - Power value. It is -100 to 100
If set _power as positive value (1 to 100), motor moves forward
If set_power as negative value (-1 to -100), motor moves backward
If set as 0, motor stop but not recommended. Pl ease choose the
motor_stop function better.
Example 8-1
motor(1,60); // Drive motor A with 80% power
motor(1,-60); // Drive motor A backward with 80% power
Example 8-2
motor(2,100); // Drive motor B with 100% power
8.3.2 motor_stop
Stop motor driving function
Syntax
void motor_stop(char _channel)
Parameter
_channel - DC motor output (1, 2 and ALL)
Example 8-3
motor_stop(1); // Stop motor A
motor_stop(2); // Stop motor B
Example 8-4
motor_stop(ALL); // Stop all motor
8.3.3 fd
Move forward function. It is to move the robot forward.
Syntax
fd(unsigned int speed)
Parameter
speed - percentage of motor power (0 to 100%)
Example 8-5
fd(60); // Robot moves forward with 80% power
144 POP-BOT XT : The Arduino Compatible Mobile Robot kit
8.3.4 fd2
This full name of this function is forward2. It is a dependent function of the motor
control command for forward.
Syntax
fd2(unsigned int speed1, unsigned int speed2)
Parameter
speed1 - Speed of motor A (0 to 100%)
speed2 - Speed of motor B (0 to 100%)
Example 8-6
fd2(30,80); // Move the robot in circle shape.
// Because the speed of motor B is greater than motor A
8.3.5 bk
Move backward function. It is to move the robot backward.
Syntax
bk(unsigned int speed)
Parameter
speed - percentage of motor power (0 to 100%)
Example 8-7
bk(90); // Robot moves backward with 90% power
8.3.6 bk2
This full name of this function is backward2. It is a dependant function of the motor
control command for backward.
Syntax
bk2(unsigned int speed1 ,unsigned int speed2)
Parameter
speed1 - Speed of motor A (0 to 100%)
speed2 - Speed of motor B (0 to 100%)
Example 8-8
bk2(80,80); // Move backward both motor with same power
Both fd2() and bk2() functions help and adjust the motor speed for improving
the robot moving. Normally each motor speed is not equal 100%. It is some different. With
these function, user possible to adjust the different speed for each motor to adjust the
moving direction to more straight.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 145
8.3.7 tl and tr
They are from turn left (tl) and turn right (tr). The turning method is stop one motor
and move another one. The tunring point is the stop wheel.
Syntax
tl(unsigned int speed) / tr(unsigned int speed)
Parameter
speed - Speed of motor (0 to 100%)
Example 8-9
tl(60); // Turn left with 80% power
tr(100); // Turn right with full speed
8.3.8 sl and sr
They are from spin left (sl) and spin right (sr). This function control each motor turn in
opposit direction. The turning point is the center of robot
Syntax
sl(unsigned int speed) / sr(unsigned int speed)
Parameter
speed - Speed of motor (0 to 100%)
Example 8-10
sl(70); // Root spin left with 70% power
sr(100); // Robot spin right with full speed
8.3.9 ao
It is to off all motor function.
Syntax
ao()
Example 8-11
void setup()
{
fd(100); // Robot moves forward with full speed
sleep(2000); // in 2 seconds
ao(); // Stop all motors
}
146 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Activity 5 : POP-BOT XT basic movement
Activity 5-1 Forward and Backward movement
A5.1.1 Open the Arduino IDE and create the sketch code from Listing A5-1.
A5.1.2 Upload the sketch to the robot.
A5.1.3 Turn-off power and Remove the download cable.
A5.1.4 Make sure the robot is on a flat surface. Turn-on the power and observe the
operation.
The POP-BOT XT moves forward. See both LED motor indicators light in green color.
After 1 second, both indicators change color to red and the robot moves backward.
If this is incorrect you will need to re-connect the motor cable to its opposite port /
polarity. Do this until your robot moves correctly. Once its done, Use this motor port
configuration for all your programming activities from now on. The robot will move forward
and backward continually until you turn off its power.
#include <popxt.h>
void setup()
{}
void loop()
{
fd(80);
sleep(1000);
bk(80);
sleep(1000);
}
Listing A5-1 : ForwardBackward.ino ; sketch file for simple movement
control for POP-BOT XT
POP-BOT XT : The Arduino Compatible Mobile Robot kit 147
Activity 5-2 Circle-shape movement control
With setting the different speed for each motor, it cause the robot move in circle-
shape. You can try with this procedure as follows :
A5.2.1 Create a new sketch file and write the following C Codes shown in Listing A5-2.
A5.2.2 Upload the sketch to the robot.
A5.2.3 Turn-off power and Remove the download cable.
A5.2.4 Make sure the robot is on a flat surface. Turn-on the power and observe the robot.
The robot moves with circle-shape continually until you press the OK button on the
POP-BOT XT controller board to stop the robot movement.
#include <popxt.h>
void setup()
{
fd2(30,90);
sw_ok_press();
ao();
}
void loop()
{}
Listing A5-2 : CircleMove.ino; sketch for circle-shape movement of
the POP-BOT XT
148 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Activity 5-3 Square-shape movement control
A5.3.1 Create a new sketch file and write the following C Codes shown in Listing A5-3.
A 5.3.2 Upload the sketch to the robot. Turn-off power and Remove the download cable.
A5.3.3 Turn-on the power and observe the robot.
The robot will be activated if the OK button on the robot is being pressed. The
robot will move forward and turn right continually to make the square routing.
#include <popxt.h> // Include Library for POP-BOT XT
void setup()
{
setTextSize(2); // Set text size 2x
glcd(1,1,"Press OK"); // Start message
glcd(2,1,"to Start");
sw_ok_press(); // Check OK switch pressing to start
glcdClear(); // Clear screen
glcd(1,1,"Moving..."); // Operation message
}
void loop()
{
fd(80); // Forward with 80% power
sleep(900); // Forward time
tr(80); // Turn right with 80% power
sleep(400); // Turn right time
}
Listing A5- 3 : RectangleMove.ino ; sketch file for rectangle-shape
movement of the POP-BOT XT robot
POP-BOT XT : The Arduino Compatible Mobile Robot kit 149
Activity 5-4 Multi-direction movement
The Listing 5-4 is sketch for control the robot to move on any direction. It includes
forward 0.6 second, turn left 0.4 second, backward 0.6 second, spin right 0.3 second,
backward again 0.6 second, spin left 0.3 second and back to repeat again continually.
#include <popxt.h> // Include the main library
void setup()
{
glcdClear(); // Clear screen and set to black
setTextSize(2); // Set text size 2x
glcd(1,1,"Press OK"); // Show the start message
glcd(2,1,"to Start");
sw_ok_press(); // Loop for OK switch pressing
beep(); // Drive the beep signal
glcdClear(); // Clear screen and set to black
}
void loop()
{
glcdFillScreen(GLCD_RED); // Clear screen and set to red
fd(80); // Move forward with 80% power
sleep(600); // and 0.6 second
glcdFillScreen(GLCD_GREEN); // Clear screen and set to green
tl(60); // Turn left with 60% power
sleep(400); // and 0.4 second
glcdFillScreen(GLCD_BLUE); // Clear screen and set to blue
bk(80); // Backward with 80% power
sleep(600); // and 0.6 second
glcdFillScreen(GLCD_YELLOW); // Clear screen and set to yellow
sr(60); // Spin right with 60% power
sleep(300); // and 0.3 second
glcdFillScreen(GLCD_MAGENTA); // Clear screen and set to margenta
bk(80); // Backward with 80% power
sleep(600); // and 0.6 second
glcdFillScreen(GLCD_WHITE); // Clear screen and set to white
sl(60); // Spin left with 60% power
sleep(300); // and 0.3 second
}
Listing A5 -4 : MultiDirectionMove.ino ; sketch file for moving with
multi-direction of the POP-BOT XT
150 POP-BOT XT : The Arduino Compatible Mobile Robot kit
After upload the sketch, turn off power and remove the USB cable. Place the robot
on the flat floor. Turn on power. The display of the robot show title message :
Press OK
to Start
Press the OK buttton on the robot. The POP-BOT XT begins to move. When it change
direction, the screen color will change following to report the direction changing.
Activity 5-5 Improve the straight movement of POP-BOT XT
with fd2() and bk2() function
The function fd2(speed1,speed2) and bk2(speed1,speed2)are DC motro control
functions similar fd() and bk() functions. The different are fd2() and bk2() have 2
more parameters to set the speed of each mortor independent.
The inequality of the motor may result in the movement of the robot can be tilted
to one side. With separate speed setting of each motor in fd2() and bk2() functions, it
compensates the different speed of each motor. The result is robot possible to move more
straight.
Listing A5-5 is simple program that use the simple statements to control the robot
moves forward by adjusting each motor speed with fd2() and bk2() function. The robot
will move forward straight as possible.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 151
#include <popxt.h> // Include the main library
void setup()
{
glcdClear(); // Clear screen and set to black
setTextSize(2); // Set text size 2x
glcd(1,1,"Press OK"); // Show the start message
glcd(2,1,"to Start");
sw_ok_press(); // Wait for OK switch pressed
glcdClear();
glcd(1,1,"Moving..."); // Show operation message
fd2(70,70); // Move the robot forward with 70% power
}
void loop()
{}
Listing A5 -5 : MoveAlignment.ino ; sketch for speed adjusting with
fd2()and bk2() function to improve the robots movement to
more straight.
After uplaoding, see the robot movement.
Senarion 1 : robot move slant to left
It means the left DC motor speed is slower than the rigfht DC motor. Solution is
increase the left DC motor speed by adjusting at speed1 parameter of fd2() function.
Senarion 2 : robot move slant to right
It means the right DC motor speed is slower than the left DC motor. Solution is
increase the right DC motor speed by adjusting at speed2 parameter of fd2() function.
152 POP-BOT XT : The Arduino Compatible Mobile Robot kit
POP-BOT XT : The Arduino Compatible Mobile Robot kit 153
For proper movement of the robot, you will need to learn about taking in readings
from sensors and then to determine the outcome movements based on conditions set by
the robots code. The most basic sensor in robotics is the switch sensor. This chapter will
explain about to ussage of the switch sensor and it helps the robot to avoid collisions.
In POP-BOT XT robot kit, comes with 2 switch sensors; ZX-01. The schematic diagram
of this sensor is shown in the figure 9-1. When the switch is pressed (it means it has touched
or collided with an object. The logic output changes from 1 to 0 until the release of
the switch. Once the switch is release, the output signal is converted back to a 1 again.
This sensor is used to determine the conditions encountered by the robot. The
switches are installed at the front of the robot. Once the switch is pressed, the micro-
controller will drive the robot to move backwards and change its direction. The robot will
be able to move through obstacles.
Operation :
If the switch is pressed; the logic
0I is sent to output and the red
LED is on.
If no pressing, output is logic 1
and LED is off.
Figure 9-1 : ZX-01 switch sensor of the POP-BOT XT schematic and
operation details.
DATA
R3
220
R2
10k
R1
510
LED1
S1
Switch
Indicator
Signal output
GND
+V
Chapter 9
Object avoidance by contact
154 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Activity 6 : Switch sensor testing
This activity presents a simple program to test the switch sensor operation. Get the
switch status to drive a beep to the piezo speaker
(A6.1) Connect the ZX-01 switch sensor to port 22/A4 and 23/A5 of the POP-BOT XT controller
board.

T
B
6
6
1
2
A
T
M
e
g
a
3
2
U
4
100
Press OK
to Start
(A6.2) Open Arduino1.0 IDE. Type the Listing A6-1 and save as TouchSwitchTest.ino file.
(A6.3) Turn-on the robot. Connect the USB cable between the robot and the computer.
(A6.4) Compile and upload the code or sketch to POP-BOT XT controller board by clicking
on button or select menu File > Upload
(A6.5) Run the sketch. At the robots display, it shows message :
Press OK
to Start
Press the OK switch on the robot to start
POP-BOT XT : The Arduino Compatible Mobile Robot kit 155
#include <popxt.h> // Include the main library
void setup()
{
glcdClear(); // Clear screen and set to black
setTextSize(2); // Set text size 2x
glcd(1,1,"Press OK"); // Show the start message
glcd(2,1,"to Start");
sw_ok_press(); // Wait for OK switch pressed
glcdClear();
glcd(1,1,"Let's go!"); // Show operation message
}
void loop()
{
if(in(22)==0) // If swtich at pin 22 is pressed
{
sound(1000,300); // Generate the 1kHz signal
glcdFillScreen(GLCD_RED); // Change the screen color to red
}
if(in(23)==0) // If switch at pin 23 is pressed
{
sound(2000,300); // Generate the 2kHz signal
glcdFillScreen(GLCD_YELLOW); // Change the screen color to yellow
}
}
Listing A6-1 : TouchSwitchTest.ino ; sketch file for testing the ZX-
01 switch sensor operation
Try pressing the ZX-01 switch sensor at port 22/A4.
The 1kHz signal is driven to piezo speaker 0.3 second and the background screen
color is change to red. If still press the switch, the signal also is driven continually
Try pressing the ZX-01 switch sensor at port 23/A5.
The 2kHz signal also is driven with 0.3 second period and display color is yellow.
156 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Activity 7 : Wired remote control
Install 2 switches for the mobile robot for the 4 scenarios as follows :
1. No switches pressed : the robot stops. Does not move.
2. Both switches are pressed in the same time : the robot moves forward.
3. The left switch that is connected with port 22/A4 is pressed only : the robot
turns left
4. The right switch that is connected with port 23/A5 is pressed only : the robot
turns right.
#include <popxt.h> // Include the main library
void setup()
{
setTextSize(2); // Set text size 2x
glcd(1,1,"Press OK"); // Show the start message
glcd(2,1,"to Start");
sw_ok_press(); // Wait for OK switch pressed
glcdClear();
glcd(1,1,"Let's go!"); // Show operation message
}
void loop()
{
if(in(22)==0&&in(23)==0) // Both switches are pressed ?
{
fd(60); // If correct, move forward with 60% power
}
else if(in(22)==0) // Only switch at pin22 is pressed ?
{
tl(60); // If correct, turn left with 60% power
}
else if(in(23)==0) // Only switch at pin23 is pressed ?
{
tr(60); // If correct, turn right with 60% power
}
else
{
ao(); // No pressing any switch, stop the robot
}
}
Listing A7-1 : RemoteSwitch.ino ; sketch file for wired remote
control activity of the POP-BOT XT
POP-BOT XT : The Arduino Compatible Mobile Robot kit 157
From all the 4 conditions, we will write the condition for making the control program
for the POP-BOT XT following the Listing A7-1
(A7.1) Remove both ZX-01 switch sensors from the robot chasis but the cable are still connect.
The ZX-01 switch sensors are similar looking to that of a wired remote control for POP-BOT
XT
(A7.2) Open the Arduino IDE. Type the Listing A7-1. Compile and upload to the robot.
(A7.3) Run the program. Try to press both ZX-01 switch sensors to control the robot movement.
158 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Activity 8 : The bumper
From Activity 7, you have learnt how to use switch sensors to control the movement
of the robot. This activity requires the switches to be installed at the front of robot again.
The codes for this activity is also changed. For normal movement, robot moves forward
continuously until any of the switches is pressed. It means a collision has happened. The
robot moves backward and changes its direction to get through obstacles.
This activity is to program the robot to detect the collision of both switches at the
front of the POP-BOT XT robot. After a collision is encountered on the left side, the robot will
move backward and spin right to change the direction.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 159
On the other hand, if the collision is occurs at the right side. The robot moves
backwards again and spins left to change the direction.
(A8.1) Create the new sketch with Listing A8-1.
(A8.21) Turn-on the robot. Connect USB cable between a robot and a computer.
(A8.3) Compile and upload the code or sketch to POP-BOT XT controller board by clicking
on button or select menu File > Upload
(A8.4) Prepare the demonstration area by placing and securing boxes or objects on the
surface.
(A8.5) Place the robot on the demonstration area.
(A8.6) Run the sketch. At the robots display, it shows message :
Press OK
to Start
(A8.7) Press the OK switch and observe the robot.
The POP-BOT XT wil l read both switch status from port 22/A4 and 23/A5. If any
switch is pressed or it collides with some object, the result is logic 0.
In a normal operation, the robot will move forward continually.
If the Left Switch module touches any object, the robot will move backward and
change its moving direction to its right to avoid the object.
If the Right Switch module touches any object, the robot will move backward and
change its moving direction to its left to avoid the object.
160 POP-BOT XT : The Arduino Compatible Mobile Robot kit
#include <popxt.h> // Include the main library
void setup()
{
setTextSize(2); // Set text size 2x
glcd(1,1,"Press OK"); // Show the start message
glcd(2,1,"to Start");
sw_ok_press(); // Wait for OK switch pressed
glcdClear();
glcd(1,1,"Let's go!"); // Show operation message
}
void loop()
{
fd(70);
if(in(22)==0) // Left switch is attacked
{
bk(80); // Move backward
sleep(300);
sr(80); // Spin right
sleep(200);
}
if(in(23)==0) // Right swtich is attacked
{
bk(80); // Move backward
sleep(400);
sl(80); // Spin left
sleep(400);
}
}
Programming hint
This code determines the delay time in sleep() function which is used in the backward,
spin left and right sub-functions. These are not equal. It assist the robot to move out of the
trapped situation easier.
Listing A8-1: ObjectAvoider.ino; sketch file for object avoiding with
collision of the POP-BOT XT
POP-BOT XT : The Arduino Compatible Mobile Robot kit 161
Line following or Line tracking is a popular and common activity in robotics learning.
The purpose of this activity is to learn about how to interface analog sensors. In the POP-
BOT XT robot kit, it has a pair of Infrared reflector sensor for this activity. Two IR Reflector
sensors will be installed at the bottom of the POP-BOT XT so that it can detect both white
and black lines.
10.1 ZX-03 : Infrared reflector sensor
The heart of this sensor is TCRT5000 reflective object sensor. It is designed for close
proximity infrared (IR) detection. Theres an infrared diode behind its transparent blue
window and an infrared transistor behind its black window. When the infrared emitted by
the diode reflects off a surface and returns to the black window, it strikes the infrared
transistors base, causing it to conduct current. The more infrared incident on the transistors
base, the more current it conducts. The figure 10-1 shows the operation of ZX-03 sensor.
When used as an analog sensor, the ZX-03 can detect shades of gray on paper
and distances over a short range if the light in the room remains constant.
The suitable distance from sensor to line or floor is during 3 to 8 mm. The output
voltage is during 0.1 to 4.8V and digital value from10-bit A/D converter is 20 to 1,000.
Chapter 10
POP-BOT XT line tracking
Figure 10-1 : The operation of ZX-03 Infrared reflector sensor board
with white and black surface
Infrared LED
Photo-transistor
White surface
10k
TCRT5000
510
+V
GND
OUT
High output voltage
Infrared LED
Photo-transistor
Black surface
10k
TCRT5000
510
+V
GND
OUT
Low output voltage
c
u
r
r
e
n
t

f
l
o
w
c
u
r
r
e
n
t

f
l
o
w
162 POP-BOT XT : The Arduino Compatible Mobile Robot kit
10.2 Line tracking activity preparation
10.2.1 Demonstration field component preparation
All activities are described in this chapter use the make your own demonstration
field . They includes white surface with black line and black surface with white line field.
You must make your own field using the items below (not provided in this kit) :
1. Polypropylene board or PP board white and Black sheet. Size is 90 x 60 cm.
However the sizing can change depending on your applications and resoucres.
2. Black and white electrical tape 1 inches width 2 rolls per color. 3M brand is
recommended.
3. Scissors or a Cutter
10.2.2 Set the reference value for line tracking activity with
analogRead() function
POP-BOT XT can detect the difference between lines and surface by reading the
infrared reflector sensors value via the analog input ports. POP-BOT XT programming uses
the analogRead() function of Arduino for reading any analog sensor port.
POP-BOT XT reads the black line and surface data with low value (less than 400
and minimum is 0) and reads the white line and surface data with high value (higher than
500 and maximum is 1023). The reference value for making the decision about line or
surface is average value from summing of black and white surface as follows :
Reference value = (White surface value + black surface value) / 2
The activity 9 shows the detail of the reference value for this line tracking activity.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 163
Activity 9 : Testing black and white area
The POP-BOT XT robot is attached with 2 of Infrared reflector modules at bottom of
the robot base. This activity will only dwell on the programming section.
Before developing the robot to track the line, developers must program the robot
to detect the difference between black and white surface.
(A9.1) Open the Arduino IDE and create the sketch code from Listing A9-1.
(A9.2) Upload the sketch to the robot. Disconnect the download cable.
(A9.3) Make the black & white testing sheet similar to the illustration as shown below. The
white surface area is 30 x 30 cm. and black surface is 30 x 30cm. (recommended).
(A9.4) Check the connection of both sensors again. The left ZX-03 sensor connect with port
18/A0 and right sensor connect with port 19/A1.
#include <popxt.h> // Include the main library
void setup()
{
setTextSize(3);
glcdMode(3);
glcd(1,1,"Press OK"); // Start message
sw_ok_press(); // Wait for the OK switch pressing
}
void loop()
{
glcd(1,1,"L=%d ",analog(0)); // Left ZX-03 value
glcd(3,1,"R=%d ",analog(1)); // Right ZX-03 value
sleep(100);
}
Listing A9-1 : SurfaceRead.ino ; sketch file for reading the surface
color and shows the value on the color display of the POP-BOT XT
164 POP-BOT XT : The Arduino Compatible Mobile Robot kit
(A9.5) Place the robot on the black surface. See the detection data from the color display.
Black surface values will range from 80 to 250.
TB6612
1
0
0
T
B
6
6
1
2
100
L
=
1
0
0
R
=
1
0
0
(A9.6) Place the robot on the white surface. See the detection data from the color display.
White surface values will range from 700 to1000.
TB6612
1
0
0
T
B
6
6
1
2
100
L
=
9
0
0
R
=
9
0
0
The result is :
The black surface value is between 80 and 250
The white surface value is between 700 and 1000
The example reference value for detecting the line would be an average,
(100+900) /2 = 500.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 165
Activity 10 : AlarmBOT
This is a sample application to make the simple alarm system. When the robot is
lifted from the floor (the power is still on), the ZX-03 sensor that is installed bottom of the
robot chasis can not detect the reflected light. The reading is very low (less than black
value).
(A10.1) Open Arduino1.0 IDE and type the Listing A10-1.
(A10.2) Compile and upload to the POP-BOT XT. Disconnect the USB cable.
(A10.3) Place the robot on the floor. Then turn on power.
The robot will not do any work. The only indicator light is the on and the color
display screen will be black.
(A10.4) Try to lift the robot off the floor.
The POP-BOT XT will drive a warning sound alarm and the color display of the POP-
BOT XT is changed to red to alert you that the robot was lifted up off the floor.
#include <popxt.h> // Iclude the main library
void setup()
{}
void loop()
{
if(analog(0)<20) // Read and check the left sensor value ch.0
// lower 20
{
sound(2500,500); // If correct, drive alarm sound
glcdFillScreen(GLCD_RED); // Change background to red
}
else
{
glcdClear(); // Clear screen
}
}
Listing A10-1 : AlarmBOT.ino ; sketch file for AlarmBOT application
of the POP-BOT XT
166 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Activity 11 : POP-BOT XT Edge detection
This activity is extended from the Activity 10. The POP-BOT XT can detect no light
reflected status. This activity will show about using infrared reflector sensors for surface
detection to control the robot move on the table and not fall off the edge of the table !
With a simple change of the position of the sensors and a simple program, you can
adapt the POP-BOT XT to edge detection. Start assembling the mechanical parts place
the sensors in the right position and create the Arduino sketch for the table surface testing.
This capability can be used to detect the area with a desk top or on the board at the
floor. Then write a program to make POP-BOT XT robot can move in the area.
(A11.1) Change the ZX-03 sensor position from bottom of the robot chasis to front by using
5-hole strip joiners, 3 x 15mm. screws and 3mm. nuts. The Edging detection robot will be
ready for programming following the picture below.
(A11.2) Use the same connection of both ZX-03 sensor same the previous activity.
(A11.3) Turn-on the robot. Connect USB cable between the robot and the computer.
(A11.4) Create the code following the Listing A11-1. Compile and upload the code or
sketch to POP-BOT XT controller board by clicking on button or select menu File >
Upload
(A11.5) Turn off power and remove the USB cable.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 167
#include <popxt.h> // Include the main library
int L,R;
void setup()
{
setTextSize(2); // Set text size 2x
glcd(1,1,"Press OK"); // Show the start message
glcd(2,1,"to Start");
sw_ok_press(); // Wait for the OK switch pressing
glcdClear();
glcd(1,1,"Moving..."); // Show the operation message
}
void loop()
{
fd(60); // Move forward
L=analog(0); // Define A0 sensor as Left sensor
R=analog(1); // Define A1 sensor as Right sensor
if (L<500&&R<500) // Both sensors out of the area
{
bk(80); // Move backward
sound(1000,100); // Warn the out of area by sounding
sleep(500);
sr(60); // Spin right to change direction
sleep(300);
}
else if(L<500) // The left sensor out of the area
{
bk(80); // Movce backward
sound(1500,100); // Warn the out of area with the different sound
// frequency
sleep(400);
sr(60); // Spin right to change direction
sleep(300);
}
else if(R<500) // The right sensor out of the area
{
bk(80); // Movce backward
sound(1500,100); // Warn the out of area with the sound
sleep(300);
sl(60); // Spin left to change direction
sleep(500);
}
}
Programming hint
There is 2 important variables; L and R for storing the value from ZX-03 sensors on both the
left and right. Thus, use the variable values to compare with the reference value with IF statement
to check the robot move out the table. Before the robot moves, the controller will move the
robot backward and drive a warning sound. After that, it will spin to change its direction.
From the code, execute the sound() function after bk() function. This is because the sound()
function takes time to work. If executed before moving backward, the robot may fall off the
table while the robot is generating the alarm sound.
Liusting A11-1 : EdgeDetect.ino ; sketch file for edge detection
application of the POP-BOT XT
168 POP-BOT XT : The Arduino Compatible Mobile Robot kit
(A11.6) Place the robot on the table. Turn on and press the OK switch to start.
POP-BOT XT moves forward until the sensor is out from the tables edge. It will
change the movement direction following these scenarios :
1. Both sensors are out from tables edge : the robot moves backward and spins
right then moves forward again.
TB6612
100
TB6612
100
TB 6612
100
TB 6612
100
TB661 2
1 00
T B 6 6 1 2
100
1
4 5 6
2 3
2. The left sensor is out from talbes edge : the robot moves backward and
spins right then moves forward again.
TB6612
100
TB6612
10 0
T B 66 1 2
100
3. The right sensor is out from talbes edge : the robot moves backward and
spins left then moves forward again.
T B6612
1 0 0
TB6612
1 0 0
T B 6 6 1 2
1 0 0
POP-BOT XT : The Arduino Compatible Mobile Robot kit 169
Activity 12 : POP-BOT XT line detection
From the activity 9, we get the decision value for detection black and white area.
It is 500. Therefore, the reading sensor value which is lower 500 will be decided to black
color.
This activity demonstrates about black line detection of the POP-BOT XT that using
the result from the activity 9. The robot will move forward continuous until it detects the
black line. It will then stop immediately.
(A12.1) Use the robot platform from the previous activity.
(A12.2) Open the Arduino1.0 IDE to create the sketch following the Lisitng A12-1.
(A12.3) Compile and upload to the POP-BOT XT. Turn off power and remove the USB cable.
(A12.4) Stick the black tape 30cm. length on the white floor.
(A12.5) Place the robot on the floor far from the black line about 6cm. Turn on and press
the OK switch to start.
POP-BOT XT moves forward and stop when any ZX-03 sensor detects the black line.
(A12.6) From testing with the sketch file A12-1, usage of only the ao(); statement is not
enough to stop the movement immediately. We can impove this operation by moving
backward with very short time before stop. The example sketch is shown in Listing A12 -2
(A12.7) Upload the Listing A12-2 to POP-BOT XT and test again. See the different operation.
POP-BOT XT moves and stop when detect the black line similar the previous
operation. The different is stopping better than the previous operation than Listing A12-1.
170 POP-BOT XT : The Arduino Compatible Mobile Robot kit
#include <popxt.h> // Include the main library
int L,R;
void setup()
{
setTextSize(2); // Set text size 2x
glcd(1,1,"Press OK"); // Show the start message
sw_ok_press(); // Wait for the OK switch pressing
glcdClear();
glcd(1,1,"Moving..."); // Show the operation message
fd(60); // Moce forward
while(analog(0)>500); // Detect black line at A0 sensor
ao(); // Stop moving
}
void loop()
{}
Listing A12-1 : BlackLineDetect.ino ; sketch for the black line
d e t e c t i o n a c t i v i t y o f t h e POP-B OT XT
#include <popxt.h> // Include the main library
int L,R;
void setup()
{
setTextSize(2); // Set text size 2x
glcd(1,1,"Press OK"); // Show the start message
sw_ok_press(); // Wait for the OK switch pressing
glcdClear();
glcd(1,1,"Moving..."); // Show the operation message
fd(60); // Moce forward
while(analog(0)>500); // Detect black line at A0 sensor
bk(100); // Backward short time
sleep(100);
ao(); // Stop moving
}
void loop()
{}
Listing A12-2 : BlackLineDetect02.ino ; sketch file for the black line
detection activity of the POP-BOT XT. This code is improved the
robot stopping after detect the line.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 171
Activity 13 : POP-BOT XT moves along the black
line with 2 sensors
Heart of line tracking robot is control the robot to move over the line by sensors
position bestride the line. The robot moving along the line can be in 4 different scenarios.
(1) Both sensors read values that are white : The robot will move forward. Thus,
this program is written so that the robot moves forward normally.
(2) The left sensor detects the black line : This occurs when the robot is slightly
turned to the right. Thus, the program is written for the robot to move back left to resume
its normal path.

TB6612
1
00
172 POP-BOT XT : The Arduino Compatible Mobile Robot kit
(3) The right sensor detects the black line : This occurs when the robot is
slightly turned to the left. Thus, the program is written for the robot to move back to the
right to resume its normal path.

TB6612
1
0
0
(4) Both sensor detect the black line : the program is written for the robot to
make decision to move forward, tunr left, turn right , backward or stop.

POP-BOT XT : The Arduino Compatible Mobile Robot kit 173
(A13.1) Change the ZX-03 sensor positon back to bottom of the robot chasis.
(A13.2) Open the Arduino1.0 IDE to create the sketch following the Lisitng A13-1.
(A13.3) Compile and upload to the POP-BOT XT. Turn off power and remove the USB cable.
(A13.4) Make the simple black line field following the illustration below. The white surface
area is 90 x 60 cm. and black line width is 1 inches (2.5 cm.)
(A13.5) Place the POP-BOT XT on the black line field. Turn on the robot. Observe the
robot movement.
POP-BOT XT will move along the black line. It is possible that the robot moves out of
the line. You can improve the precision by editing the program with adjusting the sensor
reference value and adjust to the position of both infrared reflector sensors.
When the robot moves over the crossing line, it drives a beep sound at once.
(A13.6) Try to increase the movement speed to find the maximum speed that the robot
still move along the line completely and not move out from the line.
Troubleshooting about line traking robot
There are some suggestion about checking and find out why the robot does not
move along the line or move not complete.
1. Check the connection of ZX-03 sensors. Follow this activity, the left ZX-03 sensor
connect with port A0/18 and right sensor is connected with port A1/19.
2. Check the motor connection. possible to swop connection or connection is not
complete ? Refer this activity, the left motor is Motor A or Motor 1 and the right motor is
Motor B or Motor 2.
3. Installation the sensor too far from the floor or not ? The suitable distance is 5 to
10mm.
4. Test the reference value from the activity 9 still working or not ?
174 POP-BOT XT : The Arduino Compatible Mobile Robot kit
#include <popxt.h> // Include the main library
int L,R;
void setup()
{
setTextSize(2); // Set text size 2x
glcd(1,1,"Press OK"); // Show the start message
sw_ok_press(); // Wait for the OK switch pressing
glcd(1,1,"Moving..."); // Show the operation message
}
void loop()
{
L=analog(0); // Get the Left line sensor data
R=analog(1); // Get the Rightt line sensor data
if (L<500&&R<500) // Both sensors detect the black line.
// It means the crossing line
{
fd(60); // Move forward over the corssing line
sound(2000,200); // Beep a sound
}
else if(L>500&&R>500) // Both sensors detect the white area.
// It means robot move bestride the line
{
fd(60); // Move forward with 60% power
}
else if(L<500) // The left line sensor detects the black line
// The robot will move out the line in right
{
sl(60); // Spin left a little bit to adjust the robot
// over the line
sleep(20);
}
else if(R<500) // The right line sensor detects the black line
// The robot will move out the line in left
{
sr(60); // Spin right a little bit to adjust the robot
// over the line
sleep(20);
}
}
Listing A13-1 : SimpleLineTracking.ino ; sketch file for the Simple
line tracking activity of the POP-BOT XT by using 2 line tracking
sensors
POP-BOT XT : The Arduino Compatible Mobile Robot kit 175
Activity 14 : Simple Maze Solving
This activity is example of the Maze Solving competition. The robot will move along
the line and turn to change its ditrection when detect the crossing line. The robotmust
move in this manner until it detects all the crossing lines of the competition
Make the field
Stick the black tape 2.5cm. width on the white surface 90 x 60cm. size. or bigger
following the illustration below.
R90() function - the important function for this activity
To solve this activity, the important factor is the precision turning 90 degrees. The
R90() function is created. It turns right 90 degrees function when detect the crossing line
For a precision turn right when detecting the crossing line, robot must move forward
for a short time and then turn right until the sensors detects the cross line. After that move
forward to along the line continuous. The figure A14-1 shows this function operation.
176 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Figure A14-1 : Shows the robot operation with R90() function to
improve the movement in Maze Solving activity.
Procedure
(A14.1) Open the Arduino1.0 IDE to create the sketch following the Lisitng A14-1.
(A14.2) Compile and upload to the POP-BOT XT. Turn off power and remove the USB cable.
(A14.3) Place the POP-BOT XT over the line. Tunr on power and press OK switch to start.
POP-BOT XT moves along the line and turn right after detects the crossing line.
Every cross line detection, the robot drives a beep.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 177
#include <popxt.h> // Include the main library
int L,R;
/* 90-Degree Turn right routine */
void R90()
{
fd(60); // Move forward pass the crossing line
sound(1500,100); // Drive the sound signal
while(analog(1)>500) // Check the Right line sensor to detect the white
area
{
sr(60); // Spin right
}
while(analog(1)<500) // Spin right until detect the black line
{
sr(60); // Spin right again to pass the black line
}
}
void setup()
{
setTextSize(2); // Set text size 2x
glcd(1,1,"Press OK"); // Show the start message
sw_ok_press(); // Wait for the OK switch pressing
glcd(1,1,"Moving..."); // Show the operation message
}
void loop()
{
L=analog(0); // Get the Left line sensor data
R=analog(1); // Get the Rightt line sensor data
if (L<500&&R<500) // Both sensors detect the black line.
// It means the crossing line
{
R90(); // Call 90-Degree Turn right routine
}
else if(L>500&&R>500) // Both sensors detect the white area.
// It means robot move bestride the line
{
fd(60); // Move forward with 60% power
}
else if(L<500) // The left line sensor detects the black line
// The robot will move out the line in right
{
sl(60); // Spin left a little bit to adjust the robot over
// the line
sleep(20);
}
else if(R<500) // The right line sensor detects the black line
// The robot will move out the line in left
{
sr(60); // Spin right a little bit to adjust the robot over
// the line
sleep(20);
}
}
Listing A14-1 : SimpleMaze.ino; sketch file for simple maze solving
activity of the POP-BOT XT
178 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Activity 15 : POP-BOT XT with complex line
tracking
The robot needs to detect multiple cross lines with with increasing complexity, such
as turn left at the first intersection, turn right at the second intersection, move forwards at
the third intersection and turn right at the forth intersection etc. Users must create some
variable to count the number of intersections that robot detected.
Procedure
(A15.1) Make the demonstration field by using the 2.5mm. width black tape. Stick the
tape on the white surface 90 x 120cm size (or bigger) following the illustration below.

POP-BOT XT : The Arduino Compatible Mobile Robot kit 179
(A15.2) Open the Arduino1.0 IDE to create the sketch following the Lisitng A15-1.
(A15.3) Compile and upload to the POP-BOT XT. Turn off power and remove the USB cable.
(A15.4) Place the POP-BOT XT over the line. Turn on power and press OK switch to start.
POP-BOT XT moves following the line, turn left when detects the 1st, 2nd, 4th, 5th,
6th, 7th and 8th intersection and turn right at the 3rd intersection. Then, robot drive a
beep at every intersection detected.
180 POP-BOT XT : The Arduino Compatible Mobile Robot kit
#include <popxt.h> // Include the main library
int L,R,x=0;
/* 90-Degree Turn right routine */
void R90()
{
fd(60); // Move forward pass the crossing line
sound(1500,100); // Drive the sound signal
while(analog(1)>500) // Check the Right line sensor to detect the white
area
{
sr(60); // Spin right
}
while(analog(1)<500) // Spin right until detect the black line
{
sr(60); // Spin right again to pass the black line
}
}
/* 90-Degree Turn left routine */
void L90()
{
fd(60); // Move forward pass the crossing line
sound(1500,100); // Drive the sound signal
while(analog(1)>500) // Check the Right line sensor to detect the white
area
{
sl(60); // Spin right
}
while(analog(1)<500) // Spin right until detect the black line
{
sl(60); // Spin right again to pass the black line
}
}
void setup()
{
setTextSize(2); // Set text size 2x
glcd(1,1,"Press OK"); // Show the start message
sw_ok_press(); // Wait for the OK switch pressing
glcd(1,1,"Moving..."); // Show the operation message
}
void loop()
{
L=analog(0); // Get the Left line sensor data
R=analog(1); // Get the Right line sensor data
if (L<500&&R<500) // Both sensors detect the black line. It means the
// crossing line
{
if(x==6) // The crossing line counting was complete
{
x=0; // Restart counting
POP-BOT XT : The Arduino Compatible Mobile Robot kit 181
Liusting A15-1 : MultipleCrossingTrack.ino ; sketch file for muitiple
crossing line tracking activity of the POP-BOT XT
}
x++; // Increase the crossing line counting
if (x==3) // Check the 3rd crossing line
{
R90(); // Turn right with 90-degree after detect the 3rd
// crossing line
}
else
{
L90(); // If not, turn left with 90-degree
}
}
else if(L>500&&R>500) // Both sensors detect the white area. It means
// robot move bestride the line
{
fd(60); // Move forward with 60% power
}
else if(L<500) // The left line sensor detects the black line
// The robot will move out the line in right
{
sl(60); // Spin left a little bit to adjust the robot over
// the line
sleep(20);
}
else if(R<500) // The right line sensor detects the black line
// The robot will move out the line in left
{
sr(60); // Spin right a little bit to adjust the robot over
// the line
sleep(20);
}
}
182 POP-BOT XT : The Arduino Compatible Mobile Robot kit
POP-BOT XT : The Arduino Compatible Mobile Robot kit 183
From chapter 10, we have many examples about interfacing the Infrared reflector
sensors. They are one kind of analog sensor. In this chapter, we will concentrate in interfac-
ing with another analog sensors. It is Infrared distance sensor or Infrared ranger; GP2D120.
We will explore on some of example about using this sensor and applications.
One of the special sensors in robotics is the Infrared Distance sensor. Some people
call it the IR Ranger. With the GP2D120 module, it gives POP-BOT XT the ability for distance
measurement and obstacle detection using an infrared light. Your POP-BOT XT can avoid
obstacles without having to make any physical contact.
11.1 GP2D120 features
Uses Infrared light reflection to measure range
Can measure a range from 4 to 30 cm.
4. 5 to 5 V power supply and 33mA electric current
The output voltage range is 0.4 to 2.4V when supplied by +5V
Chapter 11
Touchless object avoiding
Infrared LED transmitter Infrared Receiver
GND Vout Vcc
GP2D120
4 8 12 16 20 24 28 32 0
0
0.4
0.8
1.2
1.6
2.0
2.4
2.8
Output voltage (V)
Distance (cm)
Figure 11-1 : GP2D120 pin assignment, operation and characteristic
curve
1st measure 2nd measure
Not stable 1st output 2nd output n output
n measure
38.39.6 ms
5 ms
Measurement
Vout
Supply
* Use Kodak R-27 gray-white
paper. The white side has a
90% reflection rate, made
from a material that reflects
light for range measurement.
184 POP-BOT XT : The Arduino Compatible Mobile Robot kit
GP2D120 Infrared Ranger module has 3 terminals : Supply input (Vcc), Ground
(GND) and Voltage output (Vout). To read the voltage values from the GP2D120, you
must wait until after the acknowledgement period which is around 32 to 52.9 ms.
The output voltage of GP2D120 at a range of 30 cm. and +5V power supply is
between 0.25 to 0.55V, with the mean being 0.4V. At the range of 4 cm., the output
voltage will change at 2.25V 0.3V.
11.2 Reading GP2D120 with A/D converter
The GP2D120s output voltage will change according to the detection distance.
For example, Vout 0.5V is equal 26cm. distance and Vout 2V is equal 6cm. distance. The
table 11-1 shows the summary of GP2D120s Vout and Distance relation.
For interfacing with A/D converter module within microcontroller, the result is raw data
from the A/D conversion. The user will need to use the software to convert the raw data to the
exact distance. You can calculate the approximate distance from the formula below.
1
5 V
2914
R

Thus, R as Distance in Centimetre unit


V as Digital data from A/D conversion
For example, see the Table 11-1. The raw data from conversion is 307. It is equal
8cm. distance.
11.3 GP2D120 Infrared ranger library
For supporting the GP2D120 sensor, the main library popxt.h also provides the special
library. It is the gp2d120_lib.h.
To using this library, must include at the beginning of the program with this statement :
#include <gp2d120_lib.h>
There is only one function in this library. It is getdist(). This is summary of this
function :
Syntax
unsigned int getdist(char adc_ch)
Parameter
adc_ch - Analog port that connect with GP2D120 (A0 to A7)
Return value
Distance in centimetre unit
Example 11-1
dist = getdist(3); // Read distance from GP1D120 at A3 port
For hardware interfacing, connect this sensor to any analog port of the POP-BOT
XT. which is A0 to A7.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 185
GP2D120
output voltage (V)
10-bit
A/D converter result
Distance
(cm.)
0.4 82 32
0.5 102 26
0.6 123 22
0.7 143 19
0.8 164 16
0.9 184 14
1.0 205 13
1.1 225 12
1.2 246 11
1.3 266 10
1.4 287 9
1.5 307 8
1.6 328 8
1.7 348 7
1.8 369 7
1.9 389 6
2.0 410 6
2.1 430 6
2.2 451 5
2.3 471 5
2.4 492 5
2.5 512 5
2.6 532 4
Table 11-1 : The relation of GP2D120 output voltage, A/D converter
result and Measured distance.
11.4 Warning for the signal cable of the GP2D120
The GP2D120 module has a different pin arrangement then that of the POP-BOT XT
controller board, even though it looks similar. Therefore, a special signal cable has already
been made and connected to the GP2D120 module. All the user need to is to connect
the other end of the cable to any of the analog ports of the POP-BOT XT controller board.
DO NOT remove the cable from the module, and do not replace it with signal cables from
other sensor modules.
186 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Activity 16 : POP-BOT XT with GP2D120
Activity 16-1 GP2D120 installation with POP-BOT XT
(A16.1.1) Fix the 2 x 3 holes right-angle metal shaft with GP2D120 module at both installation
holes by using 3 x 10mm. screws and 3mm. nuts following the picture below.
2 x 3 hole right-angle
metal shaft
GP2D120 module
3 x 10mm. screw
3mm. nut
hole of metal shaft

(A16.1.2) Attach the GP2D120 in front of the robot chasis by using 3 x 10mm. screws and
3mm. nuts following the pictures below.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 187
(A16.1.3) Connect GP2D120 cable to port 20/A2 of the POP-BOT XT controller board.
Now the POP-BOT XT is ready for touchless object avoidance.
Activity 16-2 Measure distance with GP2D120
GP2D120 module gives the output voltage relate the distannce. The microcontroller
use the analog reading function to get the distance raw data from GP2D120. The POP-
BOT XT also have the special library to read the value. If reading value is high, means the
object is near the GP2D120. In the other hands, low value result means that the object is
far from GP1D120.
20/A2
Listing A16-1 : GP2D120_Reading.ino ; sketch file of GP2D120
distance measurement of the POP-BOT XT
#include <popxt.h> // Include the main library
#include <gp2d120_lib.h> // Include GP2D120 sensor library
int raw,dist;
void setup()
{
setTextSize(2); // Set text size 2x
glcdMode(1); // Set display mode 1
glcd(1,1,"Press OK"); // Show the start message
sw_ok_press(); // Wait for the OK switch pressing
glcdClear(); // Clear screen
}
void loop()
{
raw=analog(2); // Read the raw sensor data from Analog input 2
dist=getdist(2); // Get the real distance value
glcd(2,1,"RAW = %d ",raw); // Show the raw data on screen
glcd(3,1,"Dist = %d cm",dist); // Show the distance value on screen
sleep(100);
}
188 POP-BOT XT : The Arduino Compatible Mobile Robot kit
(A16.2.1) Open the Arduino1.0 IDE to create the sketch following the Lisitng A15-1.
(A16.2.2) Compile and upload to the POP-BOT XT. Turn off power and remove the USB
cable.
(A16.2.3) Place the POP-BOT XT on the table. Put an object in front of the GP2D120. Turn
on the POP-BOT XT. Try to move an object in and out from GP2D120 sensor. Observe the
result at the color display of the robot.
220 F
100 F
T
B
6
6
1
2
A
TM
e
g
a
32U
4
100
Adjust the distance
in range 4 to 32cm.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 189
Activity 17 : Touchless object avoiding robot
With the GP2D120 module, it adds the distance measuring and obstacle detection
using infrared light feature to your robot. Your POP-BOT XT can avoid obstacles without
having to make any physical contact. The detected distance of this activity is 10cm.
(A17.1) Open the Arduino IDE and create the sketch code from Listing A17-1.
(A17.2) Upload the sketch to the robot and disconnect the USB cable.
(A17.3) Place the POP-BOT XT on thefloor. Try to place any object at the front of the robot
and see its operation.
The robot will check the distance of the object in 10cm. range. If not any obstacle,
robot will move forward continue. If found the object, it will move backward, spin left and
move forward again.
The display of the robot will change the color background everytime an object
detecion is detected. The color changing is random from 8 colors including red, green,
blue, yellow, black, white, skyblue and magenta.
190 POP-BOT XT : The Arduino Compatible Mobile Robot kit
#include <popxt.h> // Include the main library
#include <gp2d120_lib.h> // Include GP2D120 sensor library
void setup()
{
setTextSize(2); // Set text size 2x
glcd(1,1,"Press OK"); // Show the start message
glcd(2,1,"to Start");
sw_ok_press(); // Wait for OK switch pressed
glcdClear();
glcd(1,1,"Let's go!"); // Show operation message
}
void loop()
{
fd(70);
if(analog(20)>250) // Detect object in 10cm. or shorter
{
bk(80); // Move backward with 80% power
glcdFillScreen(color[random(8)]); // Change background colr with random
sleep(300);
sl(70); // Spin left to change direction
sleep(600);
}
}
Listing A17-1 : TouchlessObjectAvoider.ino ; sketch file for Touchless
object avoider activity of the POP-BOT XT
POP-BOT XT : The Arduino Compatible Mobile Robot kit 191
POP-BOT XT features more of the RC servo motor output. POP-BOT XT can drive 3 of
small RC servo motors simultaneously. POP-BOT XT controller board supplies the servo motor
supply voltage to Servo output headers already. There is no need for additional batteries
for the servo motor.
12.1 Servo motor introduction
Figure 12-1 shows a drawing of a Standard Servo. The plug is used to connect the
servo motor to a power source (Vdd and Vss) and a signal source (a microcontroller I/O
pin). The cable conducts Vdd, Vss and the signal line from the plug into the servo motor.
The horn is the part of the servo that looks like a four-pointed star. When the servo is running,
the horn is the moving part that the microcontroller controls. The case contains the servos
control circuits, a DC motor, and gears. These parts work together to take high/low signals
from the microcontroller and convert them into positions held by the servo horn.
Figure 12-2 shows the servo motor cable assignment. It has 3 wires with difference
color; Black for GND or Vss or Negative pole, Red for Vdd or Servo motor supply voltage
and White (sometime is yellow or brown) wire for signal.
The servo motor plug standard has 2 types; S-type and J-type are shown in the
figure 12-3.
Chapter 12
POP-BOT XT with servo motor
Figure 12-1 : Standard servo motor physical
STANDARD
SERVO MOTOR
Case
Horn
Cable Plug
192 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Controlling of the servo motors is used to pulse controlling. The control pulse is positive
going pulse with length of 1 to 2 ms which is repeated about 50 to 60 times a second. You
can check the details in the figure 12-4. Start by generating a pulse a period 20 millisecond
and adjust the positive pulse width 1 millsecond. The servo motor will move the horn to last
left position. The pulse width 1.5 millisecond move the servo horn to center and pulse
width 2 millsecond causes the servo horn to last right position.
The important specification of servo motor are 2 points, Speed or Servo turn rate or
transit time and Torque. The servo turn rate, or transit time, is used for determining servo
rotational velocity. This is the amount of time it takes for the servo to move a set amount,
usually 60 degrees. For example, suppose you have a servo with a transit time of 0.17sec/
60 degrees at no load. This means it would take nearly half a second to rotate an entire
180 degrees. More if the servo were under a load. This information is very important if high
servo response speed is a requirement of your robot application. It is also useful for
determining the maximum forward velocity of your robot if your servo is modified for full
rotation. Remember, the worst case turning time is when the servo is at the minimum
rotation angle and is then commanded to go to maximum rotation angle, all while under
load. This can take several seconds on a very high torque servo.
Torque is the tendency of a force to rotate an object about an axis. The torque
unit is ounce-inches (oz-in) or kilogram-centimetre (kg-cm). It tell you know about this servo
motor can drive a load weight in 1 oz. to move 1 inche or 1kg. weight to moved 1
centimeter (1oz. = 0.028kg. or 1kg. = 25.274oz.). Normally the RC servo motor has 3.40 kg-
cm/47oz-in torque.
(b) J-type plug (a) S-type plug
Figure 12-2 : Standard Servo motor
cable assignment
Figure 12-3 : Standard Servo motor
plug type
POP-BOT XT : The Arduino Compatible Mobile Robot kit 193
1 to 2 millsecond pulse
20ms period
(a) Servo motor control pulse
1 millisecond pulse
(b) 1 millisecond pulse causes
servo horn moves anti-clockwise
direction to last right position (0
o
)
1.5 millisecond pulse
(c) 1.5 millisecond pulse causes
servo horn moves to center position
2 millisecond pulse
(d) 2 millisecond pulse causes
servo horn moves clockwise
direction to last left position (180
o
)
STANDARD
SERVO MOTOR
STANDARD
SERVO MOTOR
STANDARD
SERVO MOTOR
Figure 12-4 : Timing diagram of pulse control servo motor
194 POP-BOT XT : The Arduino Compatible Mobile Robot kit
12.2 servo() function
The heart of controlling the servo motor of POP-BOT XT controller board is servo()
function in popxt.h library. We will use a general purpose port to servo output; 30 (SV1), 12
(SV2) and 13 (SV3).
This is summary of servo()function.
Syntax
void servo(unsigned char _ch, int _pos)
Parameter
_ch - Servo motor output (1 to 3)
_pos - Set the sevo motor shaft poistion (0 to 180 and -1)
If set to -1, disable selected servo motor output
POP-BOT XT : The Arduino Compatible Mobile Robot kit 195
Activity 18 : Simple servo motor control
This activity demonstrates the simple example about control the standard RC servo
motor with a KNOB button on the POP-BOT XT controller board.
(A18.1) Open the Arduino IDE and create the sketch code from Listing A18-1.
(A18.2) Upload the sketch to the robot. Turn off power.
(A18.3) Connect the standard RC servo motor to SERVO PORT 1 (SV1). Make sure the
connection is correct. The black wire is ground (GND), red wire is +Vm and white or yellow
wire is signal (S).
(A18.4)Turn on power, Press the OK switch to start. Adjust the KNOB button on the POP-BOT
XT controller board. Observe the servo motor operation when adjust the KNOB.
Adjusting the KNOB causes the color display to show the KNOB value and servo
motor is driven following the KNOB adjustment.
196 POP-BOT XT : The Arduino Compatible Mobile Robot kit
#include <popxt.h> // Include the main library
int x;
void setup()
{
glcdMode(1); // Set display mode 1
setTextSize(2); // Set text size 2x
glcd(1,1,"Press OK"); // Show the start message
sw_ok_press(); // Wait for OK switch pressed
glcdClear();
}
void loop()
{
x=map(knob(),80,1023,0,180); // Read KNOB data and adjust to 0 to 180
// range for storing in variable
glcd(2,1,"Servo = %d ",x); // Display servo motor position
servo(1,x); // Drive a servo motor1 to target position
}
Listing A18-1 : ServoKnob.ino ; sketch file of simple servo motor control
of the POP-BOT XT
POP-BOT XT : The Arduino Compatible Mobile Robot kit 197
Activity 19 : ObjectHitter-BOT
Activity 19-1 Installation servo motor with POP-BOT XT
(A19.1.1) Attach 2 of the 2 x 3 hole right-angle metal shaft together by using 3 x 6mm.
screws and 3mm. nuts following the picture below.
hole of metal shaft
2 x 3 hole right-angle metal shaft #1
3 x 6mm. screw
3mm. nut
2 x 3 hole right-angle metal shaft
#2
(A19.1.2) Unscrew the screw at servo motor shaft and remove the horn. Attach a right-
angle metal shaft with servo motor body by using 3 x 10mm. screws and 3mm. nuts following
the picture below.

metal shaft's hole
The 2 x 3 hole right-angle
metal shaft from step
(A19.1.1)
3mm. nut
servo motor
installation hole of servo motor
3 x 10mm.
screw
3 x 10mm.
screw

198 POP-BOT XT : The Arduino Compatible Mobile Robot kit
(A19.1.3) Attach the servo motor from step (A19.1.2) at the front of the robot chasis (see
the circle) by using 2 sets of 3 x 10mm. screw and 3mm. nut
(A19.1.4) Make an arm from 12-hole strip joiner. Attach it with servo motor shaft. Tighten
with a servo motor screw that release from stpe (A19.1.2). Connect the servo motor to SV1
output. The ObjectHitter-BOT is ready for doing the mission.
POP-BOT XT : The Arduino Compatible Mobile Robot kit 199
#include <popxt.h> // Include the main library
void setup()
{
setTextSize(2); // Set text size 2x
glcd(1,1,"Press OK"); // Show the start message
glcd(2,1,"to Start");
sw_ok_press(); // Wait for OK switch
// pressed
glcdClear();
glcd(1,1,"Let's go!"); // Show operation message
servo(1,0); // Set servo motor shaft
// to zero postion
sleep(1000);
fd(60); // Robot moves forward
}
void loop()
{
if(analog(0)<500) // Detect the black line
{
ao(); // Stop moving
servo(1,180); // Drive servo to hit an object
sleep(1000); // Delay 1 second
servo(1,0); // Set servo motor shaft to origin
while(1); // Stop operation
}
}
Activity 19-2 ObjectHitter-BOT basic operation
The mission of this activity is move to find the line and hit an abject at the end of
each line.
(A19.2.1) Open the Arduino IDE and create the sketch code from Listing A19-1.
(A19.2.2) Upload the sketch to the robot. Turn off power.
(A19.2.3) Stick the black line on the white surface. Place the robot far from the black line
30cm.
(A19.2.4) Turn on power. Press the OK switch to start.
POP-BOT XT will move forward to the black line. After detect lhe blakc line, robot
will stop and drive a servo motor to move from 0 degree to 180 degrees and back to 0
degree position again. The arm that connect with servo shaft will move from right to left
and back to left again. The arm will hit an object at the black line.
Listing A19-1 : ServoHitting.ino ; sketch file for controlling the servo
motor to hit an object
200 POP-BOT XT : The Arduino Compatible Mobile Robot kit
Activity 19-3 ObjectHitter-BOT mission
The mission field for this activity is shown below.
S
T
A
R
T
S
T
O
P
From start point, the robot must move following the line and do something when
the robot detects the intersection as follows :
1. Turn left
2. Turn right
3. Move forward
4. Hit the object and move back to the same path
Mission is move to the end of each line to hit the object. Moving path of this mission
is as follows :
1. Detect 1st intersection, robot turn left
2. Detect 2nd intersection, robot hit an object, turn back and move forward.
3. Detect 3rd intersection, robot move forward to cross the intersection.
4. Detect 4th intersection, robot hit an object, turn back and move forward.
5. Detect 5th intersection, robot turn right
POP-BOT XT : The Arduino Compatible Mobile Robot kit 201
(A19.3.1) Open the Arduino IDE and create the sketch code from Listing A19-2.
(A19.3.2) Upload the sketch to the robot. Turn off power.
(A19.3.3) Make the mission field by using the 2.5cm. width black tape and the white board.
(A19.3.4) Place the robot on the start point
(A19.3.5) Turn on power. Press the OK switch to start.
The POP-BOT XT moves and do mission following the illustration below :
202 POP-BOT XT : The Arduino Compatible Mobile Robot kit
#include <popxt.h> // Include the main library
int L,R,x=0,y=0;
/* Move forward funtion */
void FF()
{
fd(60);
sleep(300);
}
/* 90-Degree Turn right function */
void R90()
{
fd(60); // Move forward pass the crossing line
sound(1500,100); // Drive the sound signal
while(analog(1)>500) // Check the Right line sensor to detect the white
area
{
sr(60); // Spin right
}
while(analog(1)<500) // Spin right until detect the black line
{
sr(60); // Spin right again to pass the black line
}
}
/* 90-Degree Turn left function */
void L90()
{
fd(60); // Move forward pass the crossing line
sound(1500,100); // Drive the sound signal
while(analog(1)>500) // Check the Right line sensor to detect the white
area
{
sl(60); // Spin right
}
while(analog(1)<500) // Spin right until detect the black line
{
sl(60); // Spin right again to pass the black line
}
}
/* Hit object function */
void hit()
{
bk(100); // Move backward short time
sleep(50);
ao(); // Stop motor
servo(1,180); // Drive servo motor to 180-degree position
sleep(1000);
servo(1,0); // Drive servo motor back to 0-degree position
bk(60); // Move backward
sleep(200);
R90(); // 90-degree turn right
}
void setup()
{
setTextSize(2); // Set text size 2x
glcd(1,1,"Press OK"); // Show the start message
glcd(2,1,"to Start");
sw_ok_press(); // Wait for OK switch pressed
glcdClear();
glcd(1,1,"Let's go!"); // Show operation message
}
POP-BOT XT : The Arduino Compatible Mobile Robot kit 203
void loop()
{
L=analog(0); // Read the Left line sensor value
R=analog(1); // Read the Right line sensor value
if (L<500&&R<500) // Detect the crossing line
{
if(x==5) // The crossing line counting was complete
{
x=0; // Restart counting
y++; // Increase branch counter
if (y==4) // The branch counting was complete
{
ao(); // Stop the robot
servo (1,-1); // Stop servo motor
while(1);
}
}
x++; // Increase the line crossing counter
if (x==1) // 1st crossing
{
L90(); // Turn left
}
else if(x==2||x==4) // 2nd and 4th crossing
{
hit(); // Hit the object
}
else if (x==3) // 3rd crossing
{
FF(); // Move forward
}
else if (x==5) // 5th crossing
{
R90(); // 90-degree turn right
}
}
else if(L>500&&R>500) // Both sensors detect the white area. It means
// robot move bestride the line
{
fd(60); // Move forward with 60% power
}
else if(L<500) // The left line sensor detects the black line
// The robot will move out the line in right
{
sl(60); // Spin left a little bit to adjust the robot
// over the line
sleep(20);
}
else if(R<500) // The right line sensor detects the black line
// The robot will move out the line in left
{
sr(60); // Spin right a little bit to adjust the robot
// over the line
sleep(20);
}
}
Listing A19-2 : ObjectHitterBOT.ino ; sketch file for ObjectHitter-BOT
mission of the POP-BOT XT
204 POP-BOT XT : The Arduino Compatible Mobile Robot kit
About this mission operation is described as
follows :
Firstly, POP-BOT XT moves along the line. After
meet the 1st intersection, it turns left and moves forward
until it meets the 2nd intersection. It drives a servo motor
to hit an object at the end of line. After that, it turns
back and moves forward to the main path.
Robot will meets the 3rd intersection at the main
path. It moves forward over this intersection and moves
to meets the 4th intersection. After that it drives a servo
motor again to hit the object at the end of line. Then it
turns back and moves forward back to the main path
again.
It meets the 5th at the main path then turns right.
The movement will loop to detect the 1st intersection.
POP-BOT XT will move, detect the intersection and drive
the servo motor to hit object at the end of each line.
After it hits all object already, it moves to the Stop
point. The mission is completed.

Você também pode gostar