Professional Documents
Culture Documents
Getting Started With Matlab Simulink and Raspberry Pi
Getting Started With Matlab Simulink and Raspberry Pi
Table of Contents
Preface 1. Introduction to Raspberry Pi 1.1 Raspberry Pi 1.2 Getting Hardware 2. Matlab Simulink and Raspberrv Pi 2.1 Matlab 2.2 Installin 2.3 Running Raspberry Pi 2.4 SSH 3. Helio World - Matlab Simulink and Raspberry Pi 3.1 Helio World 3.2 Creating Raspberrv Pi Simulink 3.2.1 Configuring Raspberry Pi LED 3.2.2 Configuring Data Type Conversion 3.2.3 Configuring Sine Wave 3.3 Running Simulink 4. Simulink with Raspberry Pi GPIO 4.1 GPIO 4.2 Preparation 4.3 Simulink with GPIO Write 4.3.1 Building Simulink Madel 4.3.2 Testinz 4.4 Simulink with GPIO Read 4.4.1 Creating Application for Arduino 4.4.2 Building Simulink Model 4.4.3 Testing 5. Simulink and Video Capture
S.l Prcparation
Preface
This book was written to help anyone wants to get started in Raspberry Pi and Matlab Simulink. It describes alI the basic elements of the Raspberry Pi and Matlab Simulink with step-by-step approach.
I. Introduction to Raspberry Pi
1.1 Raspberry Pi
The Raspberry Pi is a small size computer (85.60mm x 56mm x 21mm) with completed features so that you can play multimedia or run an application. This device is developed by the Raspberry Pi Foundation in UK. There ara two type of Raspberry Pi: Model A with 256 Mb RAM Model B with 512 Mb RAM 111efollowing is technical specification of Raspberry Pi device:
SoC Broadcom BCM2835 (CPU, GPU, OSP, SORAM) CPU: 700 MHz ARMI176JZF-S core (ARMll family) GPU: Broadcom VideoCore IV, OpenGL ES 2.0, 1080p30 h.264/MPEG-4 Memory (SORAM): 512 Megabytes (MiB) Video outputs: Composite RCA, HOMI Audio outputs: 3.5 mm jack, HOMI Onboard storage: SO, MMC, SOlO card slot 10/100 Ethernet RJ45 onboard network Storage via SOl MMCI SOlO card slot You can see Raspberry Pi device with model B on the Figure below.
AVC high-profile
decoder
SPBER Y PI MODEL B
RCA VIDEO AUDIO
POWER
~
11/07 /RaspiModelB.png)
Officially you can buy it from the official distributor RS, http://uk.rs-online.com/web/generalDisplay.html?id=raspberrypi Element 14, http://www.element14.com/raspberrypi
You a1so buy Raspberry Pi periphera1 devices for instance, keyboard, mouse, HDMI cab1e, SD card, USE hub, etc. I tried to 100k for buying Raspberry Pi device and found that there are another options to buy lhe Pi Hut, http://thepihut.com EXP- Tech, http://www.exp-tech.de/Mainboards/raspberry-pi.htm1 Cooking -hack, http://w w.cooking-hacks.com/index. php/ shoplraspberry Amazon, http://www.amazon.com Ebay, http://www.ebay.com
-pi.htm1
This chapter explains how to work with MatIab Simulink and Raspberry Pi Software.
2.1 Matlab
You can work with MatIab Simulink with targeting on Raspberry Pi using MatIab lOBa or the Iatest version. You aIso can work with MatIab lOBa Student Version.
(""l'e"~ fOl\)
I,J
U,fflt ~
li.'S"OC.j)
7.:~Gt)
(l\}O
,..
7."'~O
" H~OO
7. ?'O,;,
~. ~
D'
S. fOr:;:)
~ ~?)(!O
Now you are ready to install Raspberry Pi and MatIab Simulink for Raspberry Pi. You also need internet eonneetion download Raspberry Pi paekage. Run your Matlab and then cliek Add-Ons. You ean see the menu as below. Search DoclJmentation
to
Get More Apps Get Apps from File Exchange Get Hardware 5upport Packages Find and install hardware support packages Value Purchase MathWorks Produds Visit Web Store
Min
Support
@ Internet (recommended)
Seleet Internet
(recommended).
~
Select a support package
Select a support package to install or update. Action 1 2 3 4 5 Support Package for Arduino BeagleBoard Gumstix Overo LEGO MINDSTORMSNXT PandaBoard
",
,I
'/
-- .
7 8 9
:-...
6 ~
L-J
'.
~oo
1.0
,
-- Simulink
,
Simulink
.'
'"""""
"
Windows 132-bit),\
, "
Windows (32-bitl,\ Windows 132-bit),\ Windows (32-bitl,\ ., Windows 132-bitl,\ Windows (32-bit),\
D Install
i
Digilent Analog Discovery A.n310gDevices DSPs Green Htlls r.."ULTI Xilinx Zynq-7000
Install Install
10 ~ 11
l~ Install
Installation fulder:
I[
<Ba~
Next>
I[
Check Raspberry
Support Package.lnstaHer
MATHWORKS AUXILlARY IMPORTANT NOTICE ================ REAO THE TERMS ANO CONomONS OF THIS MATHWORKS AUXILIARY SOFTWARE LICENSE AGREEMENT (THE "AGREEMEN) CAREFULLY BEFORE CHECKING 1 ACCEPr OR ACCESSING THESE MATERIALS (AS DEfINED BELOW). THIS AGREEMENT REPRESENTS THE ENTIRE AGREEMENT BETWEEN VOU (lHE LICENSEE") ANO THE MATHWORKS, INC. fMATHWORKS") CONCERNING THE SOFTWARE AND OOCUMENTATION MADE AVAILABLE fOR ACCESS HEREUNOER (COLLECTIVELY, THE 'MATERIALS"). BY CHECKING 1 ACCEPI AGREEMENT. OR ACCESSING THESE MATERIALS VOU ACCEPT THE TERMS OF THIS
I
1. DEFINmONS.
1. 1. Licensee' means vou, whether an individual or an entity, to whom MathWorks grants the License, and who is responsible for complying with the contractual obligations of the License, and ensuring that anyone permitted access to the Materiais also complies with such obligations.
1.2. "Documentation" means the user guides, if any, accompanying delivery of the Materiais, as may be updated from time to time, as 'Neli as any reports or other reedback that MathWorks may, in its sole disaetion, provide to Licensee. Documentation may be delivered in printed and/or online forms, and in one or more languages.
I accept Next
>
II
Cancel
I!
Help
Vou have chosen to instaU Simulink Support Pack.age for Raspberry Pi Hardware. Software Vl'illbe installed from the following locations:
SDl
Wget for Windows ]-zip
This utility enables Vou to download and install the third party soft1Nare listed above. This list may contain open source software, induding software licensed under the terms of the General PubJiclicense. By dicking 1nstaU" on the next screen, vou will be downloadng and instaJling the soft1l1'arelisted above. By dicking 'Cancel", you will not download or install the software.
< Back
II
Next
>
II
CanceJ
II
Help
< Back
Install
Cancel
Click InstaU button. It will download Raspberry Pi package and then instal1 it.
CI
To ensure compatibility with Simulink, you may need to update the firmware for the selected support package hardware. Select -Continue- to update firmware now. Select -Close- to exit this utility.
I
Click Continue button.
Continue>
I ~-==--J
Help
Update firmware Choose a hard'Nare to start the firmware update processo Hardware: aS):>~~~~Y~i ..
Help
Model B
.1
II
Next
>
II
Cancel
>
(recommended)
O Get from
Download folder:
(recommended).
Cl
IP
settings: ] _
'raspberrypi-AKUR l .... __ .. _. __ .
... __ ....
connection
More info
IP
IP address
IP
Settings
IP address:
10.10.10.9
255.255.255.0
10.10.10.1
< Back
<
Next>
Cancel
D:
~!
RelTesh
If you do not find the memory card reader in the list of drives, reinsert the memory card fully and dick "RelTesh',
< Back
II
Next
>
CancE
This dialog cal1 detect your SD cardo If 110t,select the drive of your SD cardo Then click Next button.
I,
Cana
Click Write button to start to write Raspberry If done, you will see the dialog as below.
Pi image to SD cardo
Power cable
Ethernet connecton
< Saci<
II
Next
>
II
CancE
Plug out SD card from compu ter. Then, plug in it into Raspberry Pi
your Raspberry
Pi for instance
Pi is running
well, cIick Next button. Then you will see a dialog as below.
If you want to log in to the board in the future, the host na me or IP address, user name, and password are displayed below. Voumay also type "raspberrypi" on the MATLAB command window to obtain this information. Host name: User name: Password:
NOTE:
raspberrypi-AKUR p raspberry
1. Your Raspberry Pi hardware willspeak its IP address through the analog audo connector when it boots. 2. Voucan configure your Raspberry Pi hardware to automatically send an e-mail when IP address changes. Click'Help' for detailed instructions.
<
YOUf
nrmware.
Click Finish button. You will see the new dialog as below.
Help
1
i
+
Simulink Support Package for Raspberry Pi Hardware EXAMPLES
SimulinkG) lets you design aM run models on Raspberry Pi@ hardware. With this capability. you can assess algorithms in the classroom or lab as they execute in real-time on Raspberry Pi hardware with physicallJO. an optimize
i
i
I
1 :
!
I!tl ModE
~ ~
I ~
i
i
I
t
rQ:] ~ -"
: ~~
...-..f~
I~l .~
Communicating with Raspberry Pi Hardware
I!tl ModE
liI fil'
File
Help
Enter search term
Libraries
__ .J
Simulink Commonly Used Blocks Continuous Discontinuities Discrete Logic and Bit Operations Lookup Tables Math Operations Model Verification Model-Wide Utilities Ports & Subsystems Signal Attributes Signal Routing Sinks Sources User-Defined Fundiom Additional Math & Discrete Control System Toolbox DSP System Toolbox Data Acquisition Toolbox Instrument Control Toolbox Simulink 3D Animation Simulink Coder Simulink Control Design Simulink Extras Simulink Su ort Packa e for Arduino Hardware
Pi Hardware
J'.'
ALSAAudio PIsybaO:
.rtr. ~
='""':~
GPIO Read
G
.rtr.
-t-..: .~
GPIOWrite
"qr CO
"'.:.,c:: . -410 _
1_
LEO
~
UOP Reoeive
-rn
~
V4L2Video CaptUTe
~:-'~I
~ '1.
UDP Semi
IExsmples
[;>
t>
I:t
t>
c,
t>
Showing:
Pi Hardware
Turn on the power for your Raspberry Pi. If success, you will get the first screen of Raspberry Pi as below
Enter username: pi and password: raspberry Then, you will get the Raspberry terminal. To work with Desktop GUI, you can type
startx
2.4 SSH
You may need SSH to manage Raspberry Pi remotely. How to instam You can write his script
I I I I
$ sudo apt-get
install ssh
start
Sometimes, you want to mn SSH service every booting. Try to update update-rc.d
file
$ sudo update-rc.d
ssh defaults
Pi
$ sudo reboot
PuTTY Configuration
Categ.ory: ~ ..Session
r
I
Basic options for your Pu TTY session Specify the destination you want to connect to Host liame (or
L... Logging
~. Terrninal
Keyboard
IP address)
1192.168.1.61
Connection type:
I~~
@SH
~fo_rt
!....Appearance
j.. Behaviour
O Ra~
O Ielnet O RJog[n
O SeDal
Load. save or delete a stored session Saved Sessions I~~;b~;;;;pi................ Default Settings Mac Mini akurdb .doudapp .net raspbenypi
!
i
Translation Selection
.. 1
L... Colours
8.. Connection
I
!
!
! Proxy
ctl' SSH
L... Serial
O A1ways
~out
If connected,
Enter search term Library: Simulink Support Package for Raspberry Pi Hardware
(>
5imulink Commonly Used Blocks Continuous Discontinuities Discrete Logic and Bit Operations Lookup Tables Math Operations Model Verification Model- Nide Utilities Ports & 5ubsystems Signal Attributes 5ignal Routing Sinks Sources User-Defined Functions Additional Math & Discrete Control System Toolbox DSP 5ystem Toolbox Data Acquisition Toolbox Instrument Control Toolbox 5imulink 3D Animation Simulink Coder 5imulink Control Design Simulink Extras 5imulink Su ort Packa e for Arduino Hardware
ALSAAu<iio Capture
GPIO Read
CD""-.'~
"@
LEO
: c .
G:J'"~'''
nr.
C~
ALSAAudio Playbadt:
GPIOWrite
~ ~
UDP Seno
r::::::I
L:::-J
[Examples)
eSpes,Textto Speech
Showing:
Pi Hardware
HOME
PLOTS
APPS
~
Import
Save
Workspace
Data
Script Function Ctrl-N Agus
~ Documents
rv
01
D
~
Example Class System Object Figure Graphical User Interface Command Shortcut SIMUlINK ~ Simulink Model Simulink Project }
ij
L::I
untitled
File Edit View Display Diagram Simulation Analysis Code Tools Help
Normal .
Ready Next step, we build a simulink model. On the Simulik Model dialog, click menu Tools -> Library Browser. am Simulation Analysis Code Help Library Browser Model Explorer Run on Target Hardware 100%
.... ~ ~
Then you wil! the list of Simulink library include Raspberry Pi library. Click Simulink Support Package for Raspberry Pi Hardware, then you wil! see all Raspberry Pi installed library.
File
Edit
View
>
Help
Enter search term Library: Simulink Support Package for Raspberry Pi Hardware
L:
Simulink Commonly Used Blocks Continuous Discontinuities Discrete Logic and Bit Operations Lookup Tables Math Operations Model Verification Model-Wide Utilities Ports & Subsystems Signal Attributes Signal Routing Sinks Sources User-Defined Functions c' Additional Math & Discrete Control System Toolbox DSP System Toolbox Data Acquisition Toolbox Instrument Control Toolbox Simulink 3D Animation Simulink Coder Simulink Control Design Simulink Extras Simulink Su ort Packa e for Arduino Hardware
ALSAAudio
Capture
ALSAAudio Playbact
GPIORead
GPIOWrite
LEO
UOP ReceivE-
~ ~
UOP Send
V4L2Video
CapturE-
I ~::-;~;I
!ExampI6}
eSpeak Speec:h
Texl to
Model Browser
toa.. helloworld
fR";iI
SineWsve
RASPBERRYPI
""1'.
fi:l1
ledO (Green) _lIDo_lea_o ~
LEO
You need three libraries as follows LED on Simulink Support Package for Raspberry Pi Hardware Data Type Conversion on Commonly Used Blocks Sine Wave on Sources
we configure these.
[ ............................................. ..! ..
.. i
............................................
1
!
__
o_K __
11
Cancel
Apply
Select Board and LED. If finished, click OK button. You aIso can click View LED location button to view LED position.
O~
r-
[1[---------]
Output data type:
Output minimum:
Output maximum:
I boolean
Ii
O Lock output
data type setting against changes by the fixed-point tools World value (RWV._) .
._=:J
o:]
__
O_K
_11
Cancel
I [_ Help
Apply
Due to Raspberry Pi LED input needs boolean data type, you must select boolean on Output If done, c1ick OK button.
data type.
3.2.3 Configuring
Sine Wave
= 2"'pi I (Frequency
I (2"'pi)
Use the sample-based sine type if numerical problems due to running for large times (e.g. overflow in absolute time) occur. Parameters Sine type: Time (t): [U-;~.-;~I~ti~~--ti.~~;"-'._.'_ Amplitude:
'--.M ._.. ---_ "._ -- _-- ..---.......................
------'-~J
Frequency (rad/sec):
For testing, we use eonfigurations Sine type: Time base Time (t): Use simulation Amplitude: 1 Bias: O Frequeney: 1
as follows:
time
veetor parameters
as l-D
helloworld
nulation Code Tools Help
d helloworld
If success, you don't see the error dialogo Now you are ready to deploy to Raspberry To run this model to Raspberry to Run. Pi and run it.
Pi, you must configure. How? Click menu Tools -> Run on Target Hardware
-> Prepare
-Code
>
I Tools
F?':!\
~._._-_.~---_. __ ._----------------------------L~lp_ . , Library Browser Model Explorer Run on Target Hardware ~ Prepare to Run ... Install/Update Support Package.
...i~
~
---:
S,~tt: I So~r
i
Th
"""Ih""",'
porilltlld"
"""4 ."
!" !
i
I
I
! I' y1ltIf
'Th'get har<hvare'
radage",'.
Implemel\tiitioo
Target MIlrdware
Mod.1 RvI.,.ncin
r"9"1
h..-dv,,,,,,,,
[!Y'~rr'f ~,_.
Pi on Target hardware.
Pi configuration.
f,AdiW)
rn.,d''''11I ~"'"
tu~
MQdellt~lerenong
" Smu Run Otl '9ft '9tt H ftotrt
O EM
Ovtrrun d
em.1 modq
l!lOn
C [na
av.e'1\#lde~et1
Fill Host name, User name and Password Note: You ean define hostname's Raspberry
You ean do eheeked Enable ExternaI mode and Enable overrun deteetion. If done, click OK button. Now baek to your Simulink. Change Normal Simulation Analysis Code lools to ExternaI, shown in Figure below. Help
~ lGl~
S ~helloworld ~ ~" =t
SineWsw RASPBERRYPI
~
boolean
"i,'t;'l
led{) (Gfeen)
LED
Data Type Convers ian
-> Run .
Ilysis
Cede
---,
What's happened? Basically Matlab sent and deployed this program to Raspberry Pi and then executed it. You can check your Raspberry Pi using SSH. You wiII obtain our progran, helloworld, that has deployed.
pi @raspberrypi-AKUR: ~/helloworldJtt/MW
4.1 GPIO
General Purpose Input/Output (GPIO) is a flexible software-controlled digital signal. You can define input/output Further information about GPIO, you can read it on http://en.wikipedia.org/wiki/GPIO. Based on Raspberry Pi specification, you can see Raspberry Pi GPIO as below. easily.
,;
/ I
3.3 V
6V 5V
12CO_SDA 12CO_SCL GPI04 GND GPIO 17 PCM_DIN GPIO 22 3.3 V SPlO_MOSI SPlO_ ISO SPlO_SCLK GND
GND UARTO_TXD UARTO~XD GPIO 18 GND GPIO 23 GPIO 24 GND GPIO 25 SPlO_CEO_N SPlO_CE1_N
When I wrote this book, there are two Raspberry you know Raspberry Pi revision?
Pi revision types, revision 1 and 2. Basically, it's not big changes. How do
cat Iproc/cpuinfo
Ifyou can see, I have Revision ooof. It means my Raspberry Pi is model B with 512MB and revision 15. Here is a guideline: Revision 0004, 0005, 006 ..000f is Raspberry Pi Model B revision 2 Revision 0003 is Raspberry Pi B Revision 1 + ECNOOOl Revision 0002 is Raspberry Pi B Revision 1
For input/output
GPIO programming,
I recommend
4.2 Preparation
We hava two scenarios to explore Simulink Raspberry Pi with GPIO. The first scenario is to work with GPIO Write. We use 3 LED connected to Pi GPIO 4,17,18. The second scenario is to work with GPIO Read. Basically you can use digital sensor devices to connect Pi GPIO. If you use analog sensor devices, you should ADC or additional analog component to convert to digital values. To simplify the second scenario, I use Arduino to produce digital values for Pi GPIO inputs.
YOll
and a breadboard.
Another option, you can buy Raspberry Pi GPIO kit, for instance, Adafruit Pi Cobbler Breakout Kit for Raspberry Pi. Further information about this product, you can read it on http://adafruit.com/products/914 .
3300
LED
Notes: LED 1 connect to GPIO 4 LED 2 connect to GPIO 17 LED 3 connect to GPIO 18
Pi
nn
GPI04 GPIO 4Wrile
RASPBERRYPI Logicsl
Operalof Sccpe
nn
GPIO 17
GPI017Wrile
RASPBERRYPI
nn
Logcsl Opaator1
Notes: GPIO Write on Simulink Support Package for Raspberry Pi Hardware Data Type Conversion on Commonly Used Blocks Scope on Commonly Used Blocks Logical Operator on Logic and Bit Operations Sine Wave on Sources
We use 3 GPIO Write. Configure them for GPIO 4,17, and 18.
Sink Blocl< P
GPIO Write (mask) Sets the logical value of a GPIO pin configured as output. Select the GPIO number. Do not assign the same GPIO number to multiple blocks within a mode!. Parameters Board: GPIO number: I B Rev2
OK
per period
I (2"'pi)
'"
Use the sample-based sine type if numerical problems due to running for large times (e.g. overflow in absolute time) occur. Parameters Sine type: [j_~~~~ased Time (t): [~se_~~m~ati~_~tim; Amplitude: 1 Bias: . . _
'Y._I
Sample time:
<
4.3.2 Testing
Now you can run this model on Raspberry Pi device. Please read section 3.3 for deploying and running on Raspberry Pi device. If success, you will obtain a console dialogo Here is a sample output for console.
c:\Windows\SYSTEM32\cmd.exe
You also see the LEDs will turn on and off on a certain time.
.."
.. '"' .....
G
File
13; 12;
{
~l
Toid setup ()
output.
Joid loop ()
HIGH); HIGH);
Ii wait fOL a second
HIGH);
LOlJ); Ii wait fOL a second LO~);
HIGH);
// wait fOL a second
<
>
int outl - 13; int out2 12; void setup() { 1,1 nitialze pinMode(outl, pinMode(out2,
}
void loop() { digitalWrite(outl, digitalWrite(out2, delay(1000); digitalWrite(outl, digitalWrite(out2, delay(lOOO) ; digitalWrte(outl, digitalWrite(out2, delay(lOOO);
HIGH); HIGH);
Save this code into a file, called arduino_digit. Do verify and upload this application to Arduino board. If done, your Arduino is be connected to Raspberry Pi.
El
.~ :.+ :
RASPBERRYPI
~ "" =t ~
nn
GPIO 18 GPI018 Read Scope
D
RASPBERRYPI
nn
GPIO 17 GPIO 17 Read
Sccpe1
Notes: GPIO Read on Simulink Support Paekage for Raspberry Pi Hardware Seope on Commonly Used Bloeks
Configure GPIO Read using GPIO 17 and 18. For Sample Time, you assign 0.1. Source Block Parameters: GPIO 17 Read
GPIO Read (mask) Reads the logical value of a GPIO pin configured as input. Select the GPIO number. Choose desired internai resistor configuration. Do not assign the same GPIO number to multiple blocks within a model. Parameters Board: GPIO number: Sample Time:
I Model B Rev2
17 0.1
.. 1
[Viewpin mapl
4.4.3 Testing
Now you can run it into Raspberry Pi. Try to open Scope library. You will see the response output as below.
Scope
process notification.
This chapter explains how to work with Video Capture using Raspberry Pi and Matlab Simulink.
5.1 Preparation
Matlab Simulink provides library, called V4L2 Video Capture, to capture live video. For Raspberry Pi target, you can see it on toolbox.
RASPBERRYPI
,..-.-,
Y Cb
(e).
c::.j
V 4L2 Video Capture
Mathworks has already testes some cameras as follows: Logitech Logitech Logitech Logitech QuickCam Pro 9000 QuickCam Pro 3000 Webcam C600 HD Webcam C310 by Ubuntu and Raspberry Pi, you can visit http://www.ideasonboard.org/uvc/ .
to Raspberry Pi console.
1SUSb
ls /dev/video*
If success, you will see your webcam usb. Mne s Idev/videoO. Now you are ready to buld a simulnk.
1DisplsyR
RASPBERRYPIR
1".'.,
eJ 'r-'i
G
B
Displsy G
V4l2VideoCaptLIe
Notes: V 4L2 Vdeo Capture on Smulnk Support Package for Raspberry Pi Hardware Display on Smulink->Sink
Double clck V4L2 Vdeo Capture. Then you obtan a dialog, shown n Fgure below.
-:J :J
__
O_K
_11
Cancel
II
Help
Apply
Change value on Device name, for instance, '/dev/videoO'. For pixel format, change to RGB. If done, click OK but1on. Save this simulink.
5.3 Testing
Now you can test it on Raspberry Pio Don't forget to change target hardware to Raspberry Pi.
on Hardware Confi
[2~~_~_~Le-~==:_-:_::~:::::::==~===:.:=::_~-:=====--=_:~:==
Code
Tools
T
Help
IT:l
Model Browser videodemo
0~
..
si ~IG)
@,
I ~J
ii:--
...
Now click menu Tools -> Run on Target Hardware -> Run. If success, you will see RGB values on Display.
-, -vid-eo-de-m-o ----'--.-----.--------~------------------------------.
-.---.---------~-----
S '~:
-~ ~
li<1i1
~videodemo
RASP8ERRYPIR
(0)
---, t......... ,
ri
I
I-
I I .. I I
6711
7211
7311
G 'B -
-Drs~ayR
7211
73111:'
10211
9611
9811
102
----.1
I
L__________.~?J
11 9611 9411
10211 1031C 9611 971C 10611 1031C L_ .. __ .._ .... __ .2~~H_ .... __ ._.~_~~] L
Display B
Contact
If you have question related to this book, please contact me at aguskur@hotmail.com blog.aguskurniawan.net.
. My blog: http://