Modul Tutorial Lengkap Arduino untuk Pemula

Assalamu‘alaikum wr. wb.

Hello guys, Kembali lagi bersama Inzaghi's Blog! Apakah kalian tertarik dengan IoT (Internet of Things)? Memang sih dasar-dasar dari IoT adalah mempelajari Sistem Terbenam (Embedded System). Salah satunya adalah dengan mempelajari Arduino.

Ilustrasi Arduino


Sumber Tutorial : Arduinogetstarted.com
Sumber : Arduino.cc

DASAR-DASAR TENTANG ARDUINO

Papan Arduino Uno


A. Apa itu Arduino?

Arduino adalah pengendali mikro single-board yang bersifat open source yang dirancang untuk memudahkan penggunaan elektronik dalam berbagai bidang. Perangkat kerasnya memiliki prosesor Atmel AVR dan Software-nya memiliki bahasa pemrograman sendiri.

Arduino merupakan open source yang ditujukan kepada siapa saja yang ingin membuat prototype peralatan Elektronik interaktif berdasarkan hardware maupun software yang fleksibel dan mudah digunakan. Mikrokontroler diprogram menggunakan Bahasa Pemrograman Arduino yang memiliki kemiripan syntax dengan Bahasa Pemrograman C/C++. Karena sifatnya yang terbuka maka siapa saja dapat mengunduh skema hardware Arduino dan membuat sendiri Arduino-nya.

Mikrokontroler Arduino menggunakan keluarga mikrokontroler ATMega yang dirilis oleh Atmel, namun ada individu/perusahaan yang membuat clone Arduino dengan menggunakan mikrokontroler lain dan tetap kompatibel dengan software Arduino IDE. Hal ini bertujuan untuk fleksibilitas, program dimasukkan melalui Bootloader meskipun ada opsi untuk mem-bypass bootloader dan menggunakan pengunduh file .hex untuk memprogram mikrokontroler secara langsung melalui port ISP.

Layanan Platform Arduino telah menjadi sangat populer di kalangan orang-orang yang baru memulai dengan elektronik. Tidak seperti kebanyakan papan sirkuit yang dapat diprogram sebelumnya, Arduino tidak memerlukan perangkat keras terpisah (disebut downloader atau programmer) untuk memuat kode baru ke papan – Anda cukup menggunakan kabel USB. Selain itu, Arduino IDE menggunakan versi yang disederhanakan dari C++, hal ini membuatnya pengguna lebih mudah untuk belajar memprogram Arduino.

B. Fungsi dan Kelebihan Arduino

Software dan hardware Arduino dirancang dengan mudah digunakan untuk seniman, perancang, penggemar, peretas, pemula, dan siapa pun yang tertarik untuk membuat objek atau lingkungan interaktif. Arduino dapat berinteraksi dengan tombol, LED, motor, speaker, unit GPS, kamera, internet, dan bahkan ponsel pintar atau TV Anda! Fleksibilitas ini dikombinasikan dengan fakta bahwa software Arduino dapat didownload secara gratis, harga board-nya atau papan hardware cukup murah, dan Arduino cukup mudah dipelajari. Faktanya, Arduino memilik komunitas pengguna yang besar yang telah berkontribusi mengasilkan kode atau script dan library atau paket script untuk membuat berbagai macam Proyek berbasis Arduino. 

Apa Kelebihan Arduino?
  1. Murah atau Terjangkau – Papan atau Board (perangkat keras) Arduino biasanya dijual relatif murah (Antara Rp. 299.000 hingga Rp. 799.000 saja) dibandingkan dengan platform mikrokontroler pro lainnya. Jika ingin lebih murah lagi, tentu bisa dibuat sendiri dan itu sangat mungkin sekali karena semua sumber daya seperti rangkaian untuk membuat Arduino sendiri tersedia lengkap di website Arduino.cc bahkan di website-website komunitas Arduino lainnya juga ada. Tidak hanya cocok untuk Windows, namun juga cocok bekerja di Linux maupun MacOS.
  2. Pemrogramannya Sederhana dan Mudah – Perlu diketahui bahwa lingkungan pemrograman di Arduino mudah digunakan untuk pemula, dan cukup fleksibel bagi mereka yang sudah tingkat lanjut. Untuk guru/dosen, Arduino berbasis pada lingkungan pemrograman Processing, sehingga jika mahasiswa atau murid-murid terbiasa menggunakan Processing tentu saja akan mudah menggunakan Arduino. Bahasa yang digunakan Arduino adalah bahasa C++.

1. Memiliki Software yang Open Source

Perangkat lunak Arduino IDE dipublikasikan sebagai Open Source, tersedia bagi para Programmer berpengalaman untuk pengembangan project lebih lanjut. Bahasanya bisa dikembangkan lebih lanjut melalui pustaka-pustaka C++ yang berbasis pada Bahasa C untuk AVR.

Desain Hardware yang Open Source – Perangkat keras Arduino berbasis mikrokontroler ATMEGA8, ATMEGA168, ATMEGA328 dan ATMEGA1280 (yang terbaru ATMEGA2560). Dengan demikian siapa saja bisa membuatnya (dan kemudian bisa menjualnya) perangkat keras Arduino ini, apalagi bootloader tersedia langsung dari perangkat lunak Arduino IDE-nya. Bisa juga menggunakan breadboard atau Project Board untuk membuat perangkat Arduino beserta Periperal-periperal lain yang dibutuhkan.

2. Murah atau Terjangkau

Papan atau Board (perangkat keras) Arduino biasanya dijual relatif murah (Antara Rp. 299.000 hingga Rp. 799.000 saja) dibandingkan dengan platform mikrokontroler pro lainnya. Jika ingin lebih murah lagi, tentu bisa dibuat sendiri dan itu sangat mungkin sekali karena semua sumber daya seperti rangkaian untuk membuat Arduino sendiri tersedia lengkap di website Arduino.cc bahkan di website-website komunitas Arduino lainnya juga ada. Tidak hanya cocok untuk Windows, namun juga cocok bekerja di Linux maupun MacOS.

3. Pemrogramannya Sederhana dan Mudah

Perlu diketahui bahwa lingkungan pemrograman di Arduino mudah digunakan untuk pemula, dan cukup fleksibel bagi mereka yang sudah tingkat lanjut. Untuk guru/dosen, Arduino berbasis pada lingkungan pemrograman Processing, sehingga jika mahasiswa atau murid-murid terbiasa menggunakan Processing tentu saja akan mudah menggunakan Arduino. Bahasa yang digunakan Arduino adalah Bahasa C++.

4. Memiliki Software yang Open Source

Perangkat lunak Arduino IDE dipublikasikan sebagai Open Source, tersedia bagi para programmer berpengalaman untuk pengembangan project lebih lanjut. Bahasanya bisa dikembangkan lebih lanjut melalui pustaka-pustaka C++ yang berbasis pada Bahasa C untuk AVR.

5. Desain Hardware yang Open Source

Perangkat keras Arduino berbasis mikrokontroler ATMEGA8, ATMEGA168, ATMEGA328 dan ATMEGA1280 (yang terbaru ATMEGA2560). Dengan demikian siapa saja bisa membuatnya (dan kemudian bisa menjualnya) perangkat keras Arduino ini, apalagi bootloader tersedia langsung dari perangkat lunak Arduino IDE-nya. Bisa juga menggunakan breadboard atau Project Board untuk membuat perangkat Arduino beserta Periperal-periperal lain yang dibutuhkan.

C. Tahapan Belajar Arduino untuk Pemula

1. Mengenal Arduino



Seperti yang sudah dibahas sebelumnya, Arduino adalah sebuah platform yang terdiri dari Software berupa Arduino IDE dan Hardware berupa Arduino Board. Tujuan dari Arduino adalah pengguna akan dimudahkan dalam mempelajari pemrograman dan pembuatan suatu Proyek-proyek elektronika maupun Otomasi.

2. Pemilihan Papan atau Board Arduino

Arduino memiliki banyak board atau papan yang berbeda. Setiap board atau papan Arduino dilengkapi dengan mikrokontroler. Namun kebanyakan mikrokontroler yang digunakan adalah dari keluarga AVR. Jadi ada berbagai papan Arduino seperti Uno, Nano, Mega dan lainnya. Namun tidak perlu bingung, sebagai pemula cukup menggunakan Arduino Uno untuk belajar Arduino, mengapa? Karena Board Arduino Uno sangat mudah ditemukan di toko elektronik atau toko online.


3. Mengenal Software Arduino IDE

Software Arduino IDE adalah software untuk memprogram board atau papan Arduino. Itulah mengapa penting untuk mempelajari komponen Arduino IDE (Integrated Development Environment).

Sumber : Docs.Arduino.cc

Berikut penjelasan setiap bagian software Arduino IDE :
  • Verify Code : Berfungsi untuk mengecek code apakah ada yang error atau sudah benar.
  • Upload : Berfungsi untuk mengisi program yang sudah diketik pada software Arduino IDE ke papan Arduino.
  • New Sketch : Berfungsi untuk membuat halaman sketch atau code yang baru.
  • Open Sketch : Berfungsi untuk membuka sketch atau code yang sudah ada. Contohnya file yang berekstensi .ino.
  • Save Sketch : Berfungsi untuk menyimpan sketch atau code yang kita edit maupun kita ingin save supaya aman.
  • Serial Monitor : Berfungsi untuk menampilkan serial monitor untuk membaca komunikasi serial RX TX antara laptop/PC dengan papan/board Arduino.
  • Void Setup : Berfungsi untuk wadah menuliskan setingan pin hingga setingan library (fungsi khusus).
  • Void Loop : Berfungsi untuk menjalankan program/code secara berulang tanpa batas.
  • Keterangan Aplikasi : Berfungsi sebagai indikator keberhasilan atau error.
  • Konsole Log : Berfungsi sebagai log saat melakukan compile maupun upload code/sketch ke papan Arduino.
  • Line Number Sketch : Berfungsi sebagai tanda cursor komputer berada pada baris ke berapa.
  • Info Board dan Port Koneksi : Berfungsi sebagai indikator bahwa setingan PC/Laptop sudah terhubung ke papan Arduino yang benar sesuai dengan tipe papan Arduino.

D. Komponen Arduino

Menurut Situs Resmi Arduino, Arduino adalah perangkat elektronik open source dan sering digunakan untuk merancang dan membuat perangkat dan perangkat lunak elektronik yang mudah digunakan. Arduino dirancang sedemikian rupa untuk memudahkan penggunaan perangkat elektronik di berbagai bidang.

Arduino berisi beberapa komponen penting, seperti Pin, Mikrokontroler, dan Konektor, yang akan dibahas lebih detail nanti. Selanjutnya Arduino juga menggunakan bahasa pemrograman Arduino Language yang sedikit mirip dengan Bahasa Pemrograman C++.

Biasanya Arduino digunakan untuk mengembangkan beberapa sistem seperti pengontrol suhu, sensor untuk pertanian, pengontrol perangkat pintar, dll.
Seperti yang telah disebutkan sebelumnya, Arduino mengandung beberapa komponen penting. Berikut adalah penjelasan dari masing-masing komponen Arduino :

1. Mikrokontroler

Komponen pertama adalah mikrokontroler. Mikrokontroler adalah chip yang memungkinkan Anda untuk memprogram Arduino Anda dan memproses output berdasarkan input yang Anda berikan. Jadi mikrokontroler ini adalah otak dari Arduino. Berbagai jenis chip yang digunakan tergantung pada jenis Arduino.

2. Pin

Berikutnya adalah pin. Pin ini digunakan untuk menghubungkan Arduino ke berbagai komponen yang kita gunakan. Arduino sendiri memiliki dua jenis pin yaitu pin analog dan pin digital.

a. Pin Digital

Pin ini dapat menerima atau mengirim sinyal digital. Digital berarti sinyal yang diterima atau dikirimkan akan bernilai 1 atau 0 alias HIGH atau LOW. Kebanyakan perangkat Arduino memiliki 14 pin input output digital.

b. Pin Analog

Pin analog pada Arduino adalah pin yang digunakan untuk menerima input analog. Ia dapat menerima tegangan analog dari 0V sampai dengan 5V. Umumnya, setiap jenis Arduino memiliki setidaknya satu pin analog.

Setiap pin pada Arduino biasanya dapat dikonfigurasikan ke dalam dua mode, yaitu input dan output. Pada mode input, pin akan diatur untuk dapat menerima sinyal input. Sama halnya pada mode output, pin akan diatur untuk mengirimkan sinyal.

3. Konektor

Komponen yang terakhir adalah konektor. Arduino sendiri memiliki dua jenis konektor yang cukup penting, yaitu power konektor dan serial konektor.

a. Power konektor

Power konektor adalah konektor yang digunakan untuk menyalurkan daya untuk Arduino. Daya ini digunakan untuk menghidupkan Arduino dan juga perangkat lain yang terhubung dengannya, seperti sensor dan layar monitoring.

b. Serial konektor

Serial konektor ini biasanya digunakan untuk menghubungkan Arduino dengan perangkatmu seperti komputer atau laptop. Konektor ini menggunakan port USB standar pada Arduino. Selain itu, konektor ini juga dapat digunakan sebagai power konektor. Namun, serial konektor hanya diimplementasikan pada perangkat Arduino yang lebih baru.

E. Kelebihan dan Kekurangan Arduino

Jika kita berbicara tentang perangkat mikrokontroler, Arduino memiliki daya tarik tersendiri bagi penggunanya. Alasannya adalah karena memiliki beberapa keunggulan yang membuatnya lebih kompetitif dibandingkan mikrokontroler lainnya. Berikut adalah kelebihan dan kekurangannya :

1. Kelebihan Arduino
  • Modul Arduino yang tersedia sudah siap digunakan (shield) seperti modul GPS, LAN, dan SD card reader.
  • Harga yang relatif terjangkau.
  • Mudah digunakan oleh pemula.
  • Ada banyak library yang dapat digunakan untuk memudahkan kamu dalam bereksperimen.
  • Memiliki port USB yang dapat digunakan untuk transfer data dan untuk mengalirkan sumber daya.
  • Memiliki Arduino IDE yang digunakan untuk menulis dan meng-upload program ke mikrokontroler.
  • Konsumsi daya yang rendah.

2. Kekurangan Arduino
  • Tidak bisa diinstal OS sehingga tidak dapat digunakan sebagai komputer pribadi.
  • Jika Anda ingin mengubah atau memodifikasi program lama, kamu harus memodifikasi seluruh program.
  • Beberapa tipe Arduino tidak menyediakan modul wired atau wireless secara built-in.
  • Memiliki kapasitas memori yang kecil.
  • Ruang penyimpanan terpotong karena digunakan untuk bootloader.
  • Memiliki clock speed yang rendah.


PROTOKOL KOMUNIKASI ARDUINO

Sumber Artikel : Deviceplus.com

A. Protokol UART

Protokol komunikasi pertama yang akan kami bahas adalah Universal Asynchronous Receiver/Transmitter (UART). UART adalah bentuk komunikasi serial karena data ditransmisikan sebagai bit berurutan (kita akan membahasnya sebentar lagi). Pengkabelan yang terlibat dalam pengaturan komunikasi UART sangat sederhana: satu jalur untuk mentransmisikan data (TX) dan satu jalur untuk menerima data (RX). Seperti yang Anda duga, jalur TX digunakan untuk mengirim data ke perangkat, dan jalur RX digunakan untuk menerima data. Bersama-sama jalur TX dan RX dari perangkat yang menggunakan komunikasi serial membentuk port serial tempat komunikasi dapat terjadi.

Diagram Koneksi Hardware UART

Istilah UART sebenarnya mengacu pada perangkat keras onboard yang mengelola pengemasan dan penerjemahan data serial. Agar perangkat dapat berkomunikasi melalui protokol UART, ia harus memiliki perangkat keras ini! Di Arduino Uno, ada satu port serial yang didedikasikan untuk komunikasi dengan komputer yang terhubung dengan Arduino. Betul sekali! USB, yang merupakan singkatan dari Universal Serial Bus, adalah port serial! Di Arduino Uno, koneksi USB ini dipecah melalui perangkat keras onboard menjadi dua pin digital, GPIO 0 dan GPIO 1, yang dapat digunakan dalam proyek yang melibatkan komunikasi serial dengan elektronik selain komputer.

GPIO 0 dan GPIO 1 adalah Serial RX dan TX pada Arduino Uno. Pin GPIO apa pun dapat digunakan sebagai Serial RX atau TX dengan library SoftwareSerial

Kita juga dapat menggunakan library SoftwareSerial Arduino (SoftwareSerial.h) untuk menggunakan pin GPIO lain sebagai jalur Serial RX dan TX.

UART disebut asinkron karena komunikasi tidak bergantung pada sinyal jam yang disinkronkan antara dua perangkat yang mencoba berkomunikasi satu sama lain. Karena kecepatan komunikasi tidak ditentukan melalui sinyal stabil ini, perangkat "pengirim" tidak dapat memastikan bahwa "penerima" mendapatkan data yang benar. Oleh karena itu, perangkat memecah data menjadi potongan berukuran tetap untuk memastikan bahwa data yang diterima sama dengan data yang dikirim.

Paket data UART terlihat seperti ini :

Visualisasi Paket Data UART

Perangkat yang berkomunikasi melalui UART mengirimkan paket dengan ukuran yang telah ditentukan sebelumnya yang berisi informasi tambahan mengenai awal dan akhir pesan dan konfirmasi apakah pesan diterima dengan benar. Sebagai contoh, untuk memulai komunikasi, perangkat transmisi menarik jalur transmisi menjadi rendah, menandakan dimulainya paket data. Namun, dalam jangka panjang, ini berarti UART lebih lambat dibandingkan dengan bentuk komunikasi yang disinkronkan karena hanya sebagian dari data yang dikirimkan untuk aplikasi perangkat (Sisanya untuk komunikasi itu sendiri!)

Saat mengimplementasikan komunikasi serial UART pada sebagian besar platform tersemat seperti Arduino, pengguna tidak harus berurusan dengan komunikasi pada level bit. Alih-alih, platform seringkali menyediakan pustaka perangkat lunak tingkat tinggi yang merupakan satu-satunya aspek dari proses komunikasi yang harus dihadapi pengguna. Di platform Arduino, pengguna dapat menggunakan library Serial dan SoftwareSerial untuk mengimplementasikan komunikasi UART untuk proyek mereka.

Berikut adalah Referensi singkat C++ untuk Arduino Serial dan Inisialisasi dan Penggunaan SoftwareSerial :


Salah satu aspek penting yang perlu diperhatikan tentang komunikasi UART adalah ia dirancang untuk komunikasi hanya antara dua perangkat pada satu waktu. Karena protokol hanya mengirim bit yang menunjukkan awal pesan, isi pesan, dan akhir pesan, tidak ada metode untuk membedakan beberapa perangkat pengirim dan penerima pada jalur yang sama. Jika lebih dari satu perangkat mencoba untuk mengirimkan data pada jalur yang sama, pertentangan bus akan terjadi, dan perangkat penerima kemungkinan besar akan menerima data sampah yang tidak dapat digunakan!

Selain itu, UART bersifat half-duplex, yang berarti meskipun komunikasi dapat terjadi dua arah, kedua perangkat tidak dapat mengirimkan data satu sama lain secara bersamaan. Dalam proyek di mana dua Arduino berkomunikasi satu sama lain melalui koneksi serial, misalnya, ini berarti bahwa pada waktu tertentu, hanya satu Arduino yang dapat "berbicara" dengan yang lain. Namun, untuk sebagian besar aplikasi, fakta ini relatif tidak penting dan sama sekali tidak merugikan.

B. Protokol SPI

Protokol komunikasi berikutnya yang akan kita bahas adalah Serial Peripheral Interface (SPI). SPI berbeda dari UART dalam beberapa hal utama, yaitu :
  • Sinkronus (Synchronous)
  • Mengikuti model master-slave, di mana ada satu perangkat master dan beberapa perangkat slave.
  • Diperlukan lebih dari dua baris untuk implementasi

Diagram koneksi perangkat keras untuk SPI sedikit lebih rumit, dan terlihat seperti ini :
  • MOSI (“Master Out Slave In”) : Saluran transmisi data dari master ke slave
  • SCK ("Jam"): Jalur jam yang menentukan kecepatan transmisi dan karakteristik awal/akhir transmisi
  • SS ("Pemilihan Slave") : Baris untuk master untuk memilih slave tertentu untuk berkomunikasi
  • MISO (“Master In Slave Out”) : Saluran transmisi data dari slave ke master

Diagram Koneksi Hardware SPI

Fitur pertama tentang SPI yang perlu diperhatikan adalah mengikuti model master-slave. Ini berarti bahwa komunikasi bergantung pada pendefinisian satu perangkat sebagai master, dan perangkat lain sebagai slave. Ini menciptakan hierarki antara perangkat yang menandakan perangkat mana yang secara efektif "mengendalikan" yang lain. Kami akan membahas model master-slave ini segera ketika kami menjelaskan seperti apa contoh komunikasi antara perangkat master dan slave.

Kami mencatat sebelumnya bahwa banyak Slave dapat dihubungkan ke satu perangkat master. Diagram perangkat keras untuk sistem seperti itu mungkin terlihat seperti ini :

Multi-slave terhubung ke Satu Master

SPI tidak memerlukan jalur pengirim dan penerima yang terpisah untuk setiap Slave yang terhubung ke master. Satu jalur penerima umum (MISO) dan satu jalur transmisi umum (MOSI), bersama dengan satu jalur jam umum (SCK) terhubung antara semua Slave dan master. Perangkat master memutuskan Slave mana yang berkomunikasi dengannya melalui saluran SS terpisah untuk setiap Slave. Ini berarti bahwa setiap Slave tambahan yang berkomunikasi dengan master memerlukan pin GPIO lain di sisi master.

SPI sinkron, yang berarti bahwa komunikasi antara master dan slave terkait erat dengan sinyal jam (gelombang persegi frekuensi tetap) yang ditentukan oleh perangkat master. Di sini kita melihat salah satu efek langsung dari model master-slave. Perangkat master menggerakkan komunikasi dengan menentukan kecepatan komunikasi melalui sinyal jam, dan Slave merespons dengan berkomunikasi pada kecepatan itu. Definisi kecepatan ini berfungsi untuk kecepatan komunikasi apa pun yang diputuskan oleh master (dalam kecepatan maksimum yang dapat ditoleransi oleh perangkat pendukung).

Dalam SPI, dua fitur spesifik dari sinyal jam menentukan awal dan akhir transmisi data: polaritas jam (CPOL) dan fase jam (CPHA). CPOL mengacu pada keadaan diam (baik rendah atau tinggi) dari sinyal clock. Untuk menghemat daya, perangkat akan menempatkan garis jam pada keadaan diam saat tidak berkomunikasi dengan Slave mana pun, dan dua opsi yang tersedia untuk keadaan diam ini adalah rendah atau tinggi. CPHA mengacu pada tepi sinyal clock tempat data ditangkap. Gelombang persegi memiliki dua tepi (tepi naik dan tepi turun), dan bergantung pada pengaturan CPHA, data diambil baik di tepi naik atau tepi turun.

Ada 4 (Empat) Kombinasi CPOL dan CPHA yang berbeda, yang dapat diringkas dalam sebuah tabel di bawah ini :


Wikipedia melakukan pekerjaan luar biasa yang secara grafis mewakili pengaturan CPOL dan CPHA dan hubungannya dengan data yang sedang dikirim!

Pengaturan CPOL dan CPHA divisualisasikan (Oleh Wikipedia)

Sekarang kita akan fokus pada implementasi SPI pada Arduino dengan menggunakan Arduino sebagai master device (SPI.h). Koneksi pin digital SPI untuk SCK, MOSI, dan MISO sudah ditentukan sebelumnya pada papan Arduino. Untuk Arduino Uno, koneksinya adalah sebagai berikut :
  • SCK : GPIO 13 atau ICSP 3
  • MOSI : GPIO 11 atau ICSP 4
  • MISO : GPIO 12 atau ICSP 1
  • SS : GPIO 10

Pin digital apa pun juga dapat digunakan untuk pin SS. Untuk memilih perangkat, pin digital ini harus digerakkan rendah.

Pin MOSI, MISO, dan SCK dipecah pada header ICSP serta pada GPIO 11, GPIO 12, dan GPIO 13

Berikut Referensi singkat C++ untuk Inisialisasi dan Penggunaan Arduino SPI :


SPI bersifat full-duplex, artinya komunikasi selalu terjadi dua arah, meskipun aplikasi hanya membutuhkan transfer data terjadi satu arah. Transfer data full-duplex SPI biasanya diimplementasikan dengan register geser. (Lihat lampiran untuk tutorial tentang register geser!) Ini berarti bahwa setiap bit dibaca, bit-bit sebelumnya dipindahkan ke satu tempat. Bit paling depan kemudian dilepas dan dikirim kembali melalui koneksi SPI ke perangkat lain!

C. Protokol I2C

Inter-Integrated Circuit (I2C / I2C), dilafalkan "i-squared-c" atau "i-kuadrat-c" atau "i-two-c", adalah protokol komunikasi terakhir yang akan kita bahas dalam tutorial ini. Meskipun implementasinya adalah yang paling rumit dari ketiga protokol, I2C mengatasi beberapa kelemahan dalam protokol komunikasi lainnya, memberikannya keunggulan dibandingkan yang lain dalam beberapa aplikasi. Ini termasuk :
  • Kemampuan untuk menghubungkan banyak master ke banyak Slave.
  • Sinkronisitas (seperti SPI), yang berarti komunikasi berkecepatan lebih tinggi.
  • Kesederhanaan : implementasi hanya membutuhkan dua kabel dan beberapa Resistor.
Pada tingkat perangkat keras, I2C adalah antarmuka dua kabel—hanya dua kabel yang diperlukan untuk koneksi I2C adalah jalur data (disebut SDA) dan jalur jam (disebut SCL). Jalur data dan jam ditarik tinggi dalam keadaan diam, dan ketika data perlu dikirim melalui koneksi, jalur ditarik rendah melalui beberapa sirkuit MOSFET. Untuk keperluan tutorial ini, kita tidak akan membahas operasi MOSFET di dalam sirkuit I2C. Fakta penting yang harus diperhatikan adalah bahwa sistemnya adalah saluran terbuka, yang berarti saluran hanya dapat didorong rendah oleh perangkat. Jadi ketika menggunakan I2C dalam proyek, sangat penting untuk menyertakan resistor pull-up (biasanya sekitar 4,7 kΩ) untuk memastikan bahwa saluran benar-benar ditarik tinggi dalam keadaan diam.


I2C unik karena memecahkan masalah antarmuka dengan beberapa perangkat budak melalui pengalamatan. Sama seperti dalam komunikasi SPI, I2C memanfaatkan model master-Slave untuk membangun "hierarki" komunikasi. Namun, alih-alih memilih budak melalui jalur digital terpisah, master memilih budak melalui alamat byte unik mereka. Alamat ini mungkin terlihat seperti ini: 0x1B. Ini berarti menghubungkan lebih banyak Slave ke master tidak memerlukan jalur digital tambahan. Selama setiap Slave memiliki alamat yang unik, aplikasi akan tetap dapat membedakan budak pada alamat ini saja. Anda dapat menganggap alamat ini seperti nama. Untuk memanggil fungsi Slave, master hanya memanggil namanya, dan hanya budak itu yang merespons.

Bagian alamat dan data dari Jalur Komunikasi I2C mungkin terlihat seperti ini.


Perhatikan bit ACK dan NACK pada jalur komunikasi. Bit-bit ini menunjukkan apakah budak yang dialamatkan merespons komunikasi atau tidak — suatu cara untuk memeriksa secara berkala apakah komunikasi terjadi seperti yang diharapkan atau tidak. Bit-bit ini, tentu saja, tidak terkait dengan alamat atau bit data yang dikirim, tetapi dalam skema besar komunikasi, mereka menambahkan sedikit waktu ekstra untuk komunikasi dibandingkan dengan banyak bit awal dan akhir serta jeda yang terjadi pada protokol seperti UART.

I2C memberikan budak kebebasan untuk memutuskan seperti apa permintaan komunikasi itu. Budak yang berbeda memerlukan byte yang berbeda untuk ditulis dalam urutan yang berbeda melalui jalur SDA untuk menulis dan meminta informasi dari mereka. Dalam beberapa modul akselerometer, misalnya, byte ditulis untuk menunjukkan register perangkat keras mana yang ingin dibaca oleh master sebelum permintaan baca apa pun dibuat. Untuk spesifikasi ini, pengguna harus merujuk ke lembar data budak untuk alamat perangkat, alamat register, dan pengaturan perangkat.

Pada Arduino, implementasi I2C terjadi melalui Wire library (Wire.h). Arduino dapat dikonfigurasi sebagai perangkat I2C master atau slave. Pada Arduino Uno, koneksinya adalah sebagai berikut :
  • SDA : Analog Pin 4
  • SCL : Analog Pin 5

I2C (Kawat), SDA adalah Analog Pin 4 (A4), dan SCL adalah Analog Pin 5 (A5)

Berikut Referensi singkat C++ untuk Inisialisasi dan Penggunaan Arduino I2C :


Beberapa master dapat dihubungkan melalui bus I2C hanya dengan menghubungkan jalur SDA dan SCL mereka ke jalur bus. Namun, hanya satu master yang dapat berkomunikasi dengan budak pada satu waktu, karena memiliki banyak perangkat yang mencoba berkomunikasi satu sama lain akan menyebabkan persaingan bus. Demikian pula, komunikasi tidak dapat terjadi secara dua arah dari master ke slave dan dari slave ke master pada saat yang bersamaan karena hal itu juga akan menyebabkan perselisihan bus. Ini membuat I2C setengah dupleks, seperti UART!

Terakhir, beberapa perangkat master tidak dapat berkomunikasi satu sama lain melalui bus I2C yang sama. Dalam aplikasi di mana banyak master terhubung ke budak, master mungkin berkomunikasi satu sama lain melalui bus terpisah atau melalui protokol komunikasi terpisah.


CARA DOWNLOAD DAN MENGGUNAKAN ARDUINO IDE

Sumber Artikel : Kelasarduino.com dan Adifani.net

Sebagian dari kita yang baru mengenal Arduino, baik itu sekedar gambaran atau cerita orang lain, mungkin ingin mengunduh dan menginstall Software Arduino IDE. Sebenarnya, kita bisa mengunduh (Download) Arduino IDE di Windows, Linux, ataupun di macOS. Kali ini saya hanya memberikan Tutorial menginstall Arduino IDE untuk pengguna Windows saja.

A. Proses Download Arduino IDE

1. Kunjungi Website Resmi Arduino


Pertama, kunjungi terlebih dahulu di Website Resmi-nya Arduino di sini. Kemudian, pilih Sistem Operasi (OS) yang kamu miliki. Misalnya, saya pilih Windows maka ada banyak pilihan, seperti ZIP File, MSI Installer, dan ada Opsi lainnya jika Anda menggunakan Windows 10 atau 11. Misalnya kita pilih yang "Win 10 and newer, 64 bits".

Kini telah tersedia Arduino IDE Versi 2.0.x, Anda juga bisa memilih Versi yang lebih rendah yaitu 1.8.x dengan cara mengeklik di sini.


Kemudian, pilihlah pada Tombol "Just Download" karena kita tidak perlu mendonasi ke Arduino dan diabaikan saja.

2. Tunggu saat Proses Download


Boleh saja kita abaikan untuk di bagian Improvisasi Survei Singkat dari Arduino sambil menunggu Download-annya selesai. Jika sudah selesai, maka lanjut ke Langkah berikutnya dengan menuju ke File Explorer dan Klik pada Software yang telah kita Install.


3. Menginstal Software Arduino IDE (Melakukan Setup)

Selanjutnya, kita akan melakukan Instalasi dengan Arduino IDE Setup. Kemudian, ikutilah perintah selanjutnya saat melakukan Setup.


Kemudian, pilihlah opsi "Only for me (User)", kemudian pilih pada Tombol "Next".


Pilihlah Destinasi Folder sebelum melakukan "Install". Lalu, tunggulah sampai Instalasi selesai.


Setelah selesai melakukan Instalasi, maka kita menekan Tombol "Finish".


4. Install Hardware/Driver sebelum memulai Software Arduino IDE

Jika saat menjalankan Arduino IDE muncul Widows Security Alert, maka yang Anda harus lakukan adalah menekan Tombol "Allow Access".


Selanjutnya akan diarahkan ke User Account Control (UAC) dan lanjut, kemudian Anda akan diminta untuk melakukan Install Device Software dari Windows Security.


 Maka akan seperti ini tampilannya :


Agar lebih jelasnya, silakan Tonton beberapa Video ini di YouTube :




B. Menggunakan Arduino IDE


Seharusnya di Arduino IDE, digunakan untuk Board Arduino saja. Akan tetapi, kita juga bisa menggunakan Arduino IDE selain Board Arduino, misalnya ESP32 dan ESP8266.

Board ESP32 yang saya gunakan saat menggunakan Arduino IDE

1. Instalasi Board ESP32/ESP8288 di Arduino IDE

Misalnya, saya ingin menggunakan Board ESP32 dan ingin mencobanya di Arduino IDE. Maka kita harus melakukan Instalasi terlebih dahulu. Untuk Informasi lebih lanjut mengenai Instalasi ESP32 dan ESP8266 di Arduino IDE, silakan lihat di sini (ESP32) atau di sini (ESP8266).

Pertama, kita buka terlebih dahulu Arduino IDE. Kemudian, kita arahkan ke bagian "File --> Preferences".


Kemudian, ketiklah Link/Tautan di bawah ini pada Preferences di Arduino IDE (di bagian "Additional boards manager URLs") :

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

Kemudian centanglah pada bagian "Verify code after upload". Untuk selengkapnya, silakan lihat pada Gambar di bawah ini :


Catatan :
Jika Anda sudah memiliki URL Papan ESP8266, Anda dapat memisahkan URL dengan koma sebagai berikut :

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json

Kemudian, klik Tombol "OK". Namun, jika belum bisa menekan Tombol OK, maka kita klik di Tombol Tautan, kemudian periksa kembali URL kamu. Kemudian, klik OK


Jika sudah semuanya, kemudian kita arahkan ke bagian "Tools --> Management".


Kemudian carilah "ESP32" atau "ES8266", lalu klik "Install".


Inilah Tampilan saat Install di Library Manager :


Kemudian, kembali lagi ke Board Manager dan ketiklah "ESP32". Lalu, Install Driver untuk ESP32.


2. Menghubungkan Driver ESP32/ESP8266 dan USB

Jika sudah selesai, maka kita akan melakukan Instalasi Driver terlebih dahulu. Jika Anda belum mempunyai Driver, silakan lihat di sini (Untuk Windows 10) atau di sini (Untuk semua Versi Windows) untuk USB CH340g.

Kemudian carilah File ZIP untuk CH340 yang telah kita Download. Kemudian, klik pada "SETUP.EXE", dan Install-lah Driver tersebut.


Kemudian, Restart Komputer Anda dan ulangi lagi untuk mencolokkan USB dan ESP32/ESP8266 yang telah kita Install Driver-tersebut.


3. Merangkai dan Menulis Kode

Misalnya saya ingin membuat Sensor PIR dengan Lampu LED, maka saya akan merangkai terlebih dahulu. Anda bisa menggunakan Arduino Uno atau ESP32/ESP8266. Jika Anda menggunakan ESP32 (seperti saya), maka pahami terlebih dahulu Pin-pinnya (Pinout) dari ESP32.

Dan inilah Pinout untuk ESP8266 jika kalian menggunakan ESP8266 :

ESP8266 Pinout

Dan inilah contoh Rangkaian untuk Project PIR Sensor dengan LED dengan menggunakan ESP32 yang telah saya buat :



Kemudian, kita masukkan kodenya ke dalam Arduino IDE, lalu kita tulis kode programnya. Dan inilah contohnya :


Jika sudah, maka kita klik di bagian "Select Board --> Select other board and port".


Kemudian, pilihlah Board yang kamu pakai, boleh Arduino atau bukan Arduino. Misalnya, saya pakai Board ESP32 maka saya cari "ESP32". Lalu, kita pilih juga Port yang Anda gunakan. Jika tidak ketemu, maka kalian periksa kembali di "Disk Management" untuk Pengguna Windows.


Jika sudah selesai, maka klik pada Tombol "OK". Kemudian, kita Upload Kode yang telah kita tulis di Arduino IDE.



Dan inilah hasilnya, Lampunya menyala ketika Tangan kita menyentuh PIR Sensor :


Anda juga bisa mencoba Proyek sederhana lainnya misalnya menggunakan Sensor Ultrasonik, Micro Servo, Sensor Cahaya, Sensor Suhu, Sensor Kelembaban Tanah, dan lain-lainnya. Namun, akan kami buatkan Artikel secara terpisah mengenai Proyek Sederhana dengan menggunakan ESP32 di Arduino IDE.


SINTAKSIS KODE PROGRAM ARDUINO


A. Struktur Dasar pada Program Arduino (Setup dan Loop)

Karakteristik penulisan kode program Arduino sangatlah sederhana. Hanya terdiri atas dua fungsi utama, yaitu void setup() dan void loop(). Perlu kamu ketahui bahwa fungsi void pada Arduino itu untuk mendeklarasikan.

void setup() {
  // semua kode yang di sini akan dibaca sekali oleh Arduino
}

void loop() {
  //semua kode yang ada di sini akan dibaca
  //berulang kali (terus menerus) oleh Arduino
}

Kedua fungsi tersebut memiliki keterkaitan satu sama lain. Apabila salah satu fungsi tak terdapat di sketch, maka kemungkinan besar sketch-mu akan error.

Jadi, pastikan untuk menulis kedua fungsi tersebut meskipun salah satunya tak digunakan atau tak memiliki pernyataan di dalamnya.

Mari kita bahas lebih dalam tentang perbedaan fungsi void setup() dan void loop() pada pemrograman Arduino.

1. void setup()

Fungsi void setup pada Arduino adalah sebagai bentuk inisialisasi atau pengenalan dalam program Arduino dan hanya dieksekusi sekali sejak program dijalankan.

Umumnya fungsi ini digunakan untuk pendefinisian mode pin atau memulai komunikasi serial. Perhatikan contoh fungsi void setup() di bawah ini :

void setup()
{
    pinMode(13,OUTPUT);
}

Keterangan :

Dalam perintah tersebut terdapat pernyataan atau statement yang berisi penginisialisasian pin 13 sebagai pin output atau keluaran.

Ataupun contoh lainnya dari fungsi void setup() adalah :

void setup()
{
    pinMode(13, OUTPUT);  // menentukan pin 13 sebagai OUTPUT
    pinMode(3, INPUT);    // menentukan pin 3 sebagai INPUT
    Serial.begin(9600);  // untuk komunikasi Arduino dengan komputer
}

2. void loop()

Setelah void setup() dijalankan, selanjutnya program akan menjalankan fungsi void loop().

Fungsi ini akan dieksekusi terus-menerus secara berurutan hingga program berhenti dijalankan. Silahkan lihat contoh fungsi void loop() di bawah ini :

void loop()
{
    digitalWrite(13, HIGH);
    delay(1000);
}

Untuk beberapa kasus pemrograman yang kompleks, terkadang programmer juga menambahkan void baru untuk mempermudah pemrograman. Jadi void baru ini nantinya bisa diletakkan setelah atau sebelum void loop().

Ataupun contoh lainnya dari fungsi void loop() adalah :

void setup() {
    digitalWrite(13, HIGH);  //untuk memberikan 5V (nyala)  kepada pin 13.
    digitalWrite(13, LOW);   //untuk memberikan 0V (mati) kepada pin 13.
    analogWrite(3, 225);     //untuk memberikan nilai 225 (setara dengan 5V) kepada pin 3.

    Serial.print(namasensor);        //menampilkan nilai sensor yang disimpan di variabel nama sensor
    Serial.print("Selamat Datang");   //menampilkan teks Selamat Datang pada Serial Monitor
}
B. Sintaksis Dasar pada Program Arduino

Secara umum, syntax atau sintaks dikenal sebagai seperangkat aturan tata bahasa untuk kata atau klausa dalam pembentukan kalimat. Sedangkan dalam bahasa pemrograman, sintaks diartikan sebagai aturan dalam penulisan kode program agar kode tersebut dapat dipahami oleh komputer. Sintaks di Arduino juga dapat dianggap sebagai aturan khusus untuk menulis kode program Arduino.

Beberapa Sintaks dasar pemrograman Arduino Uno antara lain :

1. Titik Koma (Semicolon)

Tanda Titik Koma adalah Syntax wajib dalam Pemrograman Arduino, sama seperti di beberapa Bahasa Pemrograman seperti C/C++, C#, Java, JavaScript, dll (Kecuali Python). Biasanya Sintaks ini ditempatkan pada akhir pernyataan. Contohnya seperti berikut ini :

int x = 13;

2. Kurung Kurawal (Curly Braces)

Kurung kurawal digunakan untuk menentukan titik awal dan akhir dari blok fungsi. Contohnya bisa Anda lihat dibawah ini :

void loop(){
 isi program
}

3. #define

Fungsi #define pada Arduino yaitu memungkinkan programmer dalam memberi nama untuk nilai konstan sebelum program dapat dikompilasi, yang sama seperti yang ditemukan di Bahasa C dan C++.

Untuk menyatakan nomor pin yang digunakan, dapat ditulis dengan format sebagai berikut :

#define ledPin 3

Contoh :

#define a 3  //Benar
#define a 3; //Error
#define a=3 //Error
Keterangan :
  • ledPin = variabel yang digunakan
  • 3 = nilai(value) atau pin yang sedang digunakan

4. #include

Fungsi #include pada Arduino yaitu untuk memasukkan library ke dalam sketch. Dimana fungsi dari library arduino adalah untuk memudahkan pengguna dalam melakukan pengodingan, yang sama seperti yang ditemukan di Bahasa C dan C++.

Penggunaan Sintaks sangat sederhana. Anda hanya perlu menambahkan nama Library yang ingin Anda impor ke dalam program setelah sintaks. Misalnya, seperti yang ditunjukkan di bawah ini :

#include <LiquidCrystal.h>

5. Komentar

Jika Anda bertanya bagaimana cara mencatat program yang sedang kita lakukan di Arduino IDE? Kemudian, sebagai tanggapan, Anda dapat menggunakan sintaks komentar.

Sintaks komentar pada program Arduino adalah sintaks yang menambahkan informasi pada program yang sedang dibuat.

Sehingga kata atau kalimat yang diberi sintaks komentar tak akan terbaca oleh compiler. Setidaknya ada dua jenis sintaks komentar yang perlu Anda ketahui :

a. Sintaks komentar satu baris

Untuk membuat komentar hanya menggunakan satu baris, Anda dapat menggunakan sintaks garis miring ganda "//". Berikut adalah contoh penggunaan sintaks.

// isi komentar

Contoh :

#define a = 3

digitalWrite(a,1); //Turn the LED on
b. Sintaks komentar lebih dari satu baris

Untuk membuat komentar multi-baris, Anda harus menggunakan sintaks garis miring ganda dan bintang (asterisk).

Di mana komentar yang ingin Anda sisipkan berada di tengah. Berikut adalah contoh penggunaannya :

/* isi komentar */

C. Tipe Data dan Variabel pada Program Arduino

1. Tipe Data

Berikut ini adalah tabel jenis tipe data pada Arduino yang sering digunakan, hampir mirip seperti di Bahasa C.

Tipe Data

Lebar Data

Jangkauan

char

1 byte

-128 s/d 127

unsigned char

1 byte

0 s/d 255

byte

1 byte

0 s/d 255

word

2 byte

1 s/d 65535

int

2 byte

-32768 s/d 32767

unsigned int

2 byte

0 s/d 65535

long

4 byte

-2147438648 s/d 2147438647

unsigned long

4 byte

0 s/d 4294967295

float

4 byte

-3.4028235E+38 s/d 3.4028235E+38


Format penulisan tipe data Arduino pada program ini sangat sederhana. Anda hanya perlu meletakkannya sebelum variabel yang ingin Anda deklarasikan dengan spasi di antaranya.

Misalnya, Anda ingin mendeklarasikan variabel bernama “cobaCoba” dengan tipe data integer dan menggunakan pin 5. Kemudian tuliskan perintah berikut :

int cobaCoba = 5;

Jadi fungsi int pada Arduino IDE pada awal variabel adalah untuk mendeklarasikan bahwa variabel tersebut bertipe integer.

2. Variabel

Variabel bahasa pemrograman Arduino dapat didefinisikan sebagai wadah untuk menyimpan atau mempertahankan data.

Kita bebas memilih nama variabel apa saja yang kita inginkan, asalkan memenuhi syarat sebagai berikut :
  • Tidak menggunakan spasi
  • Maksimal 32 karakter
  • Tidak menggunakan istilah baku dalam bahasa C Arduino

Sebagai contoh, misalkan kamu ingin mendefinisikan nilai pin 2 dengan variabel “ganteng” dan menggunakan tipe data integer. Maka contoh penulisannya yaitu :

int cobaCoba = 5;

D. Nilai Konstan pada Program Arduino

Pada dasarnya Arduino sudah memiliki beberapa variabel dengan nilai yang disebut konstanta.

Karena nilainya sudah ditentukan, tidak perlu mengaturnya terlebih dahulu. Berikut adalah berbagai nilai konstanta yang perlu Anda ketahui :

1. TRUE/FALSE

TRUE dan FALSE adalah konstanta Boolean yang digunakan untuk mendefinisikan level logika. Apakah ia bernilai benar (TRUE) atau salah (FALSE).

TRUE didefinisikan sebagai 1 dan FALSE sebagai 0. Lihat contoh format penulisannya berikut ini :

if(c==TRUE) {
    perintah;
}

2. HIGH/LOW

Variabel konstan HIGH dan LOW biasanya digunakan untuk menentukan status pin saat membaca dan menulis data ke pin digital. Jika ada yang bertanya arti HIGH dan LOW pada Arduino? Kira-kira penjelasannya seperti ini :

HIGH didefinisikan sebagai 1, ON, 5 volt, atau menyala. Sedangkan LOW didefinisikan sebagai 0, OFF, 0 volt, atau padam. Dengan demikian dapat dikatakan bahwa perintah sinyal ON pada program Arduino adalah HIGH. Sedangkan perintah untuk memberikan sinyal OFF pada program Arduino adalah FALSE.

Contoh penulisannya seperti ini.

digitalWrite(13, 
HIGH); digitalWrite(13, LOW);

3. INPUT/OUTPUT

Variabel konstan ini sering digunakan dalam fungsi pinMode() untuk mendefinisikan pin digital. Apakah ia berperan sebagai INPUT atau OUTPUT. Contoh penggunaannya adalah seperti yang ditunjukkan pada perintah di bawah ini.

pinMode(10, INPUT);
pinMode(13, OUTPUT);

E. Perintah Pin Digital I/O Arduino

Setidaknya ada 3 (Tiga) jenis perintah yang biasa digunakan untuk mengatur pin Input/Output digital dalam pemrograman Arduino, antara lain :

1. pinMode(pin, mode)

Apa itu pinMode()? Ini adalah perintah yang biasa ditemukan di block void setup(). Fungsi pinMode() pada Arduino memungkinkan Anda menentukan pin untuk digunakan sebagai INPUT atau OUTPUT. Contoh penulisannya seperti ini.

pinMode(3, INPUT);

Keterangan :
  • 3           = nomor pin yang ingin dikonfigurasi
  • INPUT = mode yang digunakan

2. digitalRead(pin)

Penggunaan perintah ini bertujuan untuk membaca nilai pin digital yang dikehendaki lalu menyimpannya dalam suatu variabel. Berikut contoh penulisannya.

baca = digitalRead(8);

3. digitalWrite(pin, value)

Apa itu digitalWrite pada Arduino? yaitu suatu perintah untuk menuliskan suatu nilai pada pin digital.

Secara umum, fungsi digitalWrite() pada Arduino adalah untuk menentukan nilai logika awal pada sebuah pin. Apakah ia LOW atau HIGH. Lihat contoh penulisannya di bawah ini.

digitalWrite(9,HIGH);

Keterangan :
  • 9         = nomor pin digital yang digunakan
  • HIGH = kondisi yang diinginkan

F. Perintah Pin Analog I/O Arduino

Tidak seperti pin digital, pin analog hanya memiliki dua jenis perintah yang umum digunakan. Memang, pin analog tidak memerlukan inisialisasi dengan pinMode().

Berikut adalah dua jenis perintah pin yang umum digunakan.

1. analogRead(pin)

Fungsi analogRead() pada Arduino adalah membaca data dari pin analog kemudian menyimpannya dalam sebuah variabel.

Dimana data yang dibaca adalah nilai integer yang berkisar antara 0 hingga 1023. Berikut adalah contoh penulisannya.

baca = analogRead(A0);

Keterangan :
  • Baca = nama variabel tempat menampung data hasil pembacaan
  • A0    = nama pin analog yang digunakan (A0 sampai A6)

2. analogWrite(pin, value)

Perintah ini mempunyai efek pengiriman nilai analog menggunakan metode PWM (Pulse Width Modulation) ke pin khusus yang berlabel PWM, yaitu pin 3, 5, 6, 9, 10, dan 11. Pin PWM biasanya dilambangkan dengan tanda tilde (~) di depan atau di atas nama pin.

Adapun nilai yang umum digunakan pada PWM adalah berkisar antara 0 hingga 255. Jadi frekuensi PWM dapat diatur dari nilai tersebut. Contoh yang menulis analogWrite() dengan benar seperti di bawah ini.

analogWrite(5,100);

Keterangan :
  • 5     = nama pin analog yang digunakan
  • 100 = nilai PWM yang digunakan

Tentu saja, dari kedua perintah ini Anda dapat menentukan perbedaan fungsional antara analogRead() dan analogWrite().

Instruksi analogRead() membaca data analog Arduino, sedangkan instruksi analogWrite() menulis data analog ke pin Arduino.

Terkadang ada juga kebingungan tentang perbedaan antara analogRead() dan digitalWrite(). Jadi analogWrite digunakan untuk menulis data analog, sedangkan digitalWrite() digunakan untuk menulis data digital. Memang seserderhana seperti itu guys!

G. Pengujian Kondisi dalam Percabangan Program Arduino

Agar tidak terjadi kesalahan saat menjalankan instruksi, program Arduino membutuhkan sesuatu yang disebut pengecekan kondisi. Ini penting ketika program dalam keadaan bercabang yang memaksanya untuk memilih salah satu dari banyak opsi.

Tes bersyarat adalah urutan yang memilih pernyataan yang paling benar dari antara pilihan pernyataan berdasarkan kriteria evaluasi tertentu.

Beberapa tes kondisional yang umum digunakan meliputi :

1. If

Perintah ini digunakan ketika hanya ada satu perintah untuk dieksekusi. Jadi jika kondisi terpenuhi, instruksi akan dijalankan.

Dan jika tidak diisi maka perintah tidak akan dijalankan. Format perintahnya adalah sebagai berikut :

if(kondisi){
    pernyataan/perintah;
}

Contohnya seperti ini :

if(x==6) {
    a=a+5;
}

2. If Else

Berbeda dengan if, pernyataan if else digunakan ketika ada dua pilihan pernyataan yang akan dieksekusi.

Apabila kondisinya terpenuhi, maka perintah yang ada di dalam if akan dieksekusi. Dan jika tidak, maka pernyataan di dalam else-lah yang akan dieksekusi. Format penulisannya adalah :

if(kondisi){
    pernyataan / perintah 1
}
else {
    pernyataan / perintah 2
}

Contoh program if else Arduino bisa kamu lihat di bawah ini:

if(x==1) {
    a=1;
}
else {
    a=0;
}

2. If Else If

Perbedaan antara pernyataan if...else if dan pernyataan if lainnya adalah ia dapat menguji lebih dari satu kondisi.

Inilah sebabnya mengapa perintah ini sering disebut sebagai pernyataan multilevel if Arduino. Contoh format penulisannya adalah sebagai berikut :

if(kondisi1){
    //pernyataan / perintah 1
}
else if(kondisi2){
    //pernyataan / perintah 2
}
else if(kondisi ke-n){
    //pernyataan / perintah ke-n
}

Contohnya seperti ini :

if(x==1) {
    a=1;
}
else if(x==2){
    a=2;
}
else if(x==3){
    a=3;
}

4. Switch Case

Perintah ini digunakan untuk memilih instruksi yang benar berdasarkan kondisi yang ada. Berbeda dengan pernyataan if, perintah switch case menggunakan nilai variabel untuk pengujian.

Apabila nilai variabel memenuhi syarat salah satu dari case, maka ia akan mengeksekusi pernyataan di dalam case tersebut.

Dan apabila tak ada nilai variabel yang cocok dari salah satu case, maka secara otomatis yang dieksekusi adalah pernyataan/perintah default.

Struktur penulisan switch case pada Arduino IDE adalah sebagai berikut :

switch(variabel){
    case 1 : //pernyataan/perintah 1
    break;
    case 2 : //pernyataan/perintah 2
    break;
    case n : //pernyataan/perintah n
    break;
    default : //pernyataan/perintah default
}

Contoh Program Switch Case Arduino bisa kamu lihat di bawah ini :

switch(a){
    case 1 : digitalWrite(pin1,HIGH)
    break;
    case 2 : digitalWrite(pin2,HIGH)
    break;
    case 3 : digitalWrite(pin3,HIGH)
    break;
    default : digitalWrite(pin4,LOW)
}

H. Perulangan dalam Pemrograman Arduino

Dalam pemrograman Arduino, juga sering dikenal ada istilah perulangan. Ini adalah instruksi yang memungkinkan kita untuk mengeksekusi instruksi berdasarkan referensi nilai berulang.

Berikut adalah beberapa contoh perintah Coding berulang Arduino yang umum digunakan :

1. while()

Fungsi while pada Arduino yakni memungkinkan terjadinya perulangan tak terbatas selama kondisi di dalamnya terpenuhi. Bentuk penulisannya adalah sebagai berikut :

while(kondisi){
    //pernyataan/perintah
}

Contohnya seperti ini :

while(a<100){
    a++;
}

Keterangan :
  • Program akan terus melakukan perulangan hingga nilai a mencapai angka 100.

2. do ... while()

Perintah ini memiliki efek mengeksekusi pernyataan atau pernyataan dan kemudian melihat kondisi di dalam while.

Apabila kondisinya sesuai maka pernyataan akan dieksekusi kembali. Dan jika tidak maka pernyataan tak akan dieksekusi. Format penulisannya adalah :

do{
    //pernyataan/perintah
}
while(kondisi);

Contohnya seperti ini :

do{
    a++;
}
while(a<100);

3. for()

Fungsi for pada Arduino yaitu untuk melakukan perulangan yang sifatnya terbatas. Dalam perintah for wajib disertakan nilai awal, kondisi, dan penambahan (increment) atau pengurangan (decrement).

Untuk pengulangan yang mengubah nilai awal ke angka yang lebih besar, gunakan operator ++.

Sedangkan untuk mengubah nilainya menjadi angka yang lebih kecil, gunakan operator --. Penggunaan format for yang benar pada Arduino adalah sebagai berikut:

for(nilai awal; kondisi; penambahan/pengurangan){
    //pernyataan/perintah;
}

Contohnya seperti ini :

for(a=0;a<=100;a++){
    Serial.println(a);
}

Keterangan :
  • Hasil program tersebut akan menampilkan nilai a dari 0 sampai 100.

4. Goto

Perintah ini biasanya digunakan untuk melompat secara langsung atau menuju perintah yang telah diberi label. Format penulisan perintah sudah diberi label seperti ini.

Nama label: perintah/pernyataan

Dan untuk memanggil atau menjalankan perintah di label menggunakan perintah ini.

goto nama label;

Misalkan saya ingin membuat perintah menyalakan lampu di pin 1 dengan nama label “nyala”, maka kamu harus mengetikkan perintah ini.

nyala: digitalWrite(pin 1, HIGH);

Sedangkan untuk pemanggilannya menggunakan perintah ini.

goto nyala;

5. Return

Fungsi return pada Arduino adalah untuk memberikan nilai balik dari suatu fungsi. Lihat contoh fungsi return Arduino di bawah ini :

int data(){
    if(analogRead(A0)>100){
        return 1;
    else
        return 0;
    }
}
6. Continue

Pernyataan continue sering digunakan untuk melewati perulangan yang tersisa dari struktur looping. Baik itu do, for, maupun while.

Berikut adalah contoh penggunaan pernyataan continue dalam perulangan for.

for(nilai awal; kondisi; penambahan/pengurangan){
    //pernyataan/perintah 1
    if(kondisi 2){
        continue;
    }
    //pernyataan/perintah 2
}

Contohnya seperti ini :

for(b=1,; b<=10; b++){
    digitalWrite(pin 1, HIGH);
    if(b==5){
        continue;
    }
    digitalWrite(pin 2, HIGH);
    delay(100);
}
Keterangan :

Pada saat program dijalankan, maka nilai b yang awalnya 1 akan terus bertambah hingga mencapai angka 10.

Namun ketika nilai b mencapai 5, kode program di bawah continue; akan dilewati dan akhirnya berlanjut ke perulangan 6. Begitu seterusnya.

7. Break

Sederhananya, fungsi interupsi Arduino memaksa sebuah loop untuk berhenti sebelum waktunya. Baik dalam for, while atau do...while loop.

Jadi kita dapat mengatakan bahwa menggunakan pernyataan break adalah cara untuk menghentikan loop Arduino. Di bawah ini adalah contoh format penulisan interupsi yang benar.

for(nilai awal; kondisi; penambahan/pengurangan){
    //pernyataan/perintah
    if(kondisi 2){
        break;
    }
}

Contohnya seperti ini :

for(c=1,; c<=10; c++){
    digitalWrite(pin 1, HIGH);
    if(c==8){
        break;
    }
}
Keterangan :

Ketika program di atas dijalankan, nilai c yang semula 1 akan terus bertambah hingga mencapai 10.

Namun ketika nilai c mencapai 8, program akan berhenti secara otomatis.

Jadi jika ada yang bertanya bagaimana cara menghentikan program Arduino? Jadi inilah caranya. Ini adalah dengan menggunakan perintah break.

I. Pengaturan Waktu (Time) Arduino

Ada 3 (Tiga) perintah yang biasa digunakan dalam pemrograman Arduino untuk mengatur waktu, yaitu :

1. millis()

Fungsi milis pada Arduino adalah untuk menampilkan nilai waktu dalam milidetik sejak program Arduino dijalankan. Namun setelah 50 Hari berjalan, nilainya akan kembali ke 0 (Nol).

Tipe data yang umum digunakan untuk perintah ini adalah unsigned long.

Jadi pastikan untuk mendefinisikan variabel yang ingin Anda gunakan sebagai Jadi, pastikan kamu mendefinisikan variabel yang ingin kamu gunakan sebagai penampung nilai milis() dengan tipe data unsigned long. Bentuk penulisannya adalah sebagai berikut :

variabel = millis();

Contoh program milis Arduino seperti ini.

unsigned long waktu;
void setup(){
    Serial.print(“Milidetik: “);
    waktu = millis();
    Serial.println(waktu);
}
2. micros()

Instruksi ini digunakan untuk membangkitkan nilai waktu dalam mikrodetik sejak awal eksekusi program. Nilai akan kembali ke 0 saat 70 menit tercapai. Bentuk tulisannya adalah sebagai berikut :

variabel = micros();

Contoh program Arduino sederhana tentang penggunaan perintah micros() yaitu sebagai berikut :

unsigned long waktu;
void setup(){
    Serial.print(“Mikrodetik : “);
    waktu = micros();
    Serial.println(waktu);
}
3. delay()

Apa fungsi delay pada Arduino IDE? Yaitu memberikan tambahan waktu atau delay dalam milidetik sebelum menjalankan program pada baris berikutnya.

Adapun untuk waktu penundaannya menyesuaikan dengan nilai yang dimasukkan ke perintah. Contohnya seperti ini :

delay(1000);

Keterangan :

Perintah tersebut berfungsi untuk memberikan jeda pada program selama 1000 milidetik atau setara dengan 1 detik.

4. delayMicroseconds()

Sama seperti poin sebelumnya, perintah ini juga berfungsi untuk memberikan jeda waktu. Hanya saja, jeda yang diberikan dalam satuan mikrodetik.

Dimana 1 juta mikrodetik setara dengan 1 detik. Oleh karena itu, perintah ini tidak boleh digunakan jika ingin mengandalkan detik. Berikut adalah contoh cara menulis perintah dengan benar.

delayMicrosecond(300);

Keterangan :

Perintah tersebut berfungsi untuk menjeda program selama 300 mikrodetik atau setara dengan 0,0003 detik.

J. Komunikasi Serial Arduino

Pada dasarnya komunikasi serial merupakan komunikasi dua arah yang melibatkan transmitter dan receiver. Di Arduino sendiri, pemancar dan penerima tersedia di pin Rx dan Tx serta USB.

Umumnya, komunikasi serial digunakan untuk menampilkan data hasil perhitungan Arduino di serial monitor.

Apa itu serial monitor pada Arduino IDE? Ini adalah fasilitas untuk mengontrol dan memantau apa yang terjadi di papan Arduino melalui komputer. Berikut adalah beberapa contoh perintah Arduino yang umum digunakan dalam komunikasi serial :

1. Serial.begin()

Mungkin Anda pernah mendengar pertanyaan apa itu serial begin 9600?

Intinya, ini adalah instruksi yang memungkinkan komunikasi serial dengan nilai baud rate atau kecepatan transmisi sebesar 9600 bps. Untuk penulisan perintahnya seperti ini :

Serial.begin(9600);

Contoh :

void setup(){
    pinMode(1, INPUT);
    Serial.begin(9600);
}
2. Serial.print()

Apa itu serial.print? itu adalah perintah aktif untuk menampilkan data pada monitor serial untuk satu baris.

Akibatnya, data akan terus muncul sebagai garis pada serial monitor. Berikut adalah contoh cara menulis Serial.print() dengan benar dalam sebuah program :

Serial.print(Tampil);

Contoh :

Serial.print(68) //mencetak 68
Serial.print(1.5555) //mencetak 1.55
Serial.print("Naveen") //mencetak "Naveen"
Serial.print(78, OCT) //mencetak "116"
Serial.print("abc");Serial.print("def"); //mencetak "abcdef"
Keterangan :

Tampil adalah variabel penampung nilai yang ingin ditampilkan pada serial monitor.

3. Serial.println()

Perintah ini secara fungsional sangat mirip dengan Serial.print(). Hanya saja data yang ditampilkan akan terus muncul di bagian bawah.

Oleh karena itu, data tidak muncul dalam satu baris.

Memang, setelah setiap data ditampilkan, program akan secara otomatis mengeluarkan perintah input atau jeda baris berikutnya. Contoh cara penulisannya adalah sebagai berikut :

Serial.println(Muncul);

Contoh :

Serial.println(68) //mencetak 68
Serial.println(1.5555) //mencetak 1.55
Serial.println("Naveen") //mencetak "Naveen"
Serial.println(78, OCT) //mencetak "116"
Serial.print("abc");
Serial.print("def");
/*mencetak "abc"
         "def" */
Keterangan :

Muncul adalah variabel penampung yang didalamnya terdapat nilai yang ingin ditampilkan di serial monitor.

K. Eksternal Interrupt Arduino

Salah satu jenis pin Arduino adalah pin interupsi. Pin ini berfungsi sebagai pemicu untuk meminta perhatian prosesor atas kesalahan dalam menjalankan program. Prinsip operasinya sangat mirip dengan menyela rapat.

Jadi ketika pin ini HIGH, instruksi yang sedang berjalan akan diinterupsi dan instruksi pada pin interupsi akan dieksekusi. Jumlah pin interupsi pada berbagai jenis Arduino. Anda dapat melihat pada tabel berikut ini.

Jenis Papan
Nama Pin Untuk Interrupt
Uno, Nano, Mini, dan seri Atmega328 lainnya
2, 3
Mega, Mega2560, MegaADK
2, 3, 18, 19, 20, 21
Mikro, Leonardo, dan seri 32u4 lainnya
0, 1, 2, 3, 7
Zero
Semua pin digital kecuali pin 4
MKR1000 Rev 1
0, 1, 4, 5, 6, 7, 8, 9, A1, A2
Due
Semua pin digital
101
Semua pin digital

Adapun untuk format perintahnya sebagai berikut :

attachInterrupt (digitalPinToInterrupt(pin), fungsi, mode);

Keterangan :
  • Pin       = nomor pin interrupt yang digunakan
  • Fungsi  = fungsi yang akan dieksekusi
  • Mode   = mode deteksi pin apa yang digunakan

Mode yang bisa digunakan ada 4 (Empat), yaitu :
  • LOW, yaitu interrrupt akan dieksekusi terus menerus selama pin membaca logika LOW
  • RISING, yaitu interrupt akan dieksekusi jika terjadi perubahan nilai pembacaan dari LOW ke HIGH (dieksekusi satu kali saat terjadi perubahan)
  • CHANGE, yaitu interrupt akan dieksekusi bila terjadi perubahan pada nilai yang dibaca. Baik dari HIGH ke LOW maupun dari LOW ke HIGH. (dieksekusi satu kali saat terjadi perubahan).
  • FALLING, yaitu interrupt akan dieksekusi jika terjadi perubahan nilai pembacaan dari HIGH ke LOW. (dieksekusi satu kali saat terjadi perubahan).

Contoh Source Code Arduino tentang interupsi eksternal bisa kamu lihat di bawah ini :

void setup(){
    Serial.begin(9600);
    pinMode(2, INPUT_PULLUP);
    attachInterrupt(digitalPinToInterrupt(2), sisip, FALLING);
}

void sisip(){
    Serial.println("Tombol Ditekan");
    delay(1000);
}

void loop(){
    Serial.println("Tes kode 1");
    delay(1000);
    Serial.println("Tes kode 2");
    delay(1000);
    Serial.println("Tes kode 3");
    delay(1000);
    Serial.println("Tes kode 4");
    delay(1000);
}

Keterangan :

Jika kode di atas dijalankan, maka di serial monitor akan muncul tulisan “Tes Kode 1” sampai “Tes Kode 4” secara berurutan dengan jeda 1 detik.

Namun ketika button yang terhubung dengan pin 2 ditekan maka di serial monitor akan muncul kata “Tombol Ditekan”.

L. Nilai Maksimum dan Minimum Pada Arduino

1. min(x, y)

Fungsi dari perintah ini adalah untuk membandingkan dua variabel dan akan mengembalikan nilai yang lebih kecil dan menyimpannya dalam sebuah variabel. Format penulisannya adalah :

baca = min(x, y);

Keterangan :
  • baca = variabel penampung
  • x      = variabel 1
  • y      = variabel 2

2. max(x, y)

Perintah ini digunakan untuk membandingkan nilai dua variabel dan mengembalikan nilai yang lebih besar. Dapat dikatakan bahwa instruksi ini kebalikan dari min(x, y). Format penulisannya adalah:

baca = max(x, y);

Keterangan :
    • baca = variabel penampung
    • x      = variabel 1
    • y      = variabel 2


    Nantikan Artikel selanjutnya tentang membuat Program Arduino Sederhana dengan Tinkercad dan ESP32 di Arduino IDE.

    Semoga saja Artikel ini sangat bermanfaat bagi para IT Pemula dan juga mohon maaf apabila ada kesalahan dalam penulisan Kode. Terima Kasih 😄😘👌👍 :)

    Wassalamu‘alaikum wr. wb.

    Post a Comment

    Previous Post Next Post