\contentsline {chapter}{\numberline {Preface}}{xi}{chapter*.2}% \contentsline {chapter}{\numberline {List of Figures}}{xiii}{chapter*.3}% \contentsline {chapter}{\numberline {List of Tables}}{xix}{chapter*.4}% \contentsline {chapter}{\numberline {List of Arduino \ Code}}{xxi}{chapter*.5}% \contentsline {chapter}{\numberline {List of Scilab Code}}{xxiii}{chapter*.6}% \contentsline {chapter}{\numberline {List of Python \ Code}}{xxv}{chapter*.7}% \contentsline {chapter}{\numberline {List of Julia\ Code}}{xxvii}{chapter*.8}% \contentsline {chapter}{\numberline {List of OpenModelica\ Code}}{xxix}{chapter*.9}% \thispagestyle {empty} \contentsline {chapter}{\numberline {List of Acronyms}}{xxxii}{chapter*.10}% \contentsline {chapter}{\numberline {1}Introduction}{1}{chapter.1}% \contentsline {chapter}{\numberline {2}Hardware Environment}{5}{chapter.2}% \contentsline {section}{\numberline {2.1}Microcontroller}{5}{section.2.1}% \contentsline {subsection}{\numberline {2.1.1}Organization of a Microcontroller}{6}{subsection.2.1.1}% \contentsline {subsection}{\numberline {2.1.2}Microcontroller Peripherals}{7}{subsection.2.1.2}% \contentsline {section}{\numberline {2.2}Open Source Hardware (OSHW)}{10}{section.2.2}% \contentsline {section}{\numberline {2.3}Arduino}{11}{section.2.3}% \contentsline {subsection}{\numberline {2.3.1}Brief History}{12}{subsection.2.3.1}% \contentsline {subsection}{\numberline {2.3.2}Arduino Uno Board}{12}{subsection.2.3.2}% \contentsline {subsection}{\numberline {2.3.3}Popular Arduino Projects}{14}{subsection.2.3.3}% \contentsline {paragraph}{Arduino phone:}{14}{section*.18}% \contentsline {paragraph}{Candy sorting machine:}{15}{section*.20}% \contentsline {paragraph}{3D printers:}{15}{section*.21}% \contentsline {section}{\numberline {2.4}Shield}{15}{section.2.4}% \contentsline {section}{\numberline {2.5}Experimental Test Bed}{19}{section.2.5}% \contentsline {section}{\numberline {2.6}Doing the Experiments with a Breadboard}{20}{section.2.6}% \contentsline {chapter}{\numberline {3}Communication between Software and Arduino}{21}{chapter.3}% \contentsline {section}{\numberline {3.1}Arduino IDE}{22}{section.3.1}% \contentsline {subsection}{\numberline {3.1.1}Downloading and installing on Windows}{22}{subsection.3.1.1}% \contentsline {subsection}{\numberline {3.1.2}Downloading and installing on GNU/Linux Ubuntu}{23}{subsection.3.1.2}% \contentsline {subsection}{\numberline {3.1.3}Arduino Development Environment}{26}{subsection.3.1.3}% \contentsline {subsection}{\numberline {3.1.4}Testing Arduino with a sample program}{29}{subsection.3.1.4}% \contentsline {subsection}{\numberline {3.1.5}FLOSS Firmware}{30}{subsection.3.1.5}% \contentsline {section}{\numberline {3.2}Scilab}{31}{section.3.2}% \contentsline {subsection}{\numberline {3.2.1}Downloading and installing on Windows}{32}{subsection.3.2.1}% \contentsline {subsection}{\numberline {3.2.2}Downloading and installing on GNU/Linux Ubuntu}{32}{subsection.3.2.2}% \contentsline {subsection}{\numberline {3.2.3}Scilab-Arduino toolbox}{33}{subsection.3.2.3}% \contentsline {subsection}{\numberline {3.2.4}Identifying Arduino communication port number}{36}{subsection.3.2.4}% \contentsline {subsection}{\numberline {3.2.5}Testing Scilab-Arduino toolbox}{39}{subsection.3.2.5}% \contentsline {subsection}{\numberline {3.2.6}Firmware}{42}{subsection.3.2.6}% \contentsline {section}{\numberline {3.3}Xcos}{42}{section.3.3}% \contentsline {subsection}{\numberline {3.3.1}Downloading, installing and testing}{42}{subsection.3.3.1}% \contentsline {subsection}{\numberline {3.3.2}Use case}{44}{subsection.3.3.2}% \contentsline {subsection}{\numberline {3.3.3}Xcos-Arduino}{47}{subsection.3.3.3}% \contentsline {section}{\numberline {3.4}Python}{48}{section.3.4}% \contentsline {subsection}{\numberline {3.4.1}Downloading and installing on Windows}{49}{subsection.3.4.1}% \contentsline {subsection}{\numberline {3.4.2}Downloading and installing on GNU/Linux Ubuntu}{52}{subsection.3.4.2}% \contentsline {subsection}{\numberline {3.4.3}Python-Arduino toolbox}{53}{subsection.3.4.3}% \contentsline {subsection}{\numberline {3.4.4}Firmware}{54}{subsection.3.4.4}% \contentsline {section}{\numberline {3.5}Julia}{56}{section.3.5}% \contentsline {subsection}{\numberline {3.5.1}Downloading and installing on Windows}{56}{subsection.3.5.1}% \contentsline {subsection}{\numberline {3.5.2}Downloading and installing GNU/Linux Ubuntu}{61}{subsection.3.5.2}% \contentsline {subsection}{\numberline {3.5.3}Julia-Arduino toolbox}{65}{subsection.3.5.3}% \contentsline {subsection}{\numberline {3.5.4}Firmware}{66}{subsection.3.5.4}% \contentsline {section}{\numberline {3.6}OpenModelica}{66}{section.3.6}% \contentsline {subsection}{\numberline {3.6.1}Downloading and installing on Windows}{67}{subsection.3.6.1}% \contentsline {subsection}{\numberline {3.6.2}Downloading and installing on GNU/Linux Ubuntu}{68}{subsection.3.6.2}% \contentsline {subsection}{\numberline {3.6.3}Simulating models in OpenModelica}{69}{subsection.3.6.3}% \contentsline {subsection}{\numberline {3.6.4}OpenModelica-Arduino toolbox}{75}{subsection.3.6.4}% \contentsline {subsection}{\numberline {3.6.5}Firmware}{76}{subsection.3.6.5}% \contentsline {chapter}{\numberline {4}Interfacing a Light Emitting Diode}{79}{chapter.4}% \contentsline {section}{\numberline {4.1}Preliminaries}{79}{section.4.1}% \contentsline {section}{\numberline {4.2}Connecting an RGB LED using breadboard}{81}{section.4.2}% \contentsline {section}{\numberline {4.3}Lighting the LED from Arduino IDE}{82}{section.4.3}% \contentsline {subsection}{\numberline {4.3.1}Lighting the LED}{82}{subsection.4.3.1}% \contentsline {paragraph}{Note:}{84}{section*.78}% \contentsline {paragraph}{Note:}{84}{section*.80}% \contentsline {subsection}{\numberline {4.3.2}Arduino Code}{85}{subsection.4.3.2}% \contentsline {section}{\numberline {4.4}Lighting the LED from Scilab}{87}{section.4.4}% \contentsline {subsection}{\numberline {4.4.1}Lighting the LED}{87}{subsection.4.4.1}% \contentsline {subsection}{\numberline {4.4.2}Scilab Code}{89}{subsection.4.4.2}% \contentsline {section}{\numberline {4.5}Lighting the LED from Scilab Xcos}{91}{section.4.5}% \contentsline {section}{\numberline {4.6}Lighting the LED from Python}{96}{section.4.6}% \contentsline {subsection}{\numberline {4.6.1}Lighting the LED}{96}{subsection.4.6.1}% \contentsline {subsection}{\numberline {4.6.2}Python Code}{99}{subsection.4.6.2}% \contentsline {section}{\numberline {4.7}Lighting the LED from Julia}{103}{section.4.7}% \contentsline {subsection}{\numberline {4.7.1}Lighting the LED}{103}{subsection.4.7.1}% \contentsline {subsection}{\numberline {4.7.2}Julia Code}{105}{subsection.4.7.2}% \contentsline {section}{\numberline {4.8}Lighting the LED from OpenModelica}{106}{section.4.8}% \contentsline {subsection}{\numberline {4.8.1}Lighting the LED}{106}{subsection.4.8.1}% \contentsline {subsection}{\numberline {4.8.2}OpenModelica Code}{109}{subsection.4.8.2}% \contentsline {chapter}{\numberline {5}Interfacing a Pushbutton}{113}{chapter.5}% \contentsline {section}{\numberline {5.1}Preliminaries}{113}{section.5.1}% \contentsline {section}{\numberline {5.2}Connecting a pushbutton using breadboard}{115}{section.5.2}% \contentsline {section}{\numberline {5.3}Reading pushbutton status from Arduino IDE}{116}{section.5.3}% \contentsline {subsection}{\numberline {5.3.1}Reading the pushbutton status}{116}{subsection.5.3.1}% \contentsline {subsection}{\numberline {5.3.2}Arduino Code}{118}{subsection.5.3.2}% \contentsline {section}{\numberline {5.4}Reading pushbutton Status from Scilab}{119}{section.5.4}% \contentsline {subsection}{\numberline {5.4.1}Reading the pushbutton Status}{119}{subsection.5.4.1}% \contentsline {subsection}{\numberline {5.4.2}Scilab Code}{121}{subsection.5.4.2}% \contentsline {section}{\numberline {5.5}Accessing the pushbutton from Xcos}{122}{section.5.5}% \contentsline {section}{\numberline {5.6}Reading pushbutton status from Python}{125}{section.5.6}% \contentsline {subsection}{\numberline {5.6.1}Reading the pushbutton status}{125}{subsection.5.6.1}% \contentsline {subsection}{\numberline {5.6.2}Python Code}{127}{subsection.5.6.2}% \contentsline {section}{\numberline {5.7}Reading pushbutton status from Julia}{129}{section.5.7}% \contentsline {subsection}{\numberline {5.7.1}Reading the pushbutton status}{129}{subsection.5.7.1}% \contentsline {subsection}{\numberline {5.7.2}Julia Code}{130}{subsection.5.7.2}% \contentsline {section}{\numberline {5.8}Reading pushbutton status from OpenModelica}{131}{section.5.8}% \contentsline {subsection}{\numberline {5.8.1}Reading the pushbutton status}{131}{subsection.5.8.1}% \contentsline {subsection}{\numberline {5.8.2}OpenModelica Code}{133}{subsection.5.8.2}% \contentsline {chapter}{\numberline {6}Interfacing a Light Dependent Resistor}{137}{chapter.6}% \contentsline {section}{\numberline {6.1}Preliminaries}{137}{section.6.1}% \contentsline {section}{\numberline {6.2}Connecting an LDR using breadboard}{139}{section.6.2}% \contentsline {section}{\numberline {6.3}Interfacing LDR through Arduino IDE}{141}{section.6.3}% \contentsline {subsection}{\numberline {6.3.1}Interfacing the LDR}{141}{subsection.6.3.1}% \contentsline {subsection}{\numberline {6.3.2}Arduino Code}{142}{subsection.6.3.2}% \contentsline {section}{\numberline {6.4}Interfacing the LDR through Scilab}{143}{section.6.4}% \contentsline {subsection}{\numberline {6.4.1}Interfacing the LDR}{143}{subsection.6.4.1}% \contentsline {subsection}{\numberline {6.4.2}Scilab Code}{145}{subsection.6.4.2}% \contentsline {section}{\numberline {6.5}Interfacing the LDR through Xcos}{146}{section.6.5}% \contentsline {section}{\numberline {6.6}Interfacing LDR through Python}{149}{section.6.6}% \contentsline {subsection}{\numberline {6.6.1}Interfacing the LDR}{149}{subsection.6.6.1}% \contentsline {subsection}{\numberline {6.6.2}Python Code}{152}{subsection.6.6.2}% \contentsline {section}{\numberline {6.7}Interfacing LDR through Julia}{155}{section.6.7}% \contentsline {subsection}{\numberline {6.7.1}Interfacing the LDR}{155}{subsection.6.7.1}% \contentsline {subsection}{\numberline {6.7.2}Julia Code}{156}{subsection.6.7.2}% \contentsline {section}{\numberline {6.8}Interfacing LDR through OpenModelica}{157}{section.6.8}% \contentsline {subsection}{\numberline {6.8.1}Interfacing the LDR}{157}{subsection.6.8.1}% \contentsline {subsection}{\numberline {6.8.2}OpenModelica Code}{159}{subsection.6.8.2}% \contentsline {chapter}{\numberline {7}Interfacing a Potentiometer}{161}{chapter.7}% \contentsline {section}{\numberline {7.1}Preliminaries}{161}{section.7.1}% \contentsline {section}{\numberline {7.2}Connecting a potentiometer using breadboard}{163}{section.7.2}% \contentsline {section}{\numberline {7.3}Reading potentiometer from Arduino IDE}{164}{section.7.3}% \contentsline {subsection}{\numberline {7.3.1}Reading the potentiometer}{164}{subsection.7.3.1}% \contentsline {subsection}{\numberline {7.3.2}Arduino Code}{165}{subsection.7.3.2}% \contentsline {section}{\numberline {7.4}Reading potentiometer from Scilab}{166}{section.7.4}% \contentsline {subsection}{\numberline {7.4.1}Reading the potentiometer}{166}{subsection.7.4.1}% \contentsline {subsection}{\numberline {7.4.2}Scilab Code}{167}{subsection.7.4.2}% \contentsline {section}{\numberline {7.5}Reading potentiometer from Xcos}{168}{section.7.5}% \contentsline {section}{\numberline {7.6}Reading potentiometer from Python}{169}{section.7.6}% \contentsline {subsection}{\numberline {7.6.1}Reading the potentiometer}{169}{subsection.7.6.1}% \contentsline {subsection}{\numberline {7.6.2}Python Code}{170}{subsection.7.6.2}% \contentsline {section}{\numberline {7.7}Reading potentiometer from Julia}{172}{section.7.7}% \contentsline {subsection}{\numberline {7.7.1}Reading the potentiometer}{172}{subsection.7.7.1}% \contentsline {subsection}{\numberline {7.7.2}Julia Code}{173}{subsection.7.7.2}% \contentsline {section}{\numberline {7.8}Reading potentiometer from OpenModelica}{174}{section.7.8}% \contentsline {subsection}{\numberline {7.8.1}Reading the potentiometer}{174}{subsection.7.8.1}% \contentsline {subsection}{\numberline {7.8.2}OpenModelica Code}{175}{subsection.7.8.2}% \contentsline {chapter}{\numberline {8}Interfacing a Thermistor}{179}{chapter.8}% \contentsline {section}{\numberline {8.1}Preliminaries}{179}{section.8.1}% \contentsline {section}{\numberline {8.2}Connecting a thermistor using breadboard}{180}{section.8.2}% \contentsline {section}{\numberline {8.3}Interfacing thermistor from Arduino IDE}{183}{section.8.3}% \contentsline {subsection}{\numberline {8.3.1}Interfacing the thermistor}{183}{subsection.8.3.1}% \contentsline {paragraph}{Note:}{185}{section*.115}% \contentsline {subsection}{\numberline {8.3.2}Arduino Code}{185}{subsection.8.3.2}% \contentsline {section}{\numberline {8.4}Interfacing thermistor from Scilab}{187}{section.8.4}% \contentsline {subsection}{\numberline {8.4.1}Interfacing the thermistor}{187}{subsection.8.4.1}% \contentsline {paragraph}{Note:}{189}{section*.116}% \contentsline {subsection}{\numberline {8.4.2}Scilab Code}{190}{subsection.8.4.2}% \contentsline {section}{\numberline {8.5}Interfacing thermistor from Xcos}{191}{section.8.5}% \contentsline {paragraph}{Note:}{195}{section*.123}% \contentsline {section}{\numberline {8.6}Interfacing thermistor from Python}{196}{section.8.6}% \contentsline {subsection}{\numberline {8.6.1}Interfacing the thermistor}{196}{subsection.8.6.1}% \contentsline {paragraph}{Note:}{198}{section*.124}% \contentsline {subsection}{\numberline {8.6.2}Python Code}{198}{subsection.8.6.2}% \contentsline {section}{\numberline {8.7}Interfacing thermistor from Julia}{201}{section.8.7}% \contentsline {subsection}{\numberline {8.7.1}Interfacing the thermistor}{201}{subsection.8.7.1}% \contentsline {paragraph}{Note:}{203}{section*.125}% \contentsline {subsection}{\numberline {8.7.2}Julia Code}{203}{subsection.8.7.2}% \contentsline {section}{\numberline {8.8}Interfacing thermistor from OpenModelica}{204}{section.8.8}% \contentsline {subsection}{\numberline {8.8.1}Interfacing the thermistor}{204}{subsection.8.8.1}% \contentsline {paragraph}{Note:}{206}{section*.126}% \contentsline {subsection}{\numberline {8.8.2}OpenModelica Code}{206}{subsection.8.8.2}% \contentsline {chapter}{\numberline {9}Interfacing a Servomotor}{209}{chapter.9}% \contentsline {section}{\numberline {9.1}Preliminaries}{209}{section.9.1}% \contentsline {section}{\numberline {9.2}Connecting a servomotor using breadboard}{211}{section.9.2}% \contentsline {section}{\numberline {9.3}Controlling servomotor through Arduino IDE}{212}{section.9.3}% \contentsline {subsection}{\numberline {9.3.1}Controlling the servomotor}{212}{subsection.9.3.1}% \contentsline {subsection}{\numberline {9.3.2}Arduino Code}{215}{subsection.9.3.2}% \contentsline {section}{\numberline {9.4}Controlling servomotor through Scilab}{218}{section.9.4}% \contentsline {subsection}{\numberline {9.4.1}Controlling the servomotor}{218}{subsection.9.4.1}% \contentsline {subsection}{\numberline {9.4.2}Scilab Code}{220}{subsection.9.4.2}% \contentsline {section}{\numberline {9.5}Controling servomotor through Xcos}{222}{section.9.5}% \contentsline {section}{\numberline {9.6}Controlling servomotor through Python}{226}{section.9.6}% \contentsline {subsection}{\numberline {9.6.1}Controlling the servomotor}{226}{subsection.9.6.1}% \contentsline {subsection}{\numberline {9.6.2}Python Code}{230}{subsection.9.6.2}% \contentsline {section}{\numberline {9.7}Controlling servomotor through Julia}{234}{section.9.7}% \contentsline {subsection}{\numberline {9.7.1}Controlling the servomotor}{234}{subsection.9.7.1}% \contentsline {subsection}{\numberline {9.7.2}Julia Code}{237}{subsection.9.7.2}% \contentsline {section}{\numberline {9.8}Controlling servomotor through OpenModelica}{238}{section.9.8}% \contentsline {subsection}{\numberline {9.8.1}Controlling the servomotor}{238}{subsection.9.8.1}% \contentsline {subsection}{\numberline {9.8.2}OpenModelica Code}{241}{subsection.9.8.2}% \contentsline {chapter}{\numberline {10}Interfacing a DC Motor}{245}{chapter.10}% \contentsline {section}{\numberline {10.1}Preliminaries}{245}{section.10.1}% \contentsline {section}{\numberline {10.2}Controlling DC motor from Arduino IDE}{249}{section.10.2}% \contentsline {subsection}{\numberline {10.2.1}Controlling the DC motor}{249}{subsection.10.2.1}% \contentsline {paragraph}{Note:}{249}{section*.144}% \contentsline {subsection}{\numberline {10.2.2}Arduino Code}{251}{subsection.10.2.2}% \contentsline {section}{\numberline {10.3}Controlling DC motor from Scilab}{253}{section.10.3}% \contentsline {subsection}{\numberline {10.3.1}Controlling the DC motor}{253}{subsection.10.3.1}% \contentsline {paragraph}{Note:}{253}{section*.145}% \contentsline {paragraph}{Note:}{255}{section*.146}% \contentsline {subsection}{\numberline {10.3.2}Scilab Code}{256}{subsection.10.3.2}% \contentsline {section}{\numberline {10.4}Controlling DC motor from Xcos}{258}{section.10.4}% \contentsline {section}{\numberline {10.5}Controlling DC motor from Python}{262}{section.10.5}% \contentsline {subsection}{\numberline {10.5.1}Controlling the DC motor}{262}{subsection.10.5.1}% \contentsline {paragraph}{Note:}{262}{section*.153}% \contentsline {paragraph}{Note:}{265}{section*.154}% \contentsline {subsection}{\numberline {10.5.2}Python Code}{266}{subsection.10.5.2}% \contentsline {section}{\numberline {10.6}Controlling DC motor from Julia}{269}{section.10.6}% \contentsline {subsection}{\numberline {10.6.1}Controlling the DC motor}{269}{subsection.10.6.1}% \contentsline {paragraph}{Note:}{270}{section*.155}% \contentsline {paragraph}{Note:}{271}{section*.156}% \contentsline {subsection}{\numberline {10.6.2}Julia Code}{272}{subsection.10.6.2}% \contentsline {section}{\numberline {10.7}Controlling DC motor from OpenModelica}{274}{section.10.7}% \contentsline {subsection}{\numberline {10.7.1}Controlling the DC motor}{274}{subsection.10.7.1}% \contentsline {paragraph}{Note:}{274}{section*.157}% \contentsline {paragraph}{Note:}{276}{section*.158}% \contentsline {subsection}{\numberline {10.7.2}OpenModelica Code}{277}{subsection.10.7.2}% \contentsline {chapter}{\numberline {11}Implementation of Modbus Protocol}{281}{chapter.11}% \contentsline {section}{\numberline {11.1}Preliminaries}{281}{section.11.1}% \contentsline {subsection}{\numberline {11.1.1}Energy meter}{283}{subsection.11.1.1}% \contentsline {paragraph}{Note:}{286}{section*.165}% \contentsline {subsection}{\numberline {11.1.2}Endianness}{288}{subsection.11.1.2}% \contentsline {section}{\numberline {11.2}Setup for the experiment}{290}{section.11.2}% \contentsline {section}{\numberline {11.3}Software required for this experiment}{291}{section.11.3}% \contentsline {subsection}{\numberline {11.3.1}Arduino Firmware}{293}{subsection.11.3.1}% \contentsline {section}{\numberline {11.4}Implementing Modbus protocol using Scilab}{294}{section.11.4}% \contentsline {section}{\numberline {11.5}Reading electrical parameters from Scilab}{295}{section.11.5}% \contentsline {subsection}{\numberline {11.5.1}Reading the electrical parameters}{295}{subsection.11.5.1}% \contentsline {subsection}{\numberline {11.5.2}Scilab Code}{296}{subsection.11.5.2}% \contentsline {paragraph}{Note: }{297}{section*.173}% \contentsline {subsection}{\numberline {11.5.3}Output in the Scilab Console}{298}{subsection.11.5.3}% \contentsline {section}{\numberline {11.6}Reading electrical parameters from Xcos}{299}{section.11.6}% \contentsline {section}{\numberline {11.7}Implementing Modbus protocol using Python}{301}{section.11.7}% \contentsline {paragraph}{Note: }{303}{section*.182}% \contentsline {section}{\numberline {11.8}Reading electrical parameters from Python}{303}{section.11.8}% \contentsline {subsection}{\numberline {11.8.1}Reading the electrical parameters}{303}{subsection.11.8.1}% \contentsline {subsection}{\numberline {11.8.2}Python Code}{303}{subsection.11.8.2}% \contentsline {section}{\numberline {11.9}Implementing Modbus protocol using Julia}{305}{section.11.9}% \contentsline {paragraph}{Note: }{305}{section*.183}% \contentsline {section}{\numberline {11.10}Reading electrical parameters from Julia}{306}{section.11.10}% \contentsline {subsection}{\numberline {11.10.1}Reading the electrical parameters}{306}{subsection.11.10.1}% \contentsline {subsection}{\numberline {11.10.2}Julia Code}{306}{subsection.11.10.2}% \contentsline {section}{\numberline {11.11}Implementing Modbus protocol using OpenModelica}{307}{section.11.11}% \contentsline {paragraph}{Note: }{308}{section*.184}% \contentsline {section}{\numberline {11.12}Reading electrical parameters from OpenModelica}{308}{section.11.12}% \contentsline {subsection}{\numberline {11.12.1}Reading the electrical parameters}{308}{subsection.11.12.1}% \contentsline {subsection}{\numberline {11.12.2}OpenModelica Code}{308}{subsection.11.12.2}% \contentsline {chapter}{\numberline {A}Procuring the Hardware}{311}{appendix.A}% \contentsline {chapter}{\numberline {References}}{313}{appendix*.186}%