- Komponen LED digunakan untuk mensimulasikan buka tutup gerbang masuk kendaraan. Apabila LED menyala, maka gerbang masuk terbuka, kendaraan dari luar bisa masuk. Apabila LED padam, maka gerbang masuk tertutup, kendaraan dari luar tidak bisa masuk.
- Komponen 7-segmen digunakan untuk menampilkan jumlah kendaraan. Karena angka 99 dirasa sudah cukup banyak, maka di aplikasi ini, kedelapan digit 7-segmen tersebut dibagi menjadi 4 kelompok, yang dinamai lantai 1 s/d lantai 4, dengan masing-masing lantai bisa menampung kendaraan hingga maksimum 99 buah. Jumlah ruang yang kosong untuk Lantai 1 ditampilkan di 2 digit 7-segmen yang paling kiri, sedangkan jumlah ruang yang kosong untuk lantai 4 ditampilkan di 2 digit 7-segmen yang paling kanan (lihat Gambar 1 di atas).
- Komponen tombol digunakan untuk mensimulasikan kendaraan masuk dan kendaraan keluar. Ketika tombol + ditekan, menandakan bahwa ada kendaraan masuk. Ketika tombol - ditekan menandakan ada kendaraan keluar. Tombol + (masuk) dan tombol - (keluar) untuk lantai 1 berada di paling kiri, dan untuk lantai 4 berada di paling kanan.
- Karena menggunakan Cloud, maka data jumlah kendaraan dan tempat parkir yang tersedia, tidak akan hilang ketika Modul LED&KEY dimatikan, karena datanya tersimpan di Cloud.
- Data kendaraan masuk dan keluar dapat terpantau secara real-time dan online, sehingga ketersediaan tempat parkir dapat diketahui secara cepat dan mudah.
- Karena menggunakan Arduino IoT Cloud, maka pembuatan aplikasinya menjadi mudah dan cepat. Di samping itu, dengan banyaknya variabel dan widget yang tersedia, memungkinkan banyak sekali aplikasi yang dapat dikembangkan. Dalam aplikasi di sini, selain menggunakan widget Messenger dengan tipe data String, widget yang digunakan adalah widget Color, dengan variabel Color, yang termasuk dalam jenis variabel kompleks, yaitu sebuah variabel yang menggabungkan 3 buah nilai (hue, saturation, brightness).
- Penggunaan Google Sheet menguntungkan, karena selain bisa diakses secara online, juga dilengkapi dengan banyak sekali kemampuan olah data, sehingga berbagai variasi penyajian data bisa dilakukan dengan mudah.
Thing: Parkir
Variable
Tipe Variable
Permission
Update
lantai1
CloudColor (Light and color | Color)
Read & Write
On Change
lantai2
CloudColor (Light and color | Color)
Read & Write
On Change
lantai3
CloudColor (Light and color | Color)
Read & Write
On Change
lantai4
CloudColor (Light and color | Color)
Read & Write
On Change
out1
String (Basic | Character String)
Read & Write
On Change
- #include "arduino_secrets.h"
- #include "thingProperties.h"
- #include <TM1638plus.h>
- uint8_t tombol = 0;
- uint8_t maxlt1 = 0; //kapasitas maks lantai1
- uint8_t maxlt2 = 0; //kapasitas maks lantai2
- uint8_t maxlt3 = 0; //kapasitas maks lantai3
- uint8_t maxlt4 = 0; //kapasitas maks lantai4
- uint8_t trslt1 = 0; //jumlah terisi di lantai 1
- uint8_t trslt2 = 0; //jumlah terisi di lantai 2
- uint8_t trslt3 = 0; //jumlah terisi di lantai 3
- uint8_t trslt4 = 0; //jumlah terisi di lantai 4
- uint8_t ksglt1 = 0; //jumlah kosong di lantai 1
- uint8_t ksglt2 = 0; //jumlah kosong di lantai 2
- uint8_t ksglt3 = 0; //jumlah kosong di lantai 3
- uint8_t ksglt4 = 0; //jumlah kosong di lantai 4
- TM1638plus tm(D5, D6, D7, false);
- void setup() {
- Serial.begin(9600);
- delay(1500);
- initProperties();
- ArduinoCloud.begin(ArduinoIoTPreferredConnection);
- setDebugMessageLevel(2);
- ArduinoCloud.printDebugInfo();
- tm.displayBegin();
- delay(1000);
- tm.reset();
- }
- void loop() {
- ArduinoCloud.update();
- maxlt1 = lantai1.getValue().hue;
- trslt1 = lantai1.getValue().sat;
- ksglt1 = lantai1.getValue().bri;
- maxlt2 = lantai2.getValue().hue;
- trslt2 = lantai2.getValue().sat;
- ksglt2 = lantai2.getValue().bri;
- maxlt3 = lantai3.getValue().hue;
- trslt3 = lantai3.getValue().sat;
- ksglt3 = lantai3.getValue().bri;
- maxlt4 = lantai4.getValue().hue;
- trslt4 = lantai4.getValue().sat;
- ksglt4 = lantai4.getValue().bri;
- tombol = tm.readButtons();
- switch (tombol) {
- case 1:
- if (ksglt1) {
- trslt1++;
- if (trslt1 < 10) out1 = "ta0" + String(trslt1);
- else out1 = "ta" + String(trslt1);
- }
- break;
- case 2:
- if (ksglt1 < maxlt1) {
- trslt1--;
- if (trslt1 < 10) out1 = "ta0" + String(trslt1);
- else out1 = "ta" + String(trslt1);
- }
- break;
- case 4:
- if (ksglt2) {
- trslt2++;
- if (trslt2 < 10) out1 = "tb0" + String(trslt2);
- else out1 = "tb" + String(trslt2);
- }
- break;
- case 8:
- if (ksglt2 < maxlt2) {
- trslt2--;
- if (trslt2 < 10) out1 = "tb0" + String(trslt2);
- else out1 = "tb" + String(trslt2);
- }
- break;
- case 16:
- if (ksglt3) {
- trslt3++;
- if (trslt3 < 10) out1 = "tc0" + String(trslt3);
- else out1 = "tc" + String(trslt3);
- }
- break;
- case 32:
- if (ksglt3 < maxlt3) {
- trslt3--;
- if (trslt3 < 10) out1 = "tc0" + String(trslt3);
- else out1 = "tc" + String(trslt3);
- }
- break;
- case 64:
- if (ksglt4) {
- trslt4++;
- if (trslt4 < 10) out1 = "td0" + String(trslt4);
- else out1 = "td" + String(trslt4);
- }
- break;
- case 128:
- if (ksglt4 < maxlt4) {
- trslt4--;
- if (trslt4 < 10) out1 = "td0" + String(trslt4);
- else out1 = "td" + String(trslt4);
- }
- break;
- }
- tm.displayASCII(0, char(ksglt1 / 10 + 48));
- tm.displayASCIIwDot(1, char(ksglt1 % 10 + 48));
- tm.displayASCII(2, char(ksglt2 / 10 + 48));
- tm.displayASCIIwDot(3, char(ksglt2 % 10 + 48));
- tm.displayASCII(4, char(ksglt3 / 10 + 48));
- tm.displayASCIIwDot(5, char(ksglt3 % 10 + 48));
- tm.displayASCII(6, char(ksglt4 / 10 + 48));
- tm.displayASCIIwDot(7, char(ksglt4 % 10 + 48));
- if (ksglt1) {
- tm.setLED(0, 1);
- tm.setLED(1, 1);
- } else {
- tm.setLED(0, 0);
- tm.setLED(1, 0);
- }
- if (ksglt2) {
- tm.setLED(2, 1);
- tm.setLED(3, 1);
- } else {
- tm.setLED(2, 0);
- tm.setLED(3, 0);
- }
- if (ksglt3) {
- tm.setLED(4, 1);
- tm.setLED(5, 1);
- } else {
- tm.setLED(4, 0);
- tm.setLED(5, 0);
- }
- if (ksglt4) {
- tm.setLED(6, 1);
- tm.setLED(7, 1);
- } else {
- tm.setLED(6, 0);
- tm.setLED(7, 0);
- }
- if (out1.length() == 4) {
- String out2 = out1.substring(2);
- if (out1.startsWith("m")) {
- if (out1.startsWith("a", 1) || out1.startsWith("A", 1)) maxlt1 = out2.toInt();
- if (out1.startsWith("b", 1) || out1.startsWith("B", 1)) maxlt2 = out2.toInt();
- if (out1.startsWith("c", 1) || out1.startsWith("C", 1)) maxlt3 = out2.toInt();
- if (out1.startsWith("d", 1) || out1.startsWith("D", 1)) maxlt4 = out2.toInt();
- }
- if (out1.startsWith("t")) {
- if (out1.startsWith("a", 1) || out1.startsWith("A", 1)) trslt1 = out2.toInt();
- if (out1.startsWith("b", 1) || out1.startsWith("B", 1)) trslt2 = out2.toInt();
- if (out1.startsWith("c", 1) || out1.startsWith("C", 1)) trslt3 = out2.toInt();
- if (out1.startsWith("d", 1) || out1.startsWith("D", 1)) trslt4 = out2.toInt();
- }
- }
- ksglt1 = maxlt1 - trslt1;
- ksglt2 = maxlt2 - trslt2;
- ksglt3 = maxlt3 - trslt3;
- ksglt4 = maxlt4 - trslt4;
- lantai1 = Color(maxlt1, trslt1, ksglt1);
- lantai2 = Color(maxlt2, trslt2, ksglt2);
- lantai3 = Color(maxlt3, trslt3, ksglt3);
- lantai4 = Color(maxlt4, trslt4, ksglt4);
- }
- void onOut1Change() {
- }
- void onLantai1Change() {
- }
- void onLantai2Change() {
- }
- void onLantai3Change() {
- }
- void onLantai4Change() {
- }
- ArduinoIoTCloud (versi 1.8.0)
- Arduino_ConnectionHandler (versi 0.7.1)
- Arduino_DebugUtils-master
- ArduinoMqttClient-master
- TM1638plus
7. Berikutnya, buka Dashboard, klik tombol Add, pilih Things, pilih Parkir. Kemudian pilih kelima variabel, klik Create Widgets, maka akan muncul 4 buah widget Color dan sebuah widget Messenger.
- Ketik maxx, dimana xx adalah angka -> widget Color Lantai1 untuk nilai Hue berisi angka XX.
- Ketik mbxx, dimana xx adalah angka -> widget Color Lantai2 untuk nilai Hue berisi angka XX.
- Ketik mcxx, dimana xx adalah angka -> widget Color Lantai3 untuk nilai Hue berisi angka XX.
- Ketik mdxx, dimana xx adalah angka -> widget Color Lantai4 untuk nilai Hue berisi angka XX.
- Ketik taxx, dimana xx adalah angka -> widget Color Lantai1 untuk Saturation berisi angka xx.
- Ketik tbxx, dimana xx adalah angka -> widget Color Lantai2 untuk Saturation berisi angka xx.
- Ketik tcxx, dimana xx adalah angka -> widget Color Lantai3 untuk Saturation berisi angka xx.
- Ketik tdxx, dimana xx adalah angka -> widget Color Lantai4 untuk Saturation berisi angka xx.
- Ketika tombol + yang paling kiri di Modul LED&KEY ditekan, membuat kode input taxx (kode untuk memasukkan data tempat parkir yang terisi di Lantai 1) dikirim ke widget Messenger, di mana nilai xx tersebut akan bertambah 1 angka setiap kali tombol + tersebut ditekan.
- Ketika tombol - di samping kanannya ditekan, membuat kode input taxx dikirim ke widget Messenger, di mana nilai xx akan berkurang 1 angka setiap kali tombol - tersebut ditekan.
- Ketika tombol - yang paling kanan di Modul LED&KEY ditekan, maka akan mengirim kode input tdxx (kode untuk memasukkan data tempat parkir yang terisi di Lantai 4) ke widget Messenger, di mana nilai xx akan berkurang 1 angka setiap kali tombol - tersebut ditekan.
- Ketika tombol + di samping kirinya ditekan, maka akan mengirim kode input tdxx ke widget Messenger, di mana nilai xx akan bertambah 1 angka setiap kali tombol + tersebut ditekan.
Gambar 7. Kapasitas maksimum di setiap Lantai dimasukkan melalui widget Messenger dengan kode input ma90, mb90, mc90, md90, yang berarti kapasitas maksimum di setiap Lantai adalah 90. Karena belum ada kendaraan yang masuk, maka tempat parkir yang kosong sama dengan kapasitas maksimumnya, terlihat kedelapan 7-segmen di Modul LED&KEY menampilkan tempat parkir yang kosong di setiap Lantai
Gambar 8. Ketika tombol + di Lantai1 ditekan, maka tempat parkir yang kosong di Lantai1 mulai berkurang. Setelah 7 kali penekanan, maka tempat parkir yang kosong di Lantai1 bernilai 83, seperti ditampilkan pada 7-segmen. Setiap kali penekanan tombol+ di Lantai1 dilakukan, akan ada kode input taxx yang dikirimkan ke widget Messenger, di mana nilai xx akan dimulai dari 00, dan akan bertambah 1 angka setiap kali penekanan berikutnya.
Gambar 9. Ketika tombol + di Lantai2 ditekan, maka tempat parkir yang kosong di Lantai2 mulai berkurang. Setelah 27 kali penekanan, maka tempat parkir yang kosong di Lantai2 bernilai 63, seperti ditampilkan pada 7-segmen. Setiap kali penekanan tombol+ di Lantai2 dilakukan, akan ada kode input tbxx yang dikirimkan ke widget Messenger, di mana nilai xx akan dimulai dari 00, dan akan bertambah 1 angka setiap kali penekanan berikutnya.
Gambar 10. Ketika kode input tc88 diketikkan di kotak input widget Messenger, maka tempat parkir yang kosong di Lantai3 menjadi 2, seperti ditampilkan pada 7-segmen. Mengapa 2? Karena kode input tc88 ini berarti ada 88 kendaraan yang sudah masuk mengisi tempat parkir. Dengan kapasitas tempat parkir 90, maka yang kosong hanya tinggal 2.
Gambar 11. Ketika kode input td88 diketikkan di kotak input widget Messenger, kemudian dilanjutkan dengan penekanan tombol + hingga tempat kosong di Lantai 4 menjadi 0, tampak terlihat 2 LED di atas 7-segmen terlihat padam. Padamnya LED ini mensimulasikan bahwa gerbang masuk ke parkir di Lantai4 telah ditutup, karena tempat parkir sudah penuh.
Gambar 12. Begitu pula ketika tombol + di Lantai3 ditekan beberapa kali hingga tempat kosong menjadi 0, seperti terlihat pada tampilan 7-segmen, maka LED di atasnya menjadi padam, yang menandakan bahwa gerbang masuk ke parkir di Lantai3 telah ditutup.
Nilai
yang ingin diketahui |
Formula
di Google Sheet |
Kapasitas maksimum di Lantai 1 |
= RIGHT(index(B1:B,arrayformula(max(row(B1:B)* (--(left(B1:B,2)="ma"))))),2) |
Kapasitas
maksimum di Lantai 2 |
= RIGHT(index(B1:B,arrayformula(max(row(B1:B)*(--(left(B1:B,2)="mb"))))),2) |
Kapasitas maksimum di Lantai 3 |
= RIGHT(index(B1:B,arrayformula(max(row(B1:B)*(--(left(B1:B,2)="mc"))))),2) |
Kapasitas
maksimum di Lantai 4 |
= RIGHT(index(B1:B,arrayformula(max(row(B1:B)*(--(left(B1:B,2)="md"))))),2) |
Tempat parkir yang terisi di
Lantai 1 |
= RIGHT(index(B1:B,arrayformula(max(row(B1:B)*(--(left(B1:B,2)="ta"))))),2) |
Tempat parkir
yang terisi di Lantai 2 |
= RIGHT(index(B1:B,arrayformula(max(row(B1:B)*(--(left(B1:B,2)="tb"))))),2) |
Tempat parkir yang terisi di
Lantai 3 |
= RIGHT(index(B1:B,arrayformula(max(row(B1:B)*(--(left(B1:B,2)="tc"))))),2) |
Tempat parkir
yang terisi di Lantai 4 |
= RIGHT(index(B1:B,arrayformula(max(row(B1:B)*(--(left(B1:B,2)="td"))))),2) |
Tempat parkir yang kosong di
Lantai 1 |
= nilai maksimum – nilai terisi |
Tempat parkir
yang kosong di Lantai 2 |
= nilai maksimum – nilai terisi |
Tempat parkir yang kosong di
Lantai 3 |
= nilai maksimum – nilai terisi |
Tempat parkir
yang kosong di Lantai 4 |
= nilai maksimum – nilai terisi |
No comments:
Post a Comment