Gambar 4. 1 Laptop
Laptop adalah komputer bergerak (bisa dipindahkan dengan mudah) yang
berukuran relatif kecil dan ringan, beratnya berkisar dari 1-6 kg, tergantung ukuran,
bahan, dari spesifikasi laptop tersebut, laptop dapat digunakan dalam lingkungan yang
berbeda dari komputer. Mereka termasuk layar, keyboard, dan trackpad atau trackball,
yang berfungsi sebagai mouse. Laptop berfungsi sebagai media yang menjalankan
circuit simulator TinkerCad.
4.2.2. Proteus 8 Professional
Gambar 4. 2 Proteus
Software Proteus adalah sebuah software yang digunakan untuk mendesain PCB
yang juga dilengkapi dengan simulasi PSpice pada level skematik sebelum rangkaian
skematik di-upgrade ke PCB untuk memastikan PCB dapat berfungsi dengan
semestinya. Pada praktikum ini, proteus berfungsi sebagai simulator untuk mendesain
PCB rangkaian encoder rotary dalam praktikum ini.
4.2.3. Arduino IDE
4.2.5. Tinkercad
Gambar 4. 5 TinkerCad
TinkerCad merupakan sebuah platform berbasis web penyedia sarana untuk
belajar secara online terkait desain 3D, rangkaian elektronika, dan codeblock. Pada
percobaan praktikum, TinkerCad berfungsi sebagai circuit cimulator yang digunakan
untuk menyusun rangkaian circuit dalam percobaan praktikum.
4.2.6. Breadboard
Gambar 4. 6 Breadboard
Breadboard adalah sebuah papan yang digunakan untuk membuat rangkaian
elektronik sementara dengan tujuan uji coba atau prototipe tanpa harus menyolder. Pada
percobaan praktikum, Breadboard berfungsi sebagai tempat merangkai circuit.
4.2.7. LED
4.2.9. Resistor
Gambar 4. 9 Resistor
Resistor adalah komponen Elektronika Pasif yang memiliki nilai resistansi atau
hambatan tertentu yang berfungsi untuk membatasi dan mengatur arus listrik dalam
suatu rangkaian Elektronika.
4.2.10. Virtual Terminal
Gambar 4. 13 Proteus
Software Proteus 8 Professional merupakan salah satu software elektronik yang
digunakan untuk membantu para designer dalam merancang dan mensimulasikan suatu
rangkaian elektronik. Software ini memiliki dua fungsi sekaligus dalam satu paket,
yaitu sebagai software untuk menggambar skematis dan digunakan sebagai merancang
gambar Printed Circuit Board (PCB).
Software Proteus 8 Profesional mempunyai banyak library dengan beberapa
komponen komponen-komponen pasif, Analog, Trasistor, SCR, FET, jenis
button/tombol, jenis saklar/relay, IC digital, IC penguat, IC programmable
(microcontroller) dan IC memory. Selain didukung dengan kelengkapan komponen,
juga didukung dengan kelengkapan alat ukur seperti Voltmeter, Ampere meter,
Oscilloscope, Signal Analyzers, serta pembangkit Frekuensi.
(Sumber: https://calesmart.com/artikel/Pengenalan-simulasi-elektronika-dengan-Software-Proteus-8-
Profesional_132.html)
4.3.3. Tinkercad
TinkerCad merupakan sebuah media berbasis web yang menyediakan sarana
untuk belajar Desain 3D, rangkaian elektronika, dan codeblock secara online.
TinkerCad adalah salah satu produk Autodesk yang sudah banyak memperkenalkan
software-software komputer untuk desain dan animasi. TinkerCad pertama didirikan
pada tahun 2011 dan masih dikembangkan sampai saat ini hingga menjadi salah satu
media yang direkomendasikan untuk digunakan sebagai media pembelajaran.
4.3.4. Interupsi
Interupsi sering juga disebut interrupt adalah suatu permintaan khusus pada
microprocessor untuk melakukan sesuatu. Interupsi pada dasarnya kalau dalam dunia
computer sering kita kenal dengan penghentian sementara proses program yang sedang
berjalan. Apabila terjadi yang namanya interupsi maka computer kita akan
menghentikan dahulu apa yang sedang dikerjakannya, terus setelah itu melakukan apa
yang di minta oleh yang menginterupsi, dan apabila sudah selesai maka proses program
akan kembali ke program sebelum terjadinya interupsi yang tadi.
Fungsi interupsi satu-satunya adalah sebuah mekanisme penghentian atau
pengalihan sementara pengolahan instruksi dalam CPU kepada routine interupsi yang
mana tujuan secara umumnya yaitu untuk manajemen pengeksekusian routine instruksi
agar efektif.
(sumber:https://www.kompasiana.com/iqbaldalimunthe/566999fc729773540bb70241/interupsi-
pada-komputer)
4.3.5. Timer
Timer interupsi memungkinkan untuk melakukan tugas pada interval waktu
yang sangat spesifik terlepas dari apa pun yang terjadi dalam kode. Dalam instruksi ini
akan menjelaskan cara mengatur dan menjalankan interupsi di Bersihkan Timer pada
Mode Bandingkan Pertandingan atau CTC.
Ketika menulis sketsa Arduino, Arduino melakukan semua perintah yang di-
enkapsulasi dalam fungsi loop () {} sesuai urutannya, namun, sulit untuk menentukan
waktu peristiwa dalam loop (). Beberapa perintah membutuhkan waktu lebih lama
daripada yang lain untuk dieksekusi, beberapa tergantung pada pernyataan kondisional
dan beberapa fungsi perpustakaan Arduino (seperti digitalWrite atau analogRead)
terdiri dari banyak perintah. Pengatur waktu Arduino memungkinkan untuk sejenak
menghentikan urutan normal dari peristiwa yang terjadi dalam fungsi loop () pada
interval waktu yang tepat,
(sumber:https://id.howtodogood.com/81656-Arduino-Timer-Interrupts-24)
4.4. Langkah Kerja
4.4.1. Percobaan 1 dan 2
1. Buka Proteus 8 Professional dengan cara run as administrator.
9. Rangkai LCD, virtual terminal, ground dan power dengan board Arduino Mega
2560 seperti berikut:
Hubungkan semua kaki katoda LED ke GND.
Hubungkan kaki anoda LED 1 ke pin 5 Arduino.
Hubungkan kaki anoda LED 2 ke pin 6 Arduino.
Hubungkan kaki anoda LED 3 ke pin 7 Arduino.
Hubungkan kaki anoda LED 4 ke pin 8 Arduino.
Hubungkan kaki anoda LED 5 ke pin 9Arduino.
Hubungkan GND Arduino ke Ground dan VCC Arduino ke Power.
Hubungkan pin RXD virtual terminal ke pin 1, dan pin TXD ke pin 0.
#include <TimerOne.h>
int ms;
int led1 = 5;
int led2 = 6;
int led3 = 7;
int led4 = 8;
int led5 = 9;
int LED[5];
void setup() {
// put your setup code here, to run once:
//pinMode(10, OUTPUT);
Timer1.initialize(500000);
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
pinMode(led5,OUTPUT);
Timer1.attachInterrupt(ledInterrupt);
}
void loop(){
digitalWrite(led1,HIGH);
delay(1000);
digitalWrite(led1,LOW);
delay(1000);
}
void ledInterrupt() {
ms++;
if(ms%2==0){
LED[1]=!LED[1];
digitalWrite(led2,LED[1]);
}
if(ms%2==0){
LED[2]=!LED[2];
digitalWrite(led3,LED[2]);
}
if(ms%2==0){
LED[3]=!LED[3];
digitalWrite(led4,LED[3]);
}
if(ms%2==0){
LED[4]=!LED[4];
digitalWrite(led5,LED[4]);
}
}
void modePin(){
for(i=5;i<=9; i++){
pinMode(i,OUTPUT);
}
}
void setup() {
// put your setup code here, to run once:
modePin();
}
void loop() {
// put your main code here, to run repeatedly:
millisnow=millis();
if(millisnow-mil0>=500){
if (state9==0) {
digitalWrite(9, HIGH);
mil0=millisnow;
state9=1;
}
else if(state9==1){
digitalWrite(9, LOW);
mil0=millisnow;
state9=0;
}
}
if(millisnow-mil1>=1000){
if (state8==0) {
digitalWrite(8, HIGH);
mil1=millisnow;
state8=1;
}
else if(state8==1){
digitalWrite(8, LOW);
mil1=millisnow;
state8=0;
}
}
if(millisnow-mil2>=2000){
if (state7==0) {
digitalWrite(7, HIGH);
mil2=millisnow;
state7=1;
else if(state7==1){
digitalWrite(7, LOW);
mil2=millisnow;
state7=0;
}
}
if(millisnow-mil3>=3000){
if (state6==0) {
digitalWrite(6, HIGH);
mil3=millisnow;
state6=1;
}
else if(state6==1){
digitalWrite(6, LOW);
mil3=millisnow;
state6=0;
}
}
if(millisnow-mil4>=4000){
if (state5==0) {
digitalWrite(5, HIGH);
mil4=millisnow;
state5=1;
}
else if(state5==1){
digitalWrite(5, LOW);}}
15. Verify kode program percobaan 1 dan percobaan 2 dengan menekan tombol tanda
checklist.
17. Buka Proteus kembali dan double click kiri pada board Arduino Mega 2560 dan
tempel kode hex percobaan 1 pada program file.
18. Buka Proteus kembali dan double click kiri pada board Arduino Mega 2560 dan
tempel kode hex percobaan 2 pada program file.
else if(state7==1){
digitalWrite(7, LOW);
mil2=millisnow;
state7=0;
}
}
Gambar 4. 30 Memasukkan kode hex pada board Arduino Mega 2560
//Kelompok 12
//nama nim
int count_pulse = 0;
void setup()
{
Serial.begin(9600);
for (int i=6; i<8; i++){
pinMode(i, OUTPUT);
}
attachInterrupt(digitalPinToInterrupt(2), subroutine, RISING);
}
void loop()
{
ledoff();
digitalWrite(7, HIGH);
ledoff();
digitalWrite(6, HIGH);
ledoff();
digitalWrite(7, HIGH);
digitalWrite(6, HIGH);
ledoff();
void ledoff(){
delay(1500);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
void subroutine(){
Serial.print("Klik ke-");
Serial.println(count_pulse);
count_pulse++;
}
5. Pilih menu code dan ubah ke text dan memasukkan kode program diatas.
#include <TimerOne.h>
int ms;
int led1 = 5;
int led2 = 6;
int led3 = 7;
int led4 = 8;
int led5 = 9;
int LED[5];
void setup() {
// put your setup code here, to run once:
//pinMode(10, OUTPUT);
Timer1.initialize(500000);
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
pinMode(led5,OUTPUT);
Timer1.attachInterrupt(ledInterrupt);
}
void loop(){
digitalWrite(led1,HIGH);
delay(1000);
digitalWrite(led1,LOW);
delay(1000);
}
void ledInterrupt() {
ms++;
if(ms%2==0){
LED[1]=!LED[1];
digitalWrite(led2,LED[1]);
}
if(ms%2==0){
LED[2]=!LED[2];
digitalWrite(led3,LED[2]);
}
if(ms%2==0){
LED[3]=!LED[3];
digitalWrite(led4,LED[3]);
}
if(ms%2==0){
LED[4]=!LED[4];
digitalWrite(led5,LED[4]);
}
}
#include <TimerOne.h> Merupakan pemanggilan Pustaka timer agar bisa
digunakan dalam percobaan, int ms; adalah untuk mendeklarasikan ms sebagai
pengaturan timer dan int led1 = 5; untuk mendeklarasikan dimana pin led tersebut
dipasang,
Kemudian ada void setup() { yg akan menjalankan sebuah program yang
hanya dijalankan sekali, seperti saat penyalaan pertama kali. Di dalamnya terdapat kode
yaitu Timer1.initialize(500000); yang digunakan untuk mengatur timer
penghitung untuk menghasilkan waktu interupsi setiap 500000 mikro detik, Untuk
mendeklarasikan dimana masukan dan keluaran menggunakan pinMode(2, OUTPUT);
untuk keluaran digital. Untuk menjalankan fungsi setiap kali periode pengatur waktu
selesai menggunakan sintaks ini Timer1.attachInterrupt(ledInterrupt);.
Lalu terdapat void loop() { yang akan menjalankan sebuah program yang
akan diulang ulang oleh mikrokontroler sampai mikrokontroler tersebut dimatikan. Di
dalamnya terdapat kode kode yaitu digitalWrite(led1,HIGH); yang digunakan untuk
menyalakan led 1 selama 1 detik karena menggunakan sintaks delay(1000); .
kemudian terdapat digitalWrite(led1,LOW); yang digunakan untuk mematikan
lampu led 1 selama 1 detik karena menggunakan sintaks delay(1000);.
Lalu terdapat void ledInterrupt() { yang merupakan kumpulan dari fungsi
yang akan dijalankan saat melakukan interupsi. Di dalamnya terdapat kode kode yaitu,
ms++; adalah digunakan untuk menambah nilainya secara incremental. Pada
pengkondisian di dalam kode diatas menggunakan kondisi if, if(ms%2==0){ digunakan
untuk pengkondisian jika variable ms memiliki sisa hasil bagi sama dengan 2 maka
sintaks di dalam pengkondisian tersebut akan berjalan. Tanda seru atau ! seperti di
LED[1]=!LED[1]; digunakan untuk membalik dari suatu variabel, pada kode diatas
untuk membalik kondisi pada led 1, dari menyala menjadi mati dan mati menjadi
menyala. digitalWrite(led2,LED[1]); digunakan untuk menyalakan atau
mematikan sesuai keadaan HIGH maupun LOW, karena menggunakan sintaks
LED[1]=!LED[1]; maka untuk menyalakan lampu, program memerlukan kondisi dari
led yang lain dan membaiknya sebelum menyalakan maupun mematikan led tersebut.
Alur dari led menyala adalah, diketahui terdapat 5 led, led 1 sampai led 5. Led 1
akan menyala selama 1 detik dan mati dalam satu detik, sementara untuk led 2 – 5
menyala dan mati dengan periode 0,5 detik dikarenakan adanya interrupt.
void setup() {
// put your setup code here, to run once:
modePin();
}
void loop() {
// put your main code here, to run repeatedly:
millisnow=millis();
if(millisnow-mil0>=500){
if (state9==0) {
digitalWrite(9, HIGH);
mil0=millisnow;
state9=1;
}
else if(state9==1){
digitalWrite(9, LOW);
mil0=millisnow;
state9=0;
}
}
if(millisnow-mil1>=1000){
if (state8==0) {
digitalWrite(8, HIGH);
mil1=millisnow;
state8=1;
}
else if(state8==1){
digitalWrite(8, LOW);
mil1=millisnow;
state8=0;
}
}
if(millisnow-mil2>=2000){
if (state7==0) {
digitalWrite(7, HIGH);
mil2=millisnow;
state7=1;
}
else if(state7==1){
digitalWrite(7, LOW);
mil2=millisnow;
state7=0;
}
}
if(millisnow-mil3>=3000){
if (state6==0) {
digitalWrite(6, HIGH);
mil3=millisnow;
state6=1;
}
else if(state6==1){
digitalWrite(6, LOW);
mil3=millisnow;
state6=0;
}
}
if(millisnow-mil4>=4000){
if (state5==0) {
digitalWrite(5, HIGH);
mil4=millisnow;
state5=1;
}
else if(state5==1){
digitalWrite(5, LOW);
mil4=millisnow;
state5=0;
}
}
}
int count_pulse = 0;
void setup()
{
Serial.begin(9600);
for (int i=6; i<8; i++){ //beri penjelasan disini
pinMode(i, OUTPUT); //beri penjelasan disini
}
attachInterrupt(digitalPinToInterrupt(2), subroutine, RISING);
//untuk kode di atas beri penjelasan disini
}
void loop()
{
ledoff(); //beri penjelasan disini
digitalWrite(7, HIGH); //beri penjelasan disini
ledoff(); //beri penjelasan disini
digitalWrite(6, HIGH); //beri penjelasan disini
ledoff(); //beri penjelasan disini
digitalWrite(7, HIGH); //beri penjelasan disini
digitalWrite(6, HIGH); //beri penjelasan disini
ledoff(); //beri penjelasan disini
}
void ledoff(){
delay(1500); //beri penjelasan disini
digitalWrite(6, LOW); //beri penjelasan disini
digitalWrite(7, LOW); //beri penjelasan disini
}
void subroutine(){
Serial.print("Klik ke-"); //beri penjelasan disini
Serial.println(count_pulse); //beri penjelasan disini
count_pulse++; //beri penjelasan disini
}
void loop() {
void loop()
{
ledoff(); // memanggil fungsi led off
digitalWrite(7, HIGH); //menghidupkan led 7
ledoff();
digitalWrite(6, HIGH);// menghidupkan led 6
ledoff();
digitalWrite(7, HIGH);
digitalWrite(6, HIGH);
ledoff();
}
void ledoff(){
delay(1500);// menjeda program 1,5 detik
digitalWrite(6, LOW);// mematikan LED 6
digitalWrite(7, LOW);//mematikan LED 7
}
void lampu (){ //fungsi interupsi
digitalWrite(8, !digitalRead(8));} //membalik kondisi LED 8
Pada program diatas digunakan sebuah interupsi berjenis change yang akan
memanggil interupsi pada saat kondisi pin berubuh baik saat HIGH ke LOW atau
sebaliknya. Pada saat interupsi attachInterrupt(digitalPinToInterrupt(2),
lampu, CHANGE); akan memanggil fungsi “ lampu”, pada fungsi ini akan membalik
kondisi dari LED 8 dengan digitalWrite(8, !digitalRead(8));. Pada void loop
diberikan suatu perintah yang akan memanggil fungsi yang akan mematikan LED 6 dan
7 dilanjutkan menyalakan LED 6 dan & dengan diberikan jeda memanggil fungsi
mematikan kedua LED dilanjutkan menyalakan ke dua LED dan memanggil fungsi
untuk mematikan LED. Pada setiap fungsi diberikan delay 1,5 detik. Sehingga hasil
akhir akan sama dengan apa yang dinginkan.