Pemrograman Arduino dengan Java, mungkinkah? Arduino UNO / Nano tidak dapat diprogram dengan bahasa pemrograman Java. Alasan mudahnya karena memori RAM dan Flash pada Arduino terlalu kecil untuk menjalankan Java Virtual Machine (JVM).
Sejauh ini prosesor yang mendukung JVM adalah sebagai berikut:
x86
x86-64
SPARC
MIPS
Itanium
Power ISA
ARM
Alpha
S/390
z/Architecture
m68k
JVM juga memerlukan sistem operasi di bawahnya. Berikut ini sistem operasi yang mendukung JVM:
Windows
Linux
FreeBSD
NetBSD
OpenBSD
Solaris
OpenSolaris
Darwin
macOS
iOS
BeOS
Haiku
AIX
IRIX
OS/2
Windows Mobile
AmigaOS
Arsitektur CPU pada Arduino UNO adalah AVR. Sistem operasi pada Arduino UNO juga tidak mendukung JVM.
Jika perlu program Java yang mengakses port pada Arduino, biasanya dilakukan dengan cara menjalankan program Java di komputer yang mendukung JVM, dengan mengirimkan perintah-perintah melalui port serial ke Arduino UNO. Contohnya adalah dengan menggunakan library Processing.
Cara mengatasi regulator Arduino UNO ataupun Arduino Nano yang panas adalah dengan :
menggunakan tegangan pada power jack serendah mungkin. Tegangan paling kecil yang masih memungkinkan adalah 7 volt.
batasi pemakaian arus oleh prosesor
gunakan pendingin seperti kipas angin
Batasi Tegangan Power Jack dan VIN
Jika regulator Arduino panas, artinya ada disipasi daya pada regulator tersebut. Rangkaian regulator pada Arduino UNO adalah sebagai berikut
Rangkaian Regulator Arduino UNO
Tegangan dari power jack ataupun VIN dikecilkan menjadi 5 volt oleh regulator MC33269D-5.0 . Kelebihan tegangan ini dibuang menjadi panas. Makin besar perbedaan tegangan , maka daya yang dibuang makin besar. Daya makin besar, akibatnya regulator makin panas. Jadi salah satu cara mudah mengurangi panas pada regulator tersebut adalah dengan menggunakan tegangan power jack ataupun VIN di 7 volt saja.
Batasi Arus Mikroprosesor ATmega328
Arus maksimum pada terminal VCC prosesor adalah 200 mA. Arus ini akan menjadi beban juga bagi regulator.
Misal tegangan VIN 9 volt, dengan arus pada VCC ATmega328 adalah 200 mA. Maka akan ada pengurangan tegangan 4 volt pada regulator. Disipasi daya karena VCC sebesar P = V x I =4 volt x 200 mA = 800 mW
Misal penggunaan arus pada port ATmega328 dikurangi, sehingga total arus hanya 50 mA. Maka disipasi daya pada regulator menjadi P = VxI = 4 volt x 50 mA = 200 mW. Dengan demikian regulator tidak terlalu panas.
Gunakan Kipas
Regulator pada Arduino UNO tidak dilengkapi pendingin khusus seperti heat sink yang besar, sehingga panas sulit dibuang dengan baik. Pendinginan terutama melalui jalur tembaga di papan rangkaian (PCB) Untuk mempercepat pendinginan dapat dengan kipas angin kecil.
Secara teori cara ini dapat dipakai, namun dalam praktek sangat tidak praktis.
Menghapus EEPROM menggunakan program yang diupload ke memori Flash dan kemudian dijalankan
Menggunakan fasilitas serial programming melalui ISP (In System Programming) di ATmega328
Menggunakan fasilitas parallel programming / high voltage programming pada ATmega328
Menghapus EEPROM Dengan Upload Program
Teknik ini dijelaskan di tutorial EEPROM Clear di https://www.arduino.cc/en/Tutorial/EEPROMClear
Prinsip dasarnya adalah menggunakan fungsi EEPROM.write() untuk menulis angka 0 ke semua lokasi EEPROM.
Berikut ini contoh program untuk menghapus semua isi data di EEPROM.
/* * EEPROM Write * * Stores values read from analog input 0 into the EEPROM. * These values will stay in the EEPROM when the board is * turned off and may be retrieved later by another sketch. */
#include <EEPROM.h>
/** the current address in the EEPROM (i.e. which byte we're going to write to next) **/ int addr =0;
voidsetup(){ /** Empty setup. **/ }
voidloop(){ /*** Need to divide by 4 because analog inputs range from 0 to 1023 and each byte of the EEPROM can only hold a value from 0 to 255. ***/
int val =analogRead(0)/4;
/*** Write the value to the appropriate byte of the EEPROM. these values will remain there when the board is turned off. ***/
EEPROM.write(addr, val);
/*** Advance to the next address, when at the end restart at the beginning.
Rather than hard-coding the length, you should use the pre-provided length function. This will make your code portable to all AVR processors. ***/ addr = addr +1; if(addr == EEPROM.length()){ addr =0; }
/*** As the EEPROM sizes are powers of two, wrapping (preventing overflow) of an EEPROM address is also doable by a bitwise and of the length - 1.
++addr &= EEPROM.length() - 1; ***/
delay(100); }
Menghapus EEPROM Dengan ISP (In System Programming)
Pada metode ini, diperlukan antar muka khusus ke port ISP di ATmega328 pada Arduino UNO. Contoh antar muka yang populer adalah USBasp (https://www.fischl.de/usbasp/)
Perangkat lunak yang diperlukan ada beberapa macam, misalnya:
Program yang sudah diupload ke Arduino tidak dapat diedit lagi. Tepatnya: bisa diambil kalau Arduinonya belum dikunci, kodenya sudah tidak dalam bentuk awal. Kode dapat diedit, namun sulit sekali karena dalam bahasa assembly.
Arduino UNO R3
Program sketch Arduino menggunakan bahasa C++, dalam bentuk format teks program. Filenya menggunakan ekstensi *.INO. Ketika akan diupload ke Arduino, program tersebut diubah dulu oleh compiler dan linker menjadi file *.HEX . File *.HEX ini berisi kode-kode mesin yang akan diterjemahkan oleh prosesor di Arduino menjadi instruksi yang akan dikerjakan. Kode bahasa C++ tidak ada di dalam file HEX tersebut, sehingga kita tidak dapat lagi mengedit progam yang sudah diupload ke Arduino.
Arduino IDE dengan program Blink
Berikut ini adalah source code untuk membuat LED berkedip, sumbernya dari contoh di Arduino IDE (File -> Examples -> 01.Basics -> Blink.
Penjelasan tentang software tersebut dapat juga dibaca di artikel “Arduino Tutorial Blink“.
Pada potongan kode berikut ini , komentar pada kode dihilangkan sehingga hanya source code pentingnya saja yang ditampilkan.
void setup() { pinMode(LED_BUILTIN, OUTPUT); }
void loop() { digitalWrite(LED_BUILTIN, HIGH);level) delay(1000); // wait for a second digitalWrite(LED_BUILTIN, LOW); delay(1000); }
Software itu dicompile, menghasilkan binary dalam format HEX dengan nama “Blink.ino.hex”.
File “Blink.ino.hex” ini yang kemudian dimasukkan ke dalam prosesor di Arduino UNO, yaitu ATmega328. Format HEX ini adalah format teks ASCII , sedangkan untuk melihat wujud data ini dalam bentuk binary, mesti menggunakan software avr-objcopy, yang biasanya di Windows ada di “C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-objcopy”.
File HEX ini diubah dengan avr-objcopy menjadi format binary, dengan perintah sebagai berikut:
Isi file dilihat dengan utility HxD (), hasilnya sebagai berikut:
Kode biner program di Arduino
Dari kode biner tersebut nampak sudah tidak ada lagi teks source code yang aslinya. Sehingga teks asli source code tidak dapat lagi diedit berdasarkan program yang sudah diupload ke Arduino UNO.
Untuk melihat kerja dari program binary tersebut dapat menggunakan fitur disassembly, namun sangat sulit dibaca dibandingkan dengan source code aslinya.
Kode biner tersebut dapat dibaca dari prosesor ATmega328, namun syaratnya adalah fuse bit untuk membaca FLASH memory pada ATmega328 belum dikunci.
Kode program tersebut dapat diubah ke dalam bahasa assembly, dengan perintah berikut ini:
Berapakah daya terbesar (maksimum) yang dipakai oleh Arduino UNO? Jika menggunakan catu daya Power Jack, daya masuk maksimum adalah 16 watt. Jika menggunakan catu daya USB, daya masuk maksimum adalah 2,5 watt.
Pengertian daya untuk Arduino ini dapat diartikan bermacam-macam, di antaranya:
Daya maksimum yang dapat masuk ke board Arduino UNO tanpa merusaknya. Jika tidak ada batasan kerusakan, maka praktis tidak ada keterbatasan.
Daya maksimum yang diserap oleh prosesor di Arduino, yaitu ATmega328
Daya maksimum total yang dapat dikeluarkan dari semua pin-pin pada Arduino
Daya maksimum yang dapat dikeluarkan oleh 1 pin pada Arduino.
Daya Maksimum Masuk ke Arduino UNO
Daya yang dipakai oleh Arduino UNO tanpa merusaknya dibatasi oleh 2 hal: kemampuan catu daya / regulator, dan kemampuan arus pada prosesor ATmega328.
Rangkaian Catu Daya Arduino UNO
Arus catu daya dari PWRIN masuk melalui dioda D1 dengan tipe M7. Dioda ini memiliki arus maksimum 1 ampere, sesuai menurut spesifikasinya.
Regulator MC33269D-5.0 memiliki arus maksimum 800 mA, menurut spesifikasinya. Nama parameternya adalah “Current Limit”, dapat dilihat di screenshot berikut ini.
MC33269-Electrical Characteristics
Jika menggunakan power supply dari port USB, maka arus maksimumnya adalah 500 mA. Arus ini dibatasi oleh kemampuan sumber USB dan terutama oleh sekring 500 mA yang dipasang di jalur USBVCC. Skema input USB dapat dilihat pada gambar berikut. Sumber: [skematik Arduino UNO]
Sekring F1 (500 mA) pada jalur 5 volt USB
Daya Aktif Diserap ATmega328
Berikut ini grafik konsumsi daya pada prosesor ATmega328 yang dipakai di Arduino UNO, diambil dari datasheet ATmega328:
ATmega328P active supply current vs frequency
Dari grafik tersebut dapat diambil kesimpulan arus maksimum yang dipakai oleh ATmega328 pada frekuensi 16 MHz dengan tegangan 5 volt adalah mendekati 10 mA. Daya yang diserap ATmega328 = 5 volt x 10 mA = 50 mW.
Konsumsi board Arduino UNO bisa lebih besar, karena pada board Arduino UNO terdapat komponen lain yang juga memerlukan daya.
Daya Total dari semua pin ATmega328
Arus maksimum yang dapat dilewatkan di pin VCC pada ATmega328 adalah 200 mA, sehingga daya yang diberikan pin-pin adalah 200 mA x 5 volt = 1000 mW = 1 watt.
Sumber informasinya adalah datasheet ATmega328 di bagian 28.1 Absolute Maximum Ratings sebagai berikut:
ATmega328 absolute maximum rating
Daya Total dari 1 buah pin ATmega328
Arus maksimum pada 1 pin ATmega328 adalah 40 mA, sehingga daya maksimum = 40 mA x 5 volt = 200 mW.
Sumber informasinya adalah datasheet ATmega328 di bagian 28.1 Absolute Maximum Ratings yang sudah disebutkan di atas.
Kesimpulan
#1 Daya maksimum yang diserap board Arduino Nano sebagai berikut:
Sumber Tegangan
Tegangan
Arus catu daya maksimum
Daya masuk
Daya terbuang di regulator
Daya lewat ATmega328
Daya lewat pin 5V
Power Jack
7 volt
800 mA
5.6 watt
1,6 watt
1 watt
3 watt
Power Jack
12 volt
800 mA
9,6 volt
5,6 watt
1 watt
3 watt
Power Jack
20 volt
800 mA
16 watt
12 watt
1 watt
3 watt
USB
5 volt
500 mA
2,5 watt
0
1 watt
1,5 watt
#2 Daya maksimum diserap ATmega328 adalah 50 mW
#3 Daya total dari pin ATmega328 adalah 1 watt
#4 Daya total dari 1 buah pin ATmega328 adalah 200 mW
Cara menyalakan Arduino UNO adalah dengan menyambungkan catu daya (power supply) ke pin power pada Arduino UNO. Pada Arduino UNO ada beberapa pin power.
Berikut ini skema pin-pin pada Arduino UNO
Pin Arduino UNO
Pin power yang dapat dipakai adalah sebagai berikut:
Power Jack, umumnya menggunakan tegangan 7 volt sampai 12 volt. Dilengkapi dioda pengaman untuk melindungi polaritas terbalik.
USB Jack, menggunakan tegangan 5 volt dari komputer atau USB charger
pin VIN, umumnya menggunakan tegangan 7,5 volt sampai dengan 12 volt seperti power jack. Namun VIN ini tidak diamankan dengan dioda.
Uraian
Pemberian tegangan catu daya yang keliru dapat merusak Arduino UNO dapat merusak Arduino UNO. Pembahasan lengkapnya di artikel “Cara Merusak Arduino“. Berikut ini ringkasannya.
Rangkaian Catu Daya Arduino UNO
Regulator menggunakan IC MC33269D-5.0. Regulator ini memiliki tegangan drop 1,0 volt, sehingga tegangan minimum pada VIN adalah 5 volt + 1 volt + 0,7 volt (tegangan pada D1). Jadi Jack power memerlukan tegangan minimum 6,7 volt. Untuk amannya dapat menggunakan tegangan tegangan 7 volt.
Tegangan maksimum pada IC MC33269D-5.0 adalah 20 volt , disebut di bagian Maximum Ratings pada datasheet. Jadi tegangan power jack harus dibatasi di bawah 20 volt supaya tidak merusak regulator MC33260D-5.0. Untuk amannya pakai saja 12 volt supaya regulator tidak terlalu panas.
Pin VIN menggunakan regulator yang sama, namun tidak melalui dioda pengaman D1. Jadi kalau tegangan pada VIN terbalik, maka catu daya akan langsung rusak.
Aki Yuasa YTX7L-BS dapat memberikan 7,2 watt selama 10 jam
Aki Yuasa YTX7L-BS dapat memberikan 7,56 watt selama 20 jam
Aki Yuasa YTX7L-BS dapat memberikan 1200 watt selama beberapa detik
Jawaban Detail
Untuk mendapatkan kemampuan watt, kita perlu data besaran tegangan (dalam satuan volt) dan besaran arus (dalam ampere) baterai tersebut supaya dapat menghitung daya dalam satuan watt
Sebagai contoh aki 12 volt 6 Ah adalah Yuasa YTX7L-BS. Aki ini dipilih karena barangnya tersedia di Indonesia, dan datasheet detailnya tersedia di situs Yuasa di United Kingdom (UK).
Yuasa YTX7L-BS
Berikut data kemampuan aki tersebut, menurut datasheetnya:
Performance Yuasa YTX7L-BS
Kapasitas untuk 10 jam adalah 6 Ah. Arusnya berarti 6 Ah / 10 jam = 0,6 ampere. Daya = P = V x I = 12 x 0,6 = 7,2 watt. Jadi aki ini dapat memberikan daya 7,2 watt selama 10 jam secara terus menerus.
Kapasitas untuk 20 jam adalah 6,3 Ah. Arusnya berarti kapasitas muatan dibagi waktu = 6,3 Ah / 20 jam = 0.315 A (ampere). Daya = P = V x I = 12 x 0.315 = 3,78 watt. Jadi aki ini dapat memberikan daya 3,78 watt selama 20 jam terus menerus.
CCA (Cold Cranking Amps) untuk baterai ini adalah 100 A, jadi aki ini dapat memberikan arus 100 ampere untuk beberapa detik, biasanya untuk starter di awal saja. Daya = P = V x I = 12 x 100 = 1200 watt.
Pada aki motor/mobil, pemakaian utama aki tersebut adalah untuk starter motor di awal yang memerlukan arus sangat besar. Setelah mesin motor/mobil menyala, pemakaian arus kecil saja. Batere jenis ini dikenal dengan baterai starter atau baterai SLI (Starting, Lighting, Ignition) . Struktur di dalam aki starter ini lebih untuk mencapai kemampuan arus yang besar, biasanya dengan menambah luas permukaan pada elektroda yang dipakai.
Untuk aki tipe lain angkanya mesti disesuaikan dengan data performance yang tercantum datasheet aki tersebut. Untuk accu motor 5 Ah, perhitungannya ada di artikel “Aki Motor Berapa Watt“
Kesimpulan
Aki Yuasa YTX7L-BS dapat memberikan 7,2 watt selama 10 jam
Aki Yuasa YTX7L-BS dapat memberikan 3,78 watt selama 20 jam
Aki Yuasa YTX7L-BS dapat memberikan 1200 watt selama beberapa detik
Persamaan dan perbedaan antara ATmega8535 dan Arduino UNO dapat diuraikan dengan membandingkan prosesor ATmega8353 dan prosesor ATmega328, karena Arduino UNO prosesor utamanya adalah ATmega328.
Berikut ini perbandingan ringkas antara keduanya.
Parameter
ATmega8535
ATmega328
Clock
16 MHz
16 MHz
Memori Flash
8 KB
32 KB
Memori SRAM
512 byte
2 KB
Memori EEPROM
512 byte
1 KB
Counter
2 buah 8 bit timer/counter 1 buah 16 bit timer/counter
2 buah 8 bit timer/counter 1 buah 16 bit timer/counter
ADC
8 kanal, 10 bit
8 kanal , 10 bit
I/O pin
32 pin
23 pin
Kemasan
40 pin PDIP 44 lead TQFP 44 pad QFN/MLF
TQFP 32 lead QFN/MLF 32 lead
Interupsi Eksternal
External interrupt
External interrupt Pin Change Interrupt (PCINT)
Perbedaan utama
Memori Arduino UNO lebih besar (Flash: 32 KB vs 8 KB, SRAM: 2 KB vs 512 byte, EEPROM 1 KB vs 512 byte)
Jumlah pin I/O Arduino UNO lebih sedikit (23 pin vs 40 pin)
Interupsi eksternal di Arduino UNO lebih banyak , ada PCINT, sedangkan di ATmega8535 tidak ada PCINT
Parameter penting yang sama:
Clock sama, jadi kecepatan sama
CPU / prosesor praktis sama, hanya berbeda periferalnya saja
Besarnya memori flash pada board Arduino Uno adalah sebesar 32 kilobyte (32768 byte)
Istilah ROM sebenarnya tidak tepat, karena memori ROM (Read Only Memory) adalah memory yang sudah diprogram di pabrik dan tidak dapat diubah oleh pengguna. Lebih detail dapat dibaca di artikel “Memori Pada Sistem Mikroprosesor“
Besar memori tersebut dapat dilihat di spesifikasi teknis (tech specs) dari situs Arduino (https://store.arduino.cc/usa/arduino-uno-rev3) , dengan screenshot sebagai berikut:
Spesifikasi Arduino UNO
Dari spesifikasi tersebut dapat dilihat bahwa memori pada Arduino UNO adalah sebagai berikut:
Flash Memory sebesar 32 KB (32768 byte)
SRAM (Static Random Access Memory) sebesar 2 KB (2048 byte)
EEPROM (Electrically Erasable Programmable Read Only Memory) sebesar 1 KB (1024 byte)
Kelebihan Arduino UNO dibandingkan PC adalah sebagai berikut:
Ukuran kecil, hanya 68.6 mm x 53.4 mm
Bobot lebih ringan, hanya 25 gram.
Keperluan daya kecil, tegangan 5 volt dengan arus maksimum 200 mA pada pin VCC, jadi konsumsi daya maksimum adalah 1 watt
Harga murah. Arduino UNO R3 asli harganya sekitar Rp 400 ribu , sedangkan Arduino UNO KW harganya Rp 50 ribu sampai Rp 70 ribu.
Antar muka digital dan analog mudah. Pin-pin pada Arduino UNO dapat dengan mudah difungsikan sebagai input dan output digital maupun analog. Sedangkan pada PC cukup sulit untuk menambahkan input output digital maupun analog.
Uraian
Berikut ini spesifikasi Arduino UNO R3 menurut situs https://store.arduino.cc/usa/arduino-uno-rev3
Spesifikasi Arduino UNO
Berikut ini batas maksimum arus dan tegangan pada ATmega328, diambil dari datasheet ATmega328.
Batas maksimum ATmega328
Berikut ini contoh harga Arduino UNO asli di toko online
Harga Arduino UNO asli
Berikut ini harga PC rakitan di toko online
Harga PC rakitan
Pada PC, untuk menambahkan kemampuan input / output digital dapat menggunakan modul FT2232HL yang disambungkan melalui port USB di PC/laptop.
FT2232HL Input output digital melalui USB
Input output analog pada PC lebih rumit lagi, karena mesti menggunakan “Data Acquisition Board” yang dihubungkan melalui USB. Pada PC sebenarnya ada input output analog melalui port speaker dan mikrofon, namun hanya cocok untuk sinyal audio, tidak cocok untuk misalnya membaca data dari sensor.