77

Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

  • Upload
    lamkhue

  • View
    458

  • Download
    42

Embed Size (px)

Citation preview

Page 1: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping
Page 2: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

Copyright

ArduinoProgrammingusingMATLAB

AgusKurniawan

1stEdition,2015

Copyright©2015AgusKurniawan

Page 3: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

TableofContentsCopyright

Preface

1.PreparingDevelopmentEnvironment

1.1Arduino

1.1.1ArduinoUno

1.1.2ArduinoLeonardo

1.1.3ArduinoMega2560

1.1.4ArduinoDue

1.2ElectronicComponents

1.2.1ArduinoStarterKit

1.2.2Fritzing

1.2.3Cooking-Hacks:ArduinoStarterKit

1.2.4ArduinoSidekickBasickit

1.3Matlab

1.4Testing

2.SettingArduinoDevelopmentforMATLAB

2.1GettingStarted

2.2SettingupArduinoDevelopmentforMATLAB

2.3ConnectingArduinoBoardtoComputer

2.4HelloArduino:BlinkingLED

3.WorkingwithDigitalI/O

Page 4: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

3.1GettingStarted

3.2Demo:LEDandPushbutton

3.2.1Wiring

3.2.2WritingaProgram

3.2.3Testing

4.WorkingwithPWMandAnalogInput

4.1GettingStarted

4.2DemoAnalogOutput(PWM):RGBLED

4.2.1Wiring

4.2.2WritingProgram

4.2.3Testing

4.3DemoAnalogOutputVoltage:LEDBrightness

4.3.1Wiring

4.3.2WritingaProgram

4.3.3Testing

4.4DemoAnalogInput:WorkingwithPotentiometer

4.4.1Wiring

4.4.2WritingProgram

4.4.3Testing

5.WorkingwithI2C

5.1GettingStarted

5.2WritingProgram

5.3Demo1:ScanningI2C

Page 5: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

5.4Demo2:ReadingDatafromSensorBasedI2C

6.WorkingwithSPI

6.1GettingStarted

6.2Demo:SPILoopback

7.WorkingwithServoMotor

7.1GettingStarted

7.2Wiring

7.3WritingaMatlabProgram

7.4Testing

8.MeasuringandPlottingSensorDatainReal-Time

8.1GettingStarted

8.2Wiring

8.3WritingaProgram

8.4Testing

SourceCode

Contact

Page 6: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

Preface

ThisbookwaswrittentohelpanyonewanttodevelopArduinoboardusingMATLABwithArduinosupported.ItdescribesthebasicelementsofArduinodevelopmentusingMATLAB.

AgusKurniawan

Depok,September2015

Page 7: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

1.PreparingDevelopmentEnvironment

Page 8: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

1.1Arduino

Arduinoisanopen-sourceelectronicsprototypingplatformbasedonflexible,easy-to-usehardwareandsoftware.ThisboardusesAtmelmicrocontrollerseries.TherearemanyArduinohardwaremodelsthatyoucanuse.FurtherinformationaboutArduinoproducts,youcanvisitonwebsitehttp://arduino.cc/en/.

YoumustoneArduinohardwaretofollowpracticesinthisbook.IrecommendtoobtainoneofthefollowingArduinohardware:

ArduinoUnoArduinoLeonardoArduinoMega2560ArduinoDue

Youcanbuythisproductonyourlocalelectronicstore.Youalsocanorderitbyonline.Finditonhttp://arduino.cc/en/Main/Buy.ThefollowingisthelistofArduinostoreyoucanbuy

Arduinostore,http://store.arduino.cc/Amazon,http://www.amazon.comCooking-hacks,http://www.cooking-hacks.com/index.php/shop/arduino.htmlRSComponents,http://www.rs-components.comElement14,http://www.element14.comEXP-Tech,http://www.exp-tech.de

BecauseArduinoisanopen-sourcehardware,peoplecanbuildit.It’scalledArduinocompatible.Generallyit’ssoldinlowprices.

1.1.1ArduinoUno

TheArduinoUnoisamicrocontrollerboardbasedontheATmega328.Youcandownloadthedatasheetfile,http://www.atmel.com/dyn/resources/prod_documents/doc8161.pdf.

FurtherinformationaboutArduinoUno,youcanreaditonhttp://arduino.cc/en/Main/ArduinoBoardUno.

Page 9: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

1.1.2ArduinoLeonardo

TheArduinoLeonardoisamicrocontrollerboardbasedontheATmega32u4.Downloaddatasheetforthisproductonhttp://www.atmel.com/dyn/resources/prod_documents/7766S.pdf.

Visitthisproducttogetthefurtherinformationonhttp://arduino.cc/en/Main/ArduinoBoardLeonardo.

1.1.3ArduinoMega2560

TheArduinoMega2560isamicrocontrollerboardbasedontheATmega2560.Youcandownloadthedatasheetfileonhttp://www.atmel.com/dyn/resources/prod_documents/doc2549.PDF.

FurtherinformationaboutArduinoMega2560,youcanvisiton

Page 10: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

http://arduino.cc/en/Main/ArduinoBoardMega2560.

1.1.4ArduinoDue

TheArduinoDueisamicrocontrollerboardbasedontheAtmelSAM3X8EARMCortex-M3CPU.Youcandownloadthedatasheet,http://www.atmel.com/Images/doc11057.pdf.

IfyouwanttoknowaboutArduinoDue,Irecommendtovisitthiswebsite,http://arduino.cc/en/Main/ArduinoBoardDue.

Page 11: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

1.2ElectronicComponents

Weneedelectroniccomponentstobuildourtesting,forinstance,Resistor,LED,sensordevicesandetc.Irecommendyoucanbuyelectroniccomponentkit.

1.2.1ArduinoStarterKit

Storewebsite:http://arduino.cc/en/Main/ArduinoStarterKit

1.2.2Fritzing

Storewebsite:http://shop.fritzing.org/.

YoucanbuyFritzingStarterKitwithArduinoUNOorFritzingStarterKitwithArduinoMega.

Page 12: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

1.2.3Cooking-Hacks:ArduinoStarterKit

Storewebsite:http://www.cooking-hacks.com/index.php/shop/arduino/starter-kits/arduino-starter-kit.html

Page 13: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

1.2.4ArduinoSidekickBasickit

Storewebsite:http://www.seeedstudio.com/depot/arduino-sidekick-basic-kit-p-775.html

Alternativeonlinestore

http://www.amazon.com/Arduino-Sidekick-Basic-Kit-Version/dp/B007B14HM8/

http://www.exp-tech.de/Zubehoer/Arduino-Sidekick-Basic-Kit.html

Page 14: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

1.3Matlab

MATLABSupportPackageforArduinohardwareenablesyoutouseMATLAB®tocommunicatewiththeArduino®boardoveraUSBcable.Thispackageisbasedonaserverprogramrunningontheboard,whichlistenstocommandsarrivingviaserialport,executesthecommands,and,ifneeded,returnsaresult.

ThissupportpackageisavailableforR2014aandlaterreleases.It’savailableon32-bitand64-bitMicrosoft®Windows®,64-bitMacOS,and64-bitLinux®.

IwillexplainhowtosetupMatlabforArduinodevelopmentonchapter2.

Page 15: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

1.4Testing

Fortesting,IusedArduinoUnoR3andArduinoMega2560onOSXandWindows10platformswithMatlab2015b.

IalsousedArduinoSidekickBasickitforelectroniccomponents.

Page 16: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

2.SettingArduinoDevelopmentforMATLAB

ThischapterexplainshowtoworkonsettingupArduinoboardonacomputerandthen,accessitfromMATLAB.

Page 17: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

2.1GettingStarted

Inthischapter,wesetupArduinoboarddevelopmentusingMATLABsupportpackageforArduinohardware.Tosetupthisdevelopment,youmusthaveMATLAB2014aorlaterandMATLABaccounttoverifywhileinstalling.

Page 18: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

2.2SettingupArduinoDevelopmentforMATLAB

Inthissection,wetrytosetupArduinodevelopmentforMATLAB.YoucanconfigureMATLABSupportPackageforArduinohardwareusingMATLAB2014aorlater.Wealsoneedinternetconnectiontodownloadthispackage.

Let’sstart.

RunMATLABapplication.ClickGetHardwareSupportPackagesonAdd-Onsiconontoolbox.

Then,yougetadialog.SelectInstallfromInternet.

Ifdone,clickNext>button.

Page 19: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

SelectArduinoonSupportfor.YoushouldseetwoArduinosupportpackages.Youcanselectboth.

Ifdone,clickNext>button.

Page 20: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

YouwillbeaskedtologonwithyourMATLABaccount.YoushouldhaveMATLABlicense.ClickLogInbutton.

Youshouldtheauthenticationdialog.Fillyouraccount.Afterthat,clickLogInbutton.

Ifsuccess,youshouldgetasoftwarelicenseagreement.CheckedIacceptandthenclickNext>button.

Page 21: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

Youwillgetconfirmation.ClickNext>button.

ClickInstallbuttontostartinstallation.

Page 22: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

Afterdone,youwillbeaskedtoconfigureArduinoboard.SelectArduinoandthen,clickNext>button.

Confirmationformwillbeshown.ClickContinue>button.

Page 23: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

TheprogramwillcheckifyourplatformneedsArduinodriverornot.Ifyou’reworkingonLinuxandMac,youdon’tneedadriver.YouneedtoinstallArduinodriverifyou’reworkingonWindowsplatform.ClickNext>buttonifdone.

Page 24: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

Installationisover.ClickFinishbuttontocloseinstallation.

Page 25: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

2.3ConnectingArduinoBoardtoComputer

NowyoucanconnectArduinoboardtocomputer.Then,verifywhichserialportisusedforArduinoboard.OnMacplatform,youtypethiscommand.

$ls/dev/cu*

OnLinuxplatform,youtypethiscommand.$ls/dev/tty*

YoucanuseDeviceManageronWindowsplatform.

Afterthat,youshouldseeserialportofArduinoboardwhichisattachedonthecomputer.

MyOSXdetectedmyArduinoboardused/dev/cu.usbmodem1421serialport.

OnMATLABcommandWindows,typethiscommand>>a=arduino

MATLABwilldetectyourArduinoboard.YoushoulddetectedArduinoboardinformationonMaltabCommandWindow.

Page 26: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping
Page 27: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

2.4HelloArduino:BlinkingLED

Inthissection,webuildablinkingLEDprogramusingMATLAB.ArduinoUno/Mega/LeonardoboardsprovidesonboardLEDwhichisconnectedonpin13.

Let’sstarttowriteourBlinkprogram.

Firstly,yousetworkingfolderonMATLAB.YoucanchangeitonMATLABIDE,seearedarrow.

Then,clickNewScripticontocreateanewscriptfile.

Afterthat,youcangetascripteditor,showninFigurebelow.

Page 28: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

board=arduino();

led='D13';

fork=1:10

disp('turnonLED');

writeDigitalPin(board,led,1);

pause(1);

disp('turnoffLED');

writeDigitalPin(board,led,0);

pause(1);

end

disp('closeArduinoboard');

clearboard;

Savethosescriptsintoafile,calledblinking.m.Nowyoucanrunit.>>blinking

Youmaygeterrormessage,showninFigurebelow.

Page 29: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

Thiserroroccursbecausewecreatearduinoobjectwhilethereisexistingarduinoobject.Wecan’tusemultiplearduinoobject.DeleteexistingarduinoonWorkspaceWindow.SeearedarrowonaboveFigure.

Wecanclearourarduinoobjectusageusingclearsyntax.

Nowyoucanruntheprogramagain.Thefollowingisasampleoutputofblinkingprogram.

Page 30: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

YoushouldseeblinkingLEDonArduinoboard.

Page 31: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping
Page 32: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

3.WorkingwithDigitalI/O

InthischapterI’mgoingtoexplainhowtoworkwithdigitalI/OonArduinoboardandwriteaprogramfordemo.

Page 33: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

3.1GettingStarted

MATLABsupportforArduinoboardprovidesthreefunctionswhichwecanuseondigitalI/Oprocessing.Thefollowingisthefunctions:

configurePin()isusedtodefinepinmodeeitherasinputoroutput.Reference:http://www.mathworks.com/help/supportpkg/arduinoio/ref/configurepin.htmlwriteDigitalPin()isusedtowritedigitaldataintoaspecificdigitalpin.Reference:http://www.mathworks.com/help/supportpkg/arduinoio/ref/writedigitalpin.htmlreadDigitalPin()isusedtoreaddigitalinputonspecificdigitalpin.Reference:http://www.mathworks.com/help/supportpkg/arduinoio/ref/readdigitalpin.html

ToillustratehowtoworkwithdigitalI/O,webuildasimpleprogrambyutilizingLEDandpushbutton.

Page 34: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

3.2Demo:LEDandPushbutton

webuildaprogramusingLEDandpushbutton.Whenwepressapushbutton,LEDwilllighting.It’sasimple;).

3.2.1Wiring

Thefollowingishardwarewiring:

LEDisconnectedtoArduinodigitalpin9PushbuttonisconnectedtoArduinodigitalpin8

AsampleofhardwareimplementationisshowninFigurebelow.

3.2.2WritingaProgram

Nowyoucanwritethesescripts.function[]=led_pushbutton()

pushbutton='D8';

led='D9';

board=arduino();

Page 35: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

finishup=onCleanup(@()exitprogram(board));

configurePin(board,pushbutton,'DigitalInput');

disp('pressCtr-Ctoexit');

while1

state=readDigitalPin(board,pushbutton);

writeDigitalPin(board,led,state);

disp(state);

pause(0.5);

end

end

functionexitprogram(b)

clearb;

disp('programhasexit');

end

WeuseonCleanup(),http://www.mathworks.com/help/matlab/ref/oncleanup.html,tocatchCTRL+Cforquitingtheprogram.

Savethisprogramintofile,calledled_pushbutton.m.

3.2.3Testing

RunthisprogrambytypingthiscommandonCommandWindowonMatlab.>>led_pushbutton

Presspushbutton.Then,youshouldseelightingLED.PressCTRL+Ctoexitprogram.

Programoutput:

Page 36: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

LEDislightingwhileapushbuttonispressed.

Page 37: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping
Page 38: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

4.WorkingwithPWMandAnalogInput

ThischapterexplainshowtoworkwithArduinoAnalogI/OusingMATLAB.

Page 39: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

4.1GettingStarted

MATLABsupportforArduinoboardprovidesfivefunctionswhichwecanuseonanalogI/Oprocessing.Thefollowingisthefunctions:

configurePin()isusedtodefinepinmodeeitherasinputoroutput.Reference:http://www.mathworks.com/help/supportpkg/arduinoio/ref/configurepin.htmlwritePWMVoltage()isusedtowritePWMvoltageondigitalpin.Reference:http://www.mathworks.com/help/supportpkg/arduinoio/ref/writepwmvoltage.htmlwritePWMDutyCycle()isusedtosetPWMdutycycleondigitalpin.Reference:http://www.mathworks.com/help/supportpkg/arduinoio/ref/writepwmdutycycle.htmlreadVoltage()toreadanaloginputonAnalogpin.Reference:http://www.mathworks.com/help/supportpkg/arduinoio/ref/readvoltage.html

Inthischapter,wetrytoaccessArduinoAnalogI/OusingMATLAB.Therearethreescenariosforourcases:

ControllingRGBLEDControllingLEDbrightnessReadingAnaloginputusingPotentiometer

Let’sstart.

Page 40: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

4.2DemoAnalogOutput(PWM):RGBLED

InthisscenariowebuildaprogramtocontrolRGBLEDcolorusingArduinoAnalogoutput(PWM).

PleasebecarefulifyouwanttoworkwithArduinoPWM.IfyouhaveArduinoMega,youwillseePWMlabelsoyouobtainPWMpinseasilybutifyouhaveArduinoUno,itwritesDIGITAL(PWM~).ItmeansyourPWMpinscanbefoundonDIGITALpinswhichpinwith~,forinstance,~3,~5,~6,~9,~10,~11.

ForArduinoMega2560,youcanseePWMpinsonpicturebelow(seeredarrow).

ForArduinoUnoR3,youcanseePWMpinsasbelow.

Page 41: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

RGBLEDhas4pinsthatyoucanseeitonFigurebelow.

Tounderstandthesepins,youcanseethefollowingFigure.

Note:

Pin1:RedPin2:CommonpinPin3:Green

Page 42: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

Pin4:Blue

Nowwecanstarttobuildaprogramandhardwareimplementation.

4.2.1Wiring

FirstlyweimplementRGBLEDhardware.Thefollowingisahardwareschema.

Forourtesting,weconfigurethefollowingPWMpins.

ArduinoMega2560:

RGBLEDpin1(red)isconnectedtoArduinoPWMpin3RGBLEDpin2isconnectedtoArduinoVCC5VRGBLEDpin3(green)isconnectedtoArduinoPWMpin5RGBLEDpin4(blue)isconnectedtoArduinoPWMpin6

ArduinoUnoR3:

RGBLEDpin1(red)isconnectedtoArduinoPWMpin3

Page 43: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

RGBLEDpin2isconnectedtoArduinoVCC5VRGBLEDpin3(green)isconnectedtoArduinoPWMpin5RGBLEDpin4(blue)isconnectedtoArduinoPWMpin6

HereisasampleimplementationwithArduinoUnoR3.

4.2.2WritingProgram

Todisplayacertaincolor,wemustcombinecolorsfromred,green,blue.MATLABprovidesAPIforPWMlikeArduinoAPIsuchaswritePWMDutyCycle()withanalogvaluefrom0to1.

Let”sstarttobuildaprogram.Firstly,openMATLAB.Then,writethesescripts.function[]=led_rgb()

board=arduino();

finishup=onCleanup(@()exitprogram(board));

configurePin(board,'D3','PWM');

configurePin(board,'D5','PWM');

configurePin(board,'D6','PWM');

disp('pressCtr-Ctoexit');

while1

disp('red');

write_rgb(board,0,1,1);%red

pause(1);

disp('green');

Page 44: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

write_rgb(board,1,0,1);%green

pause(1);

disp('blue');

write_rgb(board,1,1,0);%blue

pause(1);

disp('yellow');

write_rgb(board,0,0,1);%yellow

pause(1);

disp('purple');

write_rgb(board,0.3,1,0.3);%purple

pause(1);

disp('aqua');

write_rgb(board,1,0,0);%aqua

pause(1);

end

end

%testingforArduinoUno

functionwrite_rgb(board,r,g,b)

writePWMDutyCycle(board,'D3',r);

writePWMDutyCycle(board,'D5',g);

writePWMDutyCycle(board,'D6',b);

end

functionexitprogram(b)

clearb;

disp('programhasexit');

end

Savethisprogramasled_rgb.m.

Thisprogramwillgeneratesixcolors:red,green,blue,yellow,purple,andaqua.

4.2.3Testing

Uploadandruntheprogram.YoushouldseeseveralcoloronRGBLED.>>led_rgb

ThefollowingisasampledemoonCommandWindowonMATLAB.

Page 45: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

Thefollowingisasampledemoonhardware.

Page 46: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping
Page 47: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

4.3DemoAnalogOutputVoltage:LEDBrightness

Inthisdemo,wetrytocontrolLEDbrightnessbycontrollingvoltageonLED.MATLABforArduinosupportprovideswritePWMVoltage()functiontosetvoltageonPWMpins.Wecansetavoltagevaluefrom0to5forArduinoUno/Megaand0-3.3forArduinoDue.

Let’sbuild.

4.3.1Wiring

WeconnectaLEDonPWMpinondigitalpin3.Thefollowingismyhardwarewiring.

4.3.2WritingaProgram

NowyoucanopenMATLABandwritethesescripts.function[]=led_brightness()

board=arduino();

finishup=onCleanup(@()exitprogram(board));

configurePin(board,'D3','PWM');

disp('pressCtr-Ctoexit');

Page 48: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

while1

fork=0:5

writePWMVoltage(board,'D3',k);

pause(1);

end

fork=5:-1:0

writePWMVoltage(board,'D3',k);

pause(1);

end

end

end

functionexitprogram(b)

clearb;

disp('programhasexit');

end

Savethesescriptsintoafile,calledled_brightness.m.

ThisprogramwillsetvoltagevalueonPWMpinondigitalpin3from0to5andthensetavaluefrom5to0too.

4.3.3Testing

MakesureArduinoboardalreadyconnectedtoyourcomputer.Youcanruntheprogrambytypingthiscommand.

>>led_brightness

Onhardwareside,youshouldseeLEDbrightnesschanginggradually.

Page 49: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping
Page 50: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

4.4DemoAnalogInput:WorkingwithPotentiometer

Inthissection,welearnhowtoreadanaloginputonArduinoboard.Forillustration,IusePotentiometerasanaloginputsource.OurscenarioistoreadanalogvaluefromPotentiometer.Then,displayitonconsole.

Let’sstart!.

4.4.1Wiring

TounderstandPotentiometer,youseeitsschemeinFigurebelow.

YoucanconnectVCCtoArduinoboardonVCC+5Vpin.VouttoArduinoboardAnaloginputA0.Inaddition,GNDtoArduinoboardGND.Thefollowingishardwareimplementation.Iuseslidepotentiometer.

Page 51: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

4.4.2WritingProgram

Firstly,createaprogramviaMATLAB.Toreadanaloginput,wecanusereadVoltage()function.Ok,Let’swritethesescripts.

function[]=potentiometer()

board=arduino();

finishup=onCleanup(@()exitprogram(board));

disp('pressCtr-Ctoexit');

while1

analog=readVoltage(board,'A0');

disp(['analog=',num2str(analog)]);

pause(1);

end

end

functionexitprogram(b)

clearb;

disp('programhasexit');

end

Savethiscodeaspotentiometer.m

Page 52: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

4.4.3Testing

Toruntheprogram,youcantypethiscommand.>>potentiometer

YoushouldseeanalogvalueonCommandWindow.

Page 53: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

5.WorkingwithI2C

InthischapterwelearnhowtoworkwithI2ConArduinoboardusingMATLAB.

Page 54: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

5.1GettingStarted

TheI2C(Inter-IntegratedCircuit)buswasdesignedbyPhilipsintheearly’80stoalloweasycommunicationbetweencomponentswhichresideonthesamecircuitboard.TWIstandsforTwoWireInterfaceandformostmartsthisbusisidenticaltoI²C.ThenameTWIwasintroducedbyAtmelandothercompaniestoavoidconflictswithtrademarkissuesrelatedtoI²C.

I2Cbusconsistsoftwowires,SDA(SerialDataLine)andSCL(SerialClockLine).YoucanseeI2CpinsonArduinoboardasfollows:

ArduinoUno:A4pinasSDAandA5asSCLpinArduinoMega2560:Digitalpin20asSDAandDigitalpin21asSCL

MATLABforArduinosupportprovidesseveralfunctionstoaccessI2Cprotocol.Youcanreaditonhttp://www.mathworks.com/help/supportpkg/arduinoio/i2c-sensors.html.

Fortesting,IusedPCF8591AD/DAConvertermodulewithsensorandactuatordevices.Youcanfinditonthefollowingonlinestore:

Amazon,http://www.amazon.com/PCF8591-Converter-Module-Digital-Conversion/dp/B00BXX4UWC/eBay,http://www.ebay.comDealextreme,http://www.dx.com/p/pcf8591-ad-da-analog-to-digital-digital-to-analog-converter-module-w-dupont-cable-deep-blue-336384Aliexpress,http://www.aliexpress.com/

Inaddition,youcanfindthisdeviceonyourlocalelectronicsstore/onlinestore.

Page 55: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

Thismodulehasminiformmodeltoo,forinstance,youcanfinditonAmazon,http://www.amazon.com/WaveShare-PCF8591T-Converter-Evaluation-Development/dp/B00KM6X2OI/.

ThismoduleusePCF8591ICandyoucanreadthedatasheetonthefollowingURLs.

http://www.electrodragon.com/w/images/e/ed/PCF8591.pdfhttp://www.nxp.com/documents/data_sheet/PCF8591.pdf

Page 56: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

Inthischapter,webuildaprogramtoaccesssensorviaI2CusingArduinosoftwareonArduinoboard.

Page 57: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

5.2WritingProgram

WeusePCF8591AD/DAConverterasI2Csource.YoucanconnectPCF8591AD/DAConvertertoArduinoboarddirectly.Inthisdemo,IuseArduinoUno.

Thefollowingisourwiringlab

PCF8591AD/DAConverterSDA—>ArduinoSDA(A4)PCF8591AD/DAConverterSCL—>ArduinoCLK(A5)PCF8591AD/DAConverterVCC—>ArduinoVCC+5VPCF8591AD/DAConverterGND—>ArduinoGND

HardwareimplementationcanbeshowninFigurebelow.

Page 58: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

5.3Demo1:ScanningI2C

AfterattachedoursensortoArduino,wecanscanourI2CaddressusingscanI2CBus()function.OnArduinoUno,weuse0forI2C.

Writethesescripts.board=arduino();

address=scanI2CBus(board,0);%uno=0

disp(['i2caddress:',address]);

clearboard;

Savetheprogramintoafile,calledi2c_scan.m.

Runtheprogram.>>i2c_scan

OnCommandWindow,youshouldseeI2Caddressofsensordevice.Forinstance,mysensorwasdetectedon0x48.

I2Caddresswillbeusedonthenextdemo.

Page 59: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

5.4Demo2:ReadingDatafromSensorBasedI2C

WeuseI2ConArduinoboardusingi2cobject,seehttp://www.mathworks.com/help/supportpkg/arduinoio/i2c-sensors.html.PCF8591AD/DAConvertermodulehasthreesensordevices:Thermistor,Photo-voltaiccellandPotentiometer.ThismodulerunsonI2Cbuswithaddress0x48.Inthiscase,wereadallsensordata.

Writethesescripts.function[]=i2c_sensor()

board=arduino();

finishup=onCleanup(@()exitprogram(board));

disp('pressCtr-Ctoexit');

PCF8591='0x48';

PCF8591_ADC_CH0='40';%thermistor

PCF8591_ADC_CH1='41';%photo-voltaic

PCF8591_ADC_CH3='43';%potentiometer

i2c=i2cdev(board,PCF8591);

disp(['thermistor','photo','potentiometer']);

while1

thermistor=read_adc(i2c,hex2dec(PCF8591_ADC_CH0));

pause(0.5);

photo=read_adc(i2c,hex2dec(PCF8591_ADC_CH1));

pause(0.5);

potentiometer=read_adc(i2c,hex2dec(PCF8591_ADC_CH3));

pause(0.5);

disp([thermistor,photo,potentiometer]);

end

end

functionadc=read_adc(dev,config)

write(dev,config);

read(dev,1);

out=read(dev,1);

adc=out;

end

functionexitprogram(b)

clearb;

disp('programhasexit');

end

Savethesescriptsintoafile,calledi2c_sensor.m.

Runtheprogram.>>i2c_sensor

Page 60: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

Ifsuccess,youshouldseevaluesforThermistor,Photo-voltaic,andpotentiometer.

Page 61: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

6.WorkingwithSPI

InthischapterI’mgoingtoexplainhowtoworkwithSPIonArduinoboardusingMATLAB.

Page 62: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

6.1GettingStarted

TheSerialPeripheralInterface(SPI)isacommunicationbusthatisusedtointerfaceoneormoreslaveperipheralintegratedcircuits(ICs)toasinglemasterSPIdevice;usuallyamicrocontrollerormicroprocessorofsomesort.

SPIinArduinoUnoboardcanbedefinedonthefollowingpins:

MOSIonDigitalpin11MISOonDigitalpin12SCKonDigitalpin13SSonDigitalpin10

IfyouhaveArduinoMega,thefollowingisitsSPIpins:

MOSIonDigitalpin51MISOonDigitalpin50SCKonDigitalpin52SSonDigitalpin53

Ingeneral,youlearnSPIusingMATLABonthisdocument,http://www.mathworks.com/help/supportpkg/arduinoio/spi-sensors.html.ToaccessSPIonArduinoboardfromMATLAB,wecandothefollowingsteps:

OpenArduinocommunicationbycreatingarduinoobjectOpenSPIconnectionbycallingspidevwithpassingSSpin,http://www.mathworks.com/help/supportpkg/arduinoio/ref/spidev.htmlTowriteandreadSPIdata,wecanusewriteReadwithpassingspidevobject,http://www.mathworks.com/help/supportpkg/arduinoio/ref/writeread.html

Inthischapter,webuildaSPILoopbackapp.Let’sstart!.

Page 63: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

6.2Demo:SPILoopback

TodevelopSPIloopback,wecanconnectMOSIpintoMISOpin.Thismeansyouconnectpin11topin12usingcable.

Thefollowingisasampleofwiring.

OnMATLAB,youcanwritethsesscripts.function[]=spi_loopback()

board=arduino();

finishup=onCleanup(@()exitprogram(board));

spi=spidev(board,10);

k=3;

m=10;

n=30;

disp('pressCtr-Ctoexit');

while1

disp('datain:');

dataIn=[kmn];

disp(dataIn);

dataOut=writeRead(spi,dataIn);

disp('dataout:');

disp(dataOut);

pause(1.5);

k=k+1;

m=m+1;

n=n+1;

end

end

Page 64: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

functionexitprogram(b)

clearb;

disp('programhasexit');

end

Savethesescriptsintoafile,callsedspi_loopback.m.Then,runthisprogramonCommandWindowsofMATLAB.

>>spi_loopback

AsampleoutputprogramcanbeseeninFigurebelow.

Page 65: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

7.WorkingwithServoMotor

InthischapterI’mgoingtoexplainhowtoworkwithservomotoronArduinoboardusingMATLAB.

Page 66: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

7.1GettingStarted

Servomotorprovidesashaftmovement360degree.Wecancontrolthismovementbasedonitsdegree.Inthisscenario,youcanuseanyDCmotor(servo)thatwillbeconnectedtoArduino.IusedaminiservofromArduinoSidekickBasickit.

Thefollowingisapictureofmyminiservomotor.

Tounderstandservo’scables,youcanidentifyasfollows:

Redcableisbeconnectedto5VBlackorbrowncableisbeconnectedtoGNDTherest(yellowororangecable)isbeconnectedtoArduinoPWMpin

ThenextstepwearegoingtobuildaMATLABprogramwithArduinoandservomotor.

Page 67: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

7.2Wiring

Tobuildhardwareimplementation,youcanconnectservomotortoArduinobyfollowingconfiguration:

Redcableisbeconnectedto5VBlackorbrowncableisbeconnectedtoGNDTherest(yellowororangecable)isbeconnectedtoArduinoPWMpin.Iusedpin10forArduinoUnoR3orArduinoMega2560

Thefollowingisasampleofhardwareimplementation.

Page 68: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

7.3WritingaMatlabProgram

Wecanuseservoobjecttocontrolservermotor.Youcanreaditonhttp://www.mathworks.com/help/supportpkg/arduinoio/servo-motors.html.Webuildaprogramtorunaservomotorfromposition0to1usingwritePosition()function.

Writethesescripts.function[]=servo_motor()

board=arduino();

finishup=onCleanup(@()exitprogram(board));

motor=servo(board,'D10');

disp('pressCtr-Ctoexit');

while1

forpos=0:0.25:1

disp(['position:',num2str(pos)]);

writePosition(motor,pos);

pause(1);

end

forpos=1:-0.25:0

disp(['position:',num2str(pos)]);

writePosition(motor,pos);

pause(1);

end

end

end

functionexitprogram(b)

clearb;

disp('programhasexit');

end

Savethesescritpsintoafile,servo_motor.m.

Page 69: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

7.4Testing

NowyoucanruntheprogramonCommandWindowfromMATLAB.>>servo_motor

Youshouldseeservormotorisrunningfromdegree0to180andthenbackagainfromdegree180to0.

AsampleoutputprogramcanbeseeninFigurebelow.

Page 70: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

8.MeasuringandPlottingSensorDatainReal-Time

InthischapterI’mgoingtoexplainhowtoreaddatafromsensordevicesandplotitongraphinreal-time.

Page 71: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

8.1GettingStarted

Thissectionhasanobjectivetoshowhowtoworkwithareal-timeonmeasurement.Wereaddatafromsensordevicesanddisplayitongraph.

Let’sstart!.

Page 72: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

8.2Wiring

Weusethesamewiringfromsection5.2

Page 73: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

8.3WritingaProgram

NowyourunMATLABandwritethesescripts.function[]=sensing()

board=arduino();

disp('pressCtr-Ctoexit');

h=figure(1);

finishup=onCleanup(@()exitprogram(board,h));

PCF8591='0x48';

PCF8591_ADC_CH0='40';%thermistor

PCF8591_ADC_CH1='41';%photo-voltaic

PCF8591_ADC_CH3='43';%potentiometer

i2c=i2cdev(board,PCF8591);

hLine1=line(nan,nan,'Color','red');

hLine2=line(nan,nan,'Color','blue');

hLine3=line(nan,nan,'Color','black');

i=0;

while1

thermistor=read_adc(i2c,hex2dec(PCF8591_ADC_CH0));

pause(0.5);

photo=read_adc(i2c,hex2dec(PCF8591_ADC_CH1));

pause(0.5);

potentiometer=read_adc(i2c,hex2dec(PCF8591_ADC_CH3));

pause(0.5);

x1=get(hLine1,'XData');

y1=get(hLine1,'YData');

x2=get(hLine2,'XData');

y2=get(hLine2,'YData');

x3=get(hLine3,'XData');

y3=get(hLine3,'YData');

x1=[x1i];

y1=[y1thermistor];

x2=[x2i];

y2=[y2photo];

x3=[x3i];

y3=[y3potentiometer];

set(hLine1,'XData',x1,'YData',y1);

set(hLine2,'XData',x2,'YData',y2);

set(hLine3,'XData',x3,'YData',y3);

i=i+1;

pause(1);

end

end

functionadc=read_adc(dev,config)

Page 74: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

write(dev,config);

read(dev,1);

out=read(dev,1);

adc=out;

end

functionexitprogram(b,h)

clearb;

close(h);

disp('programhasexit');

end

Savetheprogramintoafile,calledsensing.m.

Basically,theprogramissimilartoprogramfromsection5.4.Afterreadsensordata,wedisplayitusinglineobjectfromMATLAB.

Page 75: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

8.4Testing

Youcanruntheprogrambytypingthiscommand.>>sensing

YoushouldseesensordataonFigure.

Page 76: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

SourceCode

Youcandownloadsourcecodeonhttp://www.aguskurniawan.net/book/matprog_120x15.zip.

Page 77: Arduino Programming using MATLAB - labcontrol.xyzlabcontrol.xyz/...media=wiki:arduino_programming_using_matlab... · 1.1 Arduino Arduino is an open-source electronics prototyping

Contact

Ifyouhavequestionrelatedtothisbook,[email protected]:http://blog.aguskurniawan.net