Pada percobaan ini diukur frekuensi & perioda konversi DAC (Digital to Analog Converter) tipe MCP4725 pada modul Arduino Nano dengan prosesor ATmega328.
Rangkaian sistem adalah sebagai berikut
Kode yang dipakai untuk pengujian adalah sebagai berikut:
// idea from https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog-converter-hookup-guide/all
#define MCP4725_ADDR 0x60
#include <Wire.h> //Include the Wire library to talk I2C
int counter; // how many iterations
int time_begin = 0;
int time_end = 0;
int duration;
void setup() {
Wire.begin();
Serial.begin(115200);
counter = 0;
Serial.println("start benchmark");
}
//---------------------------------------------------
void loop() {
int value; // angka yang ditulis
value = 0; // minimum value
Wire.beginTransmission(MCP4725_ADDR);
Wire.write(64); // cmd to update the DAC
Wire.write(value >> 4); // the 8 most significant bits...
Wire.write((value & 15) << 4); // the 4 least significant bits...
Wire.endTransmission();
value = 4095; // maximum value
Wire.beginTransmission(MCP4725_ADDR);
Wire.write(64); // cmd to update the DAC
Wire.write(value >> 4); // the 8 most significant bits...
Wire.write((value & 15) << 4); // the 4 least significant bits...
Wire.endTransmission();
counter = counter + 1;
if (counter >= 10000) {
float period;
int time_now = millis();
counter = 0;
duration = time_now - time_begin;
period = duration / 10000.0 / 2.0 ;
Serial.print("period (ms): ");
Serial.println(period);
// prepare next round
time_begin = time_now;
}
}
I2C 100 kHz
ATmega328 menggunakan 2 frekuensi I2C: 100 kHz dan 400 kHz. Percoban pertama menggunakan kecepatan default adalah 100 kHz.
Sinyal yang dihasilkan pada output MCP4725 adalah sebagai berikut:
Tampilan pada serial monitor adalah sebagai berikut:
start benchmark
period (ms): 0.43
period (ms): 0.43
period (ms): 0.43
period (ms): 0.43
period (ms): 0.43
period (ms): 0.43
Pengukuran dengan osiloskop menunjukkan sinyal persegi dengan frekuensi 1,166 kHz
Jumlah transisi adalah 2x frekuensi ini, jadi frekuensi konversi adalah 1,166 x 2 = 2,332 kHz
I2C 400 kHz
Pada pengukuran ini, kecepatan I2C dinaikkan menjadi 400 kHz. Caranya menggunakan fungsi Wire.setClock()
Perioda menjadi 0,15 ms
start benchmark
period (ms): 0.15
period (ms): 0.15
period (ms): 0.15
period (ms): 0.15
period (ms): 0.15
Output DAC diukur dengan osiloskop, dengan hasil sebagai berikut
Frekuensi output adalah 3,41733 kHz, sehingga frekuensi DAC adalah 2x 3,417 = 6,834 kHz
Arduino adalah kerangka kerja untuk membuat sistem elektronik open-source yang meliputi sejumlah perangkat keras dan perangkat lunak. Sebagian perangkat keras Arduino menggunakan prosesor/mikrokontroler dari keluarga ATmega.
Mikrokontroler adalah komputer kecil pada suatu keping rangkaian integrasi (integrated circuit/IC) terpadu. Pada mikrokontrole sudah ada CPU (Central Processing Unit) , memori dan periferal. Mikrokontroler umumnya dirancang untuk aplikasi yang tertanam di perangkat lain, atau dikenal dengan istilah ‘embedded system’.
Perangkat keras Arduino menggunakan mikrokontroler, namun tidak semua mikrokontroler adalah bagian dari Arduino
Berikut ini contoh mikrokontroler ATmega8535 yang tidak termasuk Arduino.
Perangkat Keras Arduino
Berikut ini contoh perangkat keras Arduino yang menggunakan mikrokontroler dari keluarga ATmega
Berikut ini contoh mikrokontroler yang tidak termasuk pada sistem Arduino:
ATmega8535
ATmega8
ATmega16
ATmega32
Mikrokontroler Secara Umum
Mikrokontroler adalah komputer kecil pada suatu keping rangkaian integrasi (integrated circuit/IC) terpadu. Pada mikrokontrole sudah ada CPU (Central Processing Unit) , memori dan periferal. Mikrokontroler umumnya dirancang untuk aplikasi yang tertanam di perangkat lain, atau dikenal dengan istilah ‘embedded system’.
Pada masa lalu, mikrokontroler umumnya dibuat dalam 1 keping chip. Pada saat ini mulai dikenal konsep SoC (System on a Chip). SoC ini menggabungkan keping silikon berisi mikrokontroler dengan komponen-komponen lain yang lebih kompleks, misalnya GPU (Graphical Processing Unit) ataupun antarmuka WiFi.
Mikrokontroler digunakan dalam berbagai produk dan perangkat yang dikontrol secara otomatis, seperti sistem kontrol mesin mobil, perangkat medis, remote control, mesin kantor, alat rumah tangga, perkakas listrik, mainan, dan sistem tertanam (embedded) lainnya. Desain dengan mikrokontroler lebih ekonomis daripada mikroprosesor karena pada mikrokontroler memori dan perangkat input/output dapat digabung dalam 1 chip, sedangkan pada mikroprosesor memori dan perangkat input/output harus ditambahkan pada chip terpisah.
Mikrokontroler ada murni digital, ada juga yang campuran antara sinyal digital dan analog. Dalam konteks internet of things (IoT), mikrokontroler adalah teknik pengumpulan data yang ekonomis dan populer, mengukur dan mengendalikan dunia fisik sebagai perangkat ‘komputasi tepi’. Kontras dari ‘komputasi tepi’ adalah ‘komputasi awan’ atau ‘cloud computing’, di mana data & informasi dikumpulkan secara terpusat untuk kemudian semua data diolah secara terpusat.
Arduino Nano ukurannya lebih kecil dibandingkan Arduino UNO
Arduino Nano cocok untuk dipasang di breadboardd
Kekurangan Arduino Nano dibandingkan Arduino UNO:
Beberapa modul tersedia sebagai shield untuk Arduino UNO, namun tidak dapat / sulit disambungkan ke Arduino Nano
Untuk prototyping yang cepat, kabel dapat langsung dimasukkan ke konektor pada Arduino UNO
Pada Arduino UNO terdapat konektor power supply. Pada Arduino Nano, power supply ini terhubung ke pin VIN, tidak melalui konektor khusus.
Berikut ini perbandingan ukuran Arduino UNO dan Nano. Arduino UNO lebih besar dibandingkan Arduino Nano.
Arduino UNO dan Arduino Nano
Berikut ini Arduino Nano dipasang di breadboard. Pada rangkaian itu Arduino Nano dihubungkan dengan LCD OLED 0.91″
Arduino Nano terpasang di breadboard
Berikut ini Arduino UNO dengan modul shield TFT LCD 2.4″. Shield dapat dipasang langsung di atas Arduino UNO. Shield ini tidak dapat dipasang ke breadboard.
Arduino UNO dan shield TFT LCD 2.4″
Berikut ini foto konektor USB (di sebelah kiri) dan konektor power (di sebelah kanan) pada Arduino UNO.
Arus maksimal masing-masing pin digital Arduino UNO dan Arduino Nano adalah 40 milliampere (mA), dengan asumsi tidak melanggar batasan arus maksimum VCC dan GND sebesar 200 mA.
Arduino UNO dan Arduino Nano menggunakan prosesor ATmega328. Arus maksimal ini dijelaskan di datasheet prosesor ATmega328 tersebut sebagai berikut:
ATmega328 absolute maximum rating
Namun demikian perlu diperhatikan batasan arus yang lain, yaitu arus maksimum di pin VCC dan GND, yaitu 200 mA. Jumlah pin pada ATmega328 adalah 23 buah, jadi kalau semua pin mengeluarkan arus yang sama, maka arus di setiap pin adalah 200/23 = 8.7 mA.
Jika ingin mengeluarkan arus 40 mA, maka maksimum jumlah pin yang memberikan arus 40 mA adalah 200/40 = 5 pin saja.
Board Arduino tidak semuanya menggunakan prosesor ATmega328. Untuk Arduino yang menggunakan prosesor lain, maka perlu dicek datasheet masing-masing prosesornya.
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:
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
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.
Beberapa rangkaian elektronik memerlukan clock dengan frekuensi tertentu untuk dapat bekerja, contohnya adalah sistem mikroprosesor/mikrokontroler dan rangkaian digital sinkron. Pada artikel ini diuraikan beberapa sumber clock dengan berbagai akurasi.
Secara ringkas sumber clock yang umum dipakai adalah sebagai berikut
Osilator berbasis induktor/kapasitor
Osilator berbasis kristal: kristal saja, kristal dengan kompensasi temperatur (TCXO dan MCXO), kristal dengan oven (OCXO), kristal dengan GPS (GPSDO)
Osilator Berbasis Induktor / Kapasitor
Osilator menghasilkan gelombang sinusoidal dengan frekuensi tertentu. Umumnya osilator dibuat dengan komponen pasif resistor, induktor dan kapasitor, serta komponen aktif transistor ataupun op-amp.
Frekuensi sinyal yang dihasilkan pada rangkaian jenis ini tergantung pada nilai induktor / kapasitor yang dipakai. Nilai induktor/kapasitor ini dapat berubah karena waktu ataupun pengaruh temperatur, sehingga frekuensi sinyal yang dihasilkan juga berubah, maka ketepatan frekuensi yang dihasilkan rendah.
Berikut ini contoh rangkaian osilator dengan komponen aktif transistor [sumber].
Osilator dengan transistor
Berikut ini adalah contoh relaxation oscillator dengan komponen aktif op-amp. [sumber]
Osilator dengan op-amp
Osilator Berbasis Kristal
Pada osilator jenis ini, sinyal clock dihasilkan menggunakan bahan piezoelektrik yang bergetar dengan suatu frekuensi tertentu. Frekuensi getaran pada bahan piezoelektrik ditentukan oleh ukurannya, sehingga frekuensi sinyal yang dihasilkan dapat sangat tepat.
Nilai frekuensi kristal umumnya dinyatakan untuk temperatur tertentu. Ukuran fisik kristal terpengaruh oleh temperatur, jadi jika temperatur berubah, maka frekuensi sinyal clock yang dihasilkan juga berubah.
Untuk dapat menghasilkan sinyal clock, kristal masih perlu disambung dengan beberapa komponen. Contoh rangkaian osilator berbasis kristal misalnya sebagai berikut [sumber]
Osilator Colpitts Crystal
Pada kebanyakan mikrokontroler, sudah disiapkan rangkaian clock di dalam mikrokontroler tersebut, sehingga untuk mengaktifkan kristal cukup disambung ke mikrokontroler dan ditambahkan 2 buah kapasitor. Nilai kapasitor umumnya disesuaikan dengan jenis & ukuran kristal yang digunakan, dan sudah ditentukan di datasheet mikrokontroler tersebut. [sumber]
Osilator kristal untuk mikrokontroler/mikroprosesor
Osilator Kristal Dengan Kompensasi Temperatur
Osilator kristal biasa mempunyai kelemahan, yaitu nilai frekuensinya masih berubah terhadap temperatur. Untuk mengatasi hal tersebut, dapat digunakan kristal yang frekuensinya dikompensasi terhadap perubahan temperatur. Komponen ini disebut sebagai Temperature Compensated Crystal (TCXO). Pada TCXO, kompensasi dilakukan secara analog dengan menambahkan rangkaian tertentu.
Ada juga kompensasi yang dilakukan secara digital dengan menambahkan mikroprosesor, dengan teknologi Microcontroller Compensation (MCXO).
TCXO dan MCXO sudah tersedia dalam bentuk modul, sehingga memudahkan untuk dipakai.
Contoh TCXO yang populer dipakai sebagai real time clock adalah DS3231 dari Maxim Integrated. DS3231 ini banyak dijual dalam bentuk modul yang sudah dilengkapi dengan batere Lithium sehingga waktu yang disimpan di dalamnya tidak hilang jika sumber listrik dimatikan.
Osilator Kristal Dengan Pengendalian Temperatur (OCXO)
Pada osilator jenis ini, sebagai sumber frekuensi digunakan kristal yang temperaturnya dijaga dengan suatu sistem pengendalian temperatur. Sistem ini disebut juga sebagai Crystal Oven ataupun Oven Controlled Crystal Oscillator (OCXO)
Dimensi OCXO cukup besar, karena di dalamnya mesti ada rangkaian pemanas, pengendali temperatur dan isolator supaya temperatur stabil.
Bentuk fisik OCXO
Perbandingan ketepatan osilator kristal dapat dilihat pada tabel berikut [sumber]
Perbandingan osilator
Osilator Kristal Dengan GPS
Jika ketepatan kristal OCXO masih kurang, maka ketepatannya masih dapat ditingkatkan dengan menggunakan bantuan sinyal GPS. Sistem ini disebut sebagai GPS Clock atau GPS disciplined oscillator (GPSDO).
Blok diagram sistem GPSDO adalah sebagai berikut [sumber]
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)
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.
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 KW di latar depan dengan Arduino Uno ORI di latar belakang
Pada sistem mikroprosesor seperti Arduino, kadang-kadang diperlukan sensor analog yang jaraknya cukup jauh dari perangkat pengendali, sehingga perlu teknik khusus untuk pengiriman data dari sensor analog tersebut. Pada jarak yang jauh, sinyal analog mudah sekali mengalami gangguan, terutama masuknya sinyal lain (noise) dan redaman dari kabel, sehingga sinyal dari sensor yang sampai ke mikroprosesor sudah tidak sama dengan sinyal aslinya.
Untuk mengatasi permasalahan tersebut, ada beberapa solusi sebagai berikut:
Menggunakan pengiriman data digital, jadi sinyal dari sensor yang analog, diubah dulu menjadi digital dengan sebuah mikrokontroler, kemudian baru data digital ini dikirim dengan kabel. Supaya lebih kuat, kabel yang panjang dapat menggunakan protokol RS-232 atau RS-485. Sinyal TTL biasa (5 volt maupun 3.3 volt) rentan jika dipakai untuk mengirim data digital jarak jauh. Protokol serial RS-232 dapat dipakai mengirim data sampai puluhan meter, sedangkan protokol serial RS-485 dapat dipakai mengirim data sampai ratusan meter.
Menggunakan Current Loop 4-20 mA
Menggunakan VCO (Voltage Controlled Oscillator). Prinsipnya adalah tegangan diubah ke frekuensi, baru sinyal frekuensi ini yang dikirim.
Menggunakan radio, seperti Wifi, LoraWAN dan sebagainya
Berikut ini contoh sistem pengiriman data sensor jarak jauh menggunakan pengiriman data digital dengan komunikasi serial dan sinyal RS485:
Pengiriman data sensor jarak jauh dengan RS-485
Cara kerja adalah sebagai berikut:
Sensor menghasilkan tegangan analog.
Tegangan analog diubah menjadi digital dengan menggunakan ADC pada mikrokontroler Arduino 1. Perlu diperhatikan juga apakah sinyal dari sensor analog sudah cukup besar untuk dapat dibaca oleh ADC. Jika kurang, maka perlu diperkuat dulu dengan amplifier. Jika frekuensi agak tinggi, mungkin diperlukan juga rangkaian sample & hold sebelum masuk ke ADC.
Data digital dikirim dengan menggunakan protokol serial melalui port serial pada Arduino 1. Level tegangannya adalah TTL sesuai dengan tegangan kerja Arduino 1. Sinyal ini sudah digital, namun belum cukup kuat untuk dikirim pada jarak jauh.
Sinyal serial TTL diubah menjadi RS-485 dengan menggunakan IC konverter TTL – RS-485
Sinyal dalam format RS485 dikirimkan dengan kabel, yang dapat dibuat agak panjang. Supaya sinyalnya bagus, mesti menggunakan kabel twisted pair, misalnya kabel yang digunakan pada kabel ethernet LAN (Local Area Network). Pada kabel LAN ada 4 pasang kabel yang sudah dipuntir (twisted). Pada pengiriman data 1 arah, cukup digunakan 1 pasang saja.
Sinyal RS-485 diubah menjadi TTL dengan IC konverter RS-485 ke TTL.
Sinyal serial dalam level TTL dimasukkan ke dalam port serial pada Arduino 2. Sinyal ini dapat langsung dibaca oleh software di Arduino 2.
Pada contoh rangkaian di atas, kabel RS485 yang dipakai pendek saja , hanya beberapa cm. Menurut spesifikasinya , RS485 dapat dipakai sampai beberapa ratus meter, tergantung kecepatan data yang dipakai. Makin cepat datanya, makin pendek jaraknya.
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
Berikut ini gambar konektor pada 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
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
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 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
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:
Pada tulisan ini diuraikan berbagai teknik untuk memasukkan firmware (program) yang sudah berupa binary (HEX) ke dalam Flash memory pada mikrokontroller keluarga AVR. Teknik tersebut secara garis besar adalah sebagai berikut:
ISP (In System Programming) atau disebut juga ICSIP (In Circuit System Programming) [1]. Pada teknik ini, firmware dimasukkan dengan protokol serial ke dalam chip mikrokontroler. Pada waktu pemrograman mikrokontroler tidak perlu dilepas dari rangkaiannya.
HVPP (High Voltage Parallel Programming). Pada teknik ini firmware dimasukkan dengan protokol paralel dengan menggunakan tegangan +12V yang lebih tinggi dari tegangan kerja (+5V).
HVSP (High Voltage Serial Programming). Pada teknik ini firmware dimasukkan dengan protokol serial dan dengan tegangan +12V. Teknik ini dipakai untuk menggantikan HVPP pada perangkat yang jumlah pinnya terbatas.
Bootloader. Pada teknik ini pada mikrokontroler diletakkan sebuah program bootloader yang dapat menerima firmware aplikasi dari luar dan kemudian memasukkan firmware itu ke flash memory. Jika menggunakan bootloader, flash memory dibagi sebagian menjadi bootloader, sebagian lagi menjadi aplikasi.
Berikut di bawah ini adalah uraian dari masing-masing teknik tersebut.
In System Programming
Pada programmer jenis ini, pemrograman dimasukkan melalui port SPI (Serial Peripheral Interface) di mikrokontroler AVR. Teknik ini dikenal juga dengan nama ISP (In System Programming), artinya mikrokontroler dapat diprogram pada sistem yang sudah tersolder, tanpa perlu mencopot mikrokontroler tersebut dari PCB.
Pin-pin yang dipakai pada metode ini adalah sebagai berikut
MOSI
MISO
SCK
Reset
Berikut ini pin ISP pada ATMega8535
pin ISP pada ATMega8535
Berikut ini rangkaian dasar pemrograman ISP pada ATMega8535
Rangkaian ISP ATMega8535
Atmel tidak menyatakan secara eksplisit bagaimana cara menyambungkan pin ISP antara mikrokontroler dengan programmer, namun salah satu konfigurasi yang sering dipakai orang adalah konfigurasi yang dipakai di STK200 (programmer ISP keluaran Atmel).
Konektor ISP standar STK200
Programmer AVR dengan ISP melalui Port Paralel
Pada teknik ini, pin-pin ISP di AVR langsung dikendalikan oleh port paralel dari PC.
Port paralel PC
Ada 2 varian rangkaian jenis ini, yaitu programmer tanpa buffer dan programmer dengan buffer. Blok diagram rangkaian tanpa buffer adalah sebagai berikut:
Programmer port paralel
Blok diagram rangkaian dengan buffer adalah sebagai berikut:
Programmer paralel dengan buffer
Contoh hardware rangkaian programer jenis ini adalah sebagai berikut:
Programmer AVR dengan ISP melalui port serial dengan bit banging
Blok diagram sederhana adalah sebagai berikut:
Programmer serial bit banging
Pin-pin ISP dikendalikan oleh port serial dari PC, . Pemrograman tidak menggunakan protokol komunikasi serial, melainkan menggunakan metode bit-banging[5]. Contoh rangkaian dapat dilihat di URL berikut. http://www.lancos.com/siprogsch.html .
Keunggulan programmer ini adalah sederhana dan cukup tangguh, jarang merusak port PC seperti yang menggunakan port parallel. Kelemahannya memerlukan port serial yang on board di desktop PC, jadi tidak dapat menggunakan port serial dari USB serial.
Programmer AVR dengan ISP melalui port serial dengan protokol serial
Pada programmer ini, PC berkomunikasi melalui protokol serial dengan sebuah mikroprosesor. Mikroprosesor ini kemudian mengendalikan pin-pin ISP pada mikrokontroler AVR yang akan diprogram. Contoh Rangkaian
Programmer AVR dengan ISP melalui port USB dengan bit-banging
Port USB
Pada programmer jenis ini, sebuah mikroprosesor (mikroprosesor programmer) dipakai untuk menerima sinyal USB langsung dari PC tanpa menggunakan chip khusus USB. Mikroprosesor programmer ini kemudian memprogram chip AVR melalui koneksi ISP. Biasanya teknik ini memanfaatkan library USB untuk AVR seperti V-USB [8] dan USBtiny [9].
Programmer USB dengan mikrokontroler
Contoh rangkaian open source:
AVR Doper [10] “AVR-Doper is an STK500 compatible In-System Programmer (ISP) and High Voltage Serial Programmer (HVSP). It comes with a built-in USB to Serial adaptor to connect directly to USB. “
USBprog “An open source all purpose tool (AVR ISP, ARM7/ARM9, AT89,JTAG, RS232, IO)” [11]
USBasp [12]. “USBasp is a USB in-circuit programmer for Atmel AVR controllers. It simply consists of an ATMega88 or an ATMega8 and a couple of passive components. The programmer uses a firmware-only USB driver, no special USB controller is needed.” Contoh implementasi USBAsp [13]
Software Khazama dapat dipakai sebagai front-end [16]
Programmer AVR dengan ISP melalui port USB dengan chip USB
Pada programmer jenis ini, sebuah mikroprosesor (mikroprosesor programmer) memberikan sinyal ISP ke mikrokontroler AVR, sedangkan sinyal USB diterima dengan chip khusus USB, biasanya IC dari keluarga FTDI.
Programmer dengan USB to serial
Contoh programmer
Bus Pirate, programmer serba guna untuk berbagai mikrokontroler [17] . Teknik pemrograman AVR dengan programmer ini dapat dibaca di [18]
Bootloader
Programmer AVR dengan bootloader melalui port serial
Pada programmer jenis ini, pada AVR yang akan diprogram diaktifkan dulu suatu program kecil bernama bootloader. PC mengirimkan software yang akan diprogramkan ke program bootloader ini , kemudian program bootloader akan memprogram memori Flash dengan program yang diinginkan tersebut.
Programmer dengan bootloader
Mikrokontroler ATMega yang baru tidak memiliki software bootloader. Untuk menjalankan bootloader, software bootloader mesti dimasukkan dulu ke dalam flash memory dengan ISP ataupun dengan paralel programmer. Sebagian memori flash akan dipakai untuk program bootloader, sehingga memori yang tersisa untuk program aplikasi akan berkurang.
Memori bootloader di flash
Contoh software bootloader
Bootloader dibahas di application note 109 [19], detail teknisnya diuraikan di sini [20]
Variasi programmer ini adalah dengan menggunakan perangkat USB to Serial, sehingga dapat dipakai pada Desktop/Laptop yang memiliki port USB namun tidak memiliki port serial.
Programmer ini mengakses flash di AVR melalui port paralel di AVR, bukan melalui port ISP Pada waktu pemrograman diperlukan tegangan +12V pada pin tertentu, oleh karena itu teknik ini disebut programmer tegangan tinggi. Tegangan tinggi di sini tidak mencapai puluhan ataupun ratusan volt, tapi hanya +12 V. Keunggulannya utama programmer adalah dapat dipakai untuk memprogram chip AVR yang sempat dimatikan SPI atau pin Resetnya. Kelemahannya adalah rangkaian programmernya cukup kompleks dan juga chip mikrokontroler yang diprogram harus dilepas dari PCB.
Programmer high voltage
Terdapat beberapa rangkaian programmer yang berbasis berbasis dari board STK500 sebagai berikut:
Berikut ini foto Arduino Nano clone dan hasil thermal imaging dari barang yang sama. Nampak di bagian atas ada 2 sumber panas yaitu prosesor ATMega dan LED indikator yang selalu menyala.
Thermal Image Arduino Nano
Komponen yang aktif di bagian bawah adalah Bagian bawah USB interface CH340 . IC regulator 5 volt AMX117 tidak terlalu panas karena power diambil dari USB.
Arduino Nano V3 clone tampak bawah
Arduino nano bagian bawah dilihat secara thermal
Thermal imaging menggunakan FLiR Dev Kit dari Sparkfun dengan komponen utama Lepton® longwave infrared (LWIR).
Output dari LWIR ini sangat sederhana, bisa dibilang hanya informasi relatif mana yang panas mana yang dingin, tidak sampai ke temperatur detail di setiap pixel. Kalau mau sampai seperti itu mesti NDA dulu dengan Lepton plus minimum order 1000 unit 🙂
Pada umumnya Arduino diprogram dengan menggunakan software compiler Arduino. Namun kadang-kadang kita ingin memasukkan file HEX yang dibuat dengan software lain, misal WINAVR atau CodeVision. Untuk itu kita dapat menggunakan beberapa teknik berikut ini:
Pada tulisan ini saya mengukur dan membandingkan kapasitas sebuah powerbank Vivan M04. Pertama kita lihat dulu spesifikasi powerbank tersebut:
Kapasitas: 3500 mAh
Input pengisian: DC5V/1A
Output (untuk mengisi smartphone): DC5V/0.6A
Pengukuran yang dilakukan ada 2 macam:
Mengukur energi yang masuk ke dalam powerbank ketika mengisi batere powerbank
Mengukur energi yang keluar dari dalam powebank ketika powerbank bertindak sebagai charger
Perhitungan Kapasitas Powerbank Menurut Spesifikasi
Kapasitas powerbank adalah 3500 mAh, artinya dapat memberikan arus 0.6 A selama 3500/600 = 5.833 jam
E = P x t = V x I x t = 5 volt x 0.6 ampere x 5.833 jam = 17.5 watt jam
Jadi kapasitas penyimpanan energi powerbank Vivan M04 tersebut adalah 17.5 watt jam
Mengukur Energi Masuk
Energi masuk di sini maksudnya adalah energi yang masuk ke powerbank ketika powerbank diisi / dicas. Pengukuran dilakukan dengan menggunakan kWh meter, baik kWh meter mekanik maupun elektronik. Untuk mudahnya dalam eksperimen ini saya menggunakan kWh meter elektronik.
Berhubung pemakaian energi untuk pengisian powerbank kecil, angka pengisian sulit terlihat di kWh meter biasa, jadi lebih baik menggunakan kWh meter elektronik yang lebih teliti.
Berikut ini proses pengisian powerbank melalui alat pengukur energi Energy Meter TS-838. Alat ini pada dasarnya adalah kWh meter elektronik yang juga dapat merekam parameter lain seperti arus, tegangan dan faktor daya. Pada foto di bawah nampak powerbank sedang diisi dengan arus pengisian 0.055 A, atau 55 miliampere.
Pengisian powerbank melalui kWh meter
Powerbank Vivan M04 tersebut di spesifikasinya disebutkan berkapasitas 3500 mAh. Angka ini dapat dibandingkan dengan energi masuk yang terukur di kWh meter elektronik.
Setelah powerbank penuh, angka di kWh meter dilihat sebagai berikut:
Powerbank Vivan M04 sudah terisi penuh
Dari pengukuran tersebut dapat disimpulkan bahwa untuk mengisi powerbank sampai penuh memerlukan energi sebanyak 0.02 kWh = 20 Wh = 20 watt jam
Mengukur Energi Keluar
Energi yang keluar dari powerbank diukur dengan cara sebagai berikut:
Resistor dipakai sebagai beban untuk menggantikan smartphone. Karena resistor memiliki resistansi yang konstan, maka dengan hanya mengukur tegangan kita dapat langsung menghitung besar arus yang keluar dari powerbank. Jadi tidak perlu repot mengukur arus dan tegangan bersamaan.
Nilai resistor diatur supaya arus keluar dari powerbank masih di bawah batas maksimal arus powerbank, namun tidak terlalu kecil, karena kalau arus terlalu kecil maka pengukuran akan terlalu lama
Tegangan pada resistor diukur dengan menggunakan Arduino Nano
Hasil pengukuran dikirim ke sebuah komputer melalui komunikasi serial. Catatan pengukuran ini diperlukan karena kita ingin tahu berapa lama powerbank ini dapat memberikan arus tersebut. Pencatatan mesti dilakukan di komputer, karena Arduino hanya memiliki memori yang kecil.
Perhitungan nilai resistor beban adalah sebagai berikut:
Tegangan output adalah 5 volt
Arus output maksimal adalah 0.6 ampere
Maka nilai resistor sekurang-kurangnya adalah R=V/I = 5/0.6 = 8.3333 ohm
Dari percobaan dan berdasarkan komponen yang ada, maka dipakai beberapa resistor seri sehingga dicapai nilai resistor beban total = 12.5 ohm
Berikut ini skema pengukuran dengan Arduino.
Skema rangkaian pengukuran energi keluar dengan Arduino
Perangkat lunak di Arduino adalah sebagai berikut:
const int analogInPin = A0; // Analog input pin that the potentiometer is attached to
const int analogOutPin = 9; // Analog output pin that the LED is attached to
int ledPin = 13; // select the pin for the LED
int sensorValue = 0; // value read from the pot
int outputValue = 0; // value output to the PWM (analog out)
unsigned long next_action=0;
unsigned long waktu=0;
int led_status=0;
void setup() {
// initialize serial communications at 9600 bps:
Serial.begin(9600);
pinMode(ledPin, OUTPUT); // LED kedip untuk status
}
Kabel dari powerbank menggunakan kabel USB biasa. Bagian ujungnya dipotong supaya dapat mengakses kabel 5 volt dan GND pada kabel USB tersebut. Kabel ini sudah tidak dapat dipakai karena ujung USB micro tersebut sudah rusak. Terlihat pada gambar di bawah bahwa kabel USB ini tidak menggunakan shield, sehingga kabel jenis ini cukup rentan terhadap gangguan dari sinyal lain.
Memotong kabel USB
Output serial dari Arduino direkam di PC dengan menggunakan software RealTerm (http://realterm.sourceforge.net/). Tujuan perekaman ini untuk mendapatkan waktu yang tepat ketika powerbank sudah habis isinya.
Perekaman data port serial dengan Realterm
Setelah powerbank habis, data hasil rekaman dimasukkan ke Excel untuk dilihat nilainya. Ternyata powerbank aktif sampai dengan detik 207180.
Data rekaman di Excel
Hasil pengukuran adalah sebagai berikut
Resistansi total beban adalah 12.5 ohm.
Tegangan keluar dari powerbank adalah 4.49 volt, kurang dari yang disebutkan di spesifikasinya (5 volt)
Arus dapat dihitung: I = V/R = 0.3592 ampere, masih di bawah batas maksimal yaitu 0.6 ampere
Powerbank aktif selama 20718 detik, atau sama dengan 5.755 jam
Perhitungan energi menurut pengukuran
Diketahui sebagai berikut:
Arus = 0.3592 ampere
Tegangan = 4.49 volt
Waktu = 5.755 jam
Energi = P x t = V x I x t = 4.49 volt x 0.3592 ampere x 5.755 jam = 9.2817 watt jam
Jadi kapasitas powerbank ini adalah sekitar 53% dari yang tertulis di spesifikasi.
Alat-alat yang dipakai pada pengukuran ini
Powerbank Vivan M04 sebagai powerbank yang diuji
KWH meter elektronik Energy Meter TS-838 (untuk mengukur energi masuk ke powerbank)
Charger USB Samsung Traveller (untuk mengisi powerbank)
Multimeter Kyoritsu model 1009 (untuk mengukur tegangan, arus dan nilai resistor).
Komputer desktop (untuk perekaman data)
Software Realterm di Windows untuk mencatat data dari port serial
Kesimpulan
Berikut ini ringkasan hasil perhitungan dan pengukuran untuk powerbank Vivan M04
Kapasitas menurut spesifikasi
17.5 watt jam
Energi masuk untuk pengisian sampai penuh
20 watt jam
Energi keluar
9.2817 watt jam
Perhatian: pengukuran baru dilakukan 1 kali saja, jadi belum dapat dijadikan kesimpulan akhir. Untuk lebih teliti masih perlu dilakukan pengukuran dengan kondisi percobaan dan alat ukur yang berbeda.