Anda di halaman 1dari 68

PETUNJUK PRAKTIKUM

KOMUNIKASI DIGITAL

Serial communication
Digital signal processing
Basic Internet of Thing

TIM KOMDIG

JURUSAN TEKNIK ELEKTROMEDIK


POLTEKKES KEMENKES SURABAYA
2018

1
DAFTAR ISI

Percobaan 1. Komunikasi Serial


Percobaan 2. Komunikasi Wireless
Percobaan 3. Dasar Pemrosesan Sinyal
Percobaan 4. Filter Digital dengan Finite Impulse Response
Percobaan 5. Filter Digital dengan Infinite Impulse Response
Percobaan 6. Pemrosesan Sinyal Biomedik

Percobaan 7. Filter Digital tertanam di Mikrokontroller


Percobaan 8. Pengantar ESP32 dan Percobaan LED/ SW
Percobaan 9. Antarmuka ESP32 dengan Sensor DHT11
Percobaan 10. ESP32 sebagai Webserver (menggunakan localhost)
Percobaan kendali LED/Servo
Percobaan 11. Koneksi ESP32 ke webserver online Thinkspeak/Ubidots
Percobaan monitoring data DHT11secara online
Percobaan 12. Koneksi ESP32 ke webserver online Thinkspeak/ Ubidots
Percobaan monitoring data Analog/Potensio online

Pertemuan 13. Student Project


Pertemuan 14. Student Project
Pertemuan 15. Ujian Final
Pertemuan 16. Ujian Perbaikan

2
PERCOBAAN 1. KOMUNIKASI SERIAL

1.1. Percobaan Komunikasi Serial dengan komputer


Percobaan ini adalah untuk berkomunikasi secara serial antara
mikrokontroller dan komputer. Pada percobaan ini LED dikendalikan melalui
karakter-karakter yang ada di keyboard komputer (misal: a, b, dan c) melalui
serial monitor
a. Setelah memprogram pada arduino, anda buka serial monitor TOOL,
dengan tahapan setting seperti yang ditunjukkan pada Gambar 1.1.
sampai dengan Gambar 1.3.

Gambar 1.1. Pemilihan serial monitor pada Arduino

Gambar 1.2. Pemilihan PORT serial (COM 2/3 dst).

Gambar 1.3. Tampilan serial monitor pada Arduino

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.

Gambar 1.4. Koneksi rangkaian Arduino dan LED

4
int lamp3 = 13;
int databaca;
void setup()
{
pinMode(lamp3, OUTPUT);
Serial.begin(9600);
}

void loop()
{
if (Serial.available())
{
int bacadata = Serial.read();
if (bacadata =='a') {databaca=1;}
if (bacadata =='b') {databaca=2;}

if(databaca==1)
{
digitalWrite(13, LOW);
}

if(databaca==2)
{
digitalWrite(13, HIGH);
}
}
}

Listing Program 1.1.


int lamp1 = 11;
int lamp2 = 12;
int lamp3 = 13;
int databaca;

void setup() {
pinMode(lamp1, OUTPUT);
pinMode(lamp2, OUTPUT);
pinMode(lamp3, OUTPUT);
Serial.begin(9600);
}

void loop()
{
if (Serial.available())
{

5
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);
digitalWrite(lamp2,LOW);
digitalWrite(lamp3,LOW);
delay(1000);
Serial.println("LED mode off");

6
loop();
goto modeoff; }
}
}

Gambar 1.5. Tampilan serial monitor


1.2. Percobaan Komunikasi Serial dengan komputer
Pada percobaan ini data tegangan analog yang dihasilkan oleh sensor
Potensio dibaca oleh arduino nano melalui PIN ANALOG, selanjutnya data
hasil konversi dikirimkan ke monitor serial. Gunakan PIN A0 untuk masukan
tegangan analog. SESUAIKAN DENGAN ARDUINO NANO.

Gambar 1.6. Konfigurasi hubungan Pin A0 dengan potensio.


Listing Program 1.2. Display digital data 0000 to 1023

7
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}

// the loop routine runs over and over again forever:


void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A0);
// print out the value you read:
Serial.println(sensorValue);
delay(1); // delay in between reads for stability
}

Listing Program 1.3. Display voltage to Temperature


const int sensorPin = A0; // temperature sensor is connected to A0
int sensorVal = 0; // variable used to store the value coming from the
sensor
void setup()
{
Serial.begin(9600); // initialize the serial communication //
}

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);
}

8
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.

Gambar 1.7. Koneksi serial antar mikrokontroller

b. Ketik program sebagaimana yang ditunjukkan pada listing program


berikut.

Listing Program 1.4. Kirim teks “ Hello” pada mikrokontroller 1

char mystr[5] = "Hello"; //String data


void setup() {
// Begin the Serial at 9600 Baud
Serial.begin(9600);
}

void loop() {
Serial.write(mystr,5); //Write the serial data
delay(1000);
}

9
Listing Program 1.5. Menerima teks “ Hello” pada mikrokontroller 2

char mystr[10]; //Initialized variable to store recieved data


void setup() {
// Begin the Serial at 9600 Baud
Serial.begin(9600);
}

void loop() {
Serial.readBytes(mystr,5); //Read the serial data and store in var
Serial.println(mystr); //Print data on Serial Monitor
delay(1000);
}

1.4. Menghidupkan LED (MIKRO 2) melalui SW (MIKRO 1) secara Serial


Rencanakan program untuk menghidupkan LED yang terhubung pada PIN
13 (MIKRO2 ) dengan menggunakan SW (MIKRO1) PIN 2.

1.5. Kirim data tegangan (MIKRO 1) ke serial monitor (MIKRO 2)


Rencanakan program untuk mengukur tegangan analog dari sensor potensio
melalui MIKRO 1 dan dikirim via serial ke MIKRO 2, selanjutnya ditampilkan
ke serial monitor MIKRO2.

10
PERCOBAAN 2. KOMUNIKASI WIRELESS

Sebelum melakukan interaksi dengan bluetooth maka terlebih dahulu anda


harus melakukan konfigurasi pada modul tersebut. Langkah pertama yang
harus dilakukan adalah melakukan koneksi antara modul bluetooth dan
arduino uno, lihat tabel 2.1. Konfigurasi dapat digunakan untuk mengatur
antara lain: kecepatan pengiriman dan penerimaan data (BAUDRATE),
memberi nama bluetooth, merubah password dan lain-lain. Konfigurasi
dilakukan melalui jalur komunikasi serial via SERIAL MONITOR pada
ARDUINO TOOL menggunakan AT-COMMAND. Dengan langkah-langkah
sebagai berikut:
1. Koneksikan antara arduino dan bluetooth sesuai dengan Table 2.2.
2. Lakukan UPLOAD file yang ditunjukkan pada listing program 2.1.
3. Lepas power supply ARDUINO (kabel USB). Tekan tombol SW yang
tersedia pada modul bluetooth dan pasang kembali kabel USB pada
ARDUINO maka LED pada modul bluetooth akan berkedip sekitar 2 detik.
Hal ini menandakan bluetooth memasuki mode AT-COMMAND.
4. Buka layar serial monitor pada ARDUINO IDE. Lakukan pengetikan AT
dan ikuti dengan ENTER maka modul bluetooth akan menjawab dengan
OK. Hal ini menandakan modul bluetooth sudah siap.
5. Berikut merupakan contoh-contoh AT-COMMAND.
Tabel 2.1. Contoh AT COMMAND
Fungsi COMMAND
1. To return HC-05 to default settings: AT+ORGL
2. To get version of your HC-05 enter: AT+VERSION?
3. To change device name from the default AT+NAME=MYBLUE
HC-05 to let's say MYBLUE enter:
4. To change default security code from 1234 AT+PSWD=2987
to 2987 enter:
5. To change HC-05 baud rate from default AT+UART=115200,1,0
9600 to 115200, 1 stop bit, 0 parity enter:
6. To change role of bluetooth module AT+ROLE=0
(1=master/0=slave)

11
Table 2.2. Hubungan antara board Arduino dan Bluetooth module

Arduino Bluetooth Module


5V To Vcc
GND To GND
D10 To TX
D11 To RX
D9 To KEY

Listing program 2.1. untuk memberi perintah AT-COMMAND

#include <SoftwareSerial.h>

SoftwareSerial BTSerial(10, 11); // RX | TX

void setup()
{
pinMode(9, OUTPUT); // this pin will pull the HC-05 pin 34 (key pin)
HIGH to switch module to AT mode
digitalWrite(9, HIGH);
Serial.begin(9600);
Serial.println("Enter AT commands:");
BTSerial.begin(38400); // HC-05 default speed in AT command more
}

void loop()
{
// Keep reading from HC-05 and send to Arduino Serial Monitor
if (BTSerial.available())
Serial.write(BTSerial.read());

// Keep reading from Arduino Serial Monitor and send to HC-05


if (Serial.available())
BTSerial.write(Serial.read());
}

Untuk melakukan pengujian apakah sudah ada koneksi antara modul


arduino dan bluetooth, buka MONITOR SERIAL dan ketik AT dan tekan enter

12
2.1. Percobaan Kendali LED melalui mobile phone
Pada percobaan ini akan dibuat sebuah komunikasi wireless menggunakan
koneksi bluetooth, dengan menggunakan Arduino Nano dan Bluetooth HC05
atau HC06. Pada percobaan ini, sebuah LED (BUILTIN) yang terhubung ke
D13 pin Arduino akan dikendalikan (ON/ OFF) melalui komunikasi bluetooth
antara bluetooth mobile phone dan bluethooth HC05.
1. Lakukan instalasi bluetooth terminal (dari: electrotoolbox) melalui Google
Play Store. Sebelum menghubungkan Arduino dan bluetooth, perhatikan
pin-pin sebagaimana yang ditunjukkan pada Gambar 2.1.

(a) Arduino Nano (b) Bluetooth HC05

Gambar 2.1. (a) Arduino Nano dan (b) Bluetooth HC05

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.3.

13
Table 2.3. Hubungan antara board Arduino dan Bluetooth module

Arduino Bluetooth Module


5V To Vcc
GND To GND
D10 To TX
D11 To RX

3. Ketik program berikut dengan menggunakan IDE Arduino. Program ini


bertujuan untuk mendeteksi character ‘1’ untuk menghidupkan LED dan
character ‘2’ untuk mematikan LED. Karakter ‘1’ dan ‘2’ diketik melalui
aplikasi BLUETOOTH TERMINAL pada smart phone melalui PLAYSTORE.

#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");
}

14
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 (from: ELECTROTOOLBOX) 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

Gambar 2.2. Aplikasi bluetooth terminal pada smartphone

5. Rencanakan program pada arduino tetapi terlebih dahulu ganti koneksi


pin TX RX bluetooth ke Arduino dengan pin Arduino yang lain. Misal
Tx=D8 dan Rx=D9 atau Tx=D6 dan TX=D7.

15
6. Lakukan modifikasi pada program arduino sehingga kendali LED
dilakukan dengan character yang lain, misal character 8=ON dan
character 7=OFF.

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");

// HC-05 default serial speed for commincation mode is 9600


BTserial.begin(9600);
BTserial.println("Mobile is ready");
}

void loop()
{
// Keep reading from HC-05 and send to Arduino Serial Monitor
if (BTserial.available())
{
c = BTserial.read();
Serial.write(c);
}
// Keep reading from Arduino Serial Monitor and send to HC-05
if (Serial.available())
{
c = Serial.read();
BTserial.write(c);
}
}

16
2. Buka serial monitor pada program Arduino dan pastikan pilihan BOTH
NL & SCROOL dipilih, seperti yang ditunjukkan pada Gambar 2.3.

Gambar 2.3. Tampilan monitor serial

3. Buka bluetooth monitor pada smartphone dan lakukan pemilihan


devices HC05 sehingga terjadi koneksi.
4. Tekan tombol reset pada Arduino NANO dan tutup dan buka kembali
serial monitor pada IDE Arduino.
5. Lakukan pengujian dengan mengetik sebuah text pada serial monitor
(IDE Arduino) atau dari bluetooth monitor (pada smartphone).

2.3. Percobaan Kendali LED antar Arduino menggunakan sebuah saklar


Pada percobaan ini sebuah LED yang terhubung pada Arduino 1 (KELOMPOK
X) akan dikendalikan dengan menggunakan saklar yang terhubung pada
Arduino 2 (KELOMPOK Y). Agar dapat menghasilkan sebuah komunikasi
maka Arduino 1 harus disetting sebagai MASTER dan Arduino 2 disetting
sebagai SLAVE. Hubungkan koneksi antar Arduino dan bluetooth seperti
yang ditunjukkan pada Tabel 2.2. dan Tabel 2.3.

17
Table 2.2. Hubungan antara board Arduino 1 dan Bluetooth module

Arduino (SLAVE) Bluetooth Module


5V To Vcc
GND To GND
D10 To TX
D11 To RX
BUILTIN LED (D13)

Table 2.3. Hubungan antara board Arduino 2 dan Bluetooth module

Arduino (MASTER) Bluetooth Module


5V To Vcc
GND To GND
D10 To TX
D11 To RX
SW PUSH BUTTON to (D8)

(a) Arduino Nano (b) Bluetooth HC05

Gambar 2.4. (a) board arduino NANO (b) board bluetooth HC05

1. Bluetooth (BT) yang terhubung ke Arduino 1 akan dikonfigurasikan


sebagai MASTER. Sebuah saklar SW 1 dihubungkan pada PIN D8 pada
Arduino 1 untuk mengendalikan BUILTIN LED pada Arduino 2.
Lakukan konfigurasi pada bluetooth sebagai MASTER pada arduino 1

18
(KELOMPOK X). Untuk mengkonfigurasikan bluetooth sebagai
MASTER maka terlebih dahulu BUTTON SW pada modul bluetooth
ditekan, selanjutnya hubungkan USB ke PC untuk mendapatkan
power supply. Apabila LED pada BT berkedip setiap dua detik maka BT
memasuki mode AT COMMAND. Pastikan BOTH NL & CR dipilih pada
serial monitor Arduino.

Gambar 2.5. Perintah setting MASTER pada arduino 1.

2. Ketik listing program berikut untuk Arduino MASTER

#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) {

19
BT.println ("0");
delay(1000);
}
else {
BT.println ("1");
delay(1000);
}
}

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.

3. Bluetooth (BT) yang terhubung ke Arduino 2 akan dikonfigurasikan


sebagai SLAVE. Sebuah BUILTIN LED (PIN 13) telah terhubung pada
Arduino 2. Lakukan konfigurasi pada bluetooth sebagai SLAVE pada
arduino 1 (KELOMPOK Y). Untuk mengkonfigurasikan bluetooth sebagai
SLAVE maka terlebih dahulu BUTTON SW pada modul bluetooth ditekan,
selanjutnya hubungkan USB ke PC untuk mendapatkan power supply.
Apabila LED pada BT berkedip setiap dua detik maka BT memasuki mode
AT COMMAND. Pastikan BOTH NL & CR dipilih pada serial monitor
Arduino. Ketik perintah AT command ke BT sebagai SLAVE pada serial
monitor dengan perintah sebagai berikut: AT+ROLE=0.

#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'){

20
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 ! ");
}

else{;}
}
delay(100);
}

Program tersebut diatas adalah digunakan untuk mendeteksi apakah BT


menerima character “1” atau “0”. Pada saat menerima character “1” maka
BUILTIN LED D13 akan dihidupkan demikian pula sebaliknya.

21
PERCOBAAN 3. DASAR DIGITAL SIGNAL PROCESSING

3.1. Percobaan Membangkitkan Isyarat Sinus


Plot gabungan tiga buah isyarat SINUS pada layar komputer dengan
menggunakan pemrograman MATLAB. Isyarat SINUS dengan frekuensi 20,
100, dan 1000 Hz dengan frekuensi sampling sebesar 4000 Hz. Pada
percobaan ini lakukan pengamatan dan pencatatan, apa yang akan terjadi
apabila frekuensi sampling diatur menjadi lebih kecil, misal dimulai dari
4000, 3500, 3000, 2500, 2000, 1500, dan 1000.

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');

Gambar 3.1 Tampilan sinyal sinus

a. Lakukan percobaan dengan mengganti frekuensi dan jumlah sinyal


yang dicampurkan pada percobaan ini.
b. Lakukan percobaan dengan mengganti panjang sinyal (L). Lakukan
pengamatan, apa yang terjadi dengan keluaran grafik.

22
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

%---------------- 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); %
figure;
plot(t,x);
title ('Original Signal');
%-----------------Fast Fourier Transform (FFT) -------------------------
n = 2^nextpow2(L);
Yfft = fft(x,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');

Gambar 3.2. Tampilan isyarat sinus

23
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.

24
PERCOBAAN 4. DIGITAL FILTER FIR

4.1. Percobaan Disain Filter FIR orde 8

Tiga buah isyarat sinus dibangkitkan yang masing-masing mempunyai


frekuensi (20, 100, dan 1000 Hz). Rencanakan sebuah high pass filter FIR
orde 8 dengan frekuensi cutoff 500 Hz. Sehingga isyarat yang akan ditekan
adalah frekuensi 20 dan 100 Hz dan frekuensi yang akan dilewatkan adalah
1000 Hz.
a. Menghitung koefisien filter. Koefisien filter dihitung dengan
menggunakan instruksi: b=fir1(8,500/(Fs/2),'high'), yang diketik pada
command window MATLAB seperti yang ditunjukkan pada Gambar 4.1.

Gambar 4.1. Command window mentukan koefisien filter.

b. Ketik program MATLAB seperti yang ditunjukkan pada listing program


sebagai berikut

Listing program digital filter FIR orde 8


%---------------- 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);
figure;
plot(t,x);
title ('Original Signal');
%-----------------FIR Digital Filter (Fcutoff HPF 500 Hz)-------------
b0=-0.0000;b1=-0.0161;b2=-0.0860;b3=-0.1948;b4=0.7501;b5=-0.1948;
b6=-0.0860;b7=-0.0161;b8=-0.0000;

25
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');

%-----------------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');

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.

26
Selanjutnya rencanakan low pass filter FIR dengan frekuensi cutoff 50
Hz orde 8. (b=fir1(8,50/(Fs/2),’low’));

f. Lakukan langkah (a) sampai dengan (d).


g. Lanjutkan percobaan merancang sebuah digital filter, yaitu band pass
filter FIR dengan frekuensi cutoff bawah 50 Hz dan cut off atas 200 Hz
orde 8 dengan frekuensi sampling 4000 Hz.

h. Lakukan langkah (a) sampai dengan (d).

4.2. Percobaan Disain Filter FIR orde 20


Tiga buah isyarat sinus dibangkitkan yang masing-masing mempunyai
frekuensi (20, 100, dan 1000 Hz). Rencanakan sebuah high pass filter FIR
orde 20 dengan frekuensi cutoff 500 Hz. Sehingga isyarat yang akan ditekan
adalah frekuensi 20 dan 100 Hz dan frekuensi yang akan dilewatkan adalah
1000 Hz.
a. Menghitung koefisien filter. Koefisien filter dihitung dengan
menggunakan instruksi: b=fir1(20,500/(Fs/2),'high'), yang diketik pada
command window MATLAB seperti yang ditunjukkan pada Gambar 4.1.

27
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.

28
PERCOBAAN 5. DIGITAL FILTER IIR

5.1. Percobaan Disain Filter IIR orde 2

Tiga buah isyarat sinus dibangkitkan yang masing-masing mempunyai


frekuensi (20, 100, dan 1000 Hz). Rencanakan sebuah high pass filter IIR
orde 2 dengan frekuensi cutoff 500 Hz. Sehingga isyarat yang akan ditekan
adalah frekuensi 20 dan 100 Hz dan frekuensi yang akan dilewatkan adalah
1000 Hz.
a. Menghitung koefisien filter. Koefisien filter dihitung dengan
menggunakan FDATOOL yang diketik pada command window MATLAB
(>> fdatool) dengan tampilan seperti yang ditunjukkan pada Gambar 6.1.

Gambar 5.1. Tampilan FDATOOL

29
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.

Gambar 5.2. Filter coefficients.


e. Pada menu FILE pilih submenu EXPORT untuk mendapatkan data
TXT koefisien.

Gambar 5.3. Export koefisien ke WORKSPACE


f. Ketik program berikut untuk membangun sebuah filter high pass IIR
orde 2.

30
%---------------- 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');

%-----------------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');

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.

31
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).

5.2. Percobaan Disain Filter IIR orde 8

Tiga buah isyarat sinus dibangkitkan yang masing-masing mempunyai


frekuensi (20, 100, dan 1000 Hz). Rencanakan sebuah high pass filter IIR
orde 8 dengan frekuensi cutoff 500 Hz. Sehingga isyarat yang akan ditekan
adalah frekuensi 20 dan 100 Hz dan frekuensi yang akan dilewatkan adalah
1000 Hz. Lakukan langkah-langkah seperti yang telah dilakukan pada
percobaan sebelumnya 1(a) sampai dengan 1(k) dengan menggunakan listing
program sebagai berikut:
Listing program IIR orde 8
%---------------- 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.12452952906897834; b1=-0.9962362325518267;
b2=3.486826813931393;
b3=-6.973653627862786;
b4=8.717067034828483; b5=-6.973653627862787; b6=3.486826813931393;
b7=-0.9962362325518267; b8=0.12452952906897834
% Denumerator
a1=-3.983784273174194; a2=7.5362341101208985;
a3=-8.5998150648014; a4=6.400154060347639;

32
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');

33
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.

Gambar 6.1. Tampilan PhysioBANK ATM

34
Gambar 6.2. Pilihan database sinyal biomedik

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.

6.1. Simulasi kontaminasi isyarat ECG dengan noise

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:

35
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);

Gambar 6.4. Gambar sinyal ECG asal

b. Lakukan modifikasi pada program dengan menambahkan noise 50Hz


atau artifact pada sinyal ECG, seperti yang ditunjukkan pada potongan
listing program berikut.

36
y=LEADI;
y=LEADI+noise50;
y=LEADI+artifact;

Gambar 6.5. Gambar sinyal ECG dan noise 50 Hz

Gambar 6.6. Gambar sinyal ECG dan noise artifact

37
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.

Gambar 6.7. Gambar spektrum ECG dan noise 50 Hz

% 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;

38
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');

Gambar 6.8. Gambar spektrum ECG dan artifact

d. Catat dan copy-paste untuk setiap plot yang dihasilkan oleh


program MATLAB dan setiap anda melakukan modifikasi untuk
pembuatan laporan.
e. Lakukan modifikasi pada program tersebut untuk mensimulasikan
apabila sinyal ECG mendapat noise dari frekuensi tinggi (1000 Hz)
dengan noise buatan sinus1000=0.1*sin(2*pi*1000*t).

39
6.2. Pembuatan tapis NOTCH IIR 50 Hz untuk sinyal ECG

Setelah memahami bagaimana membuat sinyal buatan dan mengambil


sinyal dari public dataset, selanjutnya adalah melakukan design band stop
filter 50 Hz dengan menggunakan pendekatan IIR. Karakteristik dari filter ini
adalah order 2, frekuensi sampling 5000 Hz, dan frekuensi cutoff bawah dan
atas masing-masing adalah 48 dan 52 Hz. Filter BAND STOP ini selanjutnya
digunakan untuk menekan frekuensi noise buatan sebesar 50 Hz yang
masuk pada sinyal ECG.
a. Lakukan perancangan BANDSTOP IIR filter dengan menggunakan tool
FDATOOL pada program MATLAB yang ditunjukkan pada Gambar 6.9.

Gambar 6.9. Konfigurasi rancangan filter IIR 50 Hz pada FDATOOL

Gambar 6.10. Response filter IIR 50 Hz pada FDATOOL

40
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.

Gambar 6.11. Convert to Single Section pada FDATOOL

Gambar 6.12. Koefisien filter, numerator dan denominator pada FDATOOL

b. Ketik program MATLAB sebagaimana yang ditunjukkan pada listing


program sebagai berikut.

%---------------- Signal Generator ------------------------------------


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);

41
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');

%-----------------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');

c. Catat dan lakukan copy-paste untuk setiap langkah percobaan yang


anda lakukan untuk pembuatan laporan.

42
Gambar 6.13. Sinyal ECG yang mendapat noise 50 Hz

Gambar 6.14. Sinyal ECG setelah melalui proses filter

d. Lakukan modifikasi pada program tersebut diatas, apabila ECG


tersebut mendapat kontaminasi sinyal dengan frekuensi tinggi sebesar
0.1*sin(2*pi*1000*t). Disain filter IIR orde 8 BPF 0.05 sd. 100 Hz.

43
PERCOBAAN 7
Implementasi Digital Filter ke Arduino

1. Implementasi IIR ke Arduino


Tiga buah isyarat sinus dibangkitkan yang masing-masing mempunyai
frekuensi (20, 100, dan 1000 Hz). Rencanakan sebuah high pass filter IIR
orde 2 dengan frekuensi cutoff 500 Hz. Sehingga isyarat yang akan ditekan
adalah frekuensi 20 dan 100 Hz dan frekuensi yang akan dilewatkan adalah
1000 Hz. Frekuensi sampling 4000 Hz.
a. Menghitung koefisien filter. Koefisien filter dihitung dengan
menggunakan FDATOOL yang diketik pada command window MATLAB
(>> fdatool) dengan tampilan seperti yang ditunjukkan pada Gambar
6.1.

Gambar 7.1. Tampilan FDATOOL

44
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.

Gambar 7.2. Filter coefficients.


e. Pada menu FILE pilih submenu EXPORT untuk mendapatkan data
TXT koefisien.

Gambar 7.3. Export koefisien ke WORKSPACE


f. Ketik program berikut untuk membangun sebuah filter high pass IIR
orde 2.

45
#define ts 0.0002
//double b[9]={-0.0000,-0.0161,-0.0860,-0.1948,0.7501,-0.1948,-0.0860,-
0.0161,-0.0000};
double b[3]={0.569,-1.138,0.569};
double a[3]={1,-0.942,0.333};

int i;
double x,noise50,y2,y1,y,x2,x1,x0;
void setup() {
y1=0;y=0;x1=0;x0=0;
Serial.begin(115200);
}
void loop() {
// put your main code here, to run repeatedly:
for(i;i<5000;i++)
{
noise50=sin(2*3.14*50*i*ts);
x=sin(2*3.14*20*i*ts)+ sin(2*3.14*100*i*ts)+ sin(2*3.14*1000*i*ts);
y2=y1;
y1=y;
//
x2=x1;
x1=x0;
x0=x;
y=b[0]*x0 + b[1]*x1 + b[2]*x2 - a[1]*y1 - a[2]*y2;
Serial.println(y);
delay(1);
}
}

46
g. Jalankan serial monitor
Jalankan program serial monitor untuk melihat pengiriman data dari
mikrokontroller ke PC melalui komunikasi serial. Dengan menggunakan
fasilitas ini maka kita dapat membandingkan sebelum dan sesudah proses
penapisan. Blok semua data yang ada pada serial monitor dengan CTRL-A
dan CTRL-C, selanjutnya PASTE ke program Excell data sebelum dan
sesudah di tapis.

Gambar 7.4. Tampilan serial monitor


4
3 (a) Signal=20 Hz + 100 Hz + 1000 Hz
2
1
0
-1 0 100 200 300 400 500 600 700 800 900 1000

-2
-3
-4

1.5

1 (b) Signal=1000 Hz
0.5

0
0 10 20 30 40 50 60 70 80 90 100
-0.5

-1

-1.5

Gambar 7.5. Tampilan (a) signal campuran (b) signal 1000 Hz.

47
2. Implementasi FIR ke Arduino
Rencanakan program Arduino untuk membangkitkan frekuensi 20, 100 dan
1000 Hz dengan menggunakan fungsi sinus sebagaimana percobaan 7.1.
Rencanakan sebuah high pass filter IIR orde 2 dengan frekuensi cutoff 500
Hz. Sehingga isyarat yang akan ditekan adalah frekuensi 20 dan 100 Hz dan
frekuensi yang akan dilewatkan adalah 1000 Hz. Frekuensi sampling 4000
Hz.

3. Implementasi ECG generator


a. Bangkitkan sinyal ECG dengan menggunakan rekaman data

file excel sebelumnya. Lakukan proses donwsampling untuk


merubah frekuensi sampling 5000 Hz ke 500 Hz (karena data
terlalu banyak apabila tidak di downsampling) dengan
menggunakan instruksi: LEADIIds=downsample(LEADII,100);

clear all;
clc;
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);
LEADIIds=downsample(LEADII,100);

Gambar 7.6. Copy workspace hasil downsampling 5000 Hz ke 500 Hz

48
b. Tentukan nilai terendah dari isyarat ECG LEAD 2 (dengan

fungsi MIN (A1..A500), selanjutnya kalikan dengan konstanta


100 untuk mendapatkan nilai bulat dengan fungsi
ROUND(LEADIIds,0).

Tabel 7.1. Proses konversi data ECG ke desimal

ECG LEADII ECG MAX OFFSET CONVERT Pembulatan Penambahan “,”


-0.038 =MAX(A1..A500 =A1+0.62 =C1*100 =ROUND(D1,0) =E1&”,”
-0.029
-

c. Blok kolom E1 sd E500 dan lakukan proses transpose untuk merubah


dari kolom ke baris.

Gambar 7.7. Proses transpose data dari kolom ke baris

#define ts 0.0002
int ecg[500] ={
56, 57, 56, 57, 57, 57, 58, 58, 66, 66, 62, 59, 55, 56, 56, 70, 85,
28, 46, 61, 63, 62, 62, 63, 64, 65, 66, 69, 72, 75, 77, 79, 74, 64,
56, 54, 53, 54, 55, 55, 56, 56, 56, 56, 55, 56, 55, 56, 55, 55, 56,

49
55, 57, 56, 59, 64, 65, 61, 57, 54, 55, 57, 77, 75, 18, 57, 61, 63,
63, 63, 64, 65, 67, 68, 71, 75, 78, 80, 80, 72, 62, 56, 55, 55, 56,
57, 57, 58, 58, 57, 57, 57, 57, 57, 57, 58, 57, 58, 58, 58, 59, 66,
67, 63, 59, 56, 56, 57, 74, 86, 20, 52, 62, 62, 63, 62, 64, 64, 66,
67, 70, 73, 77, 79, 80, 73, 63, 56, 54, 53, 55, 55, 57, 57, 56, 57,
55, 56, 56, 56, 56, 56, 56, 56, 56, 57, 57, 57, 62, 65, 64, 59, 55,
54, 54, 60, 80, 63, 23, 60, 61, 61, 61, 61, 62, 64, 65, 67, 70, 73,
76, 78, 76, 68, 58, 54, 53, 53, 55, 56, 56, 56, 56, 56, 56, 54, 55,
56, 55, 56, 56, 54, 57, 58, 61, 66, 63, 60, 53, 55, 55, 63, 82, 36,
41, 58, 59, 60, 59, 60, 62, 60, 61, 65, 68, 71, 71, 74, 70, 60, 52,
49, 48, 48, 50, 51, 54, 50, 49, 53, 50, 50, 49, 52, 54, 52, 50, 50,
53, 53, 42, 56, 53, 49, 45, 42, 50, 48, 69, 67, 0, 48, 45, 45, 42,
38, 44, 48, 53, 54, 56, 66, 62, 67, 70, 60, 55, 49, 45, 46, 48, 49,
46, 55, 50, 50, 53, 52, 51, 54, 52, 53, 55, 54, 53, 56, 57, 55, 61,
65, 64, 59, 56, 53, 53, 58, 77, 73, 15, 57, 58, 61, 61, 61, 61, 63,
65, 66, 70, 72, 75, 78, 76, 70, 60, 56, 54, 58, 52, 56, 56, 59, 53,
55, 56, 57, 60, 60, 61, 59, 60, 59, 58, 60, 66, 67, 61, 61, 56, 57,
57, 75, 85, 24, 53, 64, 65, 64, 66, 66, 66, 70, 70, 73, 77, 79, 84,
82, 78, 67, 61, 58, 57, 59, 60, 60, 61, 60, 61, 60, 59, 61, 60, 60,
60, 60, 61, 60, 61, 62, 69, 70, 67, 61, 59, 58, 59, 75, 87, 29, 52,
64, 66, 66, 66, 67, 68, 70, 71, 72, 77, 79, 84, 83, 78, 68, 61, 59,
59, 59, 60, 61, 62, 60, 62, 60, 61, 60, 61, 60, 60, 62, 61, 60, 60,
61, 63, 68, 69, 65, 63, 58, 59, 59, 78, 83, 18, 57, 65, 65, 65, 66,
67, 67, 68, 70, 74, 76, 78, 81, 81, 74, 65, 58, 57, 57, 57, 58, 58,
60, 59, 58, 57, 58, 59, 57, 59, 57, 58, 58, 57, 58, 63, 66, 65, 59,
56, 55, 55, 61, 82, 56, 29, 62, 60, 61, 61, 63, 63, 65, 66, 68, 70,
74, 76, 76, 73, 66, 56, 53};
int i;

50
double x;

void setup() {
Serial.begin(115200);
}
void loop() {
for(i;i<500;i++)
{
x=ecg[i];
Serial.println(x);
delay(1);
}
}

d. Jalankan serial monitor untuk melihat hasil dan lakukan copy-


paste ke Excel untuk melihat hasilnya

Gambar 7.8. Hasil rekaman ECG pada serial monitor

51
4. Rencanakan program digital filter IIR (orde 4, frekuensi
sampling 500 Hz, HPF frekuensi cutoff 10 Hz) dengan Arduino,
gunakan rekaman isyarat ECG sebelumnya yang telah didown-
sampling (ke 500 Hz) yang diganggu dengan gerakan anggota
tubuh (artifact) dengan frekuensi 5 Hz.

52
PERCOBAAN 8
ON/OFF LED MELALUI WEBSERVER

1. Percobaan ON-OFF LED (BUILT IN LED)


a. Pada percobaan ini akan dibangun kendali ON-OFF LED yang
telah terpasang pada modul KIT ESP32 DOIT V1. Posisi LED
adalah terhubung pada GPIO 2 (LED warna biru). Untuk
mengganti koneksi dengan LED eksternal yang lain gunakan
LED dan resistor 220 ohm dan jumper agar dapat dihubungkan
ke PORT ESP32. Gambar 8.1 menunjukkan konfigurasi PIN
ESP32.

Gambar 8.1. Pin IO ESP32


(http://forum.fritzing.org/uploads/default/original/2X/a/ae3dc4cc089ce3e73de2d367da5dbf22102bd7c3.jpg)
https://randomnerdtutorials.com/esp32-pinout-reference-gpios/

53
b. Install library ESP32 pada IDE Arduino apabila belum
terpasang. Selanjutnya pilih ESP32 Dev Module pada
pemilihan BOARD. Jangan lupa juga pilih PORT SERIAL
yang terdeteksi pada saat tersebut.
c. Ketik program untuk kendali LED ON-OFF seperti yang
ditunjukkan pada Listing program di bawah ini.

// Load Wi-Fi library


#include <WiFi.h>

// Replace with your network credentials


const char* ssid = "BENGKEL";
const char* password = "wargatekmed";

// Set web server port number to 80


WiFiServer server(80);

// Variable to store the HTTP request


String header;

// Auxiliar variables to store the current output state


String output26State = "off";
String output27State = "off";

// Assign output variables to GPIO pins


const int output26 = 2;// ganti dg PORT yang lain
const int output27 = 2;// ganti dg PORT yang lain

void setup() {
Serial.begin(115200);
// Initialize the output variables as outputs
pinMode(output26, OUTPUT);
pinMode(output27, OUTPUT);
// Set outputs to LOW
digitalWrite(output26, LOW);
digitalWrite(output27, LOW);

// Connect to Wi-Fi network with SSID and password


Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// Print local IP address and start web server
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
}

54
void loop(){
WiFiClient client = server.available(); // Listen for incoming clients

if (client) { // If a new client connects,


Serial.println("New Client."); // print a message out in the serial port
String currentLine = ""; // make a String to hold incoming data from the
client
while (client.connected()) { // loop while the client's connected
if (client.available()) { // if there's bytes to read from the client,
char c = client.read(); // read a byte, then
Serial.write(c); // print it out the serial monitor
header += c;
if (c == '\n') { // if the byte is a newline character
// if the current line is blank, you got two newline characters in a row.
// that's the end of the client HTTP request, so send a response:
if (currentLine.length() == 0) {
// HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
// and a content-type so the client knows what's coming, then a blank line:
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println("Connection: close");
client.println();

// turns the GPIOs on and off


if (header.indexOf("GET /26/on") >= 0) {
Serial.println("GPIO 26 on");
output26State = "on";
digitalWrite(output26, HIGH);
} else if (header.indexOf("GET /26/off") >= 0) {
Serial.println("GPIO 26 off");
output26State = "off";
digitalWrite(output26, LOW);
} else if (header.indexOf("GET /27/on") >= 0) {
Serial.println("GPIO 27 on");
output27State = "on";
digitalWrite(output27, HIGH);
} else if (header.indexOf("GET /27/off") >= 0) {
Serial.println("GPIO 27 off");
output27State = "off";
digitalWrite(output27, LOW);
}

// Display the HTML web page


client.println("<!DOCTYPE html><html>");
client.println("<head><meta name=\"viewport\" content=\"width=device-width,
initial-scale=1\">");
client.println("<link rel=\"icon\" href=\"data:,\">");
// CSS to style the on/off buttons
// Feel free to change the background-color and font-size attributes to fit your
//preferences
client.println("<style>html { font-family: Helvetica; display: inline-block; margin:
0px auto; text-align: center;}");
client.println(".button { background-color: #4CAF50; border: none; color: white;
padding: 16px 40px;");
client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor:
pointer;}");
client.println(".button2 {background-color: #555555;}</style></head>");

55
// Web Page Heading
client.println("<body><h1>ESP32 Web Server</h1>");

// Display current state, and ON/OFF buttons for GPIO 26


client.println("<p>GPIO 26 - State " + output26State + "</p>");
// If the output26State is off, it displays the ON button
if (output26State=="off") {
client.println("<p><a href=\"/26/on\"><button
class=\"button\">ON</button></a></p>");
} else {
client.println("<p><a href=\"/26/off\"><button class=\"button
button2\">OFF</button></a></p>");
}

// Display current state, and ON/OFF buttons for GPIO 27


client.println("<p>GPIO 27 - State " + output27State + "</p>");
// If the output27State is off, it displays the ON button
if (output27State=="off") {
client.println("<p><a href=\"/27/on\"><button
class=\"button\">ON</button></a></p>");
} else {
client.println("<p><a href=\"/27/off\"><button class=\"button
button2\">OFF</button></a></p>");
}
client.println("</body></html>");

// The HTTP response ends with another blank line


client.println();
// Break out of the while loop
break;
} else { // if you got a newline, then clear currentLine
currentLine = "";
}
} else if (c != '\r') { // if you got anything else but a carriage return character,
currentLine += c; // add it to the end of the currentLine
}
}
}
// Clear the header variable
header = "";
// Close the connection
client.stop();
Serial.println("Client disconnected.");
Serial.println("");
}
}

d. Pada saat load program ke ESP32 tekan tombol EN pada


board ESP agar program dapat masuk ke ROM ESP32.
e. Untuk melihat ADDRESS yang sedang digunakan oleh
WEBSERVER ESP32, maka jalankan program serial monitor
pada IDE Arduino dan tekan tombol RESET.

56
f. Ketik ADDRESS yang terdeteksi tersebut misal:
192.168.0.165 dan ENTER, maka program akan
menampilkan hasil sebagai berikut.

g. Tambahkan jumlah LED menjadi 4 buah berdasarkan


contoh program tersebut diatas.

57
PERCOBAAN 8
DISPLAY DATA ADC KE WEBSERVER

Gambar 8.1. Konfigurasi pin ESP32 (30 pin)

8.1. Pembacaan Data ADC satu Channel


a. Lakukan pemasangan potensio pada pin GPIO36 (ADC0)
sedangkan pin yang lain terhubung ke VDD (3V) dan GND.
Lakukan pemrograman seperti yang ditunjukkan pada listring
program sebagai berikut.

#include "esp_system.h"
#include <WiFi.h>
//
const char* ssid = "BENGKEL";
const char* password = "wargatekmed";
int *aDcData0;

58
int *aDcData1;
int *aDcData2;
int *aDcData3;

long int total0,total1,total2,total3;


int SampleCount = 100;
int y,y2,record;

unsigned long ulMeasCount=0;


unsigned long ulNextMeas_ms=0;
//int ReFresh = 10;
int siZe = 1000;
#define LED_BUILTIN 2

WiFiServer server(80);

hw_timer_t * timer = NULL;

void GetReading(){
//ulMeasCount++;
//if(ulMeasCount>(siZe-1)){ulMeasCount=1;clearArray();}
//for(int i=0;i<SampleCount;i++){
total0 += analogRead(36); // Read ADC4
//total1 += analogRead(36); // Read ADC5
//total2 += analogRead(36); // Read ADC6
//total3 += analogRead(36); // Read ADC7
//}
aDcData0[0] = total0 / 1;
//aDcData1[ulMeasCount] = total1 / SampleCount;
//aDcData2[ulMeasCount] = total2 / SampleCount;
//aDcData3[ulMeasCount] = total3 / SampleCount;
//total0=0;
//total1=0;
//total2=0;
//total3=0;
}

void clearArray(){
for(int i=0;i<1;i++){
aDcData0[i]=0;
//aDcData1[i]=0;
//aDcData2[i]=0;
//aDcData3[i]=0;
}
}

void setup()
{
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT); // set the LED pin mode

delay(10);

// We start by connecting to a WiFi network

Serial.println();
Serial.println();
Serial.print("Connecting to ");

59
Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {


delay(500);
Serial.print(".");
}

Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());

server.begin();
aDcData0 = new int[0];
//aDcData1 = new int[siZe];
//aDcData2 = new int[siZe];
//aDcData3 = new int[siZe];
clearArray();

// Use 1st timer of 4 (counted from zero).


// Set 80 divider for prescaler (see ESP32 Technical Reference Manual for more
// info).
timer = timerBegin(0, 80, true);

// Attach onTimer function to our timer.


timerAttachInterrupt(timer, &GetReading, true);

// Set alarm to call onTimer function every second (value in microseconds).


// Repeat the alarm (third parameter)
timerAlarmWrite(timer, 5000, true); // 2 milliseconds

// Start an alarm
timerAlarmEnable(timer);
}

int value = 0;
int val = 0;

void loop(){
WiFiClient client = server.available(); // listen for incoming clients

if (client) { // if you get a client,


//val = hallRead(); // Read Hall Sensor
IPAddress ip = WiFi.localIP(); // IP to display
FlashMode_t ideMode = ESP.getFlashChipMode();
Serial.println("new client"); // print a message out the serial port
String currentLine = ""; // make a String to hold incoming data from the
client
while (client.connected()) { // loop while the client's connected
if (client.available()) { // if there's bytes to read from the client,
char c = client.read(); // read a byte, then
Serial.write(c); // print it out the serial monitor
if (c == '\n') { // if the byte is a newline character

// if the current line is blank, you got two newline characters in a row.
// that's the end of the client HTTP request, so send a response:
if (currentLine.length() == 0) {

60
// HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
// and a content-type so the client knows what's coming, then a blank line:
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println();
// the content of the HTTP response follows the header:
int adcnum=3;
for(int loOp=36;loOp<37;loOp++){
String out = "";
char temp[100];
int dIspV;
if(loOp==32) { y = aDcData0[1] / 30; dIspV=aDcData0[ulMeasCount];}
else if(loOp==33) { y = aDcData1[1] / 30; dIspV=aDcData1[ulMeasCount];}
else if(loOp==34) { y = aDcData2[1] / 30; dIspV=aDcData2[ulMeasCount];}
else if(loOp==35) { y = aDcData3[1] / 30; dIspV=aDcData3[ulMeasCount];}
client.print("ADC");
client.print(adcnum++);
client.print(" Last Value Sampled on pin ");
client.print(loOp);
client.print(" : ");
client.print(dIspV);
client.print("<BR>");
out += "<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" width=\"1000\"
height=\"150\">\n";
out += "<rect width=\"1000\" height=\"150\" fill=\"rgb(250, 230, 210)\" stroke-
width=\"1\" stroke=\"rgb(0, 0, 0)\" />\n";
out += "<g stroke=\"black\">\n";
record = 2;
for (int x = 1; x < ulMeasCount; x+=1) {
if(loOp==32) { y2 = aDcData0[record] / 30;}
else if(loOp==33) { y2 = aDcData1[record] / 30;}
else if(loOp==34) { y2 = aDcData2[record] / 30;}
else if(loOp==35) { y2 = aDcData3[record] / 30;}
sprintf(temp, "<line x1=\"%d\" y1=\"%d\" x2=\"%d\" y2=\"%d\" stroke-width=\"1\"
/>\n", x, 140 - y, x + 1, 140 - y2);
out += temp;
y = y2;
record++;
if(out.length()>2000){
client.print(out);
out="";
}
}

out += "</g>\n</svg><BR>";

client.print(out);
}
client.print("<BR>Click <a href=\"/H\">here</a> turn the Onboard LED
on<br>");
client.print("Click <a href=\"/L\">here</a> turn the Onboard LED off<br>");
// client.print("Hall Sensor Value : ");
//client.print(String(val));
client.print("<BR>Local IP Address : ");
client.print(ip);
client.print("<BR> Free RAM = ");
client.print((uint32_t)system_get_free_heap_size() / 1024);
client.print(" KB<BR> SDK Version = ");
client.print(ESP.getSdkVersion());

61
client.print("<BR>");
client.printf(" Flash Chip Mode = %s\n", (ideMode == FM_QIO ? "QIO" : ideMode
== FM_QOUT ? "QOUT" : ideMode == FM_DIO ? "DIO" : ideMode == FM_DOUT ? "DOUT" :
"UNKNOWN"));
client.print("<BR> Flash Size (IDE) = ");
client.print(ESP.getFlashChipSize()/1024);
client.print(" KBytes<BR> Flash Speed = ");
client.print(ESP.getFlashChipSpeed()/1000000);
client.print("MHz<BR>");
// The HTTP response ends with another blank line:
client.println();
// break out of the while loop:
break;
} else { // if you got a newline, then clear currentLine:
currentLine = "";
}
} else if (c != '\r') { // if you got anything else but a carriage return character,
currentLine += c; // add it to the end of the currentLine
}

// Check to see if the client request was "GET /H" or "GET /L":
if (currentLine.endsWith("GET /H")) {
digitalWrite(LED_BUILTIN, HIGH); // GET /H turns the LED on
// put your main code here, to run repeatedly:
}
if (currentLine.endsWith("GET /L")) {
digitalWrite(LED_BUILTIN, LOW); // GET /L turns the LED off
}
}
}
// close the connection:
client.stop();
Serial.println("client disonnected");
}
}

b. Jalankan program dengan memanggil alamat


http://192.168.0.4 dengan menggunakan aplikasi internet
explorer, google chrome dll, dengan tampilan sebagai berikut.

62
Gambar 8.2. Tampilan program pembacaan data ADC di server

8.2. Display Data ADC ke Web Server 2 channel


Rencanakan program untuk mengambil data ADC dua channel
dan tampilan hasil bacaan tersebut ke Webserver.

63
PERCOBAAN 9
DISPLAY DATA DHT11 KE THINKSPEAK

Thinkspeak merupakan server penyedia layanan display


parameter untuk percobaan internet of think (IOT). Pemilihan
Thinkspeak dikarenakan mempunyai setting parameter dan
Dashboard (bentuk display) yang mudah dipahami dan terdapat
fasilitas gratis (FREE) dan berbayar dengan fitur yang lengkap
tentunya.

Gambar 9.1. Situs thingspeak untuk belajar IOT.

9.1. Percobaan Display DHT11 ke Thinkspeak


a. Hubungkan sensor DHT11 ke board ESP dengan menggunakan
konfigurasi sebagai berikut. Hubungkan kabel WARNA HIJAU
tersebut ke PIN 15 dari ESP32.

Gambar 9.2. Pin konfigurasi sensor DHT11

64
PIN 15

Gambar 9.3. Koneksi sensor DHT11 ke ESP32


b. Ketik atau copy-paste listing program dibawah ini dan lakukan
pemrograman pada ESP32.

/*
https://vegardpaulsen.wordpress.com/2015/07/18/soldering-iron-and-
nodemcu-iot-device/
https://www.instructables.com/id/Iot-Pan-With-ESP32-and-
Thingspeak/
https://roboindia.com/tutorials/nodeMCU-dht11-thingspeak-data-
upload

*/

#include <WiFi.h>
#include "DHT.h"

String apiKey = "UH3Y2229333D8TY3";// Enter your Write API key from


// ThingSpeak

const char* ssid = "BENGKEL";


const char* password = "wargatekmed";

const char* server = "api.thingspeak.com";

#define DHTPIN 15 //pin where the dht11 is connected

DHT dht(DHTPIN, DHT11);

WiFiClient client;

65
void setup()
{
Serial.begin(115200);
delay(10);
dht.begin();

Serial.println("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid, pass);

while (WiFi.status() != WL_CONNECTED)


{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");

void loop()
{

float h = dht.readHumidity();
float t = dht.readTemperature();

if (isnan(h) || isnan(t))
{
Serial.println("Failed to read from DHT sensor!");
return;
}

if (client.connect(server,80)) // "184.106.153.149" or
api.thingspeak.com
{

String postStr = apiKey;


postStr +="&field1=";
postStr += String(t);
postStr +="&field2=";
postStr += String(h);
postStr += "\r\n\r\n";

client.print("POST /update HTTP/1.1\n");


client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");

66
client.print("Content-Type: application/x-www-form-
urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);

Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" degrees Celcius, Humidity: ");
Serial.print(h);
Serial.println("%. Send to Thingspeak.");
}
client.stop();

Serial.println("Waiting...");

// thingspeak needs minimum 15 sec delay between updates, i've set it


to 30 seconds
delay(10000);
}

c. Masuk ke https://thingspeak.com/ dan buat sebuah akun


(gratis) apabila and belum memiliki. Selanjutnya LOGIN pada
akun anda. Buat sebuah CHANNEL baru dengan memilih button
tersebut (Enter basic details of the channel). Selanjutnya SCROLL
DOWN dan SAVE channel tersebut. ID Channel adalah digunakan
sebagai identitas channel anda. Selanjutnya, silahkan menuju ke
API keys, copy dan paste key tersebut pada notepad untuk
selanjutnya dipasang pada script program tersebut diatas.

Gambar 9.4. Menu channel

67
Gambar 9.5. Pembuatan channel baru

Gambar 9.6. Penamaan Fild-field pada channel

Gambar 9.7. Mendapatkan API Key.

68

Anda mungkin juga menyukai