Don't wanna be here? Send us removal request.
Photo
I’m a data scientist. I’m somehow big brain (R) and smol brain (Python) all at once.

I bring you yet another useless chart
131 notes
·
View notes
Text
Hey again, everyone! This is going to be my very last post related to my studies. It’s the end of the semester, and that means it’s also time for me to finish up all my projects and tie up any loose ends. That means petualangan gue dengan Arduino kali ini udah berakhir. Hari ini, 10 Mei 2017, gue bakal mempresentasikan dan mendemokan Smart Library System yang udah kami bikin.
Pertama, why smart library system? Right. Jujur aja, gue agak bookworm. I love reading. Gue ga bawa buku ke mana mana exactly, tapi gue bawa HP ke mana mana and you can find dozens of ebooks in it--and by ebooks I meant non-class-related ebooks. Ada ebook buat kelas juga sih, tapi sedikit. Sedihnya, buku itu banyak yang nggak dibaca, padahal gue tertarik banget sama buku-buku tersebut. The thing is, baca buku digital itu beda sama baca buku beneran. Gue ngerasa baca buku digital itu nggak senyaman baca buku fisik. Ga konsen, for one. Entah kenapa, gue lebih gampang kedistract kalau baca ebook. Dan gue pasti jauh lebih hafal sama isi dari buku fisik yang gue baca daripada ebook.
Turns out gue bukan satu-satunya yang merasakan hal ini. There were studies that concludes that physical books are much more conducive to reading comprehension than digital books (I’d link you the source, but if you’re here I’m assuming lo nggak di sini buat baca scientific journals. If you are, well, I wrote a paper about this smart library system, and it contains references! You can download it below--I linked it at the end of this post).Anyway, it’s a shame, karena buku beneran punya massa, which means dia berat dan makan tempat. What’s more? Dia butuh diprint, jadi dia biasanya lebih mahal. Untungnya, di kampus gue ada sesuatu yang namanya perpustakaan. It contains all sorts of interesting books--to be honest, ada buku buku di perpustakaan yang gue pengen baca tapi belum kesampaian sampai hari ini.
The thing is, pinjam buku di perpustakaan itu kadang kadang... ngeselin. Udah susah nyari bukunya di mana, bingung nyari raknya, eh kadang kadang pas udah ketemu raknya, bukunya nggak ada. Entah lagi dipinjam atau ada yang salah naruh buku atau apa. Udah gitu kadang kadang antri buat pinjam/kembali buku bisa panjang dan lama, padahal kalau mau pinjam buku gitu kan pengennya cuma mampir sebentar terus baca di luar. Dari situlah kami merasa bahwa smart library system bisa berguna banget. Idea!
Dari analisis kebutuhan yang telah kami list di atas, kami mendefinisikan requirement kami sebagai berikut.
Sistem ini berfungsi untuk melakukan pencatatan identitas anggota perpustakaan.
Sistem ini berfungsi untuk melakukan pencatatan akun anggota perpustakaan.
Sistem ini berfungsi untuk melakukan pencatatan kunjungan setiap anggota yang mengunjungi perpustakaan sehingga datanya dapat digunakan oleh pihak pengelola dalam mengembangkan perpustakaan.
Sistem ini berfungsi untuk melakukan pencatatan peminjaman buku setiap anggota perpustakaan sehingga datanya dapat digunakan oleh pihak pengelola dalam mengembangkan perpustakaan.
Sistem ini berfungsi untuk mencatat identitas buku-buku di perpustakaan agar tidak terjadi hal-hal yang tidak diinginkan, seperti kehilangan maupun kerusakan buku-buku.
Sistem ini berfungsi untuk mencatat stok, serta buku-buku di perpustakaan.
Sistem ini berfungsi untuk mencatat lokasi buku-buku di perpustakaan.
Sistem ini berfungsi untuk mempercepat kegiatan transaksi peminjaman buku.
Sistem ini berfungsi untuk mengetahui keberadaan lokasi suatu buku.
Sistem ini berfungsi untuk melakukan pencatatan penilaian buku.
Sistem ini berfungsi untuk melakukan pencatatan ulasan buku.
Sistem ini berfungsi untuk memberi rekomendasi kepada anggota perpustakaan agar membaca atau tidak membaca suatu buku.
Kami juga membuat use case diagram sebagai berikut.
Obviously, masalah utama kami dalam pembuatan smart library system adalah bahwa buku konvensional itu... bukan buku digital (you don’t say?). By that I meant buku konvensional itu ga punya representasi di dunia digital. So kami harus membawa buku itu ke dunia digital. How? Well, awalnya kami kepikiran pakai NFC dan RFID. Gue lebih pengen pakai NFC, because the idea of visitors just coming up to books with their smartphones and scanning it for its metadata is just wow. I mean, oke, fungsi utamanya memang buat identifikasi buku but it’d be cool if we can do more than that with it!
So, kami melakukan penilaian berdasarkan lima kriteria performa yang sudah kami tentukan, yakni availability, reliability, ergonomy, security, dan maintainability. Terdapat tiga konsep yang kami pertimbangkan.
Kombinasi pertama adalah menggunakan server Windows Home Server, dengan komputer perpustakaan berbentuk PC, penanda pengunjung/anggota dan pelacak buku perpustakaan dari NFC, serta pendeteksi pengunjung/anggota, pendeteksi buku perpustakaan, serta mesin pinjam/kembalian buku menggunakan NFC reader. Kelebihan dari sistem ini adalah mudah digunakan, dikarenakan fitur NFC sudah tersebar luas di sebagian besar smartphone yang ada di pasaran. Kelemahan dari sistem ini adalah NFC memiliki range deteksi yang rendah, sehingga pendeteksi buku perpustakaan bisa saja tidak berfungsi optimal.
Kombinasi ke dua adalah menggunakan server Windows Home Server, dengan komputer perpustakaan berbentuk PC, penanda pengunjung/anggota dan pelacak buku perpustakaan dari RFID, serta pendeteksi pengunjung/anggota, pendeteksi buku perpustakaan, serta mesin pinjam/kembalian buku menggunakan RFID reader. Kelebihan dari sistem ini adalah RFID memiliki range yang lebih besar, namun kelemahannya adalah pada umumnya, smartphone tidak dapat membaca RFID, sehingga untuk mencari informasi buku, pengguna harus memakai komputer perpustakaan.
Kombinasi ke tiga adalah menggunakan server Windows Home Server, dengan komputer perpustakaan berbentuk PC, penanda pengunjung/anggota dan pelacak buku perpustakaan dari RFID, serta pendeteksi pengunjung/anggota, pendeteksi buku perpustakaan, serta mesin pinjam/kembalian buku menggunakan kombinasi antara RFID reader dan QR code. Kelebihan dari sistem ini adalah RFID memiliki range yang lebih besar. Selain itu, QR code merupakan media yang dapat dibaca dengan mudah oleh ponsel berkamera saat ini.
We weighted all the alternatives. ‘blr doesn’t support tables it seems, so I’ll just tell you how it ends. Kombinasi ke tiga, dengan kombinasi antara RFID reader dan QR code menang, dengan skor 21/25, sedangkan kedua kombinasi lain hanya mendapat skor 19/25.
And then we found out about this beauty, the NTAG213. Sedikit background teknis--NFC dan RFID itu sebenernya setipe, sama2 nyimpen data yang diakses via gelombang frekuensi tertentu. Cuma, NFC itu pakai gelombang 13.56 MHz. Meanwhile RFID ada tiga tipe, tipe 125-124 kHz, 13.56 MHz, sama 856-960 MHz, Not only that, secara format mereka beda, kind of like .pdf sama .doc itu beda lah. But, and this is the great part--NTAG213 itu ternyata bisa dipakai *both* NFC dan RFID. Cool, right? Bye bye our QR code alternative!
So we started designing the system itself. Here’s the overal block diagram we agreed on.
Yeah, so. Jadi gini. Kalian bisa lihat bahwa sentra dari sistem di atas itu adalah server Smart Library System itu sendiri. The server collects input from the arduino machines. Ada lima tipe mesin arduino yang kami pakai, yaitu enter, leave, borrow, return, dan location. Enter itu mesin yang dipakai untuk masuk perpustakaan, leave yang dipakai keluar, borrow yang dipakai pinjam buku, return yang dipakai mengembalikan buku, dan location yang dipakai untuk update lokasi buku. Mesin-mesin arduino itu sendiri ngambil input dari dua tipe tag, yakni tag buku dan kartu anggota perpustakaan. Enter and leave only requires library cards, location only requires book tag, while borrow and return requires both. Capiche?
Awalnya, we were going to use MQTT servers sebagai perantara antara arduino dan server, tapi apparently it’s more complex, so we decided to use Blynk instead. Di Blynk ada widget namanya webhook. It can be used to send http or https requests, which means it suits our purposes exactly. So I whipped up a php code to accept and process requests from the widget, and it inputs the requests into our database. Funny story--awalnya php code ini saya desain untuk nerima data POST http biasa, but it doesn’t work. Ternyata, Blynk’s webhook sends data in JSON format. So I had to change it...
Here’s the code we used to accept and process the JSON data I mentioned.
<?php include "soap-server.php";
$data = json_decode(file_get_contents('php://input'), true);
$auth = "abc"; if ($data['auth'] == $auth){ $function = $data['function'];
switch ($function){ case "enter": enter($data['userid']); break; case "leave": leave($data['userid']); break; case "borrow": borrowbook($data['isbn'], $data['userid'], $data['bookid']); break; case "return": returnbook($data['isbn'], $data['userid'], $data['bookid']); break; case "updateloc": updateLocation($data['isbn'], $data['bookid'], $data['location']); break; } } else { echo "Auth request not identified!"; } ?>
Moving on, selanjutnya kami mengurusi hardware. Berikut desain state diagram kami untuk hardware.
Yeah, state dia bisa berubah dari satu state ke state lain tergantung input kami. Sebenarnya jika sistem ini benar benar diimplementasikan, seharusnya kelima state ini berada di lima mesin yang berbeda, namun kelimanya melapor ke sistem yang sama.
Anyway, after we had finished this core concept, we started messing with the Arduinos. Kami memakai 2 komponen, yaitu MFRC522, which is an RFID card reader, dan ESP8266, a wifi module. I personally messed with the MFRC522. Ada beberapa masalah dalam pemrograman kedua komponen ini, di antaranya kami sempat salah flashing firmware di ESP8266--cuma salah versi sih, tapi apparently Blynk doesn’t like that. Ada masalah juga dengan kestabilan sinyal ESP8266 but it’s apparently thanks to the voltage fluctuation.
The MFRC522′s problems are fun too. Kami memakai library MFRC522 dari Miguel Balboa. Funnily enough, sebagian besar library itu dikode untuk tag NFC tipe MIFARE Classic. Because fate hates us, NTAG213 itu ternyata tipenya MIFARE ultralight. Apa bedanya? Well, formatnya beda. MIFARE Ultralight formatnya ngikutin NFC, MIFARE Classic ngikutin RFID. Beda jumlah page, bit, it’s all tiny little things. I could explain but I suspect you’d lose interest... but all you need to know is that I had to do some creative code re-engineering so that I can read the data from the NTAG213. Lovely. Kode yang akhirnya kami pakai bisa dilihat di bawah ini.
bool readbook(){ // Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory. MFRC522::MIFARE_Key key; for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF;
//some variables we need byte block; byte len; MFRC522::StatusCode status;
//-------------------------------------------
// Look for new cards if ( ! mfrc522.PICC_IsNewCardPresent()) { return false; }
// Select one of the cards if ( ! mfrc522.PICC_ReadCardSerial()) { return false; }
//-------------------------------------------
byte buffer1[18];
block = 7; len = 18;
status = mfrc522.MIFARE_Read(block, buffer1, &len); if (status != MFRC522::STATUS_OK) { Serial.print(F("Reading failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return false; }
//VERIFY TAG for (uint8_t i = 0; i < 4; i++) { if (buffer1[i+2] != 32) { temp[i] = buffer1[i+2]; } } temp[4] = '\0';
char trial[5] = "book"; bool same = true;
for (int i = 0; i < 5; i++){ if (temp[i] != trial[i]){ same = false; } }
if (same){ block = 10;
status = mfrc522.MIFARE_Read(block, buffer1, &len); if (status != MFRC522::STATUS_OK) { Serial.print(F("Reading failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return false; }
//READ ISBN for (uint8_t i = 0; i < 13; i++) { if (buffer1[i+1] != 32) { isbn[i] = buffer1[i+1]; } } isbn[13] = '\0';
block = 15;
status = mfrc522.MIFARE_Read(block, buffer1, &len); if (status != MFRC522::STATUS_OK) { Serial.print(F("Reading failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return false; }
//READ BOOK ID for (uint8_t i = 0; i < 10; i++) { if (buffer1[i+1] != 32) { bookid[i] = buffer1[i+1]; } } bookid[10] = '\0'; delay(1000); return true; } else { Serial.println(F("Item scanned is not a book.")); delay(1000); return false; } }
Now then, server udah set up, hardware dan software dari semua yang berkaitan dengan Arduino udah selesai, all that’s left is just the website. Ada beberapa hal baru yang saya coba di pembuatan website ini, amongst which I actually hashed the password I store in it (hash is just such a lovely word). Another thing, gue memakai server-side session storage untuk menyimpan log in pengguna, which means that your session data is not stored in your cookies if you’re using my website. Other things are just standard html, css, and php, nothing special. Fun fact: I actually made over 50 server-side functions for this project. Ada lumayan banyak yang nggak dipakai, tapi I consider it work well-done, dan gue belajar cukup banyak soal API Goodreads dan OAuth methods, so that’s cool. Sayangnya OAuth methodnya ga bisa dipakai karena masalah setting server (someday I will OWN a server that I can tinker with to my satisfaction -_-), jadi yang kami pakai cuma API Goodreads yang tidak membutuhkan OAuth. Here’s one of them.
function getGoodreadsDetails($isbn){ /* Input : ISBN */ /* Output : Deskripsi, Nilai, Ulasan, ISBN buku rekomendasi. */ /* Deskripsi : Fungsi ini mengembalikan deskripsi, nilai, ulasan, serta ISBN buku buku yang serupa dengan buku $isbn. */
global $devkey;
$url = "https://www.goodreads.com/book/isbn/" . $isbn . "?key=" . $devkey; $xml = file_get_contents($url); $dom = new domDocument; $dom-> loadXML($xml);
$img = $dom->getElementsByTagName('book')->item(0)->getElementsByTagName('image_url')->item(0)->nodeValue; $desc = $dom->getElementsByTagName('book')->item(0)->getElementsByTagName('description')->item(0)->nodeValue; $rating = $dom->getElementsByTagName('book')->item(0)->getElementsByTagName('average_rating')->item(0)->nodeValue; $review = $dom->getElementsByTagName('book')->item(0)->getElementsByTagName('reviews_widget')->item(0)->nodeValue; $reclist = $dom->getElementsByTagName('book')->item(0)->getElementsByTagName('similar_books')->item(0)->getElementsByTagName('book');
$i = 0; foreach ($reclist as $recs){ $recommendation[$i] = $recs->getElementsByTagName('isbn')->item(0)->nodeValue; $i = $i + 1; }
$res = array( 'Image' => $img, 'Deskripsi' => $desc, 'Nilai' => $rating, 'Ulasan' => $review, 'Rekomendasi' => $recommendation, );
return $res; }
This is the state diagram we made for the website.
Now all that’s left is testing. Di awal proses desain kami sudah membuat diagram use-case. Nah, that’s what we used to make up our testing scenarios. Diagram use case itu kami kombinasikan dengan requirement fungsional menjadi 16 skenario, yakni:
Anggota perpustakaan masuk ke perpustakaan
Anggota perpustakaan keluar dari perpustakaan
Anggota perpustakaan meminjam buku perpustakaan
Anggota perpustakaan mengembalikan buku perpustakaan
Buku dipindahkan ke lokasi baru
Anggota perpustakaan melakukan log in
Anggota perpustakaan melihat buku yang sedang ia pinjam
Anggota perpustakaan melihat informasi mengenai buku
Anggota perpustakaan melakukan log out
Pegawai perpustakaan melakukan log in
Pegawai perpustakaan melihat kegiatan perpustakaan
Pegawai perpustakaan melihat informasi mengenai buku
Pegawai perpustakaan melihat daftar buku perpustakaan
Pegawai perpustakaan melihat daftar anggota
Pegawai perpustakaan melakukan log out, dan
Anggota perpustakaan melakukan scan buku dengan NFC.
Kami melaksanakan pengujian dan menyatakan sistem lulus jika seluruh skenario ini berjalan tanpa masalah yang berarti. And I am pleased to announce that the Smart Library System passed all tests. Thus ends our journey with the Arduino. Gue bener bener ngerasa belajar banyak di sini, these last few weeks have been a total roller coaster.
So that’s that, guys, it’s over! Yang mau lihat papernya bisa langsung datang ke sini. That’s it. So long and goodbye!
1 note
·
View note
Text
Progress Final Project
Progress! It’s a very busy time. Tapi kami harus posting progress nonetheless. That’s fine.
Anyway, kami udah mulai merancang sistem. Below is the block diagram of our basic system design!
As you can see, sistem ini berpusat pada sebuah server online. Server itu menerima masukan dari mesin-mesin pendeteksi pengunjung, buku, dan mesin pinjam/kembali buku. Lalu, melalui website, kita bisa mengakses informasi dalam server itu! We’re planning to use RFID or NFC or even QR codes to identify the books. Gue personally berharap bisa pakai NFC sih, karena dia accessible via HP, dan keren kalau kita bisa ngakses info buku hanya dengan scanning NFC tag via HP. Lebih portable. Plus siapa juga yang mau bawa bawa laptop cuma buat nyari info buku... anyway, it would be cooler.
Anyway, the system we made means a lot of work. Kami ga harus hanya ngoding arduino, tapi harus ngoding websitenya juga. To be honest, I’m very much daunted with this task. Rasanya scope projectnya terus merambat... I suppose that’s why Pak Mary always used to lecture us about scope creeping...
Wish me luck, guys. This semester is shaping up to be a very busy one, and I don’t want to fall sick.
1 note
·
View note
Text
Final Project Idea
Hiya!
After slogging after four Arduino projects, artinya tiba saatnya bagi kami untuk membuat final project. Yep! Postingan kali ini cuma ditujukan untuk menceritakan apa ide final project kami.
Ide kami adalah untuk membuat Smart Library System. Idenya simple. Kami pengen membuat perpustakaan se-convenient mungkin. Gue sendiri udah beberapa kali muter muter perpustakaan nyari buku, tapi bukunya ga ketemu. Entah salah rak atau gimana, I don’t know. Terus kalau lagi jam sibuk sering harus antri untuk masuk, keluar, atau pinjam buku. Anyway, we want to make libraries faster and simpler.
I’ll keep you posted. Wish us luck!
1 note
·
View note
Text
Calculating Calculator
Galore of terrible titles! Yeah, I know, I know. I shouldn’t be an author. Tapi whatever lah, kalian nggak di sini karena skill bahasa gue :p
Anyway, tugas kami kali ini adalah membuat kalkulator. Easier said than done, really. Jujur aja, tugas ini datang di waktu yang paling emotionally draining buat saya dan kelompok saya. Dan sejauh ini? Tugas ini adalah satu satunya tugas yang membuat kami kumpul lebih dari sekali.
Because of that, just this time, I don’t have photos for you. Tapi gue punya list bahan! Ini list bahan yang kita pakai.
Satu (1) buah board Arduino Uno
Satu (1) buah breadboard
Satu (1) buah LCD 16 x 2
Satu (1) buah keypad 4 x 4
Satu (1) buah resistor 220 Ohm
Dua puluh satu (21) buah kabel jumper male-to-male.
No, it’s not as cool as a picture. Sorry.
Anyway, di tugas ini nggak banyak debugging yang terjadi. I mean, yeah, emang banyak masalah, tapi mereka mostly masalahnya bukan masalah teknis tapi masalah komunikasi...........I don’t even like remembering it. Tapi ya sudahlah. Yang terjadi biarlah terjadi. Anyway kami kumpul dua kali, gue ikut ngerakit dan ngoding. Ini kode final yang kami pakai.
// include the library code: #include <LiquidCrystal.h> #include <Keypad.h>
const byte numRows = 4; const byte numCols = 4;
//define the Keymap char keys [numRows][numCols] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} };
//Code that shows the the keypad connections to the arduino terminals byte rowPins[numRows] = {13,12,7,6}; //Rows 0 to 3 byte colPins[numCols]= {5,4,3,2}; //Columns 0 to 3
int num1, num2, numTemp; char opr;
//initializes an instance of the Keypad class Keypad myKeypad= Keypad(makeKeymap(keys), rowPins, colPins, numRows, numCols);
// initialize the library with the numbers of the interface pins LiquidCrystal lcd(0, 1, 8, 9, 10, 11);
void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); num1 = 0; num2 = 0; numTemp = 0; opr = ' '; //lcd.print(num1); // Print a message to the LCD. //lcd.print("hello, world!"); }
void loop() { // set the cursor to column 0, line 1 // (note: line 1 is the second row, since counting begins with 0): lcd.setCursor(0, 1); // print the number of seconds since reset: // lcd.print(millis() / 1000);
char keyPressed = myKeypad.getKey(); if (keyPressed != NO_KEY){ lcd.clear(); numTemp = keyPressed - '0';\ if ((numTemp <= 9) && (numTemp >= 0)) { num1 = (num1 * 10) + numTemp; lcd.print(num1); } else if (numTemp > 9) { num2 = num1; num1 = 0; opr = keyPressed; lcd.print(num2); } else { switch (keyPressed) { case '*' : { num1 = 0; num2 = 0; numTemp = 0; opr = ' '; lcd.print(num1);
break; } case '#' : { switch (opr) { case 'A' : { lcd.print(num2 + num1); break; } case 'B' : { lcd.print(num2 - num1); break; } case 'C' : { lcd.print(num2 * num1); break; } case 'D' : { lcd.print(num2 / num1); break; } } } } } //lcd.print(keypressed); } }
Aand this is the final video.
youtube
So there it is, guys. Hope you enjoy. I definitely did not. Cheers.
1 note
·
View note
Text
The Output Overflow
Yes, it’s a terrible title, I know, y’all can yell at me later. Tugas kami selanjutnya adalah mengambil input dari sebuah sensor dan menampilkan outputnya dengan media pilihan kami, entah di serial monitor atau LCD atau seven segment. Sensor pilihan kami adalah sensor temperatur LM35. Dan karena yang diukur adalah temperatur, it follows that we need two digits to display the temperature, at least. Jadi, kami punya tiga pilihan. Pakai serial monitor, which, as Sherlock said, is just boring! Atau pakai LCD, which is practical. And less boring. Atau, kami bisa memakai dua buah seven segment dengan bantuan shift register.
Of course, I just can’t let the chance to play with a new toy slide. I mean, shift register? Turning three outputs to seven? Sounds cool, baby, sign me up! I mean, pakai LCD lebih gampang, but still... dull. So this is what we used for this particular project!

- satu (1) buah board Arduino Uno, - satu (1) buah breadboard, - satu (1) buah sensor suhu LM35, - dua (2) buah shift register, - dua (2) buah seven segment, dan - empat puluh (40) (YES , FORTY) buah kabel jumper.
And you know what? It was just as exquisitely awesome as I thought! Karena kita pakai... *ehem*mainan*ehem* baru, saya nggak bisa langsung ngarang sirkuit seperti tugas sebelumnya. Jadi saya melakukan riset dan mendapatkan informasi tentang pemakaian shift register dari rastating.
Pastinya, dia agak sedikit lebih rumit. Cara kerja shift register itu dengan meng-assign nilai kepada 8 bit dan mengirimkannya ke shift register. Awalnya kami percobaan sedikit dengan kode asli yang disediakan oleh rastating. Kode tersebut menyalakan delapan LEDnya secara bergantian hanya dengan 3 pin output, and it surprisingly works as okay as expected. LED seven segment menyala bergantian. Sooo we started tweaking.
That’s when the trouble starts.
Awalnya, saya mencoba memodifikasi fungsi displayNumber() dari tugas sebelumnya. Saya suruh Arduino men-display angka dari 0 hingga 9 secara bergantian. Funnily enough, it didn’t work. Seven segment cuma menampilkan strip horizontal di tengah, jadi hasilnya seperti ‘-’. Wonderful.
Kami berusaha debugging, tapi gagal. Kami tidak berhasil membuat LED menampilkan angka yang dapat kami kenali sama sekali; hanya ‘-’ di tengah tengah.
Akhirnya, kami mendapat pencerahan. Saat mencari tahu tentang metode bitSet(), yakni metode yang kami gunakan untuk meng-assign nilai kepada kedelapan bit yang kami kirimkan ke shift register. Dan ternyataa, menurut website arduino, bitSet() itu hanya bisa digunakan untuk mengubah nilai bit menjadi satu, namun tidak sebaliknya. All my fault, really. Di kode rastating ditunjukkan kalau cara menggunakan bitSet() itu begini:
bitSet(leds, currentLED);
Saya kira variable leds itu berisi nilai bit, which it’s not. Surprise surprise. Stupid of me, really, karena nilai variabel leds di kode rastating tidak pernah berubah. Nol terus.
We poked around the arduino official website a bit more and found this function called bitClear(), which is just exactly what we’re looking for! Kalau bitSet() menge-set bit menjadi, bitClear() menge-set bit menjadi nol.
So we changed the code. Sadly, that was not the end, karena huruf yang muncul di seven segment tetap gibberish. Nice. Di titik ini saya mulai takut kalau tugas ini nggak bisa selesai dengan sekali kumpul.
Tapi, well, tentu saja hanya ada satu solusi logis untuk seven segment yang menampilkan gibberish: ada yang salah dengan ketujuh (keempatbelas?) pin yang dipakai untuk menghubungkan seven segment dengan Arduino. Jadi, kami menyalakan LED yang tersedia satu demi satu.
Bingo! Ternyataa, kami terbalik memasang pin LED pada shift register. Alhasil pin A tertempel pada output pin G, dan sebaliknya. A quick round of switching pins round, and everything is working as it should be.
This is the final code that we used:
int val; int tempPin = 1; int latch1Pin = 12; int clock1Pin = 11; int data1Pin = 13; int latch2Pin = 8; int clock2Pin = 10; int data2Pin = 7; byte leds = 0; int currentLED = 0; int n = 0; int p; int s; void setup(){ Serial.begin(9600); pinMode(latch1Pin, OUTPUT); pinMode(data1Pin, OUTPUT); pinMode(clock1Pin, OUTPUT); pinMode(latch2Pin, OUTPUT); pinMode(data2Pin, OUTPUT); pinMode(clock2Pin, OUTPUT); leds = 0; } void loop(){ val = analogRead(tempPin); float mv = (val/1024.0)*5000; float cel = mv/10; int celint = (int) cel; float farh = (cel*9)/5 + 32; Serial.print("TEMPERATURE = "); Serial.print(cel); Serial.print("*C"); Serial.println(); p = (celint%100 - celint%10)/10; s = (celint%10); leds = 0; displayNum(s); digitalWrite(latch1Pin, LOW); shiftOut(data1Pin, clock1Pin, LSBFIRST, leds); digitalWrite(latch1Pin, HIGH); displayNum(p); digitalWrite(latch2Pin, LOW); shiftOut(data2Pin, clock2Pin, LSBFIRST, leds); digitalWrite(latch2Pin, HIGH); delay(300); } void displayNum(int n){ bitSet(leds, 0); bitSet(leds, 1); bitSet(leds, 2); bitSet(leds, 3); bitSet(leds, 4); bitSet(leds, 5); bitSet(leds, 6); //Conditions for displaying segment a if(n != 1 && n != 4) bitClear(leds, 0); //Conditions for displaying segment b if(n != 5 && n != 6) bitClear(leds, 1); //Conditions for displaying segment c if(n != 2) bitClear(leds, 2); //Conditions for displaying segment d if(n != 1 && n != 4 && n != 7) bitClear(leds, 3); //Conditions for displaying segment e if(n == 2 || n == 6 || n == 8 || n == 0) bitClear(leds, 4); //Conditions for displaying segment f if(n != 1 && n != 2 && n!= 3 && n != 7) bitClear(leds, 5); //Conditions for displaying segment g if (n!=0 && n!=1 && n !=7) bitClear(leds, 6); digitalWrite(latch2Pin, LOW); shiftOut(data2Pin, clock2Pin, LSBFIRST, leds); digitalWrite(latch2Pin, HIGH); }
Dann that’s all today guys. No time-lapse for you this time, because we used forty jumpers (More? Maybe more), and no way am I messing with what’s already working. I’m so not risking putting everything back together and having everything break for no discernable reason--and then spending another hour troubleshooting. So, here’s a result video for ya.
youtube
And all is well again with the world... or not. Who knows what next week would bring?
See you and best wishes,
Sydha Septifika Puteri Rohima
#II3231#Interaksi Manusia dengan Komputer dan Antarmuka#Sistem dan Teknologi Informasi#STI ITB#STEI ITB#ITB
1 note
·
View note
Text
Pin yang Tertukar
Hello again, everyone! I’m back today with another story of my journey with Arduino. Tugas kami yang kedua sedikit lebih rumit, yakni membuat counter dengan bantuan seven segment! Whee! Basically, though, dia cuma menyalakan tujuh LED secara bergantian, thus the name.
Anyway, bahan yang kami pakai adalah sebagai berikut. - satu (1) buah board Arduino Uno, - satu (1) buah breadboard, - satu (1) buah push button, - satu (1) buah seven segment, - dua (2) buah resistor, dan - sebelas (11) buah kabel jumper.
Karena malas, saya memutuskan untuk merancang rangkaian sendiri tanpa tedeng aling aling ngeliat internet. Jadilah saya narik buku lama praktikum Sistem Digital dan Mikroprosesor buat ngeliat pemetaan pin seven segment...
Kata bukunya, pemetaan pin seven segment itu seperti ini nih.
Oke deh! Semangat, akhirnya saya coba colok colokin pin ke breadboard dan Arduino. Kode pun juga ditulis sendiri. Dengan semangat dan PD, kode diupload, TAPIII entah kenapa semuanya gagal total! Seven segment tetap diam dan hitam, pushbutton tidak bereaksi, ada apa gerangan?
Usut punya usut, ternyata seven segment yang saya pakai adalah seven segment dengan common anode, sehingga kaki-kaki ke tiga di seluruh seven segment seharusnya dihubungkan ke sumber tegangan, bukan ground! Sebaliknya, apabila kita hendak menyalakan sebuah LED, seharusnya LED tersebut diberi tegangan 0, bukan 1!
Sip. Kode diperbaiki dan diupload lagi, pin common di Arduino dipindahkan ke 3.3V.
.
.
.
.
Nope. Masih gagal. Push button tidak bereaksi. Wonderful.
Akhirnya saya googling. Nyari nyari sana sini, tapi nggak ada yang menjelaskan gimana sih cara kerjanya push button itu (either that atau gue emang mager baca).
Soon, I went back to my first project. Di situ aku lihat kabel jumpernya dipasang menyorong, yang satu di kiri tombol, yang satu di kanan. Akhirnya salah satu kabel jumpernya saya pindahkan ke sisi lain, dan... yep, it works! All fine and bug-free now!
There’s nothing quite like the satisfaction of figuring out a problem.
Anyway, this is the final code we used:
const int switchPin = 12; const int pinA = 2; const int pinB = 3; const int pinC = 4; const int pinD = 5; const int pinE = 6; const int pinF = 7; const int pinG = 8; int switchState = 0; int num = 0; void setup() { pinMode(switchPin, INPUT_PULLUP); pinMode(pinA, OUTPUT); pinMode(pinB, OUTPUT); pinMode(pinC, OUTPUT); pinMode(pinD, OUTPUT); pinMode(pinE, OUTPUT); pinMode(pinF, OUTPUT); pinMode(pinG, OUTPUT); displayNum(0); } void loop() { displayNum(getLastNum(num)); switchState = digitalRead(switchPin); if (switchState == LOW){ num = num + 1; do { switchState = digitalRead(switchPin); delay(50); } while (switchState == LOW); } } void displayNum(int n){ turnOff(); //Conditions for displaying segment a if(n != 1 && n != 4) digitalWrite(pinA,LOW); //Conditions for displaying segment b if(n != 5 && n != 6) digitalWrite(pinB,LOW); //Conditions for displaying segment c if(n != 2) digitalWrite(pinC,LOW); //Conditions for displaying segment d if(n != 1 && n != 4 && n != 7) digitalWrite(pinD,LOW); //Conditions for displaying segment e if(n == 2 || n == 6 || n == 8 || n == 0) digitalWrite(pinE,LOW); //Conditions for displaying segment f if(n != 1 && n != 2 && n!= 3 && n != 7) digitalWrite(pinF,LOW); //Conditions for displaying segment g if (n!=0 && n!=1 && n !=7) digitalWrite(pinG,LOW); } void turnOff(){ digitalWrite(pinA,HIGH); digitalWrite(pinB,HIGH); digitalWrite(pinC,HIGH); digitalWrite(pinD,HIGH); digitalWrite(pinE,HIGH); digitalWrite(pinF,HIGH); digitalWrite(pinG,HIGH); } int getLastNum(int n){ return (n % 10); }
And this is a short video of how we made it!
youtube
That’s it for today, folks. Can’t wait for the next one!
Peace out,
Sydha Septifika Puteri Rohima

#II3231#Interaksi Manusia dengan Komputer dan Antarmuka#Sistem dan Teknologi Informasi#STI ITB#STEI ITB#ITB
0 notes
Text
Hello (again), world!
Blog ini sudah lama berada di purgatory, terutama karena satu-satunya alasan keberadaan blog ini itu cuma untuk nge-reserve nama saya di sistem Tumblr (yay untuk nama-nama antimainstream!). Tapi kebetulan saya semester ini mengambil kuliah Interaksi Manusia dengan Komputer dan Antarmuka, di mana sebagai tugas, saya harus blogging tentang proyek Arduino yang harus kami lakukan setiap minggu, jadi saya berpikir, ‘Well, why not? Let’s revive this blog!’ Moga-moga ke depannya tempat ini bisa dijalankan dengan cukup lebih reguler.
Proyek pertama kami untuk semester ini cukup sederhana, yakni membuat lampu LED yang bisa dinyala-matikan dengan sebuah button yang berfungsi sebagai saklar lampu. Bahan-bahan yang kami pakai adalah: - satu (1) buah board Arduino Uno, - satu (1) buah breadboard, - satu (1) buah push button, - satu (1) buah lampu LED, - satu (1) buah resistor, dan - tiga (3) buah kabel jumper.
Pembuatannya sendiri tidak sulit. Kami menggunakan petunjuk kode dari sumber ini sebagai panduannya. Diagram sirkuit yang kami gunakan adalah sebagai berikut:

[sumber]
Kode yang kami gunakan juga merupakan modifikasi dari sumber di atas. Berikut adalah kodenya.
const int switchPin = 13; //Switch Connected to PIN 4 const int ledPin = 2; //LED Connected to PIN 8 int switchState = 0; //Variable for reading switch status int ledState = 0; void setup(){ pinMode(ledPin, OUTPUT); //LED PIN is Output pinMode(switchPin, INPUT_PULLUP); //Switch PIN is Input } void loop(){ switchState = digitalRead(switchPin); //Read the status of the Switch if (switchState == LOW) //If the switch is pressed { if (ledState == 0){ digitalWrite(ledPin, HIGH); ledState = 1; } else { digitalWrite(ledPin, LOW); ledState = 0; } } do { switchState = digitalRead(switchPin); delay(50); } while (switchState == LOW); }
Bagaimana cara membuatnya? Dapat disimak pada video berikut :)
youtube
Tidak begitu sulit. Cuma memang pada saat membuat, tim memang harus menyelesaikan beberapa bug sederhana, seperti kode yang kurang tepat implementasinya, sehingga menyebabkan lampu berkedip jika push button ditahan, hingga kabel yang salah tancap atau kurang erat. Seluruhnya masalah yang cukup sederhana dan bisa dihindari dengan sedikit ketelitian.
Begitulah petualangan kami dengan Arduino kali ini. Semoga petualangan selanjutnya semakin seru...
Cheers, Sydha Septifika Puteri Rohima
#II3231#Interaksi Manusia dengan Komputer dan Antarmuka#Sistem dan Teknologi Informasi#STI ITB#STEI ITB#ITB
0 notes
Text
A List of House Listings
Rumahdijual.com
Rumah Pulo Asem Rawamangun http://rumahdijual.com/jakarta-timur/1552346-disewakan-rumah-pulo-asem-rawamangun.html
Apartemen Green Pramuka http://rumahdijual.com/jakarta-pusat/1552235-disewakan-apartemen-green-pramuka.html
Kos Muslimah Rawamangun http://rumahdijual.com/jakarta-timur/1299266-kos-muslimah-rawamangun.html
Kos Muslimah Dinoyo
http://rumahdijual.com/jakarta-timur/1299266-kos-muslimah-rawamangun.html
OLX
Rumah Pulo Asem Rawamangun http://olx.co.id/iklan/disewakan-rumah-pulo-asem-rawamangun-IDiEoL1.html
Apartemen Green Pramuka http://olx.co.id/iklan/disewakan-apartemen-green-pramuka-IDiE4UW.html
Kos Muslimah Rawamangun http://olx.co.id/iklan/kost-putri-wanita-muslimah-rawamangun-IDgTaWA.html
Kos Muslimah Dinoyo http://olx.co.id/iklan/kos-putri-khusus-muslimah-ruko-ditas-a1-2-IDiE51H.html
UrbanIndo
Rumah Pulo Asem Rawamangun http://www.urbanindo.com/property/347414564-rumah-pulo-asem-rawamangun
Apartemen Green Pramuka http://www.urbanindo.com/property/264550350-disewakan-apartemen-green-pramuka
Kos Muslimah Rawamangun http://www.urbanindo.com/property/323990595-kos-karyawati-muslimah-rawamangun
Kos Muslimah Dinoyo http://www.urbanindo.com/property/702956335-kos-putri-khusus-muslimah-ruko-ditas-a1-2
sewakost.com
Kos Muslimah Rawamangun http://www.sewakost.com/jakarta/timur/kos-karyawati-muslimah-rawamangun-11845.html
Kos Muslimah Dinoyo http://www.sewakost.com/jatim/malang/kos-putri-khusus-muslimah-ruko-ditas-a1-2-11846.html
ibilik.com
Kos Muslimah Rawamangun http://id.ibilik.com/rooms/2917863/kos-karyawati-muslimah-rawamangun
Kos Muslimah Dinoyo http://id.ibilik.com/rooms/2918113/kos-putri-khusus-muslimah-ruko-ditas-a1-2
Serumah
Kos Muslimah Rawamangun http://serumah.com/properties/kamar-modern-cerah/
Kos Muslimah Dinoyo tba
Trovit
Rumah Pulo Asem Rawamangun http://rumah.trovit.co.id/listing/rumah-pulo-asem-rawamangun-74258
Apartemen Green Pramuka tba
Rumah.com
Rumah Pulo Asem Rawamangun tba
Apartemen Green Pramuka tba
rumahku.com
Rumah Pulo Asem Rawamangun tba
Apartemen Green Pramuka tba
0 notes
Text
Nama lengkap : Sydha Septifika Puteri Rohima
Nama panggilan : Sydha
Tempat tanggal lahir : Boyolali, 3 September 1996
Jurusan : STI
Alasan ikut sparta : Pengen kenal sama IFSTI 2014
Kesamaan : PC
Keunikan : Level kepedulian tentang suatu hal cuma ada dua level: obsesif kompulsif dan I don’t even care. Like, at all.
Momen paling berharga : Saat orang yang gue bantu berhasil.
0 notes
Text
Hasil Penelitian Fandom STEI 2014
1. Anda menyukai sebuah cerita/game/acara televisi/komik/kartun.
2. Anda menganggap diri anda seorang fan.
3. Anda mengatur jadwal Anda agar dapat membaca cerita itu, atau memainkan game itu, atau menonton acara televisi/komik/kartun itu.
4. Anda ingin melakukan cosplay atau LARP (Live-Action Role Playing).
5. Anda memiliki sebuah akun di media sosial yang berhubungan dengan cerita/game/acara televisi/komik/kartun yang Anda sukai.
6. Anda ingin membuat sebuah karya yang berkaitan dengan cerita/game/acara televisi/komik/kartun yang Anda sukai.
7. Anda ingin memiliki objek yang berkaitan dengan cerita/game/acara televisi/komik/kartun yang Anda sukai.
8. Anda ingin memiliki sebuah lokasi khusus untuk menampilkan objek-objek ini.
9. Anda berbicara dengan orang lain tentang cerita/game/acara televisi/komik/kartun kesukaan Anda.
10. Anda mencari orang yang juga menyukai cerita/game/acara televisi/komik/kartun yang Anda sukai
11. Anda pernah menghadiri sebuah expo/convention.
12. Anda adalah bagian dari sebuah fandom.
13. Anda akan membela cerita/game/acara televisi/komik/kartun yang Anda suka apabila dicela oleh orang lain.
14. Melakukan kegiatan yang berhubungan dengan cerita/game/acara televisi/komik/kartun yang Anda suka membuat Anda merasa antusias.
15. Anda merasa hampa ketika cerita/game/acara televisi/komik/kartun yang Anda suka berakhir.
Terima kasih atas partisipasinya!
0 notes