TeachMeSoft: Sistem Embedded
Tampilkan postingan dengan label Sistem Embedded. Tampilkan semua postingan
Tampilkan postingan dengan label Sistem Embedded. Tampilkan semua postingan

Praktek Proyek-3: Pengendali Suhu Otomatis Menggunakan Arduino

Praktek Proyek-3: Pengendali Suhu Otomatis Menggunakan Arduino


Teori Singkat



Proyek ini merupakan gabungan hasil perobaan yang telah anda lakukan sebelumnya, yaitu percobaan masukan alanog dan antarmuka keluaran analog PWM. Percobaan yang akan anda lakukan adalah merancang dan membuat system kendali suhu otomatis dengan metode proporsional.

Model kendali proporsinal berbeda dengan kendali on-off yang menggunakan satu batas nilai (threshold) untuk menentukan apakah actuator On atau Off. Model kendali proporsional adalah model kendali umpan tertutup (close-loop control) yang menggunakan umpan balik sensor suhu untuk mendapatkan nilai error.

Nilai error yang diterima secara proporsional akan menentukan penguatan kendali aktuaror. semakin besar ilia error maka semakin besat penguatan kendali. Gambar 1 menunjukan model kendali proporsional.

Model kendali proporsional umpan tertutup
Gambar 1. Model kendali proporsional umpan tertutup

Model kendali proporsional akan menjaga nilai keluaran (output) agar sama seperti nilai yang diinginkan (setpoint). Semakin besar nilai Kp maka karakteristik pengendaliannya semakin mudah untuk stabil, Namun akan memperbesar kesalahan waktu tunaknya (steady state error).

Sebaliknya, jika kp semakin kecil akan transient response nya semakin lama atau lambat mencapai kestabilan. Sehingga output kendali model proporsional adalah perkalian antara nilai error dengan  Kp, P=Kp*Error.

Implementasi model kendali proporsional pada Arduino melibatkan penggunaan keluaran analog PWM yang juga mampu memberikan variasi nilai secara proporsional pula. Nilai keluaran P tidak ada batasnya,

sedangkan nilai keluaran PWM Arduino memiliki batas maksimal (=255). Sehingga diperlukan scalling atau thresholding terhadap keluaran kendali P disesuaikn dengan nilai keluaran.


Alat dan Bahan Percobaan


Pada sesi ini akan dibuat system kendali suhu otomatis. Adapun alat dan bahan yang digunakan selama percobaan adalah :
  1. DC motor (air Blower)
    Bahan percobaan yang digunakan sebagai actuator pendidikan suhu. Piranti ini bekerja pada arus DC dengan tegangan operasi +12 volts. Gambar 2 menunjukan bentuk fisik dari DC ait blower.
    Bentuk fisik dari DC motor untuk air blower
    Gambar 2. Bentuk fisik dari DC motor untuk air blower
  2. IC LM35
    Bahan percobaan yang berfungsi sebagai sensor pengukuran suhu dengan keluaran tegangan analog.
  3. IC L293D
    Bahan percobaan yang berfungsi sebagai penggerak motor DC. Piranti ini mampu menggerakkan DC motor arus rendah (maksimal =2A). Gambar 3 menunjukkan bentuk fisik dan konfigurasi model kerja L239D dalam menggerakkan DC motor.
    Bentuk IC L293D dan konfigurasi beberapa mode kerjanya
    Gambar 3. Bentuk IC L293D dan konfigurasi beberapa mode kerjanya
  4. Papan Arduino uno
    Bahan percobaan sebagai piranti digital utama untuk menjalankan fungsi pembabacaan masukan analog dari sensor suhu LM35, dan mengendalikan actuator motor kipas  melalaui driver l293D


Langkah Percobaan


Percobaan kali ini merupakan gabungan percobaan-percobaan yang telah anda lakukan sebelumnya. Adapun langkah percobaan yang harus anda lakukan adalah :
  1. Merakit perangkat keras seperti yang ditunjukkan oleh Gambar 4 yang terdiri dari:
    a. Antarmuka papan Arduino UNO dengan piranti sensor shu LM35.
    b. Melakukan antarmuka papan Arduino UNO dengan piranti driver motor L293D.
  2. Membuat kode program untuk membaca variable suhu dan model kendali proporsional dengan keluaran nilai PWM.
  3. Kondisi kode program hingga tidak ada kesalahan sintaksis kemudian upload ke papan arduino UNO.
  4. Amati hasil yang ditampilkan  dan buat kesimpulan dari percobaan yang telah dilakukan.
    Antarmuka papan Arduino dengan LM35 dan L293D
    Gambar 4. Antarmuka papan Arduino dengan LM35 dan L293D


Tugas


Berikut ini deskripsi tugas yang harus anda lakukan terkait dengan tahap-tahap percobaan yang sudah dilakukan.
  1. Membuat materi presentasi terkait rancangan proyek yang sudah berhasil dibuat.
  2. Presentasi didepan kelas.
  3. Membuat laporan percobaan yang berisi rancangan antarmuka perangkat keras dan kode program yang berhasil dibuat dan berjalan dengan benar.





Praktek Proyek-2: Data Logger Suhu Menggunakan Arduino

Praktek Proyek-2: Data Logger Suhu Menggunakan Arduino


Teori Singkat



Teori Singkat ini merupakan gabungan hasil percobaan yang telah anda lakukan sebelumnya, yaitu percobaan antarmuka masukan analog, komunikasi I2C dan komunikasi SPI. Percobaan yang akan anda lakukan adalah merancang dan membuat system data logger nilai suhu.

Definisi sensor-pewaktu digital-sistem benam-memory permanen berkapasitas besar. Setiap data hasil pengukuran akan dicatat ke dalam memori bersama-sama dengan data waktu (DD/MM/YYYY hh:mm:ss). Isu utama pada data logger ada dua hal : masa hidup da kapasitas memori.

Masa hidup logger terkait dengan penggunaan baterai yang harus mampu bertahan lama agar logger terkait dengan penggunaan baterai yang harus mampu bertahan lama agar logger dapat merekam data sebanyak mungkin, sehingga harus disediakan kapasitas memori yang juga mendukung untuk pemakaian dalam waktu yang lama.

Dengan demikian agar engeri listrik logger mampu bertahan lama maka system logger baik perangkat keras mapun perangkat lunak harus dirancang untuk mampu berkerja pada mode rendah konsumsi daya (low power).


Alat dan Bahan Percobaan


Pada sesi ini akan dibuat system data logger suhu. Adapun alat dan bahan yang digunakan selama percobaan adalah :
  1. 2 buah resistor 4.7kΩ
    Bahan percobaan yang digunakan sebagai resistor pull up bus komunikasi I2C.
  2. IC LM35
    Bahan percobaan yang berfungsi sebagai sensor pengukur suhu dengan keluaran tegangan analog.
  3. IC RTC DS1307
    Bahan percobaan yang berfungsi sebagai penyimpan informasi waktu secara digital.
  4. SparkFun MicroSD
    Bahan percobaan yang digunakan untuk menyimpan informasi pengukuran dengan kapasitas besar.
  5. Papan Arduino UNO
    Bahan percobaan seabgai piranti digital utama untuk menjalankan fungsi pembacaan masukan analog dari sensor suhu LM35, Pembacaan waktu dengan RTC Ds1307, dan penyimpan data pada memori microSD



Langkah Percobaan


Percobaan kali ini merupakan gabungan percobaan-percobaan yang telah anda lakukan sebelumnya. Adapun langkah percobaan yang harus anda lakukan adalah :
  1. Melakukan antarmuka papan Arduino UNO dengan piranti sensor suhu LM35.
  2. Melakukan antarmuka papan Arduino UNO dengan piranti RTC DS1307.
  3. Melakukan natarmuka papan Arduino UNO dengan piranti memori microSD.
  4. Membuat kode program untuk membaca variable suhu, Membaca waktu (DD/MM/YYY hh:mm:ss) dan menyimpan informasi kedalam pengukuran kedalam memori microSD adapun kriteria penyimpanan adalah:
    a. Format informasi data logger. [DD/MM/YY hh:mm:ss:suhu]
    b. Format file tempat menampung informasi data logger:[nama.txt] dengan maksimal karakter nama adalah 8.
  5. Kompilasi kode program hingga tidak ada kesalahan sintaks, kemudian upload ke papan Arduino UNO.
  6. Amati hasil yang ditampilkan, dan buah kesimpulan dari percobaan yang telah dilakukan.


Tugas


Berikut ini deskripsi tugas yang harus anda lakukan terkait dengan tahap-tahap percobaan yang sudah dilakukan.
  1. Membuat materi presentasi terkait rancangan proyek yang sudah berhasi dibuat
  2. Presentasi didepan kelas
  3. Membuat laporan percobaan yang berisi rancangan antarmuka perangkat keras dan kode program yang berhasil dibuat dan berjalan dengan benar.




Praktek Proyek-1: Mengukur dan Menampilkan Suhu Menggunakan Arduino

Praktek Proyek-1: Mengukur dan Menampilkan Suhu Menggunakan Arduino


Teori Singkat


Proyek ini merupakan gabungan hasil percobaan yang telah anda lakukan sebelumnya, yaitu bagaimana antarmuka masukan analog dan antarmuka keluaran digital. Percobaan yang akan anda lakukan adalah merancang dan membuat system instrumentasi ukur untuk memantau besaran alamiah berupa suhu dan menampilkan informasi hasil pengukuran yang akurat pada penampil digital.



Alat dan Bahan Percobaan


Pada sesi ini akan dibuat system instrumentasi ukuran suhu secara digital. Adapun alat dan bahan yang digunakan selama percobaan adalah :
  1. Resisteor 220
    Bahan percobaan yang digunakan untuk mengatur tingkat kecerahnan penampilan LCD.
  2. LED
    Bahan percobaan yang digunakan sebagai indicator visual suatu proses.
  3. IC LM35
    Bahan percobaan yang berfungsi sebagai sensor pengukur suhu dengan keluaran tegangan analog.
  4. LCD 16x2
    Bahan percobaan yang berfungsi sebagai penampilan informasi secara digital yang mampu menampilkan 32 karakter ASCII dalam dua baris.
  5. Papan Arduino UNO.
    Bahan percobaan yang digunakan sebagai piranti digital utama untuk menjalankan fungsi pembacaan masukan analog dari LM35 secara akurat, dan menampilkan informasi hasil ukur ke penampil LCD.


Langkah Percobaan


Percobaan kali ini merupakan gabungan percobaan-percobaan yang telah anda lakukan sebelumnya. Adapun langkah percobaan yang harus anda lakukan adalah :
  1. Melakukan antarmuka papan Arduino UNO dengan piranti sensor suhu LM35.
  2. Melakukan antarmuka papan Arduino UNO dengan piranti LCD 16X2.
  3. Menerapkan RTOS dalam penyusunan kode program.
  4. Membuat kode program yang terdiri dari dua tugas (task):
    a. Menyalakan indicator berkedip secara berkala dengan frekwensi 2hz.
    b. Membaca variable suhu kemudian menampilkan LCD dan juga mengirimkan melalui terminal serial UART.
  5. Kompilasi kode program hingga tidak ada kesalah sintaksis, kemudian upload ke papan Arduino UNO.
  6. Amati hasil yang ditampilkan dan buat kesimpulan dari percobaan yang telah dilakukan


Tugas


Berikut ini deskripsi tugas yang harus anda laukan terkait dengan tahap-tahap percobaan yang sudah dilakukan.
  1. Membuat materi presentasi terkait rancangan proyek yang sudah berhasil dibuat.
  2. Presentasi didepan kelas.
  3. Membuat laporan percobaan yang berisi rancangan antarmuka perangkat keras dan kode program yang berhasil dibuat dan berjalan dengan benar.




Praktek Real Time Operation System (RTOS) Menggunakan Arduino

Praktek Real Time Operation System (RTOS) Menggunakan Arduino


Teori Singkat


RTOS atau system operasi waktu nyata adalah sebuah system operasi yang dirancang untuk melayani beberapa tugas pemrosesan data masuk/keluar secara real-time tanpa penundaan, dikenal dengan istilah multi-tasking.

Umumnya system operasi ini dijalankan pada platform system benam (embedded system). Pada dasarnya sebuah microprocessor core tidak mampu mengerjakan beberapa tugas secara bersama (concurent) karena memang sifat eksekusi perintah adalah berurutan (sequence).

Kelemahan dari metode sekuensial tradisional adalah waktu tunda eksekusi suatu program karenan menunggu eksekusi program lain yang belum selesi. Jika terdapat banya program yang harus dilakukan oleh microprocessor maka konsep sekuensial model ini sudah tidak bisa andalkan.

RTOS hadir dengan kernel real-time scheduler yagn akan menjadwal eksekusi beberapa pekerjaan secara bergiliran dengan kecepatan tinggi sehingga terkesan adanya eksekusi suatu program secara simultan meskipin kenyataanya program tersebut mengalami jeda eksekusi beberapa kali karena microprocessor mengeksekusi program lain.

RTOS pada sebuah system benam tidak menjalankan pemrosesan secara parallel karena memang arsitekstur system benam tidak mendukungnya, namun dengan melakukan penjadwalan eksekusi dari beberapa pekerjaan maka pekerjaan-pekerjaan tersebut dapat diselesaikan seolah-olah tanpa jeda.

Prinsip kerja dari scheduler RTOS adalah membagi slot waktu eksekusi (tick time) untuk tiap-tiap program dari beberapa program yang dijalankan. Gambar 1 mendeskripsikan prinsip kerja sebuah scheduler RTOS yang menjadwalkan eksekusi setiap program oleh CPU bergilir secara cepat.

Prinsip kerja scheduler RTOS
Gambar 1. Prinsip kerja scheduler RTOS

Setiap program yang dijadwalkan oleh scheduler untuk dieksekusi diberikan prioritas dari HIGH ke LOW, hal ini tersebut untuk menentukan pola penggiliran sesuai denga prioritassnya disapmping menjalankan penjadwalan, RTOS juga menerima permintaan interupsi baik dari perangkat keras maupun dari perangkat lunak yang meminta layanan. Illustrasi penggiliran RTOS dan pelayanan interupsi dapat dilihat pada Gambar 2 dibawah ini.
Pola penjadwalan RTOS terhadap Task dan Interrupt
Gambar 2. Pola penjadwalan RTOS terhadap Task dan Interrupt

Terdapat banyak RTOS yang sudah dirancang untuk diterapkan pada system benam, seperti FreeRTOS. Beberapa orang telah melakukan porting freeRTOS agar dapat diterapkan pada system benam berbasi Arduino, yaitu menyesuiakan Resource MCU (microcontroller unit) yang digunakan oleh arduino agar mampu menjadwalkan freeRTOS dengan baik dan effisien ditinjau dari penggunaan ruang memory ROM dan RAM (footprint) oleh kernel freeRTOS.


Alat dan Bahan Percobaan


Pada sesi ini akan diperkenalkan tentang cara menggunakan RTOS untuk menjalankan beberapa fungsi secara bersamaan. Adapun alat dan bahan yang digunakan selama percobaan adalah :
  1. 3 buah LED (light emitting diode)
    Bahan percobaan yang berfungsi sebagai indicator proses secara visual.
  2. Papan Arduino UNO
    Bahan percobaan sebagai piranti digital utama untuk menguji kinerja RTOS.


Langkah Percobaan



Percobaan penerapan RTOS pada papan Arduino melibatkan dua aktivitas yaitu perancangan antarmuka perangkat keras dan pemrograman perangkat lunak. Adapun langkah percobaan nya adalah sebgai berikut :
  1. Disain antarmuka perangkat keras
    Percobaan menghubungkan papan Arduino UNO dengan indicator LED. Gambar 3 menunjukkan antarmuka perangkat keras sebagai percobaan.
    Antarmuka Papan Arduino Uno dengan 3 buah LED
    Gambar 3. Antarmuka Papan Arduino Uno dengan 3 buah LED
  2. Pemrograman perangkat lunak
    Percobaan yang akan dilakukan adalah menerapkan RTOS pada papan Arduino untuk menghidupkan-matikan tiga LED dengan frekwensi yang berbeda. Berikut ini contoh kode program harus anda buat untuk menguji performa RTOS dengan menggunakn Library : Arduino_FreeRTOS.h
    #include <Arduino_FreeRTOS.h>
    #include <semphr.h>

    #define LED1 8
    #define LED2 9
    #define LED3 10

    SemaphoreHand1e_t xSerialSemaphore;

    void Task LEDI (void *pvParameters);
    void Task LED2 (void *pvParameters);
    void Task LED3 (void *pvParameters);

    vola setup(){
    Serial.begin(9600);
    if(xSerialSemaphore == NULL){
    xSerialSemaphore = xSemaphoreCreateMutex();
    if((xSerialSemaphore)!= NULL)
    xSemaphoreGive((xSerialSemaphore));
    }
    xTaskCreate(Task_LED1, (const portCHAR*)"T1",128 ,NULL 1,NULL);
    xTaskCreate(Task_LED2, (const portCHAR*)"T2",128 ,NULL 1,NULL);
    xTaskCreate(Task_LED3, (const portCHAR*)"T3",128 ,NULL 1,NULL);
    }

    void Loop(){}
    void Task_LED1(void*pvParameters_attribute_((unused))){
    pinMode(LED1, OUTPUT);
    for(;;){
    digitalWrite(LED1,!digitaLRead(LED1));
    vTaskDeIay(30);
    }
    }

    void Task_LED2(void*pvParameters_attribute_((unused))){
    pinMode(LED2, OUTPUT);
    for(;;){
    digitalWrite(LED2,!digitaLRead(LED2));
    vTaskDeIay(60);
    }
    }

    void Task_LED3(void*pvParameters_attribute_((unused))){
    pinMode(LED2, OUTPUT);
    for(;;){
    digitalWrite(LED3,!digitaLRead(LED3));
    vTaskDeIay(90);
    }
    }
    ketik contoh kode program diatas, kompilasi dan upload ke papan Arduino. Kemudian lakukan pengamtan secara visual dan simpulkan.


Tugas


Berikut ini deskripsi tugas yang harus anda lakukan terkait dengan tahapan-tahap percobaan yang sudah dilakukan :
  1. Membuat aplikasi multi-tasking berisi program menyala 3 buah LED dengan pola nyala yang berbeda-beda, dan program pengirim data serial secara periodic. Sehingga terdaat 4 tugas yagn harus dijalankan oleh Arduino secara bersama-sama.
  2. Kompilasi dan Upload kode program yang sudah anda buat, kemudian amati hasilnya.
  3. Membuat laporan percobaan yang berisi foto antarmuka perangkat keras dan kode program yang berhasil dibuat dan berjalan dengan benar.




Praktek Komunikasi Serial Sinkron-SPI Menggunakan Arduino

Praktek Komunikasi Serial Sinkron-SPI Menggunakan Arduino



Teori Singkat


Komunikasi data SPI merupakan komunikasi data digital serial secara sinkron sama seperti halnya I2C, yaitu membutuhkan jalur sinkronisasi pewaktu transmisi data serial. Perbedaannya adalah pada jumlah bus data bus I2hanya menggunakan satu jalur data (SDA) untuk berkomunikasi, sedangkan SPI menggunakan 2 jalur data (MOSI dan MISO) komunikasi tetap dijalankan secara half duplex karena bersifat komunikasi sinkron.

Kelebihan dari komunikasi serial sinkron SPI sama halnya dengan I2C yaitu memungkinkan untuk dilakukan komunikasi serial multi-node. Perbedaannya adalah SPI membutuhkan jalur tambah untuk memilih slave (SS) sebanyak piranti yang terhubung pada bus komunikasi Gambar 1 menunjukan bus SPI untuk komunikasi beberapa piranti sekaligus

Bus komunikasi SPI
Gambar 1. Bus komunikasi SPI

Secara umum, antarmuka SPI juga digunakan Arduino untuk berkomumikasi dengan sensor sekaligus. Dengan kelebihan bus SPI tersebut maka Arduino mampu membaca banyak sensor dalam satu bus saja, hal ini memberikan efektifitas perancangan system benam semakin tinggi.

Seperti yang ditunjukan oleh Gambar 1, pada bus komunikas SPI hanya terdapat 1-Master dan n-SLAVE. Berbeda dengan Bus I2C yang memperbolehkan n-MASTER dan n-SLAVE. Berbeda dengan bus I2C yang menjadi empat :MOSI (mater out-serial in), MISO (master in-serial out), SCK (Serial Clock), dan SS (Slave Select).

MOSI adalah bus transisi data satu arah dari MASTER menuju SLAVE yang sudah dipilih berdasarkan pin SS, sehingga hanya ada satu SLAVE saja yang dapat berkomunikasi dalam satu waktu. MISO adalah bus transmisi data satu arah dari SLAVE yang terpilih berdasarkan pin SS menuju MASTER. Komunikasi data hanya bisa dilakukan oleh MASTER-SLAVE saja, sedangkan komunikasi SLAVE-SLAVE tidak diperbolehkan.
Format paket transmisi data pada komunikasi serian sinkron SPI
Gambar 2. Format paket transmisi data pada komunikasi serian sinkron SPI

Format data komunikasi serial SPI berbeda dengan I2C  Perbedaannya adalah pada paket data yang dikirmkan seperti yang ditunjukan oleh gambar 2. Paket data SPI tidak mengandung informasi alamat SLAVE, hal ini karena SLAVE sudah dipilih secara perangkat keras melalui jalur SS pada Bus.

Sehingga secara umum, format data SPI lebih sederhana dari pada I2C. Panjang data komunikasi SPI bisa bervariasi tergantung jenis pirantinya. Pada UART hanya dibatasi satu data saja  untuk setiap paket pengiriman. Pada papan system Arduino, frekwensi detak bus SPI memiliki rentang yang lebar yaitu antara 125Kbps-8Mbps.

Pada papan Arduino UNO, bus SPI terhubung dengan 4 pin khusus yaitu :10 (SS), 11(MOSI), 12 (MISO) dan 13 (SKCK). Untuk memilih slave tidak hanya terbatas pada pin 10 saja, namun bisa dialokasikan untuk pin digital yang lain sebanyak yang diperlukan.


Alat dan Bahan Percobaan


Pada sesi ini akan diperkenalkan tentang cara melakukan serial papan Arduino dengan piranti SD/MMC menggunakan fasilitas SPI. Adapun alat dan bahan yang digunakan selama percobaan adalah :
  1. Sparkfun microUSB
    Bahan percobaan yang berfungsi sebagai penyimpan data digital berkapasitas besar.
  2. Papan Arduino UNO
    Bahan percobaan sebagai piranti utama untuk menguji komunikasi SPI dengan piranti Memory microSD.


Langkah Percobaan


Percobaan komunikasi data serial SPI oleh papan Arduino melibatkan dua aktifitas, yaitu perancangan antarmuka perangka keras dan pemrograman perangkat lunak. Adapun langkah percobaannya adalah sebagai berikut :
  1. Desain antarmuka perangkat keras
    Percobaan menghbungkan papan arduino Uno dengan piranti mikroSD. Gambar 3 menunjukan antarmuka perangkat keras sebagai percobaan.
    Antarmuka papan Arduino Uno dengan memori microSD
    Gambar 3. Antarmuka papan Arduino Uno dengan memori microSD

  2. Pemrograman perangkat lunak
    Percobaan yang akan dilakukan adalah melakukan komunikasi SPI antara papan arduino dengan microSD. Berikut ini contoh kode program yang harus anda buat untuk menguji komuikasi digital serial sinkron SPI dengan menggunakan Library : SPI.H dan SD.H
    #include <SPI.h>
    #include <SD.h>
    #define SS 10

    Sd2Card card;
    SdVo1ume volume;
    SdFi1e root;

    void setup(){
    Serial.begin (9600); //baudrate = 9600bps
    Serial.println("Inisialisasi microSD");
    if (!card.init(SPI_HALF_SPEED,SS)){ //apa kartu terdeteksi?
    Serial.println("inisialisasi gagal"); //jika tidak
    while(1);
    }
    else{
    Serial.println("inisialisasi berhasil"); //jika ya
    Serial.print("Card type: "); //tampilan informasi
    switch (card.type()){
    case SD_CARD_TYPE_SD1;
                    Serial.println("SD1");
                    break;
                case SD_CARD_TYPE_SD2;
                    Serial.println("SD2");
                    break;
                case SD_CARD_TYPE_SDHC;
                    Serial.println("SDHC");
                    break;
                default:
    Serial.println("Unknown");
    }
    }
    }

    void loop(){} //tidak melakukan apa-apa

    Ketik contoh kode program diatas, kompilasi dan upload ke papan Arduino. Kemudian pengamatan dilakukan menggunakan serial monitor pada Arduino IDE dan Simpulkan.


Tugas


Berikut ini deskripsi tugad yang harus anda lakukan terkait dengan tahapan-tahapan percobaan yang sudah dilakukan.
  1. Membuat file dengan nama nama_file.txt mengguankan notepad pada PC/Laptop kemudian simpan file tersebut pada microSD. Perlu diperhatikan bahwa nama) file tidak boleh lebih dari 8 karakter, contoh = “log.txt” seperti pada contoh kode program.
  2. Melakukan proses menyimpan data ke dalam file yang sudah dibuat pada microSD menggunakan papan Arduino. Ketik contoh kode program berikut, kompilasi, dan upload ke papan Arduino.
    #include <SPI.h>
    #include <SD.h>
    #define SS 10

    File myFi1e;

    void setup(){
    Serial.begin(9600); //baudrate = 9600bps
    Serial.printIn("Inisialisasi microSD...");
    if (!SD.begin(SS)){ //apa SD terdeteksi?
    Serial.printIn("inisialisasi gagal"); //jika tidak
    while(1);
    }
    else {
    Serial.println("inisialisasi sukses"); //jika ya
    Serial.println("menyimpan file...");
    myFi1e = SD.open("log.txt", FILE_WRITE); //mode tulis
    if (myFi1e){ //apa file tersedia?
    myFi1e.printIn("Nama = Joko Widodo"); //jika ya
    myFi1e.printIn("Alamat = Jakarta");
    myFi1e.printIn("Pekerjaan = Presiden");
    myFi1e.close();
    Serial.println("penyimpanan selesai");
    }
    else{
    Serial.printIn("gagal membuka file"); //jika tidak
    }
    }
    }

    void loop(){} //tidak melakukan apa-apa

  3. Melakukan proses data dari file yang tersimpan dan terisi pada microSD menggunakan papan Arduino. Ketik contoh kode program berikut, kompilasi dan upload ke papan Arduino.
    #include <SPI.h>
    #include <SD.h>
    #define SS 10

    File myFi1e;

    void setup(){
    Serial.begin(9600); //baudrate = 9600bps
    Serial.printIn("Inisialisasi microSD...");
    if (!SD.begin(SS)){ //apa SD terdeteksi?
    Serial.printIn("inisialisasi gagal"); //jika tidak
    while(1);
    }
    else {
    Serial.println("inisialisasi sukses"); //jika ya
    Serial.println("menyimpan file...");
    myFi1e = SD.open("log.txt"); //mode baca
    if (myFi1e){ //apa file tersedia?
    myFi1e.printIn("isi file:"); //jika ya,tampilkan
    while(myFile.available()){
    Serial.write(myFile.read());
    }
    myFile.close();
    }
    else{
    Serial.printIn("gaga1 membuka file"); //jika tidak
    }
    }
    }

    void loop(){} //tidak melakukan apa-apa

  4. Ulangi percobaan dengan mengisi informasi yang berbeda pada dile di dalam microSD.
  5. Membuat laporan percobaan yang berisi foto antarmuka perangkat keras dan kode program yang berhasil dibuat dan berjalan dengan benar.




Praktek Komunikasi Serial Sinkron-I2C Menggunakan Arduino

Praktek Komunikasi Serial Sinkron-I2C Menggunakan Arduino


Teori Singkat


Komunikasi data I2C merupakan komunikasi data digital serial secara sinkron, yaitu membutuhkan jalur sinkronisasi pewaktu transmisi data serial. Karena bersifat komunikasi sikron maka pola komunikasi antar piranti hanya bisa dilakukan secara half duplex.

Kelebihan dari komunikasi serial sinkron I2C adalah memungkinkan untuk dilakukan komunikasi serial multi-node, yaitu komunikasi dengan banyak piranti dalam satu bus komuniksai yang sama. Hal ini berbeda dengan komunikasi tak sinkron UART yang bersifat peer-to-peer yaitu hanya bisa dilakukan oleh dua piranti saja.

Selain itu, teknologi i2C tidak perlu pengaturan boudrate karenan komunikasi dilakukan secara sinkron dengan kecepatan yang setiap saat bias dirubah. Gambar 1 menunjukan bus i2C untuk komunikasi beberapa piranti sekaligus.
Bus komunikasi I2C
Gambar 1. Bus komunikasi I2C

Umumnya, Antarmuka I2digunakan Arduino untuk berkomunikasi dengan sensor-sensor. Dengan kelebihan bus I2C tersebut maka Aduino mampu membaca banyak sensor dalan satu bus saja, hal ini memberikan efektifitas perancangan system benam semakin tinggi.

Dengan bus I2C maka akan dihemat pemakaian pin Arduino dan memudahkan perancangan system elektronikanya (missal: PCB). Seperti yang ditunjukan oleh Gambar 1, pada bus komunikasi I2C terdapat 1-MASTER dan n-SLAVE, bus komunikasi I2C terbagi menjadi dua: SDA(serial data) dan SCL (synchronous clock).

SDA adalah bus transmisi data secara dua arah yang bersifat half duplex, sehingga hanya ada satu piranti saja yang boleh menggunakan dalam satu waktu. Sedangkan SCL adalah bus transmisi detak sinkronisasi yang bersifat satu arah, yaitu hanya piranti MASTER saja yang boleh menggunakan. Komunikasi hanya bisa dilakukan oleh MASTER-SLAVE saja dan komunkiasi SLAVE-SLAVE tidak diperbolehkan.
Format paket transmisi data komunikasi serial sinkron I2C
Gambar 2. Format paket transmisi data komunikasi serial sinkron I2C

Format data komunikasi serial I2berbeda dengan UART. Perbedaanya adalah pada keberadaan sinyal detak sinkronisasi seperti yang ditunjukan Gambar 2 panjang data komunikasi I2bisa bervariasi tergantung jenis piranti.

Pada UART hanya dibatasi satu data saja untuk setiap paket pengirim. Frekwensi detak bus I2umumnya sangat pendek, yang hanya menghubungkan beberapa piranti dalam satu papan rangkaian tercetak (printed circuit board-PCB).

Pada papan Arduino UNO, bus I2terhubung dengan dua pin khusus yaitu : A4 (SDA) dan A5 (SCL). Dua pin tersebut secara umum adalah digunakan untuk masukan analog, namun memiliki fungsi lain yaitu sebagai bus komunikasi I2C.


Alat dan Bahan Percobaan


Pada sesi ini akan diperkenalkan tentang cara melakukan komunikasi serial papan Arduino dengan piranti RTC (real time clock) menggunakan fasilitas i2C. Adapun alat dan bahan yang digunakan selama percobaan adalah :
  1. 2 buah resistor 4K7
    Bahan percobaan yang digunakan sebagai resistor pull up bus komunikasi data serial I2C akar transmisi data bisa berjalan dengan baik.
  2. Crystal 32.768KHZ
    Bahan percobaan yang berfungsi sebagai komponen generator detak IC RTC DS1307. Berikut Gambarnya.
    Gambar 3. Crystal 32.768KHZ
  3. IC RTC DS1307
    Bahan percobaan yang berfungsi sebagai pewaktu digital dan menggunakan bus komunikasi data serial I2C. Data waktu yang diberikan oleh piranti ini meliputi : DD/MM/YY hh:mm:ss . Bentuk IC RTC DS1207 beserta tata letak kakinya ditunjukkan oleh gambar 4 berikut.
    IC Real Time Clock DS1307
    Gambar 4. IC Real Time Clock DS1307
  4. Papan Arduino UNO
    Bahan percobaan sebagai piranti digital utama untuk menguji komunikasi I2C dengan IC RTC DS1307 yang melibatkan aktivitas perancangan antarmuka perangkat keras dan pemrograman perangkat lunak.


Langkah Percobaan


Percobaan komunikasi data serial I2C oleh papan Arduino melibatkan aktifitas, yaitu perancangan antarmuka perangkat keras dan pemrograman perangkat lunak. Adapun percobaan adalah sebagai berikut :
  1. Desain antarmuka perangkat keras
    Percobaan ini melibatkan pewaktu DS1307. Gambar 5 menunjukan antarmuka perangkat keras sebagai bahan percobaan
    Antarmuka papan Arduino UNO dengan IC RTC DS1307
    Gambar 5. Antarmuka papan Arduino UNO dengan IC RTC DS1307
  2. Pemrograman perangkat lunak
    Percobaaan yang akan dilakukan adalah melakukan komunikasi I2C antara papan Arduino dengan IC RTC DS1307. Berikut ini contoh kode program anda harus buat unuk menguji komunikasi digital serial sinkron I2C dengan menggunakan library : Wire.h dan RTClib.h
    #include <Wire.h>       //definisi library I2C
    #include "RTClib.h" //definisi library RTC

    RTC_DS1307 rtc; //definisi object

    void setup(){
    Serial.begin(9600); //baudrate = 9600 bps
    if(!rtc.begin()){ //apakah RTC tidak terdeteksi?
    Serial.println("DS1307 tidak terdeteksi");
    while(1);
    }
    if(!rtc.isrunning()) { //apa RTC tidak aktif ?
    Serial.prinln("RTC tidak aktif!");
    rtc.adjust(DateTime(2018, 1, 1, 0, 0, 0));
    }
    }

    void loop(){
    DateTime now = rtc.now(); //baca info waktu RTC
    Serial.print(now.day(), Dec); //kirim data tanggal
    Serial.print('/');
    Serial.print(now.month(), Dec); //kirim data bulan
    Serial.print('/');
    Serial.print(now.year(), Dec); //kirim data tahun
    Serial.print(" ");
    Serial.print(now.hour(), Dec); //kirim data jam
    Serial.print(':');
    Serial.print(now.minute(), Dec); //kirim data menit
    Serial.print(':');
    Serial.print(now.second(), Dec); //kirim data detik
    delay(1000);
    }

    Ketik contoh program diatas kompilasi da nupload ke papan Arduino. Kemudian pengamatan dilakukan menggunakan serial monitor pada Arduino IDE dan simpulkan.

Tugas


Berikut ini deskripsi tugas yang harus anda lakukan terkait dengan tahapan-tahapan percobaan yang sudah dilakukan.
  1. Membuat program Alrm, yaitu apabila waktu yang terbaca dari RTC sama dengan waktu yang diinginkan, maka kemudian kirimkan pemberitahuan melalaui serial UART.
  2. Kompilasi dan upload kode program yang sudah anda buat, kemudian amati hasilnya
  3. Membuat laporan percobaan yang berisi foto antarmuka perangkat keras dan kode program yang berhasil dibuat dan berjalan dengan benar.