Output

From Control Systems Technology Group
Revision as of 00:12, 21 March 2016 by S141268 (talk | contribs)
Jump to navigation Jump to search

Back to main page: PRE2015_3_Groep4

To the input: Input

To the code: Code

Light Brightness

Heating

Play Sound

The SparkFun MP3 Player Shield

The best way to produce sound with an Arduino unit is probably by using the Sparkfun MP3 Player Shield, which is an extra circuit board for the Arduino which can play MP3 files from a microSD card (seen in the picture to the right). The costs, however, are $25, which is too much, so we chose a cheaper option. More info about this product can be found at https://www.sparkfun.com/products/12660.

Buzzer module for Arduino

To create sound, a simple speaker or a piezo buzzer will do, like this one here (seen in the picture to the right).

To simulate the production of sound, a quick script has been written in Matlab (because Matlab is easier to use). This script contains two alarm sounds which are both modeled as sine functions but with different frequencies. The first alarm sound, Alarm1, begins playing at time tStart, which is the right time to wake up the user as calculated by the main script. This alarm would ideally be a natural and more relaxing sound, like chirping birds, but that's probably nearly impossible to do with the tone() function, so we'll have to find something else. The intensity of this sound rises gradually and reaches its maximum at tEnd, the moment the user MUST wake up. Or it stops at tWake, which is the moment the user wakes up. If he hasn't woken op yet, Alarm1 stops playing and is replaced by Alarm2, which will be a standard alarm noise. The intensity is set on its maximum to make sure the user wakes up. When he does, at tWake, the sound stops. The script is written below and the result can be seen in the pictures to the right. The blue graph represents Alarm1 and the red one Alarm2.

Script

clear variables;close all;clc;

%% Alarm sounds
Alarm1 = 'Birds-singing-in-the-morning.mp3';% The 'Smart Alarm'
Alarm2 = 'Loud-alarm-clock-sound.wav';      % The 'Standard Alarm'
[y1,Fs1] = audioread(Alarm1);               % Alarm 1 translated into sound samples y1 and sample frequency Fs1
[y2,Fs2] = audioread(Alarm2);               % Alarm 2 translated into sound samples y2 and sample frequency Fs2

%% Feedback matrix
Fb = [];                                    % n*2 matrix which contains the user's feedback
Fbmax = 5;                                  % Maximal number of rows of the feedback matrix

%% Maximal sound amplitude boundaries
fmin = 1;                                   % This variable is to make sure that the alarm always makes an audible sound
fmax = 3;                                   % Maximal sound amplitude in volts (for the speaker)

while 1
    %% Use Smart Alarm? (Alarm 1)
    Smart = input('Use Smart Alarm?\n 1 = Yes\n 0 = No\n');
    
    %% Wake up interval/time
    if Smart
        tStart = input('Start of the time interval the user wants to wake up: ');
        tEnd = input('End of the time interval the user wants to wake up: ');
    else
        tWake = input('Time the user wants to wake up: ');
    end

    %% Alarm 1 properties
    if Smart
        y1max = Fs1*(tEnd-tStart);          % Number of samples to be used during the 'wake up interval'
        df = fmax/y1max;                    % Step size of the 'multiplication factor array'
        f = df:df:fmax;                     % Multiplication factor array: makes sure the Smart Alarm gradually increases in volume
    end

    %% Play alarm 1
    if Smart
        pause(tStart);                      % Wait until it's time to turn on the Smart Alarm
        disp('tStart');
        sound([f' f'].*y1(1:y1max,:),Fs1);  % Play the Smart Alarm which gradually increases in volume due to f
        pause(tEnd-tStart);                 % Wait until the user must be woken up
        disp('tEnd');
        clear sound;                        % Stop the Smart Alarm if it hasn't stopped yet
    else
        pause(tWake);                       % Wait until it's time to wake up the user
        disp('tWake');
    end

    %% Play alarm 2
    sound(y2,Fs2);                          % Play the standard alarm
    pause;                                  % Wait until the user is awake and presses a button
    clear sound;                            % Stop the standard alarm
    
    %% Stop script?
    Stop = input('Stop script?\n 0 = No\n 1 = Yes\n');
    if Stop
        break;                              % Stops the script
    end
    
    if Smart
        %% Feedback
        Fb(end+1,1) = fmax;                 % Give feedback about this volume setting
        Fb(end,2) = 3 - input('Rate your sound experience:\n 1 = Too soft\n 2 = Soft\n 3 = OK\n 4 = Loud\n 5 = Too loud\n');
        if size(Fb,1) > Fbmax;              % Feedback matrix can't be larger than Fbmax rows
            Fb = Fb(2:end,:);               % Delete first row
        end

        %% Maximal sound amplitude
        fmax = mean(Fb(:,1)+Fb(:,2));       % New maximal volume is determined by looking at the total feedback
        if fmax < fmin                      % Maximal volume needs to have a certain level so that the sound is still audible
            fmax = fmin;
            disp('Notice: minimal sound level reached');
        end
        if fmax > 5                         % Maximal voltage for the speaker is 5 V
            fmax = 5;
            disp('Notice: maximal sound level reached');
        end
    end
end

Feedback Statistics

Graphic Simulation