Arduino project journal for Human Computer Interaction & Interface course Crafted by Devita Yufliha Mahron 18214001 Information System & Technology Bandung Institute of Technology
Don't wanna be here? Send us removal request.
Text
Smart Parking Report
Akhirnya Smart Parking sudah siap untuk didemokan :) Semoga hasilnya memuaskan yaa..
Di post kali ini akan ditampilkan Smart Parking Final Report untuk memudahkan pembaca dalam memahami Smart Parking System ini. Yukk kita mulai dari ...
1. Identifikasi Masalah
Masalah yang menjadi fokus kami mengenai tempat parkir sekarang ini adalah sebagai berikut.
- Pengendara kesulitan dalam menemukan tempat parkir yang kosong
- Pengendara yang tidak mengetahui apakah masih tersedia parkir atau tidak
- Pihak pengelola yang kurang dapat memantau tempat parkir mana yang kosong dan berapa jumlahnya
- Pihak pengelola yang tidak mengetahui informasi jumlah pengunjung atau traffic pengendara yang menggunakan tempat parkir
2. Alternatif Pemecahan Masalah
Dari permasalahan diatas kami menemukan alternatif pemecahan masalah sebagai berikut.
Dari kesimpulan mengenai alternatif solusi yang akan diterapkan terciptalah sistem Smart Parking dengan sub-sistem sebagai berikut.
Dalam mencari teknologi untuk mengimplementasikan Smart Parking System kami melakukan beberapa pertimbangan sebagai berikut.
3. Spesifikasi Desain
Dari hasil pertimbangan dalam memilih teknologi atau komponen untuk mengembangkan Smart Parking berikut komponen-komponen yang akan digunakan.
Untuk input dan output dari tiap komponen, berikut penjelasannya.
Untuk rencana implementasi tempat parkir, kami telah merancang tempat parkir yang akan dibuat sebagai berikut.
4. Desain Perangkat Keras
Dalam menyusun semua komponen perangkat keras yang dipakai dalam Smart Parking ini, kami menggunakan skema sebagai berikut.
Agar dapat memahami kerja sistem secara keseluruhan, berikut blok diagram sistem Smart Parking.
5. Desain Perangkat Lunak
Agar lebih mudah dalam memahami project ini, akan diperlihatkan state diagram yang menggambarkan state dari komponen-komponen yang dipakai beserta kondisinya.
6. Desain User Interaction
Karena kami menggunakan mobile dan web app berikut tampilan dari kedua aplikasi tersebut.
- Mobile app
- Web app
7. Implementasi Perangkat Keras
Berikut implementasi perangkat keras dari Smart Parking.
8. Implementasi Perangkat Lunak
Berikut kode-kode yang dipakai dalam implementasi Smart Parking ini.
- Kode untuk upload pada Arduino (Bismillah.ino)
//Setting Library #include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h>
//Setting Servo #include <Servo.h> Servo myservo; #define ServoM 12 //Pin servo #define BarLow 177 //State servo saat palang pintu menutup #define BarUp 95 //State servo saat palang pintu membuka
//Setting BLYNK #define BLYNK_PRINT Serial1 #include <BlynkSimpleStream.h> char auth[] = "8322a75d38ff44ce913d108b69efff42"; //Token untuk koneksi Blynk
//Setting Blynk LED WidgetLED ledb1(V5); //Virtual LED to show status on App WidgetLED ledb2(V6); WidgetLED ledb3(V7);
//Setting OLED #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET);
#define NUMFLAKES 10 #define XPOS 0 #define YPOS 1 #define DELTAY 2
#define LOGO16_GLCD_HEIGHT 16 #define LOGO16_GLCD_WIDTH 16 static const unsigned char PROGMEM logo16_glcd_bmp[] = { B00000000, B11000000, B00000001, B11000000, B00000001, B11000000, B00000011, B11100000, B11110011, B11100000, B11111110, B11111000, B01111110, B11111111, B00110011, B10011111, B00011111, B11111100, B00001101, B01110000, B00011011, B10100000, B00111111, B11100000, B00111111, B11110000, B01111100, B11110000, B01110000, B01110000, B00000000, B00110000 };
#if (SSD1306_LCDHEIGHT != 32) #error("Height incorrect, please fix Adafruit_SSD1306.h!"); #endif
//Setting Button int buttonIn = 10; //Pin button keluar tempat parkir int buttonOut = 11; //Pin button masuk tempat parkir int Available = 3; //Initial state jumlah lahan parkir yang tersedia int buttonStateIn = 0; //Initial state button masuk tempat parkir int buttonStateOut = 0; //Initial state button keluar tempat parkir
//Setting LED int led1 = 7; //Digital Pin LED 1 int led2 = 8; //Digital Pin LED 2 int led3 = 9; //Digital Pin LED 3 int state1 = LOW; //Initial state LED 1 int state2 = LOW; //Initial state LED 2 int state3 = LOW; //Initial state LED 3
//Setting status untuk data yang dikirim ke webhook int prevstatus1 = 0; //Status lahan parkir 1 (P1) previous int prevstatus2 = 0; //Status lahan parkir 2 (P2) previous int prevstatus3 = 0; //Status lahan parkir 3 (P3) previous int status1 = 0; //Status lahan parkir 1 (P1) current int status2 = 0; //Status lahan parkir 2 (P2) current int status3 = 0; //Status lahan parkir 3 (P3) current
//Setting IR Sensor int ir1 = 9; //Analog Pin LED 1 int ir2 = 7; //Analog Pin LED 2 int ir3 = 8; //Analog Pin LED 3
void setup() { //Debug console Serial.begin(9600); Blynk.begin(Serial, auth);
//OLED display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //Initialize with the I2C addr 0x3C (for the 128x32)
//LED pinMode(led1,OUTPUT); pinMode(led2,OUTPUT); pinMode(led3,OUTPUT);
//Button pinMode(buttonIn, INPUT); pinMode(buttonOut, INPUT); digitalWrite(buttonIn, HIGH); //Connect button in digitalWrite(buttonOut, HIGH); //Connect button out
//Servo myservo.attach(ServoM); //Attaches the servo myservo.write(BarLow); //Barrier in the low position }
//Scrolling text Smart Parking Area void testscrolltext(void) { display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(10,0); display.clearDisplay(); display.println("WelcomeSmartParking"); display.println("Sisa Parkir"); display.println(Available); display.display(); delay(1); }
//Membuka gate void bukaservo(void){ myservo.write(BarUp); //Palang pintu terbuka delay(3000); myservo.write(BarLow); //Palang pintu tertutup }
//Sensor button void button(int buttonState, int letak){ if (buttonState == 0) { if (letak == 1) { //Kondisi mobil keluar if(Available!=0) { Available--; bukaservo(); //Buka Gate delay(300); display.clearDisplay(); //Display OLED testscrolltext(); } } else { //Kondisi mobil masuk if(Available!=3) { Available++; bukaservo(); //Buka gate delay(300); display.clearDisplay(); //Display OLED testscrolltext(); } } } }
void loop () {
Blynk.run(); testscrolltext(); //Draw scrolling text
//Button //Membaca input button buttonStateIn = digitalRead(buttonIn); //Membaca state button In buttonStateOut = digitalRead(buttonOut); //Membaca state button Out
//Button Masuk button(buttonStateIn, 0);
//Buton Keluar button(buttonStateOut, 1);
//Baca IR bacaIR();
//Display value available di Blynk Blynk.virtualWrite(V4,Available);
}
void bacaIR () { int sensorval1 = analogRead(ir1); //Pin IR1 int sensorval2 = analogRead(ir2); //Pin IR2 int sensorval3 = analogRead(ir3); //Pin IR3
//IR1 if(sensorval1<150) { state1=HIGH; status1=1; ledb1.setValue(255); //Set Pin V1 on pada Blynk } else { state1=LOW; status1=0; ledb1.setValue(0); //Set Pin V1 off pada Blynk } digitalWrite(led1, state1);
//IR2 if(sensorval2<100) { state2=HIGH; status2=1; ledb2.setValue(255); //Set Pin V2 on pada Blynk } else { state2=LOW; status2=0; ledb2.setValue(0); //Set Pin V2 off pada Blynk } digitalWrite(led2, state2);
//IR3
if(sensorval3<100) { state3=HIGH; status3=1; ledb3.setValue(255); //Set Pin V3 on pada Blynk } else { state3=LOW; status3=0; ledb3.setValue(0); //Set Pin V3 off pada Blynk } digitalWrite(led3, state3);
//Kirim lewat webhook if ((prevstatus1 != status1) or (prevstatus2 != status2) or (prevstatus3 != status3)) { Blynk.virtualWrite(V0, status1, status2, status3); prevstatus1 = status1; prevstatus2 = status2; prevstatus3 = status3; } delay(1000); }
- Web API (posthandler.php)
<?php date_default_timezone_set('Asia/Jakarta');
$servername = "localhost"; $username = "id1585967_smartparking"; $password = "smartparking"; $dbname = "id1585967_smartparking";
//Create connection $conn = new mysqli($servername, $username, $password, $dbname); $time = "SET `time_zone` = '".date('P')."'";
if ($conn->query($time) == TRUE) { echo "Time set\n"; } else { echo "Error: ".$time."<br>".$conn->error; }
//Check connection if ($conn->connect_error){ die("Connection failed: " . $conn-> connect_error); } echo "Connected successfully\n";
if (getenv('REQUEST_METHOD') == 'POST') { $parkir = file_get_contents ("php://input"); $dataParkir = json_decode($parkir, true); //decode JSON to associative array
print_r($dataParkir);
$P1 = $dataParkir["P1"]; $P2 = $dataParkir["P2"]; $P3 = $dataParkir["P3"]; $Jumlah = $P1+$P2+$P3;
//Query SQL $lahan = "INSERT INTO LahanParkir (Waktu, Lahan1, Lahan2, Lahan3, Jumlah) VALUES (NOW()+INTERVAL 7 HOUR, $P1, $P2, $P3, $Jumlah)"; if ($conn->query($lahan) == TRUE) { echo "New record created successfully"; } else { echo "Error: ".$lahan."<br>".$conn->error; } }
$conn->close(); ?>
- Web App (index.php)
<html> <body style = "background-color : #F0FFFF;"> <head> <h1 align = "center"> <img src="smartpark.png"></h1> <style> table { border-collapse: collapse; width: 60%; }
th, td { text-align: center; padding: 3px; font-size: 20px; }
tr:nth-child(even){background-color: #f2f2f2}
th { background-color: #20B2AA; color: white; } .button { display: inline-block; padding: 8px 18px; font-size: 13px; cursor: pointer; text-align: center; text-decoration: none; outline: none; color: #fff; background-color: #20B2AA; border: none; border-radius: 8px; box-shadow: 0 6px #999; }
.button:hover {background-color: #3e8e41}
.button:active { background-color: #3e8e41; box-shadow: 0 2px #666; transform: translateY(4px); } </style> </head>
<h2 style = "background-color : #2F4F4F" align="center"> <font face="arial" size ="5" color ="white">DATA LAHAN PARKIR</font></h2>
<span style="float:right;"> <div align="right"> <font size="5"><b>Tempat Parkir Kosong<br><br></b></font> <?php $servername = "localhost"; $username = "id1585967_smartparking"; $password = "smartparking"; $dbname = "id1585967_smartparking"; //Create connection $conn = new mysqli($servername, $username, $password, $dbname); $kosong =mysqli_query($conn, "SELECT Jumlah FROM LahanParkir WHERE ID = (SELECT MAX(ID) FROM LahanParkir)"); $row1 = mysqli_fetch_assoc($kosong); $isinya = 3 - $row1['Jumlah']; echo "<div style ='font-size:50px;color:#000000'> $isinya </div>"; ?> </div> </span> <span style="float:left;"> <div align="left"> <font size="5"><b>Total Kendaraan<br><br></b></font> <?php $kendaraan =mysqli_query($conn, "SELECT SUM(Jumlah) AS Jumlah FROM LahanParkir"); $row = mysqli_fetch_assoc($kendaraan); $row1= $row['Jumlah']; echo "<div style ='font-size:50px;color:#000000'> $row1 </div>"; ?> </div> </span> <table align="center"> <thead> <th>Waktu</th> <th>Parkir 1</th> <th>Parkir 2</th> <th>Parkir 3</th> </thead>
<?php $result =mysqli_query ($conn, "SELECT * FROM LahanParkir"); foreach ($result as $row){ echo "<tr>"; echo "<td>".$row['Waktu']."</td>"; echo "<td>".$row['Lahan1']."</td>"; echo "<td>".$row['Lahan2']."</td>"; echo "<td>".$row['Lahan3']."</td>"; echo "</tr>"; } echo "</table>"; $conn->close(); ?> </table> <br> </body> </html>
9. Pengujian
Berikut daftar pengujian yang kami lakukan.
10. Kesimpulan dan Saran
0 notes
Text
Final progress - Wrap up!
Finally done! Let’s wrap it up!
Setelah melalui perjalanan yang panjang, berliku-liku, dan naik turun, akhirnya kami berhasil merampungkan Smart Parking Project ini. Saatnya tahap finishing.
Hal pertama yang kami lakukan adalah membuat video cara kerja sistem. Video tersebut kami buat untuk jaga-jaga kalau saat demo sistem tidak dapat dioperasikan karena satu dan lain hal (i.e. OLED kesayangan gak mau nyala, tidak ada koneksi, atau maketnya gak kebawa (?))
Setelah itu kami membuat dokumen laporan sistem yang poin-poin pembahasannya sudah dideskripsikan. Sekitar 9-10 poin pembahasan yang harus kami tuliskan. <3
“Saat itu sudah memasuki waktu tengah malam dan kami sudah lelah untuk membuat dokumen. Namun apa boleh buat, tanpa adanya dokumen laporan sistem tersebut besok kita mau presentasi apa (karena belum ada materi yang kami siapkan). -> Semangaat!”
Oke mulai lah kami membuat dokumen--
Kami memulainya dengan membuat diagram-diagram penjelasan sistem. Diagram yang dibuat antara lain.
System block diagram -> menggunakan Microsoft Visio
State transition diagram -> menggunakan draw.io
Component design -> menggunakan Power Point
Schematic -> menggunakan fritzing
Lanjut buat alternatif solusi dari permasalahan dan alternatif pemilihan komponen untuk implementasi.
“Saat itu kami sudah lelah. Satu persatu dari kami mulai tumbang dan dokumen tak tersentuh hingga pagi menjelang.”
Pagi datang dan kami semuapun tidak terlalu panik. Karena masih mengantuk kami tetap mencoba untuk menyelesaikan dokumen dan memasukkannya ke dalam PPT.
Akhirnya PPT kelar. Eitss tapi belum selesai-
Ternyata, nanti pada saat demo yang diperlihatkan adalah blog kami. Jeng-- jeng-- kami semua belum membuat blog. Dan akhirnya Prav mencoba membuat post blog dari dokumen yang kami buat tadi J-sekian waktu demo.
Apa yang kami lakukan sebelum demo?
Kami panik
Mempersilahkan kelompok yang satu jam demo dengan kami untuk duluan (Thanku elders guardian <- nama project mereka)
Mencoba kembali sistem
Mempersiapkan PPT, shorten link untuk ke PPT dan kode
Berdoa
Yaap! Kamipun akhirnya maju!
Demo.begin(Bismillah);
0 notes
Text
Progress #5 - Web development
PHP and MYSQL, partner for developing web
FYI about php and MySQL
Diambil dari id.wikibooks.org, “PHP adalah singkatan dari "PHP: Hypertext Prepocessor", yaitu bahasa pemrograman yang digunakan secara luas untuk penanganan pembuatan dan pengembangan sebuah situs web dan bisa digunakan bersamaan dengan HTML.”
Dan dari upyes.wordpress.com, “ MySQL adalah sebuah perangkat lunak system manajemen basis data SQL (DBMS) yang multithread, dan multi-user. MySQL adalah implementasi dari system manajemen basisdata relasional (RDBMS).”
Setelah selesai membuat API, dilanjutkan ke tahap pembuatan index web. Index web ini akan menjadi halaman utama ketika web diakses. Kami menggunakan php serta html sebagai bahasa pemrograman serta MySQL sebagai DBMS dalam pengembangan web ini.
Yang kami lakukan pertama kali adalah membuat struktur atau tata letak dari web menggunakan html seperti setting header, logo, body, dan tabel (untuk menampilkan database). Dan dengan sedikit sentuhan CSS Style pada halaman index web, membuatnya terlihat lebih menarik.
CORE dari halaman ini adalah ‘menampilkan data status lahan parkir dari database yang telah dibuat’. Pada bagian ini, php dan mysql menjadi pemeran utama.
Yang harus dilakukan dan gaboleh skip adalah create connection ke database yang ingin di akses. Setelah itu buat MySQL query yang disesuaikan dengan data yang ingin diambil.
Kendala saat membuat query adalah kami agak lupa query apa yang harus digunakan (karena udah lama belajar basis data #alesan). Namun, dengan bantuan stackoverflow dan w3schools, ingatan kami sedikit ter’segar’kan kembali.
Yang menarik saat kami mengerjakan ini adalah saat membuat query untuk ‘menampilkan jumlah lahan kosong dari data terbaru’.
Berikut ini hasil kode yang kami buat untuk index web kami.
<html> <body style = "background-color : #F0FFFF;"> <head> <h1 align = "center"> <img src="smartpark.png"></h1> <style> table { border-collapse: collapse; width: 60%; }
th, td { text-align: center; padding: 3px; font-size: 20px; }
tr:nth-child(even){background-color: #f2f2f2}
th { background-color: #20B2AA; color: white; } .button { display: inline-block; padding: 8px 18px; font-size: 13px; cursor: pointer; text-align: center; text-decoration: none; outline: none; color: #fff; background-color: #20B2AA; border: none; border-radius: 8px; box-shadow: 0 6px #999; }
.button:hover {background-color: #3e8e41} .button:active { background-color: #3e8e41; box-shadow: 0 2px #666; transform: translateY(4px); } </style> </head>
<h2 style = "background-color : #2F4F4F" align="center"> <font face="arial" size ="5" color ="white">DATA LAHAN PARKIR</font></h2>
<span style="float:right;"> <div align="right"> <font size="5"><b>Tempat Parkir Kosong<br><br></b></font> <?php $servername = "localhost"; $username = "id1585967_smartparking"; $password = "smartparking"; $dbname = "id1585967_smartparking"; //Create connection $conn = new mysqli($servername, $username, $password, $dbname); $kosong =mysqli_query($conn, "SELECT Jumlah FROM LahanParkir WHERE ID = (SELECT MAX(ID) FROM LahanParkir)"); $row1 = mysqli_fetch_assoc($kosong); $isinya = 3 - $row1['Jumlah']; echo "<div style ='font-size:50px;color:#000000'> $isinya </div>"; ?> </div> </span> <span style="float:left;"> <div align="left"> <font size="5"><b>Total Kendaraan<br><br></b></font> <?php $kendaraan =mysqli_query($conn, "SELECT SUM(Jumlah) AS Jumlah FROM LahanParkir"); $row = mysqli_fetch_assoc($kendaraan); $row1= $row['Jumlah']; echo "<div style ='font-size:50px;color:#000000'> $row1 </div>"; ?> </div> </span> <table align="center"> <thead> <th>Waktu</th> <th>Parkir 1</th> <th>Parkir 2</th> <th>Parkir 3</th> </thead> <?php $result =mysqli_query ($conn, "SELECT * FROM LahanParkir"); foreach ($result as $row){ echo "<tr>"; echo "<td>".$row['Waktu']."</td>"; echo "<td>".$row['Lahan1']."</td>"; echo "<td>".$row['Lahan2']."</td>"; echo "<td>".$row['Lahan3']."</td>"; echo "</tr>"; } echo "</table>"; $conn->close(); ?> </table> <br> </body> </html>
Dan untuk hasil tampilan dari kode tersebut (point down)
Our web is ready to launch!
0 notes
Text
Progress #4 - Making Database and Web API (+webhook)
00webhost + database + API + webhook = Mood.on()
Setelah kami memutuskan untuk bertahan dengan usb serial connection dan webhook kami memutuskan dengan yakin dan tanpa ragu lagi untuk menggunakan 000webhost sebagai web hosting yang kami gunakan (IT’S FREE).
Memang sebelumnya sudah ada niat untuk menggunakan 000webhost sebagai web hosting (bahkan sudah mencoba) karena banyak dari teman kami yang menggunakan fasilitas tersebut (jadi bisa ditanya-tanya :P). Namun memang karena kelabilan kelompok kami sehingga kami berpindah-pindah kesana-kemari berganti-ganti layanan teknologi untuk memperjuangkan database ini. (Baca: Progress #3)
Kembali ke 000webhost
Jadi, di 000webhost ini kita dimudahkan banget-banget-banget untuk manage database, manage file, dan kalau mau pake template untuk interface web juga bisa. Untuk project kami fitur yang kami manfaatkan adalah file manager dan database manager.
Yang bakal pertama dibahas adalah database manager.
Fitur ini memudahkan kita untuk membuat database dengan satu kali klik. Kita akan langsung dapat dbusername, dbhost, dan dbpassword dari database kita. Untuk pengelolaan databasenya 000webhost menggunakan phpmyadmin.
Karena kami sudah pernah menggunakan phpmyadmin, pembuatan tabel pada database berjalan dengan lancar.
Lanjut ke bahasan kedua yaitu file manager.
Fitur ini seperti file manager pada umumnya yaitu mengelola file-file yang berkaitan dengan web kita. Jadi didalam file manager ini bakal ada folder-folder yang berisi file yang dapat diakses.
Hal yang membuat file manager ini ++ adalah file yang di upload pada folder dapat diedit secara langsung. Hal ini sangat memudahkan sehingga tidak perlu mengedit offline dan menguploadnya kembali jika file tersebut ingin diperbarui. Cukup pilih file lalu langsung edit file.
Ada + ada juga - . Nah -- dari edit file ini adalah kita tidak bisa men-tab rownya (gatau kalau ada cara lain selain tekan tombol tab). Jadi kodingannya bakal terlihat gak rapih kalau ada line yang ditambahin atau diedit.
Tapi overall, it doesn’t matter.
Nah kedua fitur tadi nyambung ke bahasan utama kita yaitu database dan web API. Apa nyambungnya?
Jadi database akan dibuat pake fitur database manager dan web API akan diupload dan diedit dengan memanfaatkan fitur file manager.
DATABASE
Setelah buat database dan masuk ke phpmyadmin, kami langsung buat tabel sesuai kebutuhan project kami. Gini nih isi tabelnya.
Kami hanya membuat satu tabel LahanParkir untuk menyimpan status lahan parkir dan jumlah kendaraan yang parkir.
WEB API
Ini nih yang paling challenging, dengernya aja udah terbayang masa-masa semester lalu membuat API (tugas mata kuliah Pemrograman Integratif).
Nah API yang dibuat hanya command POST saja. Jadi cara kerja API ini yaitu bakal di POST data dari blynk cloud ke Web API. Setelah itu data tersebut akan dimasukan (INSERT INTO) ke dalam database.
Loh gimana caranya?
Tenang Blynk punya widget khusus untuk POST data kesebuah API namanya adalah webhook. (Baca Progress #3) Jadi bakal disetting di konfigurasi webhook di blynk untuk nge-POST ke URL tertentu. Untuk konfigurasi webhook pada aplikasi mobile Blynk seperti ini.
Untuk pin output dipilih virtual pin pada Blynk yang tidak dipakai. Lalu URL diisi dengan URL dari API untuk POST data. Method dipilih POST. Content type dipilih application/json -> jadi datanya akan dikirim dalam bentuk json. Dan bodynya disesuaikan dengan pengisian data pada sebuah variabel pada API.
Oh iya, di kodingan arduinonya juga ditambahkan kode untuk webhook ini.
Ini dia kodingan API yang digunakan pada webhook ini.
<?php
$servername = "localhost"; $username = "id1585967_smartparking"; $password = "smartparking"; $dbname = "id1585967_smartparking";
//Check connection if ($conn->connect_error){ die("Connection failed: " . $conn-> connect_error); } echo "Connected successfully\n";
if (getenv('REQUEST_METHOD') == 'POST') { $parkir = file_get_contents ("php://input"); $dataParkir = json_decode($parkir, true); //decode JSON to associative array print_r($dataParkir);
$P1 = $dataParkir["P1"]; $P2 = $dataParkir["P2"]; $P3 = $dataParkir["P3"]; $Jumlah = $P1+$P2+$P3;
//Query SQL $lahan = "INSERT INTO LahanParkir (Waktu, Lahan1, Lahan2, Lahan3, Jumlah) VALUES (NOW()+INTERVAL 7 HOUR, $P1, $P2, $P3, $Jumlah)"; if ($conn->query($lahan) == TRUE) { echo "New record created successfully"; } else { echo "Error: ".$lahan."<br>".$conn->error; } }
$conn->close(); ?>
Kendala saat membuat API
Karena masih amatiran jadi kami masih agak sangsi dengan API yang kami buat (penyebab sangsi -> tidak ada data yang masuk ke database). So, kami minta Isal (thankyou Isaal) buat bantuin kami mengenali permasalahannya. Dan ternyata masalahnya bukan di API kami namun di kodingan Arduino kami. Jadi kami assign variabel untuk data yang dikirimkan itu tidak memiliki struktur yang sama dengan database yang kita buat sehingga datanya tidak masuk.
Untuk mengecek apakah API kami berhasil atau tidak, kami menggunakan aplikasi POSTMAN (bukan pak pos) untuk mengecek API kami. Gini nih tampilannya. Alhamdulillah tidak ada error berarti API sudah benar dan akhirnya datanya masuk ke database.
Selain itu, kendala lain adalah waktu dari server mySQL adalah GMT+0 sedangkan kami di GMT+7. Jadi ada gap 7 jam pada waktu yang distore pada database. Untungnya kami menemukan cara untuk mengakali ini yaitu hanya dengan menambahkan query pada bagian waktu dengan tambahan fungsi interval (dapat dilihat di kodingan API).
Yeay akhirnya API sudah jadi! Dan selanjutnya masuk ke Progress #5 yaitu Web Development
0 notes
Text
Bye ESP8266, welcome to the club USB Serial Connection
Jadi... setelah kami berganti ke Arduino Mega munculah masalah baru yaitu KONEKSI ESP8266.
Seperti pada post sebelumnya, kami sudah berhasil mengkoneksikan ESP8266 ke Arduino Uno namun karena berpindah ke Arduino Mega perlu dilakukan koneksi ulang.
Awalnya kami pikir koneksi akan berjalan dengan mudah karena kami sudah pernah melakukan koneksi pada Arduino Uno. Selain itu kami berpikir mudah juga karena tutorial yang kami ikuti menjelaskan bahwa koneksi Uno dan Mega sama hanya berbeda pada pin Arduinonya saja.
Saat kami lakukan konfigurasi ulang pada pin Arduino,
0 notes
Text
Uno -> Mega
Intermezzo
Arduino yang kami gunakan adalah Arduino Uno. Kami sudah pernah menggunakan Arduino Uno saat mengerjakan tugas besar sistem digital dan mikroprosesor sehingga sudah familiar dengannya. Selain itu salah satu dari kami (read: saya) sudah memiliki Arduino Uno sehingga tidak perlu membeli atau meminjam Arduino tersebut.
Saatnya Blynk dijalankan
Setelah kami menggabungkan komponen yaitu tiga buah infrared sensor, tiga buah led, satu motor servo, satu OLED, dan akan menghubungkannya dengan Blynk (read: run.blynk() ) ternyata memori dari Arduino Uno tidak dapat memuat sekaligus library untuk OLED dan libary untuk Blynk. Alhasil, baik Blynk maupun semua komponen Smart Parking tidak dapat berfungsi sama sekali.
Kami mencoba untuk mengulang beberapa kali namun hasilnya tetap sama. Saat Blynk di run semua komponen tidak dapat berfungsi namun saat Blynk tidak diaktifkan komponen dapat berfungsi.
Terlihat jelas pula saat dijalankan kode untuk me-run Blynk memori Arduino Uno langsung penuh dari kurang lebih 15% menjadi kurang lebih 85%.
Akhirnya dengan kurangnya kapasitas memori dari Arduino Uno untuk mengembangkan Smart Parking ini, kami memutuskan untuk menggantinya dengan Arduino Mega. Dilihat dari referensi pada internet, Arduino Mega memiliki kapasitas memori yang lebih besar dibandingkan dengan Arduino Uno. Selain itu Arduino Mega juga memiliki pin yang jauh lebih banyak dibandingkan dengan Arduino Uno sehingga dapat lebih leluasa untuk menggunakan pin Arduino.
Dengan keputusan yang kami ambil, kami mencari pinjaman Arduino Mega. Didapatlah bahwa Rangga punya Arduino Mega yang bisa kami pakai. Setelah meminjam Arduino Mega pada Rangga, kami akhirnya benar2 menggantikan Arduino Uno kami.
Sekarang perjalan dengan Arduino Mega sudah dimulai.
0 notes
Text
Progress #1 Smart Parking - Connecting ESP8266
Perkenalan dengan ESP8266
ESP8266 merupakan Wi-Fi Module yang dapat digunakan untuk mengirimkan data pada Arduino ke perangkat, dimana data tersebut dapat diolah pada database atau sekedar untuk ditampilkan.
Ada beberapa perangkat untuk mengirimkan data seperti Ethernet, GSM Module, dan lain-lain.
Lalu kenapa kami memilih ESP8266? Jawabannya adalah karena satu kelas direkomendasikan untuk menggunakan itu. (As simple as that)
Harga ESP8266 di toko Anam dekat Baltos yaitu sebesar 50 ribu untuk tipe ESP8266-01. (ESP yang paling murah)
Mulailah kami mencoba untuk konfigurasi koneksi Arduino dengan ESP8266.
Kami mencari-cari beberapa tutorial untuk melakukan konfigurasi tersebut dan akhirnya menemukan salah satu blog kaka tingkat yang memberikan penjelasan yang mudah untuk dipahami.
Namun karena firmware ESP8266 kami adalah yang terbaru, kami perlu men-downgrade firmware tersebut agar dapat digunakan untuk mengkoneksikan Arduino dengan Blynk. Firmware yang dapat melakukan koneksi hanya firmware dengan versi 1.0.
Kami melakukan langkah-langkah pada blog yang kami jadikan acuan yaitu (nama blog)
Berikut langkah-langkah yang kami lakukan.
1.
2.
3.
4.
5.
0 notes
Text
Draft Final Project - Smart Parking System
Latar belakang: Jumlah kendaraan roda empat, salah satunya adalah mobil, mengalami peningkatan yang sangat pesat hingga saat ini. Dengan meningkatnya jumlah kendaraan maka kebutuhan untuk tempat parkir juga meningkat. Tempat parkir di Indonesia masih memiliki kekurangan dalam pengelolaannya. Dapat diketahui bahwa beberapa tempat parkir kurang dalam segi pengelolaan lahan parkir. Pengelola parkir tidak memiliki data lahan mana yang sudah terisi sehingga pengguna jasa perlu menelusuri lahan-lahan parkir untuk mendapatkan lahan yang kosong. Hal ini dapat menyita waktu pengguna jasa untuk lahan parkir. ... tbc Deskripsi sistem: Smart Parking System adalah sebuah sistem yang ditujukan untuk pengelola jasa parkir mobil. Terdapat tiga sub system, yaitu 1. Park management system 2. Monitoring system 3. Vehicle counter system
0 notes
Video
youtube
Project 4 (Video Documentation)
2 notes
·
View notes
Text
Project 4 - Simple Calculator (with LCD Display)
Hello viewers, proyek 4 Arduino sudah resmi rilis!
Proyek ke-empat kami yaitu “Simple Calculator with LCD Display”. Pada proyek ini kalian akan melihat kalkulator sederhana yang dapat melakukan operasi tambah, kurang, kali, bagi.
Apa saja komponen yang dibutuhkan? Ini dia..

1. Arduino uno + kabel USB
2. Breadboard
4. Kabel Jumper
5. LCD
6. Keypad
7. Potensiometer
8. Resistor
Bagaimana cara menyusun komponen-komponen diatas? Ayo terus baca.
Kalian harus menyusun berdasarkan skema berikut.

Skema diatas kami dapatkan dari http://www.microcontroller-project.com/calculator-using-arduino.html.
Kode untuk menjalankan program calculator juga kami dapatkan dari situs diatas namun kami melakukan beberapa perubahan kode. Lets see the code!
#include <LiquidCrystal.h> int getKey(); char getOper(); void result(float result); LiquidCrystal lcd(13, 12, 11, 10, 9, 8); int row[4]={7, 6, 5, 4}; int col[4]={3, 2, 1, 0}; int key1; char oper; int key2;
void setup() { lcd.begin(16, 2); for(int i=0;i<=3;i++) { pinMode(row[i], OUTPUT); pinMode(col[i], INPUT); } for(int j=0;j<=3;j++) digitalWrite(col[j], HIGH); for(int k=0;k<=3;k++) digitalWrite(row[k], HIGH); lcd.print("CALCULATOR!!!!"); delay(500); lcd.clear(); lcd.setCursor(0, 0); }
void loop() { lcd.clear(); lcd.setCursor(0, 0 ); lcd.print("ENTER 1 NO ="); key1=getKey(); delay(500); lcd.clear(); lcd.setCursor(0, 0); lcd.print("ENTER 2 NO ="); key2=getKey(); delay(500); lcd.clear(); lcd.setCursor(0, 0); lcd.print("OPERATOR ="); oper=getOper(); delay(500); lcd.clear(); lcd.setCursor(0, 0); lcd.print("RESULT ="); switch(oper) { case '+': result((float)key1+key2); break; case '-': result((float)key1-key2); break; case '/': result((float)key1/key2); break; case '*': result((float)key1*key2); break; case '^': result((float)pow(key1,key2)+1); break; case '%': result(key1%key2); break; } }
int getKey() { int key=13; int Readrow,Readcol; while(key!=1 && key!=2 && key!=3 && key!=4 && key!=5 && key!=6 && key!=7 && key!=8 && key!=9 && key!=0) { //Looping 1-9 for(int i=0;i<3;i++) { for (int j=0;j<3;j++) { digitalWrite(row[i], LOW); Readrow=digitalRead(row[i]); //angka 4 Readcol=digitalRead(col[j]); if( (Readrow==LOW) && (Readcol==LOW)) { lcd.print((i*3)+(j+1)); digitalWrite(row[i], HIGH); return key=((i*3)+(j+1)); break; } } digitalWrite(row[i], HIGH); } //Angka 0 digitalWrite(row[3], LOW); Readrow=digitalRead(row[3]); Readcol=digitalRead(col[1]); if((Readrow==LOW) && (Readcol==LOW)) { lcd.print("0"); digitalWrite(row[3], HIGH); return key=0; } digitalWrite(row[3], HIGH); key=13; }//while loops ends return 0; }//GetKey function ends
char getOper() { int Readrow,Readcol; char key='l'; while(key!='+' && key!='-' && key!='/' && key!='*' && key!='^' && key!='%' ) { //Tanda + digitalWrite(row[0], LOW); Readrow=digitalRead(row[0]); Readcol=digitalRead(col[3]); if( (Readrow==LOW) &&( Readcol==LOW)) { lcd.print("+"); digitalWrite(row[0], HIGH); return key='+'; } digitalWrite(row[0], HIGH);
//Tanda - digitalWrite(row[1], LOW); Readrow=digitalRead(row[1]); Readcol=digitalRead(col[3]); if( (Readrow==LOW) && (Readcol==LOW)) { lcd.print("-"); digitalWrite(row[1], HIGH); return key='-'; } digitalWrite(row[1], HIGH);
//Tanda / digitalWrite(row[2], LOW); Readrow=digitalRead(row[2]); Readcol=digitalRead(col[3]); if( (Readrow==LOW) && (Readcol==LOW)) { lcd.print("/"); digitalWrite(row[2], HIGH); return key='/'; } digitalWrite(row[2], HIGH);
//Tanda x digitalWrite(row[3], LOW); Readrow=digitalRead(row[3]); Readcol=digitalRead(col[3]); if( (Readrow==LOW) && (Readcol==LOW)) { lcd.print("*"); digitalWrite(row[3], HIGH); return key='*'; } digitalWrite(row[3], HIGH);
//Tanda ^ digitalWrite(row[3], LOW); Readrow=digitalRead(row[3]); Readcol=digitalRead(col[0]); if( (Readrow==LOW) && (Readcol==LOW)) { lcd.print("^"); digitalWrite(row[3], HIGH); return key='^'; } digitalWrite(row[3], HIGH);
//Tanda % digitalWrite(row[3], LOW); Readrow=digitalRead(row[3]); Readcol=digitalRead(col[2]); if( (Readrow==LOW) && (Readcol==LOW)) { lcd.print("%"); digitalWrite(row[3], HIGH); return key='%'; } digitalWrite(row[3], HIGH);
}//while loop ends return '\0'; }//getOper function ends
void result(float result) { int unitvalue,tenvalue,decimal; float value=result; if(result<0.0) { lcd.print("-"); value=result*(-1); } if(value>10.0) { tenvalue=(int)value/10; lcd.print(tenvalue); } unitvalue=(int)value%10; lcd.print(unitvalue); lcd.print("."); decimal=(int)((int)(value*10)%10); lcd.print(decimal);
delay(5000); lcd.clear(); lcd.setCursor(0, 0); }
Setelah komponen disusun sesuai dengan skema dan program di upload ke board arduino, ini hasilnya.


Sebelum kami berhasil menyelesaikan proyek ini, banyak kendala yang kami lalui. Mau tau?
1. Harus ‘nyolder’ komponen LCD
Karena LCD dengan komponen entah namanya apa (pokoknya itu yang bakal nyambungin LCD ke board arduino) terpisah, kami harus solder komponen tersebut terlebih dahulu. Akhirnya Pebi yang sudah berpengalaman yang menyolder komponen tersebut. Aku hanya memegang LCD dan berharap semoga kegiatan ‘nyolder’nya berhasil.
2. LCD tidak menampilkan apapun
Pertama kali, kami tidak menggunakan potensiometer karena kami tidak memiliki komponen tersebut. Alhasil layar LCD menyala dengan sangat terang dan tidak ada yang ditampilkan. Lalu, aku mencari-cari komponen di kotak Arduino kit dan menemukan komponen seperti potensiometer. Setelah kami mengecek di google ternyata komponen tersebut benar potensiometer. Akhirnya kami menghubungkan potensiometer dengan LCD. Dan ta-ta! LCD berhasil menampilkan program.
3. Mengubah kode referensi
Kami harus menyesuaikan kode dengan keluaran yang kami inginkan, kode sebelumnya tidak sesuai dengan keypad kami. Akhirnya kami menyesuaikannya dengan keypad yang kami miliki. Untuk angka sama dengan tampilan keypad dan untuk operator kami sesuaikan menjadi A untuk operator tambah, B untuk operator kurang, C untuk operator bagi, dan D untuk operator kali.
Nah mungkin kendala-kendala diatas bisa jadi pelajaran untuk kami dan viewers.
Okee, sekian untuk proyek 4.
Untuk lihat video hasil proyek jangan lupa buka post di project videos yaa..
See you next project, viewers! :)
0 notes
Video
tumblr
Project 3 (Video Documentation)
1 note
·
View note
Text
Project 3 - Display Temperature
Proyek ketiga kami yaitu “Display Temperature”. Proyek ini sangat sederhana yaitu menampilkan nilai suhu ruangan yang diukur oleh sensor suhu LM35.
Berikut komponen yang dibutuhkan untuk mengerjakan proyek.

1. Arduino Uno
2. Kabel USB
3. Breadboard
4. Kabel jumper
5. LM35
Komponen tersebut disusun dengan skema sebagai berikut.
Berikut kode yang digunakan.
Hasil implementasi:

0 notes
Video
tumblr
Project 2 (Video Documentation)
1 note
·
View note
Text
Project 2 - Seven Segment Counter
Proyek kedua kami yaitu “Seven Segment Counter”. Program ini menampilkan angka pada 7-segment setiap push button ditekan. Angka akan ditampilkan dengan urutan 1,2,3,4,5,6,7,8,9,0 lalu setelah urutan selesai akan kembali pada urutan pertama.
Berikut komponen yang dibutuhkan untuk mengerjakan proyek.

1. Arduino Uno
2. Kabel USB
3. Breadboard
4. Kabel Jumper
6. Resistor
7. Push button
8. Seven segment
Komponen tersebut disusun dengan skema sebagai berikut.
Berikut kode yang digunakan.
Hasil Implementasi:

0 notes