Saat ini arduino sangat populer di seluruh dunia karena Arduino mudah dipelajari, bahasa yang digunakan dalam arduino telah disederhanakan dengan bantuan pustaka pustaka (libraries) arduino, sehingga tidak terlalu sulit untuk dipahami. Arduino uno memiliki 14 pin digital input/output dengan kecepatan transfer data 16 MHz dan kapasitas penyimpanan 32 KB. Papan score yang akan dibuat dapat dikendalikan oleh Aplikasi Android. Untuk itu perlu dibuatkan aplikasi yang sesuai dengan kebutuhan papan score. Aplikasi yang akan dibuat menggunakan App Inventor tentunya harus sesuai fungsi dari penggunaan dan mudah untuk dimengerti oleh siapa pun. Dalam hal ini aplikasi ini dibuat untuk mengiringi beberapa pertandingan olahraga seperti basket, voli, bulutangkis, sepakbola dan futsal. Media komunikasi yang digunakan adalah modul Bluetooth hc-05. Melalui modul inilah android dapat berkomunikasi dengan papan score.
Berikut ini adalah Tutorial Pembuatan Score Board yang dapat dikontrol dengan menggunakan Android berbasis Arduino.
Adapun cara pembuatannya akan diuraikan secara bertahap agar lebih mudah untuk mempelajarinya.
Hardware:
No. | Nama | Jumlah | Harga | Toko | |
---|---|---|---|---|---|
1 | Arduino Uno R3 | 1 | Rp 66.700 | Art Techno Tokopedia |
Beli |
2 | RTC DS3231SN | 1 | Rp 22.000 | Beli | |
3 | P10 Led module - (Rp. 76.000/pcs) | 2 | Rp 152.000 | Beli | |
4 | HC-05/06 Bluetooth | 1 | Rp 39.800 | Beli | |
5 | POWER supply DC 9V 1A ( 1000 mA ) | 1 | Rp 16.400 | Beli | |
6 | Jumper Dupont male to female | 1 | Rp 3.950 | Beli | |
Total | Rp 300.850 |
Note: Toko dan Harga komponen hanya sebagai referensi.
Blok Diagram
Blok diagram sistem merupakan pendefinisian terhadap sistem yang akan kita buat, perhatikan gambar berikut ini:
Desain Skematik
Diagram Blok |
Desain Fisik
Terdapat dua display tampilan yang akan dibuat, yaitu tampilan timer/waktu dan tampilan score. Berikut ini adalah display yang akan dibuat:
Gambar: Display Timer |
Gambar: Display Score |
Fritzing Beta merupakan salah satu software komputer yang dapat digunakan untuk merancang skematik dan PCB dari rangkaian elektronika. Fritzing Beta memungkinkan kita untuk merancang jalur elektronika dengan atau tanpa melaui desain skematik.
Rangkaian Waktu Otomastis dengan RTC DS3231
Tahap Pertama, Rangkailah Komponen seperti berikut:
Baca:
Gambar: Rangkaian RTC DS3231 |
Program RTC harus dipisah dengan Program Utama, agar tidak terjadi perulangan pembacaan program pada RTC setiap kali arduino di Upload Program.
Modul RTC dengan Arduino |
Sebelum memasukan program waktu otomatis, harus terlebih dahulu memasukan library Sodaq_DS3231 yang dapat di download di link berikut:
Library Sodaq_DS3231 Download
Kemudian, masukkan program berikut kedalam arduino:
Program_Atur_waktu_RTC_otomatis.ino - Download
#include <EEPROM.h>
#include <Wire.h>
#include <Sodaq_DS3231.h>
#define alamatRTC 0x68
#define alamatEEPROMCekToken 0
#define tokenRTC 0xAA //<== rubah token jika ingin nilai baru
void setup() {
Serial.begin(9600);
Serial.println("Set waktu RTC otomatis dengan arduino");
Serial.println("http://www.hestech.id/");
Serial.println();
Wire.begin();
if (EEPROM.read(alamatEEPROMCekToken) != tokenRTC)
{
//Waktu compiler
char bulan[12];
byte indexBulan;
int jam, menit, detik, tanggal, tahun;
char *namaBulan[12] = {
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};
sscanf(__TIME__, "%d:%d:%d", &jam, &menit, &detik);
sscanf(__DATE__, "%s %d %d", bulan, &tanggal, &tahun);
for (indexBulan = 0; indexBulan < 12; indexBulan++) {
if (strcmp(bulan, namaBulan[indexBulan]) == 0)
break;
}
uint8_t wday = hariDariTanggal(tanggal, indexBulan + 1, tahun);
DateTime dt(tahun, indexBulan + 1, tanggal, jam, menit, detik, wday);
rtc.setDateTime(dt);
EEPROM.write(alamatEEPROMCekToken, tokenRTC);
Serial.println("RTC sudah otomatis di setting (Sekali saja)");
}
}
uint32_t old_ts;
void loop() {
String strNamaHari[] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jum'at", "Sabtu"};
DateTime now = rtc.now(); //get the current date-time
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.date(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.print(' ');
Serial.print(strNamaHari[now.dayOfWeek()-1]);
Serial.println();
while (1);
}
byte hariDariTanggal(byte tanggal, byte bulan, uint16_t tahun)
{
uint16_t jumlahHariPerBulanMasehi[] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
if (tahun >= 2000)
tahun -= 2000;
uint32_t jumlahHari = tahun * 365;
uint16_t tahunKabisat = tahun / 4;
for (byte i = 0; i < tahun; i++)
{
if (!(i % 4))
{
jumlahHari++;
}
}
jumlahHari += jumlahHariPerBulanMasehi[bulan - 1];
if ( (bulan >= 2) && !(tahun % 4))
{
jumlahHari++;
}
jumlahHari += tanggal;
return ((jumlahHari + 5) % 7) + 1;
}
Setelah selesai menuliskan program diatas, kemudian compile program untuk memastikan tidak ada eror. Jika tidak ada permasalahan, maka akan menampilkan tulisan done compile dan program siap untuk diupload.
Gambar: Done Compling Program RTC |
Setelah terupload, kemudian buka serial monitor. Maka akan menampilkan jam yang telah tersinkron dengan PC/laptop. Tetapi pastikan jam dan tanggal pada PC/laptopnya sudah cocok.
Gambar: Tampilan Jam dan Tanggal pada Serial Monitor |
Rangkaian Keseluruhan.
Berikut ini adalah rangkaian keseluruhan dari pembuatan Score Board. Rangkailah rangkaian seperti berikut.
Gambar: Pin Komunikasi Display P10 dengan Arduino |
Gambar: Tampak Belakang Panel P10 |
Susunlah rangkaian seperti diatas, kemudian upload program ke Arduino. Namun, sebelum Upload program, pastikan library RTC dan DMD nya sudah ada didalam lib. Arduino.
Note: Sebelum upload program utama, Modul RTC DS3231 harus dilepas...!
Library - RTClib.h
Library - DMD2.h
Baca:
Download - Program_Scoreboard.ino
// Insert File library
#include <SPI.h>
#include <DMD2.h>
#include <MyBigFont.h>
#include <EEPROM.h>
#include <Arial_black_16.h>
#include <SYSTEM3x5.h>
#include <Font3x5.h>
#include <RTClib.h>
#include <Wire.h>
// Defining function
//#define bCLEAR A2
//#define bRIGHT A3
//#define bLEFT A1
#define Panjang 2 // Number of height of Display P10
#define Lebar 1 // Number of width of Display P10
SoftDMD dmd(Panjang, Lebar);
// Declaration Variable
byte Brightness;
byte debounce = 100;
int rightScore = 0;
int leftScore = 0;
int babak=0;
int i;
char dmdBuff[10];
char BT;
RTC_DS1307 rtc;
int Jam ;
int Menit ;
int Detik ;
// Setup function, done once arduino reset
void setup() {
Brightness = EEPROM.read(0);
dmd.setBrightness(10);
dmd.begin();
dmd.clearScreen();
Serial.begin(9600);
// Setup RTC
rtc.begin();
// Cara Setting Jam gunakan 2 fungsi dibawah, secara manual atau otomatis singcron PC, kemudian upload program
// Setelah terupload, cek jam sudah sesuai, hapus code setting jam dibawah, dan upload ulang.
// Set RTC sesuai dengan Laptop / PC
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
//pinMode(bCLEAR,INPUT_PULLUP);
//pinMode(bRIGHT,INPUT_PULLUP);
//pinMode(bLEFT,INPUT_PULLUP);
blinkDisplay();
}
// Blink Display Function, make the display blink
void blinkDisplay(){
dmd.selectFont(MyBigFont);
dmd.clearScreen();
delay(300);
sprintf(dmdBuff,"%d",leftScore);
dmd.drawString( 2, 0, dmdBuff );
dmd.drawString( 29, 0, "-" );
sprintf(dmdBuff,"%2d",rightScore);
dmd.drawString( 41, 0, dmdBuff );
delay(300);
dmd.clearScreen();
delay(300);
}
void showTime() {
// Program menampilkan Jam
dmd.selectFont(Arial_black_16);
DateTime now = rtc.now();
Jam = now.hour();
Menit = now.minute();
Detik = now.second();
String xJam = Konversi(Jam) ;
String xMenit = Konversi(Menit) ;
String xDetik = Konversi(Detik) ;
String Waktu = xJam +":"+ xMenit +":"+ xDetik +" ";
dmd.drawString( 2, 1, Waktu );
}
String Konversi(int sInput) {
if (sInput < 10)
{
return"0" + String(sInput);
}
else
{
return String(sInput);
}
}
// Loop Function, done repeatedly
void loop() {
if(Serial.available()){
BT = Serial.read();
}
if (BT == 'J'){
dmd.clearScreen();
BT = '1';
}
if (BT == '1'){
showTime();
}
if(BT == 'X') {
delay(debounce);
babak = 0;
leftScore = 0;
rightScore = 0;
dmd.clearScreen();
String xbabak = Konversi(babak) ;
dmd.selectFont(SYSTEM3x5);
dmd.drawString( 28, 0, xbabak );
dmd.selectFont(Font3x5);
dmd.drawString( 28, 8, "VS" );
dmd.selectFont(MyBigFont);
sprintf(dmdBuff,"%d",leftScore);
dmd.drawString( 2, 0, dmdBuff );
//dmd.drawString( 29, 0, "-" );
sprintf(dmdBuff,"%2d",rightScore);
dmd.drawString( 41, 0, dmdBuff );
BT = 0;
}
if(BT == 'A') {
delay(debounce);
leftScore++;
blinkDisplay();
dmd.selectFont(SYSTEM3x5);
String xbabak = Konversi(babak) ;
dmd.drawString( 28, 0, xbabak );
dmd.selectFont(Font3x5);
dmd.drawString( 28, 8, "VS" );
dmd.selectFont(MyBigFont);
sprintf(dmdBuff,"%d",leftScore);
dmd.drawString( 2, 0, dmdBuff );
//dmd.drawString( 29, 0, "<-" );
sprintf(dmdBuff,"%2d",rightScore);
dmd.drawString( 41, 0, dmdBuff );
BT = 0;
}
if(BT == 'B') {
delay(debounce);
rightScore++;
blinkDisplay();
dmd.selectFont(SYSTEM3x5);
String xbabak = Konversi(babak) ;
dmd.drawString( 28, 0, xbabak );
dmd.selectFont(Font3x5);
dmd.drawString( 28, 8, "VS" );
dmd.selectFont(MyBigFont);
sprintf(dmdBuff,"%d",leftScore);
dmd.drawString( 2, 0, dmdBuff );
//dmd.drawString( 29, 0, "->" );
sprintf(dmdBuff,"%2d",rightScore);
dmd.drawString( 41, 0, dmdBuff );
BT = 0;
}
if(BT == 'D') {
delay(debounce);
leftScore--;
blinkDisplay();
dmd.selectFont(SYSTEM3x5);
String xbabak = Konversi(babak) ;
dmd.drawString( 28, 0, xbabak );
dmd.selectFont(Font3x5);
dmd.drawString( 28, 8, "VS" );
dmd.selectFont(MyBigFont);
sprintf(dmdBuff,"%d",leftScore);
dmd.drawString( 2, 0, dmdBuff );
//dmd.drawString( 29, 0, "-" );
sprintf(dmdBuff,"%2d",rightScore);
dmd.drawString( 41, 0, dmdBuff );
BT = 0;
}
if(BT == 'C') {
delay(debounce);
rightScore--;
blinkDisplay();
dmd.selectFont(SYSTEM3x5);
String xbabak = Konversi(babak) ;
dmd.drawString( 28, 0, xbabak );
dmd.selectFont(Font3x5);
dmd.drawString( 28, 8, "VS" );
dmd.selectFont(MyBigFont);
sprintf(dmdBuff,"%d",leftScore);
dmd.drawString( 2, 0, dmdBuff );
//dmd.drawString( 29, 0, "-" );
sprintf(dmdBuff,"%2d",rightScore);
dmd.drawString( 41, 0, dmdBuff );
BT = 0;
}
if(BT == 'M') {
delay(debounce);
babak--;
blinkDisplay();
dmd.selectFont(SYSTEM3x5);
String xbabak = Konversi(babak) ;
dmd.drawString( 28, 0, xbabak );
dmd.selectFont(Font3x5);
dmd.drawString( 28, 8, "VS" );
dmd.selectFont(MyBigFont);
sprintf(dmdBuff,"%d",leftScore);
dmd.drawString( 2, 0, dmdBuff );
//dmd.drawString( 29, 0, "-" );
sprintf(dmdBuff,"%2d",rightScore);
dmd.drawString( 41, 0, dmdBuff );
BT = 0;
}
if(BT == 'N') {
delay(debounce);
babak++;
blinkDisplay();
dmd.selectFont(SYSTEM3x5);
String xbabak = Konversi(babak) ;
dmd.drawString( 28, 0, xbabak );
dmd.selectFont(Font3x5);
dmd.drawString( 28, 8, "VS" );
dmd.selectFont(MyBigFont);
sprintf(dmdBuff,"%d",leftScore);
dmd.drawString( 2, 0, dmdBuff );
//dmd.drawString( 29, 0, "-" );
sprintf(dmdBuff,"%2d",rightScore);
dmd.drawString( 41, 0, dmdBuff );
BT = 0;
}
/*if(digitalRead(bLEFT) == LOW && digitalRead(bRIGHT) == LOW) {
dmd.clearScreen();
delay(debounce);
setBrightness:
Brightness = EEPROM.read(0);
if(digitalRead(bLEFT) == LOW ){delay(debounce); Brightness++;}
if(digitalRead(bRIGHT) == LOW){delay(debounce); Brightness--;}
EEPROM.write(0,Brightness);
dmd.setBrightness(Brightness);
sprintf(dmdBuff,"%3d ",Brightness);
dmd.drawString( 16, 0, dmdBuff );
delay(50);
if(digitalRead(bCLEAR) == 0){dmd.clearScreen(); delay(debounce); loop();}
else{goto setBrightness;}
}*/
}
Setelah menuliskan program diatas, kemudian Compile terlebih dahulu untuk memastikan tidak ada program yang error dan Library Arduino yang dibutuhkan sudah tersedia.
Gambar: Done Compling |
Kemudian Upload program kedalam arduino IDE. Jika sudah berhasil, langkah selanjutnya adalah membahas tentang Aplikasi Scoreboard yang sudah dibuat dan menginstalkan ke Hp Android.
Aplikasi Android
Agar lebih memudahkan pemahaman, berikut akan dibahas mengenai flowchart sederhana dari pembuatan PapanScoreboard ini:
Flowchart
Berikut adalah flowchart sederhana yang akan dibuat:
Gambar: Flowchart Pemrograman Papan Score |
Keseluruhan rangkaian Papan Skor menggunakan Android ini bekerja secara otomatis sesuai dengan pilahan unit yang ditentukan. Untuk memastikan apakah pengiriman dan penerimaan data melalui modul Bluetooth HC-05 ke multi-display P10 dapat berfungsi dengan baik lakukan perintah - perintah diatas sesua dengan tahapannya.
Download aplikasi yang sudah dibuat, Kemudian instal ke Android.
Baca:Aplikasi dapat di unduh dengan dua format yaitu:
Cara Membuat Aplikasi Android dengan App Inventor
- PAPANSKOR_V2.apk - Download- PAPANSKOR_V2.aia - Download
Format .apk dapat langsung diinstal di android, sedangkan format .aia dapat diedit dengan menggunakan App Inventor jika ingin mengeditnya.
Berikut ini adalah tampilan Aplikasi Score Board yang sudah diinstal dan dibuka.
Gambar: Tampilan Awal Aplikasi Score Board |
Langkah Pengoperasian
Terlebih dahulu hidupkan Alat Scoreboard, (saat pertama kali dihidupkan, Led Display P10 akan berkedip) kemudian buka aplikasi Androidnya. Seteleh membuka aplikasi, kemudian tekan icon Bluetooth pada aplikasi untuk menghubungkan dengan device Modul Bluetoot yang terdeteksi pada aplikasi.
Gambar: Hubungkan dengan Modul Bluetooth yang digunakan. |
Gambar: Bluetooth sudah terhubung |
Langkah selanjutnya adalah menampilakan data pada multy-display p10. Untuk pertama kali dihidupkan alat tidak akan menampilkan data, hanya tampilan blink/berkedip pada saat pertama kali saklar pada alat dihidupkan. Untuk menampilkan data pertama kali yaitu dengan cara menekan button yang ada pada tampilan aplikasi diatas.
Cobalah dengan menekan icon Timer pada aplikasi.
Gambar: Tampilan Jam pada Display Score Board |
Tampilan jam diatas telah diseting otomatis dengan menggunakan Real Time Clock (RTC) DS3231. Jam ini tidak perlu mengatur ulang meskipun alat dimatikan. Selama baterai pada RTC masih ada, jam akan tetap cocok.
Kemudian jika akan menambahkan score, tekan icon tambah (+) dan jika ingin mengurangi tekan ikon kurang (-) pada aplikasi android dan akan menampilkan data penambahan score seperti pada gambar berikut:
Gambar: Tampilan Score Pada Android dan Panel Display P10 |
Display Panel P10 bisa dibuat casing agar lebih kokoh dan menarik, sekaligus untuk tata letak komponen elektronika didalamnya.
Gambar: Cassing Terbuat dari Baja Ringan |
SELESAI
Silahkan ikuti tutorial diatas, pasti bisa. Karena Tutorial tersebut sudah di implementasikan di berbagai gedung olahraga, Seperti Lapangan Futsal, Lapangan Badminton, dan lapangan Volly.
Silahkan bertanya dikolom komentar jika ada yang tidak paham.
SHARE tutorial ini agar banyak orang yang bisa membuat alat ini dan berbagi pahala buat mereka yang mau mengembangkan alat ini.
file aia terkunci ... mohon dibukakan ... trims
ReplyDeleteSilahkan, fille .aia dapat didownload langsung
DeleteMaaf gan kalau error seperti ini kenapa ya
ReplyDelete'RTC_DS1307' does not name a type; did you mean 'DS1307'?
terimakasih atas penjelasannya
Library RTC yg diinstal harus di sesuaikan dengan modul rtc yg dipakai.
Deleteassalamu'alaikum....
ReplyDeleteterima kasih sudah berbagi coding arduino nya mas
setelah saya compile ada error pada
'SoftDMD' does not name a type
kira-kira itu kenapa ya..?
WynnBET: Review and Bonus Code for $1,000 in Free Bets
ReplyDeleteWynnBET is an online gambling platform, 군포 출장마사지 established in 2012. Launched in 2012, 원주 출장마사지 WynnBET brings a wide range of casino games including 태백 출장마사지 roulette, Rating: 5 · 울산광역 출장마사지 Review by 포항 출장마사지 Josh Middleton
Mas mantap mas.... setelah di bikin ternyata blottoth tidak terdeteksi ... penyebanya apa ya?? apa HC 05 nya eror??
ReplyDeleteklau mau nambah nama pemain gmn mas
ReplyDeleteartinya apa ya?? "ERORM516 UNABLE TO WRITE"
ReplyDeletesudah berhasil.... koneksi ke blutut... tapi belum bisa di kontrol pakai HP...
ReplyDelete