Disusun oleh:
Fadli Asyhari
15/384930/TK/43592
Nanda Adi Setyadharma
15/381183/TK/43361
Kevin Ardesagara
15/384943/TK/43605
Disusun oleh:
Fadli Asyhari
15/384930/TK/43592
Nanda Adi Setyadharma
15/381183/TK/43361
Kevin Ardesagara
15/384943/TK/43605
ii
KATA PENGANTAR
Pertama-tama, saya ingin mengucapkan puji syukur ke hadirat Tuhan Yang Maha
Esa, yang selalu menjaga saya sepanjang hidup saya, termasuk studi saya dan terutama
dalam menyelesaikan laporan Kerja Praktik dengan lancar.
Laporan ini saya susun sebagai pertanggungjawaban dari Kerja Praktik yang telah
saya laksanakan di PT. Hartono Istana Teknologi (Polytron) pada tanggal 2 Januari– 1
Februari 2019. Kami berharap laporan ini dapat menjadi referensi yang baik dan dapat
bermanfaat bagi pembaca ke depannya.
Dalam menyelesaikan tesis ini, saya mendapat banyak bantuan dan dukungan dari
beberapa orang dari universitas dan dari Polytron. Saya sangat bersyukur bahwa orang-
orang ini telah datang dan membantu saya selama masa belajar saya. Individu-individu
ini adalah:
1. Bapak Sarjiya, S.T., M.T., Ph.D. selaku Ketua Departemen Teknik Elektro
dan Teknologi Informasi Fakultas Teknik Universitas Gadjah Mada.
2. Bapak Dr. I Wayan Mustika, S.T., M.Eng yang telah merekomendasikan
kami sehingga dapat melaksanakan kerja praktik di P.T HIT.
3. Bapak Anugerah Galang Persada, S.T., M.Eng. selaku Dosen Pembimbing
kerja praktik.
4. Orang tua yang selalu mendukung kami.
5. Bpk M. Shohib selaku pembimbing kami selama pelaksanaan kerja praktik
di PT Hartono Istana Teknologi.
6. Bapak Agung, Bapak Ricky, Bapak Erik, dan Ibu Ane selaku tim RND di
PT. HIT yang selalu memantau dan membantu kami saat pelaksanaan kerja
praktik
7. Seluruh Staff PT. HIT yang telah membantu kami.
8. Serta rekan-rekan yang membantu dan ikut serta selama pelaksanaan kerja
praktik
Seperti kata pepatah, “Quandoque bonus dormitat Homerus” yang berarti bahwa
orang yang paling bijak pun membuat kesalahan. Kritik dan saran yang sangat
iii
membangun dari pembaca masih kami harapkan dan semoga laporan kerja praktik ini
dapat memberikan manfaat bagi pembaca.
Penulis
iv
DAFTAR ISI
COVER…………………………………………………………………………………..i
HALAMAN PENGESAHAN ..........................................................................................ii
v
3.3.1 Fitur Atmel SAM D21 ................................................................................... 12
3.13 LoRa.................................................................................................................... 23
vi
4.6 Sensor PAR ........................................................................................................... 45
REFERENSI ................................................................................................................... 58
LAMPIRAN ................................................................................................................... 59
vii
DAFTAR GAMBAR
viii
DAFTAR TABEL
ix
DAFTAR SINGKATAN
A
ABP Activation by Personalization
ACK acknowledments
ADR adaptive data rate
AppEUI Application Extended Unique Identifier
AppKey Application Key
AppSKey Application Session Key
C
CFList Channel Frequency List
CPU Central Processing Unit
D
DDI Distributed Data Interface
DC Direct Current
DevEUI Device Extended Unique Identifier
F
FSK frequency shifting keying
I
IDE Integrated Development Environment
IoT Internet of Things
I/O Input dan Output
I2C Inter Integrated Circuit
L
LED Light Emiting Diode
LSB Least Significant Bit
N
NwkSKey Network Session Key
O
OTAA Over the Air Activation
P
PAR photosynthetic photon flux
PC Personal Computer
x
PPF photosynthetic photon flux
PPFD photosynthetic photon flux density
R
RTC Real Time Clock
RxDelay Receive Delay
R&D Research and Development
S
SDI-12 Serial Data Interface 1200 baud
SPI Serial Pheriperal Interface
SWD Serial Wire Debug
T
TTC Time Counters for Control
U
USB Universal Serial Bus
V
VWC Volumetric Water Content
xi
BAB I
PENDAHULUAN
1
2. Memenuhi beban SKS (Satuan Kredit Semester) yang wajib ditempuh sebagai
persyaratan akademis di Departemen Teknik Elektro dan Teknologi Informasi
FT UGM.
2. Mengenali dan memahami permasalahan-permasalahan yang terjadi dalam
industri teknologi/pengembang teknologi.
3. Meningkatkan kesiapan mental mahasiswa guna memasuki dunia pekerjaan.
2
c. Meningkatkan inovasi dalam penerapan teknologi di PT. Hartono Istana
Teknologi melalui sumbangan ide-ide dari peserta kerja praktik.
d. Mendapatkan bantuan tenaga serta kritik maupun saran dari mahasiswa
yang akan melakukan kerja praktik.
3
• BAB I (PENDAHULUAN)
Berisi tentang latar belakang kerja praktik, tujuan, manfaat, waktu dan tempat
pelaksanaan, metodologi pelaksanaan, dan sistematika penulisan.
• BAB II (PROFIL PERUSAHAAN PT. HARTONO ISTANA TEKNOLOGI)
Berisi tentang gambaran umum PT. Hartono Istana Teknologi, sejarah
berdirinya, serta pembagian tugas-tugas didalamnya, termasuk profil PT.
Hartono Istana Teknologi
• BAB III (DASAR TEORI)
Berisi tentang gambaran dan penjelasan tentang perangkat-perangkat yang
digunakan, protokol komunikasi, fitur-fitur pada alat, dan obyek sensor.
• BAB IV (ANALISIS DAN PEMBAHASAN)
Berisi pembahasan mengenai listing program yang telah dibuat, analisis dari
metode yang digunakan, serta hasil screenshot aplikasi maupun produk yang
telah dibuat.
• BAB V (PENUTUP)
Berisi tentang hasil yang didapatkan dan kesimpulan terkait kerja praktik pada
perusahaan PT. Hartono Istana Teknologi.
4
BAB II
PROFIL PERUSAHAAN
5
2.2 Pencapaian Polytron
Pencapaian-pencapaian yang telah diraih oleh PT Polytron hingga tahun 2018
adalah:
Tahun Pencapaian
1978 Commercial Production Black & White TV 20”
1979 Commercial Production Color TV 22” & 26”
1980 Menjalin kerjasama dengan Perusahaan "Salora" Finlandia dibidang Produk
TV
1990 Market Share Audio Polytron menjadi No.1 di Indonesia (50%)
1992 Export perdana produk color TV ke beberapa negara Eropa
2000 Produksi Home Theatre Dolby Prologic / Dolby Digital
Produksi VCD/ CD/ MP3 Player
Produksi Produk Audio "Minimax"
2001 Produksi Water Jet Pump
Produksi DVD Player
Produksi Color TV dengan teknologi "Zeppelin Speaker" (Patented)
2007 Sertifikasi ISO 14001 dan OHSAS 18001
Produksi color TV "Ultra Slim"
Produksi Show Case
Produksi Water Dispenser
2010 Produksi Nano Hifi (4 Patent dari Polytron, di USA/ Indonesia
2011 Produksi LEDTV
Produksi New Refrigerator dengan "Glass Door"
2012 Produksi 3D LEDTV
Produksi Android Internet LEDTV
Produksi LCD/LED TV with Tower Speaker
2013 Meluncurkan line produksi smartphone Meluncurkan smartphone Prime 5
sebagai flagship product dari Polytron Smartphone
2014 Meluncurkan mesin cuci otomatis top loading Zeromatic Maya dan
Zaromatic Ruby
Meluncurkan dispenser bottom gallon Hydra PWC 777
6
2015 Meluncurkan smartphone Zap 5 yang merupakan smartphone 4G LTE
pertama yang memenuhi TKDN
2016 Meluncurkan perangkat lunak FIRA OS
Meluncurkan air conditioner Neuva Ice
2017 Output produksi mencapai 10.000.000 unit / tahun
2018 Meluncurkan smartphone Prime 7 Pro
Meluncurkan Polytron Play sebagai Android Box yang dapat memberikan
suguhan entertainment di rumah
PMA dan Polytron Play mendapatkan pengakuan dan penghargaan Good
Design Indonesia 2018 dari Kementrian Perdagangan melalui Direktorak
Jendral Pengembangan Ekspor Nasional (PEN)
Pertama dan satu-satunya di Indonesia, yaitu TV LED besutan Polytron
bergaransi lima tahun mulai dari ukuran 20 inci hingga 50 inci
Meluncurkan speaker dengan teknologi terbaru yaitu Multiroom Speaker
dengan nama PMS R1 dan PMS R2
Meluncurkan mesin cuci Zeromatic Belleza dengan inovasi terbaru pada
garansi yang dapat mencakup secara menyeluruh hingga lima tahun
2.3 Visi
Menjadi pelopor inovasi teknologi dan hiburan dalam keluarga.
2.4 Misi
Meningkatkan pengalaman konsumen melalui teknologi, servis, dan produk
1. Pabrik pertama berlokasi di Desa Krapyak, Kudus dengan luas 109.000 m2.
Pabrik ini khusus memproduksi TV, Handphone, AC, Audio, Dispenser, dan
DVD Player.
7
Gambar 2.1 Lokasi Polytron di Desa Krapyak, Kudus
8
3. Pabrik ketiga berlokasi di Sayung, Demak dengan luas 450.000 m2. Di pabrik ini
memproduksi kulkas dan mesin cuci.
Gambar 2.3 Lokasi Produksi Kulkas dan Mesin Cuci Polytron di Sayung, Demak
9
BAB III
DASAR TEORI
10
3.3 Atmel SAM D21 (ATSAM D21)
Atmel® | SMART™ SAM D21 merupakan microcontroller seri hemat daya yang
menggunakan sistem 32-bit dengan prosesor ARM Cortex M0. Terdapat 32-pin hingga
64-pin dengan Flash hingga 256KB dan 32KB dari SRAM. Frekuensi maksimal SAM
D21 kisaran 48MHz dan mencapai 2,46 CoreMark/MHz. Sistem ini dirancang untuk
migrasi yang sederhana dan intuitif dengan modul periferal yang identik, kode yang
kompatibel dengan heksa, peta alamat linier identik dan jalur migrasi yang kompatibel
pin antara semua perangkat dalam seri produk. Semua perangkat termasuk periferal
cerdas dan fleksibel, Atmel Event System digunakan untuk pensinyalan antar periferal,
dan dukungan untuk tombol sentuh kapasitif, antarmuka pengguna slider dan wheel.
Perangkat Atmel SAM D21 memiliki beberapa fitur seperti: In-system
programmable Flash, 12 channel DMA (Direct Memory Access) controller, 12 channel
Event System, Memungkinkan untuk program interrupt, dapat mencapai 52 program I/O
pin, 32bit RTC (real-time clock) beserta kalendar, up to five 16-bit Timer/Counters (TC)
dan terdapat 24-bit Timer/Counters for Control (TCC), dimana setiap TC dapat diatur
utnuk membuat gelombang frekuensi, waktu eksekusi program yang akurat atau
penerimaan input dengan pengukuran waktu dan frekuensi sinyal digital TC dapat
beroperasi dalam mode 8- atau 16-bit, TC yang dipilih dapat di-cascade ke form 32-bit
TC, dan tiga penghitung waktu/counters telah memperluas fungsi yang dioptimalkan
untuk motor, penerangan dan aplikasi kontrol lainnya. Seri ini menyediakan satu
antarmuka host dan perangkat USB 2.0 berkecepatan penuh; hingga enam Modul
Komunikasi Serial (SERCOM) yang masing-masing dapat dikonfigurasi untuk bertindak
sebagai USART, UART, SPI, I2C hingga 3,4MHz, SMBus, PMBus, dan slave LIN;
antarmuka dua saluran I2S; hingga dua puluh saluran 350ksps 12-bit ADC dengan
penguatan terprogram dan penipisan opsional dan penipisan mendukung hingga resolusi
16-bit, satu DAC 350-bit 10-bit, dua pembanding analog dengan mode jendela,
Pengontrol Sentuh periferal mendukung hingga 256 tombol, slider, roda, dan sensor
jarak; Timer Watchdog yang dapat diprogram, detektor brown-out, dan power-on reset
serta dua-pin Serial Wire Debug (SWD) program dan antarmuka debug.
Semua perangkat memiliki osilator eksternal dan internal yang akurat dan
berdaya rendah. Semua osilator dapat digunakan sebagai sumber untuk jam sistem.
Domain jam yang berbeda dapat dikonfigurasikan secara independen untuk dijalankan
pada frekuensi yang berbeda, memungkinkan penghematan daya dengan menjalankan
11
setiap perangkat pada frekuensi clock optimalnya, dan dengan demikian
mempertahankan frekuensi CPU yang tinggi sambil mengurangi konsumsi daya.
Perangkat SAM D21 memiliki dua sleep mode yang dapat dipilih perangkat
lunak, idle dan standby. Dalam mode idle, CPU dihentikan sementara semua fungsi lain
dapat tetap berjalan. Dalam keadaan standby, semua jam dan fungsi dihentikan, dan yang
dipilih akan terus berjalan. Perangkat ini mendukung SleepWalking. Fitur ini
memungkinkan perangkat untuk bangun dari tidur berdasarkan kondisi yang telah
ditetapkan, dan dengan demikian memungkinkan CPU untuk bangun hanya bila
diperlukan, misalnya ketika awalan dilewati atau hasilnya telah selesai. Event System
mendukung peristiwa sinkron dan asinkron, yang memungkinkan periferal untuk
menerima, bereaksi, dan mengirim peristiwa bahkan dalam mode Standby.
Memori program Flash dapat diprogram ulang dalam sistem melalui antarmuka
SWD. Antarmuka yang sama dapat digunakan untuk debug kode aplikasi non-intrusive
on-chip debug. Boot loader yang berjalan di perangkat dapat menggunakan antarmuka
komunikasi apa pun untuk mengunduh dan memutakhirkan program aplikasi di memori
Flash.
Perangkat Atmel SAM D21 didukung dengan rangkaian lengkap program dan
alat pengembangan sistem, termasuk kompiler C, macro assamblers, debugger/simulator
program, programmer dan kit evaluasi [1].
No Features Specification
ARM Cortex ARM Cortex-M0+ CPU running at up to 48MHz
1. Processor • Single-cycle hardware multiplier
• Micro Trace Buffer (MTB)
32/64/128/256KB in-system self-programmable Flash
2. Memories
4/8/16/32KB SRAM Memory
Power-on reset (POR) and brown-out detection (BOD)
Internal and external clock options with 48MHz Digital Frequency
Locked Loop (DFLL 48M) and 48MHz to 96MHz Fractional
3. System Digital Phase Locked Loop (FDPLL96M)
External Interrupt Controller (EIC)
16 external interrupts
One non-maskable interrupt
12
Two-pin Serial Wire Debug (SWD) programming, test and
debugging interface
Idle and standby sleep mode
4. Low Power
SleepWalking peripherals
12-channel Direct Memory Access Controller (DMAC)
12-channel Event System
Up to five 16-bit Timer/Counters (TC)
24-bit Timer/Counters for Control (TCC) with extended functions
32-bit Real Time Counter (RTC ) with clock/calendar function
Watchdog Timer (WDT)
CRC-32 generator
5. Peripherals One full-speed (12Mbps) Universal Serial Bus (USB) 2.0 interface
Up to six Serial Communication Interfaces (SERCOM)
One two-channel Inter-IC Sound (I2S) interface
One 12-bit, 350ksps Analog-to-Digital Converter (A DC) with up to
20 channels
10-bit, 350ksps Digital-to-Analog Converter (DAC)
Two Analog Comparators (AC) with window compare function
Peripheral Touch Controller (PTC)
6. I/O Up to 52 programmable I/O pins
7. Operating- 1.62V – 3.63V
Voltage
13
RTC mempertahankan jamnya dengan menghitung siklus osilator - biasanya
rangkaian osilator kristal 32.768kHz eksternal, osilator berbasis kapasitor internal, atau
bahkan kristal kuarsa tertanam. Beberapa dapat mendeteksi transisi dan menghitung
periodisitas input yang mungkin terhubung.
RTC membutuhkan daya yang berkelanjutan dan harus memiliki konsumsi daya
yang sangat rendah. Sebagian besar RTC menggunakan pasokan sirkuit digital saat
perangkat on dan aktif, tetapi beralih ke sumber daya yang terhubung terus-menerus saat
sirkuit dimatikan. Sumber daya ini dapat berupa baterai khusus, superkapasitor yang
terisi daya, atau catu daya terpisah dari listrik.
Banyak RTC dapat mendeteksi perubahan ini dan masuk ke kondisi daya sangat
rendah di mana mereka mematikan semua sirkuit kecuali yang penting untuk menjaga
jam agar menghemat baterai. RTC juga dapat menyertakan fungsi alarm - atur waktu
ketika tercapai memicu RTC untuk mendorong output yang membangunkan prosesor [2].
14
umumnya lebih mudah kekeringan daripada tanah-tanah bertekstur lempung atau liat.
Kondisi kelebihan air ataupun kekurangan air dapat mengganggu pertumbuhan tanaman.
Gaya gravitasi tidak berpengaruh terhadap penggerakan horizontal [4].
Banyaknya air yang tersedia bagi tanaman dicari dengan jalan penentuan
kandungan air pada tanaman lapang dikurangi dengan persentase keadaan tanah padaa
titik layu permanen. Dalam hal ini nilai-nilainya sangat ditentukan terutama oleh tekstur
tanah. Tekstur tanah yang lebih tinggi mempunyai tekstur yang halus, sebaliknya tekstur
yang rendah mempunyai tekstur yang kasar nilainya akan lebih rendah lagi dibandingkan
dengan hal yang tadi. Kapasitas kandungan air tanah maksimum adalah jumlah air
maksimal yang dapat ditampung oleh tanah setelah hujan turun dengan sangat lebat atau
besar. Semua pori-pori tanah baik makro maupun mikro, dalam keadaan terisi oleh angin
sehingga tanah menjadi jenuh dengan air [5].
Kekurangan air bagi tanaman menyebabkan proses aktivitas dan fisiologis
tanaman terhambat bahkan tidak akan berjalan, tanaman yang kekurangan air akan
menyebabkan tanaman layu dan akhirnya menyebabkan kematian. Jaringan-jaringan
tanaman tidak lagi berfungsi baik. Sedangkan kelebihan air pada tanaman akan
meyebabkan permukaan tanah tempat tanaman hidup akan lembab karena kelebihan air,
keadaan lembab tersebut memunculkan mikro organisme jamur yang mengakibatkan
tumbuhnya penyakit bagi tanaman [6].
3.7 Suhu
Tanah yang didiami tanaman memiliki unsur suhu yang mempengaruhi
perkembangan tanaman. Suhu memengaruhi pertumbuhan dan perkembangan tumbuhan.
Karena suhu berpengaruh terhadap laju metabolisme, fotosintesis, respirasi, dan
transpirasi tumbuhan. Suhu tinggi merusakkan enzim sehingga metabolisme tidak
berjalan baik. Suhu rendah pun menyebabkan enzim tidak aktif dan metabolisme terhenti.
Oleh karena itu, tumbuhan memiliki suhu optimum antara 10 – 38 °C. Adapun tumbuhan
tidak akan bertahan pada suhu di bawah 0 °C dan di atas 40 °C [7].
Suhu tanah yang rendah dapat mempengaruhi penyerapan air dari pertumbuhan
tumbuhan. Jika suhu tanah rendah, kecil kemungkinan terjadi transpirasi, dan dapat
mengakibatkan tumbuhan mengalami dehidrasi atau kekurangan air. Pengaruh dari suhu
tanah pada proses penyerapan bisa dilihat dari hasil perubahan viskositas air, kemampuan
menyerap dari membran sel, dan aktivitas fisiologi dari sel-sel akar itu sendiri. Dengan
15
kata lain pada keadaan udara yang panas maka evaporasi air dari permukaan tanah akan
semakin besar [8].
Untuk mengatur suhu tanah bukanlah kemampuan manusia secara pribadi, tapi
suhu tanah tersebut dapat di kontrol dengan dua cara yaitu dengan menutupi mulsa
organik pada tanah, dan pengaturan tanaman residu yang keduanya dapat mempengaruhi
implikasi biologi, juga bisa dengan mulsa plastik yang biasanya diberikan untuk
perkebunan dan terakhir dapat dengan cara mengatur penguapan tanah [9]. Dari data suhu
pada awal pertumbuhan, dapat diramalkan waktu kematangan tanaman tersebut, suhu
tanah lebih memberikan jawaban pada perubahan setempat dari pada isolasi, topografi
dan sebagainya. Suhu tanah terutama suhu ekstrim, akan mempengaruhi perkecambahan
biji, aktivitas akar kecepatan, dan umur tanaman, serta terjadinya keganasan penyakit
tanaman [10].
3.8.1 Lumens
Tumbuhan dan manusia mempersepsikan cahaya dengan cara yang berbeda.
Manusia dan hewan pada umunya menggunakan photopic vision dalam keadaan yang
cukup cahaya untuk mempersepsikan sesuatu. Lumen merupakan satuan yang digunakan
untuk penggukuran berdasarkan model sensitifitas mata manusia pada keadaan cukup
cahaya. Model tersebut disebut photopic response curve seperti yang bisa dilihat di
gambar 3. 1 dibawah
16
Gambar 3.1 Kurva respons cahaya fotosintesis
Pada grafik diatas diperlihatkan bahwa mata manusia lebih sensitif terhadap
cahaya hijau dibandingkan dengan biru maupun merah. Hal tersebut yang membuat
lumen kurang efektif apabila digunkan dalam mengukur intensitas cahaya pada sistem
pencahayaan hortikultura. Karena pada tanaman juga menggunakan cahaya merah dan
biru untuk melakukan fotosintesis [11].
3.8.2 PAR
PAR atau biasa disebut photosynthetic active radiation. PAR memiliki Panjang
gelombang cahaya terlihat antara 400 hingga 700 nanometer(nm) seperti yang terlihat di
gambar 3.1. PAR banyak digunakan untuk keperluan sistem pencahayaan hortikultura.
PAR bukan merupakan pengukuran seperti meter atau kilo tetapi lebih bisa diartikan
sebagai jenis cahaya yang dibutuhkan untuk mendukung fotosintesis [11]. Quantum
sensor merupakan instrument yang bekerja menggunakan optical filter untuk mengukur
PAR.
3.8.3 PPF
Photosynthetic Photon Flux (PPF) mengukur jumlah total PAR yang diproduksi
oleh sistem pencahayaan tiap detik. Perhitungan ini diambil menggunakan intrumen
khusus yaitu integrating sphere yang pada dasarnya menangkap dan mengukur semua
foton yang dipancarkan oleh sistem pencahayaan. Satuan yang digunakan untuk PPF
adalah micromoles per second(µmol/s). Meskipun penting, banyak perusahaan yang
tidak menggunakan PPF karena PPF tidak memberikan data seberapa banyak cahaya
yang masuk ke tanaman [11].
17
3.8.4 PPFD
Photosynthetic Photon Flux Density (PPFD) mengukur berapa jumlah PAR yang
masuk ke tanaman atau lebih tepatnya jumlah foton aktif fotosintesis yang jatuh pada
permukaan tertentu setiap detik. PPFD mengukur pada suatu tempat tertentu dengan
satuan micromoles per square meter per second(µmol/m2/s). Pada pengukuran sistem
pencahayaan hortikultura umumnya akan lebih cerah di tengah dengan tingkat kecerahan
yang akan semakin turun ketika mendekati tepi area yang diamati. Untuk mendapatkan
nilai PPFD aktual di suatu area yang ditentukan, hal-hal yang perlu diperhatikan adalah:
jarak pengukuran dari sumber cahaya (vertikal dan horizontal), jumlah pengukuran yang
meliputi rata-rata, dan rasio [11].
18
dalam unit-unit teknik. Sebagai contoh, sensor tekanan SDI-12 dapat mengambil
serangkaian pengukuran tekanan, rata-rata, dan kemudian output tekanan dalam psi, inci
merkuri, batang, milibar, atau torr. Prosesor mikro sensor membuat perhitungan,
mengubah pembacaan sensor menjadi unit yang sesuai, dan menggunakan protokol SDI-
12 untuk mentransfer data ke perekam.
3.10 Sensor 5 TM
Sensor ECH2O 5TM adalah alat akurat berbiaya rendah untuk memantau kadar
air volumetrik dan suhu di tanah. Semua pengukuran dilakukan secara independen.
Seperti semua sensor ECH2O, 5TM menentukan kadar air volumetrik (VWC) dengan
mengukur konstanta dielektrik media menggunakan teknologi domain kapasitansi /
frekuensi. Sensor ini menggunakan frekuensi 70-MHz, yang meminimalkan efek tekstur
dan salinitas, membuat 5TM akurat di sebagian besar tanah. 5TM mengukur suhu
menggunakan termistor onboard.
19
APLIKASI
• Pengukuran kadar air volumetrik (VWC)
• Keseimbangan air tanah
• Manajemen irigasi
• Pengukuran suhu tanah
• Proses pemodelan yang dipengaruhi oleh suhu
KEUNTUNGAN
• Termistor yang kuat untuk pengukuran suhu yang akurat
• Enkapsulasi epoksi yang kuat menolak lingkungan korosif
• Antarmuka sensor tiga kabel: daya, ground, dan data
• Sensor digital mengkomunikasikan beberapa pengukuran melalui antarmuka serial
• Persyaratan tegangan input rendah
• Desain berdaya rendah mendukung pencatat data yang dioperasikan dengan baterai
• Mendukung protokol komunikasi serial SDI-12 atau DDI
• Desain modern dioptimalkan untuk penginderaan murah
20
Range −40 to +60 °C
Resolusi 1 °C
Akurasi ±1 °C
21
Gambar 3.3 Full spectrum quantum sensor dan original quantum sensor
Gambar 3.4 Spektrum full spectrum quantum sensor dan original quantum sensor
3.12 ADS1115
ADS1115 berfungsi untuk mengkonversikan sinyal analog ke sinyal digital
dengan resolusi tinggi dalam rangkaian berbasis mikroprosesor. Chip ini memiliki
tingkat presisi 16-bit pada 860 sampel / detik dengan komukasi I2C. Inputnya dapat
22
dikonfigurasi sebagai 4 saluran input tunggal, atau dua saluran diferensial. Chip ini dapat
berjalan dengan sinyal daya dan logika antara 2v hingga 5v, sehingga sesuai dengan
semua prosesor 3.3v dan 5v. Selain itu, juga terdapat penguat dengan besar penguatan
yang dapat diprogram hingga x16 untuk sinyal yang memerlukan penguatan.
3.13 LoRa
LoRa adalah physical layer atau modulasi nirkabel yang digunakan untuk membuat
jaringan komunikasi jarak jauh. Banyak sistem nirkabel lama menggunakan frequency
shifting keying (FSK) sebagai Teknik modulasinya karena merupakan modulasi yang sangat
efisien untuk mencapai daya rendah. LoRa didasarkan pada modulasi chirp spread
spectrum, yang mempertahankan karakteristik daya rendah yang sama dengan modulasi
FSK tetapi secara signifikan meningkatkan jangkauan komunikasi [12].
3.14 LoRaWAN
LoraWAN adalah protokol komunikasi tanpa kabel yang memiliki jangkauan
area luas dan konsumsi daya yang kecil untuk membuat jaringan Internet of Things (IoT).
Perangkat IoT, node mengirimkan paket data berukuran kecil ke sejumlah gateway yang
berada pada jangkauan beberapa kilometer dari sebuah node melalui protokol nirkabel
LoraWAN. Gateway kemudian menggunakan komunikasi yang lebih luas yaitu koneksi
internet kabel ke server jaringan yang memvalidasi paket dan lalu diteruskan ke applikasi
server untuk ditampilkan di aplikasi payload [12].
23
Gambar 3.6 Arsitektur lorawan
3.14.1 Topologi
LoRaWAN dibangun menggunakan topologi star to star yang memungkinkan
device dapat bekerja menggunakan baterai dalam jangka waktu yang lama dibandingkan
topologi mesh network. Pada arsitektur LoRaWAN, device tidak ter-asosiasi dengan
gateway tertentu. Data dari device akan di terima oleh beberapa gateway dalam
jangkauan network loRa. Tiap gateway akan meneruskan paket yang diterima dari device
ke network server yang ada di cloud melalui backhaul seperti ethernet, wifi, satelit
ataupun seluler. Pemrosesan dilakukan di tingkat network server yang mengatur jaringan,
memfilter paket yang di terima, security check, penjadwalan acknowledments (ACK),
dan mengatur adaptive data rate (ADR). Ketika device bergerak tidak di perlukan
handover antar gateway, ini merupakan fitur utama untuk menjamin aplikasi LoRaWAN
seperti asset tracking yang memang menjadi salah satu target utama vertikal IoT
LoRaWAN.
24
ke device. Sehingga device LoRaWAN di golongkan menjadi tiga kelas yaitu Class A,
Class B dan Class C [13].
Class A merupakan perangkat komunikasi dua arah. Tipe perangkat ini
memungkinkan komunikasi dua arah dimana tiap perangkat mengirimkan data (Uplink
message) akan di ikuti dua Downlink receive window yang pendek. Slot transmisi di
jadwalkan oleh device itu sendiri dengan sedikit variasi berdasar random time basis.
Device class A memiliki konsumsi daya paling rendah dan cocok untuk penerapan yang
hanya membutuhkan komunikasi downlink dari server setelah node mengirimkan
komunikasi uplink. Skema komunikasi LoRaWAN device class A di tunjukkan pada
Gambar 3.7.
25
Gambar 3.8 Skema komunikasi loRawan class B
26
memperoleh kunci sesi NwkSKey dan AppSKey. Perangkat dapat menyimpan kunci-
kunci itu dan terus menggunakannya untuk berkomunikasi. Jika hilang atau jaringan
memilih untuk kedaluwarsa, perangkat harus bergabung kembali untuk menghasilkan
kunci baru.
Di ABP (Aktivasi Menurut Personalisasi), perangkat tidak memerlukan DevEUI,
AppEUI, atau AppKey. Alih-alih, tombol sesi NwkSKey dan AppSKey diprogram
sebelumnya ke dalam perangkat dan perangkat ini dipra-registrasi di jaringan. Ketika
perangkat ingin berkomunikasi, ia melakukannya menggunakan kunci sesi tanpa harus
menggunakan prosedur bergabung terlebih dahulu.
27
BAB IV
ANALISIS
28
const byte seconds = 58; // Configurable seconds from 0 to 59
const byte minutes = 59; // Configurable Minutes from 0 to 59
const byte hours = 23; // Configurable hours from 0 to 23 ( 00 )
Pada bagian awal library yang digunakan adalah RTCZero yang terdapat pada
web Arduino IDE . library RTCZero berguna untuk menggunakan fungsi-fungsi RTC
yang terdapat pada Arduino Zero, MKRZero, dan M0. Inisialisasi pertama pada modul
ini adalah mendefinisikan RTCZero sebagai rtc, hal ini bertujuan untuk memudahkan
dalam melakukan coding dalam modul. Dan Insialisasi selanjutnya adalah
mengonfigurasikan waktu dari detik untuk skala 0 sampai 59, menit untuk skala 0 sampai
59, jam untuk skala 0 sampai 23, dan untuk kalender dimulai dari hari untuk skala 1
sampai 30 atau 31 kecuali untuk bulan ke-2 hanya 28 atau 29 (perhitungan waktu
kabisat), dan terakhir mengonfigurasikan tahun dua digit terakhir.
void setup()
{
SerialUSB.begin(115200); // Initialize serial communications with the PC
while (!SerialUSB); //Do nothing if no serial port is opened
rtc.begin(); //Initialize Real Time Clock
rtc.setHours(hours); //Setting Hours based on config hours above
rtc.setMinutes(minutes); // Setting Minutes based on config minutes
above
rtc.setSeconds(seconds); // Setting Seconds based on config seconds
above
rtc.setDay(day); // Setting day based on config day above
rtc.setMonth(month); // Setting month based on config month above
rtc.setYear(year); // Setting year based on config above
rtc.setAlarmSeconds(40); // Setting alarm when seconds match
rtc.enableAlarm(rtc.MATCH_SS); // Init alarm for Seconds match
rtc.attachInterrupt(alarmMatch); // Interrupt when alarm is active
}
29
void alarmMatch()
{
// Show Alarm --on-- when alarm is active
SerialUSB.println("Alarm -- on ---");
}
Pada bagian setup( ) ini fungsi ini akan dilakukan sekali saja hal ini sama dengan
fungsi alarmMatch( ). Pada fungsi setup( ) berisi pengaturan awal yang dibutuhkan
program. Pertama dengan menentukan baud rate serial monitor sebesar 115200,
kemudian dilanjutkan dengan instruksi while( ), instruksi ini digunakan untuk mengulang
suatu statement selama kondisi syarat yang diberikan bernilai benar. Kondisi yang
digunakan dalam instruksi ini adalah while(!SerialUSB) yaitu ketika serial tidak
dijalankan tidak akan terjadi apapun dan ketika serial berjalan instruksi berikutnya
dijalankan. Dan instruksi selanjutnya adalah rtc.begin( ), instruksi ini perlu dipanggil
sebelum menggunakan isntruksi RTC lainnya yang terdapat pada library dapat juga
diartikan untuk mengaktifkan fungsi RTC pada board. Kemudian menggunakan instruksi
untuk menentukan waktu dan kalender berdasarkan inisialisasi sebelumnya, untuk fungsi
waktu instruksi pertama dengan menentukan jam menggunakan instruksi
rtc.setHours(hours), kemudian menentukan menit menggunakan
rtc.setMinutes(minutes), dan menentukan detik menggunakan rtc.setSeconds(seconds).
Sedangkan fungsi kalender untuk menentukan hari menggunakan instruksi
rtc.setDay(day), kemudian menentukan bulan menggunakan instruksi
rtc.setMonth(month), dan menentukan tahun menggunakan instruksi rtc.setYear(year).
Setelah instruksi untuk menentukan waktu dan tanggal selanjutnya merupakan
instruksi alarm, instruksi alarm yang pertama adalah rtc.setAlarmSeconds(40), instruksi
ini menentukan waktu alarm pada detik ke 40. Kemudian
rtc.enableAlarm(rtc.MATCH_SS) merupakan instruksi untuk mengaktifkan alarm disaat
kondisi detik sesuai atau cocok dengan waktu alarm yang sudah ditentukan sebelumnya
yaitu 40. Dan terakhir pada fungsi setup( ) adalah instruksi
rtc.attachInterrupt(alarmMatch) yang merupakan instruksi interrupt disaat alarm aktif.
Untuk fungsi yang kedua merupakan fungsi interrupt dimana fungsi ini bekerja disaat
ada interrupt saat program berjalan., didalam fungsi ini terdapat instruksi
30
SerialUSB.print(“Alarm –on—“) untuk menampilkan data dalam bentuk karakter disaat
fungsi aktif.
void loop()
{
// Show Date on serial monitor ( DD-MM-YY )
SerialUSB. print("Date ( ");
print2digits(rtc.getDay());
SerialUSB.print("-");
print2digits(rtc.getMonth());
SerialUSB.print("-");
print2digits(rtc.getYear());
SerialUSB.print(" ) ");
Pada bagian loop( ) fungsi ini akan melakukan semua instruksi yang berada
didalamnya secara berulang. Instruksi yang terdapat dalam fungsi loop( ) adalah
insteruksi SerialUSB.print( ) yang bertujuan untuk menampilkan data pada serial berupa
karakter yang telah ditentukan pada baris yang sama, dan instruksi SerialUSB.println( )
31
bertujuan untuk menampilkan data berupa karakter pada baris baru. Instruksi
print2digits( ) yang merupakan instruksi call untuk memanggil dan menjalankan fungsi
print2digits( ). Akhir dari fungsi loop( ) diberikan delay sebesar 1000ms.
Pada fungsi print2digits( ) digunakan untuk fungsi call yang digunakan
sebelumnya pada fungsi loop( ). Di dalam fungsi ini terdapat instruksi if yang digunakan
untuk menjalankan suatu statement sekali saat kondisi terpenuhi adapun else digunakan
saat kondisi tidak terpenuhi. Di dalam instruksi if terdapat instruksi SerialUSB.print( )
yang bertujuan untuk menampilkan data pada serial berupa karakter yang telah
ditentukan. Hasil dari kegiatan kerja praktik pada kegiatan ini dapat dilihat pada gambar
4.1
Dari data diatas dapat dibuktikan bahwa RTC bekerja pada board Arduino zero,
data ini diambil dari serial monitor dengan baud rate 115200 dengan script program yang
sama dengan yang diatas sebelumnya. Hasil dari program ini dijalankan dengan
menggunakan Board Arduino M0 versi Robotdyn SAMD21M0 dan sudah diujikan
dengan board custom Arduino Zero namun belum dengan Arduino MKRZero karena
perangkat tidak tersedia. Dari hasil tersebut dapat diperhatikan bahwa waktu yang
digunakan adalah 24 jam dimana saat waktu menunjukan 23:59:59 dan ketika waktu
bertambah akan berulang menjadi 00:00:00 dengan pertambahan tanggal pada bagian
kalender.
32
Gambar 4.2 Gambar Hasil Simulasi Alarm
Di dalam library RTC terdapat fitur alarm, dari hasil tersebut merupaka hasil
dari simulasi alarm dimana saat waktu menunjukan pada detik ke-40, alarm akan
bekerja dengan memberikan interrupt berupa penampilan karakter pada serial dengan
teks Alarm – on --, pun begitu pada menit selanjutnya detik ke-40, alarm tetap akan
bekerja dan untuk seterusnya. Hasil ini diambil sama dengan hasil simulasi RTC yaitu
menggunakan Arduino M0 versi Robotdyn SAMD21M0 dan sudah melakukan
pengujian dengan custom Arduino zero.
#include <Adafruit_SleepyDog.h>
void setup() {
SerialUSB.begin(115200); // Initialize serial communications with the
PC
while(!SerialUSB); // wait for Arduino Serial Monitor (native USB
boards)
SerialUSB.println("______-----____ Demo Watchdog Timer ____------
_____");
SerialUSB.println();
countdown();
}
33
void countdown(){
Watchdog.enable(8000); // configure wdt is active for next 8s
SerialUSB.println("Counting to 10 before reset");
for(int i = 1; i <= 8; ++i) { // counting from 1 to 8sec
SerialUSB.print("Counting"); SerialUSB.println(i, DEC);
delay(1000);
}
SerialUSB.print("Reset begin");
SerialUSB.println();
}
void loop() {
// We'll never actually get to the loop because the WDT reset in 8s
SerialUSB.println("You shouldn't see this message.");
delay(1000);
}
34
integer 8 yang bersifat numerik. Kemudian kondisi yang harus dipenuhi hingga
perulangan berakhir adalah selama i kurang dari sama dengan 8 maka perulangan akan
terus berjalan. Dan tiap perulangan nilai i akan terus bertambah ini dikarenakan instruksi
ini menggunakan increment, nilai akan terus bertambah hingga kondisi perulangan
terpenuhi. Diakhir program terdapat instruksi SerialUSB.print ( ) untuk menampilkan
karakter yang telah ditentukan dan instruksi delay( ) untuk memberikan jeda waktu antar
instruksi. Fungsi ini berlangsung selama delapan detik ini dikarenakan WDT aktif selama
delapan detik hingga reset bekerja.
Fungsi yang terakhir adalah fungsi loop(). Pada fungsi ini terdapat instruksi
SerialUSB.print( ) untuk menampilkan karakter yang telah ditentukan. Program ini jika
dijalankan tidak sampai ke fungsi loop hal ini dikarenakan reset yang terjadi saat fungsi
countdown( ) selesai. {ada gambar 4.3 merupakan hasil dari serial monitor dari program
WDT diatas
Hasil data yang diambil merupakan hasil dari Arduino M0 dengan versi Robotdyn
M0, program ini juga bekerja untuk Arduino Zero dengan hasil yang sama, untuk
Arduino MKRZero belum diujikan, hal ini dikarenakan perangkat belum tersedia. Dari
hasil data simulasi WDT tersebut dapat dillihat saat counting ke 8 reset berjalan dan serial
akan offline dikarenakan board mengalami resetting. Saat perangkat selesai melakukan
resetting ditandai dengan led board yang berhenti berkedip saat serial monitor dibuka
kembali maka data yang dihasilkan akan sama dengan gambar diatas hal ini
membuktikan tidak ada perubahan selama perangkat mengalami reset sesuai dengan
35
tujuan dari WDT yang memonitoring perangkat jika mengalami error pada program
dengan melakukan reset secara berkala dengan waktu yang telah ditentukan. WDT ini
sendiri dapat dikombinasikan dengan RTC yang akan dibahas pada kegiatan berikutnya.
#include <RTCZero.h>
#include <ArduinoLowPower.h>
#include <Adafruit_SleepyDog.h>
#define LED LED_BUILTIN
RTCZero rtc;
//set RTC (Real Time Clock)
const byte Seconds = 0;
const byte Minutes = 0;
const byte Hours = 0;
void setup(){
pinMode(LED, OUTPUT);
pinMode(pin, INPUT_PULLUP);
digitalWrite(LED, HIGH);
rtc.begin();
rtc.setAlarmSeconds(40);
rtc.enableAlarm(RTCZero::MATCH_SS);
rtc.attachInterrupt(RTC_ISR);
36
delay(20000);
digitalWrite(LED, LOW);
Watchdog.disable();
}
Dilanjutkan dengan fungsi setup( ), pada fungsi ini diawalin dengan isntruksi
pinMode() yang digunakan sebagai inisialisasi bahwa LED merupakan output dan pin
merupakan input. instruksi digitalWrite(LED, HIGH) dengan mengubah output pada
LED menjadi high, dilanjutkan dengan rtc.begin( ), instruksi ini diperlukan sebelum
menggunakan instruksi lain yang terdapat pada library RTCZero. Untuk selanjutnya
merupakan instruksi RTC, dimana menentukan alarm tepat pada detik ke 40, dan
inisialisasi RTC_ISR sebagai interrupt saat alarm bekerja. Dilanjutkan dengan instruksi
digitalWrite( ) untuk mengubah output LED menjadi low, diakhir fungsi setup()
merupakan instruksi Watchdog.disable( ), instruksi ini di perlukan sebagai pengaman
apabila saat terjadi perulangan WDT tidak aktif terus-menerus. Pada fungsi ini program
akan tetap standby selama 20detik dengan indikator LED menyala selama 20 detik dan
setelah mati maka akan memasuki fungsi loop ( ).
Pada fungsi RTC_ISR merupakan sebuah fungsi yang digunakan untuk interrupt
saat alarm aktif, saat fungsi ini bekerja akan ditandai dengan LED yang berkedip. Pada
fungsi interrupt( ) digunakan sebagai fungsi external interrupt yang akan digunakan pada
fungsi loop( ), saat fungsi ini bekerja akan ditandai dengan berkedipnya LED.
void dosomething(){
if( count == 3){
Watchdog.enable(100);
37
digitalWrite(LED, HIGH);
delay(4000);
Watchdog.reset();
}
else{
for (int x = 0; x <= 10; x++){
//SerialUSB.println( x );
digitalWrite(LED, HIGH);
delay(500);
digitalWrite(LED, LOW);
delay(500);
}
}
}
Pada fungsi ini digunakan untuk pengujian apakah program berjalan dengan baik
disaat program mengalami interrupt disaat sedang dalam sleep mode. Fungsi ini
menggunakan statement if( count == 3) dengan syarat dimana count yang merupakan
sebuah angka sama dengan 3 maka, WDT akan aktif dan langsung melakukan reset
dikarenakan delay yang kecil, dan jika syarat tidak terpenuhi yaitu count tidak sama
dengan 3 maka LED akan berkedip selama 10kali untuk tiap detiknya.
void loop(){
LowPower.attachInterruptWakeup(pin, interrupt, FALLING);
USB->DEVICE.CTRLA.reg &= ~USB_CTRLA_ENABLE;
__WFI();
USB->DEVICE.CTRLA.reg |= USB_CTRLA_ENABLE;
dosomething();
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
detachInterrupt(pin);
count = count +1;
}
Pada fungsi loop(), fungsi ini dilakukan berulang dengan diawali instruksi
LowPower.attachinterruptWakeup(pin, interrupt, FALLING) didapat dari library
ArduinoLowPower digunakan sebagai instruksi interrupt disaat pin terhubung dengan
ground maka instruksi interrupt akan aktif. Kemudian instruksi untuk menonaktifkan usb
dikarenakan USB memakan daya yang cukup besar sekitar 5v DC, usb di nonaktifkan
dengan instruksi ~USB_CTRLA_ENABLE dalam hal ini dapat dikatakan sudah masuk
dalam sleep mode walaupun masih dalam kondisi idle dikarenakan GPIO masih aktif.
Kemudian dilanjutkan dengan instruksi __WFI( ), instruksi ini digunakan untuk
menunggu adanya interrupt, sebelum ada instruksi interrupt perangkat tidak akan bangun
38
dalam kondisi sleep mode. Saat ada interrupt dilanjutkan dengan mengaktifkan kembali
USB pada perangkat yang terdapat pada instruksi = USB_CTRLA_ENABLE, dan
dilanjutkan dengan instruksi call fungsi dosomething( ) dimana pada instruksi ini
perangkat akan melakukan sesuai apa yang ada pada fungsi dosomething ( ). Setelah
melewati fungsi dosomething( ) perangkat kembali memasuki sleep mode dan
menonaktifkan interrupt pada pin. Dan fungsi loop diakhiri dengan incrament dari count
akan bertambah satu setiap fungsi loop() selesai dan akan kembali berjalan kembali.
Hasil yang didapat untuk mendeteksi apakah perangkat bekerja dengan baik
adalah, program akan terus bekerja selama 24H terus menerus tanpa henti dengan pola
yang sama, saat perangkat memasuki sleep mode pada software Arduino IDE tidak
terdeteksi port perangkat dikarenakan usb dinonaktifkan dan ketika perangkat kembali
standby port usb kembali terdeteksi. Untuk program ini dijalankan dengan menggunakan
Arduino M0 dengan versi Robotdyn SAMD21M0 dan custom Arduino Zero, untuk
Arduino MKRZero belum diujikan dikarenakan perangkat yang tidak tersedia. Selain
mengamati kondisi yang terjadi disaat program berjalan, melakukan pengujian dengan
menggunakan PSU 5v DC dan baterai 3.47V dengan mengukur arus dan tegangan pada
perangkat saat program berjalan. Didapati hasil seperti pada tabel 4.1.
39
Standby = 𝑃 = 𝐼 × 𝑉 = 12.6𝑚𝐴 × 5𝑉 = 0.082𝑤𝑎𝑡𝑡
Sleep = 𝑃 = 𝐼 × 𝑉 = 03.5𝑚𝐴 × 5𝑉 = 0.017𝑤𝑎𝑡𝑡
Awake = 𝑃 = 𝐼 × 𝑉 = 16.4𝑚𝐴 × 5𝑉 = 0.063𝑤𝑎𝑡𝑡
Dari hasil pengukuran dengan PSU 5V DC diketahui bahwa saat memasuki sleep
mode daya lebih kecil daripada saat standby dan awake, awake disini adalah saat
perangkat melakukan fungsi dosomething( ). Kondisi saat pengukuran perangkat ini tidak
dipasang beban apapun, kemungkinan daya akan bertambah besar jika beban bertambah
hal ini mencakup sensor interface dan lainya. Dan hasil pengukuran ini cukup tinggi
untuk masuk kategori low power yang diinginkan pihak yang diminta, target yang
diinginkan oleh pihak yang diminta adalah kurang dari 0.0125 watt, hasil dari
pengukuran cukup besar dikarenakan GPIO masih dalam keadaan aktif saat sleep mode
40
Sleep = 𝑃 = 𝐼 × 𝑉 = 01.0𝑚𝐴 × 3.47𝑉 = 0.003𝑤𝑎𝑡𝑡
Awake = 𝑃 = 𝐼 × 𝑉 = 14.5𝑚𝐴 × 3.47𝑉 = 0.036𝑤𝑎𝑡𝑡
Target yang diminta saat sleep mode
𝑃 = 𝐼 × 𝑉 = 02.5𝑚𝐴 × 3.47𝑉 = 0.008𝑤𝑎𝑡𝑡
Dari hasil pengukuran dengan baterai 3.47V diketahui bahwa saat memasuki
sleep mode daya lebih kecil daripada saat standby dan awake, awake disini adalah saat
perangkat melakukan fungsi dosomething( ). Kondisi saat pengukuran perangkat ini tidak
dipasang beban apapun, kemungkinan daya akan bertambah besar jika beban bertambah
hal ini mencakup sensor interface dan lainya. . Dan hasil pengukuran ini masih terlalu
tinggi dari target yang diminta saat dalam sleep mode, kecuali pada perangkat custom
board 2 zero saat dalam sleep mode sudah kurang dari target yang diminta yaitu sebesar
0.003 watt sedangkan batas maksimal daya yang diminta adalah 0.008watt. hasil dari
pengukuran cukup besar dikarenakan GPIO masih dalam keadaan aktif saat sleep mode.
#include <SDISerial.h>
#define DATALINE_PIN 10
#define INVERTED 1
char* get_measurement(){
char* service_request = sdi_serial_connection.sdi_query("?M!",1000);
char* service_request_complete =
sdi_serial_connection.wait_for_response(1000);
return sdi_serial_connection.sdi_query("?D0!",1000);
}
void setup(){
sdi_serial_connection.begin();
41
Serial.begin(9600);
Serial.println("OK INITIALIZED");
delay(3000);
}
int j=0;
void loop(){
uint8_t wait_for_response_ms = 1000;
char* response = get_measurement();
Serial.print("RECV:");Serial.println(response!=NULL&&response[0] !=
'\0'?response:"No Response!");
delay(5000);
}
Pada bagian awal program dinyatakan sebuah library yang digunakan pada
program yaitu SDISerial.h . Library SDISerial berguna untuk menjalankan fungsi-fungsi
protocol komunikasi SDI-12 yang digunakan. Selanjutnya didefinisikan pin untuk data
dan juga dibuat inverted. SDISerial sdi_serial_connection(DATALINE_PIN,
INVERTED); digunakan untuk menggunakan library SDISerial yang diterapkan pada
variabel koneksi sdi serial. Pendefinisian dilakukan kembali untuk beberapa variabel
yang berhubungan dengan meminta hasil pengukuran, meminta service, dan permintaan
selesai. Selanjutnya dibuat program untuk meminta data yang sudah didefinisikan
sebelumnya dan juga menampilkan pada serial monitor atau penampil lainnya. Setelah
itu dibuat program perulangan untuk menampilkan nilai suhu dan temperatur secara
berkala yang dapat diatur jangka waktunya.
42
Gambar 4.4 Percobaan 1 pada media tanah bertekstur tanpa kerikil
43
Gambar 4.6 Percobaan 3 dengan media air
44
Untuk percobaan 1 dan 2 menggunakan media tanah dalam pot yang mempunyai
perbedaan tekstur tanah. Pada percobaan 1 tanah memiliki tekstur yang tidak memiliki
kerikil. Sedangkan pada percobaan 2 tanah memiliki tekstur yang sebagiannya berkerikil.
Kondisi kedua tanah dalam pot tersebut sama-sama basah karena malam sebelumnya
terkena hujan.
Dari keempat percobaan di atas dapat dilihat bahwa pada percobaan 1 pada media
tanah tanpa kerikil mempunyai nilai rata-rata kadar air 13.36 sedangkan pada percobaan
2 pada media tanah berkerikil mempunyai nilai rata-rata kadar air 13.11. Hal ini dapat
dinyatakan bahwa selisih kedua nilai tersebut tidak begitu besar dikarenakan pada malam
harinya tanah dalam kedua pot terkena hujan. Untuk media air memiliki nilai maksimal
48.82, hal ini berbeda dengan yang tertera pada spesifikasi yaitu bernilai 80. Perlu
dilakukan kalibrasi terlebih dahulu pada sensor agar didapat nilai yang sesuai dengan
spesifikasi. Pada media udara didapat nilai rata-rata 1.05 dan sudah sesuai dengan
spesifikasi. Untuk temperatur tidak banyak perubahan yang muncul pada tiap-tiap
percobaan.
45
Modul ADC tambahan yang digunakan adalah modul ADS1115 seperti pada gambar 4.9
karena bisa melakukan differential analog to digital conversion pada tegangan antara
channel 0 dan 1 sesua dengan sensor yang digunakan. Modul ini juga sesuai dengan board
mikrokontroller yang digunakan yaitu Arduino Mega 2560 karena menggunakan antarmuka
I2C dan bekerja dengan daya untuk menghasilkan logic signal antara 2v hingga 5v sesuai
dengan mikrokontroller 3.3v dan 5v.
46
Sistem addressing pada ADS1115 dapat diatur dengan menyambungkan pin ADDR ke
SCL,SDA,GND atau VDD. Sistem addressing diilustrasikan pada gambar 4.11.
47
Gambar 4.12 Rangkaian SQ-110, ADS1115 dan Arduino
Rangkaian dari quantum sensor SQ-110, ADS1115 dan Arduino bisa dilihat pada gambar
4.12. Kedua channel analog dari SQ-110 dihubungkan ke pin A0 dan A1 dari ADS1115.
Pin ground dari SQ-110 dan pin ground dari ADS1115 dihubungkan ke pin ground ada
Arduino. Pin SCL dan pin SDA pada ADS1115 dihubungkan ke pin SCL dan pin SDA
pada Arduino. Yang terakhir pin VDD pada ADS1115 dihubungkan pada pin 3v3 pada
Arduino. Karena hanya menggunakan sebuah modul ADS1115 maka pin ADDR bisa
tidak digunakan.
Berikut adalah program / sketch dari beserta analisisnya :
#include <Wire.h>
#include <ADS1115.h>
#include <math.h>
48
void loop()
{
int16_t radianceData;
float multiplier = 0.015625F; //16bit
radianceData = radianceSensor.Measure_Differential(01);
float vValue = radianceData * multiplier;
float wValue = max(0,round(5 * vValue));
Serial.print("Sebelum perhitungan ADC+PGA :");
Serial.print(radianceData,7);
Serial.print("\t\tSesudah :");
Serial.println(wValue,7);
delay(1000);
}
Pada bagian awal program berisikan beberapa library yaitu wire.h, ADS1115.h
dan math.h. Library wire.h digunakan agar Arduino bisa menggunakan komunikasi I2C,
ADS1115.h merupakan library bawaan dari modul ADS1115 sedangkan math.h
merupakan sebuah library yang disediakan untuk melakukan perhitungan secara
matematika. Selanjutnya kita mendeklarasikan variabel radianceSensor sebagai variabel
dari modul ADS1115 dengan address 0x48 yaitu default address apabila hanya terdapat
sebuah modul ADS1115. Pada bagian setup baud rate diatur menjadi 9600 lalu pada
radianceSensor.setGain(GAIN_EIGHT) artinya mengatur PGA pada ADS1115 dengan
8x gain artinya pengaturan gainnya akan menjadi +/-0.512 volt, Nilai 32767 akan
direpresentasikan jadi nilai dari 0,512volt. Membagi 0,512volt dengan 32767 akan
menghasilkan faktor skala sebesar 0,015625mV per bit. Pada bagian loop dideklarasikan
2 variabel baru yaitu radianceData dengan tipe data integer 16bit dan multiplier dengan
tipe data float bernilai 0.015625 karena gain yang diatur menjadi 8x gain. Variabel data
lalu menyimpan data yang didapatkan dari sensor dengan
radianceSensor.Measure_Differential(01); karena sensor memiliki 2 channel yang
terhubung dengan ADS1115 pada pin A0 dan pin A1. Lalu melakukan perkalaian antara
radianceData dengan multiplier agar mendapat data dari sensor disimpan dalam variabel
vValue. Kemudian float wValue = max(0,round(5 * vValue)); digunakan untuk
menghitung nilai PPFD. Yang terakhir adalah menampilkan nilai-nilai tersebut ke serial
monitor dengan delai program 1000ms. Contoh hasil dari serial monitor bisa dilihat pada
gambar 4.13.
49
Gambar 4.13 Serial monitor dari program sensor PAR
50
• Tidak diperlukan skema untuk menentukan Device EUI (DevEUI) atau
Application Key (AppKey) yang unik.
Kekurangan ABP:
• Skema untuk menghasilkan Network Session Key (NwkSKey) dan
Application Session Key (AppSKey) harus memastikan mereka unik, untuk
mencegah pelanggaran luas jika satu perangkat dikompromikan. Dan skema
harus aman untuk mencegah kunci diperoleh atau diturunkan oleh pihak
jahat.
• Jika perangkat dikompromikan kapan saja, bahkan sebelum aktivasi, kunci
dapat ditemukan.
• Pengaturan jaringan tidak dapat ditentukan pada waktu bergabung.
• Peristiwa yang membutuhkan perubahan kunci (misalnya, pindah ke jaringan
baru, perangkat yang dikompromikan, atau kunci yang kedaluwarsa)
memerlukan pemrograman ulang perangkat.
Berdasarkan beberapa kelebihan dan kekurangan OTAA maupun ABP di atas,
serta kebutuhan dari perancangan sistem maka kami memilih ABP sebagai metode
pengiriman data menggunakan LoRaWAN. Hal ini dikarenakan sistem yang digunakan
bersifat eksklusif hanya menggunakan nod sensor yang sudah dipersiapkan dan telah
didaftarkan sebelumnya.
51
Gambar 4.14 Halaman muka The Things Network
Terlebih dahulu kita perlu membuat aplikasi di TTN dengan mengakses halaman
Application lalu menuju add application maka tampilan akan menjadi seperti pada
gambar 4.15. Di halaman tersebut terdapat isisan nama aplikasi, deskripsi aplikasi dan
Handler registration. Pada handler registrasion kita perlu mengisikan sesuai dengan di
wilayah mana LoRa tersebut akan digunakan. Setelah itu tampilan akan berubah seperti
pada gambar 4.16.
52
Gambar 4.16 Tampilan pada Application
Berikutnya yang diperlukan adalah membuat device dengan menekan tab divice
lalu add device. Tampilan add device adalah seperti pada gambar 4.17. Pada halaman
tersebut kita perlu mengisikan nama device lalau pada Device EUI dan App Key bisa
diisikan secara otomatis, lalu pada App EUI mengikuti application yang sudah kita buat
sebelumnya.
Setelah device selesai dibuat selanjutnya menuju tab settings dan ubah metode
dari OTAA menjadi ABP agar mendapatkan Device Address, Network Session Key dan
App Session Key yang diperlukan untuk komunikasi protokol LoRaWan dengan metode
53
ABP. Kembali ke Arduino IDE buka example dari library LMIC dengan nama ttn-abp.
Terdapat beberapa bagian yang harus diubah agar bisa mengirimkan data
Pada bagian tersebut harus disesuaikan dengan Device Address, Network Session
Key dan App Session Key pada device yang sudah dibuat sebelumnya untuk mengisi
DEVADDR, NWSKEY dan APPSKEY. Kemudian ubah pin mapping yang sebelumnya
// Pin mapping
const lmic_pinmap lmic_pins = {
.nss = 6,
.rxtx = LMIC_UNUSED_PIN,
.rst = 5,
.dio = {2, 3, 4},
};
54
.rst = 9,
.dio = {2, 6, 7},
};
55
LMIC_setupChannel(3, 922400000, DR_RANGE_MAP(DR_SF12, DR_SF7),
BAND_CENTI); // g-band
LMIC_setupChannel(4, 922600000, DR_RANGE_MAP(DR_SF12, DR_SF7),
BAND_CENTI); // g-band
LMIC_setupChannel(5, 922800000, DR_RANGE_MAP(DR_SF12, DR_SF7),
BAND_CENTI); // g-band
LMIC_setupChannel(6, 923000000, DR_RANGE_MAP(DR_SF12, DR_SF7),
BAND_CENTI); // g-band
LMIC_setupChannel(7, 922000000, DR_RANGE_MAP(DR_SF12, DR_SF7),
BAND_CENTI); // g-band
LMIC_setupChannel(8, 921800000, DR_RANGE_MAP(DR_FSK, DR_FSK),
BAND_MILLI); // g2-band
56
BAB V
PENUTUPAN
5.2 Kesimpulan
Melalui kerja praktik ini penulis belajar banyak tentang sistem smart agriculture
terutama pada bagian pengamat lingkungan tanaman dengan standar-standar yang ada,
serta menyatukan bagian-bagian yang telah dikerjakan masing-masing menjadi satu
kesatuan. Sistem yang dibuat dalam kegiatan kerja praktik ini adalah sistem pengamat
kondisi lingkungan tanaman untuk smart agriculture dengan fitur hemat daya dan
teknologi LoRaWAN. Sistem ini terdiri dari sensor 5TM untuk mengukur kadar air dan
suhu tanah, sensor PAR untuk mengukur banyaknya jenis cahaya yang dibutuhkan untuk
mendukung fotosintesis, board ATSAMD21 untuk mendapatkan fitur hemat dayanya,
serta protocol komunikasi LoRaWAN untuk sebagai alat pengiriman data. Sistem belum
sepenuhnya dapat digunakan karena pada saat melaksanakan kerja praktik gateway
LoraServer belum siap.
57
REFERENSI
58
LAMPIRAN
*******************************************************************************
/
#include <lmic.h>
#include <hal/hal.h>
59
#include <SPI.h>
// Schedule TX every this many seconds (might become longer due to duty
// cycle limitations).
const unsigned TX_INTERVAL = 60;
// Pin mapping
const lmic_pinmap lmic_pins = {
.nss = 6,
.rxtx = LMIC_UNUSED_PIN,
.rst = 5,
.dio = {2, 3, 4},
};
60
void onEvent (ev_t ev) {
Serial.print(os_getTime());
Serial.print(": ");
switch(ev) {
case EV_SCAN_TIMEOUT:
Serial.println(F("EV_SCAN_TIMEOUT"));
break;
case EV_BEACON_FOUND:
Serial.println(F("EV_BEACON_FOUND"));
break;
case EV_BEACON_MISSED:
Serial.println(F("EV_BEACON_MISSED"));
break;
case EV_BEACON_TRACKED:
Serial.println(F("EV_BEACON_TRACKED"));
break;
case EV_JOINING:
Serial.println(F("EV_JOINING"));
break;
case EV_JOINED:
Serial.println(F("EV_JOINED"));
break;
case EV_RFU1:
Serial.println(F("EV_RFU1"));
break;
case EV_JOIN_FAILED:
Serial.println(F("EV_JOIN_FAILED"));
break;
case EV_REJOIN_FAILED:
Serial.println(F("EV_REJOIN_FAILED"));
break;
case EV_TXCOMPLETE:
Serial.println(F("EV_TXCOMPLETE (includes waiting for RX
windows)"));
if (LMIC.txrxFlags & TXRX_ACK)
Serial.println(F("Received ack"));
if (LMIC.dataLen) {
Serial.println(F("Received "));
Serial.println(LMIC.dataLen);
Serial.println(F(" bytes of payload"));
61
}
// Schedule next transmission
os_setTimedCallback(&sendjob,
os_getTime()+sec2osticks(TX_INTERVAL), do_send);
break;
case EV_LOST_TSYNC:
Serial.println(F("EV_LOST_TSYNC"));
break;
case EV_RESET:
Serial.println(F("EV_RESET"));
break;
case EV_RXCOMPLETE:
// data received in ping slot
Serial.println(F("EV_RXCOMPLETE"));
break;
case EV_LINK_DEAD:
Serial.println(F("EV_LINK_DEAD"));
break;
case EV_LINK_ALIVE:
Serial.println(F("EV_LINK_ALIVE"));
break;
default:
Serial.println(F("Unknown event"));
break;
}
}
void setup() {
62
Serial.begin(115200);
Serial.println(F("Starting"));
#ifdef VCC_ENABLE
// For Pinoccio Scout boards
pinMode(VCC_ENABLE, OUTPUT);
digitalWrite(VCC_ENABLE, HIGH);
delay(1000);
#endif
// LMIC init
os_init();
// Reset the MAC state. Session and pending data transfers will be discarded.
LMIC_reset();
#if defined(CFG_eu868)
// Set up the channels used by the Things Network, which corresponds
// to the defaults of most gateways. Without this, only three base
// channels from the LoRaWAN specification are used, which certainly
// works, so it is good for debugging, but can overload those
// frequencies, so be sure to configure the full frequency range of
// your network here (unless your network autoconfigures them).
// Setting up channels should happen after LMIC_setSession, as that
63
// configures the minimal channel set.
// NA-US channels 0-71 are configured automatically
LMIC_setupChannel(0, 868100000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI);
// g-band
LMIC_setupChannel(1, 868300000, DR_RANGE_MAP(DR_SF12, DR_SF7B), BAND_CENTI);
// g-band
LMIC_setupChannel(2, 868500000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI);
// g-band
LMIC_setupChannel(3, 867100000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI);
// g-band
LMIC_setupChannel(4, 867300000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI);
// g-band
LMIC_setupChannel(5, 867500000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI);
// g-band
LMIC_setupChannel(6, 867700000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI);
// g-band
LMIC_setupChannel(7, 867900000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI);
// g-band
LMIC_setupChannel(8, 868800000, DR_RANGE_MAP(DR_FSK, DR_FSK), BAND_MILLI);
// g2-band
// TTN defines an additional channel at 869.525Mhz using SF9 for class B
// devices' ping slots. LMIC does not have an easy way to define set this
// frequency and support for class B is spotty and untested, so this
// frequency is not configured here.
#elif defined(CFG_us915)
// NA-US channels 0-71 are configured automatically
// but only one group of 8 should (a subband) should be active
// TTN recommends the second sub band, 1 in a zero based count.
// https://github.com/TheThingsNetwork/gateway-conf/blob/master/US-
global_conf.json
LMIC_selectSubBand(1);
#endif
64
// Set data rate and transmit power for uplink (note: txpow seems to be
ignored by the library)
LMIC_setDrTxpow(DR_SF7,14);
// Start job
do_send(&sendjob);
}
void loop() {
os_runloop_once();
}
65