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
2POP-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. I2C 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
Contents 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
4POP-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 X T Lite kit. It includes the POP-XT controller 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)
6POP-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
Figure 1-1 The layout of POP-XT controller board 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) I2C 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)
8POP-BOT XT : The Arduino Compatible Mobile Robot kit
PF1 A4 22
PF5 A2 20
+Vm
PF7 A0 18
SWITCH ON
+5V K3 BATT 4.8-7.2V 3
PF0 A5 23
PF4 A3 21
+
PF6 A1 19
L1 10 H 1
C6 100F 10V
IC3 2 KIA278R05
C10 470 F 16V
+5V
+5V D1 MBRS340 1
5,6,7,8 C11 470 F 16V Q3 FDS6680A
3
4
C5 0.1F
4
2
C13 220 F 10V
IC4 NCP1450 - 5.0
5
C12 0.1F
4
1,2,3
G
xx
Arduino Leonardo pin name
Pxx
Atmel pin name
C4
K1 mini B-USB USB port
+5V 0.1F
+USB
44 43 42 41 40 39 38 37 36 35 34 1 33 32 2 31 3 4
IC1 ATMega32U4 (TQFP44)
UGnd 5 UCap
VBus PB0
C1 1F
6 7
8 17 PB1 9 15 PB2 10 16 PB3 11 14
30 29 28 27 26
PE2 PC7 PC6 PB6 PB5 PB4 PD7 PD6 PD4 AVcc GND
GND
31
8
+5V
+5V Q1 KRC102
R5 4k7
R6 4k7
20 19 18
+Vm PWMA AIN2 AIN1 Vcc STB GND BIN1 BIN2 PWMB +Vm +Vm
+Vm
24 23 22 21 20 19 18 17 16 15 14 13
IC2 TB6612FNG 4 5
6 7
+Vm
8 9 10 11 12
A1 A1 PG PG A2 A2 B2 B2 PG PG B1 B1
1 2 3
C3 10F 16V
PC6 3
SCL PD0
0
RXD PD2
6
A7 PD7
ADIR
R8 1k
R7 1k
5
7
APWM 9
1
TXD PD3
4
SV3
GND +Vm 12
SV2
GND +Vm 30
SV1
PB6
-+ SDA PD1
BDIR
10 BPWM
-+
2
GND +Vm 13 PE6
PB5
A
B
DC. MOTOR OUTPUT
A6 PD4
+5V
+3.3V IC5 LM1117-3.3V
GLCD 128x160 pixel
C14 10F 16V
21-character 16-line
C16 10F 16V
C15 0.1F
R11 4.7k PB0 R13 4.7k
31
30 12 6
PE2
CR1 16MHz +5V
SP1 PIEZO Speaker
16
23 22 21
31
+Vm RST
11
R12 4.7k
PB1
R15 4.7k
R14 4.7k
+5V R11 1k
1 2 3 4 5 6 7 8 9 10 11 12 13 14
PB2
R17 4.7k
N/C GND CS Vcc Vcc CLK MISO D/C /RST GND LEDA LEDK GND N/C
15
0 1 4
A8
R3 4k7
17
7 GND REF
PB4
C9 0.1F
ISP SW2 RESET
+
14 3 2
8
+5V
17 15 16
13 5
C8 0.1 F
Q2 KRC102
C2 0.01 F
Port assignment is compatible with Arduino Leonardo
GND RST +
11 10 9
PB7 RST Vcc GND XTAL2 XTAL1 PD0 PD1 PD2 PD3 PD5
25 24 23 12 13 14 15 16 17 18 19 20 21 22
R4 4k7 LED1 BLUE
SPI Ext.
PE6 UVcc DD+
R1 R2 27 27
VUSB DD+ ID GND
AVcc GND AREF PF0 PF1 PF4 PF5 PF6 PF7 GND Vcc
+5V
C7 0.1F
8
R16 4.7k
+3.3V
C18 0.1F
PB4
R9 4.7
VR1 KNOB
SW5 OK
PE2
R11 1k
+3.3V
R18 4.7k +3.3V
R10 4.7k RST C17 0.1F
D1 1N4148
SW3 RESET
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.
LED1 R1 (Default = 510)
S
+
Figure 1-3 The ZX-LED completely schematic diagram
Q1 KRC102 (DTC114)
10POP-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 LED1
Indicator
+V
R2 10k R1 510
R3 220
DATA
Signal output S1 GND Switch
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. There’s 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 transistor’s base, causing it to conduct current. The more infrared incident on the transistor’s 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. Signal connector +V TCRT5000
OUT GND
10k
510
Infrared Reflector
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
GP2D120 Vout GND
Vcc
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
12POP-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 JST3AA8 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 computer’s 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.
14POP-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
16POP-BOT XT : The Arduino Compatible Mobile Robot kit
POP-BOT XT : The Arduino Compatible Mobile Robot kit 17
Chapter 2
Building the POP-BOT XT robot 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 Alcaline, Evolta and Rechargeable Ni-MH are
recommendded.
18POP-BOT XT : The Arduino Compatible Mobile Robot kit
2.1 Part list
Circle base x 1
POP-XT controller board x1
Circle wheel and tire x 2
Strip joiner 3, 5 and 12 holes (4 pieces each)
Box holder x 1
DC motor gearbox x 2
32mm. metal spacer x 4
Infared reflector x 2
Switch input board (Touch sensor) x 2
2mm. self-tapping screw x 2
Right angled metal shaft 2x2 x 2 Plastic joiners
Plastic spacer set
Screw and Nut set
POP-BOT XT : The Arduino Compatible Mobile Robot kit 19
2.2 Building procedure (1) Attach both the DC motor gearboxes with the Box holder by using 3 x 8mm. flat screws.
3x8mm. flat screws 3x8mm. flat screws
3x8mm. 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. 32mm. metal spacer
3x8mm. flat screws
3x8mm. flat screws 32mm. metal spacer
(3) Insert the wheel with tire to DC motor gearbox’s shaft and fix with 2mm. self-tapping screws.
2mm. self-tapping screw x 2
Circle wheel and tire x 2
20POP-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 wheel’s position is the center of the base. screw fixing position
screw fixing position
(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. 5-hole strip joiner
(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.
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.
3mm. nut Obtuse joiner Right angle joiner 3 x 10mm. screw
22POP-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.
Motor B cable (right side)
Motor A cable (left side)
(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.
left ZX-03 : A1/19
right ZX-03 : A0/18
left ZX-01 : A5/23 right ZX-01 : A4/22
Motor B - right wheel
Motor A - left wheel
24POP-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
Chapter 3
Arduino 1.0 installation 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.
26POP-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
30POP-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 Upload
button or select menu File >
32POP-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.
34POP-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 Ma na g er 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.
36POP-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.
38POP-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 a s a USB c o m p osite a nd a sk fo r the lo c a tion of the d rive r file to insta ll. C lic k o n 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
40POP-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 > Upload
button or select menu File
(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.
42POP-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.
44POP-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.
46POP-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.
48POP-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
50POP-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.
Menu Tools bar Tab
Text Editor
Message area
Figure 3-1 The Arduino1.0 environment
Serial Monitor Click to open the other window for transmitting and receiving the serial data between Aruino hardware and computer
52POP-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 displaying 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.
54POP-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 values, processing, displaying 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.
56POP-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();
compliance with void setup()
for (;;) loop(); return ; }
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 If…else 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 if…else statement, able to be followed by the if command. Therefore, syntax becomes if…else...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.
60POP-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 ď Źď&#x20AC; 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.
62POP-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 x i r
= = = =
y + 3; x - 7; j * 6; 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ď&#x20AC; ď Źď&#x20AC; 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 floatingpoint 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 x x x
= = = =
7 9 5 4
% % % %
5; 5; 5; 5;
// // // //
x x x x
now now now now
contains contains contains contains
2 4 0 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 ď Źď&#x20AC; 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)
66POP-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
0 1
1 0
1 1
—————————— 0 1 1 1
Operand1 Operand2 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 (don’t 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 doesn’t 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.
68POP-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; int j; void setup() { DDRD = DDRD | B11111100;
// counter variable
// 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
0 1
1 0
1 1
—————————— 0 1 1 0
Operand1 Operand2 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; delay(100); }
// Invert logic at pin 5
70POP-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
————— 1 0
Operand1 ~ 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 2’s 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 ď Źď&#x20AC; 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 23 // The result is y = 125
72ď&#x20AC; ď Źď&#x20AC; 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 ď Źď&#x20AC; 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 /*â&#x20AC;Ś* (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*/.
74POP-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 don’t 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 2’s 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ď&#x20AC; ď Źď&#x20AC; 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 ď Źď&#x20AC; 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 calculation with the float variable will be slower 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.
78POP-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 doesn’t 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 doesn’t 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’.
80POP-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 ď Źď&#x20AC; 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.
82POP-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 ď Źď&#x20AC; 83
POP-Note 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* 102) + (0 * 101) + (1 * 100) = 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 * 22) + (0 * 21) + (1 * 20) = 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 * 82) + (0 * 81) + (1 * 80) = 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 * 162) + (0 * 161) + (1 * 160) = 256 + 0 + 1 = 257
84POP-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. Don’t take these words to denominate variables. They are shown as follows : # Constants
# Literal Constants
# Datatypes
# Methods/Fucntions
HIGH LOW INPUT OUTPUT SERIAL DISPLAY PI HALF_PI TWO_PI LSBFIRST MSBFIRST CHANGE FALLING RISING false true null
GLCD_RED GLCD_GREEN
boolean byte char class default do double int long private protected public return short signed static switch throw try unsigned void
sw_ok sw_ok_press
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
analog knob glcd glcdChar glcdString glcdMode glcdGetMode glcdFlip glcdGetFlip colorRGB setTextColor setTextBackgroundColor setTextSize getTextColor getTextBackgroundColor getTextSize glcdFillScreen glcdClear glcdPixel glcdRect glcdFillRect glcdLine glcdCircle
86POP-BOT XT : The Arduino Compatible Mobile Robot kit
glcdFillCircle
# Other
glcdArc getdist
abs acos += + [] asin = atan atan2 & &= | |= boolean byte case ceil char char class , // ?: constrain cos {} — default delay delayMicroseconds / /** . else == exp false float
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
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
Chapter 5
POP-BOT XT program development by Arduino1.0 The POP-BOT XT robot’s program development can be summarize in the diagram shown in figure 5-1.
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
Create the sketch file Make the C/C++ code on Arduino IDE
Compile
Upload the code USB port
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.
Figure 5-1 Programming development diagram of POP-BOT XT robot kit by using Arduino IDE
88POP-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 Uploading 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> void setup() { glcd(1,0,"Hello World"); } void loop() {}
(2) Save to HelloWorld.ino
// Include POP-XT library
// Display message on the GLCD screen
90POP-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 F 0 2 2 F 0 0 1
0 0 1 AT Mega32U 4
TB6612
POP-BOT XT
POP-BOT XT : The Arduino Compatible Mobile Robot kit ď Źď&#x20AC; 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.
92POP-BOT XT : The Arduino Compatible Mobile Robot kit
POP-BOT XT : The Arduino Compatible Mobile Robot kit 93
Chapter 6
POP-BOT XT controller board hardware experiment In this chapter we will learn about some activities for the POP-BOT XT controller board. It’s 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.
94POP-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 F 0 2 2 F 0 0 1
0 0 1 AT Mega32U 4
TB6612
POP-BOT XT (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 ď Źď&#x20AC; 95
#include <popxt.h> void setup() { glcd(1,0,"Hello World"); } void loop() {}
// Include the main library
// Show messsage on display
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 (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.
100 F
Hello World
ATMega32U4
220 F
100 TB6612
96POP-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.
100 F
ATMega32U4
Row00 Row01 RRRow02 RRRRow03 RRRRRow04 RRRRRRow05 RRRRRRRow06 RRRRRRRRow07 RRRRRRRRRow08 RRRRRRRRRRow09 RRRRRRRRRRRow010 RRRRRRRRRRRRow011 RRRRRRRRRRRRRow012 RRRRRRRRRRRRRRow013 RRRRRRRRRRRRRRRow014 RRRRRRRRRRRRRRRRow015
100
220 F
TB6612
98POP-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 ď Źď&#x20AC; 99
(A1.3.2) Turn-on the robot. Connect USB cable between a robot and computer. (A1.3.3) Com p ile a nd up loa d the c od e o r ske tc h to PO P-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 3X font size
M = 2 ; orientate 180 degrees The dispaly is inverted from Mode 0 4X font size
M = 1 ; right orientate 90 degress 4X font size
M = 3 ; orientate 270 degrees 5X font size
100POP-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
102POP-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 ď Źď&#x20AC; 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.
104POP-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> void setup() {} void loop() { beep(); sleep(1000); }
// Include the main library
// Beep signal to speaker
Listing A2-1 : BeepTest.ino ; sketch for beep() function demonstration #include <popxt.h> void setup() {} void loop() { sound(500,500); sound(2500,500); }
// Include the main library
// Generate 500Hz signal 0.5 second interval // 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 ď Źď&#x20AC; 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.
106POP-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> void setup() { setTextSize(2); glcd(1,1,"Press OK"); sw_ok_press(); } void loop() { out(4,1); out(6,0); sleep(400); out(4,0); out(6,1); sleep(400); }
// Include the main library
// Set text size to 2x // Display start message // Check the OK switch pressing
// Turn on LED at pin 4 // Turn off LED at pin 6 // Turn off LED at pin 4 // Turn on LED at pin 6
Listing 4-1 : LEDtest.ino ; sketch file for testing out() function to controlling simple output devices
108POP-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
Chapter 7
POP-BOT XT library file 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
110POP-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);
Row00 RRValueR=R20 RRRow02 RRRRow03 RRRRRow04 RRRRRRow05 RRRRRRRow06 RRRRRRRRow07
// Display both charater and number same line // Start from column 2 of line 1
100 F
112POP-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() {}
100 F
ATMega32U4
Row00 RRValueR=R20 RRRow02 RRRRow03 RRRRRow04 RRRRRRow05 RRRRRRRow06 RRRRRRRRow07 RRRRRRRRRow08 RRRRRRRRRRow09 RRRRRRRRRRRow010 RRRRRRRRRRRRow011 RRRRRRRRRRRRRow012 RRRRRRRRRRRRRRow013 RRRRRRRRRRRRRRRow014 RRRRRRRRRRRRRRRRow015
100
220 F
TB6612
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
114POP-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
100 F
ATMega32U4
Hello World RRValueR=R20 RRRow02 RRRRow03 RRRRRow04 RRRRRRow05 RRRRRRRow06 RRRRRRR Row07 RRRRRRRRRow08 RRRRRRRRR Row09 RRRRRRRRRR Row010 RRRRRRRRRRR Row011 RRRRRRRRRRRR Row012 RRRRRRRRRRRRR Row013 RRRRRRRRRRRRRR Row014
220 F
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]
116POP-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); } void loop() { glcdClear(); glcdMode(0); glcd(0,0,”POP-BOTXT”); sw_ok_press(); glcdClear(); glcdMode(1); glcd(0,0,”POP-BOTXT”); sw_ok_press(); glcdClear(); glcdMode(2); glcd(0,0,”POP-BOTXT”); sw_ok_press(); glcdClear(); glcdMode(3); glcd(0,0,”POP-BOTXT”); sw_ok_press(); }
// 2X text sice
// // // // // // //
Clear screen Set orientation display mode 0 Show message Wait for OK pressing for changing the orientation diplay mode After OK switch is pressed; clear screen Change orienatation display to mode 1
// After OK switch is pressed; clear screen // Change orienatation display to mode 2
// After OK switch is pressed; clear screen // Change orienatation display to mode 3
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); setTextColor(GLCD_GREEN); glcd(0,0,"Size1"); setTextSize(2); glcd(1,0,"Size2"); setTextSize(3); glcd(2,0,"Size3"); setTextSize(4); glcd(3,0,"Size4"); } void loop() {}
// Set text size to 1x // Set text color to green // Show message // Set text size to 2x // Set text size to 3x // Set text size to 4x
118POP-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 ď Źď&#x20AC; 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() {}
120POP-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 ď Źď&#x20AC; 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() {}
122POP-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 ď Źď&#x20AC; 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() {}
124POP-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() {}
126POP-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(1000);
// Delay 20 milliseconds // 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 ď Źď&#x20AC; 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.
128POP-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; x = in(2);
// Declare the x variable for storing the result // 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 ď Źď&#x20AC; 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
130POP-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. Please 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 ď Źď&#x20AC; 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
132POP-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 ď Źď&#x20AC; 133
7.2.6.9 ao It is to off all motor function.
Syntax ao()
Example 7-42 void setup() { fd(100); sleep(2000); ao();
// Robot moves forward with full speed // in 2 seconds // 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
134POP-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 receiver’s 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); } else { glcdClear; } } }
// Delay 1 second
// Clear screen
136POP-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 receiver’s buffer of UART1.
Syntax char uart1_getkey(void)
Return value - “0” : no data received - data : received character in ASCII code
138POP-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
Chapter 8
POP-BOT XT movement control 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 Ton’s 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 = 100
PWM frequency =
Ton ................................................................(8.1) Ton Toff
1 1 ....................................................................(8.2) Ton Toff T
Average DC motor voltage drop = Supply voltage x duty cycle (%) ............(8.3)
Rs
Vs
Vm
M
t
Vm Ton Toff
T
Figure 8-1 : The PWM signal for driving DC motor
140POP-BOT XT : The Arduino Compatible Mobile Robot kit
Vm (V)
(A)
4.5
4 8 12 16 20 24 28 32
Duty cycle = 4 x 100% = 20% 20 t (ms) Average voltage = 4.5 x 20% = 0.9V
Vm (V) 10ms
(B)
4.5
4 8 12 16 20 24 28 32
Duty cycle = 10 x 100% = 50% 20 t (ms) Average voltage = 4.5 x 50% = 2.25V
Vm (V) 18ms
(C
4.5
4 8 12 16 20 24 28 32
Duty cycle = 18 x 100% = 90% 20 Average voltage = 4.5 x 90% = 4.05V t (ms)
Vm (V)
(D)
4.5
Duty cycle = 20 x 100% 20
20ms
4 8 12 16 20 24 28 32
t (ms)
= 100%
Average voltage = 4.5 x 100% = 4.5V
Figure 8-2 : Shows the relation between the different duty cycle and voltage accross the DC motor. 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.
POP-BOT XT : The Arduino Compatible Mobile Robot kit ď Źď&#x20AC; 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.
0%
20%
50%
75%
100%
Figure 8-3 : Shows the PWM signal at any duty cycle.
142POP-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 Arduino’s 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 Leonardo’s 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 ď Źď&#x20AC; 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. Please 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
144POP-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 ď Źď&#x20AC; 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); sleep(2000); ao(); }
// Robot moves forward with full speed // in 2 seconds // Stop all motors
146POP-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 ď Źď&#x20AC; 147
Activity 5-2 Circle-shape movement control With setting the different speed for each motor, it cause the robot move in circleshape. 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
148POP-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> void setup() { setTextSize(2); glcd(1,1,"Press OK"); glcd(2,1,"to Start"); sw_ok_press(); glcdClear(); glcd(1,1,"Moving..."); } void loop() { fd(80); sleep(900); tr(80); sleep(400); }
// Include Library for POP-BOT XT
// Set text size 2x // Start message // Check OK switch pressing to start // Clear screen // Operation message
// // // //
Forward with 80% power Forward time Turn right with 80% power 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
150POP-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> void setup() { glcdClear(); setTextSize(2); glcd(1,1,"Press OK"); glcd(2,1,"to Start"); sw_ok_press(); glcdClear(); glcd(1,1,"Moving..."); fd2(70,70); } void loop() {}
// Include the main library
// Clear screen and set to black // Set text size 2x // Show the start message // Wait for OK switch pressed // Show operation message // Move the robot forward with 70% power
Listing A5 -5 : MoveAlignment.ino ; sketch for speed adjusting with fd2()and bk2() function to improve the robot’s 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.
152POP-BOT XT : The Arduino Compatible Mobile Robot kit
POP-BOT XT : The Arduino Compatible Mobile Robot kit 153
Chapter 9
Object avoidance by contact 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 robot’s 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 microcontroller will drive the robot to move backwards and change its direction. The robot will be able to move through obstacles.
LED1
Indicator
+V
R2 10k
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.
R1 510
R3 220
DATA
Signal output S1 GND Switch
Figure 9-1 : ZX-01 switch sensor of the POP-BOT XT schematic and operation details.
154POP-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.
Press OK to Start ATMega32U4
100 TB6612
(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 robot’s 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 ď Źď&#x20AC; 155
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. #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 ZX01 switch sensor operation
156POP-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> void setup() { setTextSize(2); glcd(1,1,"Press OK"); glcd(2,1,"to Start"); sw_ok_press(); glcdClear(); glcd(1,1,"Let's go!"); } void loop() { if(in(22)==0&&in(23)==0) { fd(60); } else if(in(22)==0) { tl(60); } else if(in(23)==0) { tr(60); } else { ao(); } }
// Include the main library
// Set text size 2x // Show the start message // Wait for OK switch pressed // Show operation message
// Both switches are pressed ? // If correct, move forward with 60% power // Only switch at pin22 is pressed ? // If correct, turn left with 60% power // Only switch at pin23 is pressed ? // If correct, turn right with 60% powerÒ
// 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 ď Źď&#x20AC; 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.
158POP-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 robot’s display, it shows message :
Press OK to Start (A8.7) Press the OK switch and observe the robot. The POP-BOT XT will 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.
160POP-BOT XT : The Arduino Compatible Mobile Robot kit
#include <popxt.h> void setup() { setTextSize(2); glcd(1,1,"Press OK"); glcd(2,1,"to Start"); sw_ok_press(); glcdClear(); glcd(1,1,"Let's go!"); } void loop() { fd(70); if(in(22)==0) { bk(80); sleep(300); sr(80); sleep(200); } if(in(23)==0) { bk(80); sleep(400); sl(80); sleep(400); } }
// Include the main library
// Set text size 2x // Show the start message // Wait for OK switch pressed // Show operation message
// Left switch is attacked // Move backward // Spin right
// Right swtich is attacked // Move backward // Spin left
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
Chapter 10
POP-BOT XT line tracking 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 POPBOT 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. There’s 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 transistor’s base, causing it to conduct current. The more infrared incident on the transistor’s 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.
510 10k
+V
TCRT5000
OUT
High output voltage
510
GND
Infrared LED
10k
current flow
TCRT5000
current flow
+V
OUT
Low output voltage GND
Infrared LED Photo-transistor
Photo-transistor
White surface
Black surface
Figure 10-1 : The operation of ZX-03 Infrared reflector sensor board with white and black surface
162POP-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 ď Źď&#x20AC; 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
164POP-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.
TB6612
R=100
100
L=100
Black surface values will range from 80 to 250.
100 TB6612
TB6612
R=900
100
L=900
(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.
100 TB6612
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 ď Źď&#x20AC; 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 POPBOT 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
166POP-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 Upload (A11.5) Turn off power and remove the USB cable.
button or select menu File >
POP-BOT XT : The Arduino Compatible Mobile Robot kit ď Źď&#x20AC; 167
#include <popxt.h> int L,R; void setup() { setTextSize(2); glcd(1,1,"Press OK"); glcd(2,1,"to Start"); sw_ok_press(); glcdClear(); glcd(1,1,"Moving..."); } void loop() { fd(60); L=analog(0); R=analog(1); if (L<500&&R<500) { bk(80); sound(1000,100); sleep(500); sr(60); sleep(300); } else if(L<500) { bk(80); sound(1500,100); sleep(400); sr(60); sleep(300); } else if(R<500) { bk(80); sound(1500,100); sleep(300); sl(60); sleep(500); }
// Include the main library
// Set text size 2x // Show the start message // Wait for the OK switch pressing // Show the operation message
// // // //
Move forward Define A0 sensor as Left sensor Define A1 sensor as Right sensor Both sensors out of the area
// Move backward // Warn the out of area by sounding // Spin right to change direction
// The left sensor out of the area // Movce backward // Warn the out of area with the different sound // frequency // Spin right to change direction
// The right sensor out of the area // Movce backward // Warn the out of area with the sound // Spin left to change direction
}
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
168POP-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 table’s edge. It will change the movement direction following these scenarios : 1. Both sensors are out from table’s edge : the robot moves backward and spins right then moves forward again.
2 1 00
3
1 00
100
TB 66 12
TB 66 12
1
TB 66 12
5
6
100
4
10 0
TB 66 12
100
TB 661 2
TB6 61 2
100
2. The left sensor is out from talbe’s edge : the robot moves backward and spins right then moves forward again.
10 0
TB6 61 2
100
TB 661 2
TB6 61 2
3. The right sensor is out from talbe’s edge : the robot moves backward and spins left then moves forward again.
100 61
2
10 T B6
TB6 612
TB
66
12
10 0
0
POP-BOT XT : The Arduino Compatible Mobile Robot kit ď Źď&#x20AC; 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.
170POP-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 P O P -B O T XT #include <popxt.h>
// Include the main library
int L,R; void setup() { setTextSize(2);
// Set text size 2x
glcd(1,1,"Press OK"); sw_ok_press();
// Show the start message
// 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 ď Źď&#x20AC; 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.
100
(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.
TB66 12
172POP-BOT XT : The Arduino Compatible Mobile Robot kit
10
0
(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.
12 TB 66
(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 ď Źď&#x20AC; 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 ?
174POP-BOT XT : The Arduino Compatible Mobile Robot kit
#include <popxt.h> int L,R; void setup() { setTextSize(2); glcd(1,1,"Press OK"); sw_ok_press(); glcd(1,1,"Moving..."); } void loop() { L=analog(0); R=analog(1); if (L<500&&R<500)
// Include the main library
// // // //
Set text Show the Wait for Show the
size 2x start message the OK switch pressing operation message
// // // //
Get the Left line sensor data Get the Rightt line sensor data Both sensors detect the black line. It means the crossing line
{ fd(60); sound(2000,200); } else if(L>500&&R>500)
// Move forward over the corssing line // Beep a sound // Both sensors detect the white area. // It means robot move bestride the line
{ fd(60); } else if(L<500)
// Move forward with 60% power // 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 ď Źď&#x20AC; 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.
176POP-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 ď Źď&#x20AC; 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
178POP-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 ď Źď&#x20AC; 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.
180POP-BOT XT : The Arduino Compatible Mobile Robot kit
#include <popxt.h> int L,R,x=0;
// Include the main library
/* 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 ď Źď&#x20AC; 181
} x++; if (x==3) { R90(); } else { L90(); } } else if(L>500&&R>500)
// Increase the crossing line counting // Check the 3rd crossing line // Turn right with 90-degree after detect the 3rd // crossing line
// If not, turn left with 90-degree
// Both sensors detect the white area. It means // robot move bestride the line
{ fd(60); } else if(L<500)
// Move forward with 60% power // 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); } }
Liusting A15-1 : MultipleCrossingTrack.ino ; sketch file for muitiple crossing line tracking activity of the POP-BOT XT
182POP-BOT XT : The Arduino Compatible Mobile Robot kit
POP-BOT XT : The Arduino Compatible Mobile Robot kit 183
Chapter 11
Touchless object avoiding 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 interfacing 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
Output voltage (V)
Infrared LED transmitter
2.8
Infrared Receiver
2.4 2.0 1.6
GP2D120
1.2 0.8
Vout GND
Vcc
0.4 0
Supply
0
4
8
12
16
20
24
28
32
Distance (cm) 38.3ฑ9.6 ms
Measurement
Vout
1st measure
Not stable
2nd measure
1st output
5 ms
n measure
2nd output
n output
* 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.
Figure 11-1 : GP2D120 pin assignment, operation and characteristic curve
184POP-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 GP2D120’s 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 GP2D120’s 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.
2914 1 V 5
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 ď Źď&#x20AC; 185
GP2D120 output voltage (V)
10-bit A/D converter result
Distance (cm.)
0.4 0.5
82 102
32 26
0.6
123
22
0.7
143
19
0.8
164
16
0.9
184
14
1.0
205
13
1.1 1.2
225 246
12 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 2.0
389 410
6 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.
186POP-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.
GP2D120 module
2 x 3 hole right-angle metal shaft
3mm. nut 3 x 10mm. screw 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.
จุดตอ 20/A2
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 POPBOT 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. #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); }
Listing A16-1 : GP2D120_Reading.ino ; sketch file of GP2D120 distance measurement of the POP-BOT XT
188POP-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.
100 F
A TM e g a 3 2 U 4
220 F
TB 6 6 1 2
100
Adjust the distance in range 4 to 32cm.
POP-BOT XT : The Arduino Compatible Mobile Robot kit ď Źď&#x20AC; 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.
190POP-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
Chapter 12
POP-BOT XT with servo motor 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 servo’s 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.
Horn Plug
Cable
STANDARD SERVO MOTOR
Case
Figure 12-1 : Standard servo motor physical
192ď&#x20AC; ď Źď&#x20AC; POP-BOT XT : The Arduino Compatible Mobile Robot kit
(a) S-type plug
(b) J-type plug
Figure 12-2 : Standard Servo motor Figure 12-3 : Standard Servo motor cable assignment plug type 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 kgcm/47oz-in torque.
POP-BOT XT : The Arduino Compatible Mobile Robot kit ď Źď&#x20AC; 193
1 to 2 millsecond pulse
(a) Servo motor control pulse 20ms period
1 millisecond pulse
(b) 1 millisecond pulse causes servo horn moves anti-clockwise direction to last right position (0o)
STANDARD SERVO MOTOR
1.5 millisecond pulse
(c) 1.5 millisecond pulse causes servo horn moves to center position
STANDARD SERVO MOTOR
2 millisecond pulse
(d) 2 millisecond pulse causes servo horn moves clockwise direction to last left position (180o)
STANDARD SERVO MOTOR
Figure 12-4 : Timing diagram of pulse control servo motor
194POP-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 sum m a ry o f
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 ď Źď&#x20AC; 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.
196POP-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
// Display servo motor position
servo(1,x);
",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 ď Źď&#x20AC; 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. 2 x 3 hole right-angle metal shaft #2 3 x 6mm. screw
3mm. nut
hole of metal shaft 2 x 3 hole right-angle metal shaft #1
(A19.1.2) Unscrew the screw at servo motor shaft and remove the horn. Attach a rightangle metal shaft with servo motor body by using 3 x 10mm. screws and 3mm. nuts following the picture below. installation hole of servo motor 3 x 10mm. screw
servo motor
3mm. nut
3 x 10mm. screw The 2 x 3 hole right-angle metal shaft from step metal shaft's hole (A19.1.1)
198POP-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 ď Źď&#x20AC; 199
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. #include <popxt.h> void setup() { setTextSize(2); glcd(1,1,"Press OK"); glcd(2,1,"to Start"); sw_ok_press(); glcdClear(); glcd(1,1,"Let's go!"); servo(1,0); sleep(1000); fd(60);
// Include the main library
// Set text size 2x // Show the start message // Wait for OK switch // pressed // Show operation message // Set servo motor shaft // to zero postion // Robot moves forward
} void loop() { if(analog(0)<500) { ao(); servo(1,180); sleep(1000); servo(1,0); while(1); } }
// Detect the black line // // // // //
Stop moving Drive servo to hit an object Delay 1 second Set servo motor shaft to origin Stop operation
Listing A19-1 : ServoHitting.ino ; sketch file for controlling the servo motor to hit an object
200POP-BOT XT : The Arduino Compatible Mobile Robot kit
Activity 19-3 ObjectHitter-BOT mission
STOP
START
The mission field for this activity is shown below.
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 ď Źď&#x20AC; 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 :
202POP-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); sleep(200); R90(); } void setup() { setTextSize(2); glcd(1,1,"Press OK"); glcd(2,1,"to Start"); sw_ok_press(); glcdClear(); glcd(1,1,"Let's go!"); }
// Move backward // 90-degree turn right
// Set text size 2x // Show the start message // Wait for OK switch pressed // Show operation message
POP-BOT XT : The Arduino Compatible Mobile Robot kit ď Źď&#x20AC; 203
void loop() { L=analog(0); R=analog(1); if (L<500&&R<500) { if(x==5) { x=0; y++; if (y==4) { ao(); servo (1,-1); while(1); } } x++; if (x==1) { L90(); } else if(x==2||x==4) { hit(); } else if (x==3) { FF(); } else if (x==5) { R90(); } } else if(L>500&&R>500)
// Read the Left line sensor value // Read the Right line sensor value // Detect the crossing line // The crossing line counting was complete // Restart counting // Increase branch counter // The branch counting was complete // Stop the robot // Stop servo motor
// Increase the line crossing counter // 1st crossing // Turn left // 2nd and 4th crossing // Hit the object // 3rd crossing // Move forward // 5th crossing // 90-degree turn right
// Both sensors detect the white area. It means // robot move bestride the line
{ fd(60); } else if(L<500)
// Move forward with 60% power // The left line sensor detects the black line // The robot will move out the line in right
{ sl(60); sleep(20); } else if(R<500)
// Spin left a little bit to adjust the robot // over the line
// 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
204POP-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.