Apakah program yang sudah diupload pada Arduino bisa diedit dan diupload ulang?

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
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
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:

"C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-objcopy" -I ihex Blink.ino.hex -O binary blink.bin

Isi file dilihat dengan utility HxD (), hasilnya sebagai berikut:

Kode biner program di Arduino
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:

"C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-objdump" –j .sec1 –d –m avr5 Blink.ino.hex > blink.asm

File blink.asm berisi kode dalam bahasa assembly, namun membacanya cukup sulit. Contoh kodenya dapat dilihat di tautan berikut ini: blink.asm

 

Referensi

 

Port yang terdapat pada Arduino UNO

Berikut ini daftar port pada Arduino UNO:

Nama Port Fungsi
Power Jack catu daya 7 sampai 12 volt
USB type B catu daya 5 volt & komunikasi serial
IOREF referensi +5 volt
RESET pin reset pada ATmega328
3V3 supply 3,3 volt
+5V supply 5 volt
GND ground
VIN tegangan masuk 7 sampai 12 volt
A0 input analog & I/O digital
A1 input analog & I/O digital
A2 input analog & I/O digital
A3 input analog & I/O digital
A4 input analog & I/O digital
A5 input analog & I/O digital
D19 I/O digital
D18 I/O digital
AREF Pin referensi ADC (Analog to Digital Converter)
D13 I/O digital
D12 I/O digital
D11 I/O digital
D10 I/O digital
D9 I/O digital
D8 I/O digital
D7 I/O digital
D6 I/O digital
D5 I/O digital
D4 I/O digital
D3 I/O digital
D2 I/O digital
D1 I/O digital
D0 I/O digital
   
   
   

Ilustrasi Port Arduino UNO

Berikut ini ilustrasi port pada Arduino UNO (sumber)

Berikut ini ilustrasi port pada Arduino UNO (sumber)

Port pada Arduino UNO
Port pada Arduino UNO

Referensi

Cara Membuat Smart Room

Smart Room dapat dibuat dengan menggunakan mikroprosesor. Berikut ini tahap-tahap pembuatan smart room tersebut.

Menentukan Tujuan Smart Room

Tahap pertama dari sebuah pekerjaan/proyek adalah menentukan tujuan utama pekerjaan tersebut.

Berikut ini  beberapa alternatif tujuan sebuah smart room

  • Meningkatkan kenyamanan ruangan, bisa dari sisi pencahayaan, temperatur, kelembaban
  • Menghemat pemakaian energi. Suatu ruangan memerlukan temperatur untuk penerangan dan pemanasan/pendinginan
  • Meningkatkan keamanan ruangan

Menentukan Spesifikasi Sistem

Setelah tujuan ditentukan,berikutnya adalah menentukan spesifikasi teknis dari ruangan tersebut.

Hal-hal yang perlu diperhatikan pada spesifikasi smart-room:

  • Apakah temperatur perlu diukur?
  • Apakah temperatur perlu dikendalikan?
  • Apakah kelembaban perlu diukur?
  • Apakah kelembaban perlu dikendalikan?
  • Apakah cahaya perlu diukur?
  • Apakah cahaya perlu dikendalikan?
  • Temperatur ruangan diukur dengan ketelitian tertentu, misal 1 derajat Celcius, 0,5 derajat Celcius dan sebagainya
  • Rentang temperatur ruangan ditentukan. Hal ini untuk menentukan rentang sensor temperatur yang diperlukan.
  • Target temperatur yang diinginkan
  • Ketelitian pengukuran kelembaban.
  • Rentang kelembaban ruangan yang perlu diukur
  • Target kelembaban yang diinginkan.

Membuat Perancangan Sistem Secara Keseluruhan

Pada tahap ini dibuat arsitektur sistem secara keseluruhan. Aliran data & informasi ditentukan.

Perancangan perangkat keras

Pada tahap ini dilakukan pembuatan rancangan perangkat keras.

Hal-hal yang perlu ditentukan:

  • Menentukan mikrokontroler yang dipakai , jika menggunakan mikroprosesor
  • Menentukan sensor-sensor yang dipakai
  • Menentukan aktuator-aktuator yang diperlukan
  • Menentukan catu daya (power supply) yang diperlukan
  • Kotak untuk menyimpan perangkat

Berikut ini contoh sistem smart room dengan sebuah mikrokontroler sebagai pengendali utama.

Blok Diagram Perangkat Keras Smart-Room
Blok Diagram Perangkat Keras Smart-Room

Contoh prosesor populer yang dapat dipakai di antaranya:

  • Arduino UNO (ATmega328)
  • Arduino Nano (ATmega328)
  • ESP32 (Espressif)
  • ESP8266

ESP32 dan ESP8266 dapat dipakai jika kita memerlukan WiFi atau Bluetooth. Jika tidak perlu komunikasi nirkabel, cukup menggunakan Arduino berbasis ATmega328.

Contoh sensor yang dapat dipakai

  • LM35: sensor temperatur analog
  • DS18S20: sensor temperatur digital
  • BMP280: sensor temperatur dan tekanan udara
  • BME280: sensor temperatur, kelembaban dan tekanan udara
  • LDR (Light Dependent Resistor): sensor cahaya
  • Photodiode : sensor cahaya

Contoh Display yang dapat dipakai:

  • LCD 16×2
  • LCD 20×4
  • LCD matrix

Perancangan perangkat lunak

Pada tahap ini dilakukan hal-hal sebagai berikut

  • menentukan apakah akan menggunakan sistem operasi. pada sistem seperti ini sering dipakai sistem operasi waktu nyata (Real Time Operating System /RTOS ). Salah satu RTOS yang sering dipakai adalah FreeRTOS (https://www.freertos.org/)
  • membuat model diagram alir (flow chart)
  • membuat model aliran data (data flow diagram)
  • membuat model FSM (finite state machine) jika pada sistem terdapat proses yang memerlukan FSM
  • membuat model pengolahan sinyal dengan DSP (Digital Signal Processing), jika terdapat pengolahan sinyal secara digital. Umumnya melibatkan filter digital , equalizer digital, perekaman data digital.

Implementasi Perangkat Keras

Pada tahap ini dibuat papan rangkaian dengan PCB (Printed Circuit Board)

Implementasi Perangkat Lunak

Pada tahap ini dilakukan proses pembuatan perangkat lunak untuk mikrokontroler

Pengujian sistem

Pada tahap ini dilakukan pengujian untuk membandingkan antara perilaku sistem dengan spesifikasi yang diinginkan. Untuk itu diperlukan pengukuran-pengukuran untuk kemudian dibandingkan dengan angka-angka yang diinginkan pada spesifikasi.

Pengujian ini biasanya dilakukan secara kuantitatif, sehingga cukup obyektif.

Perangkat yang diperlukan untuk pengujian sistem di antaranya

  • Termometer digital atau analog sesuai dengan rentang temperatur dan ketelitian yang diinginkan
  • Higrometer digital atau analog sesuai dengan rentang kelembaban dan ketelitian pengukuran kelembaban.
  • Light Meter untuk mengukur pencahayaan ruangan
  • Voltmeter / Wattmeter untuk mengukur unjuk kerja tegangan/ arus/ daya pada rangkaian.

Validasi Sistem

Pada tahap ini dilakukan perbandingan antara tujuan sistem dengan perilaku sistem. Jika sistem yang dibuat sudah dapat menyelesaikan permasalahan di tujuan, maka sistem dapat dikatakan sudah berhasil divalidasi.

Validasi ini biasanya dilakukan secara kualitatif sehinggak agak sedikit subyektif.

Perancangan Filter Digital Bandpass Dengan Arduino

Arduino UNO
Arduino UNO

Arduino dapat dipakai untuk mengembangkan filter digital bandpass.

Sebelum dilakukan pembuatan perlu dibuat dulu  spesifikasi yang diinginkan, setelah itu baru dikaji apakah bisa atau tidak.

Informasi yang diperlukan adalah sebagai berikut:

  • sinyal input analog/digital? berapa volt?
  • sinyal output analog/digital? berapa volt?
  • bandpas dari berapa Hz sampai berapa Hz?
  • noise maksimum berapa dB?
  • perlu ADC & DAC berapa bit? -> ini dapat diturunkan dari noise yang diinginkan

Filter bandpass digital secara teoritis dapat dibuat di Arduino Nano/UNO, namun mesti diperhatikan bahwa komputasi di prosesorATmega328 terbatas, kalau spesifikasi rada tinggi mesti cari prosesor lain.

Analisis Kebutuhan /  Requirement

Pada tahap ini dirumuskan latar belakang masalah , rumusan permasalah yang perlu diselesaikan, serta tujuan sistem.

Spesifikasi

Pada tahap ini ditentukan spesikasi teknis sistem.

Perancangan

Pada tahap ini dilakukan perancangan hardware dan software.

Diagram pengolahan sinyal digital, meliputi filter anti aliasing, ADC, DSP, DAC, filter rekonstruksi
Diagram pengolahan sinyal digital

Simulasi

Setelah perancangan hardware dan software dibuat, perlu dilakukan simulasi untuk mengecek apakah rangkaian dan software yang dibuat berfungsi baik. Tahap simulasi filter secara umum dibahas di artikel Simulasi Pengolahan Sinyal Digital

Implementasi

Pada tahap ini dilakukan pembuatan hardware dan software.

Pada tahap prototype dapat dilakukan dengan breadboard, namun pada sistem yang lebih serius perlu sampai merancang kotak, tampilan  dan tombol-tombol yang diperlukan.

Pengujian

Pada tahap ini dilakuan pengujian untuk melihat kesesuaian antara sifat sistem yang dicapai dengan spesifikasi yang diinginkan.

Validasi

Pada tahap ini dilakukan validasi, artinya membandingkan antara requirement dan apakah sistem dapat menyelesaikan masalah di requirement.

Referensi

 

 

FreeRTOS Untuk Arduino AVR, ESP32 dan STM32F103 Blue Pill

Sistem operasi FreeRTOS dapat diaplikasikan pada berbagai mikrokontroler. Pada tulisan ini diulas SDK (IDE + compiler) yang dapat dipakai untuk menjalankan FreeRTOS pada Arduino (UNO+Nano), ESP32 dan STM32F103 (Blue Pill)

Arduino

Arduino Nano
Arduino Nano

Espressif ESP32

ESP32 Lolin Wemos
ESP32 Lolin Wemos

STM32F103C8T6 (Blue Pill)

STM32F103C8T Blue Pill
STM32F103C8T Blue Pill

Perbedaan Arduino ORI dan KW

Apa sih perbedaan utama antara Arduino ORI dan KW? Apakah perbedaannya besar sekali? Pada tulisan ini akan dibahas satu aspek saja, yaitu dari chip USB yang dipakai

Harga

Perbedaan utama tentunya adalah harga. Arduino UNO ori harganya 300 ribuan, sedangkan Arduino UNO KW/clone harganya di bisa bawah 100 ribu.  Arduino Nano original harganya di atas 100 ribu, sedangkan yang KW/clone sekitar 30 ribu sampai 40 ribu.

Hardware

Dari sisi hardware, Arduino Nano / UNO ori maupun KW menggunakan prosesor ATMega168 / ATmega328, dengan variasi ada yang menggunakan kemasan DIP, ada yang SMD. Perbedaan ada pada chip USB to Serial untuk Arduino Nano. Arduino Nano ORI menggunakan chip FTDI untuk menyambungkan port serial ke USB, sedangkan Arduino Nano KW/clone seringnya menggunakan chip CH340 untuk menyambungkan port serial ke USB. Arduino Nano KW  ada yang menggunakan chip FTDI (FT232), namun harganya biasanya lebih mahal daripada Arduino Nano dengan chip CH340.

CH340 di bagian bawah Arduino Nano

Software

Dari sisi software yang dimasukkan ke dalamnya, tidak ada perbedaan pada Arduino Nano/UNO baik yang KW maupun ORI, keduanya sama-sama menggunakan ATMega168 atau ATMega328, jadi tidak ada perbedaan source code.

Driver di Host

USB pada Arduino perlu driver pada komputer host yang dipakai. Komputer host yang umum dipakai adalah berbasis Windows, OSX dan Linux. Pada tulisan ini hanya dibahas Windows dan OSX, karena yang Linux belum dicoba.

Arduino yang clone seringnya untuk USB serial menggunakan chip USB to serial tipe CH340. Arduino yang original biasanya menggunakan chip FTDI. Driver FTDI di Windows 10 sudah built-in, jadi tinggal pasang saja Arduino tersebut ke  USB maka akan langsung dikenali.

Arduino yang KW umumnya menggunakan chip CH340, sedangkan driver CH340 tidak built-in di Windows 10, sehingga driver untuk CH340 mesti download & install dulu, baru kemudian Arduino tersebutdapat dikenali. Agak repot, namun proses ini hanya dilakukan sekali saja, setelah itu tidak perlu dilakukan lagi.

Kasus berbeda pada sistem operasi OSX (Apple). Pada OSX (Apple) sudah ada driver untuk FTDI, sehingga untuk Arduino yang ORI tinggal pasang saja USBnya, maka akan langsung dikenali.

Driver CH340 pada OSX belum ada built in, sehingga perlu install dulu. Selain itu juga driver CH340 secara default tidak bisa diinstall di OSX, karena sertifikatnya tidak diakui. Jadi untuk install driver CH340, pengecekan sertifikat driver harus dinonaktifkan dulu, jadi prosesnya agak ribet.

Pada Linux, driver untuk CH340 dan FTDI sudah built in, jadi tidak ada masalah seperti pada OSX. Ref: https://sparks.gogo.co.nz/ch340.html

Kesimpulan : kalau pakai sistem operasi Windows 10, pakai Arduino KW saja, cuma beda install driver CH340 paling juga 10 menitan. Jika pakai OSX dan tidak mau repot, pilih saja Arduino yang menggunakan chip FTDI.

Arduino nano di latar depan dengan Arduino Uno di latar belakang
Arduino nano KW di latar depan dengan Arduino Uno ORI di latar belakang

Referensi

Rangkaian Programmer pada Arduino UNO Dan Nano

Modul mikrokontroler Arduino sangat mudah digunakan, salah satunya karena pada modul Arduino sudah disertakan rangkaian pemrograman yang mudah dipakai, dan juga terintegrasi dengan perangkat lunak Arduino yang dipakai untuk membuat software.

Berikut ini diuraikan rangkaian programmer pada Arduino UNO dan Arduino Nano. Kedua jenis Arduino ini sangat mirip, menggunakan komponen yang sama, hanya bentuknya berbeda. Komponen paling penting adalah mikrokontroler ATMega328.

Pin pada ATMega328
Pin pada ATMega328

Berikut ini gambar konektor pada Arduino UNO:

Arduino UNO
Pin pada Arduino UNO

Konektor yang terkait pemrograman adalah USB-Plug  dan In Circuit Serial Programmer (ICSP). Seringnya yang dipakai untuk pemrograman adalah USB Plug, sedangkan ICSP jarang dipakai.

Arduino Nano
Arduino Nano

Pada Arduino Nano konektor untuk pemrograman adalah USB Mini dan ICSP (In Circuit Serial Programmer).

Konektor ICSP yang dipakai pada Arduino UNO dan Nano menggunakan header 3×2, dengan daftar pin sebagai berikut:

Konektor ICSP pada Arduino Nano dan UNO
Konektor ICSP pada Arduino Nano dan UNO

Pin yang dipakai adalah MISO, MOSI, SCK, Reset, GND dan +5V. Semua pin ini terhubung langsung ke ATMega328:

  • MISO (pin 18 / PB4)
  • MOSI (pin 17 / PB3)
  • SCK (pin 19 / PB5)
  • Reset (pin 1 / PC6)
  • GND (pin 8 & pin 22)
  • +5V (pin 7 / VCC)

Pin-pin ini sesuai dengan rangkaian dasar pemrograman ISP sebagai berikut:

Rangkaian ISP ATMega8535
Rangkaian In System Programming pada ATMega

Cara lain untuk pemrograman Arduino UNO dan Nano adalah menggunakan port USB. Port USB ini masuk ke suatu konverter USB ke Serial, kemudian pin serial TX dan RX dihubungka ke pin RX dan TX pada ATMega, jadi program dikirim melalui port serial pada ATMega. Selain itu pin DTR juga dipakai untuk melakukan reset pada ATMega.

Rangkaian USB to serial pada Arduino UNO dan Nano
Rangkaian USB to serial pada Arduino UNO dan Nano

Supaya program dapat dimasukkan melalui port serial, perlu ada software bootloader yang dimasukkan ke dalam flash memory di ATMega. Program bootloader ini belum ada pada ATMega yang keluaran pabrik, jadi bootloader ini perlu dimasukkan dulu ke dalam ATMega melalui programmer ISP (In System Programming) atau programmer paralel, seperti dijelaskan lebih lanjut di artikel “Programmer AVR“.

Bootloader ini memakai sebagian kecil memori flash, kurang lebih 512 byte, jadi memori aplikasi yang tersisa adalah 32 kilobyte dikurangi memori yang terpakai untuk bootloader. Diagram memori bootloader dan aplikasi dapat dilihat pada gambar berikut:

Memori bootloader di flash
Memori bootloader di flash