1. Mahasiswa mampu memahami board mikrokontroler Arduino 2. Mahasiswa mampu memprogram mikrokontroler Arduino Arduino 3. Mahasiswa mampu membuat aplikasi dengan mikrokontroler Arduino
Arduino Uno R3 dengan ATmega328P mempunyai 14 digital input/output (6 di antaranya dapat digunakan untuk PWM output), 6 analog input, 16 Mhz crystal oscillator, USB connection, power jack, ICSP header, dan reset button. Skema Arduino A rduino Uno R3 didasarkan pada blog diagram dari mikrokontroler jenis AVR ATmega328. Komponen utama di dalam papan Arduino adalah sebuah mikrokontroler 8 bit dengan merek ATmega yang dibuat oleh perusahaan Atmel Corporation. Skema Arduino Uno R3 dapat dilihat pada gambar 1.1. dibawah ini.
menerima rangsangan dari lingkungan dan merespon balik. Physical computing adalah sebuah konsep untuk memahami hubungan yang manusiawi antara lingkungan yang sifat alaminya adalah analog dengan dunia digital. Pada prakteknya konsep ini diaplikasikan dalam desaindesain alat atau projekprojek yang menggunakan sensor dan microcontroller untuk menerjemahkan input analog ke dalam sistem software untuk mengontrol gerakan alat-alat elektro-mekanik seperti lampu, motor dan sebagainya. Pembuatan prototype atau prototyping adalah kegiatan yang sangat penting di dalam proses physical computing karena pada tahap inilah seorang perancang melakukan eksperimen dan uji coba dari berbagai jenis komponen, ukuran, parameter, program komputer dan sebagainya berulang-ulang kali sampai diperoleh kombinasi yang paling tepat. Dalam hal ini perhitungan angka-angka dan rumus yang akurat bukanlah satu-satunya faktor yang menjadi kunci sukses di dalam mendesain sebuah alat karena ada banyak faktor eksternal yang turut berperan, sehingga proses mencoba dan menemukan/mengoreksi kesalahan perlu melibatkan hal-hal yang sifatnya non-eksakta. Prototyping adalah gabungan antara akurasi perhitungan dan seni. Proses prototyping bisa menjadi sebuah kegiatan yang menyenangkan atau menyebalkan, itu tergantung bagaimana kita melakukannya. Misalnya jika untuk mengganti sebuah komponen, merubah ukurannya atau merombak kerja sebuah prototype dibutuhkan usaha yang besar dan waktu y ang lama, mungkin prototyping akan sangat melelahkan karena pekerjaan ini dapat dilakukan berulang-ulang sampai puluhan kali – bayangkan bayangkan betapa frustasinya perancang yang harus melakukan itu. Idealnya sebuah prototype adalah sebuah sistem yang fleksibel dimana perancang bisa dengan mudah dan cepat melakukan perubahan-perubahan dan mencobanya lagi sehingga tenaga dan waktu tidak menjadi kendala berarti. Dengan demikian harus ada sebuah alat pengembangan yang membuat proses prototyping menjadi mudah.
menerima rangsangan dari lingkungan dan merespon balik. Physical computing adalah sebuah konsep untuk memahami hubungan yang manusiawi antara lingkungan yang sifat alaminya adalah analog dengan dunia digital. Pada prakteknya konsep ini diaplikasikan dalam desaindesain alat atau projekprojek yang menggunakan sensor dan microcontroller untuk menerjemahkan input analog ke dalam sistem software untuk mengontrol gerakan alat-alat elektro-mekanik seperti lampu, motor dan sebagainya. Pembuatan prototype atau prototyping adalah kegiatan yang sangat penting di dalam proses physical computing karena pada tahap inilah seorang perancang melakukan eksperimen dan uji coba dari berbagai jenis komponen, ukuran, parameter, program komputer dan sebagainya berulang-ulang kali sampai diperoleh kombinasi yang paling tepat. Dalam hal ini perhitungan angka-angka dan rumus yang akurat bukanlah satu-satunya faktor yang menjadi kunci sukses di dalam mendesain sebuah alat karena ada banyak faktor eksternal yang turut berperan, sehingga proses mencoba dan menemukan/mengoreksi kesalahan perlu melibatkan hal-hal yang sifatnya non-eksakta. Prototyping adalah gabungan antara akurasi perhitungan dan seni. Proses prototyping bisa menjadi sebuah kegiatan yang menyenangkan atau menyebalkan, itu tergantung bagaimana kita melakukannya. Misalnya jika untuk mengganti sebuah komponen, merubah ukurannya atau merombak kerja sebuah prototype dibutuhkan usaha yang besar dan waktu y ang lama, mungkin prototyping akan sangat melelahkan karena pekerjaan ini dapat dilakukan berulang-ulang sampai puluhan kali – bayangkan bayangkan betapa frustasinya perancang yang harus melakukan itu. Idealnya sebuah prototype adalah sebuah sistem yang fleksibel dimana perancang bisa dengan mudah dan cepat melakukan perubahan-perubahan dan mencobanya lagi sehingga tenaga dan waktu tidak menjadi kendala berarti. Dengan demikian harus ada sebuah alat pengembangan yang membuat proses prototyping menjadi mudah.
akademisi dan profesional dengan menggunakan Arduino, selain itu juga ada banyak modul-modul pendukung (sensor, tampilan, penggerak dan sebagainya) yang dibuat oleh pihak lain untuk bisa disambungkan dengan Arduino. Arduino berevolusi menjadi sebuah platform karena ia menjadi pilihan dan acuan bagi banyak praktisi. Salah satu yang membuat Arduino memikat hati banyak orang adalah karena sifatnya yang open source, baik untuk hardware maupun software-nya. Diagram rangkaian elektronik Arduino digratiskan kepada semua orang. Anda bisa bebas men-download gambarnya, membeli komponen-komponennya, membuat PCB-nya dan merangkainya sendiri tanpa harus membayar kepada para pembuat Arduino. Sama halnya dengan IDE Arduino yang bisa di-download dan diinstal pada komputer secara gratis. Kita patut berterima kasih kepada tim Arduino yang sangat dermawan membagi-bagikan kemewahan hasil kerja keras mereka kepada semua orang. Kita betul-betul kagum dengan desain hardware, bahasa pemrograman dan IDE Arduino yang berkualitas tinggi dan sangat berkelas. Arduino dikembangkan oleh sebuah tim yang beranggotakan orang-orang dari berbagai belahan dunia. Anggota inti dari tim ini adalah:
Massimo Banzi Milano, Italy David Cuartielles Malmoe, Sweden Tom Igoe New York, US Gianluca Martino Torino, Italy David A. Mellis Boston, MA, USA
Profil mengenai anggota tim tersebut dan kontribusinya bisa diakses pada situs web http://www.arduino.cc/playground/Main/People.. http://www.arduino.cc/playground/Main/People Saat ini komunitas Arduino berkembang dengan pesat dan dinamis di berbagai belahan dunia.
1. Hardware _ papan input/output (I/O) 2. Software _ Software Arduino meliputi IDE untuk menulis program, driver untuk koneksi dengan komputer, contoh program dan library untuk pengembangan program. Selanjutnya kita akan mengenal masing-masing bagian ini lebih jauh. 1. Hardware Komponen utama di dalam papan Arduino adalah sebuah microcontroller 8 bit dengan merk yang dibuat oleh perusahaan . Berbagai papan Arduino menggunakan tipe ATmega yang berbeda-beda tergantung dari spesifikasinya, sebagai contoh Arduino Uno menggunakan ATmega328 sedangkan Arduino Mega 2560 yang lebih canggih menggunakan ATmega2560. Untuk memberikan gambaran mengenai apa saja yang terdapat di dalam sebuah microcontroller, pada gambar berikut ini diperlihatkan contoh diagram blok sederhana dari microcontroller ATmega328 (dipakai pada Arduino Uno).
Flash Memory
32 KB (ATmega328) of which 0.5 KB used by bootloader
SRAM
2 KB (ATmega328)
EEPROM
1 KB (ATmega328)
Clock Speed
16 MHz
Length
68.6 mm
Width
53.4 mm
Weight
25 g
Blok-blok di atas dijelaskan sebagai berikut: Universal Asynchronous Receiver/Transmitter (UART) adalah antar muka yang digunakan untuk komunikasi serial seperti pada RS-232, RS-422 dan RS-485.
2KB RAM pada memory kerja bersifat volatile (hilang saat daya dimatikan), digunakan oleh variable-variabel di dalam program. 32KB RAM flash memory bersifat non-volatile , digunakan untuk menyimpan program yang dimuat dari komputer. Selain program, flash memory juga menyimpan bootloader . adalah program inisiasi yang ukurannya kecil, dijalankan oleh CPU saat daya dihidupkan. Setelah bootloader selesai dijalankan, berikutnya program di dalam RAM akan dieksekusi. 1KB EEPROM bersifat non-volatile, digunakan untuk menyimpan data yang tidak boleh hilang saat daya dimatikan. Tidak digunakan pada papan Arduino.
Central Processing Unit (CPU) , bagian dari microcontroller untuk menjalankan setiap instruksi
Gambar 1.4. Bagian-bagian Utama Arduino
Berfungsi sebagai input atau output, dapat diatur oleh program. Khusus untuk 6 buah pin 3, 5, 6, 9, 10 dan 11, dapat juga berfungsi sebagai pin analog output dimana tegangan output-nya dapat diatur. Nilai sebuah pin output analog dapat diprogram antara 0 – 255, dimana hal itu mewakili nilai tegangan 0 – 5V.
Berfungsi untuk: Memuat program dari komputer ke dalam papan Komunikasi serial antara papan dan komputer Memberi daya listrik kepada papan
Sambungan atau jumper untuk memilih sumber daya papan, apakah dari sumber eksternal atau menggunakan USB. Sambungan ini tidak diperlukan lagi pada papan Arduino versi terakhir karena pemilihan sumber daya eksternal atau USB dilakukan secara otomatis.
Jika microcontroller dianggap sebagai sebuah otak, maka kristal adalah jantung-nya karena komponen ini menghasilkan detak-detak yang dikirim kepada microcontroller agar melakukan sebuah operasi
Jika hendak disuplai dengan sumber daya eksternal, papan Arduino dapat diberikan tegangan DC antara 9-12V.
Pin ini sangat berguna untuk membaca tegangan yang dihasilkan oleh sensor analog, seperti sensor suhu. Program dapat membaca nilai sebuah pin input antara 0 – 1023, dimana hal itu mewakili nilai tegangan 0 – 5V.
Sekalipun sebuah papan Arduino dapat bekerja dengan mendapat asupan daya dari sebuah komputer, namun hal itu tidak berarti ia dapat berkomunikasi dengan komputer tersebut. Untuk memastikan Arduino telah terpasang dengan benar dan dapat berkomuniasi dengan interaktif maka ia perlu diuji. a. Jalankan IDE Arduino dengan menjalankan sebuah file bernama pada lokasi software Arduino.
c. Jalankan menu . Ini adalah program sederhana yang fungsinya adalah membuat lampu LED menyala berkedip-kedip seperti yang telah dijelaskan sebelumnya.
/* Blink Turns on an LED on for one second, then off for one second, repeatedly.
e. Jika berhasil akan memberikan informasi sebagai berikut
Bahasapemrograman mikrokontroller Arduino, seperti bahasapemrogramantingkatmenegahpadaumumnya. Arduino punsamamemilikialuralgoritmayangmiripdanyangbedaadalahcarapenulisansintaknya. Struktur dasardaribahasapemrogramanarduinoitusederhanahanyaterdiridariduabagian.
{ pinMode(13,OUTPUT);// mengset ‘pin’ 13 sebagai output
}
Setelah melakukan fungsi setup() maka secara langsung akan melakukan fungsi loop() secara berurutan dan melakukaninstruksi-instruksi yangadadalamfungsiloop(). void loop() { digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); }
// // // //
nyalakan ‘pin’ 13 pause selama 1 detik matikan ‘pin’ 13 pause selama 1 detik
Function (fungsi) adalah blok pemrograman yang mempunyai nama dan mempunyai statement yang akan di eksekusi ketika function dipanggil. Fungsivoidsetup() danvoidloop() telah dibahas diatas danpembuatanfungsiyanglainakandi bahasselanjutnya. Carapendeklarasianfunction type functionName(parameters) { // Statement; }
Contoh: int delayVal()
Semua statement yang di tulis dalam block comments tidak akan di eksekusi dan tidak akan di compile sehingga tidak mempengaruhibesarprogramyangdibuatuntukdimasukandalamboardarduino.
Samahalnyadenganblockcomments, linecomentspunsamahanyasajayangdijadikankomenadalhperbaris..
Variable adalah sebuah penyimpan nilai yang dapat di gunakan dalam program.Variable dapat di rubah sesuai dengan instruksi yangkitabuat.Ketikamendeklarisikanvariableharusdiikutsertakantypevariablesertanilaiawalvariable. Type variableName = 0;
Contoh Int inputVariable = 0;//mendefinisikan sebuah variable bernama inputVariable dengan nilai awal 0 inputVariable = analogRead(2);// menyimpan nilai yang ada di analog pin 2 ke inputVariable
Sebuahvariabledapatdideklarasikan pada awal program sebelum void setup(), secara local didalamsebuah function, dan terkadang di dalam sebuah block statement pengulangan. Sebuah variable global hanya satu dan dapat di gunakan pada semua block function dan statement di dalam program. Variable global di deklarasikan pada awal program sebelum fungstion setup(). Sebuah variable local dideklarasikan di setiap block function ataudisetiap blockstatementpengulangan danhanyadapatdigunakanpadablockyangbersangkutansaja. Contohpenggunaan:
Integer adalah tipe data yang utama untuk menyimpan nilai bilangan bulat tanpa koma.Penyimpanan integer sebesar 16bitdenganrange 32.767 sampai-32.768. Int integerVariable = 1600;//mendeklarasikan‘integerVariable’
sebagai type integer
Perluasan ukuran untuk long integer, penyimpanan long integer sebesar 32-bit dengan range 2.147.483.647 sampai 2.147.483.648 Long longVariable = 500000; // mendeklarasikan ‘longVariable’ sebagai type long
Float adalah tipe datayangdapatmenampung nilai decimal, floatmerupakanpenyimpanyanglebihbesardariintegerdan dapatmenyimpansebesar 32-bitdenganrange 3.4028235E+38 sampai-3.4028235E+38 Float floatVariable = 3.14; // mendeklarasikan ‘floatVariable’ sebagai type float
Array adalah kumpulan nilai yang dapat di akses dengan index number, nilai yang terdapat dalam array dapat di panggil dengan cara menuliskan nama array dan index number. Array dengan index 0 merupakan nilai pertama dari array.Array perludideklarasikandankalauperludiberinilaisebelumdigunakan. Int arraysName[] = {nilai0, nilai1, nilai2 . . . }
Contohpenggunaanarray:
x x x x x x
++; // sama seperti x --; // sama seperti x += y; // sama seperti -= y; // sama seperti *= y; // sama seperti /= y; // sama seperti
= = x x x x
x x = = = =
+ x x x x
1 atau menaikan nilai x sebesar 1 1 atau mengurangi nilai x sebesar 1 + y – y * y / y
Statementinimembadingkanduavariabledanapabilaterpenuhiakanbernilai 1 atautrue. Statementinibanyakdigunakan dalamoperatorbersyarat. x x x x x x
== y; != y; < y; > y; <= y; >= y;
// // // // // //
x x x x x x
sama dengan y tidak sama dengan y leboh kecil dari y lebih besar dari y lebih kecil dari sama dengan y lebih besar dari sama dengan y
operator logical digunakan untuk membandingkan 2 expresi dan mengembalikan nilai balik benar atau salah tergantung darioperatoryangdigunakan. Terdapat 3 operatorlogical AND,OR, dan NOT, yangbiasanyadigunakanpadaifstatement. Contohpenggunaan: Logical AND If ( x> 0 && x < 5) // bernilai benar apabila kedua operator pembanding terpenuhi
Logical OR If ( x> 0 || y > 0)// bernilai benar apabila salah satu dari operator pembanding terpenuhi
Logical NOT
digitalWrite( 13, HIGH );
KonstantainidigunakandenganfungsipinMode() untukmendifinisikammodepindigital, sebagaiinputatauoutput pinMode( 13, OUTPUT );
If Operator if menguji sebuah kondisi seperti nilai analog sudah berada di bawah nilai yang kita kehendaki atau belum, apabila terpenuhi maka akan mengeksekusi baris program yang ada dalam brackets kalau tidak terpenuhi maka akan mengabaikanbarisprogramyangadadalambrackets. If ( someVariable ?? value ) { //DoSomething; }
Operatorif…elsemengtestsebuahkondisiapabilatidaksesuaidengankondisiyangpertamamakaakanmengeksekusibaris programyangadadielse. If ( inputPin == HIGH ) { //Laksanakan rencana A; } Else { //Laksanakan rencana B; }
Do { //doSomething; } While ( someVariable ?? value );
Input / Output Digital pada breadboard arduino ada 14, pengalamatnya 0 - 13, ada saat tertentu I/O 0 dan 1 tidak bisa di gunakankarenadipakaiuntukkomunikasiserial, sehinggaharushati-hatidalampengalokasian I/O.
Digunakan dalam void setup() untuk mengkonfigurasi pin apakah sebagai Input atau Output. Arduino digital pins secara defaultdikonfigurasisebagaiinputsehinggauntukmerubahnyaharusmenggunakanoperatorpinMode(pin, mode). pinMode (pin, OUTPUT); // mengset pin sebagai output digitalWrite(pin, HIGH); // pin sebagai source voltage
membacanilaidaripinyangkitakehendakidenganhasil HIGHatau LOW. Value = digitalRead(pin);// mengset ‘value’ sama dengan pin
digunakanuntukmengsetpindigital. Pindigitalarduinomempunyai 14 ( 0 – 13 ). digitalWrite ( pin, HIGH );
// set pin to HIGH
Mengembalikannilaidalammilliseconddihitungsejakarduinoboardmenyala. Penapungnyaharuslonginteger. Value = millis();// set ‘value’ equal to millis()
Membadingkan 2 variabledanakanmengembalikannilaiyangpalingkecil. value = min(value, 100);// set ‘value’ sebagai nilai yang paling kecil dari kedua
nilai
Maxmerupakankebalikandarimin. value = max(value, 100);//set ‘value’ sebagai nilai yang paling besar dari kedua nilai
Statementinidigunakanuntukmengaktifkankomunikasiserialdanmengsetbaudrate. void setup() { Serial.begin(9600);//open serial port and set baudrate 9600 bps }
Mengirimkandatakeserialport Serial.println(100);
// mengirimkan 100
1. 2. 3. 4. 5.
Mahasiswa memahami rangkaian mikrokontroller untuk menghidupkan dan mematikan LED. Mahasiswa dapat memahami program Arduino untuk menghidupkan dan mematikan LED. Mahasiswa memahami struktur program Arduino, void setup dan void loop. Mahasiswa memahami beberapa instruksi Arduino dasar pinMode dan digitalWrite. Mahasiswa memahami pembuatan instruksi waktu tunda, delay.
1. Sebuah Komputer 2. Satu set trainer mikrokontroler
LED (Light Emitting Dioda) adalah dioda yang dapat memancarkan cahaya pada saat mendapat arus bias maju (forward bias). LED (Light Emitting Dioda) dapat memancarkan cahaya karena menggunakan dopping galium, arsenic dan phosporus. Jenis doping yang berbeda diata dapat menhasilkan cahaya dengan warna yang berbeda. LED (Light Emitting Dioda) merupakann salah satu jenis dioda, sehingga hanya akan mengalirkan arus listrik satu arah saja. LED akan memancarkan cahaya apabil diberikan tegangan listrik dengan konfigurasi forward bias. Berbeda dengan dioda pada umumnya, kemampuan mengalirkan arus pada LED (Light Emitting Dioda) cukup rendah yaitu maksimal 20 mA. Apabila LED
seperti pada gambar diatas. Pemasangan LED (Light Emitting Dioda) agar dapat m enyala adalah dengan memberikan tegangan bias maju yaitu dengan memberikan tegangan positif ke kaki anoda dan tegangan negatif ke kaki katoda. Konsep pembatas arus pada dioda adalah dengan memasangkan resistor secara seri pada salah satu kaki LED (Light Emitting Dioda). Rangkaian dasar untuk menyalakan LED (Light Emitting Dioda) membutuhkan sumber tegangan LED dan resistor sebgai pembatas arus seperti pada rangkaian berikut.
Gambar 2.2. Rangkaian Dasar LED
Besarnya arus maksimum pada LED (Light Emitting Dioda) adalah 20 mA, sehingga nilai resistor harus ditentukan. Dimana besarnya nilai resistor berbanding lurus dengan besarnya tegangan sumber yang digunakan. Secara matematis besarnya nilai resistor pembatas arus LED (Light Emitting Dioda) dapat
Gambar 2.3. Rangkaian Modul LED
Percobaan led berkdip dan led berjalan (running led) yang dihubungkan pada Input/0utput board Arduino diperlihatkan pada gambar 4 dan gambar 5. Led akan menyala bila dikirimkan data HIGH (‘1’) pada pin 10, karena anoda dari led mendapatkan level tegangan mendekati 5V sedangkan katodanya dihubungkan ke ground (0V).
Untuk aplikasi menggeser LED diperlukan beberapa LED untuk dihubungkan dengan pin mikrokontroler. Rangkaian menggunakan common Katoda, sehingga untuk menyalakan LED membutuhkan nilai logika 1, sedangkan kalo ingin mematikan diberika nilai logika sebsar 0. Rangkailah rangkaian LED 4 bit seperti dibawah ini untuk mengaplikasikan LED bergeser dari kiri ke kanan atau dari kanan ke kiri.
Gambar 2.5. Rangkaian 4 Bit LED
delay(1000); digitalWrite(ledPin1, digitalWrite(ledPin2, digitalWrite(ledPin3, digitalWrite(ledPin4, delay(1000); digitalWrite(ledPin1, digitalWrite(ledPin2, digitalWrite(ledPin3, digitalWrite(ledPin4, delay(1000); }
1. 2. 3. 4. 5. 6. 7.
LOW); LOW); HIGH); LOW); LOW); LOW); LOW); HIGH);
Nyalakan computer dengan program Arduino ! Sambungkan Trainer mikrokontroler dengan computer menggunakan kabel USB ! Sambungkan kabel-kabel jumper sesuai dengan praktikum yang dilaksanakan ! Ketiklah program yang diatas pada software Arduino ! Lakukan verifikasi terhadap program, apakah terjadi error atau tidak ! Jika tidak terjadi error lanjutkan dengan mengupload program ke dalam mikrokontroler ! Amati hasilnya apakah sudah sesuai dengan perintah instruktur atau belum, kalau belum lakukan editing program dan kembali ke langkah 5 !
1 Mahasiswa memahami rangkaian mikrokontroller dengan interface ke saklar. 2. Mahasiswa dapat memahami program Arduino untuk mengambil data saklar dan mengeluarkan data ke LED. 3. Mahasiswa memahami beberapa instruksi Arduino dasar, digitalRead, if, dan for.
1. Sebuah Komputer 2. Satu set trainer mikrokontroler
Anda mungkin akrab dengan switch, salah satu jenis saklar yang Anda gunakan setiap hari adalah lampu. Sebuah lampu adalah perangkat sederhana dengan dua posisi, dan mematikan. Ketika di, dua kawat yang terhubung di dalam, yang memungkinkan arus mengalir. Ketika off, dua kabel yang terputus.
Gambar 3.2. Simbol dan Komponen Push Button
Percobaan untuk membaca masukan data digital dilakukan dengan menggunakan saklar push botton . Rangkaian percobaan diperlihatkan pada gambar
Gambar 3.3. Rangkaian Saklar dan LED
Rangkaialah 4 buah LED dan 4 buah saklar push button untuk aplikasi penekanan tombol dan menyalakan lampu LED maupun menggeser lampu LED. Mula-mula mikrokontroler membaca kondisi saklar kemudian memprosesnya untuk diteruskan ke pin output berupa LED sesuai dengan program yang diberikan.
if (val == LOW) // cek switch ditekan { // switch ditekan LED on digitalWrite(ledPin[indeks], HIGH); } else { //LED off digitalWrite(ledPin[indeks], LOW); } } }
1. 2. 3. 4. 5. 6. 7.
Nyalakan computer dengan program Arduino ! Sambungkan Trainer mikrokontroler dengan computer menggunakan kabel USB ! Sambungkan kabel-kabel jumper sesuai dengan praktikum yang dilaksanakan ! Ketiklah program yang diatas pada software Arduino ! Lakukan verifikasi terhadap program, apakah terjadi error atau tidak ! Jika tidak terjadi error lanjutkan dengan mengupload program ke dalam mikrokontroler ! Amati hasilnya apakah sudah sesuai dengan perintah instruktur atau belum, kalau belum lakukan editing program dan kembali ke langkah 5 !
1. Mahasiswa memahami rangkaian interface mikrokontroller dengan 7 segmen 2. Mahasiswa dapat memahami program Arduino untuk menampilkan data ke 7 segment 3. Mahasiswa memahami beberapa instruksi Arduino dasar, array data dan bitRead.
1. Sebuah Komputer 2. Satu set trainer mikrokontroler
Seven segment merupakan segment-segment yang digunakan untuk menampilkan angka-angka atau huruf. Seven segment ini tersusun atas 7 buah LED yang membentuk membentuk angka atau huruf dimana penyusunnya menggunakan label dari ‘a’ sampai ‘g’
dan satu lagi untuk dot point
(DP). Salah satu terminal LED dihubungkan menjadi satu sebagai kaki common (biasanya pin-nya berada ditengah)
Merupakan kebalikan dari Common Anoda. Disini semua katoda disatukan secara parallel dan dihubungkan ke GROUND. Karena seluruh katoda dihubungkan ke GROUND, maka COMMON KATODA ini berada pada kondisi AKTIF HIGH (led akan menyala/aktif bila diberi logika 1).
Gambar 4.2. Bentuk Fisik Seven Segment CC dan CA Prinsip Kerja : Prinsip kerja seven segment ialah input biner pada switch dikonversikan masuk ke dalam decoder, baru kemudian decoder mengkonversi bilangan biner tersebut menjadi decimal, yang nantinya akan ditampilkan pada seven segment. Seven segment dapat menampilkan angka-angka desimal dan beberapa karakter tertentu melalui kombinasi aktif atau tidaknya LED dalam seven segment. Untuk memudahkan penggunaan seven segment, umumnya digunakan sebuah decoder( mengubah/ mengkoversi input bilangan biner menjadi decimal) atau seven segment driver yang akan mengatur aktif tidaknya led-led dalam seven segment sesuai dengan nilai biner yang diberikan. Dekoder BCD ke seven segment digunakan untuk menerima masukan BCD 4-bit dan memberikan
Ketik program berikut dikomputer kemudian lakukan upload pada mikrokontroler const byte numeral[10] = { //ABCDEFG /dp B11111100, // 0 B01100000, // 1 B11011010, // 2 B11110010, // 3 B01100110, // 4 B10110110, // 5 B00111110, // 6 B11100000, // 7 B11111110, // 8 B11100110, // 9 }; // pins segment dp,G,F,E,D,C,B,A const int segmentPins[8] = { 5,9,8,7,6,4,3,2}; void setup(){ for(int i=0; i < 8; i++){ pinMode(segmentPins[i], OUTPUT); } } void loop(){ for(int i=0; i <= 10; i++){ showDigit(i); delay(1000); } delay(2000); } void showDigit( int number){ boolean isBitSet; for(int segment = 1; segment < 8; segment++){ if( number < 0 || number > 9){ isBitSet = 0; // turn off all segments } else{ // isBitSet will be true if given bit is 1 isBitSet = bitRead(numeral[number], segment);} isBitSet = !isBitSet; // digitalWrite( segmentPins[segment], isBitSet); }
Gambar 4.4. Rangkaian Seven Segment 4 bit Ketiklah program dibawah ini kemudian lakukan upload pada mikrokontroler : int int int int
digit1 digit2 digit3 digit4
= = = =
11; //PWM Display pin 1 10; //PWM Display pin 2 9; //PWM Display pin 6 6; //PWM Display pin 8
int segA = A1; //Display pin 14
void loop() { displayNumber(millis()/1000); } void displayNumber(int toDisplay) { #define DISPLAY_BRIGHTNESS 500 #define DIGIT_ON HIGH #define DIGIT_OFF LOW long beginTime = millis(); for(int digit = 4 ; digit > 0 ; digit--) { //Turn on a digit for a short amount of time switch(digit) { case 1: digitalWrite(digit1, DIGIT_ON); break; case 2: digitalWrite(digit2, DIGIT_ON); break; case 3: digitalWrite(digit3, DIGIT_ON); break; case 4: digitalWrite(digit4, DIGIT_ON); break; } //Turn on the right segments for this digit lightNumber(toDisplay % 10); toDisplay /= 10; delayMicroseconds(DISPLAY_BRIGHTNESS);
switch (numberToDisplay){ case 0: digitalWrite(segA, digitalWrite(segB, digitalWrite(segC, digitalWrite(segD, digitalWrite(segE, digitalWrite(segF, digitalWrite(segG, break;
SEGMENT_ON); SEGMENT_ON); SEGMENT_ON); SEGMENT_ON); SEGMENT_ON); SEGMENT_ON); SEGMENT_OFF);
case 1: digitalWrite(segA, digitalWrite(segB, digitalWrite(segC, digitalWrite(segD, digitalWrite(segE, digitalWrite(segF, digitalWrite(segG, break;
SEGMENT_OFF); SEGMENT_ON); SEGMENT_ON); SEGMENT_OFF); SEGMENT_OFF); SEGMENT_OFF); SEGMENT_OFF);
case 2: digitalWrite(segA, digitalWrite(segB, digitalWrite(segC, digitalWrite(segD, digitalWrite(segE, digitalWrite(segF, digitalWrite(segG, break;
SEGMENT_ON); SEGMENT_ON); SEGMENT_OFF); SEGMENT_ON); SEGMENT_ON); SEGMENT_OFF); SEGMENT_ON);
case 3: digitalWrite(segA, digitalWrite(segB, digitalWrite(segC, digitalWrite(segD,
SEGMENT_ON); SEGMENT_ON); SEGMENT_ON); SEGMENT_ON);
case 6: digitalWrite(segA, digitalWrite(segB, digitalWrite(segC, digitalWrite(segD, digitalWrite(segE, digitalWrite(segF, digitalWrite(segG, break;
SEGMENT_ON); SEGMENT_OFF); SEGMENT_ON); SEGMENT_ON); SEGMENT_ON); SEGMENT_ON); SEGMENT_ON);
case 7: digitalWrite(segA, digitalWrite(segB, digitalWrite(segC, digitalWrite(segD, digitalWrite(segE, digitalWrite(segF, digitalWrite(segG, break;
SEGMENT_ON); SEGMENT_ON); SEGMENT_ON); SEGMENT_OFF); SEGMENT_OFF); SEGMENT_OFF); SEGMENT_OFF);
case 8: digitalWrite(segA, digitalWrite(segB, digitalWrite(segC, digitalWrite(segD, digitalWrite(segE, digitalWrite(segF, digitalWrite(segG, break;
SEGMENT_ON); SEGMENT_ON); SEGMENT_ON); SEGMENT_ON); SEGMENT_ON); SEGMENT_ON); SEGMENT_ON);
case 9: digitalWrite(segA, digitalWrite(segB, digitalWrite(segC, digitalWrite(segD, digitalWrite(segE, digitalWrite(segF,
SEGMENT_ON); SEGMENT_ON); SEGMENT_ON); SEGMENT_ON); SEGMENT_OFF); SEGMENT_ON);
6. Jika tidak terjadi error lanjutkan dengan mengupload program ke dalam mikrokontroler ! 7. Amati hasilnya apakah sudah sesuai dengan perintah instruktur atau belum, kalau belum lakukan editing program dan kembali ke langkah 5 !
1. Mahasiswa memahami rangkaian interface mikrokontroller dengan LCD Karakter 2 x 16 2. Mahasiswa dapat memahami program Arduino untuk menampilkan data ke LCD Karakter 2 x 16 3. Mahasiswa memahami beberapa instruksi pada library header liquidcrystal 4. Mahasiswa memahami mencetak karakter pada posisi baris dan kolom tertentu
1. Sebuah Komputer 2. Satu set trainer mikrokontroler
Modul LCD Character dapat dengan mudah dihubungkan dengan mikrokontroller seperti Arduino Uno R3. LCD yang akan kita praktikumkan ini mempunyai lebar display 2 baris 16 kolom atau biasa disebut sebagai LCD Character 2x16, dengan 16 pin konektor, yang didifinisikan sebagai berikut:
Jalur RW adalah jalur kontrol Read/ Write. Ketika RW berlogika low (0), maka informasi pada bus data akan dituliskan pada layar LCD. Ketika RW berlogika high ”1”, maka program akan melakuk an pembacaan memori dari LCD. Sedangkan pada aplikasi umum pin RW selalu diberi logika low ”0”.
Tabel 5.1. Pin LCD dan Fungsi
CATATAN: X : Don’t care DL: Mengatur lebar data DL=1, Lebar data interface 8 bit ( DB7 s/d DB0) DL=0, Lebar data interface 4 bit ( DB7 s/d DB4) Ketika menggunakan lebar data 4 bit, data harus dikirimkan dua kali N=1, Display dua baris N=0, Display satu baris
Mengatur increment/ decrement dan mode geser
Catatan: I/D: Increment/ decrement dari alamat DDRAM dengan 1 ketika kode karakter dituliskan ke DDRAM. I/D = “0”, decrement I/D= “1”, increment
C : Menampilkan kursor C = 1, kursor ditampilkan C = 0, kursor tidak ditampilkan B : Karakter ditunjukkan dengan kursor yang berkedip B=1, kursor blink
Perintah ini hapus layar
Geser posisi kursor atau display ke kanan atau kekiri tanpa menulis atau baca data display. Fungsi ini digunakan untuk koreksi atau pencarian display
Catatan : x = Dont care
Pada peta memori tersebut, daerah yang berwarna kuning ( 00 s/d 0F dan 40 s/d 4F ) adalah display yang tampak. Sebagaimanan yang anda lihat, jumlahnya sebanyak 16 karakter per baris dengan dua baris. Angka pada setiap kotak adalah alamat memori yang bersesuaian dengan posisi dari layar. Demikianlah karakter pertama di sudut kiri atas adalah menempati alamat 00h. Posisi karakter berikutnya adalah alamat 01h dan seterusnya. Akan tetapi, karakter pertama dari baris 2 sebagaimana yang ditunjukkan pada peta memori adalah pada alamat 40h. Dimikianlah kita perlu untuk mengirim sebuah perintah ke LCD untuk mangatur letak posisi kursor pada baris dan kolom tertentu. Instruksi 80h. Untuk ini kita perlu menambahkan alamat lokasi dimana kita berharap untuk menempatkan kursor.Sebagai contoh, kita ingin menampilkan kata ”World” pada baris ke dua pada posisi kolom ke sepuluh. Sesuai peta memori, posisi karakter pada kolom 11 dari baris ke dua, mempunyai alamat 4Ah, sehingga sebelum kita tulis kata ”World” pada LCD, kita harus mengirim instruksi set posisi kursor, dan perintah untuk instruksi ini adalah 80h ditambah dengan alamat 80h+4Ah =0Cah. Sehingga dengan mengirim perintah Cah ke LCD, akan menempatkan kursor pada baris kedua
Hubungkan Pin LCD dengan pin Mikrokontroler seperti ditunjukkan pada gambar dibawah ini.
Gambar 5.2. Hubungan Pin LCD dan pin Mikrokontroler Arduino Ketik Program dibawah ini dan lihat hasilnya pada LCD 2X16 #include // initialize the library with the numbers of the interface pins LiquidCrystal lcd(8,9,4,5,6,7); void setup() { lcd.begin(16,2); lcd.setCursor(0,0); lcd.print("Hello World!"); lcd.setCursor(0,1);
lcd.setCursor(0, 0); // print from 0 to 9: for (int thisChar = 0; thisChar < 10; thisChar++) { lcd.print(thisChar); delay(500); }
// set the cursor to (16,1): lcd.setCursor(16,1); // set the display to automatically scroll: lcd.autoscroll(); // print from 0 to 9: for (int thisChar = 0; thisChar < 10; thisChar++) { lcd.print(thisChar); delay(500); }
// turn off automatic scrolling lcd.noAutoscroll(); // clear screen for the next loop: lcd.clear(); }
Ketik program dibawah ini untuk menampilkan “I ♥ Fasilkom” #include // initialize the library with the numbers of the interface pins LiquidCrystal lcd(8,9,4,5,6,7); // make some custom characters:
byte frownie[8] = { 0b00000, 0b00000, 0b01010, 0b00000, 0b00000, 0b00000, 0b01110, 0b10001 }; byte armsDown[8] = { 0b00100, 0b01010, 0b00100, 0b00100, 0b01110, 0b10101, 0b00100, 0b01010 }; byte armsUp[8] = { 0b00100, 0b01010, 0b00100, 0b10101, 0b01110, 0b00100,
lcd.print(" Fasilkom "); lcd.write(2); }
void loop() { lcd.setCursor(4, 1); lcd.write(4); // draw lcd.setCursor(4, 1); delay(400); // wait lcd.write(5); // draw delay(400); // wait
the little man, arms down: 400ms the little man, arms up: 400ms
}
Contoh sederhana untuk menampilkan symbol “hati”
#include LiquidCrystal lcd(8,9,4,5,6,7);
#include LiquidCrystal lcd(8,9,4,5,6,7);
void setup() { lcd.begin(16, 2); and rows
// set up the LCD's number of columns
lcd.setCursor(0,0); lcd.print("Blinking");
// First line
lcd.setCursor(0,1); // Second line lcd.print(" sentence :)"); }
void loop() { lcd.noDisplay(); delay(500); lcd.display(); delay(500);
// // // //
Turn Wait Turn Wait
OFF the display 500 ms ON the display 500 ms
}
Teks "Hello world!" Ditampilkan, yang dipindahkan antara tepi layar, dari kanan ke kiri. #include LiquidCrystal lcd(8,9,4,5,6,7); void setup() { lcd.begin(16, 2); lcd.print("Hello, world!");
// wait a bit: delay(150); }
// scroll 16 positions (display length + string length) to the left // to move it back to center: for (int positionCounter = 0; positionCounter < 16; positionCounter++) { // scroll one position left: lcd.scrollDisplayLeft(); // wait a bit: delay(150); }
// delay at the end of the full loop: delay(1000); }
1. 2. 3. 4. 5. 6.
Nyalakan computer dengan program Arduino ! Sambungkan Trainer mikrokontroler dengan computer menggunakan kabel USB ! Sambungkan kabel-kabel jumper sesuai dengan praktikum yang dilaksanakan ! Ketiklah program yang diatas pada software Arduino ! Lakukan verifikasi terhadap program, apakah terjadi error atau tidak ! Jika tidak terjadi error lanjutkan dengan mengupload program ke dalam mikrokontroler !
1. Mahasiswa memahami rangkaian interface keypad 4x4 dengan mikrokontroller 2. Mahasiswa memahami library Arduino untuk pengambilan data keypad 3. Mahasiswa memahami library Arduino untuk pengambilan data keypad dan mengeluarkan ke LCD Karakter
1. Sebuah Komputer 2. Satu set trainer mikrokontroler
Keypad sering digunakan sebagai suatu input pada beberapa peralatan yang berbasis mikroprosessor atau mikrokontroller. Keypad sesungguhnya terdiri dari sejumlah saklar, yang terhubung sebagai baris dan kolom dengan susuan seperti yang ditunjukkan pada gambar 6.1. Agar mikrokontroller dapat melakukan scan keypad, maka port mengeluarkan salah satu bit dari 4 bit yang terhubung pada kolom dengan logika low “0” dan selanjutnya membaca 4 bit pada baris untuk menguji jika ada tombol yang ditekan pada kolom tersebut. Sebagai konsekuensi, selama tidak ada tombol yang ditekan, maka mikrokontroller akan melihat sebagai logika high “1” pada setiap pin yang terhubung ke baris.
dengan nama Col1, Col2, Col3 dan Col4. Sisi input atau output dari matrix keypad 4×4 ini tidak mengikat, dapat dikonfigurasikan kolom sebagi input dan baris sebagai output atau sebaliknya tergantung programernya. Proses Scaning Matrix Keypad 4×4 Untuk Mikrokontroler Proses scaning untuk membaca penekanan tombol pada matrix keypad 4×4 untuk mikrokontroler diatas dilakukan secara bertahap kolom demi kolom dari kolom pertama sampai kolom ke 4 dan baris pertama hingga baris ke 4. Program untuk scaning matrix keypad 4×4 dapat bermacam-macam, tapi pada intinya sama. Misal kita asumsikan keyapad aktif LOW (semua line kolom dan baris dipasang resistor pull-up) dan dihubungkan ke port mikrokontrolr dengan jalur kolom adalah jalur input dan jalur baris adalah jalur output maka proses scaning matrix keypad 4×4 diatas dapat dituliskan sebagai berikut. Mengirimkan logika Low untuk kolom 1 (Col1) dan logika HIGH untuk kolom yang lain kemudian membaca data baris, misal tombol SW1 ditekan maka data baris pertama (Row1) akan LOW sehingga data baris yang dibaca adalah 0111, atau tombol yang ditekan tombol SW5 maka data pada baris ke 2 akan LOW sehingga data yang terbaca 1011, atau tombol SW9 yang ditekan sehingga data yang terbaca 1101, atau tombol SW13 yang ditekan maka data yang dibaca adalah 1110 dan atau tidak ada tombol pada kolom pertama yang di tekan maka data pembacaan baris akan 1111. Mengirimkan logika Low untuk kolom 2 (Col2) dan logika HIGH untuk kolom yang lain kemudian membaca data baris, misal tombol SW1 ditekan maka data baris pertama (Row1) akan LOW sehingga data baris yang dibaca adalah 0111, atau tombol yang ditekan tombol SW5 maka data pada baris ke 2 akan LOW sehingga data yang terbaca 1011, atau tombol SW9 yang ditekan
pembacaan data penekanan tombol keypad. Sehingga tiap tombol pada matrix keypad 4×4 diatas dengan teknik scaning tersebut akan menghasilkan data penekanan tiap-tiap tombol sebagai berikut. SW1 = 0111 0111 SW2 = 1011 0111 SW3 = 1101 0111 SW4 = 1110 0111 SW5 = 0111 1011 SW6 = 1011 1011 SW7 = 1101 1011
SW9 = 0111 1101 SW10 = 1011 1101 SW11 = 1101 1101 SW12 = 1110 1101 SW13 = 0111 1110 SW14 = 1011 1110 SW15 = 1101 1110
SW8 = 1110 1011 SW16 = 1110 1110 Data port mikrokontroler, misalkan pada SW2 = 1011 0111 tersebut terbagi dalam nible atas dan nible bawah dimana data nible atas (1011) merupakan data yang kita kirimkan sedangkan data nible bawah (0111) adalah data hasil pembacaan penekanan tombol keypad SW2 pada proses scaning matrix keypad 4×4 diatas.
{'4','5','6', 'B'}, {'7','8','9', 'C'}, {'*','0','#', 'D'} }; byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad byte colPins[COLS] = {9, 8, 7, 6}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup(){ Serial.begin(9600); } void loop(){ char key = keypad.getKey(); if (key){ Serial.println(key); } } Untuk contoh program yang kedua dapat diketikkan program berikut ini.
// Try playing with different debounceTime settings to see how it affects // the number of times per second your loop will run. The library prevents // setting it to anything below 1 millisecond. kpd.setDebounceTime(10); // setDebounceTime(mS) } void loop(){ char key = kpd.getKey(); // Report the number of times through the loop in 1 second. This will give // you a relative idea of just how much the debounceTime has changed the // speed of your code. If you set a high debounceTime your loopCount will // look good but your keypresses w ill start to feel sluggish. if ((millis() - timer_t) > 1000) { Serial.print("Your loop code ran "); Serial.print(loopCount); Serial.println(" times over the last second"); loopCount = 0; timer_t = millis(); } loopCount++; if(key) Serial.println(key); }
Berikut ini contoh untuk multi key dari sebuah keypad
void setup() { Serial.begin(9600); loopCount = 0; startTime = millis(); msg = ""; }
void loop() { loopCount++; if ( (millis()-startTime)>5000 ) { Serial.print("Average loops per second = "); Serial.println(loopCount/5); startTime = millis(); loopCount = 0; } // Fills kpd.key[ ] array with up-to 10 active keys. // Returns true if there are ANY active keys. if (kpd.getKeys()) { for (int i=0; i
1. 2. 3. 4. 5. 6. 7.
Nyalakan computer dengan program Arduino ! Sambungkan Trainer mikrokontroler dengan computer menggunakan kabel USB ! Sambungkan kabel-kabel jumper sesuai dengan praktikum yang dilaksanakan ! Ketiklah program yang diatas pada software Arduino ! Lakukan verifikasi terhadap program, apakah terjadi error atau tidak ! Jika tidak terjadi error lanjutkan dengan mengupload program ke dalam mikrokontroler ! Amati hasilnya apakah sudah sesuai dengan perintah instruktur atau belum, kalau belum lakukan editing program dan kembali ke langkah 5 !
1. 2. 3. 4. 5. 6.
Mahasiswa memahami input analaog pada mikrokontroller Arduino Mahasiswa memahami perhitungan tegangan resolusi ADC mikrokontroler Arduino Mahasiswa memahami perintah input analog, analogRead(), analogReference(parameter) Mahasiswa dapat memahami program Arduino untuk menampilkan data input analog Mahasiswa dapat memahami output analog dan PWM (Pulse Width Modulation ) Mahasiswa memahami perintah output analog, analogWrite()
1. Sebuah Komputer 2. Satu set trainer mikrokontroler
Arduino khusus menyediakan 6 kanal (8 kanal pada model Uno, Mini dan Nano, dan 16 pada model Mega) untuk difungsikan sebagai analog input. Analog ke digital converternya menggunakan resolusi 10 bit yang berarti range nilai analog dari 0 volt sampai 5 volt akan dirubah kenilai integer 0 sampai 1023, atau resolusinya adalah 5 volt/1024=4,9mV per unit dimana itu berarti nilai digital yang dihasilkan akan berubah setiap perubahan 4,9mV dari tegangan input analognya. Akan tetapi range input analog dan resolusi tersebut dapat dirubah dengan fungsi analogReference().
Perlu untuk diperhatikan, jangan menggunakan referensi dibawah 0 volt atau lebih dari 5 volt dan pastikan memilih referensi external sebelum perintah analogRead() jika menghubungkan pin AREF dengan referensi eksternal karena jika tidak akan bisa merusak mikrokontrol.
Gambar 7.1. Rangkaian Input Analog dengan potensiometer
Input analog
int sensorPin = A0; // select the input pin for the potentiometer int ledPin = 13; // select the pin for the LED int sensorValue = 0; // variable to store the value coming from the sensor void setup() { // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT); } void loop() { // read the value from the sensor: sensorValue = analogRead(sensorPin); // turn the ledPin on digitalWrite(ledPin, HIGH); // stop the program for milliseconds: delay(sensorValue); // turn the ledPin off: digitalWrite(ledPin, LOW); // stop the program for for milliseconds: delay(sensorValue); } Input analog yang ditampilkan secara serial lewat komponen serial monitor pada sof tware editing
// map it to the range of the analog out: outputValue = map(sensorValue, 0, 1023, 0, 255); // change the analog out value: analogWrite(analogOutPin, outputValue); // print the results to the serial monitor: Serial.print("sensor = " ); Serial.print(sensorValue); Serial.print("\t output = "); Serial.println(outputValue); // wait 2 milliseconds before the next loop // for the analog-to-digital converter to settle // after the last reading: delay(2); } Pada percobaan ADC ini dapat juga digabungkan dengan output analog yang berupa PWM (Pulse Width Modulation), kasus ini akan mengatur terang dan redupnya lampu LED yang terhubung pada pin 13 dari mikrokontroler Arduino. int ledPin = 9; // LED connected to digital pin 9 void setup() {
analogWrite(ledPin, fadeValue); // wait for 30 milliseconds to see the dimming effect delay(30); } }
1. 2. 3. 4. 5. 6. 7.
Nyalakan computer dengan program Arduino ! Sambungkan Trainer mikrokontroler dengan computer menggunakan kabel USB ! Sambungkan kabel-kabel jumper sesuai dengan praktikum yang dilaksanakan ! Ketiklah program yang diatas pada software Arduino ! Lakukan verifikasi terhadap program, apakah terjadi error atau tidak ! Jika tidak terjadi error lanjutkan dengan mengupload program ke dalam mikrokontroler ! Amati hasilnya apakah sudah sesuai dengan perintah instruktur atau belum, kalau belum lakukan editing program dan kembali ke langkah 5 !
1. Mahasiswa memahami rangkaian interface mikrokontroller dengan LCD grafik 128X64 2. Mahasiswa dapat memahami program Arduino untuk menampilkan grafik ke LCD grafik 128X64 3. Mahasiswa memahami beberapa instruksi pada library header u8glib 4. Mahasiswa memahami koordinat untuk menampilkan tulisan atau gambar pada LCD
1. Sebuah Komputer 2. Satu set trainer mikrokontroler
Display elektronik adalah salah satu komponen elektronika yang berfungsi sebagai tampilan suatu data, baik karakter, huruf ataupun grafik. LCD ( Liquid Cristal Display ) adalah salah satu jenis display elektronik yang dibuat dengan teknologi CMOS logic yang bekerja dengan tidak menghasilkan cahaya tetapi memantulkan cahaya yang ada di sekelilingnya terhadap front-lit atau mentransmisikan cahaya dari back-lit. LCD (Liquid Cristal Display) berfungsi sebagai penampil data baik dalam bentuk karakter, huruf, angka ataupun grafik.
CGRAM (Character Generator Random Access Memory) merupakan memori untuk menggambarkan pola sebuah karakter dimana bentuk dari karakter dapat diubah-ubah sesuai dengan keinginan. CGROM (Character Generator Read Only Memory) merupakan memori untuk menggambarkan pola sebuah karakter dimana pola tersebut merupakan karakter dasar yang sudah ditentukan secara permanen oleh pabrikan pembuat LCD (Liquid Cristal Display) tersebut sehingga pengguna tinggal mangambilnya sesuai alamat memorinya dan tidak dapat merubah karakter dasar yang ada dalam CGROM.
Register control yang terdapat dalam suatu LCD diantaranya adalah.
Register perintah yaitu register yang berisi perintah-perintah dari mikrokontroler ke panel LCD (Liquid Cristal Display) pada saat proses penulisan data atau tempat status dari panel LCD (Liquid Cristal Display) dapat dibaca pada saat pembacaan data. Register data yaitu register untuk menuliskan atau membaca data dari atau keDDRAM. Penulisan data pada register akan menempatkan data tersebut keDDRAM sesuai dengan alamat yang telah diatur sebelumnya.
Pin, kaki atau jalur input dan kontrol dalam suatu LCD (Liquid Cristal Display) diantaranya adalah : Pin data adalah jalur untuk memberikan data karakter yang ingin ditampilkan menggunakan LCD (Liquid Cristal Display) dapat dihubungkan dengan bus data dari rangkaian lain seperti mikrokontroler dengan lebar data 8 bit. Pin RS (Register Select) berfungsi sebagai indikator atau yang menentukan jenis data yang masuk,
Gambar 8.1. Bentuk Fisik LCD Grafik 128X64 Modul GLCD ini dilengkapi dengan mikroprosesor KS0107-KS0108 buatan Samsung sebagai driver 64 channel output pada penampil matriksGLCD. Perangkat ini terdiri dari display RAM ( Random Access Memmory)kapasitas 512 bytes, 64 bit data lacth 64 bit drivers dan decoder logic. GLCD128 x 64 memerlukan program (library) khusus untuk mikroprosesor KS0108 agar dapat berkomunikasi dengan mikrokontroler.
Menghubungkan arduino dengan LCD grafik menggunakan serial programming interface seperti terlihat pada tabel dibawah ini
void u8g_prepare() { u8g.setFont(u8g_font_6x10); u8g.setFontRefHeightExtendedText(); u8g.setDefaultForegroundColor(); u8g.setFontPosTop(); } void u8g_Tela1() //Tela 1 { u8g.setFont(u8g_font_unifont); u8g.drawStr( 11, 35, "FASILKOM SBY"); u8g.drawStr( 12, 35, "FASILKOM SBY"); u8g.drawFrame(0,0,128,64); u8g.drawFrame(2,2,124,60); } void u8g_Tela2() //Tela 2 { u8g.drawRFrame(0,0,128,64,3); u8g.drawStr( 3, 10, "Waktu:13:00"); u8g.drawStr( 3, 25, "Temp: 27"); char s[2] = " ";
void u8g_Tela3() //Tela 3 { char s[2] = " "; u8g.drawStr( 0, 0, "ASCII page 1"); for(int y = 0; y < 6; y++ ) { for(int x = 0; x < 16; x++ ) { s[0] = y*16 + x + 32; u8g.drawStr(x*7, y*10+10, s); } } } void u8g_Tela4() //Tela 3 { char s[2] = " "; uint8_t x, y; u8g.drawStr( 0, 0, "ASCII page 2"); for( y = 0; y < 6; y++ ) { for( x = 0; x < 16; x++ )
u8g.drawFrame(2,2,124,60); } void u8g_Tela6() //Tela 6 { u8g.setFont(u8g_font_helvB08); u8g.drawStr(50,31, " Siskom"); u8g.drawStr90(50,31, " Sby"); u8g.drawStr270(50,31, " ***."); } void u8g_Tela7() //Tela 7 { u8g.setFont(u8g_font_robot_de_niro); u8g.drawStr(5,13, "FASILKOM Sby !"); u8g.setFont(u8g_font_helvB08); u8g.drawStr(5,25, "FASILKOM Sby !"); u8g.drawBox(5,31, 118,11); u8g.setColorIndex(0); u8g.setFont(u8g_font_8x13); u8g.drawStr(5,41, "FASILKOM Sby !"); u8g.setColorIndex(1); u8g.setFont(u8g_font_ncenB10);
u8g_Tela3(); break; case 4: u8g_Tela4(); break; case 5: u8g_Tela5(); break; case 6: u8g_Tela6(); break; case 7: u8g_Tela7(); break; } } void setup() { if ( u8g.getMode() == U8G_MODE_R3G3B2 ) u8g.setColorIndex(255); // white else if ( u8g.getMode() == U8G_MODE_GRAY2BIT )
draw(); } while( u8g.nextPage() ); delay(3000); } }
1. 2. 3. 4. 5. 6. 7.
Nyalakan computer dengan program Arduino ! Sambungkan Trainer mikrokontroler dengan computer menggunakan kabel USB ! Sambungkan kabel-kabel jumper sesuai dengan praktikum yang dilaksanakan ! Ketiklah program yang diatas pada software Arduino ! Lakukan verifikasi terhadap program, apakah terjadi error atau tidak ! Jika tidak terjadi error lanjutkan dengan mengupload program ke dalam mikrokontroler ! Amati hasilnya apakah sudah sesuai dengan perintah instruktur atau belum, kalau belum lakukan editing program dan kembali ke langkah 5 !
1. Mahasiswa mengenal beberapa sensor cahaya dan sensor suhu 2. Mahasiswa mampu memprogram aplikasi untuk sensor-sensor tersebut 3. Mahasiswa mampu menghitung konversi ADC ke dalam bentuk besaran yang terukur
1. Sebuah Komputer 2. Satu set trainer mikrokontroler
Light Dependent Resistor atau yang biasa disebut LDR adalah jenis resistor yang nilainya berubah seiring intensitas cahaya yang diterima oleh komponen tersebut. Biasa digunakan sebagai detektor cahaya atau pengukur besaran konversi cahaya.Light Dependent Resistor, terdiri dari sebuah cakram semikonduktor yang mempunyai dua buah elektroda pada permukaannya.Pada saat gelap atau cahaya redup, bahan dari cakram tersebut menghasilkan elektron bebas dengan jumlah yang relatif kecil.Sehingga hanya ada sedikit elektron untuk mengangkut muatan elektrik.Artinya pada saat cahaya redup LDR menjadi konduktor yang buruk, atau bisa disebut juga LDR memiliki resistansi yang besar pada saat gelap atau cahaya redup.Pada saat cahaya terang, ada lebih banyak elektron yang lepas dari atom bahan semikonduktor tersebut. Sehingga akan ada lebih banyak elektron untuk mengangkut
Gambar 9.1. Bentuk Fisik LDR
Bila sebuah LDR dibawa dari suatu ruangan dengan level kekuatan cahayatertentu kedalam suatu ruangan yang gelap sekali, maka bisa kita amati bahwa nilai resistansi dari LDR tidak akan segera berubah resistansinya pada keadaan ruangan gelap tersebut. Namun LDR tersebut hanya akan bisa mencapai harga dikegelapan setelah mengalami selang waktu tertentu. dan suatu kenaikan nilai resistansi dalam waktu tertentu. Harga ini ditulis dalam K Ω /detik. untuk LDR type arus harganya lebih besar dari 200 K Ω /detik (selama 20 menitpertama mulai dari level cahaya 100 lux), kecepatan tersebut akan lebih tinggi pada arahsebaliknya, yaitu pindah dari tempat gelap ke tempat terang yang memerlukan waktukurang dari 10 ms untuk mencapai resistansi yang sesuai dengan level cahaya 400 lux.
9.2. Kurva LDR Pada karakteristik diatas dapat dilihat bila cahaya mengenai sensor itu maka harga tahanan akan berkurang. Perubahan yang dihasilkan ini tergantung dari bahan yang digunakan serta dari cahaya yang mengenainya.
Untuk mendeteksi suhu digunakan sebuah sensor suhu LM 35 yang dapat dikalibrasikan langsung dalam , LM 35 ini difungsikan sebagai basic temperature sensor seperti pada gambar 9.3
Gambar 9.4. Mengukur Suhu LM35 LM 35 ialah sensor temperatur paling banyak digunakan untuk praktek, karena selain harganya cukup murah, linearitasnya juga lumayan bagus. LM35 tidak membutuhkan kalibrasi eksternal yang menyediakan akurasi ± ¼ °C pada temperatur ruangan dan ± ¾ °C pada kisaran -55 °C to +150 °C. LM35 dimaksudkan untuk beroperasi pada -55 °C hingga +150 °C, sedangkan LM35C pada -40 °C hingga +110 °C, dan LM35D pada kisran 0-100°C. LM35D juga tersedia pada paket 8 kaki dan paket TO-220. Sensor LM35 umunya akan naik sebesar 10mV setiap kenaikan 1°C (300mV p ada 30 °C).
Gambar 9.5. Bentuk Fisik Sensor Suhu LM35
6. Harganya cukup murah 7. Bekerja pada tegangan catu daya 4 sampai 30Volt 8. Memiliki arus drain kurang dari 60 uAmp 9. Pemanasan sendiri yang lambat ( low self-heating) 10. 0,08˚C diudara diam 11. Ketidak linearanya hanya sekitar ±¼°C 12. Memiliki Impedansi keluaran yang kecil yaitu 0,1 watt untuk beban 1 mAmp. Sensor suhu tipe LM35 merupakan IC sensor temperatur yang akurat yang tegangan keluarannya linear dalam satuan celcius. Jadi LM35 memilik kelebihan dibandingkan sensor temperatur linear dalam satuan kelvin, karena tidak memerlukan pembagian dengan konstanta tegangan yang besar dan keluarannya untuk mendapatkan nilai dalam satuan celcius yang tepat. LM35 memiliki impedansi keluaran yang rendah, keluaran yang linear, dan sifat ketepatan dalam pengujian membuat proses interface untuk membaca atau mengotrol sirkuit lebuh mudah. Pin V+ dari LM35 dihubungkan kecatu daya, pin GND dihubungkan ke Ground dan pin Vout- yang menghasilkan tegangan analog hasil pengindera suhu dihubungkan ke pin analog Arduino.
Sensor adalah komponen yang dapat digunakan untuk mengkonversi suatu besaran tertentu menjadi satuan analog sehingga dapat dibaca oleh suatu rangkaian elektronik. Sensor merupakan komponen utama dari suatu tranduser, sedangkan tranduser merupakan sistem yang melengkapi agar sensor tersebut mempunyai keluaran sesuai yang kita inginkan dan dapat langsung dibaca pada keluarannya.
ditemukan oleh Samuel Ruben pada tahun 1930, dan mendapat hak paten di Amerika Serikat dengan nomor #2.021.491. Ada dua macam termistor secara umum: Posistor atau PTC (Positive Temperature Coefficient), dan NTC (Negative Temperature Coefficien). Nilai tahanan pada PTC akan naik jika suhunya naik, sementara NTC justru kebalikannya. Termistor adalah salah satu jenis sensor suhu yang mempunyai koefisien temperatur yang tinggi.dimana komponen ini dapat mengubah nilai resistansi karena adanya perubahan temperatur. Dengan demikian dapat memudahkan kita untuk dijadikan sebagai mengubah energi panas menjadi energi listrik.termistor dibedakan dalam 3 jenis,yaitu termistor yang mempunyai koefisien negatif, yang disebut NTC ( Negative temperature Coefisient), temistor yang mempunyai koefisien positif, yang disebut PTC (positive Temperature Coefisient) dan termistor yang mempunyai tahanan kritis, yaitu CTR ( Critical Temperature Resistance).
Metode Pembuatan Sensor Suhu 1. Menggunakan Bahan Logam Logam akan bertambah besar hambatannya terhadap arus listrik jika panasnya bertambah. Hal ini dapat dijelaskan dari sisi komponen penyusun logam. Logam dapat dikatakan sebagai muatan positif yang berada di dalam elektron yang bergerak bebas. Jika suhu bertambah, elektronelektron tersebut akan bergetar dan getarannya semakin besar seiring dengan naiknya suhu. Dengan besarnya getaran tersebut, maka gerakan elektron akan terhambat dan menyebabkan nilai hambatan dari logam tersebut bertambah.
diubah menjadi bahan semikonduktor dengan menambahkan beberapa ion lain yang mempunyai valensi yang berbeda disebut dengan doping. dan pengaruh dari resistansinya dipengaruhi perubahan temperatur yang diberikan.
Gambar 9.6. Bentuk Fisik dan Simbol NTC
LDR (light Dependent Resistor ) adalah suatu resistor yang nilai resistansinya bergantung pada cahaya (Jika mendapat cahaya terang, nilai resistansi kecil sekitar puluhan s/d ratusan Ohm, jika kondisi gelap nilai resistansi akan besar bisa mencapai puluhan-ratusan KOhm bahkan bisa mencapai MOhm), umumnya LDR digunakan sebagai sensor cahaya. sensor LDR merupakan sensor yang cukup murah dan mudah digunakan. Rangkaianlah rangkaian percobaan seperti pada gambar dibawah ini.
void loop(){ int LDRReading = analogRead(LDR_Pin); Serial.println(LDRReading); delay(250); //just here to slow down the output for easier reading }
Contoh lain untuk aplikasi LDR sebagai berikut
#include int led7 = 7;
pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); pinMode(led6, OUTPUT); pinMode(led7, OUTPUT); } void loop() { // put your main code here, to run repeatedly: int LDR= analogRead(A0); int temp=map(LDR,0,1023,0,255); lcd.setCursor(0,0); lcd.print("Nilai data ADC :"); lcd.setCursor(0,1); lcd.print(temp); delay(10); lcd.clear(); if(temp==0){ digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); digitalWrite(led5, LOW);
if(temp>128){ digitalWrite(led3, HIGH); } if(temp>160){ digitalWrite(led2, HIGH); } if(temp>192){ digitalWrite(led1, HIGH); } if(temp>224){ digitalWrite(led0, HIGH); } //////////////////////////////// if(temp<0){ digitalWrite(led7, LOW); } if(temp<32){ digitalWrite(led6, LOW); } if(temp<64){ digitalWrite(led5, LOW); } if(temp<96){
Seri sensor suhu LM35 memiliki keluaran tegangan (Vout) yang linearly proportional terhadap suhu Celcius (Centigrade); faktor skala-nya +10mV/derajat Celcius. Kenaikan Vout 10mV menunjukkan ada kenaikan suhu sebesar 1 derajat Celcius. Menghitung Vout: Vout dalam milivolt = sensorValue * (5 * 1000/1024) 1024 adalah resolusi ADC: 10bit. 5 adalah Analog Reference (ARef); dalam milivolt menjadi: 5 * 1000. Default library arduino menggunakan resolusi ADC 10bit dan ARef = Vcc (+5V pada Sasakala-M328). Menghitung Suhu (Celcius): suhuCelcius = Vout dalam miliVolt / 10 = sensorValue * (500/1024)
Serial.print("Input Volt : "); Serial.println(volt); Serial.print("Suhu : "); Serial.println(suhu); delay(1000); }
dengan nilai hambatan
Ω
ini
berpresisi tinggi (nilai toleransi hanya 1%), dengan rentang suhu operasional yang lebar antara -45°C hingga +395°C ideal untuk digunakan sebagai sensor temperatur pada sistem injeksi plastik semacam
3D
Reprap
Printer .
NTC atau Negative-Temperature-Coefficient Thermistor adalah komponen elektronika yang termasuk dalam kelompok resistive
transducer , di mana nilai hambatan dari termistor ini menurun sesuai dengan perubahan suhu. Artinya semakin panas temperatur yang terpapar pada komponen sensor ini, semakin kecil hambatan dan semakin besar arus yang dapat melewatinya. Perubahan ini juga dapat dibaca sebagai perubahan tegangan dengan memasangkan termistor dalam sirkuit pembagi tegangan ( voltage divider
circuit ).
Untuk mendapatkan suhu dalam Celcius, cukup kurangkan nilai T di atas dengan 298. void setup() { // put your setup code here, to run once: Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: int sensorValue = analogRead(A2); float volt = sensorValue/1024.0 * 5; float suhu = 100 * volt; Serial.print("Sensor Value : "); Serial.println(sensorValue); Serial.print("Input Volt : "); Serial.println(volt); Serial.print("Suhu : "); Serial.println(suhu); delay(1000); }
1.
Mahasiswa mamahami rangkaian interface mikrokontroller dengan motor DC dan motor Servo
2. 3. 4. 5.
Mahasiswa memahami rangkaian driver motor DC L293D Mahasiswa memahami program Arduino untuk mengatur arah putaran motor DC Mahasiswa memahami program Arduino untuk mengatur arah sudut putaran motor Servo Mahasiswa memahami program Arduino untuk mengatur arah kecepatan motor DC
1. Sebuah Komputer 2. Satu set trainer mikrokontroler
Motor DC merupakan jenis motor yang menggunakan tegangan searah sebagai sumber tenaganya. Dengan memberikan beda tegangan pada kedua terminal tersebut, motor akan berputar pada satu arah, dan bila polaritas dari tegangan tersebut dibalik maka arah putaran motor akan terbalik pula seperti pada gambar 10.1. Polaritas dari tegangan yang diberikan pada dua terminal menentukan arah putaran motor sedangkan besar dari beda tegangan pada kedua terminal menentukan kecepatan motor
Gaya elektromagnet pada motor DC timbul saat ada arus yang mengalir pada penghantar yang berada dalam medan magnet. Medan magnet itu sendiri ditimbulkan oleh megnet permanen. Garis-garis gaya magnet mengalir diantara dua kutub magnet dari kutub utara ke kutub selatan. Menurut hukum gaya Lourentz, arus yang mengalir pada penghantar yang terletak dalam medan magnet akan menimbulkan gaya. Gaya F, timbul tergantung pada arah arus I, dan arah medan magnet B.
Pada dasarnya beberapa aplikasi yang menggunakan motor DC harus dapat mengatur kecepatan dan arah putar dari motor DC itu sendiri. Untuk dapat melakukan pengaturan kecepatan motor DC dapat menggunakan metode PWM (Pulse Width Modulation) sedangkan untuk mengatur arah putarannya dapat menggunakan rangkaian H-bridge yang tersusun dari 4 buah transistor. Tetapi dipasaran telah disediakan IC L293D sebagai driver motor DC yang dapat mengatur arah putar dan disediakan pin untuk input yang berasal dari PWM untuk mengatur kecepatan motor DC. Untuk lebih memahami tentang membangkitkan sinyal PWM menggunakan fitur Timer pada mikrokontroler AVR dapat membacanya pada postingan tutorial AVR tentang PWM. Sebelum membahas tentang IC L293D, alangkah baiknya jika kita membahas driver motor DC menggunakan rangkaian analog terlebih dahulu. Jika diinginkan sebuah motor DC yang dapat diatur kecepatannya tanpa dapat mengatur arah putarnya, maka kita dapat menggunakan sebuah transistor sebagai driver. Untuk mengatur kecepatan putar motor DC digunakan PWM yang dibangkitkan melalui fitur Timer pada mikrokontroler. Sebagian besar power supply untuk motor DC adalah sebesar 12 V, sedangkan output PWM dari mikrokontroler maksimal sebesar 5 V. Oleh karena itu digunakan transistor sebagai penguat tegangan. Dibawah ini adalah gambar driver motor DC menggunakan transistor. Salah satu jenis motor yang sering digunakan dalam bidang kontrol yaitu Motor DC. Motor DC akan berputar jika dialiri tegangan dan arus DC.
tegangan logika masukan H-bridge. Sedangkan sistem pengendalian kecepatan motor DC digunakan prinsip PWM (Pulse Width Modulator) yaitu suatu metode pengaturan kecepatan putaran motor DC dengan mengatur lamanya waktu pensaklaran aktif (Duty Cycle). Motor DC merupakan sebuah komponen yang memerlukan arus yang cukup besar untuk menggerakannya. Oleh karena itu motor DC biasanya memiliki penggerak tersendiri. Pada tugas akhir ini motor DC akan digerakkan dengan menggunakan PWM yang telah terintegrasi dengan rangkaian HBridge. Dengan rangkaian H-Bridge yang memiliki input PWM ini, maka selain arah kita juga bisa mengendalikan kecepatan putar motor DC tersebut.
Motor servo adalah motor yang mampu bekerja dua arah (clockwise dan counter – clockwise), dengan arah dan sudut pergerakan rotornya dapat dikontrol hanya dengan memberikan sinyal PWM pada bagian pin kontrolnya. Motor Servo merupakan sebuah motor DC yang memiliki rangkaian kontrol elektronika dan internal gear, untuk mengontrol pergerakan serta sudut angularnya. Motor servo dapat berputar dengan lambat, yang biasanya ditunjukkan oleh rate putarannya yang lambat. Akan tetapi, motor servo memiliki torsi yang kuat karena internal gear – nya. Motor servo mempunyai beberapa ukuran dan tipe yang dapat digunakan untuk segala kebutuhan mulai dari mesin fotokopi, model pesawat terbang, dan model mobil. Aplikasi terbaru dari motor servo yaitu digunakan untuk aplikasi pembuatan robot. Motor servo pada awalnya dibuat untuk dioperasikan melewati saluran radio kontrol dan biasanya mengacu pada radio kontrol. Motor servo tersebut bergerak dengan sinyal yang berasal dari penerima. Adapun jenis-jenis motor servo yaitu : a) Motor Servo Standar 180° Motor servo jenis ini mampu bergerak dua arah (clockwise dan counter - clockwise) dengan defleksi
Gambar 10.3. Komponen Motor Servo
Gambar 10.4. Skema Motor Servo
Secara umum, motor servo terdiri atas sebuah rangkaian pengontrol, sebuah potensiometer, dan sejumlah gear untuk memperbesar torsi. Motor dan potensiometer dihubungkan ke rangkaian pengontrol dan ketiganya membentuk sistem loop tertutup. Untuk mengaktifkan motor, sebuah sinyal digital dikirim ke rangkaian pengontrol. Potensiometer ini bertugas memonitor sudut poros motor servo. Motor akan berputar ke arah sudut yang diinginkan sampai sudut poros motor servo sesuai dengan yang diinginkan, kemudian motor akan berhenti bergerak. Pada umumnya motor servo didesain untuk rotasi yang terbatas yaitu berkisar antara 0° sampai 180°. Sebuah motor servo yang normal tidak dapat berputar lebih jauh, dikarenakan sebuah penghalang mekanik yang diselipkan pada roda gigi keluaran utama. Motor servo dapat berotasi secara penuh dengan melakukan suatu modifikasi.
Untuk mendapatkan sudut yang diinginkan maka motor servo harus mendapatkan input lebar pulsa yang tepat. Motor Servo diharapkan menerima pulsa setiap 20 milidetik. Sudut keluaran motor servo ditentukan oleh lebar pulsa yang diterima motor servo. Misalnya untuk menghasilkan sudut 90 O (posisi netral) maka motor servo perlu menerima pilsa setiap 20 milidetik dengan masing-masing lebar pulsa sebesar 1,5 milidetik. Jika pulsa yang diterima kurang dari 1,5 mi lidetik maka poros akan berputar ke arah 0°. Sebaliknya, jika pulsa yang diterima motor servo lebih dari 1,5 milidetik maka poros akan berputar ke arah kiri.
Gambar 10.6. Lebar Pulsa Gambar 10.6 adalah sinyal untuk mengontrol sudut motor servo. Sinyal ini berupa sinyal persegi (square) dengan lebar pulsa high berkisar antara 0,6 milidetik sampai 2,4 milidetik. Pulsa dengan pulsa high
int switchPin = 2; // switch input int motor1Pin1 = 3; // pin 2 on L293D int motor1Pin2 = 4; // pin 7 on L293D int enablePin = 9; // pin 1 on L293D void setup() { // set the switch as an input: pinMode(switchPin, INPUT); // set all the other pins you're using as outputs: pinMode(motor1Pin1, OUTPUT); pinMode(motor1Pin2, OUTPUT); pinMode(enablePin, OUTPUT); // set enablePin high so that motor can turn on: digitalWrite(enablePin, HIGH); }
void loop() { // if the switch is high, motor will turn on one direction: if (digitalRead(switchPin) == HIGH) { digitalWrite(motor1Pin1, LOW); // set pin 2 on L293D low digitalWrite(motor1Pin2, HIGH); //set pin 7 on L293D high }
#include // membuat nama objek servo untuk pengontrolan servo Servo myservo; // variable untuk menyimpan posisi servo int pos = 0; void setup() {
// objek servo diletakan pada pin 9 myservo.attach(9); }
void loop() {
// start dari 0 derajar sampai 180 derajat for(pos = 0; pos < 180; pos += 1) {
// pada posisi 1 derajat // memberitahu servo untuk pergi ke posisi 'pos' myservo.write(pos); // tunggu 15ms untuk pencapaian posisi servo delay(15); }
// start dari 180 derajat ke 0 derajat for(pos = 180; pos>=1; pos-=1) {
// memberitahu servo untuk pergi ke posisi 'pos' myservo.write(pos); // tunggu 15ms untuk pencapaian posisi servo delay(15); } }
1. Mahasiswa mampu memahami rangkaian interface Infra merah 2. Mahasiswa mampu mengenali berbagai macam remote control 3. Mahasiswa mampu memprogram mikrokontroler untuk membaca kode remote control control 4. Mahasiswa mampu mengendalikan devias dari jarak jauh
1. Sebuah Komputer 2. Satu set trainer mikrokontroler
Cahaya Infra Merah Infra Merah sebenarnya cahaya normal dengan warna tertentu. Kita tidak bisa melihat warna ini karena panjang gelombang 950 nm nya di bawah spektrum cahaya tampak. Itulah salah satu alasan mengapa IR dipilih untuk tujuan remote control, kita ingin menggunakannya, tapi kita tidak tertarik melihatnya. Meskipun kita tidak dapat melihat cahaya Infra Merah yang dipancarkan dari remote control bukan berarti kita tidak dapat membuatnya terlihat. Sebuah kamera video atau kamera foto digital dapat membuat kita melihat cahaya Infra Merah. Cukup arahkan remote ke kamera tersebut, tekan sembarang tombol maka kita akan melihat kedipan .
memodulasi dengan frekuensi tertentu pada data dijital (berbentuk kedipan) sehingga dengan menset protokol yang sama antara Transmitter dan Receiver maka sumber cahaya infra merah yang lain tidak dapat mempengaruhi data yang dikirim.
Gambar 11.2 Modulasi Data Pada gambar di atas sinyal termodulasi mengendalikan IR LED dari pemancar sinyal ke penerima. Dalam komunikasi data dijital kita mengenal kondisi 1 dan 0 dimana 1 mewakili on(lampu menyala) dan 0 mewakili off (lampu mati). Sinyal 1 dan 0 ini dimodulasi dengan ferekunsi antara 30kHz dan 60kHz.
Gambar 11.3. Pemancar Remote Control
Sinyal yang diterima IR deteksi photo dioda penerima. Sinyal ini diperkuat dan dibatasi oleh pertama 2 tahap. Limiter bertindak sebagai rangkaian AGC untuk mendapatkan tingkat pulsa konstan. Sinyal gelomang kotak dikirim ke Band Pass Filter. Band Pass Filter diset pada frekuensi modulasi unit penerima dan umumnya Frekuensi berkisar antara 30kHz sampai 60kHz. Tahap berikutnya adalah detektor, integrator dan komparator. Tujuan dari tiga blok adalah untuk mendeteksi keberadaan frekuensi modulasi.
Ketiklah program dibawah ini untuk menangkap sinyal infra merah dari remote control dan selanjutnya memproses menjadi kode hexadecimal dan ditampilkan pada layar serial monitor #include int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver } void loop() {
long data; char alamat, remote; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver pinMode(2,INPUT _PULLUP); pinMode(3,INPUT _PULLUP); pinMode(4,INPUT _PULLUP); pinMode(5,INPUT _PULLUP); pinMode(13,OUTPUT); } void baca_dip_switch() { if ((digitalRead(2) == LOW)&&(digitalRead(3) LOW)&&(digitalRead(5) == LOW)) {alamat = '0';} if ((digitalRead(2) == HIGH)&&(digitalRead(3) LOW)&&(digitalRead(5) == LOW)) {alamat = '1';} if ((digitalRead(2) == LOW)&&(digitalRead(3)
==
LOW)&&(digitalRead(4)
==
==
LOW)&&(digitalRead(4)
==
==
HIGH)&&(digitalRead(4)
==
if ((digitalRead(2) == HIGH)&&(digitalRead(3) HIGH)&&(digitalRead(5) == LOW)) {alamat = '7';} if ((digitalRead(2) == LOW)&&(digitalRead(3) LOW)&&(digitalRead(5) == HIGH)) {alamat = '8';} if ((digitalRead(2) == HIGH)&&(digitalRead(3) LOW)&&(digitalRead(5) == HIGH)) {alamat = '9';} if ((digitalRead(2) == LOW)&&(digitalRead(3) LOW)&&(digitalRead(5) == HIGH)) {alamat = 'A';} if ((digitalRead(2) == HIGH)&&(digitalRead(3) LOW)&&(digitalRead(5) == HIGH)) {alamat = 'B';} if ((digitalRead(2) == LOW)&&(digitalRead(3) HIGH)&&(digitalRead(5) == HIGH)) {alamat = 'C';} if ((digitalRead(2) == HIGH)&&(digitalRead(3) HIGH)&&(digitalRead(5) == HIGH)) {alamat = 'D';} if ((digitalRead(2) == LOW)&&(digitalRead(3) HIGH)&&(digitalRead(5) == HIGH))
==
HIGH)&&(digitalRead(4)
==
==
LOW)&&(digitalRead(4)
==
==
LOW)&&(digitalRead(4)
==
==
HIGH)&&(digitalRead(4)
==
==
HIGH)&&(digitalRead(4)
==
==
LOW)&&(digitalRead(4)
==
==
LOW)&&(digitalRead(4)
==
==
HIGH)&&(digitalRead(4)
==
{ //--------------------------------//Remote Sony RM-827S //--------------------------------if (results.value == 0x10){ Serial.println('1'); remote = '1';} else if (results.value == 0x810) { Serial.println('2'); remote = '2';} else if (results.value == 0x410) { Serial.println('3'); remote = '3';} else if (results.value == 0xC10) { Serial.println('4'); remote = '4';} else if (results.value == 0x210) { Serial.println('5'); remote = '5';} else if (results.value == 0xA10) { Serial.println('6'); remote = '6';} else if (results.value == 0x610) {
Serial.println('B'); remote = 'B';} else if (results.value == 0x490) { Serial.println('C'); remote = 'C';} else if (results.value == 0xC90) { Serial.println('D'); remote = 'D';} else if (results.value == 0x90) { Serial.println('E'); remote = 'E';} else if (results.value == 0x890) { Serial.println('F'); remote = 'F';} else if (results.value == 0xA90) { Serial.println('X'); remote = 'X';} else Serial.print(' '); } void RC_chung_he_SMG1() { //---------------------------------
Serial.println('5'); remote = '5';} else if (results.value == 0x2C452C6C) { Serial.println('6'); remote = '6';} else if (results.value == 0x4592E14C) { Serial.println('7'); remote = '7';} else if (results.value == 0x6825E53E) { Serial.println('8'); remote = '8';} else if (results.value == 0x8B8510E8) { Serial.println('9'); remote = '9';} else if (results.value == 0xB9F56762) { Serial.println('0'); remote = '0';} else if (results.value == 0x52A5A66) { Serial.println('A'); remote = 'A';} else if (results.value == 0xCA8CBCC6) { Serial.println('B'); remote = 'B';}
else Serial.print(' '); } void loop() { if (irrecv.decode(&results)) { //data = results.value; RC_Sony_RM827S(); RC_chung_he_SMG1(); irrecv.resume(); // Receive the next value } banding(); // Serial.print(alamat); delay(500); }
1. 2. 3. 4. 5. 6. 7.
Nyalakan computer dengan program Arduino ! Sambungkan Trainer mikrokontroler dengan computer menggunakan kabel USB ! Sambungkan kabel-kabel jumper sesuai dengan praktikum yang dilaksanakan ! Ketiklah program yang diatas pada software Arduino ! Lakukan verifikasi terhadap program, apakah terjadi error atau tidak ! Jika tidak terjadi error lanjutkan dengan mengupload program ke dalam mikrokontroler ! Amati hasilnya apakah sudah sesuai dengan perintah instruktur atau belum, kalau belum
1. Mahasiswa mamahami rangkaian interface mikrokontroller dengan motor stepper 2. Mahasiswa memahami rangkaian driver motor stepper ULN2003 3. Mahasiswa memahami bahasa C Arduino untuk mengatur arah putaran motor stepper 4. Mahasiswa memahami bahasa C Arduino untuk mengatur arah putaran motor stepper dengan menggunakan saklar.
1. Sebuah Komputer 2. Satu set trainer mikrokontroler
Motor stepper adalah perangkat elektromekanis yang bekerja dengan mengubah pulsa elektronis menjadi gerakan mekanis diskrit. Motor stepper bergerak berdasarkan urutan pulsa yang diberikan kepada motor. Karena itu, untuk menggerakkan motor stepper diperlukan pengendali motor stepper yang membangkitkan pulsa-pulsa periodik. Penggunaan motor stepper memiliki beberapa keunggulan dibandingkan dengan penggunaan motor DC biasa. Keunggulannya antara lain adalah : • Sudut rotasi motor proporsional dengan pulsa masukan sehingga lebih mudah diatur. • Motor dapat langsung memberikan torsi penuh pada saat mulai bergerak • Posisi dan pergerakan repetisinya dapat ditentukan secara presisi
Gambar 12.1. Penampang melintang dari motor stepper tipe variable reluctance (VR)
Motor stepper jenis ini memiliki rotor yang berbentuk seperti kaleng bundar (tin can) yang terdiri atas lapisan magnet permanen yang diselang-seling dengan kutub yang berlawanan (perhatikan gambar 12.2). Dengan adanya magnet permanen, maka intensitas fluks magnet dalam motor ini akan meningkat sehingga dapat menghasilkan torsi yang lebih besar. Motor jenis ini biasanya memiliki resolusi langkah (step) yang rendah yaitu antara 7,50 hingga 150 per langkah atau 48 hingga 24 langkah setiap putarannya. Berikut ini adalah ilustrasi sederhana dari motor stepper tipe permanent magnet:
langkah setiap putarannya. Berikut ini adalah penampang melintang dari motor stepper tipe hibrid:
Gambar 12.3. Penampang melintang dari motor stepper tipe hybrid Berdasarkan metode perancangan rangkain pengendalinya, motor stepper dapat dibagi menjadi jenis unipolar dan bipolar. Rangkaian pengendali motor stepper unipolar lebih mudah dirancang karena hanya memerlukan satu switch / transistor setiap lilitannya. Untuk menjalankan dan menghentikan motor ini cukup dengan menerapkan pulsa digital yang hanya terdiri atas tegangan positif dan nol (ground) pada salah satu terminal lilitan (wound) motor sementara terminal lainnya dicatu dengan tegangan positif konstan (VM) pada bagian tengah (center tap) dari lilitan (perhatikan gambar 12.4).
Gambar 12.5. Motor stepper dengan lilitanbipolar Berikut ini adalah ilustrasi struktur motor stepper sederhana dan pulasa yang dibutuhkan untuk menggerakkannya:
Gambar 12.7. Lilitan Motor Stepper Komponen yang diperlukan : 1. Lampu led merah 4x 2. Resistor 1K Ω 4x 3. Dioda in4001 (1A) 4. Potensio/trimpot (VR) 10K 1 5. IC ULN 2803 6. Breadboard 7. Kabel Jumper 8. Motor Stepper Unipolar 4 phase 9. Power Supply 5V 1A 10. Minimum sistem board Arduino
//Kendali Kecepatan Motor Stepper dengan Potensio int tunda = 0; //deklarasi variabel tunda int sensorValue = 0; //deklarasi variabel sensor value int outputValue = 0; const int phase1 = 2;
//deklarasi pin phase1 pada kaki port D2
void loop() { siklusADC(); powerStepper(); }
//loping / pengulangan terus menerus //deklarasi void siklus ADC //deklarasi void powerStepper
void siklusADC() //kode program void siklusADC { sensorValue = analogRead (analogIn); //membaca sinyal analog pada pin analogIn outputValue = map (sensorValue, 0, 1023, 0, 255); //maping dari nilai 1023 jadi 255 Serial.print ("outputValue= "); //mencetak pada serial monitor Serial.println (outputValue, DEC); //menulis nilai dalam desimal if (outputValue < 20) {tunda = 500;} else if (outputValue < 30) {tunda = 300;} else if (outputValue < 70) {tunda = 200;} else if (outputValue < 100)
//membuat tingkatan dengan metode if //memberikan nilai pada variabel tunda
delayMicroseconds (tunda);
//jeda waktu delay sama dengan nilai tunda
} void powerStepper() { digitalWrite (phase1, HIGH); digitalWrite (phase2, LOW); digitalWrite (phase3, LOW); digitalWrite (phase4, LOW); delay (tunda); digitalWrite (phase1, LOW); digitalWrite (phase2, LOW); digitalWrite (phase3, LOW); digitalWrite (phase4, HIGH); delay (tunda); digitalWrite (phase1, LOW); digitalWrite (phase2, LOW); digitalWrite (phase3, HIGH); digitalWrite (phase4, LOW); delay (tunda); digitalWrite (phase1, LOW); digitalWrite (phase2, HIGH); digitalWrite (phase3, LOW);
//susunan program void powerStepper //tahap sinyal pertama phase1 diberi sinyal high //tahap sinyal pertama phase2 diberi sinyal low // tahap sinyal pertama phase3 diberi sinyal low // tahap sinyal pertama phase4 diberi sinyal low //jeda waktu delay sama dengan nilai tunda //tahap sinyal kedua
// tahap sinyal ketiga
// tahap sinyal ke empat
1. Mahasiswa mampu membuat interface mikrokontroler Arduino dengan modul sensor ultra sonic HC-SR04 2. Mahasiswa mampu membuat program untuk mengendalikan modul Sensor Ultrasonic 3. Mahasiswa mampu menggunakan modul sensor ultrasonic sebagai alat ukur jarak
1. Sebuah Komputer 2. Satu set trainer mikrokontroler
Sensor jarak ultrasonik sangat cocok dipakai untuk aplikasi-aplikasi yang perlu melakukan pengukuran jarak. Secara umum, sensor ini sangat populer untuk dipakai pada aplikasi-aplikasi robotika. Selain itu, sensor ini juga bisa bermanfaat dalam sistem security dan sebagai alternatif lain penggantian sensor jarak infrared. Sensor jarak ultrasonik yang dipakai dalam tugas akhir ini adalah sensor “ Parallax's PING)))™ Ultrasonic Range Finder ” atau biasa disebut dengan sensor PING. Berdasarkan datasheet, sensor PING ini dapat digunakan untuk mengukur jarak benda sejauh 3cm sampai 300cm. Dimensi dan kaki pin sensor PING ditunjukkan pada Gambar 13.1.
ultrasonik akibat objek. Maka jarak yang diukur dapat dilihat pada Persamaan berikut. Ilustrasi cara kerja sensor PING ditunjukkan pada Gambar 13.2. Untuk dapat lebih memahami penggunaan cara kerja sensor PING, pada Gambar 2.13 ditunjukkan diagram waktu sensor PING.
Gambar 13.2. Diagram Waktu Sensor Ultrasonic
Selain itu, sensor PING dapat digunakan untuk mendeteksi permukaan air, tetapi tidak dianjurkan untuk digunakan di lingkungan yang basah.
Gambar 13.3. Deteksi Permukaan
HC-SR04 Ultrasonic Sensor adalah sensor jarak / jarak yang sangat terjangkau yang telah digunakan terutama untuk menghindari objek dalam berbagai proyek robotika. Ini pada dasarnya memberikan Arduino mata / kesadaran spasial dan dapat mencegah robot dari menabrak atau jatuh dari meja. Ini juga telah digunakan dalam aplikasi menara, tingkat air penginderaan, dan bahkan sebagai sensor parkir. Proyek sederhana ini akan menggunakan sensor HC-SR04 dengan Arduino dan sketsa Processing untuk memberikan tampilan interaktif kecil yang rapi pada layar komputer Anda.
void setup() { Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(LEDPin, OUTPUT); // Use LED indicator (if required) } void loop() { /* The following trigPin/echoPin cycle is used to determine the distance of the nearest object by bouncing soundwaves off of it. */ digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); //Calculate the distance (in cm) based on the speed of sound. distance = duration/58.2; if (distance >= maximumRange || distance <= minimumRange){ /* Send a negative number to computer and Turn LED ON to indicate "out of range" */ Serial.println("-1"); digitalWrite(LEDPin, HIGH); } else {
LiquidCrystal lcd(10, 9, 5, 4, 3, 2); #define TRIGGER_PIN 12 #define ECHO_PIN 11 #define MAX_DISTANCE 300 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm. int tb_ukuran = 6; int tb_pindah = 7; int menu = 1; double inchi = 2.54; boolean swit; double jarak; NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance. void setup() { Serial.begin(9600); // Open serial monitor at 9600 baud to see ping results. lcd.begin(16, 2); pinMode(tb_ukuran,INPUT_PULLUP); pinMode(tb_pindah,INPUT_PULLUP); unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).
if (menu > 4) menu = 1; } else {} if (digitalRead(tb_ukuran) == LOW) { swit = !swit; delay(500);} else {swit = swit;} } void ubah_ukuran() { while (swit == true) { lcd.setCursor(0,0); lcd.print(">Satuan Ukuran <"); lcd.setCursor(0,1); lcd.print(" "); if (menu == 1) { lcd.setCursor(5,1); lcd.print("Meter"); }
else {} tombol(); delay(500); } } void loop() { tombol(); ubah_ukuran(); delay(50); // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings. double uS = sonar.ping(); // Send ping, get ping time in microseconds (uS). lcd.setCursor(0,0); lcd.print("Ukur Jarak UltraSonic"); lcd.setCursor(0,1); lcd.print("Jarak: "); if (menu == 1) { jarak = (uS / US_ROUNDTRIP_CM)/100; lcd.setCursor(7,1);
} if (menu == 3) { jarak = (uS / US_ROUNDTRIP_CM)*10; lcd.setCursor(7,1); lcd.print(jarak); // Convert ping time to distance in mm and print result (0 = outside set distance range) lcd.setCursor(14,1); lcd.print("mm"); } if (menu == 4) { jarak = (uS / US_ROUNDTRIP_CM)/inchi; lcd.setCursor(7,1); lcd.print(jarak); // Convert ping time to distance in inchi and print result (0 = outside set distance range) lcd.setCursor(12,1); lcd.print("inch"); } }
1. Mahasiswa memahami tentang real time clock 2. Mahasiswa memahami rangkaian interface RTC dengan mikrokontroller 3. Mahasiswa memahami pembuatan program pengambilan data RTC
1. Sebuah Komputer 2. Satu set trainer mikrokontroler
disingkat adalah jam di komputer yang umumnya berupa sirkuit terpadu yang berfungsi sebagai pemelihara waktu. RTC umumnya memiliki catu daya terpisah dari catu daya komputer (umumnya berupa baterai litium) sehingga dapat tetap berfungsi ketika catu daya komputer terputus. Kebanyakan RTC menggunakan oskilator kristal. RTC tipe DS1307 merupakan jenis pewaktu yang menggunakan komunikasi serial untuk operasi t ulis baca, dengan spesifikasi berikut ini: Real-time clock (RTC) meyimpan data-data detik, menit, jam, tanggal, bulan, hari dalam seminggu, dan tahun valid hingga 2100;
56-byte, battery-backed, RAM nonvolatile (NV) RAM untuk penyimpanan; Antarmuka serial Two-wire (I2C)
Fungsi Pin DS1307 No 1
Nama Pin X1
2
X2
Fungsi Oscillator Crystal 32,768KHz
3 4 5
VBAT GND SDA
Battery Input (+3V) Ground Serial Data
6 7
SCL SQW/OUT
8
VCC
Blok diagram internal DS1307 adalah:
Serial Clock Input Square Wave/Output Driver Supply Power
Serial Bus Interface And Address Register merupakan jalur data serial dan pengalamatan register DS1307 dengan akses pulsa melalui SCL dan SDA. SCL ( Serial Clock ) berfungsi sebagai clock input I2C dan digunakan untuk sinkronisasi data serial. SDA ( Serial Data ) berfungsi sebagai data input/output untuk I2C serial, baik SCL dan SDA masih memerlukan pull up eksternal. Control Logic merupakan pengendali data-data yang dibaca ataupun ditulis melalui SCL dan SDA dengan pewaktu dari osilator kristal. Buffer (7 bytes) adalah penyangga sementara sebelum data diterima atau dikirim, berkisar 7 bytes (7 x 8 bit) sebagai transit pengalamatan register 8 bit detik-menit-jam-hari-tanggal-bulan-tahun. Clock , Calender and Control Register atau CR berisi informasi clock dan kalender serta register pengendali untuk mengontrol pengoperasian SQW/OUT. Clock and Calender merupakan register RTC dengan waktu dan kalender dengan akses pembacaan dan penulisan register byte dalam format BCD seperti yang diperlihatkan pada tabel berikut:
.
Bentuk fisik dan rangkaian pengoperasian DS1307 adalah sebagai berikut:
(a)
(b)
14.3. (a)Bentuk fisik (b) DS1307 Circuit C ircuit
Skema rangkaian DS1307 di modul AVR adalah Y1
RTC
void setup() { DDRC|=_BV(2) |_BV(3); // POWER:Vcc Gnd PORTC |=_BV(3); |=_BV(3); // VCC PINC3 pinMode(ledPin, OUTPUT); Serial.begin(9600); RTC.get(rtc,true); if(rtc[6]<12){ RTC.stop(); RTC.set(DS1307_SEC,1); RTC.set(DS1307_MIN,27); RTC.set(DS1307_HR,01); RTC.set(DS1307_DOW,7); RTC.set(DS1307_DATE,12); RTC.set(DS1307_MTH,2); RTC.set(DS1307_YR,12); RTC.start(); } //RTC.SetOutput(LOW); //RTC.SetOutput(HIGH); //RTC.SetOutput(DS1307_SQW1HZ); //RTC.SetOutput(DS1307_SQW4KHZ); //RTC.SetOutput(DS1307_SQW8KHZ);
delay(500); digitalWrite(ledPin, LOW); delay(500); if (Serial.available() > 6) { for(i=0;i<7;i++){ rr[i]=BCD2DEC(Serial.read()); } Serial.println("SET TIME:"); RTC.stop(); RTC.set(DS1307_SEC,rr[6]); RTC.set(DS1307_MIN,rr[5]); RTC.set(DS1307_HR,rr[4]); RTC.set(DS1307_DOW,rr[3]); RTC.set(DS1307_DATE,rr[2]); RTC.set(DS1307_MTH,rr[1]); RTC.set(DS1307_YR,rr[0]); RTC.start(); } } char BCD2DEC(char var){ if (var>9){ var=(var>>4)*10+(var&0x0f); }