1. ADC basics
electronics, an analog-to-digital converter (ADC, A/D, or A-to-D) is a
system that converts an analog signal, such as a sound picked up by a
microphone or light entering a digital camera, into a digital signal.
An ADC may also provide an isolated measurement such as an electronic
device that converts an input analog voltage or current to a digital
number representing the magnitude of the voltage or current.
The concept of an ADC:
An analog sine wave is being digitized into a digital signal:
Arduino board has 6 ADC inputs, these inputs can be used at the same
time, the internal digital circuit (Ananlog input multiplexer) can
manage the operation. Look at the figure below, the internal ADC is a
10-bit ADC, which means the 0-5 V is divided by 2^10 steps, which means
the ADC can resolve the minimum voltage of 5/2^10=5/1024, which is
around 5 mV. In this case, tiny input variations smaller than 5 mV are
unlikely to be detected. You can also say the sensitivy of the ADC is 5 mV.
2. Connect your circuit:
are going to use a potentiometer to vary the input voltage to the
Arduino ADC. Please use A0 (analog input 0) as the input voltage.
analog voltage is converted into digital signal and sent to your PC by
the USB cable. The communication protocol between the Arduino board and
your PC is called 'UART', which means Universal Asynchronous
Receiver-Transmitter. The UART is a type of Serial Communication.
As soon as you complete the circuit and power up the Arduino, the data starts streaming, we need Matlab to receive the data.
3. Matlab script for Serial Data receiving:
delete(instrfind(('Port'),('COM3'))); % This command will close the previous port you opened. Figure out your COM number on your computer by 'Device Manager':
s=serial('COM3','Baudrate',9600,'DataBits',8); % Open the serial port on your PC, define the transmittion rate to be 9600 bit per second, the length of each data is 8 bits.
fopen(s); % Open 's', which represents 'serial('COM3','Baudrate',9600,'DataBits',8);'
voltage=fscanf(s); % Use 'fscanf' function to acquire the data being stored in the memory of your PC.
Convert the data into a 'double' type. The data is being sent as string
characters, you need convert them into numbers for display.
Run the program, you will see the following result:
data is be streamed very quickly, when you run the program in Matlab,
Matlab will acquire ONE 8-bit data from the streamed digital signal. It
is very likely the data is not ready or the you sampled the middle of
an 8-bit data chain. So the first data can be invalid. In this case,
Matlab just give up the first 8-bit data, and show you NaN as the frist
So the question is, how can we sample more data and store them in a vector?
'For Loop' will solve this issue. Think about it in this way: if you
put the data aquisition part in a loop, Matlab will keep sampling the
Task 1: Complete the script below and print out the current voltage.
delete(instrfind(('Port'),('COM3'))); % Close previous port
s=serial('COM3','Baudrate',9600,'DataBits',8); % Configure the port
fopen(s); % Open the port
for i=1:100 % continuously sample 100 data points
Task 2: Use the stopwatch timer in Matlab to get the time spent by the 'For Loop':
In Matlab, you can use the following to report the time elapse:
Task 3: Plot the data.
Use the following command to remove the first bad data in your vector:
the digital voltage value to real voltage values. Create an X axis as
the Time axis. Do not use the tic/toc time. The sampling rate is 9600
bits/s, you have 100 data points, and 8 bits for every point, so you
have 800 bits collected, which consumes ???? time..... Complete this
calculation and generate a linear X space for your plot.
Plot the data use the plot() function.
Label the X and Y axis properly.
Task 4: Try different voltages
Turn the knob of the potentiometer, and try two other different voltages and plot them in the same way.
Note that your serial communication and the plotting cannot be done in
the same run. You must run the serial communicationa nd collect the
data, then plot the data.
homework must be done in a .doc or PDF file, like a report with
narrative contents. Add figure captions to your figures. Have your code
as the 'Appendix' section in your report. By email only. Due Monday