KOMUNIKASI DIGITAL
Serial communication
Digital signal processing
Basic Internet of Thing
TIM KOMDIG
1
DAFTAR ISI
2
PERCOBAAN 1. KOMUNIKASI SERIAL
3
Susun rangkaian elektronik yang menghubungkan antara mikrontroller dan
LED. Hubungkan masing-masing LED ke PIN 11, 12, dan 13 dari Arduino
seperti yang ditunjukkan pada Gambar 1.4. SESUAIKAN DENGAN ARDUINO
NANO.
void setup() {
pinMode(lamp1, OUTPUT);
pinMode(lamp2, OUTPUT);
pinMode(lamp3, OUTPUT);
Serial.begin(9600);
}
4
void loop()
{
if (Serial.available()>0)
{
int bacadata = Serial.read();
if (bacadata =='a') {databaca=1;}
if (bacadata =='b') {databaca=2;}
if (bacadata =='c') {databaca=3;}
if(databaca==1)
running: //LED akan berjalan pada mode running
{
digitalWrite(lamp1, HIGH);
delay(250);
digitalWrite(lamp1, LOW);
delay(250);
digitalWrite(lamp2, HIGH);
delay(250);
digitalWrite(lamp2, LOW);
delay(250);
digitalWrite(lamp3, HIGH);
delay(250);
digitalWrite(lamp3, LOW);
delay(250);
Serial.println("LED mode running");
loop();
goto running;
}
if(databaca==2)
flipflop: // LED akan berjalan pada mode flip flop
{
digitalWrite(lamp1, LOW);
digitalWrite(lamp2, LOW);
digitalWrite(lamp3, LOW);
delay(500);
digitalWrite(lamp1, HIGH);
digitalWrite(lamp2, HIGH);
digitalWrite(lamp3, HIGH);
delay(500);
Serial.println("LED mode flip flop");
loop();
goto flipflop;
}
if(databaca==3)
modeoff: // Semua LED akan off
{
digitalWrite(lamp1,LOW);
5
digitalWrite(lamp2,LOW);
digitalWrite(lamp3,LOW);
delay(1000);
Serial.println("LED mode off");
loop();
goto modeoff; }
}
}
6
Listing Program 1.2. Display digital data 0000 to 1023
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}
void loop() {
sensorVal = analogRead(sensorPin); // read the value from the sensor
float voltage = (sensorVal/1024.0) * 5.0; // convert the sensor reading to
voltage
float temperatureC = (voltage - .5) * 100; // convert the voltage to
temperature
float temperatureF = temperatureC * (9.0/5.0) + 32.0;
Serial.print("Sensor Value: "); // send the sensor value to the serial
Serial.print(sensorVal);
Serial.print(", Volts: ");
Serial.print(voltage);
Serial.print(", degrees C: ");
Serial.print(temperatureC);
Serial.print(", degrees F: ");
Serial.println(temperatureF);
delay(1000);
}
7
1.3. Percobaan komunikasi arduino to arduino
Pada percobaan ini anda akan berkomunikasi secara kabel menggunakan
komunikasi serial. Untuk melakukan percobaan ini anda harus
menggunakan dua buah board arduino, dapat menghubungkan arduino
anda dengan kelompok disebelah anda.
a. Hubungkan TX (Arduino 1) ke RX (Arduino 2) demikian pula sebaliknya,
hubungkan RX (Arduino 1) ke TX (Arduino 2), seperti yang ditunjukkan
pada Gambar 1.4. SESUAIKAN DENGAN ARDUINO NANO.
void loop() {
Serial.write(mystr,5); //Write the serial data
delay(1000);
}
8
Listing Program 1.5. Menerima teks “ Hello” pada mikrokontroller 2
void loop() {
Serial.readBytes(mystr,5); //Read the serial data and store in var
Serial.println(mystr); //Print data on Serial Monitor
delay(1000);
}
9
PERCOBAAN 2. KOMUNIKASI WIRELESS
2. Pasang board Arduino nano dan bluetooth pada papan project board
(white board) dan hubungkan pin-pin yang digunakan menggunakan
kabel jumper, dengan hubungan antara arduino dan bluetooth module
ditunjukkan pada Table 2.1.
10
Table 2.1. Hubungan antara board Arduino dan Bluetooth module
#include <SoftwareSerial.h>
SoftwareSerial BT(10, 11);
// creates a "virtual" serial port/UART
// connect BT module TX to D10
// connect BT module RX to D11
// connect BT Vcc to 5V, GND to GND
void setup()
{
// set digital pin to control as an output
pinMode(13, OUTPUT);
// set the data rate for the SoftwareSerial port
BT.begin(9600);
// Send test message to other device
BT.println("Hello, This is from Arduino");
BT.println("Press 1=ON; 2=OFF");
}
char a; // stores incoming character from other device
void loop()
{
if (BT.available())
// if text arrived in from BT serial...
{
a=(BT.read());
if (a=='1')
{
digitalWrite(13, HIGH);
BT.println ("LED on");
}
if (a=='2')
{
digitalWrite(13, LOW);
BT.println("LED off");
}
11
if (a=='?')
{
BT.println("Send '1' to turn LED on");
BT.println("Send '2' to turn LED on");
}
// you can add more "if" statements with other characters
}
}
4. Jalankan program bluetooth terminal pada smart phone anda (a), pilih
pada menu Bluetooth devices untuk memilih device HC05 yang sudah
terkoneksi ke Arduino untuk proses PAIRING (b). Tekan tombol reset pada
Arduino NANO,untuk memulai komunikasi sehingga akan muncul
tampilan seperti yang ditunjukkan pada Gambar 2.2 (c).
(a) Menu terminal (b) Pilihan devices (c) Cara kendali led
12
2.2. Komunikasi dua arah Arduino dan Smart Phone
Pada percobaan ini akan dibuat sebuah komunikasi dua arah antara Arduino
dan Smartphone melalui komunikasi serial bluetooth dengan masing-masing
menggunakan serial monitor (Arduino) dan bluetooth monitor (smartphone).
Masih menggunakan koneksi yang sama seperti percobaan sebelumnya.
1. Rencanakan program pada Arduino, sehingga dapat menerima dan
mengirim informasi dari dan ke smartphone demikian pula sebaliknya.
#include <SoftwareSerial.h>
SoftwareSerial BTserial(10, 11); // RX | TX
// Connect the HC-05 TX to Arduino pin 2 RX.
// Connect the HC-05 RX to Arduino pin 3 TX through a voltage divider.
//
char c = ' ';
void setup()
{
Serial.begin(9600);
Serial.println("Arduino is ready");
void loop()
{
// Keep reading from HC-05 and send to Arduino Serial Monitor
if (BTserial.available())
{
c = BTserial.read();
Serial.write(c);
}
2. Buka serial monitor pada program Arduino dan pastikan pilihan BOTH
NL & SCROOL dipilih, seperti yang ditunjukkan pada Gambar 2.3.
13
Gambar 2.3. Tampilan monitor serial
14
Table 2.3. Hubungan antara board Arduino 2 dan Bluetooth module
Gambar 2.4. (a) board arduino NANO (b) board bluetooth HC05
15
Gambar 2.5. Perintah setting MASTER pada arduino 1.
#include <SoftwareSerial.h>
#define button 8
int buttonState = 0;
SoftwareSerial BT(10, 11);
void setup() {
pinMode(button, INPUT);
BT.begin(9600);
}
void loop() {
// Reading the button
buttonState = digitalRead(button);
if (buttonState == LOW) {
BT.println ("0");
delay(1000);
}
else {
BT.println ("1");
delay(1000);
}
}
16
Program tersebut diatas adalah untuk mendeteksi kondisi logika pada
yang masuk pada D8. Pada saat SW ditekan maka akan mengirim logika
0 dan pada saat SW dilepas akan mengirim logika 1.
#include <SoftwareSerial.h>
SoftwareSerial Bluetooth(10, 11); // RX, TX
int LED = 13; // the on-board LED
int Data; // the data received
void setup() {
Bluetooth.begin(9600);
Serial.begin(9600);
Serial.println("Waiting for command...");
Bluetooth.println("Send 1 to turn on the LED. Send 0 to turn Off");
pinMode(LED,OUTPUT);
}
void loop() {
if (Bluetooth.available()){ //wait for data received
Data=Bluetooth.read();
if(Data=='1'){
digitalWrite(LED,1);
Serial.println("LED On!");
Bluetooth.println("LED On!");
}
else if(Data=='0'){
digitalWrite(LED,0);
Serial.println("LED Off!");
Bluetooth.println("LED On D13 Off ! ");
}
17
else{;}
}
delay(100);
}
18
PERCOBAAN 3. DASAR DIGITAL SIGNAL PROCESSING
19
3.2. Percobaan display spectrum sinyal SINUS
Lakukan percobaan menampilkan power spektrum dari sinyal SINUS (tiga
buah sinyal SINUS: 20, 100, dan 1000) yang telah dicampur dengan langkah
pembuatan generator isyarat seperti yang ditunjukkan pada Percobaan 1.
Panggil fungsi FFT pada program MATLAB untuk menghitung spektrum
sinyal dan selanjutnya tampilkan hasil pada layar komputer
20
Gambar 3.3. Tampilan spektrum isyarat sinus.
Pada Gambar 1.2. tampak bahwa isyarat tiga gelombang sinus yang telah
bercampur. Gambar 1.3 menunjukkan spektrum frekuensi yang terdiri dari
tiga frekuensi utama, yaitu frekuensi 20, 100 dan 1000 Hz.
1. Lakukan modifikasi pada program tersebut diatas untuk pemberian
frekuensi sampling, menjadi 1000, 2000, 3000, lakukan pencatatan
hasil, dan copy paste hasil (program dan grafik) ke WORD untuk
pembuatan laporan.
2. Lakukan modifikasi pada program tersebut diatas dengan merubah
isyarat SINUS menjadi 1000, 5000, 10.000 Hz. Tentukan panjang
isyarat (L) yang paling tepat dan lakukan percobaan untuk
menentukan frekuensi samping yang paling tepat. Lakukan pencatatan
hasil, dan lakukan copy paste hasil (program dan grafik) ke WORD
untuk pembuatan laporan.
3. Lakukan modifikasi pada program tersebut diatas dengan merubah
isyarat SINUS yang diproses menjadi 5, 20, 500, 2000 Hz. Tentukan
panjang isyarat (L) yang paling tepat dan lakukan percobaan untuk
menentukan frekuensi sampling yang paling tepat. Lakukan
pencatatan hasil, dan lakukan copy paste hasil (program dan grafik) ke
WORD untuk pembuatan laporan.
21
PERCOBAAN 4. DIGITAL FILTER FIR
22
x7=0;x6=0;x5=0;x4=0;x3=0;x2=0;x1=0;x0=0;
for i=1:L
x8=x7;
x7=x6;
x6=x5;
x5=x4;
x4=x3;
x3=x2;
x2=x1;
x1=x0;
x0=x(i);
y=b0*x0 + b1*x1 + b2*x2 + b3*x3 + b4*x4 + b5*x5 + b6*x6...
+ b7*x7 + b8*x8;
yfilter(i)=y;
end
y = yfilter';
figure;
plot(t,y);
title ('Filtered Signal');
c. Amati dan copy-paste plot (grafik sinyal, sinyal setelah penapisan, dan
spektrum sinyal) yang dihasilkan dari MATLAB ke WORD untuk
pembuatan laporan akhir.
d. Lakukan modifikasi pada variabel frekuensi sampling, yang sebelumnya
4000 Hz, ganti dengan frekuensi sampling 3000, 2000, dan 1000 Hz.
Lakukan pencatatan dan perekaman hasil plot (copy/paste) dari masing-
masing frekuensi sampling ke WORD. Beri ulasan pengaruh frekuensi
sampling terhadap hasil penapisan.
e. Pada percobaan diatas telah dibuat sebuah high pass filter FIR dengan
frekuensi cutoff 500 Hz orde 8 dan frekuensi sampling 4000 Hz.
23
Selanjutnya rencanakan low pass filter FIR dengan frekuensi cutoff 50
Hz orde 8. (b=fir1(8,50/(Fs/2),’low’));
24
b. Lanjutkan percobaan merancang sebuah digital filter, yaitu band pass
filter FIR dengan frekuensi cutoff bawah 50 Hz dan cut off atas 200 Hz
orde 20 dengan frekuensi sampling 4000 Hz.
c. Pada percobaan diatas telah dibuat sebuah high pass filter FIR dengan
frekuensi cutoff 500 Hz orde 20 dan frekuensi sampling 4000 Hz.
d. Lakukan copy-paste plot untuk setiap percobaan (untuk pembuatan
laporan akhir).
e. Berikan ulasan pengaruh orde terhadap hasil atau keluaran dari filter.
25
PERCOBAAN 5. DIGITAL FILTER IIR
26
b. Lakukan pengaturan pada Response Type, Design Method, Filter
Order, Frequency sampling dan frequency cuttoff. Pada FDATOOL.
c. Setelah pengaturan telah dilakukan, maka tekan BUTTON Design
Filter.
d. Pada menu EDIT FDATOOL pilih CONVERT TO SINGLE SECTION
untuk mendapatkan koefisien filter IIR. Tekan tombol pada icon [b,a]
untuk melihat hasil perhitungan koefisien filter IIR, seperti yang
ditunjukkan pada Gambar 6.2.
27
%---------------- Signal Generator ------------------------------------
Fsampling = 4000; % Sampling frequency
T = 1/Fsampling; % Sampling period
L = 1500; % Length of signal
t = (0:L-1)*T; % Time vector
x = sin(2*pi*20*t)+sin(2*pi*100*t)+sin(2*pi*1000*t); % First row wave
figure;
plot(t,x);
title ('Original Signal');
%-----------------IIR Digital Filter (Fcutoff HPF 500 Hz)-------------
% Numerator
b0= 0.569035593728849; b1=-1.13807118745770; b2= 0.569035593728849;
% Denumerator
a1= -0.942809041582064; a2= 0.333333333333333;
x1=0;x0=0;
y1=0;y=0;
for i=1:L
y2=y1;
y1=y;
%
x2=x1;
x1=x0;
x0=x(i);
y=b0*x0 + b1*x1 + b2*x2 ...
-a1*y1 - a2*y2 ;
yfilter(i)=y;
end
y = yfilter';
figure;
plot(t,y);
title ('Filtered Signal');
g. Amati dan copy-paste plot (grafik sinyal, sinyal setelah penapisan, dan
spektrum sinyal) yang dihasilkan dari MATLAB ke WORD untuk
pembuatan laporan akhir.
h. Lakukan modifikasi pada variabel frekuensi sampling, yang sebelumnya
4000 Hz, ganti dengan frekuensi sampling 3000, 2000, dan 1000 Hz.
28
Lakukan pencatatan dan perekaman hasil plot (copy/paste) dari masing-
masing frekuensi sampling ke WORD. Beri ulasan pengaruh frekuensi
sampling terhadap hasil penapisan.
i. Lakukan modifikasi pada desain digital filter tersebut untuk low pass
filter IIR orde 2 dengan frekuensi cutoff 50, untuk melewatkan frekuensi
20 Hz.
j. Lakukan modifikasi pada desain digital filter tersebut untuk band pass
filter IIR orde 2 dengan frekuensi dengan frekuensi cutoff bawah 50 Hz
dan cut off atas 200 Hz orde 2 dengan frekuensi sampling 4000 Hz.
Sehingga frekuensi 100 Hz akan dilewatkan.
k. Lakukan langkah (g) sampai dengan (h).
29
a5=-3.1560252607305666; a6=1.0016965795512844;
a7=-0.1863424776774854; a8=0.015507615254986895;
%
x7=0;x6=0;x5=0;x4=0;x3=0;x2=0;x1=0;x0=0;
y7=0;y6=0;y5=0;y4=0;y3=0;y2=0;y1=0;y=0;
for i=1:L
y8=y7;
y7=y6;
y6=y5;
y5=y4;
y4=y3;
y3=y2;
y2=y1;
y1=y;
%
x8=x7;
x7=x6;
x6=x5;
x5=x4;
x4=x3;
x3=x2;
x2=x1;
x1=x0;
x0=x(i);
y=b0*x0 + b1*x1 + b2*x2 + b3*x3 + b4*x4 + b5*x5 + b6*x6 + b7*x7 + b8*x8...
-a1*y1 - a2*y2 - a3*y3 - a4*y4 - a5*y5 - a6*y6 - a7*y7 - a8*y8;
yfilter(i)=y;
end
y = yfilter';
figure;
plot(t,y);
title ('Filtered Signal');
%-----------------Fast Fourier Transform (FFT) -------------------------
n = 2^nextpow2(L);
Yfft = fft(y,n);
P2 = abs(Yfft/L);
P1 = P2(1:n/2+1);
P1(1:end-1) = 2*P1(1:end-1);
figure;
plot(0:(Fsampling/n):(Fsampling/2-Fsampling/n),P1(1:n/2));
title ('Frequency of the signal');
30
PERCOBAAN 6. PEMROSESAN SINYAL BIOMEDIK
Pada praktikum kali ini, kita akan melakukan percobaan pengolahan isyarat
ECG yang berasal dari ATM physionet.org (https://physionet.org/cgi-
bin/atm/ATM). Physionet.org merupakan salah satu sumber public dataset
yang berisi berbagai macam hasil rekaman sinyal biomedik yang telah
dihasilkan oleh beberapa peneliti-peneliti terdahulu. Submenu pada
physionet adalah Physiobank ATM (Gambar 6.1.) yang berisi berbagaimacam
sinyal biomedik dengan berbagai macam fasilitas baik berupa view maupun
rekaman dalam bentuk text, csv dan lain-lain.
31
Gambar 6.3. Beberapa pilihan pada ATM physioBANK
Hasil rekaman sinyal ECG yang berasal dari ATM physioBANK adalah berupa
file CSV. File CSV dibuka menggunakan program Microsoft Excell dan
selanjutnya file disimpan dengan ekstension TXT.
Pada percobaan pertama ini, kita akan mengambil rekaman isyarat ECG yang
berasal dari ATM physioBANK. Berdasarkan informasi yang didapatkan dari
rekaman tersebut, sinyal ECG dan sinyal yang lainnya direkam dengan
menggunakan frekuensi sampling 5000 Hz dengan lama rekaman adalah 10
detik. Karakteristik frekuensi isyarat ECG adalah 0.05 sd. 100 Hz. Untuk
mengetahui pengaruh noise terhadap sinyal ECG maka pada percobaan ini,
sinyal ECG akan ditambahkan dengan noise buatan yang seolah-olah berasal
dari jala-jala listrik yaitu noise dengan frekuensi 50 Hz. Noise buatan, yaitu
noise yang dibangkitkan akibat gerakan dari anggota tubuh manusia (noise
artifact) juga dibangkitkan secara buatan dengan menambahkan sinyal sinus
frekuensi rendah (1 sd. 3 Hz).
a. Ketik program pengambilan data ECG seperti yang ditunjukkan pada
Listring program berikut, terlebih dahulu download di google drive dengan
link sebagai berikut:
32
https://drive.google.com/open?id=10DEp-A14y_oy4ObedksecP-Xouki-TF8
% https://physionet.org/cgi-bin/atm/ATM
% https://physionet.org/physiobank/database/cebsdb/
clear all;
clc;
StopTime=10;
dt=0.0002;
Fsampling=1/dt;
L=50000;
load datasetecg.txt;
LEADI=datasetecg(1:L,2);
LEADII=datasetecg(1:L,3);
RESP=datasetecg(1:L,4);
SCG=datasetecg(1:L,5);
t = (0:dt:StopTime-dt)';
noise50 = sin(2*pi*50*t);
artifact= sin(2*pi*1*t);
y=LEADI;
figure;
plot(t,y);
33
y=LEADI;
y=LEDAI+noise50;
y=LEADI+artifact;
34
c. Tambahkan fungsi FFT pada percobaan sinyal ECG dan noise 50 Hz
untuk melihat spektrum sinyal. Lakukan modifikasi pada program
sebelumnya dengan menambahkan instruksi untuk melihat spektrum
isyarat ECG dan noise.
% https://physionet.org/cgi-bin/atm/ATM
% https://physionet.org/physiobank/database/cebsdb/
clear all;
clc;
StopTime=10;
dt=0.0002;
Fsampling=1/dt;
L=50000;
load datasetecg.txt;
LEADI=datasetecg(1:L,2);
LEADII=datasetecg(1:L,3);
RESP=datasetecg(1:L,4);
SCG=datasetecg(1:L,5);
t = (0:dt:StopTime-dt)';
noise50 = sin(2*pi*50*t);
artifact= sin(2*pi*1*t);
y=LEADI+noise50;
35
figure;
plot(t,y);
%-----------------Fast Fourier Transform (FFT) ----------------------
n = 2^nextpow2(L);
Yfft = fft(y,n);
P2 = abs(Yfft/L);
P1 = P2(1:n/2+1);
P1(1:end-1) = 2*P1(1:end-1);
figure;
plot(0:(Fsampling/n):(Fsampling/2-Fsampling/n),P1(1:n/2));
title ('Frequency of the signal');
36
6.2. Pembuatan tapis NOTCH IIR 50 Hz untuk sinyal ECG
37
Untuk mendapatkan koefisien filter IIR 50 Hz order 2 maka lakukan konversi
ke single section melalui menu EDIT dan CONVERT SINGLE SECTION,
sebagaimana yang ditunjukkan pada Gambar 6.11.
38
t = (0:dt:StopTime-dt)';
noise50 = sin(2*pi*50*t);
artifact= sin(2*pi*1*t);
x=LEADI+noise50;
figure;
plot(t,x);
%-----------------IIR Digital Filter (Fcutoff HPF 500 Hz)-------------
% Numerator
b0= 0.997493021323277; b1=-1.99105568169751;
b2= 0.997493021323277;
% Denumerator
a1= -1.99105568169751; a2= 0.994986042646553;
x1=0;x0=0;
y1=0;y=0;
for i=1:L
y2=y1;
y1=y;
%
x2=x1;
x1=x0;
x0=x(i);
y=b0*x0 + b1*x1 + b2*x2 ...
-a1*y1 - a2*y2 ;
yfilter(i)=y;
end
y = yfilter';
figure;
plot(t,y);
title ('Filtered Signal');
39
Gambar 6.13. Sinyal ECG yang mendapat noise 50 Hz
40
NEXT (after UTS)
Percobaan Filter Digital tertanam di Mikrokontroller (ESP32)
dan IOT.
41