0% found this document useful (0 votes)
31 views

MEK 575 Lab Manual - LAB 3

Uploaded by

azwaparzon
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
31 views

MEK 575 Lab Manual - LAB 3

Uploaded by

azwaparzon
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 7

Embedded System – MEK 575/ Rev.

01-2023

School of Mechanical Engineering, College of Engineering, 40450 Shah Alam,


Selangor Darul Ehsan
__________________________________________________________________

Program : Bachelor of Mechatronics Engineering Technology


With Honours (CEEM 242)
Course : Embedded System
Code : MEK 575
Laboratory : 3 (Music - Piezo element)

Arduino Programming Laboratory Manual

Objective:
To utilize the Arduino IDE Software platform to write simple control logic
commands. This control code will be used to make effective use of a variety of
inputs and outputs connected to an Arduino microcontroller. This lab will also
expose students to more complicated control and communication codes, and
online resources available for the Arduino software.

Background:
An embedded system is a microprocessor-based computer hardware and software
system that is designed to perform a specific function, either as a stand-alone
system or as a component of a larger system. Our world is filled with smart and
connected products that have microprocessors or microcontrollers, sensors, and
software embedded in them. The Arduino company offers the open-source Arduino
Integrated Development Environment in conjunction with various microcontroller
models (IDE). This Java-based programming environment was created to
introduce programming to a less-experienced audience. Programs written in this
environment are called ‘sketches’, and the language used is based on the
Processing language with support for C and C++ programming languages.A basic
Arduino sketch consists of at least two functions: a ‘setup’ function and a ‘loop’
function. The setup function performs any actions that are initially required to run
the rest of the program,such as initializing any peripheral components and setting
the communication frequency between the Arduino board and PC. The loop
function acts as the program's driver; it runs in a continuous loop, and specifies the
order of operations that the microcontroller will perform. Because of Arduino’s
open-source nature, third party companies, as well as end users are free to take
the software and tailor it to their individual needs. This means that for almost any
application, sketches are available for download online, and companies making
peripherals (such as a motor shield or sensors) for use with Arduino boards often

1
Embedded System – MEK 575/ Rev.01-2023

have example sketches and sketch libraries available for specific use for their
products. These resources can be used to create a custom sketch that can use
many different peripherals at once, by combining aspects of many different
example sketches.

2
Embedded System – MEK 575/ Rev.01-2023

3
Embedded System – MEK 575/ Rev.01-2023

LABORATORY 3: Music - Piezo element

Objective:

To this point we have controlled light, motion, and electrons, Lets tackle sound
next. But sound is an analog phenomena, how will our digital Arduino cope? We
will once again rely on its incredible speed which will let it mimic analog behavior.
To do this, we will attach a piezo element to one of the Arduino's digital pins. A
piezo element makes a clicking sound each time it is pulsed with current. If we
pulse it at the right frequency (ie. quickly enough) these clicks will run together to
produce notes. Lets get to experimenting with it and get your Arduino playing
'Twinkle Twinkle Little Star'. (For the lab work, students will use Tinkercad to
simulate the arduino microcontroller and assigned tasks).

List of component:

1) Piezo buzzer/speaker
2) Arduino UNO Board
3) Wire

Figure 3.

4
Embedded System – MEK 575/ Rev.01-2023

Coding:
/* Melody
* (cleft) 2005 D. Cuartielles for K3
*
* This example uses a piezo speaker to play melodies. It
sends
* a square wave of the appropriate frequency to the piezo,
* generating the corresponding tone.
*
* The calculation of the tones is made following the
* mathematical operation:
*
* timeHigh = period / 2 = 1 / (2 * toneFrequency)
*
* where the different tones are described as in the table:
*
* note frequency period timeHigh
* c 261 Hz 3830 1915
* d 294 Hz 3400 1700
* e 329 Hz 3038 1519
* f 349 Hz 2864 1432
* g 392 Hz 2550 1275
* a 440 Hz 2272 1136
* b 493 Hz 2028 1014
* C 523 Hz 1912 956
*
*/
int speakerPin = 9;
int length = 15; // the number of notes
char notes[] = "ccggaagffeeddc "; // a space represents a
rest
int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };
int tempo = 300;

void playTone(int tone, int duration) {


for (long i = 0; i < duration * 1000L; i += tone * 2) {
digitalWrite(speakerPin, HIGH);
delayMicroseconds(tone);

5
Embedded System – MEK 575/ Rev.01-2023

digitalWrite(speakerPin, LOW);
delayMicroseconds(tone);
}
}
void playNote(char note, int duration) {
char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956
};
// play the tone corresponding to the note name
for (int i = 0; i < 8; i++) {
if (names[i] == note) {
playTone(tones[i], duration);
}
}
}
void setup() {
pinMode(speakerPin, OUTPUT);

}
void loop()
{
for (int i = 0; i < length; i++)
{
if (notes[i] == ' ') {
delay(beats[i] * tempo); // rest
}
else
{
playNote(notes[i], beats[i] * tempo);
}
// pause between notes
delay(tempo / 2);
}
}

6
Embedded System – MEK 575/ Rev.01-2023

Task:

Playing with the speed:


The timing for each note is calculated based on variables, as such we can
tweak the sound of each note or the timing. To change the speed of the
melody you need to change only one line.
int tempo = 300; ---> int tempo = (new #)

Change it to a larger number to slow the melody down, or a smaller number


to speed it up.

Tuning the notes:


If you are worried about the notes being a little out of tune this can be fixed
as well. The notes have been
calculated based on a formula in the comment block at the top of the
program. But to tune individual notes just adjust their values in the tones[ ]
array up or down until they sound right. (each note is matched by its name in
the names[ ] (array ie. c = 1915 )

char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014,
956 };

Composing your own melodies:


The program is pre-set to play 'Twinkle Twinkle Little Star' . However the way
it is programmed makes changing the song easy. Each song is defined in
one int and two arrays, the int length defines the number of notes, the first
array notes[ ] defines each note, and the second beats[ ] defines how long
each note is played. Some Examples:

Twinkle Twinkle Little Star

int length = 15;


char notes[] = "ccggaagffeeddc ";
int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };

Happy Birthday (first line)

int length = 13;


char notes[] = "ccdcfeccdcgf ";
int beats[] = {1,1,1,1,1,2,1,1,1,1,1,2,4};

Please discuss your observations.

You might also like