Output: Difference between revisions
No edit summary |
No edit summary |
||
Line 15: | Line 15: | ||
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. | 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 === | === Script === | ||
clear | 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 | |||
if ( | 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 | ||
end | end | ||
== Feedback Statistics == | == Feedback Statistics == | ||
== Graphic Simulation == | == Graphic Simulation == |
Revision as of 00:12, 21 March 2016
Back to main page: PRE2015_3_Groep4
To the input: Input
To the code: Code
Light Brightness
Heating
Play Sound
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.
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