Anda di halaman 1dari 19

Laporan Resmi

Monitoring Suhu dengan Arduino dan


Processing

Rafika Rizky Ramadhani


1210181008 / 3 D4 TA
Politeknik Elektronika Negeri Surabaya
MATERI 5
MONITORING SUHU DENGAN ARDUINO DAN PROCESSING

A. TUJUAN
1. Membaca nilai Suhu menggunakan sensor LM35 dan Arduino
2. Memantau perubahan nilai suhu dan menampilkan dalam bentuk grafis
menggunakan processing

B. DASAR TEORI
Membaca nilai suhu dan mengkonversikan kedalam nilai digital. Menghitung nilai
temperatur/suhu :

Menampilkan setiap perubahan nilai suhu derajat Celcius ke bentuk grafis. Sehingga
dapat memantau setiap perubahan nilai suhu melalui perubahan dari grafis tersebut.
Salah satu bentuk grafis adalah obyek elips (lingkaran/oval). Untuk membuat lingkaran
processing menggunakan perintah : ellipse(x,y,width, height). Parameter x dan y
menentukan lokasi ellips, Parameter width menyatakan lebar elips dan parameter height
menyatakan tinggi elips. Apabila width dan height bernilai sama maka akan diperoleh
sebuah lingkaran.

Gambar 1. Obyek Ellipse/lingkaran

Parameter x dan y menentukan lokasi elips dipengaruhi oleh perintah ellipseMode(),


Perintah ellipseMode() mempunyai sintak :
ellipseMode(mode)
Mode berisi CORNER yang berarti parameter (x,y) menyatakan lokasi pojok kiri atas
dari ellipse dan mode berisi CENTER berarti parameter (x,y) menyatakan lokasi titik
tengah dari ellips. Processing secara baku menggunakan mode CENTER.
a. Perintah noStroke() dan Stroke()
Perintah noStroke() dapat diberikan sebelum perintah ellipse() untuk menggambar
elips tanpa garis pinggir. Perintah stroke() juga dapat digunakan mengatur besamya
garis pinggir.
b. Mengisi Ellips.
Elips dapat diisi dengan wama menggunakan perintah fiIl(). Perintah fill()
mempunyai sintak sebagai berikut:
fill(gray)
fill(gray,alpha)
flll(color)
fill(valuel, value2, value3)
fill(valuel, value2, value3,alpha)
Untuk membatalkan perintah fill() dengan perintah noFill().Selain lingkaran grafis
yang lain adalah Persegi Panjang. Perintah untuk menggambar persegi panjang
adalah : rect(x1, y1, width,height). Dengan x1 dan y1 menyatakan lokasi dari
persegi panjang, width menyatakan lebar (mendatar) dan height menyatakan tinggi
(vertikal). Lokasi persegi panjang diatur menggunakan perintah : rectMode(mode)
dengan mode berisi CENTER berarti x1dan yl menyatakan titik tengah persegi
panjang dan mode berisi CORNER berarti x1 dan y1 menyatakan titik sudut kiri
atas dari persegi panjang dan mode berisi CORNERS berarti x1, y1 menyatakan
salah satu titik sudut dan x2, y2 menyatakan lokasi sudut yang berlawanan.
background (0)
stroke (255)
fill (252, 3, 19);
rectMode (CENTER);
rect (width/2, height/2, 50, 50);

Gambar 2. Obyek Persegi

C. PERALATAN
1. Arduino Uno Board
2. 1x LM35 sensor suhu
3. Kabel jumper
4. Software Processing

D. RANGKAIAN
Gambar 3. Rangkaian Percobaan

E. PERCOBAAN DAN ANALISA


Link video : https://drive.google.com/drive/folders/1GlwihVbPGFBlqLb-
YwedANmrJI6rOXAG?usp=sharing
1. Indicator bar temperature dari LM35 dengan processing

a. Program Arduino
float tempC;
int sensorPin = 0;
void setup(){
Serial.begin(9600);
}
void loop(){
tempC = analogRead(sensorPin);
tempC = (5.0 * tempC * 100.0)/1024.0;
Serial.println();
Serial.print(tempC);
delay(1000);
}

b. Program processing
import processing.serial.*;
Serial commPort;
float tempC;
float tempF;
int yDist;
String temp;
float[] tempHistory = new float[100];
void setup(){
size(360, 320);
commPort = new Serial(this, "COM1", 9600);
for (int index = 0; index<100; index++)
tempHistory[index] = 0;
}
void draw(){
while (commPort.available() > 0) {
String inString = commPort.readStringUntil('\n');
if (inString != null) {
temp = trim(inString);
tempC=float(temp);
println(tempC);
}
background(123);
colorMode(RGB, 160); //use color mode sized for fading
stroke (0);
rect (49, 19, 22, 162);
for (int colorIndex = 0; colorIndex <= 160; colorIndex++) {
stroke(160 - colorIndex, 0, colorIndex);
line(50, colorIndex + 20, 70, colorIndex + 20);
}
stroke(0);
fill(255, 255, 255);
rect(90, 80, 100, 100);
for (int index = 0; index<100; index++) {
if (index == 99)
tempHistory[index] = tempC;
else
tempHistory[index] = tempHistory[index + 1];
point(90 + index, 180 - tempHistory[index]);
}
fill(0, 0, 0);
textAlign(RIGHT);
text("212 F", 45, 25);
text("32 F", 45, 187);
yDist = int(160 - (160 * (tempC * 0.01)));
stroke(0);
triangle(75, yDist + 20, 85, yDist + 15, 85, yDist + 25);
fill(0, 0, 0);
textAlign(LEFT);
text(str(int(tempC)) + " C", 115, 37);
tempF = ((tempC*9)/5) + 32;
text(str(int(tempF)) + " F", 115, 65);
}
}

c. Hasil
d. Analisa
Pada percobaan pertama, yaitu menampilkan indicator bar temperature pada
tampilan processing dengan data suhu dari sensor LM35 yang nilainya dibaca
melalui Arduino. Pada program Arduino, terdapat pembacaan nilai LM35 pada
pin analog A0 Arduino yaitu menggunakan fungsi analogRead(), lalu terdapat
rumus untuk nilai celcius yang disimpan pada variable tempC. Pada program
processing, terdapat program untuk mendesain tampilan output berupa indicator
bar dari nilai suhu sensor LM35. Kemudian juga terdapat rumus untuk nilai
derajat Fahrenheit yang disimpan pada variable tempF=((tempC*9)/5) + 32.
Nilai celcius berasal dari program Arduino dimana nilai celcius ini sama dengan
nilai LM35 yang kemudian nilai tersebut dibawa ke processing dan di
konversikan ke nilai derajat Fahrenheit. Kemudian terdapat program untuk
tampilan warna, garis dan text yaitu menggunakan fungsi stroke(), line() dan
text(). Sehingga dapat menampilkan tampilan processing seperti pada output
diatas. Sehingga apabila nilai pada sensor lm35 diubah maka akan mengubah
bar indikator dan nilai fahreinheit dari tampilan processing juga.

2. Indicator ellipse temperature LM35

a. Program Arduino
float temp;
int tempPin = 0;
void setup(){
Serial.begin(9600);
}
void loop(){
temp = analogRead(tempPin);
temp = temp * 0.48828125;
Serial.println(temp);
delay(1000);
}

b. Program processing
import processing.serial.*;
int lf = 10;
String myString = null;
Serial myPort;
float num;
void setup() {
background(255,255,255);
size(320,240); frameRate(120);
myPort = new Serial(this, Serial.list()[0], 9600);
myPort.clear();
}

void draw() {
while (myPort.available() > 0) {
myString = myPort.readStringUntil(lf);
if (myString != null) {
print(myString);
num=float(myString);
println(num); println(frameCount);
background(255,255,255);
fill(#ffcb01);
ellipse(160,120,num*4,num*4);
}
}
myPort.clear();
}
c. Hasil

d. Analisa
Pada percobaan kedua ini yaitu menampilkan ellipse pada processing dimana
ukuran ellipse ini digunakan sebagai temperature indicator dari sensor LM35.
Rangkaiannya masih sama dengan percobaan sebelumnya, yaitu nilai dari
LM35 dibaca pada pin analog A0 arduino, dan pada program Arduino dibaca
nilainya menggunakan fungsi analogRead(). Kemudian pada program
processing terdapat framerate() yang digunakan untuk mengontrol beberapa kali
fungsi draw() yang akan digunakan untuk menampilkan ellipse. Kemudian data
string yang berisi nilai nilai dari sensor LM35 yang telah dibaca di Arduino di
deklaraasikan pada program processing agar bisa menampilan ellipse dengan
ukuran sesuai nilai LM35 tersebut. Sehingga Ketika nilai sensor LM35 kecil
maka ellipse akan berukuran kecil, semakin besar nilai LM35 ukuran ellipse
pun akan semakin besar.

F. KESIMPULAN
1. Fungsi analogRead() digunakan untuk membaca nilai input analog dari perangkat
yang terhubung ke pin analog arduino, dimana dalam praktikum ini pin analog A0
arduino terhubung dengan sensor LM35 sehingga nilai yang dibaca dengan fungsi
analogRead() adalah nilai dari sensor LM35.
2. Untuk membuat ellipse atau lingkaran dapat menggunakan perintah ellipse(x,y,
width, height). Parameter x dan y menentukan lokasi ellipse, parameter width untuk
lebar ellipse dan height untuk tinggi ellipse. Apabila nilai width dan height sama
maka akan menjadi sebuah diameter lingkaran dan outputnya pun lingkaran.
3. Nilai suhu dapat dikonversikan dari celcius ke Fahrenheit, namun dalam program
yang berbeda. Seperti pada percobaan pertama, nilai celcius dihitung pada program
Arduino dan dikonversikan ke Fahrenheit pada program processing.
4. Untuk membuat persegi menggunakan perintah rect(x1, y1, width,height). Dengan x1 dan
y1 menyatakan lokasi dari persegi, width menyatakan lebar (mendatar) dan
height menyatakan tinggi (vertikal). Ketika parameter width dan height nilainya sama akan
membentuk sebuah persegi, jika nilainya berbeda akan membentuk sebuah persegi
Panjang.
5. Terdapat fungsi framerate() pada processing yang digunakan untuk mengontrol berapa kali
fungsi draw() akan dieksekusi.

G. LATIHAN
1. Buat aplikasi menggunakan rangkaian di bawah untuk menampilkan nilai suhu
pada LED dan grafik berupa 3 persegi panjang dengan warna merah kuning dan
hijau.
Rangkaian

a. Program Arduino :
int tempC;
int sensorPin = A0;
int led[] = {2, 3, 4, 5, 6, 7};
void setup() {
Serial.begin(9600);
for (int i = 0; i < 6; i++) {
pinMode(led[i], OUTPUT);
}
}
void loop() {
tempC = analogRead(sensorPin);
tempC = tempC * 0.48828125;
Serial.println(tempC);
for ( int j = 0 ; j < 6; j++ ) {
digitalWrite(led[j], LOW);
}
if ( tempC < 27) {
digitalWrite(led[0], HIGH);
digitalWrite(led[1], HIGH);
}
else if (tempC == 27) {
for ( int j = 0 ; j < 4; j++ ) {
digitalWrite(led[j], HIGH);
}
}
else if (tempC > 27 ) {
for ( int j = 0 ; j < 6; j++ ) {
digitalWrite(led[j], HIGH);
}
}
delay(300);
}

b. Program Processing
import processing.serial.*;
Serial myPort;
String myString = null;
float num;
int lf = 10;
void setup() {
size(300,300);
myPort = new Serial(this, Serial.list()[0], 9600);
}
void draw() {
while (myPort.available() > 0) {
myString = myPort.readStringUntil(lf);
if (myString != null) {
print(myString);
num=float(myString);
background(255,255,255);
if (num<27) {
fill(0,255,0);
rect(70,150,35,(num*3.845));
fill(255,242,0);
fill(255,0,0);
}
if (num==27) {
fill(0,255,0);
rect(70,150,35,100);
fill(255,242,0);
rect(120,150,35,100);
fill(255,0,0);
}
if (num>27) {
fill(0,255,0);
rect(70,150,35,100);
fill(255,242,0);
rect(120,150,35,100);
fill(255,0,0);
rect(170,150,35,(num+10));
}
}
}
}

c. Hasil Tampilan
2. Menggunakan rangkaian pada soal no.1 untuk menampilkan nilai suhu pada
LED dan grafik seperti di samping.
a. Program Arduino :
int tempC;
int sensorPin = A0;
int led[] = {2, 3, 4, 5, 6, 7};
void setup() {
Serial.begin(9600);
for (int i = 0; i < 6; i++) {
pinMode(led[i], OUTPUT);
}
}
void loop() {
tempC = analogRead(sensorPin);
tempC = tempC * 0.48828125;
Serial.println(tempC);
for ( int j = 0 ; j < 6; j++ ) {
digitalWrite(led[j], LOW);
}
if ( tempC < 27) {
digitalWrite(led[0], HIGH);
digitalWrite(led[1], HIGH);
}
else if (tempC == 27) {
for ( int j = 0 ; j < 4; j++ ) {
digitalWrite(led[j], HIGH);
}
}
else if (tempC > 27 ) {
for ( int j = 0 ; j < 6; j++ ) {
digitalWrite(led[j], HIGH);
}
}
delay(300);
}

b. Program Processing
import processing.serial.*;
Serial myPort;
String myString = null;
float num;
int lf = 10;
void setup() {
size(200,450);
myPort = new Serial(this, Serial.list()[0], 9600);
}
void draw() {
while (myPort.available() > 0) {
myString = myPort.readStringUntil(lf);
if (myString != null) {
print(myString);
num=float(myString);
background(255,255,255);
if (num<27) {
fill(0,255,0);
rect(70,350,35,(-(num*3.845)));
}
if (num==27) {
fill(0,255,0);
rect(70,250,35,100);
fill(255,242,0);
rect(70,150,35,100);
}
if (num>27) {
fill(0,255,0);
rect(70,250,35,100);
fill(255,242,0);
rect(70,150,35,100);
fill(255,0,0);
rect(70,149,35,-(num+10));
}
}
}
}

c. Hasil Tampilan
3. Buat aplikasi menggunakan rangkaian pada soal no.1 untuk menampilkan nilai
suhu pada LED dan grafik sinyal.

a. Program Arduino :
int tempC;
int sensorPin = A0;
int led[] = {2, 3, 4, 5, 6, 7};
void setup() {
Serial.begin(9600);
for (int i = 0; i < 6; i++) {
pinMode(led[i], OUTPUT);
}
}
void loop() {
tempC = analogRead(sensorPin);
tempC = tempC * 0.48828125;
Serial.println(tempC);
for ( int j = 0 ; j < 6; j++ ) {
digitalWrite(led[j], LOW);
}
if ( tempC < 27) {
digitalWrite(led[0], HIGH);
digitalWrite(led[1], HIGH);
}
else if (tempC == 27) {
for ( int j = 0 ; j < 4; j++ ) {
digitalWrite(led[j], HIGH);
}
}
else if (tempC > 27 ) {
for ( int j = 0 ; j < 6; j++ ) {
digitalWrite(led[j], HIGH);
}
}
delay(300);
}

b. Program Processing
import processing.serial.*;
Serial portSerial;
int dataSekarang;
int inByte;
int [] nilaiY;
int w;

void setup()
{
size(700,400);
w = width-10;
strokeWeight(3);
smooth();
nilaiY = new int [w];
portSerial = new Serial(this, Serial.list()[0], 9600);
}

void draw() {
String inString = portSerial.readStringUntil('\n');
if (inString != null) {
inString = trim(inString);
inByte = int(inString);
println(inByte);
dataSekarang = int(map(inByte*5, 0, 1023, 0+10, height-50));
dataSekarang = height-dataSekarang;
background(0);
for(int i = 1; i<w; i++){
nilaiY[i-1] = nilaiY[i];
}
nilaiY[w-1] = dataSekarang;

textSize(32);
text(inByte,10,30);

stroke(255);
line(w, dataSekarang, width, dataSekarang);
strokeWeight(1);
line(0, dataSekarang, width, dataSekarang);
strokeWeight(3);

for(int i=2; i<w; i++){


strokeWeight(3);
stroke(0,255,nilaiY[i]);
line(i, 1023, i, nilaiY[i]);
}
}
}

c. Hasil Tampilan

Anda mungkin juga menyukai