Internet of things

Membaca 40 Sensor ADC Menggunakan Arduino Uno dengan IC Multiplekser

Kali ini saya akan menulis sebuah tutorial tentang cara membaca banyak sensor menggunakan Arduino. Pada topik ini saya menggunakan Arduino Uno sebagai board mikrokontrolernya. Keterbatasan jumlah pin pada Arduino Uno mengharuskan kita mencari cara agar bisa membaca banyak sensor, tetapi…

Bagikan artikel ini
WhatsApp Email

Kali ini saya akan menulis sebuah tutorial tentang cara membaca banyak sensor menggunakan Arduino. Pada topik ini saya menggunakan Arduino Uno sebagai board mikrokontrolernya. Keterbatasan jumlah pin pada Arduino Uno mengharuskan kita mencari cara agar bisa membaca banyak sensor, tetapi hanya dengan menggunakan sedikit pin.  Berdasarkan dataset Arduino Uno  memiliki jumlah pin Analog (I/O) sebanyak 6 pin yaitu A0 – A5 dengan tingkat resolusi 10 bit. Sedangkan pin input Analog yang paling banyak tersedia pada Arduino Mega sebanyak 15 pin yaitu A0-A14 dengan tingkat resolusi sama.

Baca juga: Membaca 24 Sensor Suhu LM35 dengan 3 Multiplekser Berbasis Atmega 16

Pembacaan sensor dalam jumlah banyak seperti ini sangat mendukung dalam bidang aplikasi IoT (Internet of Things) yang sedang trend saat ini. Dimana dengan menggunakan Arduino sebagai aplikasi dari pembacaan sensor akan jauh lebih murah dan ekonomis serta memiliki standard perusahaan.

Gambar 1. Jumlah pin I/O masing-masing jenis Arduino
Daftar isi

Arduino

Secara definisi Arduino adalah pengendali mikro single-board yang bersifat sumber terbuka (open source), diturunkan dari Wiring platform, dirancang untuk memudahkan penggunaan elektronik dalam berbagai bidang. Perangkat kerasnya memiliki prosesor Atmel AVR dan softwarenya memiliki bahasa pemrograman sendiri[2]. Berikut adalah gambar dari board arduino Uno yang menjadi bahasan dalam tulisan ini.

Gambar 2. Papan Arduino Uno R3

Di pasaran ada banyak jenis Arduino yang dapat kita pilih untuk proyek yang akan kita kerjakan baik untuk tujuan hobi ataupun mengerjakan tugas kuliah bahkan untuk tugas akhir. Kelebihan Arduino dibandingkan dengan mikrokontroller lainnya misalnya jenis AVR ATMega 8/16/32/128 adalah sudah siap pakai dan memiliki standar perusahaan. Sedangkan pada AVR ATMega 8/16/32/128 kita harus membuat board dan menambahkan komponen-komponen lainnya agar dapat diprogram sesuai kebutuhan. Pemakaian Arduino pun lebih mudah dibandingkan dengan jenis AVR lainnya. Kemudian software (perangkat lunak) Arduino IDE yang digunakan untuk memprogramnya pun tersedia gratis. Hingga sejauh ini Arduino IDE yang siap di download sudah mencapai versi 1.8.10[3] dan gratis.

Multiplexer

Multiplexer adalah rangkaian logika kombinasional yang dirancang untuk mengalihkan salah satu dari beberapa jalur input ke satu jalur keluaran output[3]. Secara mudahnya adalah dengan input yang banyak kemudian dapat keluar dari satu output keluaran, yang mana jalur input dipilih satu persatu untuk bisa melalui jalur keluaran tanpa mengalami percampuran informasi atau data yang dibawa. Analoginya kira-kira seperti ini agar dapat memahami kinerja dari multiplekser secara mudahnya kita ambil kasus keran air, yang mana pada sebuah keran air ada 10 pipa berbeda yang menjadi input dan pada pipa keluaran hanya ada satu pipa. Lalu secara teknis pipa keluaran tadi akan diinput dari 10 pipa input secara bergantian tanpa bercampur satu sama lain. Jadi, jika pipa input 1 open, maka 9 pipa lainnya akan dimatikan, jika pipa 2 open, maka semua pipa selain pipa 2 akan ditutup, begitu seterusnya secara bergantian.

Biasanya, multiplexer atau disebut juga dengan data selector memiliki jumlah 2n input data dan sejumlah input “kontrol” yang sesuai dengan jumlah input data. Misalnya ada 2n dengan n=3, dan dinotasikan menjadi 23 yaitu 8. Jumlah n adalah sebagai input kontrol dan 8 sebagai input data. Secara lebih jelasnya dapat dilihat pada gamabr 3 dibawah ini:

Gambar 3. Rangkaian Multiplekser 4-to-1 (4 input) mengguanakan gerbang NAND beserta dengan tabel kebenarannya[3].

Jenis IC (Intergrated Circuits, sirkuit terpadu) yang tersedia dipasaran ada banyak untuk multiplekser misalnya IC CD4051 dengan 23 atau 8-to-1, dan IC CD74HC4067 dengan 24 atau 16-to-1. Dan, ada banyak jenis IC lain yang dapat digunakan sebagai IC multiplekser. Kita pun dapat dengan mudah menemukannya dipasar toko elektronika.

Penerapan pada Arduino dengan Menggunakan Simulasi Proteus

Oke, langsung saja kita menuju aplikasi pemrogramannya. Pembuatan skema rangkaian menggunakan software Proteus dan pemrograman menggunakan software Arduino IDE. Berikut skema rangkaian yang saya buat:

Gambar 4. Skema rangkaian MUX 40 input sensor menggunakan Arduino UNO.

Dan, berikut ada sourcode program yang saya buat, programnya sangat sederhana karena memang untuk menjelaskan kinerja dari MUX jadi tidak menggunakan program yang lebih rumit.

#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);

//Mux control pins
int s0 = 2;
int s1 = 3;
int s2 = 4;

int sensor[40];
int data[40];

void setup(){
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);

lcd.begin(20,4);

//Serial.begin(9600);
}
void loop(){

data_adc();

}

void data_adc()
{

lcd.clear();
lcd.setCursor(3,0);lcd.print(“40 ADC use MUX”);
digitalWrite(s0, LOW);digitalWrite(s1, LOW);digitalWrite(s2, LOW);sensor[0] = analogRead(A0);if(sensor[0]>512){ data[0]=1; }else{ data[0]=0; }lcd.setCursor(0,1);lcd.print(data[0]);
digitalWrite(s0, HIGH);digitalWrite(s1, LOW);digitalWrite(s2, LOW);sensor[1] = analogRead(A0);if(sensor[1]>512){ data[1]=1; }else{ data[1]=0; }lcd.setCursor(1,1);lcd.print(data[1]);
digitalWrite(s0, LOW);digitalWrite(s1, HIGH);digitalWrite(s2, LOW);sensor[2] = analogRead(A0);if(sensor[2]>512){ data[2]=1; }else{ data[2]=0; }lcd.setCursor(2,1);lcd.print(data[2]);
digitalWrite(s0, HIGH);digitalWrite(s1, HIGH);digitalWrite(s2, LOW);sensor[3] = analogRead(A0);if(sensor[3]>512){ data[3]=1; }else{ data[3]=0; }lcd.setCursor(3,1);lcd.print(data[3]);
digitalWrite(s0, LOW);digitalWrite(s1, LOW);digitalWrite(s2, HIGH);sensor[4] = analogRead(A0);if(sensor[4]>512){ data[4]=1; }else{ data[4]=0; }lcd.setCursor(4,1);lcd.print(data[4]);
digitalWrite(s0, HIGH);digitalWrite(s1, LOW);digitalWrite(s2, HIGH);sensor[5] = analogRead(A0);if(sensor[5]>512){ data[5]=1; }else{ data[5]=0; }lcd.setCursor(5,1);lcd.print(data[5]);
digitalWrite(s0, LOW);digitalWrite(s1, HIGH);digitalWrite(s2, HIGH);sensor[6] = analogRead(A0);if(sensor[6]>512){ data[6]=1; }else{ data[6]=0; }lcd.setCursor(6,1);lcd.print(data[6]);
digitalWrite(s0, HIGH);digitalWrite(s1, HIGH);digitalWrite(s2, HIGH);sensor[7] = analogRead(A0);if(sensor[7]>512){ data[7]=1; }else{ data[7]=0; }lcd.setCursor(7,1);lcd.print(data[7]);

digitalWrite(s0, LOW);digitalWrite(s1, LOW);digitalWrite(s2, LOW);sensor[8] = analogRead(A1);if(sensor[8]>512){ data[8]=1; }else{ data[8]=0; }lcd.setCursor(8,1);lcd.print(data[8]);
digitalWrite(s0, HIGH);digitalWrite(s1, LOW);digitalWrite(s2, LOW);sensor[9] = analogRead(A1);if(sensor[9]>512){ data[9]=1; }else{ data[9]=0; }lcd.setCursor(9,1);lcd.print(data[9]);
digitalWrite(s0, LOW);digitalWrite(s1, HIGH);digitalWrite(s2, LOW);sensor[10] = analogRead(A1);if(sensor[10]>512){ data[10]=1; }else{ data[10]=0; }lcd.setCursor(10,1);lcd.print(data[10]);
digitalWrite(s0, HIGH);digitalWrite(s1, HIGH);digitalWrite(s2, LOW);sensor[11] = analogRead(A1);if(sensor[11]>512){ data[11]=1; }else{ data[11]=0; }lcd.setCursor(11,1);lcd.print(data[11]);
digitalWrite(s0, LOW);digitalWrite(s1, LOW);digitalWrite(s2, HIGH);sensor[12] = analogRead(A1);if(sensor[12]>512){ data[12]=1; }else{ data[12]=0; }lcd.setCursor(12,1);lcd.print(data[12]);
digitalWrite(s0, HIGH);digitalWrite(s1, LOW);digitalWrite(s2, HIGH);sensor[13] = analogRead(A1);if(sensor[13]>512){ data[13]=1; }else{ data[13]=0; }lcd.setCursor(13,1);lcd.print(data[13]);
digitalWrite(s0, LOW);digitalWrite(s1, HIGH);digitalWrite(s2, HIGH);sensor[14] = analogRead(A1);if(sensor[14]>512){ data[14]=1; }else{ data[14]=0; }lcd.setCursor(14,1);lcd.print(data[14]);
digitalWrite(s0, HIGH);digitalWrite(s1, HIGH);digitalWrite(s2, HIGH);sensor[15] = analogRead(A1);if(sensor[15]>512){ data[15]=1; }else{ data[15]=0; }lcd.setCursor(15,1);lcd.print(data[15]);

digitalWrite(s0, LOW);digitalWrite(s1, LOW);digitalWrite(s2, LOW);sensor[16] = analogRead(A2);if(sensor[16]>512){ data[16]=1; }else{ data[16]=0; }lcd.setCursor(16,1);lcd.print(data[16]);
digitalWrite(s0, HIGH);digitalWrite(s1, LOW);digitalWrite(s2, LOW);sensor[17] = analogRead(A2);if(sensor[17]>512){ data[17]=1; }else{ data[17]=0; }lcd.setCursor(17,1);lcd.print(data[17]);
digitalWrite(s0, LOW);digitalWrite(s1, HIGH);digitalWrite(s2, LOW);sensor[18] = analogRead(A2);if(sensor[18]>512){ data[18]=1; }else{ data[18]=0; }lcd.setCursor(18,1);lcd.print(data[18]);
digitalWrite(s0, HIGH);digitalWrite(s1, HIGH);digitalWrite(s2, LOW);sensor[19] = analogRead(A2);if(sensor[19]>512){ data[19]=1; }else{ data[19]=0; }lcd.setCursor(19,1);lcd.print(data[19]);
digitalWrite(s0, LOW);digitalWrite(s1, LOW);digitalWrite(s2, HIGH);sensor[20] = analogRead(A2);if(sensor[20]>512){ data[20]=1; }else{ data[20]=0; }lcd.setCursor(0,2);lcd.print(data[20]);
digitalWrite(s0, HIGH);digitalWrite(s1, LOW);digitalWrite(s2, HIGH);sensor[21] = analogRead(A2);if(sensor[21]>512){ data[21]=1; }else{ data[21]=0; }lcd.setCursor(1,2);lcd.print(data[21]);
digitalWrite(s0, LOW);digitalWrite(s1, HIGH);digitalWrite(s2, HIGH);sensor[22] = analogRead(A2);if(sensor[22]>512){ data[22]=1; }else{ data[22]=0; }lcd.setCursor(2,2);lcd.print(data[22]);
digitalWrite(s0, HIGH);digitalWrite(s1, HIGH);digitalWrite(s2, HIGH);sensor[23] = analogRead(A2);if(sensor[23]>512){ data[23]=1; }else{ data[23]=0; }lcd.setCursor(3,2);lcd.print(data[23]);

digitalWrite(s0, LOW);digitalWrite(s1, LOW);digitalWrite(s2, LOW);sensor[24] = analogRead(A3);if(sensor[24]>512){ data[24]=1; }else{ data[24]=0; }lcd.setCursor(4,2);lcd.print(data[24]);
digitalWrite(s0, HIGH);digitalWrite(s1, LOW);digitalWrite(s2, LOW);sensor[25] = analogRead(A3);if(sensor[25]>512){ data[25]=1; }else{ data[25]=0; }lcd.setCursor(5,2);lcd.print(data[25]);
digitalWrite(s0, LOW);digitalWrite(s1, HIGH);digitalWrite(s2, LOW);sensor[26] = analogRead(A3);if(sensor[26]>512){ data[26]=1; }else{ data[26]=0; }lcd.setCursor(6,2);lcd.print(data[26]);
digitalWrite(s0, HIGH);digitalWrite(s1, HIGH);digitalWrite(s2, LOW);sensor[27] = analogRead(A3);if(sensor[27]>512){ data[27]=1; }else{ data[27]=0; }lcd.setCursor(7,2);lcd.print(data[27]);
digitalWrite(s0, LOW);digitalWrite(s1, LOW);digitalWrite(s2, HIGH);sensor[28] = analogRead(A3);if(sensor[28]>512){ data[28]=1; }else{ data[28]=0; }lcd.setCursor(8,2);lcd.print(data[28]);
digitalWrite(s0, HIGH);digitalWrite(s1, LOW);digitalWrite(s2, HIGH);sensor[29] = analogRead(A3);if(sensor[29]>512){ data[29]=1; }else{ data[29]=0; }lcd.setCursor(9,2);lcd.print(data[29]);
digitalWrite(s0, LOW);digitalWrite(s1, HIGH);digitalWrite(s2, HIGH);sensor[30] = analogRead(A3);if(sensor[30]>512){ data[30]=1; }else{ data[30]=0; }lcd.setCursor(10,2);lcd.print(data[30]);
digitalWrite(s0, HIGH);digitalWrite(s1, HIGH);digitalWrite(s2, HIGH);sensor[31] = analogRead(A3);if(sensor[31]>512){ data[31]=1; }else{ data[31]=0; }lcd.setCursor(11,2);lcd.print(data[31]);

digitalWrite(s0, LOW);digitalWrite(s1, LOW);digitalWrite(s2, LOW);sensor[32] = analogRead(A4);if(sensor[32]>512){ data[32]=1; }else{ data[32]=0; }lcd.setCursor(12,2);lcd.print(data[32]);
digitalWrite(s0, HIGH);digitalWrite(s1, LOW);digitalWrite(s2, LOW);sensor[33] = analogRead(A4);if(sensor[33]>512){ data[33]=1; }else{ data[33]=0; }lcd.setCursor(13,2);lcd.print(data[33]);
digitalWrite(s0, LOW);digitalWrite(s1, HIGH);digitalWrite(s2, LOW);sensor[34] = analogRead(A4);if(sensor[34]>512){ data[34]=1; }else{ data[34]=0; }lcd.setCursor(14,2);lcd.print(data[34]);
digitalWrite(s0, HIGH);digitalWrite(s1, HIGH);digitalWrite(s2, LOW);sensor[35] = analogRead(A4);if(sensor[35]>512){ data[35]=1; }else{ data[35]=0; }lcd.setCursor(15,2);lcd.print(data[35]);
digitalWrite(s0, LOW);digitalWrite(s1, LOW);digitalWrite(s2, HIGH);sensor[36] = analogRead(A4);if(sensor[36]>512){ data[36]=1; }else{ data[36]=0; }lcd.setCursor(16,2);lcd.print(data[36]);
digitalWrite(s0, HIGH);digitalWrite(s1, LOW);digitalWrite(s2, HIGH);sensor[37] = analogRead(A4);if(sensor[37]>512){ data[37]=1; }else{ data[37]=0; }lcd.setCursor(17,2);lcd.print(data[37]);
digitalWrite(s0, LOW);digitalWrite(s1, HIGH);digitalWrite(s2, HIGH);sensor[38] = analogRead(A4);if(sensor[38]>512){ data[38]=1; }else{ data[38]=0; }lcd.setCursor(18,2);lcd.print(data[38]);
digitalWrite(s0, HIGH);digitalWrite(s1, HIGH);digitalWrite(s2, HIGH);sensor[39] = analogRead(A4);if(sensor[39]>512){ data[39]=1; }else{ data[39]=0; }lcd.setCursor(19,2);lcd.print(data[39]);
lcd.setCursor(0,3);lcd.print(“By: Wayan Dadang”);
delay(200);

}

Selesai program, lalu compile untuk melihat apakah ada error atau tidaknya dan kemudian jika tidak ada tinggal upload ke Arduino teman-teman dan jika menggunakan software simulasi proteus tinggal upload ke proteus. Dan, berikut video demonya.

[embedyt] https://www.youtube.com/watch?v=Ztr4h7MZq44[/embedyt]

Selesai, dan semoga bermanfaat, jika ada pertanyaan silakan sampaikan di kolom komentar.

Refrensi:

  1. Arduino, analogRead (https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/) diakses pada 16 September 2019
  2. Wikipedia, Arduino (https://id.wikipedia.org/wiki/Arduino) diakses pada 16 September 2019
  3. Electonics Tutorials, The Multiplexer (https://www.electronics-tutorials.ws/combination/comb_2.html) diakses pada 26 Oktober 2019
Wayan Dadang
TENTANG PENULIS

Wayan Dadang

Lulusan S1 Teknik Elektro Universitas Sriwijaya, menekuni Kecerdasan Buatan, Machine Learning, Deep Learning, Sistem Kontrol, dan Robotika. Mencintai kegiatan membaca Paper Sains, Belajar, Menulis, dan Riset.

PERPUSTAKAAN WARSTEK

Buku & Ebook Warstek

Bacaan pilihan untuk melanjutkan rasa ingin tahu.

Jenius Juga Manusia – 50 Kisah Fisikawan Dunia dan Indonesia tentang Gagal, Ditolak, dan Tetap Melangkah
EbookBiografi Ilmuwan

Jenius Juga Manusia – 50 Kisah Fisikawan Dunia dan Indonesia tentang Gagal, Ditolak, dan Tetap Melangkah

Kita mengenal nama mereka dari buku pelajaran. Einstein dengan relativitasnya, Newton dengan gravitasinya, dan Faraday dengan listriknya. Namun, jarang sekali kita mendengar…

Harga sebelumnya: Rp.100.000Harga jual saat ini: Rp.20.000

Lihat buku Membuka halaman buku di tab baru
Jenius yang Memilih Sunyi – 45 Kisah Ilmuwan Indonesia dan Dunia yang Menolak Hadiah, Melepas Paten, dan Menjauhi Panggung
EbookBiografi Ilmuwan

Jenius yang Memilih Sunyi – 45 Kisah Ilmuwan Indonesia dan Dunia yang Menolak Hadiah, Melepas Paten, dan Menjauhi Panggung

Mengapa ada orang-orang luar biasa yang justru tidak mengejar kekayaan, penghargaan, atau ketenaran? Di dunia yang mengukur kesuksesan melalui uang, jabatan, gelar,…

Harga sebelumnya: Rp.120.000Harga jual saat ini: Rp.20.000

Lihat buku Membuka halaman buku di tab baru
Jenius dari Negeri Sendiri – Tokoh-Tokoh Indonesia yang Berkontribusi pada Peradaban melalui Sains dan Teknologi
EbookBiografi Ilmuwan

Jenius dari Negeri Sendiri – Tokoh-Tokoh Indonesia yang Berkontribusi pada Peradaban melalui Sains dan Teknologi

Mengapa kita begitu mengenal ilmuwan dari negara lain, tetapi justru asing dengan orang-orang hebat dari negeri sendiri?

Harga sebelumnya: Rp.120.000Harga jual saat ini: Rp.15.000

Lihat buku Membuka halaman buku di tab baru
Skripsi IoT Anti Pusing – Panduan ESP32 dari nol sampai sidang
EbookSeri #MatiPenasaran

Skripsi IoT Anti Pusing – Panduan ESP32 dari nol sampai sidang

Buku ini adalah peta petualangan menyusun skripsi bertema IoT dengan 343 halaman. Disusun mengikuti urutan pengerjaan skripsi, dari memilih topik yang lolos…

Harga sebelumnya: Rp.100.000Harga jual saat ini: Rp.25.000

Lihat buku Membuka halaman buku di tab baru

Leave a Reply

Your email address will not be published. Required fields are marked *

✳ SAINS DALAM GAMBAR

Warstek di Instagram

@warstek_com ↗
Di permukaan: “Aku sudah paham AI.” Begitu menyelam: “Backpropagation ini makanan jenis apa?” ChatGPT, Gemini, Claude, prompt, dan AI agent mungkin sudah…▶ Video

Di permukaan: “Aku sudah paham AI.” Begitu menyelam: “Backpropagation ini makanan jenis apa?” ChatGPT, Gemini, Claude, prompt, dan AI agent mungkin sudah akrab di…

Ada yang mati-matian mengejar gelar, jabatan, dan penghargaan. Ada yang sudah ditawari, malah menolak. Perelman menolak Rp18 miliar. Sanger menolak gelar bangsawan.…▧ Carousel

Ada yang mati-matian mengejar gelar, jabatan, dan penghargaan. Ada yang sudah ditawari, malah menolak. Perelman menolak Rp18 miliar. Sanger menolak gelar bangsawan. Pierre Curie…

Kirain cicilan yang paling “berat”. Ternyata ada yang sesendoknya saja miliaran ton. 🥄💀 Geser, biar tahu cara ilmuwan “menimbangnya” tanpa harus ke…▧ Carousel

Kirain cicilan yang paling “berat”. Ternyata ada yang sesendoknya saja miliaran ton. 🥄💀 Geser, biar tahu cara ilmuwan “menimbangnya” tanpa harus ke sana. #neutron…