1. Membuat tampilan aplikasi yang lebih menarik agar pengguna lebih nyaman dalam penggunaan aplikasi.
2. Menambah indikator kelebihan berat agar mengetahui kelebihan berat jika buzzer tidak berfungsi.
52
DAFTAR PUSTAKA
[1] Fauzi1,N.A., Hapsari, G.I., Rosmiati, M., 2019. Prototipe Sistem Monitoring Berat Muatan Truk. e-Proceeding of Applied Science, Vol. 5(3), 2433-2440.
[2] Bus-Truck.id. 2018. Menhub: 63 Persen Kecelakaan di Jalan Raya karena Kendaraan Overload,https://bus-truck.id/berita/menhub-63-persen-kecelakaan-di-jalan-raya-karena-kendaraan-overload, diakses 10 November 2020.
[3] Arifin, J., Sumardi, Setiawan, 2011. Model Timbangan Digital Menggunakan Load Cell.
[4] Adzani, M.R., 2014. Prototipe Sistem Monitoring Berat dan Posisi Kendaraan Bermuatan Dengan Menggunakan PC.
[5] Peraturan Daerah Istimewa Yogyakarta, 2010. Perda DIY No. 4 Tahun 2010 ttg Kelebihan Muatan Angkutan Barang.
[6] Robotshop, 2011. Datasheet. 3133 - Micro Load Cell (0-5kg) - CZL635, http://yourduino.com/docs/Loadcell-datasheet-3133.pdf, diakses pada 15 November 2020.
[7] Avia semiconductor Datasheet: 24-Bit Analog-to-Digital Converter (ADC) for Weigh Scales. Pp.1-9.
[8] Nugraha, Agung, D., 2017. Timbangan Gantung Digital dengan Sensor HX711 (Load Cell) Berbasis Arduino Uno.
[9] Espressif. (2015). ESP8266EX Datasheet. Espressif Systems Datasheet, pp. 1-31. Diakses dari
https://www.adafruit.com/images/productfiles/2471/0AESP8266__Datasheet__EN_
v4.3.pdf pada 20 November, 13.45 WIB.
[10] Darmawan, C. W., Sompie, S. R. U. A., Kambey, F. D., 2020. Implementasi Internet of Things Pada Monitoring Kecepatan Kendaraan Bermotor. Jurnal Teknik Informatika, Vol. 1(1), 1-10.
[11] Dicoding, 2019. Apa itu Android Studio dan Android SDK?.
https://www.dicoding.com/blog/apa-itu-android-studio-dan-android-sdk/ , diakses pada 10 Desember 2020.
[12] Sandy, L. A., Januar, R., Hariadi, R. R., 2017. Rancang Bangun Aplikasi Chat pada Platform Android dengan Media Input berupa Canvas dan Shareable Canvas untuk Bekerja Dalam Satu Canvas secara Online. Jurnal Teknik ITS, Vol. 6 (2), 2337-
53
LAMPIRAN
Lampiran 1. Data Pengujian Sensor Load Cell
Tabel L1. Hasil Pengukuran Load Cell Prototipe Truk 1 Jumlah
4 2562 2.48 97.52
Tabel L2. Hasil Pengukuran Load Cell Prototipe Truk 2
3000
Lampiran 2. Listing Program Prototipe Truk 1
#include <HX711.h>
#include <ESP8266WiFi.h>
#include <FirebaseESP8266.h>
#define calibration_factor 184440
#define LOADCELL_DOUT_PIN D1
#define LOADCELL_SCK_PIN D2
#define PIN_BUZZER D6
HX711 scale;
unsigned long myTime = 0;
#define WIFI_SSID "Hormes"
#define WIFI_PASSWORD "Orion007"
#define DATABASE_URL "arduino-c263b.firebaseio.com/"
FirebaseData fbdo;
struct myMillis{
unsigned long offset=0;
unsigned long get(){
return millis()-offset;
}
void reset(){
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
scale.set_scale(calibration_factor);
scale.tare();
pinMode(PIN_BUZZER, OUTPUT);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(300);
}
Serial.println();
Serial.print("Connected with IP: ");
Serial.println(WiFi.localIP());
Serial.println();
Serial.printf("Firebase Client v%s\n\n", FIREBASE_CLIENT_VERSION);
Firebase.begin(DATABASE_URL,
"5JQJKz6Ni4hv9gFpTfmKAXdOQsQuAEquiz8Dbm5c");
delay(1);
Firebase.setFloat(fbdo, "/Truk1/Berat", 0);
Firebase.setString(fbdo, "/Truk1/Buzzer", "OFF");
Firebase.setString(fbdo, "/Truk1/Reset", "OFF");
Firebase.setFloat(fbdo, "/Truk1/Waktu", 0);
}
void loop() {
MM.reset();
Serial.print("Reading: ");
Serial.print(scale.get_units(), 3);
Serial.print(" kg");
Serial.println();
if(Firebase.getString(fbdo, "/Truk1/Buzzer")) {
if(fbdo.dataType()=="string") {
String buzzerstatus = fbdo.stringData();
if(buzzerstatus == "OFF" && scale.get_units(3) > 3) {
Firebase.setString(fbdo, "/Truk1/Buzzer", "ON");
digitalWrite(PIN_BUZZER, HIGH);
Serial.println("Buzzer Nyala");
delay(1);
}else if(buzzerstatus == "ON2" && scale.get_units(3) > 3){
digitalWrite(PIN_BUZZER, LOW);
Serial.println("Buzzer Mati");
delay(1);
}else if(scale.get_units(3) < 3 ){
Firebase.setString(fbdo, "/Truk1/Buzzer", "OFF");
digitalWrite(PIN_BUZZER, LOW);
if(Firebase.getString(fbdo, "/Truk1/Reset")) {
if(fbdo.dataType()=="string") {
String resetstatus = fbdo.stringData();
if(resetstatus == "ON") {
scale.tare();
Firebase.setString(fbdo, "/Truk1/Reset", "OFF");
Serial.println("Tare");
}
if (Firebase.ready()) {
Firebase.setFloat(fbdo, "/Truk1/Berat", scale.get_units(3));
delay(1);
Serial.printf("Get Firebase ... %s\n", Firebase.getFloat(fbdo, "/Truk1/Berat") ? String(fbdo.floatData()).c_str() : fbdo.errorReason().c_str());
myTime = MM.get();
Serial.printf("%lu milisecond\n", myTime);
Firebase.setFloat(fbdo, "/Truk1/Waktu", myTime);
} }
Lampiran 3. Listing Program Prototipe Truk 2
#include <HX711.h>
#include <ESP8266WiFi.h>
#include <FirebaseESP8266.h>
#define calibration_factor 184440
#define LOADCELL_DOUT_PIN D1
#define LOADCELL_SCK_PIN D2
#define PIN_BUZZER D6
HX711 scale;
unsigned long myTime = 0;
#define WIFI_SSID "Hormes"
#define WIFI_PASSWORD "Orion007"
#define DATABASE_URL "arduino-c263b.firebaseio.com/"
FirebaseData fbdo;
struct myMillis{
unsigned long offset=0;
unsigned long get(){
return millis()-offset;
}
void reset(){
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
scale.set_scale(calibration_factor);
scale.tare();
pinMode(PIN_BUZZER, OUTPUT);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(300);
}
Serial.println();
Serial.print("Connected with IP: ");
Serial.println(WiFi.localIP());
Serial.println();
Serial.printf("Firebase Client v%s\n\n", FIREBASE_CLIENT_VERSION);
Firebase.begin(DATABASE_URL,
"5JQJKz6Ni4hv9gFpTfmKAXdOQsQuAEquiz8Dbm5c");
delay(1);
Firebase.setFloat(fbdo, "/Truk2/Berat", 0);
Firebase.setString(fbdo, "/Truk2/Buzzer", "OFF");
Firebase.setString(fbdo, "/Truk2/Reset", "OFF");
Firebase.setFloat(fbdo, "/Truk2/Waktu", 0);
}
void loop() {
MM.reset();
Serial.print("Reading: ");
Serial.print(scale.get_units(), 3);
Serial.print(" kg");
Serial.println();
if(Firebase.getString(fbdo, "/Truk2/Buzzer")) {
if(fbdo.dataType()=="string") {
String buzzerstatus = fbdo.stringData();
if(buzzerstatus == "OFF" && scale.get_units(3) > 3) {
Firebase.setString(fbdo, "/Truk2/Buzzer", "ON");
digitalWrite(PIN_BUZZER, HIGH);
Serial.println("Buzzer Nyala");
delay(1);
}else if(buzzerstatus == "ON2" && scale.get_units(3) > 3){
digitalWrite(PIN_BUZZER, LOW);
Serial.println("Buzzer Mati");
delay(1);
}else if(scale.get_units(3) < 3 ){
Firebase.setString(fbdo, "/Truk2/Buzzer", "OFF");
digitalWrite(PIN_BUZZER, LOW);
if(Firebase.getString(fbdo, "/Truk2/Reset")) {
if(fbdo.dataType()=="string") {
String resetstatus = fbdo.stringData();
if(resetstatus == "ON") {
scale.tare();
Firebase.setString(fbdo, "/Truk2/Reset", "OFF");
Serial.println("Tare");
}
if (Firebase.ready()) {
Firebase.setFloat(fbdo, "/Truk2/Berat", scale.get_units(3));
delay(1);
Serial.printf("Get Firebase ... %s\n", Firebase.getFloat(fbdo, "/Truk2/Berat") ? String(fbdo.floatData()).c_str() : fbdo.errorReason().c_str());
myTime = MM.get();
Serial.printf("%lu milisecond\n", myTime);
Firebase.setFloat(fbdo, "/Truk1/Waktu", myTime);
} }
Lampiran 4. Listing Program Kalibrasi Sensor
#include "HX711.h" //You must have this library in your arduino library folder
unsigned long sendDataPrevMillis = 0;
float weight;
float calibration_factor = 196440; //105640; -106600 worked for my 40Kg max scale setup
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
scale.begin(DOUT,CLK);
Serial.println("HX711 Calibration");
Serial.println("Remove all weight from scale");
Serial.println("After readings begin, place known weight on scale");
Serial.println("Press a,s,d,f to increase calibration factor by 10,100,1000,10000 respectively");
Serial.println("Press z,x,c,v to decrease calibration factor by 10,100,1000,10000 respectively");
Serial.println("Press t for tare");
scale.set_scale();
scale.tare(); //Reset the scale to 0
long zero_factor = scale.read_average(); //Get a baseline reading
Serial.print("Zero factor: "); //This can be used to remove the need to tare the scale.
Useful in permanent scale projects.
Serial.println(zero_factor);
pinMode(PIN_BUZZER, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
scale.set_scale(calibration_factor); //Adjust to this calibration factor
Serial.print("Reading: ");
Serial.print(scale.get_units(), 3);
Serial.print(" kg"); //Change this to kg and re-adjust the calibration factor if you follow SI units like a sane person
Serial.print(" calibration_factor: ");
Serial.print(calibration_factor);
Serial.println();
Lampiran 4. Listing Program Android Studio (Aplikasi)
package com.example.arduino;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.firebase.client.DataSnapshot;
import com.firebase.client.Firebase;
import com.firebase.client.FirebaseError;
import com.firebase.client.ValueEventListener;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import java.text.DecimalFormat;
public class MainActivity extends AppCompatActivity {
private TextView tv1, tv2, tv3, tv4;
private Button bt1, bt2, btr1, btr2;
private Firebase db1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1= (TextView)findViewById(R.id.tv1);
db1= new Firebase("https://arduino-c263b.firebaseio.com/");
db1.addValueEventListener(new ValueEventListener() { @Override
tv2.setText("---");
bt1.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View view) { updatebuzzer("ON2");
} });
btr1.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View view) { updatetare("ON");
} });
bt2.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View view) { updatebuzzer2("ON2");
} });
btr2.setOnClickListener(new View.OnClickListener() { @Override
private boolean updatebuzzer(String buzzer) {
DatabaseReference dR =
FirebaseDatabase.getInstance().getReference("Truk1").child("Buzzer");
dR.setValue(buzzer);
Toast.makeText(getApplicationContext(), "Buzzer berhasil dimatikan", Toast.LENGTH_LONG).show();
return true;
}
private boolean updatebuzzer2(String buzzer) {
DatabaseReference dR = FirebaseDatabase.getInstance().getReference("Truk2").child("Buzzer");
dR.setValue(buzzer);
Toast.makeText(getApplicationContext(), "Buzzer berhasil dimatikan", Toast.LENGTH_LONG).show();
return true;
}
private boolean updatetare(String reset) {
DatabaseReference dR =
FirebaseDatabase.getInstance().getReference("Truk1").child("Reset");
dR.setValue(reset);
Toast.makeText(getApplicationContext(), "Timbangan berhasil dinolkan", Toast.LENGTH_LONG).show();
return true;
}
private boolean updatetare2(String reset) {
DatabaseReference dR =
FirebaseDatabase.getInstance().getReference("Truk2").child("Reset");
dR.setValue(reset);
Toast.makeText(getApplicationContext(), "Timbangan berhasil dinolkan", Toast.LENGTH_LONG).show();
return true;
} }