MAE 211—Mechatronics Lab #3: Introduction to Using the Data

advertisement
MAE 211—Mechatronics
Lab #3: Introduction to Using the Data
Acquisition Board
Objectives:
• Introduction to basic programming logic
• Familiarization with basic flowchart logic
• Familiarization with basic output and functions
• Use of if, for, while, switch, case, tone, pause, and display functions
Introduction:
Mechanical engineers often find themselves with a need to gather data using a
computer. Data acquisition is likely the most important aspect of an experiment. After all,
quantitative results tend to be more useful than the qualitative results that can be observed
with one’s naked eye. In this course, the data acquisition board (DAQ board) will be used
to output signals to motors or relays and to collect data from various types of sensors, as
could be done in a real world setting. In order to do so, some knowledge about using the
DAQ board must be obtained.
Fig. 3-1—DAQ Board
Part 1: MATLAB
MATLAB is used in this course as an interface between the DAQ board
and the user. MATLAB is a user-friendly, programmable application, with a wide
variety of uses beyond what will be experienced during the course of this lab.
Many of these functions are contained in the many toolboxes incorporated in
MATLAB. For the purposes of this course, MATLAB is a programming language
with which to instruct the DAQ board. As such, some simple programming skills
will be necessary. Keep in mind that for any function, you may access the help
file by typing “Help” and the function in the command line.
Part 2: Programming logic
In order to tell the DAQ board what you want it to do, you must give it a
program with a specific set of instructions for it to execute. Obviously, a
computer does not understand a command like a person does. A computer needs a
step by step account of exactly the tasks you want it to execute and when.
Computers “think” in a logical order. As such the commands you give will be
followed in order from start to finish.
In order to organize your program into a logical order, it is often useful,
and depending on the depth of the program, necessary, to make a flowchart. A
flowchart is a logical order of processes the computer should execute during a
program. This should be as detailed as necessary to explain the details of the
program to someone else. See Fig. 3-2 below for an example of a flowchart.
Fig. 3-1—Flowchart Shapes
Fig. 3-1—Flowchart for the for-loop program in this lab
Part 3: DAQ Board
The DAQ board is the unit the computer uses to “talk” to sensors, gather
data from them or send messages to them. The basic functionalities of the DAQ
board are digital input/digital output (DIO), analog input (AI), and analog output
(AO). Each of these important functions will be explained in-depth in future labs.
This lab is intended only to familiarize students with accessing the DAQ board to
send messages to or receive messages from it.
Experiments:
Experiment 1: Initializing
Open MATLAB by clicking on the desktop shortcut or finding it under the
Start menu. When MATLAB is ready, type “initialize” in the command
window, just as it appears in the quotation marks. If this is correct,
MATLAB should initialize the mechlab toolbox (the functions you will
use in this lab), and then “DAQ Initialized” will appear on the screen. You
will need to do this each time you open MATLAB, unless “DAQ
Initialized” already appears on the screen.
Experiment 2: Outputting to the screen
• Open a new file by clicking on the File Menu under MATLAB, select
New, then select M-File. Aside from giving MATLAB instructions one at
a time in the command window as with the initialize function, we may
also write an M-File and call it from the directory to send a whole program
at once. For multiple instructions, this is the better and more efficient way
to send code.
• In this M-File, type “clear” on the first line. MATLAB maintains all
variables and information in its memory until cleared by the user. This can
be a double-edged sword when writing complex programs so always be
sure to clear the memory using the “clear” command at the beginning of
your programs. It may also be useful in this lab to use the “initialize”
function at the beginning of each program to make sure the DAQ board is
reset each time you run the program. Obviously, you will not need to do
this outside of lab.
• Once the memory is cleared, it is time to begin programming. MATLAB
will execute commands in the order given, logically. Type the following
code into your M-File:
%Simple output function
disp(‘Hello world!’);
rand(3)
tone(1000.0, 1.0);
Save this file as myfile1.m under the desktop folder “Student Documents.”
Change the directory at the top of the MATLAB window to this folder by
clicking on the button “…” and selecting the “Student Documents” folder.
You may now use any M-File saved in this folder simply by typing its
name in the command window. Do this by typing “myfile1” in the
command line.
Notice the way that MATLAB displays the data. If in a program a line of
data should be displayed to the screen, do not place a semi-colon after it. If
you do not wish to see an output displayed, place a semi-colon after it.
This is called suppressing an output.
The “tone” function introduced above plays a sound. The user can define
this sound by first giving the frequency, then the duration in seconds
inside the parenthesis.
Experiment 3: Deciding statements and loops
• There are several different common statements used in programming.
The common ones are “if”, “for”, “while”, and “switch”/“case”. These
will be explored now.
• Type the following code:
clear
initialize
y=1;
if y<10
disp(‘y<10’);
end
You see that this executes the if-statement when run. Try changing the
value of y to something above 10. You should see that the if statement
is not executed. There are also if/else statements. Try changing your
code to the following:
clear
initialize
y=1;
if y<10
disp(‘y<10’);
else
•
disp(‘y>10’);
end
You should see that now, no matter the value of y, the statement is
executed one way or the other.
Type the next code:
clear
initialize
n=1;
for n=1:10
tone(1000.0, 0.5);
%plays a note for 0.5 seconds
pause(1.0);
%pauses the program for 1.0 seconds
end
Notice that the program beeps 10 times. This is because you defined
the for-loop to continue from n=1 to n=10 at intervals of 1 unit.
Pay attention to the use of the pause function. The tone function will
play a note for the specified time, but unlike many languages,
MATLAB will not wait for this command to be completed before
continuing with the rest of the program. Therefore, to hear each note, a
•
•
pause at least as long as the note must be included after the tone
command.
Enter this code:
clear
initialize
n=1;
while n<=10
n
n=n+1;
tone(1000.0, 0.5);
pause(1.0);
clc
end
The “clc” function is useful for keeping the workspace neat. It clears
all the type from the command window. This function does not clear
any variables stored in memory however. Notice that the above
program has virtually the same effect as the for-loop program, but
written in a different way. Depending one the way one needs to define
a loop will determine whether to use a for- or while-loop. Generally, a
for loop is used when there is a specified number of iterations, and a
while loop is used when the number of iterations is not precisely
known, but a desired result is.
Switch statements are a bit more complicated than those above. Enter
this code:
clear
initialize;
clc;
n=3;
switch n
case 1
tone(1000,1);
pause(1);
case 2
tone(1000,0.5);
pause (1);
tone(1000,0.5);
pause (1);
case 3
tone(1000,0.25);
pause(1);
tone(1000,0.25);
pause(1);
tone(1000,0.25);
pause(1);
end
Notice that when executing this statement it only runs once. Try
changing the initial value of n. A switch/case statement is like a
choice, depending on the case. It is equivalent to writing a series of
if/if else statements, though tends to be considerably easier and faster
once the user is proficient at using the switch/case.
Project:
•
Using the above concepts, write a program that will play a four note
scale (see below for frequency breakdown) first in whole notes, then in
half notes, then in quarter notes, and finally in eighth notes.
Notes
A
A#
B
C
C#
D
D#
E
F
F#
G
Ad
4th
octave
440.00
466.16
493.92
523.28
554.40
587.36
622.24
659.28
698.48
740.00
784.00
830.64
Frequency by octave (Hz)
5th
6th
7th
octave
octave
octave
880.00 1760.00
3520
932.32 1864.66 3729.31
987.84 1975.53 3951.07
1046.56 2093.00 4186.01
1108.80 2217.46 4434.92
1174.72 2349.32 4698.64
1244.48 2489.02 4978.03
1318.56 2637.02 5274.04
1396.96 2793.83 5587.65
1480.00 2959.96 5919.91
1568.00 3135.96 6271.93
1661.28 3322.44 6644.88
8th
octave
7040
7458.62
7902.13
8372.02
8869.84
9397.27
9956.06
10548.08
11175.30
11839.82
12543.85
13289.75
Questions:
1. (Experiment 1) What should happen if the DAQ board is not initialized and
commands from the mechlab toolbox are used?
2. (Experiment 2) How do you display the value of a variable to the screen in
Matlab?
3. (Experiment 3) Note: Do not use the examples given in this lab for your
answers. Make up your own!
a. Define the difference between using an if-statement and a switch case
statement, and give an example of a situation in which you would use
each.
b. Define the difference between a for-loop and a while-loop and give an
example for the use of each.
4. (Project) Include you code for this program (for proper formatting, see the lab
formatting guide or ask one of the TAs). For this program, also make a
flowchart. Explain why you chose to use the type of statement(s) or
loop(s) you did for this program. If applicable, tell why the other options
would not be satisfactory.
Download